2024-09-02 11:57:10 +00:00

8554 lines
678 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>mpi_collectives</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
<script src='../assets/iframeResizer.contentWindow.min.js'></script>
<style type="text/css">
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: var(--jp-cell-editor-active-background) }
.highlight { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) }
.highlight .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */
.highlight .err { color: var(--jp-mirror-editor-error-color) } /* Error */
.highlight .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */
.highlight .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */
.highlight .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */
.highlight .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */
.highlight .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */
.highlight .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */
.highlight .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */
.highlight .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */
.highlight .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */
.highlight .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */
.highlight .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */
.highlight .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */
.highlight .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */
.highlight .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */
.highlight .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */
.highlight .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */
.highlight .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */
.highlight .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */
.highlight .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */
.highlight .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */
.highlight .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */
.highlight .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */
.highlight .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */
.highlight .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */
.highlight .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */
.highlight .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */
.highlight .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */
.highlight .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */
.highlight .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */
.highlight .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */
.highlight .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */
.highlight .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */
</style>
<style type="text/css">
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*
* Mozilla scrollbar styling
*/
/* use standard opaque scrollbars for most nodes */
[data-jp-theme-scrollbars='true'] {
scrollbar-color: rgb(var(--jp-scrollbar-thumb-color))
var(--jp-scrollbar-background-color);
}
/* for code nodes, use a transparent style of scrollbar. These selectors
* will match lower in the tree, and so will override the above */
[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar,
[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar {
scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent;
}
/* tiny scrollbar */
.jp-scrollbar-tiny {
scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent;
scrollbar-width: thin;
}
/* tiny scrollbar */
.jp-scrollbar-tiny::-webkit-scrollbar,
.jp-scrollbar-tiny::-webkit-scrollbar-corner {
background-color: transparent;
height: 4px;
width: 4px;
}
.jp-scrollbar-tiny::-webkit-scrollbar-thumb {
background: rgba(var(--jp-scrollbar-thumb-color), 0.5);
}
.jp-scrollbar-tiny::-webkit-scrollbar-track:horizontal {
border-left: 0 solid transparent;
border-right: 0 solid transparent;
}
.jp-scrollbar-tiny::-webkit-scrollbar-track:vertical {
border-top: 0 solid transparent;
border-bottom: 0 solid transparent;
}
/*
* Lumino
*/
.lm-ScrollBar[data-orientation='horizontal'] {
min-height: 16px;
max-height: 16px;
min-width: 45px;
border-top: 1px solid #a0a0a0;
}
.lm-ScrollBar[data-orientation='vertical'] {
min-width: 16px;
max-width: 16px;
min-height: 45px;
border-left: 1px solid #a0a0a0;
}
.lm-ScrollBar-button {
background-color: #f0f0f0;
background-position: center center;
min-height: 15px;
max-height: 15px;
min-width: 15px;
max-width: 15px;
}
.lm-ScrollBar-button:hover {
background-color: #dadada;
}
.lm-ScrollBar-button.lm-mod-active {
background-color: #cdcdcd;
}
.lm-ScrollBar-track {
background: #f0f0f0;
}
.lm-ScrollBar-thumb {
background: #cdcdcd;
}
.lm-ScrollBar-thumb:hover {
background: #bababa;
}
.lm-ScrollBar-thumb.lm-mod-active {
background: #a0a0a0;
}
.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {
height: 100%;
min-width: 15px;
border-left: 1px solid #a0a0a0;
border-right: 1px solid #a0a0a0;
}
.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {
width: 100%;
min-height: 15px;
border-top: 1px solid #a0a0a0;
border-bottom: 1px solid #a0a0a0;
}
.lm-ScrollBar[data-orientation='horizontal']
.lm-ScrollBar-button[data-action='decrement'] {
background-image: var(--jp-icon-caret-left);
background-size: 17px;
}
.lm-ScrollBar[data-orientation='horizontal']
.lm-ScrollBar-button[data-action='increment'] {
background-image: var(--jp-icon-caret-right);
background-size: 17px;
}
.lm-ScrollBar[data-orientation='vertical']
.lm-ScrollBar-button[data-action='decrement'] {
background-image: var(--jp-icon-caret-up);
background-size: 17px;
}
.lm-ScrollBar[data-orientation='vertical']
.lm-ScrollBar-button[data-action='increment'] {
background-image: var(--jp-icon-caret-down);
background-size: 17px;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
| Distributed under the terms of the BSD 3-Clause License.
|
| The full license is in the file LICENSE, distributed with this software.
|----------------------------------------------------------------------------*/
.lm-Widget {
box-sizing: border-box;
position: relative;
overflow: hidden;
}
.lm-Widget.lm-mod-hidden {
display: none !important;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {
/* Title is rotated for horizontal accordion panel using CSS */
display: block;
transform-origin: top left;
transform: rotate(-90deg) translate(-100%);
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
| Distributed under the terms of the BSD 3-Clause License.
|
| The full license is in the file LICENSE, distributed with this software.
|----------------------------------------------------------------------------*/
.lm-CommandPalette {
display: flex;
flex-direction: column;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.lm-CommandPalette-search {
flex: 0 0 auto;
}
.lm-CommandPalette-content {
flex: 1 1 auto;
margin: 0;
padding: 0;
min-height: 0;
overflow: auto;
list-style-type: none;
}
.lm-CommandPalette-header {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.lm-CommandPalette-item {
display: flex;
flex-direction: row;
}
.lm-CommandPalette-itemIcon {
flex: 0 0 auto;
}
.lm-CommandPalette-itemContent {
flex: 1 1 auto;
overflow: hidden;
}
.lm-CommandPalette-itemShortcut {
flex: 0 0 auto;
}
.lm-CommandPalette-itemLabel {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.lm-close-icon {
border: 1px solid transparent;
background-color: transparent;
position: absolute;
z-index: 1;
right: 3%;
top: 0;
bottom: 0;
margin: auto;
padding: 7px 0;
display: none;
vertical-align: middle;
outline: 0;
cursor: pointer;
}
.lm-close-icon:after {
content: 'X';
display: block;
width: 15px;
height: 15px;
text-align: center;
color: #000;
font-weight: normal;
font-size: 12px;
cursor: pointer;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
| Distributed under the terms of the BSD 3-Clause License.
|
| The full license is in the file LICENSE, distributed with this software.
|----------------------------------------------------------------------------*/
.lm-DockPanel {
z-index: 0;
}
.lm-DockPanel-widget {
z-index: 0;
}
.lm-DockPanel-tabBar {
z-index: 1;
}
.lm-DockPanel-handle {
z-index: 2;
}
.lm-DockPanel-handle.lm-mod-hidden {
display: none !important;
}
.lm-DockPanel-handle:after {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
content: '';
}
.lm-DockPanel-handle[data-orientation='horizontal'] {
cursor: ew-resize;
}
.lm-DockPanel-handle[data-orientation='vertical'] {
cursor: ns-resize;
}
.lm-DockPanel-handle[data-orientation='horizontal']:after {
left: 50%;
min-width: 8px;
transform: translateX(-50%);
}
.lm-DockPanel-handle[data-orientation='vertical']:after {
top: 50%;
min-height: 8px;
transform: translateY(-50%);
}
.lm-DockPanel-overlay {
z-index: 3;
box-sizing: border-box;
pointer-events: none;
}
.lm-DockPanel-overlay.lm-mod-hidden {
display: none !important;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
| Distributed under the terms of the BSD 3-Clause License.
|
| The full license is in the file LICENSE, distributed with this software.
|----------------------------------------------------------------------------*/
.lm-Menu {
z-index: 10000;
position: absolute;
white-space: nowrap;
overflow-x: hidden;
overflow-y: auto;
outline: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.lm-Menu-content {
margin: 0;
padding: 0;
display: table;
list-style-type: none;
}
.lm-Menu-item {
display: table-row;
}
.lm-Menu-item.lm-mod-hidden,
.lm-Menu-item.lm-mod-collapsed {
display: none !important;
}
.lm-Menu-itemIcon,
.lm-Menu-itemSubmenuIcon {
display: table-cell;
text-align: center;
}
.lm-Menu-itemLabel {
display: table-cell;
text-align: left;
}
.lm-Menu-itemShortcut {
display: table-cell;
text-align: right;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
| Distributed under the terms of the BSD 3-Clause License.
|
| The full license is in the file LICENSE, distributed with this software.
|----------------------------------------------------------------------------*/
.lm-MenuBar {
outline: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.lm-MenuBar-content {
margin: 0;
padding: 0;
display: flex;
flex-direction: row;
list-style-type: none;
}
.lm-MenuBar-item {
box-sizing: border-box;
}
.lm-MenuBar-itemIcon,
.lm-MenuBar-itemLabel {
display: inline-block;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
| Distributed under the terms of the BSD 3-Clause License.
|
| The full license is in the file LICENSE, distributed with this software.
|----------------------------------------------------------------------------*/
.lm-ScrollBar {
display: flex;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.lm-ScrollBar[data-orientation='horizontal'] {
flex-direction: row;
}
.lm-ScrollBar[data-orientation='vertical'] {
flex-direction: column;
}
.lm-ScrollBar-button {
box-sizing: border-box;
flex: 0 0 auto;
}
.lm-ScrollBar-track {
box-sizing: border-box;
position: relative;
overflow: hidden;
flex: 1 1 auto;
}
.lm-ScrollBar-thumb {
box-sizing: border-box;
position: absolute;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
| Distributed under the terms of the BSD 3-Clause License.
|
| The full license is in the file LICENSE, distributed with this software.
|----------------------------------------------------------------------------*/
.lm-SplitPanel-child {
z-index: 0;
}
.lm-SplitPanel-handle {
z-index: 1;
}
.lm-SplitPanel-handle.lm-mod-hidden {
display: none !important;
}
.lm-SplitPanel-handle:after {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
content: '';
}
.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {
cursor: ew-resize;
}
.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {
cursor: ns-resize;
}
.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {
left: 50%;
min-width: 8px;
transform: translateX(-50%);
}
.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {
top: 50%;
min-height: 8px;
transform: translateY(-50%);
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
| Distributed under the terms of the BSD 3-Clause License.
|
| The full license is in the file LICENSE, distributed with this software.
|----------------------------------------------------------------------------*/
.lm-TabBar {
display: flex;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.lm-TabBar[data-orientation='horizontal'] {
flex-direction: row;
align-items: flex-end;
}
.lm-TabBar[data-orientation='vertical'] {
flex-direction: column;
align-items: flex-end;
}
.lm-TabBar-content {
margin: 0;
padding: 0;
display: flex;
flex: 1 1 auto;
list-style-type: none;
}
.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {
flex-direction: row;
}
.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {
flex-direction: column;
}
.lm-TabBar-tab {
display: flex;
flex-direction: row;
box-sizing: border-box;
overflow: hidden;
touch-action: none; /* Disable native Drag/Drop */
}
.lm-TabBar-tabIcon,
.lm-TabBar-tabCloseIcon {
flex: 0 0 auto;
}
.lm-TabBar-tabLabel {
flex: 1 1 auto;
overflow: hidden;
white-space: nowrap;
}
.lm-TabBar-tabInput {
user-select: all;
width: 100%;
box-sizing: border-box;
}
.lm-TabBar-tab.lm-mod-hidden {
display: none !important;
}
.lm-TabBar-addButton.lm-mod-hidden {
display: none !important;
}
.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {
position: relative;
}
.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {
left: 0;
transition: left 150ms ease;
}
.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {
top: 0;
transition: top 150ms ease;
}
.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {
transition: none;
}
.lm-TabBar-tabLabel .lm-TabBar-tabInput {
user-select: all;
width: 100%;
box-sizing: border-box;
background: inherit;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
| Distributed under the terms of the BSD 3-Clause License.
|
| The full license is in the file LICENSE, distributed with this software.
|----------------------------------------------------------------------------*/
.lm-TabPanel-tabBar {
z-index: 1;
}
.lm-TabPanel-stackedPanel {
z-index: 0;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
| Distributed under the terms of the BSD 3-Clause License.
|
| The full license is in the file LICENSE, distributed with this software.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-Collapse {
display: flex;
flex-direction: column;
align-items: stretch;
}
.jp-Collapse-header {
padding: 1px 12px;
background-color: var(--jp-layout-color1);
border-bottom: solid var(--jp-border-width) var(--jp-border-color2);
color: var(--jp-ui-font-color1);
cursor: pointer;
display: flex;
align-items: center;
font-size: var(--jp-ui-font-size0);
font-weight: 600;
text-transform: uppercase;
user-select: none;
}
.jp-Collapser-icon {
height: 16px;
}
.jp-Collapse-header-collapsed .jp-Collapser-icon {
transform: rotate(-90deg);
margin: auto 0;
}
.jp-Collapser-title {
line-height: 25px;
}
.jp-Collapse-contents {
padding: 0 12px;
background-color: var(--jp-layout-color1);
color: var(--jp-ui-font-color1);
overflow: auto;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/* This file was auto-generated by ensureUiComponents() in @jupyterlab/buildutils */
/**
* (DEPRECATED) Support for consuming icons as CSS background images
*/
/* Icons urls */
:root {
--jp-icon-add-above: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5MikiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik00Ljc1IDQuOTMwNjZINi42MjVWNi44MDU2NkM2LjYyNSA3LjAxMTkxIDYuNzkzNzUgNy4xODA2NiA3IDcuMTgwNjZDNy4yMDYyNSA3LjE4MDY2IDcuMzc1IDcuMDExOTEgNy4zNzUgNi44MDU2NlY0LjkzMDY2SDkuMjVDOS40NTYyNSA0LjkzMDY2IDkuNjI1IDQuNzYxOTEgOS42MjUgNC41NTU2NkM5LjYyNSA0LjM0OTQxIDkuNDU2MjUgNC4xODA2NiA5LjI1IDQuMTgwNjZINy4zNzVWMi4zMDU2NkM3LjM3NSAyLjA5OTQxIDcuMjA2MjUgMS45MzA2NiA3IDEuOTMwNjZDNi43OTM3NSAxLjkzMDY2IDYuNjI1IDIuMDk5NDEgNi42MjUgMi4zMDU2NlY0LjE4MDY2SDQuNzVDNC41NDM3NSA0LjE4MDY2IDQuMzc1IDQuMzQ5NDEgNC4zNzUgNC41NTU2NkM0LjM3NSA0Ljc2MTkxIDQuNTQzNzUgNC45MzA2NiA0Ljc1IDQuOTMwNjZaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC43Ii8+CjwvZz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExLjUgOS41VjExLjVMMi41IDExLjVWOS41TDExLjUgOS41Wk0xMiA4QzEyLjU1MjMgOCAxMyA4LjQ0NzcyIDEzIDlWMTJDMTMgMTIuNTUyMyAxMi41NTIzIDEzIDEyIDEzTDIgMTNDMS40NDc3MiAxMyAxIDEyLjU1MjMgMSAxMlY5QzEgOC40NDc3MiAxLjQ0NzcxIDggMiA4TDEyIDhaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5MiI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDEwIDEuNTU1NjYpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==);
--jp-icon-add-below: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5OCkiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik05LjI1IDEwLjA2OTNMNy4zNzUgMTAuMDY5M0w3LjM3NSA4LjE5NDM0QzcuMzc1IDcuOTg4MDkgNy4yMDYyNSA3LjgxOTM0IDcgNy44MTkzNEM2Ljc5Mzc1IDcuODE5MzQgNi42MjUgNy45ODgwOSA2LjYyNSA4LjE5NDM0TDYuNjI1IDEwLjA2OTNMNC43NSAxMC4wNjkzQzQuNTQzNzUgMTAuMDY5MyA0LjM3NSAxMC4yMzgxIDQuMzc1IDEwLjQ0NDNDNC4zNzUgMTAuNjUwNiA0LjU0Mzc1IDEwLjgxOTMgNC43NSAxMC44MTkzTDYuNjI1IDEwLjgxOTNMNi42MjUgMTIuNjk0M0M2LjYyNSAxMi45MDA2IDYuNzkzNzUgMTMuMDY5MyA3IDEzLjA2OTNDNy4yMDYyNSAxMy4wNjkzIDcuMzc1IDEyLjkwMDYgNy4zNzUgMTIuNjk0M0w3LjM3NSAxMC44MTkzTDkuMjUgMTAuODE5M0M5LjQ1NjI1IDEwLjgxOTMgOS42MjUgMTAuNjUwNiA5LjYyNSAxMC40NDQzQzkuNjI1IDEwLjIzODEgOS40NTYyNSAxMC4wNjkzIDkuMjUgMTAuMDY5M1oiIGZpbGw9IiM2MTYxNjEiIHN0cm9rZT0iIzYxNjE2MSIgc3Ryb2tlLXdpZHRoPSIwLjciLz4KPC9nPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDUuNUwyLjUgMy41TDExLjUgMy41TDExLjUgNS41TDIuNSA1LjVaTTIgN0MxLjQ0NzcyIDcgMSA2LjU1MjI4IDEgNkwxIDNDMSAyLjQ0NzcyIDEuNDQ3NzIgMiAyIDJMMTIgMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzTDEzIDZDMTMgNi41NTIyOSAxMi41NTIzIDcgMTIgN0wyIDdaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5OCI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KDEgMS43NDg0NmUtMDcgMS43NDg0NmUtMDcgLTEgNCAxMy40NDQzKSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=);
--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-bell: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiPgogICA8cGF0aCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzMzMzMzIgogICAgICBkPSJtOCAwLjI5Yy0xLjQgMC0yLjcgMC43My0zLjYgMS44LTEuMiAxLjUtMS40IDMuNC0xLjUgNS4yLTAuMTggMi4yLTAuNDQgNC0yLjMgNS4zbDAuMjggMS4zaDVjMC4wMjYgMC42NiAwLjMyIDEuMSAwLjcxIDEuNSAwLjg0IDAuNjEgMiAwLjYxIDIuOCAwIDAuNTItMC40IDAuNi0xIDAuNzEtMS41aDVsMC4yOC0xLjNjLTEuOS0wLjk3LTIuMi0zLjMtMi4zLTUuMy0wLjEzLTEuOC0wLjI2LTMuNy0xLjUtNS4yLTAuODUtMS0yLjItMS44LTMuNi0xLjh6bTAgMS40YzAuODggMCAxLjkgMC41NSAyLjUgMS4zIDAuODggMS4xIDEuMSAyLjcgMS4yIDQuNCAwLjEzIDEuNyAwLjIzIDMuNiAxLjMgNS4yaC0xMGMxLjEtMS42IDEuMi0zLjQgMS4zLTUuMiAwLjEzLTEuNyAwLjMtMy4zIDEuMi00LjQgMC41OS0wLjcyIDEuNi0xLjMgMi41LTEuM3ptLTAuNzQgMTJoMS41Yy0wLjAwMTUgMC4yOCAwLjAxNSAwLjc5LTAuNzQgMC43OS0wLjczIDAuMDAxNi0wLjcyLTAuNTMtMC43NC0wLjc5eiIgLz4KPC9zdmc+Cg==);
--jp-icon-bug-dot: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTcuMTkgOEgyMFYxMEgxNy45MUMxNy45NiAxMC4zMyAxOCAxMC42NiAxOCAxMVYxMkgyMFYxNEgxOC41SDE4VjE0LjAyNzVDMTUuNzUgMTQuMjc2MiAxNCAxNi4xODM3IDE0IDE4LjVDMTQgMTkuMjA4IDE0LjE2MzUgMTkuODc3OSAxNC40NTQ5IDIwLjQ3MzlDMTMuNzA2MyAyMC44MTE3IDEyLjg3NTcgMjEgMTIgMjFDOS43OCAyMSA3Ljg1IDE5Ljc5IDYuODEgMThINFYxNkg2LjA5QzYuMDQgMTUuNjcgNiAxNS4zNCA2IDE1VjE0SDRWMTJINlYxMUM2IDEwLjY2IDYuMDQgMTAuMzMgNi4wOSAxMEg0VjhINi44MUM3LjI2IDcuMjIgNy44OCA2LjU1IDguNjIgNi4wNEw3IDQuNDFMOC40MSAzTDEwLjU5IDUuMTdDMTEuMDQgNS4wNiAxMS41MSA1IDEyIDVDMTIuNDkgNSAxMi45NiA1LjA2IDEzLjQyIDUuMTdMMTUuNTkgM0wxNyA0LjQxTDE1LjM3IDYuMDRDMTYuMTIgNi41NSAxNi43NCA3LjIyIDE3LjE5IDhaTTEwIDE2SDE0VjE0SDEwVjE2Wk0xMCAxMkgxNFYxMEgxMFYxMloiIGZpbGw9IiM2MTYxNjEiLz4KICAgICAgICA8cGF0aCBkPSJNMjIgMTguNUMyMiAyMC40MzMgMjAuNDMzIDIyIDE4LjUgMjJDMTYuNTY3IDIyIDE1IDIwLjQzMyAxNSAxOC41QzE1IDE2LjU2NyAxNi41NjcgMTUgMTguNSAxNUMyMC40MzMgMTUgMjIgMTYuNTY3IDIyIDE4LjVaIiBmaWxsPSIjNjE2MTYxIi8+CiAgICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yMCA4aC0yLjgxYy0uNDUtLjc4LTEuMDctMS40NS0xLjgyLTEuOTZMMTcgNC40MSAxNS41OSAzbC0yLjE3IDIuMTdDMTIuOTYgNS4wNiAxMi40OSA1IDEyIDVjLS40OSAwLS45Ni4wNi0xLjQxLjE3TDguNDEgMyA3IDQuNDFsMS42MiAxLjYzQzcuODggNi41NSA3LjI2IDcuMjIgNi44MSA4SDR2MmgyLjA5Yy0uMDUuMzMtLjA5LjY2LS4wOSAxdjFINHYyaDJ2MWMwIC4zNC4wNC42Ny4wOSAxSDR2MmgyLjgxYzEuMDQgMS43OSAyLjk3IDMgNS4xOSAzczQuMTUtMS4yMSA1LjE5LTNIMjB2LTJoLTIuMDljLjA1LS4zMy4wOS0uNjYuMDktMXYtMWgydi0yaC0ydi0xYzAtLjM0LS4wNC0uNjctLjA5LTFIMjBWOHptLTYgOGgtNHYtMmg0djJ6bTAtNGgtNHYtMmg0djJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);
--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);
--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);
--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);
--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);
--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);
--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);
--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-code-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICA8cGF0aCBkPSJNNi41OSwzLjQxTDIsOEw2LjU5LDEyLjZMOCwxMS4xOEw0LjgyLDhMOCw0LjgyTDYuNTksMy40MU0xMi40MSwzLjQxTDExLDQuODJMMTQuMTgsOEwxMSwxMS4xOEwxMi40MSwxMi42TDE3LDhMMTIuNDEsMy40MU0yMS41OSwxMS41OUwxMy41LDE5LjY4TDkuODMsMTZMOC40MiwxNy40MUwxMy41LDIyLjVMMjMsMTNMMjEuNTksMTEuNTlaIiAvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-code: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTExLjQgMTguNkw2LjggMTRMMTEuNCA5LjRMMTAgOEw0IDE0TDEwIDIwTDExLjQgMTguNlpNMTYuNiAxOC42TDIxLjIgMTRMMTYuNiA5LjRMMTggOEwyNCAxNEwxOCAyMEwxNi42IDE4LjZWMTguNloiLz4KCTwvZz4KPC9zdmc+Cg==);
--jp-icon-collapse-all: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNNiAxM3YyaDh2LTJ6IiAvPgogICAgPC9nPgo8L3N2Zz4K);
--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1jb25zb2xlLWljb24tYmFja2dyb3VuZC1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtY29uc29sZS1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIj4KICAgIDxwYXRoIGQ9Ik0xMDUgMTI3LjNoNDB2MTIuOGgtNDB6TTUxLjEgNzdMNzQgOTkuOWwtMjMuMyAyMy4zIDEwLjUgMTAuNSAyMy4zLTIzLjNMOTUgOTkuOSA4NC41IDg5LjQgNjEuNiA2Ni41eiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-copyright: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCI+CiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0xMS44OCw5LjE0YzEuMjgsMC4wNiwxLjYxLDEuMTUsMS42MywxLjY2aDEuNzljLTAuMDgtMS45OC0xLjQ5LTMuMTktMy40NS0zLjE5QzkuNjQsNy42MSw4LDksOCwxMi4xNCBjMCwxLjk0LDAuOTMsNC4yNCwzLjg0LDQuMjRjMi4yMiwwLDMuNDEtMS42NSwzLjQ0LTIuOTVoLTEuNzljLTAuMDMsMC41OS0wLjQ1LDEuMzgtMS42MywxLjQ0QzEwLjU1LDE0LjgzLDEwLDEzLjgxLDEwLDEyLjE0IEMxMCw5LjI1LDExLjI4LDkuMTYsMTEuODgsOS4xNHogTTEyLDJDNi40OCwyLDIsNi40OCwyLDEyczQuNDgsMTAsMTAsMTBzMTAtNC40OCwxMC0xMFMxNy41MiwyLDEyLDJ6IE0xMiwyMGMtNC40MSwwLTgtMy41OS04LTggczMuNTktOCw4LThzOCwzLjU5LDgsOFMxNi40MSwyMCwxMiwyMHoiLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-delete: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjI2MjYyIiBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiIgLz4KPC9zdmc+Cg==);
--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-duplicate: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIuNzk5OTggMC44NzVIOC44OTU4MkM5LjIwMDYxIDAuODc1IDkuNDQ5OTggMS4xMzkxNCA5LjQ0OTk4IDEuNDYxOThDOS40NDk5OCAxLjc4NDgyIDkuMjAwNjEgMi4wNDg5NiA4Ljg5NTgyIDIuMDQ4OTZIMy4zNTQxNUMzLjA0OTM2IDIuMDQ4OTYgMi43OTk5OCAyLjMxMzEgMi43OTk5OCAyLjYzNTk0VjkuNjc5NjlDMi43OTk5OCAxMC4wMDI1IDIuNTUwNjEgMTAuMjY2NyAyLjI0NTgyIDEwLjI2NjdDMS45NDEwMyAxMC4yNjY3IDEuNjkxNjUgMTAuMDAyNSAxLjY5MTY1IDkuNjc5NjlWMi4wNDg5NkMxLjY5MTY1IDEuNDAzMjggMi4xOTA0IDAuODc1IDIuNzk5OTggMC44NzVaTTUuMzY2NjUgMTEuOVY0LjU1SDExLjA4MzNWMTEuOUg1LjM2NjY1Wk00LjE0MTY1IDQuMTQxNjdDNC4xNDE2NSAzLjY5MDYzIDQuNTA3MjggMy4zMjUgNC45NTgzMiAzLjMyNUgxMS40OTE3QzExLjk0MjcgMy4zMjUgMTIuMzA4MyAzLjY5MDYzIDEyLjMwODMgNC4xNDE2N1YxMi4zMDgzQzEyLjMwODMgMTIuNzU5NCAxMS45NDI3IDEzLjEyNSAxMS40OTE3IDEzLjEyNUg0Ljk1ODMyQzQuNTA3MjggMTMuMTI1IDQuMTQxNjUgMTIuNzU5NCA0LjE0MTY1IDEyLjMwODNWNC4xNDE2N1oiIGZpbGw9IiM2MTYxNjEiLz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNOS40MzU3NCA4LjI2NTA3SDguMzY0MzFWOS4zMzY1QzguMzY0MzEgOS40NTQzNSA4LjI2Nzg4IDkuNTUwNzggOC4xNTAwMiA5LjU1MDc4QzguMDMyMTcgOS41NTA3OCA3LjkzNTc0IDkuNDU0MzUgNy45MzU3NCA5LjMzNjVWOC4yNjUwN0g2Ljg2NDMxQzYuNzQ2NDUgOC4yNjUwNyA2LjY1MDAyIDguMTY4NjQgNi42NTAwMiA4LjA1MDc4QzYuNjUwMDIgNy45MzI5MiA2Ljc0NjQ1IDcuODM2NSA2Ljg2NDMxIDcuODM2NUg3LjkzNTc0VjYuNzY1MDdDNy45MzU3NCA2LjY0NzIxIDguMDMyMTcgNi41NTA3OCA4LjE1MDAyIDYuNTUwNzhDOC4yNjc4OCA2LjU1MDc4IDguMzY0MzEgNi42NDcyMSA4LjM2NDMxIDYuNzY1MDdWNy44MzY1SDkuNDM1NzRDOS41NTM2IDcuODM2NSA5LjY1MDAyIDcuOTMyOTIgOS42NTAwMiA4LjA1MDc4QzkuNjUwMDIgOC4xNjg2NCA5LjU1MzYgOC4yNjUwNyA5LjQzNTc0IDguMjY1MDdaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC41Ii8+Cjwvc3ZnPgo=);
--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);
--jp-icon-error: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjE5IiByPSIyIi8+PHBhdGggZD0iTTEwIDNoNHYxMmgtNHoiLz48L2c+CjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiLz4KPC9zdmc+Cg==);
--jp-icon-expand-all: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNMTEgMTBIOXYzSDZ2MmgzdjNoMnYtM2gzdi0yaC0zeiIgLz4KICAgIDwvZz4KPC9zdmc+Cg==);
--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);
--jp-icon-filter-dot: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWRvdCIgZmlsbD0iI0ZGRiI+CiAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE3IiByPSIzIj48L2NpcmNsZT4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-filter: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgo8L3N2Zz4K);
--jp-icon-folder-favorite: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggY2xhc3M9ImpwLWljb24zIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxNjE2MSIgZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS0yLjA2IDExTDE1IDE1LjI4IDEyLjA2IDE3bC43OC0zLjMzLTIuNTktMi4yNCAzLjQxLS4yOUwxNSA4bDEuMzQgMy4xNCAzLjQxLjI5LTIuNTkgMi4yNC43OCAzLjMzeiIvPgo8L3N2Zz4K);
--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);
--jp-icon-home: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ii8+Cjwvc3ZnPgo=);
--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);
--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);
--jp-icon-info: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUwLjk3OCA1MC45NzgiPgoJPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KCQk8cGF0aCBkPSJNNDMuNTIsNy40NThDMzguNzExLDIuNjQ4LDMyLjMwNywwLDI1LjQ4OSwwQzE4LjY3LDAsMTIuMjY2LDIuNjQ4LDcuNDU4LDcuNDU4CgkJCWMtOS45NDMsOS45NDEtOS45NDMsMjYuMTE5LDAsMzYuMDYyYzQuODA5LDQuODA5LDExLjIxMiw3LjQ1NiwxOC4wMzEsNy40NThjMCwwLDAuMDAxLDAsMC4wMDIsMAoJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoKCQkJIE00Mi4xMDYsNDIuMTA1Yy00LjQzMiw0LjQzMS0xMC4zMzIsNi44NzItMTYuNjE1LDYuODcyaC0wLjAwMmMtNi4yODUtMC4wMDEtMTIuMTg3LTIuNDQxLTE2LjYxNy02Ljg3MgoJCQljLTkuMTYyLTkuMTYzLTkuMTYyLTI0LjA3MSwwLTMzLjIzM0MxMy4zMDMsNC40NCwxOS4yMDQsMiwyNS40ODksMmM2LjI4NCwwLDEyLjE4NiwyLjQ0LDE2LjYxNyw2Ljg3MgoJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4KCQk8cGF0aCBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1MwoJCQljMC40NjgtMC41MzYsMC45MjMtMS4wNjIsMS4zNjctMS41NzVjMC42MjYtMC43NTMsMS4xMDQtMS40NzgsMS40MzYtMi4xNzVjMC4zMzEtMC43MDcsMC40OTUtMS41NDEsMC40OTUtMi41CgkJCWMwLTEuMDk2LTAuMjYtMi4wODgtMC43NzktMi45NzljLTAuNTY1LTAuODc5LTEuNTAxLTEuMzM2LTIuODA2LTEuMzY5Yy0xLjgwMiwwLjA1Ny0yLjk4NSwwLjY2Ny0zLjU1LDEuODMyCgkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkKCQkJYzEuMDYyLTEuNjQsMi44NTUtMi40ODEsNS4zNzgtMi41MjdjMi4xNiwwLjAyMywzLjg3NCwwLjYwOCw1LjE0MSwxLjc1OGMxLjI3OCwxLjE2LDEuOTI5LDIuNzY0LDEuOTUsNC44MTEKCQkJYzAsMS4xNDItMC4xMzcsMi4xMTEtMC40MSwyLjkxMWMtMC4zMDksMC44NDUtMC43MzEsMS41OTMtMS4yNjgsMi4yNDNjLTAuNDkyLDAuNjUtMS4wNjgsMS4zMTgtMS43MywyLjAwMgoJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5CgkJCUMyNi41ODksMzIuMjE4LDIzLjU3OCwzMi4yMTgsMjMuNTc4LDMyLjIxOHogTTIzLjU3OCwzOC4yMnYtMy40ODRoMy4wNzZ2My40ODRIMjMuNTc4eiIvPgoJPC9nPgo8L3N2Zz4K);
--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaW5zcGVjdG9yLWljb24tY29sb3IganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);
--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtanNvbi1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0Y5QTgyNSI+CiAgICA8cGF0aCBkPSJNMjAuMiAxMS44Yy0xLjYgMC0xLjcuNS0xLjcgMSAwIC40LjEuOS4xIDEuMy4xLjUuMS45LjEgMS4zIDAgMS43LTEuNCAyLjMtMy41IDIuM2gtLjl2LTEuOWguNWMxLjEgMCAxLjQgMCAxLjQtLjggMC0uMyAwLS42LS4xLTEgMC0uNC0uMS0uOC0uMS0xLjIgMC0xLjMgMC0xLjggMS4zLTItMS4zLS4yLTEuMy0uNy0xLjMtMiAwLS40LjEtLjguMS0xLjIuMS0uNC4xLS43LjEtMSAwLS44LS40LS43LTEuNC0uOGgtLjVWNC4xaC45YzIuMiAwIDMuNS43IDMuNSAyLjMgMCAuNC0uMS45LS4xIDEuMy0uMS41LS4xLjktLjEgMS4zIDAgLjUuMiAxIDEuNyAxdjEuOHpNMS44IDEwLjFjMS42IDAgMS43LS41IDEuNy0xIDAtLjQtLjEtLjktLjEtMS4zLS4xLS41LS4xLS45LS4xLTEuMyAwLTEuNiAxLjQtMi4zIDMuNS0yLjNoLjl2MS45aC0uNWMtMSAwLTEuNCAwLTEuNC44IDAgLjMgMCAuNi4xIDEgMCAuMi4xLjYuMSAxIDAgMS4zIDAgMS44LTEuMyAyQzYgMTEuMiA2IDExLjcgNiAxM2MwIC40LS4xLjgtLjEgMS4yLS4xLjMtLjEuNy0uMSAxIDAgLjguMy44IDEuNC44aC41djEuOWgtLjljLTIuMSAwLTMuNS0uNi0zLjUtMi4zIDAtLjQuMS0uOS4xLTEuMy4xLS41LjEtLjkuMS0xLjMgMC0uNS0uMi0xLTEuNy0xdi0xLjl6Ii8+CiAgICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjEzLjgiIHI9IjIuMSIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSI4LjIiIHI9IjIuMSIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-julia: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDMyNSAzMDAiPgogIDxnIGNsYXNzPSJqcC1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjY2IzYzMzIj4KICAgIDxwYXRoIGQ9Ik0gMTUwLjg5ODQzOCAyMjUgQyAxNTAuODk4NDM4IDI2Ni40MjE4NzUgMTE3LjMyMDMxMiAzMDAgNzUuODk4NDM4IDMwMCBDIDM0LjQ3NjU2MiAzMDAgMC44OTg0MzggMjY2LjQyMTg3NSAwLjg5ODQzOCAyMjUgQyAwLjg5ODQzOCAxODMuNTc4MTI1IDM0LjQ3NjU2MiAxNTAgNzUuODk4NDM4IDE1MCBDIDExNy4zMjAzMTIgMTUwIDE1MC44OTg0MzggMTgzLjU3ODEyNSAxNTAuODk4NDM4IDIyNSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzM4OTgyNiI+CiAgICA8cGF0aCBkPSJNIDIzNy41IDc1IEMgMjM3LjUgMTE2LjQyMTg3NSAyMDMuOTIxODc1IDE1MCAxNjIuNSAxNTAgQyAxMjEuMDc4MTI1IDE1MCA4Ny41IDExNi40MjE4NzUgODcuNSA3NSBDIDg3LjUgMzMuNTc4MTI1IDEyMS4wNzgxMjUgMCAxNjIuNSAwIEMgMjAzLjkyMTg3NSAwIDIzNy41IDMzLjU3ODEyNSAyMzcuNSA3NSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzk1NThiMiI+CiAgICA8cGF0aCBkPSJNIDMyNC4xMDE1NjIgMjI1IEMgMzI0LjEwMTU2MiAyNjYuNDIxODc1IDI5MC41MjM0MzggMzAwIDI0OS4xMDE1NjIgMzAwIEMgMjA3LjY3OTY4OCAzMDAgMTc0LjEwMTU2MiAyNjYuNDIxODc1IDE3NC4xMDE1NjIgMjI1IEMgMTc0LjEwMTU2MiAxODMuNTc4MTI1IDIwNy42Nzk2ODggMTUwIDI0OS4xMDE1NjIgMTUwIEMgMjkwLjUyMzQzOCAxNTAgMzI0LjEwMTU2MiAxODMuNTc4MTI1IDMyNC4xMDE1NjIgMjI1Ii8+CiAgPC9nPgo8L3N2Zz4K);
--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgPGcgY2xhc3M9ImpwLWp1cHl0ZXItaWNvbi1jb2xvciIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgIDxnIGNsYXNzPSJqcC1qdXB5dGVyLWljb24tY29sb3IiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);
--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);
--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);
--jp-icon-launch: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHdpZHRoPSIzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yNiwyOEg2YTIuMDAyNywyLjAwMjcsMCwwLDEtMi0yVjZBMi4wMDI3LDIuMDAyNywwLDAsMSw2LDRIMTZWNkg2VjI2SDI2VjE2aDJWMjZBMi4wMDI3LDIuMDAyNywwLDAsMSwyNiwyOFoiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMjAgMiAyMCA0IDI2LjU4NiA0IDE4IDEyLjU4NiAxOS40MTQgMTQgMjggNS40MTQgMjggMTIgMzAgMTIgMzAgMiAyMCAyIi8+CiAgPC9nPgo8L3N2Zz4K);
--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);
--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);
--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4K);
--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);
--jp-icon-move-down: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMTIuNDcxIDcuNTI4OTlDMTIuNzYzMiA3LjIzNjg0IDEyLjc2MzIgNi43NjMxNiAxMi40NzEgNi40NzEwMVY2LjQ3MTAxQzEyLjE3OSA2LjE3OTA1IDExLjcwNTcgNi4xNzg4NCAxMS40MTM1IDYuNDcwNTRMNy43NSAxMC4xMjc1VjEuNzVDNy43NSAxLjMzNTc5IDcuNDE0MjEgMSA3IDFWMUM2LjU4NTc5IDEgNi4yNSAxLjMzNTc5IDYuMjUgMS43NVYxMC4xMjc1TDIuNTk3MjYgNi40NjgyMkMyLjMwMzM4IDYuMTczODEgMS44MjY0MSA2LjE3MzU5IDEuNTMyMjYgNi40Njc3NFY2LjQ2Nzc0QzEuMjM4MyA2Ljc2MTcgMS4yMzgzIDcuMjM4MyAxLjUzMjI2IDcuNTMyMjZMNi4yOTI4OSAxMi4yOTI5QzYuNjgzNDIgMTIuNjgzNCA3LjMxNjU4IDEyLjY4MzQgNy43MDcxMSAxMi4yOTI5TDEyLjQ3MSA3LjUyODk5WiIgZmlsbD0iIzYxNjE2MSIvPgo8L3N2Zz4K);
--jp-icon-move-up: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMS41Mjg5OSA2LjQ3MTAxQzEuMjM2ODQgNi43NjMxNiAxLjIzNjg0IDcuMjM2ODQgMS41Mjg5OSA3LjUyODk5VjcuNTI4OTlDMS44MjA5NSA3LjgyMDk1IDIuMjk0MjYgNy44MjExNiAyLjU4NjQ5IDcuNTI5NDZMNi4yNSAzLjg3MjVWMTIuMjVDNi4yNSAxMi42NjQyIDYuNTg1NzkgMTMgNyAxM1YxM0M3LjQxNDIxIDEzIDcuNzUgMTIuNjY0MiA3Ljc1IDEyLjI1VjMuODcyNUwxMS40MDI3IDcuNTMxNzhDMTEuNjk2NiA3LjgyNjE5IDEyLjE3MzYgNy44MjY0MSAxMi40Njc3IDcuNTMyMjZWNy41MzIyNkMxMi43NjE3IDcuMjM4MyAxMi43NjE3IDYuNzYxNyAxMi40Njc3IDYuNDY3NzRMNy43MDcxMSAxLjcwNzExQzcuMzE2NTggMS4zMTY1OCA2LjY4MzQyIDEuMzE2NTggNi4yOTI4OSAxLjcwNzExTDEuNTI4OTkgNi40NzEwMVoiIGZpbGw9IiM2MTYxNjEiLz4KPC9zdmc+Cg==);
--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);
--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtbm90ZWJvb2staWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-numbering: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTQgMTlINlYxOS41SDVWMjAuNUg2VjIxSDRWMjJIN1YxOEg0VjE5Wk01IDEwSDZWNkg0VjdINVYxMFpNNCAxM0g1LjhMNCAxNS4xVjE2SDdWMTVINS4yTDcgMTIuOVYxMkg0VjEzWk05IDdWOUgyM1Y3SDlaTTkgMjFIMjNWMTlIOVYyMVpNOSAxNUgyM1YxM0g5VjE1WiIvPgoJPC9nPgo8L3N2Zz4K);
--jp-icon-offline-bolt: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDIuMDJjLTUuNTEgMC05Ljk4IDQuNDctOS45OCA5Ljk4czQuNDcgOS45OCA5Ljk4IDkuOTggOS45OC00LjQ3IDkuOTgtOS45OFMxNy41MSAyLjAyIDEyIDIuMDJ6TTExLjQ4IDIwdi02LjI2SDhMMTMgNHY2LjI2aDMuMzVMMTEuNDggMjB6Ii8+CiAgPC9nPgo8L3N2Zz4K);
--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);
--jp-icon-pdf: url(data:image/svg+xml;base64,PHN2ZwogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMiAyMiIgd2lkdGg9IjE2Ij4KICAgIDxwYXRoIHRyYW5zZm9ybT0icm90YXRlKDQ1KSIgY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0ZGMkEyQSIKICAgICAgIGQ9Im0gMjIuMzQ0MzY5LC0zLjAxNjM2NDIgaCA1LjYzODYwNCB2IDEuNTc5MjQzMyBoIC0zLjU0OTIyNyB2IDEuNTA4NjkyOTkgaCAzLjMzNzU3NiBWIDEuNjUwODE1NCBoIC0zLjMzNzU3NiB2IDMuNDM1MjYxMyBoIC0yLjA4OTM3NyB6IG0gLTcuMTM2NDQ0LDEuNTc5MjQzMyB2IDQuOTQzOTU0MyBoIDAuNzQ4OTIgcSAxLjI4MDc2MSwwIDEuOTUzNzAzLC0wLjYzNDk1MzUgMC42NzgzNjksLTAuNjM0OTUzNSAwLjY3ODM2OSwtMS44NDUxNjQxIDAsLTEuMjA0NzgzNTUgLTAuNjcyOTQyLC0xLjgzNDMxMDExIC0wLjY3Mjk0MiwtMC42Mjk1MjY1OSAtMS45NTkxMywtMC42Mjk1MjY1OSB6IG0gLTIuMDg5Mzc3LC0xLjU3OTI0MzMgaCAyLjIwMzM0MyBxIDEuODQ1MTY0LDAgMi43NDYwMzksMC4yNjU5MjA3IDAuOTA2MzAxLDAuMjYwNDkzNyAxLjU1MjEwOCwwLjg5MDAyMDMgMC41Njk4MywwLjU0ODEyMjMgMC44NDY2MDUsMS4yNjQ0ODAwNiAwLjI3Njc3NCwwLjcxNjM1NzgxIDAuMjc2Nzc0LDEuNjIyNjU4OTQgMCwwLjkxNzE1NTEgLTAuMjc2Nzc0LDEuNjM4OTM5OSAtMC4yNzY3NzUsMC43MTYzNTc4IC0wLjg0NjYwNSwxLjI2NDQ4IC0wLjY1MTIzNCwwLjYyOTUyNjYgLTEuNTYyOTYyLDAuODk1NDQ3MyAtMC45MTE3MjgsMC4yNjA0OTM3IC0yLjczNTE4NSwwLjI2MDQ5MzcgaCAtMi4yMDMzNDMgeiBtIC04LjE0NTg1NjUsMCBoIDMuNDY3ODIzIHEgMS41NDY2ODE2LDAgMi4zNzE1Nzg1LDAuNjg5MjIzIDAuODMwMzI0LDAuNjgzNzk2MSAwLjgzMDMyNCwxLjk1MzcwMzE0IDAsMS4yNzUzMzM5NyAtMC44MzAzMjQsMS45NjQ1NTcwNiBRIDkuOTg3MTk2MSwyLjI3NDkxNSA4LjQ0MDUxNDUsMi4yNzQ5MTUgSCA3LjA2MjA2ODQgViA1LjA4NjA3NjcgSCA0Ljk3MjY5MTUgWiBtIDIuMDg5Mzc2OSwxLjUxNDExOTkgdiAyLjI2MzAzOTQzIGggMS4xNTU5NDEgcSAwLjYwNzgxODgsMCAwLjkzODg2MjksLTAuMjkzMDU1NDcgMC4zMzEwNDQxLC0wLjI5ODQ4MjQxIDAuMzMxMDQ0MSwtMC44NDExNzc3MiAwLC0wLjU0MjY5NTMxIC0wLjMzMTA0NDEsLTAuODM1NzUwNzQgLTAuMzMxMDQ0MSwtMC4yOTMwNTU1IC0wLjkzODg2MjksLTAuMjkzMDU1NSB6IgovPgo8L3N2Zz4K);
--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iLTEwIC0xMCAxMzEuMTYxMzYxNjk0MzM1OTQgMTMyLjM4ODk5OTkzODk2NDg0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzA2OTk4IiBkPSJNIDU0LjkxODc4NSw5LjE5Mjc0MjFlLTQgQyA1MC4zMzUxMzIsMC4wMjIyMTcyNyA0NS45NTc4NDYsMC40MTMxMzY5NyA0Mi4xMDYyODUsMS4wOTQ2NjkzIDMwLjc2MDA2OSwzLjA5OTE3MzEgMjguNzAwMDM2LDcuMjk0NzcxNCAyOC43MDAwMzUsMTUuMDMyMTY5IHYgMTAuMjE4NzUgaCAyNi44MTI1IHYgMy40MDYyNSBoIC0yNi44MTI1IC0xMC4wNjI1IGMgLTcuNzkyNDU5LDAgLTE0LjYxNTc1ODgsNC42ODM3MTcgLTE2Ljc0OTk5OTgsMTMuNTkzNzUgLTIuNDYxODE5OTgsMTAuMjEyOTY2IC0yLjU3MTAxNTA4LDE2LjU4NjAyMyAwLDI3LjI1IDEuOTA1OTI4Myw3LjkzNzg1MiA2LjQ1NzU0MzIsMTMuNTkzNzQ4IDE0LjI0OTk5OTgsMTMuNTkzNzUgaCA5LjIxODc1IHYgLTEyLjI1IGMgMCwtOC44NDk5MDIgNy42NTcxNDQsLTE2LjY1NjI0OCAxNi43NSwtMTYuNjU2MjUgaCAyNi43ODEyNSBjIDcuNDU0OTUxLDAgMTMuNDA2MjUzLC02LjEzODE2NCAxMy40MDYyNSwtMTMuNjI1IHYgLTI1LjUzMTI1IGMgMCwtNy4yNjYzMzg2IC02LjEyOTk4LC0xMi43MjQ3NzcxIC0xMy40MDYyNSwtMTMuOTM3NDk5NyBDIDY0LjI4MTU0OCwwLjMyNzk0Mzk3IDU5LjUwMjQzOCwtMC4wMjAzNzkwMyA1NC45MTg3ODUsOS4xOTI3NDIxZS00IFogbSAtMTQuNSw4LjIxODc1MDEyNTc5IGMgMi43Njk1NDcsMCA1LjAzMTI1LDIuMjk4NjQ1NiA1LjAzMTI1LDUuMTI0OTk5NiAtMmUtNiwyLjgxNjMzNiAtMi4yNjE3MDMsNS4wOTM3NSAtNS4wMzEyNSw1LjA5Mzc1IC0yLjc3OTQ3NiwtMWUtNiAtNS4wMzEyNSwtMi4yNzc0MTUgLTUuMDMxMjUsLTUuMDkzNzUgLTEwZS03LC0yLjgyNjM1MyAyLjI1MTc3NCwtNS4xMjQ5OTk2IDUuMDMxMjUsLTUuMTI0OTk5NiB6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2ZmZDQzYiIgZD0ibSA4NS42Mzc1MzUsMjguNjU3MTY5IHYgMTEuOTA2MjUgYyAwLDkuMjMwNzU1IC03LjgyNTg5NSwxNi45OTk5OTkgLTE2Ljc1LDE3IGggLTI2Ljc4MTI1IGMgLTcuMzM1ODMzLDAgLTEzLjQwNjI0OSw2LjI3ODQ4MyAtMTMuNDA2MjUsMTMuNjI1IHYgMjUuNTMxMjQ3IGMgMCw3LjI2NjM0NCA2LjMxODU4OCwxMS41NDAzMjQgMTMuNDA2MjUsMTMuNjI1MDA0IDguNDg3MzMxLDIuNDk1NjEgMTYuNjI2MjM3LDIuOTQ2NjMgMjYuNzgxMjUsMCA2Ljc1MDE1NSwtMS45NTQzOSAxMy40MDYyNTMsLTUuODg3NjEgMTMuNDA2MjUsLTEzLjYyNTAwNCBWIDg2LjUwMDkxOSBoIC0yNi43ODEyNSB2IC0zLjQwNjI1IGggMjYuNzgxMjUgMTMuNDA2MjU0IGMgNy43OTI0NjEsMCAxMC42OTYyNTEsLTUuNDM1NDA4IDEzLjQwNjI0MSwtMTMuNTkzNzUgMi43OTkzMywtOC4zOTg4ODYgMi42ODAyMiwtMTYuNDc1Nzc2IDAsLTI3LjI1IC0xLjkyNTc4LC03Ljc1NzQ0MSAtNS42MDM4NywtMTMuNTkzNzUgLTEzLjQwNjI0MSwtMTMuNTkzNzUgeiBtIC0xNS4wNjI1LDY0LjY1NjI1IGMgMi43Nzk0NzgsM2UtNiA1LjAzMTI1LDIuMjc3NDE3IDUuMDMxMjUsNS4wOTM3NDcgLTJlLTYsMi44MjYzNTQgLTIuMjUxNzc1LDUuMTI1MDA0IC01LjAzMTI1LDUuMTI1MDA0IC0yLjc2OTU1LDAgLTUuMDMxMjUsLTIuMjk4NjUgLTUuMDMxMjUsLTUuMTI1MDA0IDJlLTYsLTIuODE2MzMgMi4yNjE2OTcsLTUuMDkzNzQ3IDUuMDMxMjUsLTUuMDkzNzQ3IHoiLz4KPC9zdmc+Cg==);
--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);
--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-redo: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);
--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);
--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);
--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);
--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);
--jp-icon-share: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTSAxOCAyIEMgMTYuMzU0OTkgMiAxNSAzLjM1NDk5MDQgMTUgNSBDIDE1IDUuMTkwOTUyOSAxNS4wMjE3OTEgNS4zNzcxMjI0IDE1LjA1NjY0MSA1LjU1ODU5MzggTCA3LjkyMTg3NSA5LjcyMDcwMzEgQyA3LjM5ODUzOTkgOS4yNzc4NTM5IDYuNzMyMDc3MSA5IDYgOSBDIDQuMzU0OTkwNCA5IDMgMTAuMzU0OTkgMyAxMiBDIDMgMTMuNjQ1MDEgNC4zNTQ5OTA0IDE1IDYgMTUgQyA2LjczMjA3NzEgMTUgNy4zOTg1Mzk5IDE0LjcyMjE0NiA3LjkyMTg3NSAxNC4yNzkyOTcgTCAxNS4wNTY2NDEgMTguNDM5NDUzIEMgMTUuMDIxNTU1IDE4LjYyMTUxNCAxNSAxOC44MDgzODYgMTUgMTkgQyAxNSAyMC42NDUwMSAxNi4zNTQ5OSAyMiAxOCAyMiBDIDE5LjY0NTAxIDIyIDIxIDIwLjY0NTAxIDIxIDE5IEMgMjEgMTcuMzU0OTkgMTkuNjQ1MDEgMTYgMTggMTYgQyAxNy4yNjc0OCAxNiAxNi42MDE1OTMgMTYuMjc5MzI4IDE2LjA3ODEyNSAxNi43MjI2NTYgTCA4Ljk0MzM1OTQgMTIuNTU4NTk0IEMgOC45NzgyMDk1IDEyLjM3NzEyMiA5IDEyLjE5MDk1MyA5IDEyIEMgOSAxMS44MDkwNDcgOC45NzgyMDk1IDExLjYyMjg3OCA4Ljk0MzM1OTQgMTEuNDQxNDA2IEwgMTYuMDc4MTI1IDcuMjc5Mjk2OSBDIDE2LjYwMTQ2IDcuNzIyMTQ2MSAxNy4yNjc5MjMgOCAxOCA4IEMgMTkuNjQ1MDEgOCAyMSA2LjY0NTAwOTYgMjEgNSBDIDIxIDMuMzU0OTkwNCAxOS42NDUwMSAyIDE4IDIgeiBNIDE4IDQgQyAxOC41NjQxMjkgNCAxOSA0LjQzNTg3MDYgMTkgNSBDIDE5IDUuNTY0MTI5NCAxOC41NjQxMjkgNiAxOCA2IEMgMTcuNDM1ODcxIDYgMTcgNS41NjQxMjk0IDE3IDUgQyAxNyA0LjQzNTg3MDYgMTcuNDM1ODcxIDQgMTggNCB6IE0gNiAxMSBDIDYuNTY0MTI5NCAxMSA3IDExLjQzNTg3MSA3IDEyIEMgNyAxMi41NjQxMjkgNi41NjQxMjk0IDEzIDYgMTMgQyA1LjQzNTg3MDYgMTMgNSAxMi41NjQxMjkgNSAxMiBDIDUgMTEuNDM1ODcxIDUuNDM1ODcwNiAxMSA2IDExIHogTSAxOCAxOCBDIDE4LjU2NDEyOSAxOCAxOSAxOC40MzU4NzEgMTkgMTkgQyAxOSAxOS41NjQxMjkgMTguNTY0MTI5IDIwIDE4IDIwIEMgMTcuNDM1ODcxIDIwIDE3IDE5LjU2NDEyOSAxNyAxOSBDIDE3IDE4LjQzNTg3MSAxNy40MzU4NzEgMTggMTggMTggeiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);
--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);
--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);
--jp-icon-table-rows: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMSw4SDNWNGgxOFY4eiBNMjEsMTBIM3Y0aDE4VjEweiBNMjEsMTZIM3Y0aDE4VjE2eiIvPgogICAgPC9nPgo8L3N2Zz4K);
--jp-icon-tag: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCA0MyAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTI4LjgzMzIgMTIuMzM0TDMyLjk5OTggMTYuNTAwN0wzNy4xNjY1IDEyLjMzNEgyOC44MzMyWiIvPgoJCTxwYXRoIGQ9Ik0xNi4yMDk1IDIxLjYxMDRDMTUuNjg3MyAyMi4xMjk5IDE0Ljg0NDMgMjIuMTI5OSAxNC4zMjQ4IDIxLjYxMDRMNi45ODI5IDE0LjcyNDVDNi41NzI0IDE0LjMzOTQgNi4wODMxMyAxMy42MDk4IDYuMDQ3ODYgMTMuMDQ4MkM1Ljk1MzQ3IDExLjUyODggNi4wMjAwMiA4LjYxOTQ0IDYuMDY2MjEgNy4wNzY5NUM2LjA4MjgxIDYuNTE0NzcgNi41NTU0OCA2LjA0MzQ3IDcuMTE4MDQgNi4wMzA1NUM5LjA4ODYzIDUuOTg0NzMgMTMuMjYzOCA1LjkzNTc5IDEzLjY1MTggNi4zMjQyNUwyMS43MzY5IDEzLjYzOUMyMi4yNTYgMTQuMTU4NSAyMS43ODUxIDE1LjQ3MjQgMjEuMjYyIDE1Ljk5NDZMMTYuMjA5NSAyMS42MTA0Wk05Ljc3NTg1IDguMjY1QzkuMzM1NTEgNy44MjU2NiA4LjYyMzUxIDcuODI1NjYgOC4xODI4IDguMjY1QzcuNzQzNDYgOC43MDU3MSA3Ljc0MzQ2IDkuNDE3MzMgOC4xODI4IDkuODU2NjdDOC42MjM4MiAxMC4yOTY0IDkuMzM1ODIgMTAuMjk2NCA5Ljc3NTg1IDkuODU2NjdDMTAuMjE1NiA5LjQxNzMzIDEwLjIxNTYgOC43MDUzMyA5Ljc3NTg1IDguMjY1WiIvPgoJPC9nPgo8L3N2Zz4K);
--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1iYWNrZ3JvdW5kLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIiBmaWxsPSIjMzMzMzMzIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUtaW52ZXJzZSIgZD0iTTUuMDU2NjQgOC43NjE3MkM1LjA1NjY0IDguNTk3NjYgNS4wMzEyNSA4LjQ1MzEyIDQuOTgwNDcgOC4zMjgxMkM0LjkzMzU5IDguMTk5MjIgNC44NTU0NyA4LjA4MjAzIDQuNzQ2MDkgNy45NzY1NkM0LjY0MDYyIDcuODcxMDkgNC41IDcuNzc1MzkgNC4zMjQyMiA3LjY4OTQ1QzQuMTUyMzQgNy41OTk2MSAzLjk0MzM2IDcuNTExNzIgMy42OTcyNyA3LjQyNTc4QzMuMzAyNzMgNy4yODUxNiAyLjk0MzM2IDcuMTM2NzIgMi42MTkxNCA2Ljk4MDQ3QzIuMjk0OTIgNi44MjQyMiAyLjAxNzU4IDYuNjQyNTggMS43ODcxMSA2LjQzNTU1QzEuNTYwNTUgNi4yMjg1MiAxLjM4NDc3IDUuOTg4MjggMS4yNTk3NyA1LjcxNDg0QzEuMTM0NzcgNS40Mzc1IDEuMDcyMjcgNS4xMDkzOCAxLjA3MjI3IDQuNzMwNDdDMS4wNzIyNyA0LjM5ODQ0IDEuMTI4OTEgNC4wOTU3IDEuMjQyMTkgMy44MjIyN0MxLjM1NTQ3IDMuNTQ0OTIgMS41MTU2MiAzLjMwNDY5IDEuNzIyNjYgMy4xMDE1NkMxLjkyOTY5IDIuODk4NDQgMi4xNzk2OSAyLjczNDM3IDIuNDcyNjYgMi42MDkzOEMyLjc2NTYyIDIuNDg0MzggMy4wOTE4IDIuNDA0MyAzLjQ1MTE3IDIuMzY5MTRWMS4xMDkzOEg0LjM4ODY3VjIuMzgwODZDNC43NDAyMyAyLjQyNzczIDUuMDU2NjQgMi41MjM0NCA1LjMzNzg5IDIuNjY3OTdDNS42MTkxNCAyLjgxMjUgNS44NTc0MiAzLjAwMTk1IDYuMDUyNzMgMy4yMzYzM0M2LjI1MTk1IDMuNDY2OCA2LjQwNDMgMy43NDAyMyA2LjUwOTc3IDQuMDU2NjRDNi42MTkxNCA0LjM2OTE0IDYuNjczODMgNC43MjA3IDYuNjczODMgNS4xMTEzM0g1LjA0NDkyQzUuMDQ0OTIgNC42Mzg2NyA0LjkzNzUgNC4yODEyNSA0LjcyMjY2IDQuMDM5MDZDNC41MDc4MSAzLjc5Mjk3IDQuMjE2OCAzLjY2OTkyIDMuODQ5NjEgMy42Njk5MkMzLjY1MDM5IDMuNjY5OTIgMy40NzY1NiAzLjY5NzI3IDMuMzI4MTIgMy43NTE5NUMzLjE4MzU5IDMuODAyNzMgMy4wNjQ0NSAzLjg3Njk1IDIuOTcwNyAzLjk3NDYxQzIuODc2OTUgNC4wNjgzNiAyLjgwNjY0IDQuMTc5NjkgMi43NTk3NyA0LjMwODU5QzIuNzE2OCA0LjQzNzUgMi42OTUzMSA0LjU3ODEyIDIuNjk1MzEgNC43MzA0N0MyLjY5NTMxIDQuODgyODEgMi43MTY4IDUuMDE5NTMgMi43NTk3NyA1LjE0MDYyQzIuODA2NjQgNS4yNTc4MSAyLjg4MjgxIDUuMzY3MTkgMi45ODgyOCA1LjQ2ODc1QzMuMDk3NjYgNS41NzAzMSAzLjI0MDIzIDUuNjY3OTcgMy40MTYwMiA1Ljc2MTcyQzMuNTkxOCA1Ljg1MTU2IDMuODEwNTUgNS45NDMzNiA0LjA3MjI3IDYuMDM3MTFDNC40NjY4IDYuMTg1NTUgNC44MjQyMiA2LjMzOTg0IDUuMTQ0NTMgNi41QzUuNDY0ODQgNi42NTYyNSA1LjczODI4IDYuODM5ODQgNS45NjQ4NCA3LjA1MDc4QzYuMTk1MzEgNy4yNTc4MSA2LjM3MTA5IDcuNSA2LjQ5MjE5IDcuNzc3MzRDNi42MTcxOSA4LjA1MDc4IDYuNjc5NjkgOC4zNzUgNi42Nzk2OSA4Ljc1QzYuNjc5NjkgOS4wOTM3NSA2LjYyMzA1IDkuNDA0MyA2LjUwOTc3IDkuNjgxNjRDNi4zOTY0OCA5Ljk1NTA4IDYuMjM0MzggMTAuMTkxNCA2LjAyMzQ0IDEwLjM5MDZDNS44MTI1IDEwLjU4OTggNS41NTg1OSAxMC43NSA1LjI2MTcyIDEwLjg3MTFDNC45NjQ4NCAxMC45ODgzIDQuNjMyODEgMTEuMDY0NSA0LjI2NTYyIDExLjA5OTZWMTIuMjQ4SDMuMzMzOThWMTEuMDk5NkMzLjAwMTk1IDExLjA2ODQgMi42Nzk2OSAxMC45OTYxIDIuMzY3MTkgMTAuODgyOEMyLjA1NDY5IDEwLjc2NTYgMS43NzczNCAxMC41OTc3IDEuNTM1MTYgMTAuMzc4OUMxLjI5Njg4IDEwLjE2MDIgMS4xMDU0NyA5Ljg4NDc3IDAuOTYwOTM4IDkuNTUyNzNDMC44MTY0MDYgOS4yMTY4IDAuNzQ0MTQxIDguODE0NDUgMC43NDQxNDEgOC4zNDU3SDIuMzc4OTFDMi4zNzg5MSA4LjYyNjk1IDIuNDE5OTIgOC44NjMyOCAyLjUwMTk1IDkuMDU0NjlDMi41ODM5OCA5LjI0MjE5IDIuNjg5NDUgOS4zOTI1OCAyLjgxODM2IDkuNTA1ODZDMi45NTExNyA5LjYxNTIzIDMuMTAxNTYgOS42OTMzNiAzLjI2OTUzIDkuNzQwMjNDMy40Mzc1IDkuNzg3MTEgMy42MDkzOCA5LjgxMDU1IDMuNzg1MTYgOS44MTA1NUM0LjIwMzEyIDkuODEwNTUgNC41MTk1MyA5LjcxMjg5IDQuNzM0MzggOS41MTc1OEM0Ljk0OTIyIDkuMzIyMjcgNS4wNTY2NCA5LjA3MDMxIDUuMDU2NjQgOC43NjE3MlpNMTMuNDE4IDEyLjI3MTVIOC4wNzQyMlYxMUgxMy40MThWMTIuMjcxNVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMuOTUyNjQgNikiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=);
--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtdGV4dC1lZGl0b3ItaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xNSAxNUgzdjJoMTJ2LTJ6bTAtOEgzdjJoMTJWN3pNMyAxM2gxOHYtMkgzdjJ6bTAgOGgxOHYtMkgzdjJ6TTMgM3YyaDE4VjNIM3oiLz4KPC9zdmc+Cg==);
--jp-icon-toc: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik03LDVIMjFWN0g3VjVNNywxM1YxMUgyMVYxM0g3TTQsNC41QTEuNSwxLjUgMCAwLDEgNS41LDZBMS41LDEuNSAwIDAsMSA0LDcuNUExLjUsMS41IDAgMCwxIDIuNSw2QTEuNSwxLjUgMCAwLDEgNCw0LjVNNCwxMC41QTEuNSwxLjUgMCAwLDEgNS41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMy41QTEuNSwxLjUgMCAwLDEgMi41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMC41TTcsMTlWMTdIMjFWMTlIN000LDE2LjVBMS41LDEuNSAwIDAsMSA1LjUsMThBMS41LDEuNSAwIDAsMSA0LDE5LjVBMS41LDEuNSAwIDAsMSAyLjUsMThBMS41LDEuNSAwIDAsMSA0LDE2LjVaIiAvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-tree-view: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMiAxMVYzaC03djNIOVYzSDJ2OGg3VjhoMnYxMGg0djNoN3YtOGgtN3YzaC0yVjhoMnYzeiIvPgogICAgPC9nPgo8L3N2Zz4K);
--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);
--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-user: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE2IDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwek0xMiAxNGE3IDcgMCAwMC03IDdoMTRhNyA3IDAgMDAtNy03eiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-users: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGcgY2xhc3M9ImpwLWljb24zIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjczMjcgMCAwIDEuNzMyNyAtMy42MjgyIC4wOTk1NzcpIiBmaWxsPSIjNjE2MTYxIj4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjUsMCwwLDEuNSwwLC02KSIgZD0ibTEyLjE4NiA3LjUwOThjLTEuMDUzNSAwLTEuOTc1NyAwLjU2NjUtMi40Nzg1IDEuNDEwMiAwLjc1MDYxIDAuMzEyNzcgMS4zOTc0IDAuODI2NDggMS44NzMgMS40NzI3aDMuNDg2M2MwLTEuNTkyLTEuMjg4OS0yLjg4MjgtMi44ODA5LTIuODgyOHoiLz4KICA8cGF0aCBkPSJtMjAuNDY1IDIuMzg5NWEyLjE4ODUgMi4xODg1IDAgMCAxLTIuMTg4NCAyLjE4ODUgMi4xODg1IDIuMTg4NSAwIDAgMS0yLjE4ODUtMi4xODg1IDIuMTg4NSAyLjE4ODUgMCAwIDEgMi4xODg1LTIuMTg4NSAyLjE4ODUgMi4xODg1IDAgMCAxIDIuMTg4NCAyLjE4ODV6Ii8+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS41LDAsMCwxLjUsMCwtNikiIGQ9Im0zLjU4OTggOC40MjE5Yy0xLjExMjYgMC0yLjAxMzcgMC45MDExMS0yLjAxMzcgMi4wMTM3aDIuODE0NWMwLjI2Nzk3LTAuMzczMDkgMC41OTA3LTAuNzA0MzUgMC45NTg5OC0wLjk3ODUyLTAuMzQ0MzMtMC42MTY4OC0xLjAwMzEtMS4wMzUyLTEuNzU5OC0xLjAzNTJ6Ii8+CiAgPHBhdGggZD0ibTYuOTE1NCA0LjYyM2ExLjUyOTQgMS41Mjk0IDAgMCAxLTEuNTI5NCAxLjUyOTQgMS41Mjk0IDEuNTI5NCAwIDAgMS0xLjUyOTQtMS41Mjk0IDEuNTI5NCAxLjUyOTQgMCAwIDEgMS41Mjk0LTEuNTI5NCAxLjUyOTQgMS41Mjk0IDAgMCAxIDEuNTI5NCAxLjUyOTR6Ii8+CiAgPHBhdGggZD0ibTYuMTM1IDEzLjUzNWMwLTMuMjM5MiAyLjYyNTktNS44NjUgNS44NjUtNS44NjUgMy4yMzkyIDAgNS44NjUgMi42MjU5IDUuODY1IDUuODY1eiIvPgogIDxjaXJjbGUgY3g9IjEyIiBjeT0iMy43Njg1IiByPSIyLjk2ODUiLz4KIDwvZz4KPC9zdmc+Cg==);
--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);
--jp-icon-word: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KIDxnIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzQxNDE0MSI+CiAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiA8L2c+CiA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNDMgLjA0MDEpIiBmaWxsPSIjZmZmIj4KICA8cGF0aCBkPSJtNC4xNCA4Ljc2cTAuMDY4Mi0xLjg5IDIuNDItMS44OSAxLjE2IDAgMS42OCAwLjQyIDAuNTY3IDAuNDEgMC41NjcgMS4xNnYzLjQ3cTAgMC40NjIgMC41MTQgMC40NjIgMC4xMDMgMCAwLjItMC4wMjMxdjAuNzE0cS0wLjM5OSAwLjEwMy0wLjY1MSAwLjEwMy0wLjQ1MiAwLTAuNjkzLTAuMjItMC4yMzEtMC4yLTAuMjg0LTAuNjYyLTAuOTU2IDAuODcyLTIgMC44NzItMC45MDMgMC0xLjQ3LTAuNDcyLTAuNTI1LTAuNDcyLTAuNTI1LTEuMjYgMC0wLjI2MiAwLjA0NTItMC40NzIgMC4wNTY3LTAuMjIgMC4xMTYtMC4zNzggMC4wNjgyLTAuMTY4IDAuMjMxLTAuMzA0IDAuMTU4LTAuMTQ3IDAuMjYyLTAuMjQyIDAuMTE2LTAuMDkxNCAwLjM2OC0wLjE2OCAwLjI2Mi0wLjA5MTQgMC4zOTktMC4xMjYgMC4xMzYtMC4wNDUyIDAuNDcyLTAuMTAzIDAuMzM2LTAuMDU3OCAwLjUwNC0wLjA3OTggMC4xNTgtMC4wMjMxIDAuNTY3LTAuMDc5OCAwLjU1Ni0wLjA2ODIgMC43NzctMC4yMjEgMC4yMi0wLjE1MiAwLjIyLTAuNDQxdi0wLjI1MnEwLTAuNDMtMC4zNTctMC42NjItMC4zMzYtMC4yMzEtMC45NzYtMC4yMzEtMC42NjIgMC0wLjk5OCAwLjI2Mi0wLjMzNiAwLjI1Mi0wLjM5OSAwLjc5OHptMS44OSAzLjY4cTAuNzg4IDAgMS4yNi0wLjQxIDAuNTA0LTAuNDIgMC41MDQtMC45MDN2LTEuMDVxLTAuMjg0IDAuMTM2LTAuODYxIDAuMjMxLTAuNTY3IDAuMDkxNC0wLjk4NyAwLjE1OC0wLjQyIDAuMDY4Mi0wLjc2NiAwLjMyNi0wLjMzNiAwLjI1Mi0wLjMzNiAwLjcwNHQwLjMwNCAwLjcwNCAwLjg2MSAwLjI1MnoiIHN0cm9rZS13aWR0aD0iMS4wNSIvPgogIDxwYXRoIGQ9Im0xMCA0LjU2aDAuOTQ1djMuMTVxMC42NTEtMC45NzYgMS44OS0wLjk3NiAxLjE2IDAgMS44OSAwLjg0IDAuNjgyIDAuODQgMC42ODIgMi4zMSAwIDEuNDctMC43MDQgMi40Mi0wLjcwNCAwLjg4Mi0xLjg5IDAuODgyLTEuMjYgMC0xLjg5LTEuMDJ2MC43NjZoLTAuODV6bTIuNjIgMy4wNHEtMC43NDYgMC0xLjE2IDAuNjQtMC40NTIgMC42My0wLjQ1MiAxLjY4IDAgMS4wNSAwLjQ1MiAxLjY4dDEuMTYgMC42M3EwLjc3NyAwIDEuMjYtMC42MyAwLjQ5NC0wLjY0IDAuNDk0LTEuNjggMC0xLjA1LTAuNDcyLTEuNjgtMC40NjItMC42NC0xLjI2LTAuNjR6IiBzdHJva2Utd2lkdGg9IjEuMDUiLz4KICA8cGF0aCBkPSJtMi43MyAxNS44IDEzLjYgMC4wMDgxYzAuMDA2OSAwIDAtMi42IDAtMi42IDAtMC4wMDc4LTEuMTUgMC0xLjE1IDAtMC4wMDY5IDAtMC4wMDgzIDEuNS0wLjAwODMgMS41LTJlLTMgLTAuMDAxNC0xMS4zLTAuMDAxNC0xMS4zLTAuMDAxNGwtMC4wMDU5Mi0xLjVjMC0wLjAwNzgtMS4xNyAwLjAwMTMtMS4xNyAwLjAwMTN6IiBzdHJva2Utd2lkdGg9Ii45NzUiLz4KIDwvZz4KPC9zdmc+Cg==);
--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K);
}
/* Icon CSS class declarations */
.jp-AddAboveIcon {
background-image: var(--jp-icon-add-above);
}
.jp-AddBelowIcon {
background-image: var(--jp-icon-add-below);
}
.jp-AddIcon {
background-image: var(--jp-icon-add);
}
.jp-BellIcon {
background-image: var(--jp-icon-bell);
}
.jp-BugDotIcon {
background-image: var(--jp-icon-bug-dot);
}
.jp-BugIcon {
background-image: var(--jp-icon-bug);
}
.jp-BuildIcon {
background-image: var(--jp-icon-build);
}
.jp-CaretDownEmptyIcon {
background-image: var(--jp-icon-caret-down-empty);
}
.jp-CaretDownEmptyThinIcon {
background-image: var(--jp-icon-caret-down-empty-thin);
}
.jp-CaretDownIcon {
background-image: var(--jp-icon-caret-down);
}
.jp-CaretLeftIcon {
background-image: var(--jp-icon-caret-left);
}
.jp-CaretRightIcon {
background-image: var(--jp-icon-caret-right);
}
.jp-CaretUpEmptyThinIcon {
background-image: var(--jp-icon-caret-up-empty-thin);
}
.jp-CaretUpIcon {
background-image: var(--jp-icon-caret-up);
}
.jp-CaseSensitiveIcon {
background-image: var(--jp-icon-case-sensitive);
}
.jp-CheckIcon {
background-image: var(--jp-icon-check);
}
.jp-CircleEmptyIcon {
background-image: var(--jp-icon-circle-empty);
}
.jp-CircleIcon {
background-image: var(--jp-icon-circle);
}
.jp-ClearIcon {
background-image: var(--jp-icon-clear);
}
.jp-CloseIcon {
background-image: var(--jp-icon-close);
}
.jp-CodeCheckIcon {
background-image: var(--jp-icon-code-check);
}
.jp-CodeIcon {
background-image: var(--jp-icon-code);
}
.jp-CollapseAllIcon {
background-image: var(--jp-icon-collapse-all);
}
.jp-ConsoleIcon {
background-image: var(--jp-icon-console);
}
.jp-CopyIcon {
background-image: var(--jp-icon-copy);
}
.jp-CopyrightIcon {
background-image: var(--jp-icon-copyright);
}
.jp-CutIcon {
background-image: var(--jp-icon-cut);
}
.jp-DeleteIcon {
background-image: var(--jp-icon-delete);
}
.jp-DownloadIcon {
background-image: var(--jp-icon-download);
}
.jp-DuplicateIcon {
background-image: var(--jp-icon-duplicate);
}
.jp-EditIcon {
background-image: var(--jp-icon-edit);
}
.jp-EllipsesIcon {
background-image: var(--jp-icon-ellipses);
}
.jp-ErrorIcon {
background-image: var(--jp-icon-error);
}
.jp-ExpandAllIcon {
background-image: var(--jp-icon-expand-all);
}
.jp-ExtensionIcon {
background-image: var(--jp-icon-extension);
}
.jp-FastForwardIcon {
background-image: var(--jp-icon-fast-forward);
}
.jp-FileIcon {
background-image: var(--jp-icon-file);
}
.jp-FileUploadIcon {
background-image: var(--jp-icon-file-upload);
}
.jp-FilterDotIcon {
background-image: var(--jp-icon-filter-dot);
}
.jp-FilterIcon {
background-image: var(--jp-icon-filter);
}
.jp-FilterListIcon {
background-image: var(--jp-icon-filter-list);
}
.jp-FolderFavoriteIcon {
background-image: var(--jp-icon-folder-favorite);
}
.jp-FolderIcon {
background-image: var(--jp-icon-folder);
}
.jp-HomeIcon {
background-image: var(--jp-icon-home);
}
.jp-Html5Icon {
background-image: var(--jp-icon-html5);
}
.jp-ImageIcon {
background-image: var(--jp-icon-image);
}
.jp-InfoIcon {
background-image: var(--jp-icon-info);
}
.jp-InspectorIcon {
background-image: var(--jp-icon-inspector);
}
.jp-JsonIcon {
background-image: var(--jp-icon-json);
}
.jp-JuliaIcon {
background-image: var(--jp-icon-julia);
}
.jp-JupyterFaviconIcon {
background-image: var(--jp-icon-jupyter-favicon);
}
.jp-JupyterIcon {
background-image: var(--jp-icon-jupyter);
}
.jp-JupyterlabWordmarkIcon {
background-image: var(--jp-icon-jupyterlab-wordmark);
}
.jp-KernelIcon {
background-image: var(--jp-icon-kernel);
}
.jp-KeyboardIcon {
background-image: var(--jp-icon-keyboard);
}
.jp-LaunchIcon {
background-image: var(--jp-icon-launch);
}
.jp-LauncherIcon {
background-image: var(--jp-icon-launcher);
}
.jp-LineFormIcon {
background-image: var(--jp-icon-line-form);
}
.jp-LinkIcon {
background-image: var(--jp-icon-link);
}
.jp-ListIcon {
background-image: var(--jp-icon-list);
}
.jp-MarkdownIcon {
background-image: var(--jp-icon-markdown);
}
.jp-MoveDownIcon {
background-image: var(--jp-icon-move-down);
}
.jp-MoveUpIcon {
background-image: var(--jp-icon-move-up);
}
.jp-NewFolderIcon {
background-image: var(--jp-icon-new-folder);
}
.jp-NotTrustedIcon {
background-image: var(--jp-icon-not-trusted);
}
.jp-NotebookIcon {
background-image: var(--jp-icon-notebook);
}
.jp-NumberingIcon {
background-image: var(--jp-icon-numbering);
}
.jp-OfflineBoltIcon {
background-image: var(--jp-icon-offline-bolt);
}
.jp-PaletteIcon {
background-image: var(--jp-icon-palette);
}
.jp-PasteIcon {
background-image: var(--jp-icon-paste);
}
.jp-PdfIcon {
background-image: var(--jp-icon-pdf);
}
.jp-PythonIcon {
background-image: var(--jp-icon-python);
}
.jp-RKernelIcon {
background-image: var(--jp-icon-r-kernel);
}
.jp-ReactIcon {
background-image: var(--jp-icon-react);
}
.jp-RedoIcon {
background-image: var(--jp-icon-redo);
}
.jp-RefreshIcon {
background-image: var(--jp-icon-refresh);
}
.jp-RegexIcon {
background-image: var(--jp-icon-regex);
}
.jp-RunIcon {
background-image: var(--jp-icon-run);
}
.jp-RunningIcon {
background-image: var(--jp-icon-running);
}
.jp-SaveIcon {
background-image: var(--jp-icon-save);
}
.jp-SearchIcon {
background-image: var(--jp-icon-search);
}
.jp-SettingsIcon {
background-image: var(--jp-icon-settings);
}
.jp-ShareIcon {
background-image: var(--jp-icon-share);
}
.jp-SpreadsheetIcon {
background-image: var(--jp-icon-spreadsheet);
}
.jp-StopIcon {
background-image: var(--jp-icon-stop);
}
.jp-TabIcon {
background-image: var(--jp-icon-tab);
}
.jp-TableRowsIcon {
background-image: var(--jp-icon-table-rows);
}
.jp-TagIcon {
background-image: var(--jp-icon-tag);
}
.jp-TerminalIcon {
background-image: var(--jp-icon-terminal);
}
.jp-TextEditorIcon {
background-image: var(--jp-icon-text-editor);
}
.jp-TocIcon {
background-image: var(--jp-icon-toc);
}
.jp-TreeViewIcon {
background-image: var(--jp-icon-tree-view);
}
.jp-TrustedIcon {
background-image: var(--jp-icon-trusted);
}
.jp-UndoIcon {
background-image: var(--jp-icon-undo);
}
.jp-UserIcon {
background-image: var(--jp-icon-user);
}
.jp-UsersIcon {
background-image: var(--jp-icon-users);
}
.jp-VegaIcon {
background-image: var(--jp-icon-vega);
}
.jp-WordIcon {
background-image: var(--jp-icon-word);
}
.jp-YamlIcon {
background-image: var(--jp-icon-yaml);
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/**
* (DEPRECATED) Support for consuming icons as CSS background images
*/
.jp-Icon,
.jp-MaterialIcon {
background-position: center;
background-repeat: no-repeat;
background-size: 16px;
min-width: 16px;
min-height: 16px;
}
.jp-Icon-cover {
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
/**
* (DEPRECATED) Support for specific CSS icon sizes
*/
.jp-Icon-16 {
background-size: 16px;
min-width: 16px;
min-height: 16px;
}
.jp-Icon-18 {
background-size: 18px;
min-width: 18px;
min-height: 18px;
}
.jp-Icon-20 {
background-size: 20px;
min-width: 20px;
min-height: 20px;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.lm-TabBar .lm-TabBar-addButton {
align-items: center;
display: flex;
padding: 4px;
padding-bottom: 5px;
margin-right: 1px;
background-color: var(--jp-layout-color2);
}
.lm-TabBar .lm-TabBar-addButton:hover {
background-color: var(--jp-layout-color1);
}
.lm-DockPanel-tabBar .lm-TabBar-tab {
width: var(--jp-private-horizontal-tab-width);
}
.lm-DockPanel-tabBar .lm-TabBar-content {
flex: unset;
}
.lm-DockPanel-tabBar[data-orientation='horizontal'] {
flex: 1 1 auto;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/**
* Support for icons as inline SVG HTMLElements
*/
/* recolor the primary elements of an icon */
.jp-icon0[fill] {
fill: var(--jp-inverse-layout-color0);
}
.jp-icon1[fill] {
fill: var(--jp-inverse-layout-color1);
}
.jp-icon2[fill] {
fill: var(--jp-inverse-layout-color2);
}
.jp-icon3[fill] {
fill: var(--jp-inverse-layout-color3);
}
.jp-icon4[fill] {
fill: var(--jp-inverse-layout-color4);
}
.jp-icon0[stroke] {
stroke: var(--jp-inverse-layout-color0);
}
.jp-icon1[stroke] {
stroke: var(--jp-inverse-layout-color1);
}
.jp-icon2[stroke] {
stroke: var(--jp-inverse-layout-color2);
}
.jp-icon3[stroke] {
stroke: var(--jp-inverse-layout-color3);
}
.jp-icon4[stroke] {
stroke: var(--jp-inverse-layout-color4);
}
/* recolor the accent elements of an icon */
.jp-icon-accent0[fill] {
fill: var(--jp-layout-color0);
}
.jp-icon-accent1[fill] {
fill: var(--jp-layout-color1);
}
.jp-icon-accent2[fill] {
fill: var(--jp-layout-color2);
}
.jp-icon-accent3[fill] {
fill: var(--jp-layout-color3);
}
.jp-icon-accent4[fill] {
fill: var(--jp-layout-color4);
}
.jp-icon-accent0[stroke] {
stroke: var(--jp-layout-color0);
}
.jp-icon-accent1[stroke] {
stroke: var(--jp-layout-color1);
}
.jp-icon-accent2[stroke] {
stroke: var(--jp-layout-color2);
}
.jp-icon-accent3[stroke] {
stroke: var(--jp-layout-color3);
}
.jp-icon-accent4[stroke] {
stroke: var(--jp-layout-color4);
}
/* set the color of an icon to transparent */
.jp-icon-none[fill] {
fill: none;
}
.jp-icon-none[stroke] {
stroke: none;
}
/* brand icon colors. Same for light and dark */
.jp-icon-brand0[fill] {
fill: var(--jp-brand-color0);
}
.jp-icon-brand1[fill] {
fill: var(--jp-brand-color1);
}
.jp-icon-brand2[fill] {
fill: var(--jp-brand-color2);
}
.jp-icon-brand3[fill] {
fill: var(--jp-brand-color3);
}
.jp-icon-brand4[fill] {
fill: var(--jp-brand-color4);
}
.jp-icon-brand0[stroke] {
stroke: var(--jp-brand-color0);
}
.jp-icon-brand1[stroke] {
stroke: var(--jp-brand-color1);
}
.jp-icon-brand2[stroke] {
stroke: var(--jp-brand-color2);
}
.jp-icon-brand3[stroke] {
stroke: var(--jp-brand-color3);
}
.jp-icon-brand4[stroke] {
stroke: var(--jp-brand-color4);
}
/* warn icon colors. Same for light and dark */
.jp-icon-warn0[fill] {
fill: var(--jp-warn-color0);
}
.jp-icon-warn1[fill] {
fill: var(--jp-warn-color1);
}
.jp-icon-warn2[fill] {
fill: var(--jp-warn-color2);
}
.jp-icon-warn3[fill] {
fill: var(--jp-warn-color3);
}
.jp-icon-warn0[stroke] {
stroke: var(--jp-warn-color0);
}
.jp-icon-warn1[stroke] {
stroke: var(--jp-warn-color1);
}
.jp-icon-warn2[stroke] {
stroke: var(--jp-warn-color2);
}
.jp-icon-warn3[stroke] {
stroke: var(--jp-warn-color3);
}
/* icon colors that contrast well with each other and most backgrounds */
.jp-icon-contrast0[fill] {
fill: var(--jp-icon-contrast-color0);
}
.jp-icon-contrast1[fill] {
fill: var(--jp-icon-contrast-color1);
}
.jp-icon-contrast2[fill] {
fill: var(--jp-icon-contrast-color2);
}
.jp-icon-contrast3[fill] {
fill: var(--jp-icon-contrast-color3);
}
.jp-icon-contrast0[stroke] {
stroke: var(--jp-icon-contrast-color0);
}
.jp-icon-contrast1[stroke] {
stroke: var(--jp-icon-contrast-color1);
}
.jp-icon-contrast2[stroke] {
stroke: var(--jp-icon-contrast-color2);
}
.jp-icon-contrast3[stroke] {
stroke: var(--jp-icon-contrast-color3);
}
.jp-icon-dot[fill] {
fill: var(--jp-warn-color0);
}
.jp-jupyter-icon-color[fill] {
fill: var(--jp-jupyter-icon-color, var(--jp-warn-color0));
}
.jp-notebook-icon-color[fill] {
fill: var(--jp-notebook-icon-color, var(--jp-warn-color0));
}
.jp-json-icon-color[fill] {
fill: var(--jp-json-icon-color, var(--jp-warn-color1));
}
.jp-console-icon-color[fill] {
fill: var(--jp-console-icon-color, white);
}
.jp-console-icon-background-color[fill] {
fill: var(--jp-console-icon-background-color, var(--jp-brand-color1));
}
.jp-terminal-icon-color[fill] {
fill: var(--jp-terminal-icon-color, var(--jp-layout-color2));
}
.jp-terminal-icon-background-color[fill] {
fill: var(
--jp-terminal-icon-background-color,
var(--jp-inverse-layout-color2)
);
}
.jp-text-editor-icon-color[fill] {
fill: var(--jp-text-editor-icon-color, var(--jp-inverse-layout-color3));
}
.jp-inspector-icon-color[fill] {
fill: var(--jp-inspector-icon-color, var(--jp-inverse-layout-color3));
}
/* CSS for icons in selected filebrowser listing items */
.jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill] {
fill: #fff;
}
.jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill] {
fill: var(--jp-brand-color1);
}
/* stylelint-disable selector-max-class, selector-max-compound-selectors */
/**
* TODO: come up with non css-hack solution for showing the busy icon on top
* of the close icon
* CSS for complex behavior of close icon of tabs in the main area tabbar
*/
.lm-DockPanel-tabBar
.lm-TabBar-tab.lm-mod-closable.jp-mod-dirty
> .lm-TabBar-tabCloseIcon
> :not(:hover)
> .jp-icon3[fill] {
fill: none;
}
.lm-DockPanel-tabBar
.lm-TabBar-tab.lm-mod-closable.jp-mod-dirty
> .lm-TabBar-tabCloseIcon
> :not(:hover)
> .jp-icon-busy[fill] {
fill: var(--jp-inverse-layout-color3);
}
/* stylelint-enable selector-max-class, selector-max-compound-selectors */
/* CSS for icons in status bar */
#jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill] {
fill: #fff;
}
#jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill] {
fill: var(--jp-brand-color1);
}
/* special handling for splash icon CSS. While the theme CSS reloads during
splash, the splash icon can loose theming. To prevent that, we set a
default for its color variable */
:root {
--jp-warn-color0: var(--md-orange-700);
}
/* not sure what to do with this one, used in filebrowser listing */
.jp-DragIcon {
margin-right: 4px;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/**
* Support for alt colors for icons as inline SVG HTMLElements
*/
/* alt recolor the primary elements of an icon */
.jp-icon-alt .jp-icon0[fill] {
fill: var(--jp-layout-color0);
}
.jp-icon-alt .jp-icon1[fill] {
fill: var(--jp-layout-color1);
}
.jp-icon-alt .jp-icon2[fill] {
fill: var(--jp-layout-color2);
}
.jp-icon-alt .jp-icon3[fill] {
fill: var(--jp-layout-color3);
}
.jp-icon-alt .jp-icon4[fill] {
fill: var(--jp-layout-color4);
}
.jp-icon-alt .jp-icon0[stroke] {
stroke: var(--jp-layout-color0);
}
.jp-icon-alt .jp-icon1[stroke] {
stroke: var(--jp-layout-color1);
}
.jp-icon-alt .jp-icon2[stroke] {
stroke: var(--jp-layout-color2);
}
.jp-icon-alt .jp-icon3[stroke] {
stroke: var(--jp-layout-color3);
}
.jp-icon-alt .jp-icon4[stroke] {
stroke: var(--jp-layout-color4);
}
/* alt recolor the accent elements of an icon */
.jp-icon-alt .jp-icon-accent0[fill] {
fill: var(--jp-inverse-layout-color0);
}
.jp-icon-alt .jp-icon-accent1[fill] {
fill: var(--jp-inverse-layout-color1);
}
.jp-icon-alt .jp-icon-accent2[fill] {
fill: var(--jp-inverse-layout-color2);
}
.jp-icon-alt .jp-icon-accent3[fill] {
fill: var(--jp-inverse-layout-color3);
}
.jp-icon-alt .jp-icon-accent4[fill] {
fill: var(--jp-inverse-layout-color4);
}
.jp-icon-alt .jp-icon-accent0[stroke] {
stroke: var(--jp-inverse-layout-color0);
}
.jp-icon-alt .jp-icon-accent1[stroke] {
stroke: var(--jp-inverse-layout-color1);
}
.jp-icon-alt .jp-icon-accent2[stroke] {
stroke: var(--jp-inverse-layout-color2);
}
.jp-icon-alt .jp-icon-accent3[stroke] {
stroke: var(--jp-inverse-layout-color3);
}
.jp-icon-alt .jp-icon-accent4[stroke] {
stroke: var(--jp-inverse-layout-color4);
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-icon-hoverShow:not(:hover) .jp-icon-hoverShow-content {
display: none !important;
}
/**
* Support for hover colors for icons as inline SVG HTMLElements
*/
/**
* regular colors
*/
/* recolor the primary elements of an icon */
.jp-icon-hover :hover .jp-icon0-hover[fill] {
fill: var(--jp-inverse-layout-color0);
}
.jp-icon-hover :hover .jp-icon1-hover[fill] {
fill: var(--jp-inverse-layout-color1);
}
.jp-icon-hover :hover .jp-icon2-hover[fill] {
fill: var(--jp-inverse-layout-color2);
}
.jp-icon-hover :hover .jp-icon3-hover[fill] {
fill: var(--jp-inverse-layout-color3);
}
.jp-icon-hover :hover .jp-icon4-hover[fill] {
fill: var(--jp-inverse-layout-color4);
}
.jp-icon-hover :hover .jp-icon0-hover[stroke] {
stroke: var(--jp-inverse-layout-color0);
}
.jp-icon-hover :hover .jp-icon1-hover[stroke] {
stroke: var(--jp-inverse-layout-color1);
}
.jp-icon-hover :hover .jp-icon2-hover[stroke] {
stroke: var(--jp-inverse-layout-color2);
}
.jp-icon-hover :hover .jp-icon3-hover[stroke] {
stroke: var(--jp-inverse-layout-color3);
}
.jp-icon-hover :hover .jp-icon4-hover[stroke] {
stroke: var(--jp-inverse-layout-color4);
}
/* recolor the accent elements of an icon */
.jp-icon-hover :hover .jp-icon-accent0-hover[fill] {
fill: var(--jp-layout-color0);
}
.jp-icon-hover :hover .jp-icon-accent1-hover[fill] {
fill: var(--jp-layout-color1);
}
.jp-icon-hover :hover .jp-icon-accent2-hover[fill] {
fill: var(--jp-layout-color2);
}
.jp-icon-hover :hover .jp-icon-accent3-hover[fill] {
fill: var(--jp-layout-color3);
}
.jp-icon-hover :hover .jp-icon-accent4-hover[fill] {
fill: var(--jp-layout-color4);
}
.jp-icon-hover :hover .jp-icon-accent0-hover[stroke] {
stroke: var(--jp-layout-color0);
}
.jp-icon-hover :hover .jp-icon-accent1-hover[stroke] {
stroke: var(--jp-layout-color1);
}
.jp-icon-hover :hover .jp-icon-accent2-hover[stroke] {
stroke: var(--jp-layout-color2);
}
.jp-icon-hover :hover .jp-icon-accent3-hover[stroke] {
stroke: var(--jp-layout-color3);
}
.jp-icon-hover :hover .jp-icon-accent4-hover[stroke] {
stroke: var(--jp-layout-color4);
}
/* set the color of an icon to transparent */
.jp-icon-hover :hover .jp-icon-none-hover[fill] {
fill: none;
}
.jp-icon-hover :hover .jp-icon-none-hover[stroke] {
stroke: none;
}
/**
* inverse colors
*/
/* inverse recolor the primary elements of an icon */
.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill] {
fill: var(--jp-layout-color0);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill] {
fill: var(--jp-layout-color1);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill] {
fill: var(--jp-layout-color2);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill] {
fill: var(--jp-layout-color3);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill] {
fill: var(--jp-layout-color4);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke] {
stroke: var(--jp-layout-color0);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke] {
stroke: var(--jp-layout-color1);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke] {
stroke: var(--jp-layout-color2);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke] {
stroke: var(--jp-layout-color3);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke] {
stroke: var(--jp-layout-color4);
}
/* inverse recolor the accent elements of an icon */
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill] {
fill: var(--jp-inverse-layout-color0);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill] {
fill: var(--jp-inverse-layout-color1);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill] {
fill: var(--jp-inverse-layout-color2);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill] {
fill: var(--jp-inverse-layout-color3);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill] {
fill: var(--jp-inverse-layout-color4);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke] {
stroke: var(--jp-inverse-layout-color0);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke] {
stroke: var(--jp-inverse-layout-color1);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke] {
stroke: var(--jp-inverse-layout-color2);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke] {
stroke: var(--jp-inverse-layout-color3);
}
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke] {
stroke: var(--jp-inverse-layout-color4);
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-IFrame {
width: 100%;
height: 100%;
}
.jp-IFrame > iframe {
border: none;
}
/*
When drag events occur, `lm-mod-override-cursor` is added to the body.
Because iframes steal all cursor events, the following two rules are necessary
to suppress pointer events while resize drags are occurring. There may be a
better solution to this problem.
*/
body.lm-mod-override-cursor .jp-IFrame {
position: relative;
}
body.lm-mod-override-cursor .jp-IFrame::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: transparent;
}
/*-----------------------------------------------------------------------------
| Copyright (c) 2014-2016, Jupyter Development Team.
|
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-HoverBox {
position: fixed;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-FormGroup-content fieldset {
border: none;
padding: 0;
min-width: 0;
width: 100%;
}
/* stylelint-disable selector-max-type */
.jp-FormGroup-content fieldset .jp-inputFieldWrapper input,
.jp-FormGroup-content fieldset .jp-inputFieldWrapper select,
.jp-FormGroup-content fieldset .jp-inputFieldWrapper textarea {
font-size: var(--jp-content-font-size2);
border-color: var(--jp-input-border-color);
border-style: solid;
border-radius: var(--jp-border-radius);
border-width: 1px;
padding: 6px 8px;
background: none;
color: var(--jp-ui-font-color0);
height: inherit;
}
.jp-FormGroup-content fieldset input[type='checkbox'] {
position: relative;
top: 2px;
margin-left: 0;
}
.jp-FormGroup-content button.jp-mod-styled {
cursor: pointer;
}
.jp-FormGroup-content .checkbox label {
cursor: pointer;
font-size: var(--jp-content-font-size1);
}
.jp-FormGroup-content .jp-root > fieldset > legend {
display: none;
}
.jp-FormGroup-content .jp-root > fieldset > p {
display: none;
}
/** copy of `input.jp-mod-styled:focus` style */
.jp-FormGroup-content fieldset input:focus,
.jp-FormGroup-content fieldset select:focus {
-moz-outline-radius: unset;
outline: var(--jp-border-width) solid var(--md-blue-500);
outline-offset: -1px;
box-shadow: inset 0 0 4px var(--md-blue-300);
}
.jp-FormGroup-content fieldset input:hover:not(:focus),
.jp-FormGroup-content fieldset select:hover:not(:focus) {
background-color: var(--jp-border-color2);
}
/* stylelint-enable selector-max-type */
.jp-FormGroup-content .checkbox .field-description {
/* Disable default description field for checkbox:
because other widgets do not have description fields,
we add descriptions to each widget on the field level.
*/
display: none;
}
.jp-FormGroup-content #root__description {
display: none;
}
.jp-FormGroup-content .jp-modifiedIndicator {
width: 5px;
background-color: var(--jp-brand-color2);
margin-top: 0;
margin-left: calc(var(--jp-private-settingeditor-modifier-indent) * -1);
flex-shrink: 0;
}
.jp-FormGroup-content .jp-modifiedIndicator.jp-errorIndicator {
background-color: var(--jp-error-color0);
margin-right: 0.5em;
}
/* RJSF ARRAY style */
.jp-arrayFieldWrapper legend {
font-size: var(--jp-content-font-size2);
color: var(--jp-ui-font-color0);
flex-basis: 100%;
padding: 4px 0;
font-weight: var(--jp-content-heading-font-weight);
border-bottom: 1px solid var(--jp-border-color2);
}
.jp-arrayFieldWrapper .field-description {
padding: 4px 0;
white-space: pre-wrap;
}
.jp-arrayFieldWrapper .array-item {
width: 100%;
border: 1px solid var(--jp-border-color2);
border-radius: 4px;
margin: 4px;
}
.jp-ArrayOperations {
display: flex;
margin-left: 8px;
}
.jp-ArrayOperationsButton {
margin: 2px;
}
.jp-ArrayOperationsButton .jp-icon3[fill] {
fill: var(--jp-ui-font-color0);
}
button.jp-ArrayOperationsButton.jp-mod-styled:disabled {
cursor: not-allowed;
opacity: 0.5;
}
/* RJSF form validation error */
.jp-FormGroup-content .validationErrors {
color: var(--jp-error-color0);
}
/* Hide panel level error as duplicated the field level error */
.jp-FormGroup-content .panel.errors {
display: none;
}
/* RJSF normal content (settings-editor) */
.jp-FormGroup-contentNormal {
display: flex;
align-items: center;
flex-wrap: wrap;
}
.jp-FormGroup-contentNormal .jp-FormGroup-contentItem {
margin-left: 7px;
color: var(--jp-ui-font-color0);
}
.jp-FormGroup-contentNormal .jp-FormGroup-description {
flex-basis: 100%;
padding: 4px 7px;
}
.jp-FormGroup-contentNormal .jp-FormGroup-default {
flex-basis: 100%;
padding: 4px 7px;
}
.jp-FormGroup-contentNormal .jp-FormGroup-fieldLabel {
font-size: var(--jp-content-font-size1);
font-weight: normal;
min-width: 120px;
}
.jp-FormGroup-contentNormal fieldset:not(:first-child) {
margin-left: 7px;
}
.jp-FormGroup-contentNormal .field-array-of-string .array-item {
/* Display `jp-ArrayOperations` buttons side-by-side with content except
for small screens where flex-wrap will place them one below the other.
*/
display: flex;
align-items: center;
flex-wrap: wrap;
}
.jp-FormGroup-contentNormal .jp-objectFieldWrapper .form-group {
padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent);
margin-top: 2px;
}
/* RJSF compact content (metadata-form) */
.jp-FormGroup-content.jp-FormGroup-contentCompact {
width: 100%;
}
.jp-FormGroup-contentCompact .form-group {
display: flex;
padding: 0.5em 0.2em 0.5em 0;
}
.jp-FormGroup-contentCompact
.jp-FormGroup-compactTitle
.jp-FormGroup-description {
font-size: var(--jp-ui-font-size1);
color: var(--jp-ui-font-color2);
}
.jp-FormGroup-contentCompact .jp-FormGroup-fieldLabel {
padding-bottom: 0.3em;
}
.jp-FormGroup-contentCompact .jp-inputFieldWrapper .form-control {
width: 100%;
box-sizing: border-box;
}
.jp-FormGroup-contentCompact .jp-arrayFieldWrapper .jp-FormGroup-compactTitle {
padding-bottom: 7px;
}
.jp-FormGroup-contentCompact
.jp-objectFieldWrapper
.jp-objectFieldWrapper
.form-group {
padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent);
margin-top: 2px;
}
.jp-FormGroup-contentCompact ul.error-detail {
margin-block-start: 0.5em;
margin-block-end: 0.5em;
padding-inline-start: 1em;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
.jp-SidePanel {
display: flex;
flex-direction: column;
min-width: var(--jp-sidebar-min-width);
overflow-y: auto;
color: var(--jp-ui-font-color1);
background: var(--jp-layout-color1);
font-size: var(--jp-ui-font-size1);
}
.jp-SidePanel-header {
flex: 0 0 auto;
display: flex;
border-bottom: var(--jp-border-width) solid var(--jp-border-color2);
font-size: var(--jp-ui-font-size0);
font-weight: 600;
letter-spacing: 1px;
margin: 0;
padding: 2px;
text-transform: uppercase;
}
.jp-SidePanel-toolbar {
flex: 0 0 auto;
}
.jp-SidePanel-content {
flex: 1 1 auto;
}
.jp-SidePanel-toolbar,
.jp-AccordionPanel-toolbar {
height: var(--jp-private-toolbar-height);
}
.jp-SidePanel-toolbar.jp-Toolbar-micro {
display: none;
}
.lm-AccordionPanel .jp-AccordionPanel-title {
box-sizing: border-box;
line-height: 25px;
margin: 0;
display: flex;
align-items: center;
background: var(--jp-layout-color1);
color: var(--jp-ui-font-color1);
border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);
box-shadow: var(--jp-toolbar-box-shadow);
font-size: var(--jp-ui-font-size0);
}
.jp-AccordionPanel-title {
cursor: pointer;
user-select: none;
-moz-user-select: none;
-webkit-user-select: none;
text-transform: uppercase;
}
.lm-AccordionPanel[data-orientation='horizontal'] > .jp-AccordionPanel-title {
/* Title is rotated for horizontal accordion panel using CSS */
display: block;
transform-origin: top left;
transform: rotate(-90deg) translate(-100%);
}
.jp-AccordionPanel-title .lm-AccordionPanel-titleLabel {
user-select: none;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.jp-AccordionPanel-title .lm-AccordionPanel-titleCollapser {
transform: rotate(-90deg);
margin: auto 0;
height: 16px;
}
.jp-AccordionPanel-title.lm-mod-expanded .lm-AccordionPanel-titleCollapser {
transform: rotate(0deg);
}
.lm-AccordionPanel .jp-AccordionPanel-toolbar {
background: none;
box-shadow: none;
border: none;
margin-left: auto;
}
.lm-AccordionPanel .lm-SplitPanel-handle:hover {
background: var(--jp-layout-color3);
}
.jp-text-truncated {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/*-----------------------------------------------------------------------------
| Copyright (c) 2017, Jupyter Development Team.
|
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-Spinner {
position: absolute;
display: flex;
justify-content: center;
align-items: center;
z-index: 10;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: var(--jp-layout-color0);
outline: none;
}
.jp-SpinnerContent {
font-size: 10px;
margin: 50px auto;
text-indent: -9999em;
width: 3em;
height: 3em;
border-radius: 50%;
background: var(--jp-brand-color3);
background: linear-gradient(
to right,
#f37626 10%,
rgba(255, 255, 255, 0) 42%
);
position: relative;
animation: load3 1s infinite linear, fadeIn 1s;
}
.jp-SpinnerContent::before {
width: 50%;
height: 50%;
background: #f37626;
border-radius: 100% 0 0;
position: absolute;
top: 0;
left: 0;
content: '';
}
.jp-SpinnerContent::after {
background: var(--jp-layout-color0);
width: 75%;
height: 75%;
border-radius: 50%;
content: '';
margin: auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
@keyframes fadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes load3 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
/*-----------------------------------------------------------------------------
| Copyright (c) 2014-2017, Jupyter Development Team.
|
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
button.jp-mod-styled {
font-size: var(--jp-ui-font-size1);
color: var(--jp-ui-font-color0);
border: none;
box-sizing: border-box;
text-align: center;
line-height: 32px;
height: 32px;
padding: 0 12px;
letter-spacing: 0.8px;
outline: none;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
}
input.jp-mod-styled {
background: var(--jp-input-background);
height: 28px;
box-sizing: border-box;
border: var(--jp-border-width) solid var(--jp-border-color1);
padding-left: 7px;
padding-right: 7px;
font-size: var(--jp-ui-font-size2);
color: var(--jp-ui-font-color0);
outline: none;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
}
input[type='checkbox'].jp-mod-styled {
appearance: checkbox;
-webkit-appearance: checkbox;
-moz-appearance: checkbox;
height: auto;
}
input.jp-mod-styled:focus {
border: var(--jp-border-width) solid var(--md-blue-500);
box-shadow: inset 0 0 4px var(--md-blue-300);
}
.jp-select-wrapper {
display: flex;
position: relative;
flex-direction: column;
padding: 1px;
background-color: var(--jp-layout-color1);
box-sizing: border-box;
margin-bottom: 12px;
}
.jp-select-wrapper:not(.multiple) {
height: 28px;
}
.jp-select-wrapper.jp-mod-focused select.jp-mod-styled {
border: var(--jp-border-width) solid var(--jp-input-active-border-color);
box-shadow: var(--jp-input-box-shadow);
background-color: var(--jp-input-active-background);
}
select.jp-mod-styled:hover {
cursor: pointer;
color: var(--jp-ui-font-color0);
background-color: var(--jp-input-hover-background);
box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.5);
}
select.jp-mod-styled {
flex: 1 1 auto;
width: 100%;
font-size: var(--jp-ui-font-size2);
background: var(--jp-input-background);
color: var(--jp-ui-font-color0);
padding: 0 25px 0 8px;
border: var(--jp-border-width) solid var(--jp-input-border-color);
border-radius: 0;
outline: none;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
}
select.jp-mod-styled:not([multiple]) {
height: 32px;
}
select.jp-mod-styled[multiple] {
max-height: 200px;
overflow-y: auto;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-switch {
display: flex;
align-items: center;
padding-left: 4px;
padding-right: 4px;
font-size: var(--jp-ui-font-size1);
background-color: transparent;
color: var(--jp-ui-font-color1);
border: none;
height: 20px;
}
.jp-switch:hover {
background-color: var(--jp-layout-color2);
}
.jp-switch-label {
margin-right: 5px;
font-family: var(--jp-ui-font-family);
}
.jp-switch-track {
cursor: pointer;
background-color: var(--jp-switch-color, var(--jp-border-color1));
-webkit-transition: 0.4s;
transition: 0.4s;
border-radius: 34px;
height: 16px;
width: 35px;
position: relative;
}
.jp-switch-track::before {
content: '';
position: absolute;
height: 10px;
width: 10px;
margin: 3px;
left: 0;
background-color: var(--jp-ui-inverse-font-color1);
-webkit-transition: 0.4s;
transition: 0.4s;
border-radius: 50%;
}
.jp-switch[aria-checked='true'] .jp-switch-track {
background-color: var(--jp-switch-true-position-color, var(--jp-warn-color0));
}
.jp-switch[aria-checked='true'] .jp-switch-track::before {
/* track width (35) - margins (3 + 3) - thumb width (10) */
left: 19px;
}
/*-----------------------------------------------------------------------------
| Copyright (c) 2014-2016, Jupyter Development Team.
|
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
:root {
--jp-private-toolbar-height: calc(
28px + var(--jp-border-width)
); /* leave 28px for content */
}
.jp-Toolbar {
color: var(--jp-ui-font-color1);
flex: 0 0 auto;
display: flex;
flex-direction: row;
border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);
box-shadow: var(--jp-toolbar-box-shadow);
background: var(--jp-toolbar-background);
min-height: var(--jp-toolbar-micro-height);
padding: 2px;
z-index: 8;
overflow-x: hidden;
}
/* Toolbar items */
.jp-Toolbar > .jp-Toolbar-item.jp-Toolbar-spacer {
flex-grow: 1;
flex-shrink: 1;
}
.jp-Toolbar-item.jp-Toolbar-kernelStatus {
display: inline-block;
width: 32px;
background-repeat: no-repeat;
background-position: center;
background-size: 16px;
}
.jp-Toolbar > .jp-Toolbar-item {
flex: 0 0 auto;
display: flex;
padding-left: 1px;
padding-right: 1px;
font-size: var(--jp-ui-font-size1);
line-height: var(--jp-private-toolbar-height);
height: 100%;
}
/* Toolbar buttons */
/* This is the div we use to wrap the react component into a Widget */
div.jp-ToolbarButton {
color: transparent;
border: none;
box-sizing: border-box;
outline: none;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
padding: 0;
margin: 0;
}
button.jp-ToolbarButtonComponent {
background: var(--jp-layout-color1);
border: none;
box-sizing: border-box;
outline: none;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
padding: 0 6px;
margin: 0;
height: 24px;
border-radius: var(--jp-border-radius);
display: flex;
align-items: center;
text-align: center;
font-size: 14px;
min-width: unset;
min-height: unset;
}
button.jp-ToolbarButtonComponent:disabled {
opacity: 0.4;
}
button.jp-ToolbarButtonComponent > span {
padding: 0;
flex: 0 0 auto;
}
button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label {
font-size: var(--jp-ui-font-size1);
line-height: 100%;
padding-left: 2px;
color: var(--jp-ui-font-color1);
font-family: var(--jp-ui-font-family);
}
#jp-main-dock-panel[data-mode='single-document']
.jp-MainAreaWidget
> .jp-Toolbar.jp-Toolbar-micro {
padding: 0;
min-height: 0;
}
#jp-main-dock-panel[data-mode='single-document']
.jp-MainAreaWidget
> .jp-Toolbar {
border: none;
box-shadow: none;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
.jp-WindowedPanel-outer {
position: relative;
overflow-y: auto;
}
.jp-WindowedPanel-inner {
position: relative;
}
.jp-WindowedPanel-window {
position: absolute;
left: 0;
right: 0;
overflow: visible;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/* Sibling imports */
body {
color: var(--jp-ui-font-color1);
font-size: var(--jp-ui-font-size1);
}
/* Disable native link decoration styles everywhere outside of dialog boxes */
a {
text-decoration: unset;
color: unset;
}
a:hover {
text-decoration: unset;
color: unset;
}
/* Accessibility for links inside dialog box text */
.jp-Dialog-content a {
text-decoration: revert;
color: var(--jp-content-link-color);
}
.jp-Dialog-content a:hover {
text-decoration: revert;
}
/* Styles for ui-components */
.jp-Button {
color: var(--jp-ui-font-color2);
border-radius: var(--jp-border-radius);
padding: 0 12px;
font-size: var(--jp-ui-font-size1);
/* Copy from blueprint 3 */
display: inline-flex;
flex-direction: row;
border: none;
cursor: pointer;
align-items: center;
justify-content: center;
text-align: left;
vertical-align: middle;
min-height: 30px;
min-width: 30px;
}
.jp-Button:disabled {
cursor: not-allowed;
}
.jp-Button:empty {
padding: 0 !important;
}
.jp-Button.jp-mod-small {
min-height: 24px;
min-width: 24px;
font-size: 12px;
padding: 0 7px;
}
/* Use our own theme for hover styles */
.jp-Button.jp-mod-minimal:hover {
background-color: var(--jp-layout-color2);
}
.jp-Button.jp-mod-minimal {
background: none;
}
.jp-InputGroup {
display: block;
position: relative;
}
.jp-InputGroup input {
box-sizing: border-box;
border: none;
border-radius: 0;
background-color: transparent;
color: var(--jp-ui-font-color0);
box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color);
padding-bottom: 0;
padding-top: 0;
padding-left: 10px;
padding-right: 28px;
position: relative;
width: 100%;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
font-size: 14px;
font-weight: 400;
height: 30px;
line-height: 30px;
outline: none;
vertical-align: middle;
}
.jp-InputGroup input:focus {
box-shadow: inset 0 0 0 var(--jp-border-width)
var(--jp-input-active-box-shadow-color),
inset 0 0 0 3px var(--jp-input-active-box-shadow-color);
}
.jp-InputGroup input:disabled {
cursor: not-allowed;
resize: block;
background-color: var(--jp-layout-color2);
color: var(--jp-ui-font-color2);
}
.jp-InputGroup input:disabled ~ span {
cursor: not-allowed;
color: var(--jp-ui-font-color2);
}
.jp-InputGroup input::placeholder,
input::placeholder {
color: var(--jp-ui-font-color2);
}
.jp-InputGroupAction {
position: absolute;
bottom: 1px;
right: 0;
padding: 6px;
}
.jp-HTMLSelect.jp-DefaultStyle select {
background-color: initial;
border: none;
border-radius: 0;
box-shadow: none;
color: var(--jp-ui-font-color0);
display: block;
font-size: var(--jp-ui-font-size1);
font-family: var(--jp-ui-font-family);
height: 24px;
line-height: 14px;
padding: 0 25px 0 10px;
text-align: left;
-moz-appearance: none;
-webkit-appearance: none;
}
.jp-HTMLSelect.jp-DefaultStyle select:disabled {
background-color: var(--jp-layout-color2);
color: var(--jp-ui-font-color2);
cursor: not-allowed;
resize: block;
}
.jp-HTMLSelect.jp-DefaultStyle select:disabled ~ span {
cursor: not-allowed;
}
/* Use our own theme for hover and option styles */
/* stylelint-disable-next-line selector-max-type */
.jp-HTMLSelect.jp-DefaultStyle select:hover,
.jp-HTMLSelect.jp-DefaultStyle select > option {
background-color: var(--jp-layout-color2);
color: var(--jp-ui-font-color0);
}
select {
box-sizing: border-box;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Styles
|----------------------------------------------------------------------------*/
.jp-StatusBar-Widget {
display: flex;
align-items: center;
background: var(--jp-layout-color2);
min-height: var(--jp-statusbar-height);
justify-content: space-between;
padding: 0 10px;
}
.jp-StatusBar-Left {
display: flex;
align-items: center;
flex-direction: row;
}
.jp-StatusBar-Middle {
display: flex;
align-items: center;
}
.jp-StatusBar-Right {
display: flex;
align-items: center;
flex-direction: row-reverse;
}
.jp-StatusBar-Item {
max-height: var(--jp-statusbar-height);
margin: 0 2px;
height: var(--jp-statusbar-height);
white-space: nowrap;
text-overflow: ellipsis;
color: var(--jp-ui-font-color1);
padding: 0 6px;
}
.jp-mod-highlighted:hover {
background-color: var(--jp-layout-color3);
}
.jp-mod-clicked {
background-color: var(--jp-brand-color1);
}
.jp-mod-clicked:hover {
background-color: var(--jp-brand-color0);
}
.jp-mod-clicked .jp-StatusBar-TextItem {
color: var(--jp-ui-inverse-font-color1);
}
.jp-StatusBar-HoverItem {
box-shadow: '0px 4px 4px rgba(0, 0, 0, 0.25)';
}
.jp-StatusBar-TextItem {
font-size: var(--jp-ui-font-size1);
font-family: var(--jp-ui-font-family);
line-height: 24px;
color: var(--jp-ui-font-color1);
}
.jp-StatusBar-GroupItem {
display: flex;
align-items: center;
flex-direction: row;
}
.jp-Statusbar-ProgressCircle svg {
display: block;
margin: 0 auto;
width: 16px;
height: 24px;
align-self: normal;
}
.jp-Statusbar-ProgressCircle path {
fill: var(--jp-inverse-layout-color3);
}
.jp-Statusbar-ProgressBar-progress-bar {
height: 10px;
width: 100px;
border: solid 0.25px var(--jp-brand-color2);
border-radius: 3px;
overflow: hidden;
align-self: center;
}
.jp-Statusbar-ProgressBar-progress-bar > div {
background-color: var(--jp-brand-color2);
background-image: linear-gradient(
-45deg,
rgba(255, 255, 255, 0.2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.2) 50%,
rgba(255, 255, 255, 0.2) 75%,
transparent 75%,
transparent
);
background-size: 40px 40px;
float: left;
width: 0%;
height: 100%;
font-size: 12px;
line-height: 14px;
color: #fff;
text-align: center;
animation: jp-Statusbar-ExecutionTime-progress-bar 2s linear infinite;
}
.jp-Statusbar-ProgressBar-progress-bar p {
color: var(--jp-ui-font-color1);
font-family: var(--jp-ui-font-family);
font-size: var(--jp-ui-font-size1);
line-height: 10px;
width: 100px;
}
@keyframes jp-Statusbar-ExecutionTime-progress-bar {
0% {
background-position: 0 0;
}
100% {
background-position: 40px 40px;
}
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Variables
|----------------------------------------------------------------------------*/
:root {
--jp-private-commandpalette-search-height: 28px;
}
/*-----------------------------------------------------------------------------
| Overall styles
|----------------------------------------------------------------------------*/
.lm-CommandPalette {
padding-bottom: 0;
color: var(--jp-ui-font-color1);
background: var(--jp-layout-color1);
/* This is needed so that all font sizing of children done in ems is
* relative to this base size */
font-size: var(--jp-ui-font-size1);
}
/*-----------------------------------------------------------------------------
| Modal variant
|----------------------------------------------------------------------------*/
.jp-ModalCommandPalette {
position: absolute;
z-index: 10000;
top: 38px;
left: 30%;
margin: 0;
padding: 4px;
width: 40%;
box-shadow: var(--jp-elevation-z4);
border-radius: 4px;
background: var(--jp-layout-color0);
}
.jp-ModalCommandPalette .lm-CommandPalette {
max-height: 40vh;
}
.jp-ModalCommandPalette .lm-CommandPalette .lm-close-icon::after {
display: none;
}
.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-header {
display: none;
}
.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-item {
margin-left: 4px;
margin-right: 4px;
}
.jp-ModalCommandPalette
.lm-CommandPalette
.lm-CommandPalette-item.lm-mod-disabled {
display: none;
}
/*-----------------------------------------------------------------------------
| Search
|----------------------------------------------------------------------------*/
.lm-CommandPalette-search {
padding: 4px;
background-color: var(--jp-layout-color1);
z-index: 2;
}
.lm-CommandPalette-wrapper {
overflow: overlay;
padding: 0 9px;
background-color: var(--jp-input-active-background);
height: 30px;
box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color);
}
.lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper {
box-shadow: inset 0 0 0 1px var(--jp-input-active-box-shadow-color),
inset 0 0 0 3px var(--jp-input-active-box-shadow-color);
}
.jp-SearchIconGroup {
color: white;
background-color: var(--jp-brand-color1);
position: absolute;
top: 4px;
right: 4px;
padding: 5px 5px 1px;
}
.jp-SearchIconGroup svg {
height: 20px;
width: 20px;
}
.jp-SearchIconGroup .jp-icon3[fill] {
fill: var(--jp-layout-color0);
}
.lm-CommandPalette-input {
background: transparent;
width: calc(100% - 18px);
float: left;
border: none;
outline: none;
font-size: var(--jp-ui-font-size1);
color: var(--jp-ui-font-color0);
line-height: var(--jp-private-commandpalette-search-height);
}
.lm-CommandPalette-input::-webkit-input-placeholder,
.lm-CommandPalette-input::-moz-placeholder,
.lm-CommandPalette-input:-ms-input-placeholder {
color: var(--jp-ui-font-color2);
font-size: var(--jp-ui-font-size1);
}
/*-----------------------------------------------------------------------------
| Results
|----------------------------------------------------------------------------*/
.lm-CommandPalette-header:first-child {
margin-top: 0;
}
.lm-CommandPalette-header {
border-bottom: solid var(--jp-border-width) var(--jp-border-color2);
color: var(--jp-ui-font-color1);
cursor: pointer;
display: flex;
font-size: var(--jp-ui-font-size0);
font-weight: 600;
letter-spacing: 1px;
margin-top: 8px;
padding: 8px 0 8px 12px;
text-transform: uppercase;
}
.lm-CommandPalette-header.lm-mod-active {
background: var(--jp-layout-color2);
}
.lm-CommandPalette-header > mark {
background-color: transparent;
font-weight: bold;
color: var(--jp-ui-font-color1);
}
.lm-CommandPalette-item {
padding: 4px 12px 4px 4px;
color: var(--jp-ui-font-color1);
font-size: var(--jp-ui-font-size1);
font-weight: 400;
display: flex;
}
.lm-CommandPalette-item.lm-mod-disabled {
color: var(--jp-ui-font-color2);
}
.lm-CommandPalette-item.lm-mod-active {
color: var(--jp-ui-inverse-font-color1);
background: var(--jp-brand-color1);
}
.lm-CommandPalette-item.lm-mod-active .lm-CommandPalette-itemLabel > mark {
color: var(--jp-ui-inverse-font-color0);
}
.lm-CommandPalette-item.lm-mod-active .jp-icon-selectable[fill] {
fill: var(--jp-layout-color0);
}
.lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled) {
color: var(--jp-ui-inverse-font-color1);
background: var(--jp-brand-color1);
}
.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {
background: var(--jp-layout-color2);
}
.lm-CommandPalette-itemContent {
overflow: hidden;
}
.lm-CommandPalette-itemLabel > mark {
color: var(--jp-ui-font-color0);
background-color: transparent;
font-weight: bold;
}
.lm-CommandPalette-item.lm-mod-disabled mark {
color: var(--jp-ui-font-color2);
}
.lm-CommandPalette-item .lm-CommandPalette-itemIcon {
margin: 0 4px 0 0;
position: relative;
width: 16px;
top: 2px;
flex: 0 0 auto;
}
.lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon {
opacity: 0.6;
}
.lm-CommandPalette-item .lm-CommandPalette-itemShortcut {
flex: 0 0 auto;
}
.lm-CommandPalette-itemCaption {
display: none;
}
.lm-CommandPalette-content {
background-color: var(--jp-layout-color1);
}
.lm-CommandPalette-content:empty::after {
content: 'No results';
margin: auto;
margin-top: 20px;
width: 100px;
display: block;
font-size: var(--jp-ui-font-size2);
font-family: var(--jp-ui-font-family);
font-weight: lighter;
}
.lm-CommandPalette-emptyMessage {
text-align: center;
margin-top: 24px;
line-height: 1.32;
padding: 0 8px;
color: var(--jp-content-font-color3);
}
/*-----------------------------------------------------------------------------
| Copyright (c) 2014-2017, Jupyter Development Team.
|
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-Dialog {
position: absolute;
z-index: 10000;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
top: 0;
left: 0;
margin: 0;
padding: 0;
width: 100%;
height: 100%;
background: var(--jp-dialog-background);
}
.jp-Dialog-content {
display: flex;
flex-direction: column;
margin-left: auto;
margin-right: auto;
background: var(--jp-layout-color1);
padding: 24px 24px 12px;
min-width: 300px;
min-height: 150px;
max-width: 1000px;
max-height: 500px;
box-sizing: border-box;
box-shadow: var(--jp-elevation-z20);
word-wrap: break-word;
border-radius: var(--jp-border-radius);
/* This is needed so that all font sizing of children done in ems is
* relative to this base size */
font-size: var(--jp-ui-font-size1);
color: var(--jp-ui-font-color1);
resize: both;
}
.jp-Dialog-content.jp-Dialog-content-small {
max-width: 500px;
}
.jp-Dialog-button {
overflow: visible;
}
button.jp-Dialog-button:focus {
outline: 1px solid var(--jp-brand-color1);
outline-offset: 4px;
-moz-outline-radius: 0;
}
button.jp-Dialog-button:focus::-moz-focus-inner {
border: 0;
}
button.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus,
button.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus,
button.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus {
outline-offset: 4px;
-moz-outline-radius: 0;
}
button.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus {
outline: 1px solid var(--jp-accept-color-normal, var(--jp-brand-color1));
}
button.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus {
outline: 1px solid var(--jp-warn-color-normal, var(--jp-error-color1));
}
button.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus {
outline: 1px solid var(--jp-reject-color-normal, var(--md-grey-600));
}
button.jp-Dialog-close-button {
padding: 0;
height: 100%;
min-width: unset;
min-height: unset;
}
.jp-Dialog-header {
display: flex;
justify-content: space-between;
flex: 0 0 auto;
padding-bottom: 12px;
font-size: var(--jp-ui-font-size3);
font-weight: 400;
color: var(--jp-ui-font-color1);
}
.jp-Dialog-body {
display: flex;
flex-direction: column;
flex: 1 1 auto;
font-size: var(--jp-ui-font-size1);
background: var(--jp-layout-color1);
color: var(--jp-ui-font-color1);
overflow: auto;
}
.jp-Dialog-footer {
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: center;
flex: 0 0 auto;
margin-left: -12px;
margin-right: -12px;
padding: 12px;
}
.jp-Dialog-checkbox {
padding-right: 5px;
}
.jp-Dialog-checkbox > input:focus-visible {
outline: 1px solid var(--jp-input-active-border-color);
outline-offset: 1px;
}
.jp-Dialog-spacer {
flex: 1 1 auto;
}
.jp-Dialog-title {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.jp-Dialog-body > .jp-select-wrapper {
width: 100%;
}
.jp-Dialog-body > button {
padding: 0 16px;
}
.jp-Dialog-body > label {
line-height: 1.4;
color: var(--jp-ui-font-color0);
}
.jp-Dialog-button.jp-mod-styled:not(:last-child) {
margin-right: 12px;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
.jp-Input-Boolean-Dialog {
flex-direction: row-reverse;
align-items: end;
width: 100%;
}
.jp-Input-Boolean-Dialog > label {
flex: 1 1 auto;
}
/*-----------------------------------------------------------------------------
| Copyright (c) 2014-2016, Jupyter Development Team.
|
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-MainAreaWidget > :focus {
outline: none;
}
.jp-MainAreaWidget .jp-MainAreaWidget-error {
padding: 6px;
}
.jp-MainAreaWidget .jp-MainAreaWidget-error > pre {
width: auto;
padding: 10px;
background: var(--jp-error-color3);
border: var(--jp-border-width) solid var(--jp-error-color1);
border-radius: var(--jp-border-radius);
color: var(--jp-ui-font-color1);
font-size: var(--jp-ui-font-size1);
white-space: pre-wrap;
word-wrap: break-word;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/**
* google-material-color v1.2.6
* https://github.com/danlevan/google-material-color
*/
:root {
--md-red-50: #ffebee;
--md-red-100: #ffcdd2;
--md-red-200: #ef9a9a;
--md-red-300: #e57373;
--md-red-400: #ef5350;
--md-red-500: #f44336;
--md-red-600: #e53935;
--md-red-700: #d32f2f;
--md-red-800: #c62828;
--md-red-900: #b71c1c;
--md-red-A100: #ff8a80;
--md-red-A200: #ff5252;
--md-red-A400: #ff1744;
--md-red-A700: #d50000;
--md-pink-50: #fce4ec;
--md-pink-100: #f8bbd0;
--md-pink-200: #f48fb1;
--md-pink-300: #f06292;
--md-pink-400: #ec407a;
--md-pink-500: #e91e63;
--md-pink-600: #d81b60;
--md-pink-700: #c2185b;
--md-pink-800: #ad1457;
--md-pink-900: #880e4f;
--md-pink-A100: #ff80ab;
--md-pink-A200: #ff4081;
--md-pink-A400: #f50057;
--md-pink-A700: #c51162;
--md-purple-50: #f3e5f5;
--md-purple-100: #e1bee7;
--md-purple-200: #ce93d8;
--md-purple-300: #ba68c8;
--md-purple-400: #ab47bc;
--md-purple-500: #9c27b0;
--md-purple-600: #8e24aa;
--md-purple-700: #7b1fa2;
--md-purple-800: #6a1b9a;
--md-purple-900: #4a148c;
--md-purple-A100: #ea80fc;
--md-purple-A200: #e040fb;
--md-purple-A400: #d500f9;
--md-purple-A700: #a0f;
--md-deep-purple-50: #ede7f6;
--md-deep-purple-100: #d1c4e9;
--md-deep-purple-200: #b39ddb;
--md-deep-purple-300: #9575cd;
--md-deep-purple-400: #7e57c2;
--md-deep-purple-500: #673ab7;
--md-deep-purple-600: #5e35b1;
--md-deep-purple-700: #512da8;
--md-deep-purple-800: #4527a0;
--md-deep-purple-900: #311b92;
--md-deep-purple-A100: #b388ff;
--md-deep-purple-A200: #7c4dff;
--md-deep-purple-A400: #651fff;
--md-deep-purple-A700: #6200ea;
--md-indigo-50: #e8eaf6;
--md-indigo-100: #c5cae9;
--md-indigo-200: #9fa8da;
--md-indigo-300: #7986cb;
--md-indigo-400: #5c6bc0;
--md-indigo-500: #3f51b5;
--md-indigo-600: #3949ab;
--md-indigo-700: #303f9f;
--md-indigo-800: #283593;
--md-indigo-900: #1a237e;
--md-indigo-A100: #8c9eff;
--md-indigo-A200: #536dfe;
--md-indigo-A400: #3d5afe;
--md-indigo-A700: #304ffe;
--md-blue-50: #e3f2fd;
--md-blue-100: #bbdefb;
--md-blue-200: #90caf9;
--md-blue-300: #64b5f6;
--md-blue-400: #42a5f5;
--md-blue-500: #2196f3;
--md-blue-600: #1e88e5;
--md-blue-700: #1976d2;
--md-blue-800: #1565c0;
--md-blue-900: #0d47a1;
--md-blue-A100: #82b1ff;
--md-blue-A200: #448aff;
--md-blue-A400: #2979ff;
--md-blue-A700: #2962ff;
--md-light-blue-50: #e1f5fe;
--md-light-blue-100: #b3e5fc;
--md-light-blue-200: #81d4fa;
--md-light-blue-300: #4fc3f7;
--md-light-blue-400: #29b6f6;
--md-light-blue-500: #03a9f4;
--md-light-blue-600: #039be5;
--md-light-blue-700: #0288d1;
--md-light-blue-800: #0277bd;
--md-light-blue-900: #01579b;
--md-light-blue-A100: #80d8ff;
--md-light-blue-A200: #40c4ff;
--md-light-blue-A400: #00b0ff;
--md-light-blue-A700: #0091ea;
--md-cyan-50: #e0f7fa;
--md-cyan-100: #b2ebf2;
--md-cyan-200: #80deea;
--md-cyan-300: #4dd0e1;
--md-cyan-400: #26c6da;
--md-cyan-500: #00bcd4;
--md-cyan-600: #00acc1;
--md-cyan-700: #0097a7;
--md-cyan-800: #00838f;
--md-cyan-900: #006064;
--md-cyan-A100: #84ffff;
--md-cyan-A200: #18ffff;
--md-cyan-A400: #00e5ff;
--md-cyan-A700: #00b8d4;
--md-teal-50: #e0f2f1;
--md-teal-100: #b2dfdb;
--md-teal-200: #80cbc4;
--md-teal-300: #4db6ac;
--md-teal-400: #26a69a;
--md-teal-500: #009688;
--md-teal-600: #00897b;
--md-teal-700: #00796b;
--md-teal-800: #00695c;
--md-teal-900: #004d40;
--md-teal-A100: #a7ffeb;
--md-teal-A200: #64ffda;
--md-teal-A400: #1de9b6;
--md-teal-A700: #00bfa5;
--md-green-50: #e8f5e9;
--md-green-100: #c8e6c9;
--md-green-200: #a5d6a7;
--md-green-300: #81c784;
--md-green-400: #66bb6a;
--md-green-500: #4caf50;
--md-green-600: #43a047;
--md-green-700: #388e3c;
--md-green-800: #2e7d32;
--md-green-900: #1b5e20;
--md-green-A100: #b9f6ca;
--md-green-A200: #69f0ae;
--md-green-A400: #00e676;
--md-green-A700: #00c853;
--md-light-green-50: #f1f8e9;
--md-light-green-100: #dcedc8;
--md-light-green-200: #c5e1a5;
--md-light-green-300: #aed581;
--md-light-green-400: #9ccc65;
--md-light-green-500: #8bc34a;
--md-light-green-600: #7cb342;
--md-light-green-700: #689f38;
--md-light-green-800: #558b2f;
--md-light-green-900: #33691e;
--md-light-green-A100: #ccff90;
--md-light-green-A200: #b2ff59;
--md-light-green-A400: #76ff03;
--md-light-green-A700: #64dd17;
--md-lime-50: #f9fbe7;
--md-lime-100: #f0f4c3;
--md-lime-200: #e6ee9c;
--md-lime-300: #dce775;
--md-lime-400: #d4e157;
--md-lime-500: #cddc39;
--md-lime-600: #c0ca33;
--md-lime-700: #afb42b;
--md-lime-800: #9e9d24;
--md-lime-900: #827717;
--md-lime-A100: #f4ff81;
--md-lime-A200: #eeff41;
--md-lime-A400: #c6ff00;
--md-lime-A700: #aeea00;
--md-yellow-50: #fffde7;
--md-yellow-100: #fff9c4;
--md-yellow-200: #fff59d;
--md-yellow-300: #fff176;
--md-yellow-400: #ffee58;
--md-yellow-500: #ffeb3b;
--md-yellow-600: #fdd835;
--md-yellow-700: #fbc02d;
--md-yellow-800: #f9a825;
--md-yellow-900: #f57f17;
--md-yellow-A100: #ffff8d;
--md-yellow-A200: #ff0;
--md-yellow-A400: #ffea00;
--md-yellow-A700: #ffd600;
--md-amber-50: #fff8e1;
--md-amber-100: #ffecb3;
--md-amber-200: #ffe082;
--md-amber-300: #ffd54f;
--md-amber-400: #ffca28;
--md-amber-500: #ffc107;
--md-amber-600: #ffb300;
--md-amber-700: #ffa000;
--md-amber-800: #ff8f00;
--md-amber-900: #ff6f00;
--md-amber-A100: #ffe57f;
--md-amber-A200: #ffd740;
--md-amber-A400: #ffc400;
--md-amber-A700: #ffab00;
--md-orange-50: #fff3e0;
--md-orange-100: #ffe0b2;
--md-orange-200: #ffcc80;
--md-orange-300: #ffb74d;
--md-orange-400: #ffa726;
--md-orange-500: #ff9800;
--md-orange-600: #fb8c00;
--md-orange-700: #f57c00;
--md-orange-800: #ef6c00;
--md-orange-900: #e65100;
--md-orange-A100: #ffd180;
--md-orange-A200: #ffab40;
--md-orange-A400: #ff9100;
--md-orange-A700: #ff6d00;
--md-deep-orange-50: #fbe9e7;
--md-deep-orange-100: #ffccbc;
--md-deep-orange-200: #ffab91;
--md-deep-orange-300: #ff8a65;
--md-deep-orange-400: #ff7043;
--md-deep-orange-500: #ff5722;
--md-deep-orange-600: #f4511e;
--md-deep-orange-700: #e64a19;
--md-deep-orange-800: #d84315;
--md-deep-orange-900: #bf360c;
--md-deep-orange-A100: #ff9e80;
--md-deep-orange-A200: #ff6e40;
--md-deep-orange-A400: #ff3d00;
--md-deep-orange-A700: #dd2c00;
--md-brown-50: #efebe9;
--md-brown-100: #d7ccc8;
--md-brown-200: #bcaaa4;
--md-brown-300: #a1887f;
--md-brown-400: #8d6e63;
--md-brown-500: #795548;
--md-brown-600: #6d4c41;
--md-brown-700: #5d4037;
--md-brown-800: #4e342e;
--md-brown-900: #3e2723;
--md-grey-50: #fafafa;
--md-grey-100: #f5f5f5;
--md-grey-200: #eee;
--md-grey-300: #e0e0e0;
--md-grey-400: #bdbdbd;
--md-grey-500: #9e9e9e;
--md-grey-600: #757575;
--md-grey-700: #616161;
--md-grey-800: #424242;
--md-grey-900: #212121;
--md-blue-grey-50: #eceff1;
--md-blue-grey-100: #cfd8dc;
--md-blue-grey-200: #b0bec5;
--md-blue-grey-300: #90a4ae;
--md-blue-grey-400: #78909c;
--md-blue-grey-500: #607d8b;
--md-blue-grey-600: #546e7a;
--md-blue-grey-700: #455a64;
--md-blue-grey-800: #37474f;
--md-blue-grey-900: #263238;
}
/*-----------------------------------------------------------------------------
| Copyright (c) 2014-2017, Jupyter Development Team.
|
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| RenderedText
|----------------------------------------------------------------------------*/
:root {
/* This is the padding value to fill the gaps between lines containing spans with background color. */
--jp-private-code-span-padding: calc(
(var(--jp-code-line-height) - 1) * var(--jp-code-font-size) / 2
);
}
.jp-RenderedText {
text-align: left;
padding-left: var(--jp-code-padding);
line-height: var(--jp-code-line-height);
font-family: var(--jp-code-font-family);
}
.jp-RenderedText pre,
.jp-RenderedJavaScript pre,
.jp-RenderedHTMLCommon pre {
color: var(--jp-content-font-color1);
font-size: var(--jp-code-font-size);
border: none;
margin: 0;
padding: 0;
}
.jp-RenderedText pre a:link {
text-decoration: none;
color: var(--jp-content-link-color);
}
.jp-RenderedText pre a:hover {
text-decoration: underline;
color: var(--jp-content-link-color);
}
.jp-RenderedText pre a:visited {
text-decoration: none;
color: var(--jp-content-link-color);
}
/* console foregrounds and backgrounds */
.jp-RenderedText pre .ansi-black-fg {
color: #3e424d;
}
.jp-RenderedText pre .ansi-red-fg {
color: #e75c58;
}
.jp-RenderedText pre .ansi-green-fg {
color: #00a250;
}
.jp-RenderedText pre .ansi-yellow-fg {
color: #ddb62b;
}
.jp-RenderedText pre .ansi-blue-fg {
color: #208ffb;
}
.jp-RenderedText pre .ansi-magenta-fg {
color: #d160c4;
}
.jp-RenderedText pre .ansi-cyan-fg {
color: #60c6c8;
}
.jp-RenderedText pre .ansi-white-fg {
color: #c5c1b4;
}
.jp-RenderedText pre .ansi-black-bg {
background-color: #3e424d;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-red-bg {
background-color: #e75c58;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-green-bg {
background-color: #00a250;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-yellow-bg {
background-color: #ddb62b;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-blue-bg {
background-color: #208ffb;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-magenta-bg {
background-color: #d160c4;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-cyan-bg {
background-color: #60c6c8;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-white-bg {
background-color: #c5c1b4;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-black-intense-fg {
color: #282c36;
}
.jp-RenderedText pre .ansi-red-intense-fg {
color: #b22b31;
}
.jp-RenderedText pre .ansi-green-intense-fg {
color: #007427;
}
.jp-RenderedText pre .ansi-yellow-intense-fg {
color: #b27d12;
}
.jp-RenderedText pre .ansi-blue-intense-fg {
color: #0065ca;
}
.jp-RenderedText pre .ansi-magenta-intense-fg {
color: #a03196;
}
.jp-RenderedText pre .ansi-cyan-intense-fg {
color: #258f8f;
}
.jp-RenderedText pre .ansi-white-intense-fg {
color: #a1a6b2;
}
.jp-RenderedText pre .ansi-black-intense-bg {
background-color: #282c36;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-red-intense-bg {
background-color: #b22b31;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-green-intense-bg {
background-color: #007427;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-yellow-intense-bg {
background-color: #b27d12;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-blue-intense-bg {
background-color: #0065ca;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-magenta-intense-bg {
background-color: #a03196;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-cyan-intense-bg {
background-color: #258f8f;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-white-intense-bg {
background-color: #a1a6b2;
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-default-inverse-fg {
color: var(--jp-ui-inverse-font-color0);
}
.jp-RenderedText pre .ansi-default-inverse-bg {
background-color: var(--jp-inverse-layout-color0);
padding: var(--jp-private-code-span-padding) 0;
}
.jp-RenderedText pre .ansi-bold {
font-weight: bold;
}
.jp-RenderedText pre .ansi-underline {
text-decoration: underline;
}
.jp-RenderedText[data-mime-type='application/vnd.jupyter.stderr'] {
background: var(--jp-rendermime-error-background);
padding-top: var(--jp-code-padding);
}
/*-----------------------------------------------------------------------------
| RenderedLatex
|----------------------------------------------------------------------------*/
.jp-RenderedLatex {
color: var(--jp-content-font-color1);
font-size: var(--jp-content-font-size1);
line-height: var(--jp-content-line-height);
}
/* Left-justify outputs.*/
.jp-OutputArea-output.jp-RenderedLatex {
padding: var(--jp-code-padding);
text-align: left;
}
/*-----------------------------------------------------------------------------
| RenderedHTML
|----------------------------------------------------------------------------*/
.jp-RenderedHTMLCommon {
color: var(--jp-content-font-color1);
font-family: var(--jp-content-font-family);
font-size: var(--jp-content-font-size1);
line-height: var(--jp-content-line-height);
/* Give a bit more R padding on Markdown text to keep line lengths reasonable */
padding-right: 20px;
}
.jp-RenderedHTMLCommon em {
font-style: italic;
}
.jp-RenderedHTMLCommon strong {
font-weight: bold;
}
.jp-RenderedHTMLCommon u {
text-decoration: underline;
}
.jp-RenderedHTMLCommon a:link {
text-decoration: none;
color: var(--jp-content-link-color);
}
.jp-RenderedHTMLCommon a:hover {
text-decoration: underline;
color: var(--jp-content-link-color);
}
.jp-RenderedHTMLCommon a:visited {
text-decoration: none;
color: var(--jp-content-link-color);
}
/* Headings */
.jp-RenderedHTMLCommon h1,
.jp-RenderedHTMLCommon h2,
.jp-RenderedHTMLCommon h3,
.jp-RenderedHTMLCommon h4,
.jp-RenderedHTMLCommon h5,
.jp-RenderedHTMLCommon h6 {
line-height: var(--jp-content-heading-line-height);
font-weight: var(--jp-content-heading-font-weight);
font-style: normal;
margin: var(--jp-content-heading-margin-top) 0
var(--jp-content-heading-margin-bottom) 0;
}
.jp-RenderedHTMLCommon h1:first-child,
.jp-RenderedHTMLCommon h2:first-child,
.jp-RenderedHTMLCommon h3:first-child,
.jp-RenderedHTMLCommon h4:first-child,
.jp-RenderedHTMLCommon h5:first-child,
.jp-RenderedHTMLCommon h6:first-child {
margin-top: calc(0.5 * var(--jp-content-heading-margin-top));
}
.jp-RenderedHTMLCommon h1:last-child,
.jp-RenderedHTMLCommon h2:last-child,
.jp-RenderedHTMLCommon h3:last-child,
.jp-RenderedHTMLCommon h4:last-child,
.jp-RenderedHTMLCommon h5:last-child,
.jp-RenderedHTMLCommon h6:last-child {
margin-bottom: calc(0.5 * var(--jp-content-heading-margin-bottom));
}
.jp-RenderedHTMLCommon h1 {
font-size: var(--jp-content-font-size5);
}
.jp-RenderedHTMLCommon h2 {
font-size: var(--jp-content-font-size4);
}
.jp-RenderedHTMLCommon h3 {
font-size: var(--jp-content-font-size3);
}
.jp-RenderedHTMLCommon h4 {
font-size: var(--jp-content-font-size2);
}
.jp-RenderedHTMLCommon h5 {
font-size: var(--jp-content-font-size1);
}
.jp-RenderedHTMLCommon h6 {
font-size: var(--jp-content-font-size0);
}
/* Lists */
/* stylelint-disable selector-max-type, selector-max-compound-selectors */
.jp-RenderedHTMLCommon ul:not(.list-inline),
.jp-RenderedHTMLCommon ol:not(.list-inline) {
padding-left: 2em;
}
.jp-RenderedHTMLCommon ul {
list-style: disc;
}
.jp-RenderedHTMLCommon ul ul {
list-style: square;
}
.jp-RenderedHTMLCommon ul ul ul {
list-style: circle;
}
.jp-RenderedHTMLCommon ol {
list-style: decimal;
}
.jp-RenderedHTMLCommon ol ol {
list-style: upper-alpha;
}
.jp-RenderedHTMLCommon ol ol ol {
list-style: lower-alpha;
}
.jp-RenderedHTMLCommon ol ol ol ol {
list-style: lower-roman;
}
.jp-RenderedHTMLCommon ol ol ol ol ol {
list-style: decimal;
}
.jp-RenderedHTMLCommon ol,
.jp-RenderedHTMLCommon ul {
margin-bottom: 1em;
}
.jp-RenderedHTMLCommon ul ul,
.jp-RenderedHTMLCommon ul ol,
.jp-RenderedHTMLCommon ol ul,
.jp-RenderedHTMLCommon ol ol {
margin-bottom: 0;
}
/* stylelint-enable selector-max-type, selector-max-compound-selectors */
.jp-RenderedHTMLCommon hr {
color: var(--jp-border-color2);
background-color: var(--jp-border-color1);
margin-top: 1em;
margin-bottom: 1em;
}
.jp-RenderedHTMLCommon > pre {
margin: 1.5em 2em;
}
.jp-RenderedHTMLCommon pre,
.jp-RenderedHTMLCommon code {
border: 0;
background-color: var(--jp-layout-color0);
color: var(--jp-content-font-color1);
font-family: var(--jp-code-font-family);
font-size: inherit;
line-height: var(--jp-code-line-height);
padding: 0;
white-space: pre-wrap;
}
.jp-RenderedHTMLCommon :not(pre) > code {
background-color: var(--jp-layout-color2);
padding: 1px 5px;
}
/* Tables */
.jp-RenderedHTMLCommon table {
border-collapse: collapse;
border-spacing: 0;
border: none;
color: var(--jp-ui-font-color1);
font-size: var(--jp-ui-font-size1);
table-layout: fixed;
margin-left: auto;
margin-bottom: 1em;
margin-right: auto;
}
.jp-RenderedHTMLCommon thead {
border-bottom: var(--jp-border-width) solid var(--jp-border-color1);
vertical-align: bottom;
}
.jp-RenderedHTMLCommon td,
.jp-RenderedHTMLCommon th,
.jp-RenderedHTMLCommon tr {
vertical-align: middle;
padding: 0.5em;
line-height: normal;
white-space: normal;
max-width: none;
border: none;
}
.jp-RenderedMarkdown.jp-RenderedHTMLCommon td,
.jp-RenderedMarkdown.jp-RenderedHTMLCommon th {
max-width: none;
}
:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon td,
:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon th,
:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon tr {
text-align: right;
}
.jp-RenderedHTMLCommon th {
font-weight: bold;
}
.jp-RenderedHTMLCommon tbody tr:nth-child(odd) {
background: var(--jp-layout-color0);
}
.jp-RenderedHTMLCommon tbody tr:nth-child(even) {
background: var(--jp-rendermime-table-row-background);
}
.jp-RenderedHTMLCommon tbody tr:hover {
background: var(--jp-rendermime-table-row-hover-background);
}
.jp-RenderedHTMLCommon p {
text-align: left;
margin: 0;
margin-bottom: 1em;
}
.jp-RenderedHTMLCommon img {
-moz-force-broken-image-icon: 1;
}
/* Restrict to direct children as other images could be nested in other content. */
.jp-RenderedHTMLCommon > img {
display: block;
margin-left: 0;
margin-right: 0;
margin-bottom: 1em;
}
/* Change color behind transparent images if they need it... */
[data-jp-theme-light='false'] .jp-RenderedImage img.jp-needs-light-background {
background-color: var(--jp-inverse-layout-color1);
}
[data-jp-theme-light='true'] .jp-RenderedImage img.jp-needs-dark-background {
background-color: var(--jp-inverse-layout-color1);
}
.jp-RenderedHTMLCommon img,
.jp-RenderedImage img,
.jp-RenderedHTMLCommon svg,
.jp-RenderedSVG svg {
max-width: 100%;
height: auto;
}
.jp-RenderedHTMLCommon img.jp-mod-unconfined,
.jp-RenderedImage img.jp-mod-unconfined,
.jp-RenderedHTMLCommon svg.jp-mod-unconfined,
.jp-RenderedSVG svg.jp-mod-unconfined {
max-width: none;
}
.jp-RenderedHTMLCommon .alert {
padding: var(--jp-notebook-padding);
border: var(--jp-border-width) solid transparent;
border-radius: var(--jp-border-radius);
margin-bottom: 1em;
}
.jp-RenderedHTMLCommon .alert-info {
color: var(--jp-info-color0);
background-color: var(--jp-info-color3);
border-color: var(--jp-info-color2);
}
.jp-RenderedHTMLCommon .alert-info hr {
border-color: var(--jp-info-color3);
}
.jp-RenderedHTMLCommon .alert-info > p:last-child,
.jp-RenderedHTMLCommon .alert-info > ul:last-child {
margin-bottom: 0;
}
.jp-RenderedHTMLCommon .alert-warning {
color: var(--jp-warn-color0);
background-color: var(--jp-warn-color3);
border-color: var(--jp-warn-color2);
}
.jp-RenderedHTMLCommon .alert-warning hr {
border-color: var(--jp-warn-color3);
}
.jp-RenderedHTMLCommon .alert-warning > p:last-child,
.jp-RenderedHTMLCommon .alert-warning > ul:last-child {
margin-bottom: 0;
}
.jp-RenderedHTMLCommon .alert-success {
color: var(--jp-success-color0);
background-color: var(--jp-success-color3);
border-color: var(--jp-success-color2);
}
.jp-RenderedHTMLCommon .alert-success hr {
border-color: var(--jp-success-color3);
}
.jp-RenderedHTMLCommon .alert-success > p:last-child,
.jp-RenderedHTMLCommon .alert-success > ul:last-child {
margin-bottom: 0;
}
.jp-RenderedHTMLCommon .alert-danger {
color: var(--jp-error-color0);
background-color: var(--jp-error-color3);
border-color: var(--jp-error-color2);
}
.jp-RenderedHTMLCommon .alert-danger hr {
border-color: var(--jp-error-color3);
}
.jp-RenderedHTMLCommon .alert-danger > p:last-child,
.jp-RenderedHTMLCommon .alert-danger > ul:last-child {
margin-bottom: 0;
}
.jp-RenderedHTMLCommon blockquote {
margin: 1em 2em;
padding: 0 1em;
border-left: 5px solid var(--jp-border-color2);
}
a.jp-InternalAnchorLink {
visibility: hidden;
margin-left: 8px;
color: var(--md-blue-800);
}
h1:hover .jp-InternalAnchorLink,
h2:hover .jp-InternalAnchorLink,
h3:hover .jp-InternalAnchorLink,
h4:hover .jp-InternalAnchorLink,
h5:hover .jp-InternalAnchorLink,
h6:hover .jp-InternalAnchorLink {
visibility: visible;
}
.jp-RenderedHTMLCommon kbd {
background-color: var(--jp-rendermime-table-row-background);
border: 1px solid var(--jp-border-color0);
border-bottom-color: var(--jp-border-color2);
border-radius: 3px;
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
display: inline-block;
font-size: var(--jp-ui-font-size0);
line-height: 1em;
padding: 0.2em 0.5em;
}
/* Most direct children of .jp-RenderedHTMLCommon have a margin-bottom of 1.0.
* At the bottom of cells this is a bit too much as there is also spacing
* between cells. Going all the way to 0 gets too tight between markdown and
* code cells.
*/
.jp-RenderedHTMLCommon > *:last-child {
margin-bottom: 0.5em;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
| Distributed under the terms of the BSD 3-Clause License.
|
| The full license is in the file LICENSE, distributed with this software.
|----------------------------------------------------------------------------*/
.lm-cursor-backdrop {
position: fixed;
width: 200px;
height: 200px;
margin-top: -100px;
margin-left: -100px;
will-change: transform;
z-index: 100;
}
.lm-mod-drag-image {
will-change: transform;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
.jp-lineFormSearch {
padding: 4px 12px;
background-color: var(--jp-layout-color2);
box-shadow: var(--jp-toolbar-box-shadow);
z-index: 2;
font-size: var(--jp-ui-font-size1);
}
.jp-lineFormCaption {
font-size: var(--jp-ui-font-size0);
line-height: var(--jp-ui-font-size1);
margin-top: 4px;
color: var(--jp-ui-font-color0);
}
.jp-baseLineForm {
border: none;
border-radius: 0;
position: absolute;
background-size: 16px;
background-repeat: no-repeat;
background-position: center;
outline: none;
}
.jp-lineFormButtonContainer {
top: 4px;
right: 8px;
height: 24px;
padding: 0 12px;
width: 12px;
}
.jp-lineFormButtonIcon {
top: 0;
right: 0;
background-color: var(--jp-brand-color1);
height: 100%;
width: 100%;
box-sizing: border-box;
padding: 4px 6px;
}
.jp-lineFormButton {
top: 0;
right: 0;
background-color: transparent;
height: 100%;
width: 100%;
box-sizing: border-box;
}
.jp-lineFormWrapper {
overflow: hidden;
padding: 0 8px;
border: 1px solid var(--jp-border-color0);
background-color: var(--jp-input-active-background);
height: 22px;
}
.jp-lineFormWrapperFocusWithin {
border: var(--jp-border-width) solid var(--md-blue-500);
box-shadow: inset 0 0 4px var(--md-blue-300);
}
.jp-lineFormInput {
background: transparent;
width: 200px;
height: 100%;
border: none;
outline: none;
color: var(--jp-ui-font-color0);
line-height: 28px;
}
/*-----------------------------------------------------------------------------
| Copyright (c) 2014-2016, Jupyter Development Team.
|
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-JSONEditor {
display: flex;
flex-direction: column;
width: 100%;
}
.jp-JSONEditor-host {
flex: 1 1 auto;
border: var(--jp-border-width) solid var(--jp-input-border-color);
border-radius: 0;
background: var(--jp-layout-color0);
min-height: 50px;
padding: 1px;
}
.jp-JSONEditor.jp-mod-error .jp-JSONEditor-host {
border-color: red;
outline-color: red;
}
.jp-JSONEditor-header {
display: flex;
flex: 1 0 auto;
padding: 0 0 0 12px;
}
.jp-JSONEditor-header label {
flex: 0 0 auto;
}
.jp-JSONEditor-commitButton {
height: 16px;
width: 16px;
background-size: 18px;
background-repeat: no-repeat;
background-position: center;
}
.jp-JSONEditor-host.jp-mod-focused {
background-color: var(--jp-input-active-background);
border: 1px solid var(--jp-input-active-border-color);
box-shadow: var(--jp-input-box-shadow);
}
.jp-Editor.jp-mod-dropTarget {
border: var(--jp-border-width) solid var(--jp-input-active-border-color);
box-shadow: var(--jp-input-box-shadow);
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-DocumentSearch-input {
border: none;
outline: none;
color: var(--jp-ui-font-color0);
font-size: var(--jp-ui-font-size1);
background-color: var(--jp-layout-color0);
font-family: var(--jp-ui-font-family);
padding: 2px 1px;
resize: none;
}
.jp-DocumentSearch-overlay {
position: absolute;
background-color: var(--jp-toolbar-background);
border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);
border-left: var(--jp-border-width) solid var(--jp-toolbar-border-color);
top: 0;
right: 0;
z-index: 7;
min-width: 405px;
padding: 2px;
font-size: var(--jp-ui-font-size1);
--jp-private-document-search-button-height: 20px;
}
.jp-DocumentSearch-overlay button {
background-color: var(--jp-toolbar-background);
outline: 0;
}
.jp-DocumentSearch-overlay button:hover {
background-color: var(--jp-layout-color2);
}
.jp-DocumentSearch-overlay button:active {
background-color: var(--jp-layout-color3);
}
.jp-DocumentSearch-overlay-row {
display: flex;
align-items: center;
margin-bottom: 2px;
}
.jp-DocumentSearch-button-content {
display: inline-block;
cursor: pointer;
box-sizing: border-box;
width: 100%;
height: 100%;
}
.jp-DocumentSearch-button-content svg {
width: 100%;
height: 100%;
}
.jp-DocumentSearch-input-wrapper {
border: var(--jp-border-width) solid var(--jp-border-color0);
display: flex;
background-color: var(--jp-layout-color0);
margin: 2px;
}
.jp-DocumentSearch-input-wrapper:focus-within {
border-color: var(--jp-cell-editor-active-border-color);
}
.jp-DocumentSearch-toggle-wrapper,
.jp-DocumentSearch-button-wrapper {
all: initial;
overflow: hidden;
display: inline-block;
border: none;
box-sizing: border-box;
}
.jp-DocumentSearch-toggle-wrapper {
width: 14px;
height: 14px;
}
.jp-DocumentSearch-button-wrapper {
width: var(--jp-private-document-search-button-height);
height: var(--jp-private-document-search-button-height);
}
.jp-DocumentSearch-toggle-wrapper:focus,
.jp-DocumentSearch-button-wrapper:focus {
outline: var(--jp-border-width) solid
var(--jp-cell-editor-active-border-color);
outline-offset: -1px;
}
.jp-DocumentSearch-toggle-wrapper,
.jp-DocumentSearch-button-wrapper,
.jp-DocumentSearch-button-content:focus {
outline: none;
}
.jp-DocumentSearch-toggle-placeholder {
width: 5px;
}
.jp-DocumentSearch-input-button::before {
display: block;
padding-top: 100%;
}
.jp-DocumentSearch-input-button-off {
opacity: var(--jp-search-toggle-off-opacity);
}
.jp-DocumentSearch-input-button-off:hover {
opacity: var(--jp-search-toggle-hover-opacity);
}
.jp-DocumentSearch-input-button-on {
opacity: var(--jp-search-toggle-on-opacity);
}
.jp-DocumentSearch-index-counter {
padding-left: 10px;
padding-right: 10px;
user-select: none;
min-width: 35px;
display: inline-block;
}
.jp-DocumentSearch-up-down-wrapper {
display: inline-block;
padding-right: 2px;
margin-left: auto;
white-space: nowrap;
}
.jp-DocumentSearch-spacer {
margin-left: auto;
}
.jp-DocumentSearch-up-down-wrapper button {
outline: 0;
border: none;
width: var(--jp-private-document-search-button-height);
height: var(--jp-private-document-search-button-height);
vertical-align: middle;
margin: 1px 5px 2px;
}
.jp-DocumentSearch-up-down-button:hover {
background-color: var(--jp-layout-color2);
}
.jp-DocumentSearch-up-down-button:active {
background-color: var(--jp-layout-color3);
}
.jp-DocumentSearch-filter-button {
border-radius: var(--jp-border-radius);
}
.jp-DocumentSearch-filter-button:hover {
background-color: var(--jp-layout-color2);
}
.jp-DocumentSearch-filter-button-enabled {
background-color: var(--jp-layout-color2);
}
.jp-DocumentSearch-filter-button-enabled:hover {
background-color: var(--jp-layout-color3);
}
.jp-DocumentSearch-search-options {
padding: 0 8px;
margin-left: 3px;
width: 100%;
display: grid;
justify-content: start;
grid-template-columns: 1fr 1fr;
align-items: center;
justify-items: stretch;
}
.jp-DocumentSearch-search-filter-disabled {
color: var(--jp-ui-font-color2);
}
.jp-DocumentSearch-search-filter {
display: flex;
align-items: center;
user-select: none;
}
.jp-DocumentSearch-regex-error {
color: var(--jp-error-color0);
}
.jp-DocumentSearch-replace-button-wrapper {
overflow: hidden;
display: inline-block;
box-sizing: border-box;
border: var(--jp-border-width) solid var(--jp-border-color0);
margin: auto 2px;
padding: 1px 4px;
height: calc(var(--jp-private-document-search-button-height) + 2px);
}
.jp-DocumentSearch-replace-button-wrapper:focus {
border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);
}
.jp-DocumentSearch-replace-button {
display: inline-block;
text-align: center;
cursor: pointer;
box-sizing: border-box;
color: var(--jp-ui-font-color1);
/* height - 2 * (padding of wrapper) */
line-height: calc(var(--jp-private-document-search-button-height) - 2px);
width: 100%;
height: 100%;
}
.jp-DocumentSearch-replace-button:focus {
outline: none;
}
.jp-DocumentSearch-replace-wrapper-class {
margin-left: 14px;
display: flex;
}
.jp-DocumentSearch-replace-toggle {
border: none;
background-color: var(--jp-toolbar-background);
border-radius: var(--jp-border-radius);
}
.jp-DocumentSearch-replace-toggle:hover {
background-color: var(--jp-layout-color2);
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.cm-editor {
line-height: var(--jp-code-line-height);
font-size: var(--jp-code-font-size);
font-family: var(--jp-code-font-family);
border: 0;
border-radius: 0;
height: auto;
/* Changed to auto to autogrow */
}
.cm-editor pre {
padding: 0 var(--jp-code-padding);
}
.jp-CodeMirrorEditor[data-type='inline'] .cm-dialog {
background-color: var(--jp-layout-color0);
color: var(--jp-content-font-color1);
}
.jp-CodeMirrorEditor {
cursor: text;
}
/* When zoomed out 67% and 33% on a screen of 1440 width x 900 height */
@media screen and (min-width: 2138px) and (max-width: 4319px) {
.jp-CodeMirrorEditor[data-type='inline'] .cm-cursor {
border-left: var(--jp-code-cursor-width1) solid
var(--jp-editor-cursor-color);
}
}
/* When zoomed out less than 33% */
@media screen and (min-width: 4320px) {
.jp-CodeMirrorEditor[data-type='inline'] .cm-cursor {
border-left: var(--jp-code-cursor-width2) solid
var(--jp-editor-cursor-color);
}
}
.cm-editor.jp-mod-readOnly .cm-cursor {
display: none;
}
.jp-CollaboratorCursor {
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: none;
border-bottom: 3px solid;
background-clip: content-box;
margin-left: -5px;
margin-right: -5px;
}
.cm-searching,
.cm-searching span {
/* `.cm-searching span`: we need to override syntax highlighting */
background-color: var(--jp-search-unselected-match-background-color);
color: var(--jp-search-unselected-match-color);
}
.cm-searching::selection,
.cm-searching span::selection {
background-color: var(--jp-search-unselected-match-background-color);
color: var(--jp-search-unselected-match-color);
}
.jp-current-match > .cm-searching,
.jp-current-match > .cm-searching span,
.cm-searching > .jp-current-match,
.cm-searching > .jp-current-match span {
background-color: var(--jp-search-selected-match-background-color);
color: var(--jp-search-selected-match-color);
}
.jp-current-match > .cm-searching::selection,
.cm-searching > .jp-current-match::selection,
.jp-current-match > .cm-searching span::selection {
background-color: var(--jp-search-selected-match-background-color);
color: var(--jp-search-selected-match-color);
}
.cm-trailingspace {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAsElEQVQIHQGlAFr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+r3zKmT0/+pk9P/7+r3zAAAAAAAAAAABAAAAAAAAAAA6OPzM+/q9wAAAAAA6OPzMwAAAAAAAAAAAgAAAAAAAAAAGR8NiRQaCgAZIA0AGR8NiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQyoYJ/SY80UAAAAASUVORK5CYII=);
background-position: center left;
background-repeat: repeat-x;
}
.jp-CollaboratorCursor-hover {
position: absolute;
z-index: 1;
transform: translateX(-50%);
color: white;
border-radius: 3px;
padding-left: 4px;
padding-right: 4px;
padding-top: 1px;
padding-bottom: 1px;
text-align: center;
font-size: var(--jp-ui-font-size1);
white-space: nowrap;
}
.jp-CodeMirror-ruler {
border-left: 1px dashed var(--jp-border-color2);
}
/* Styles for shared cursors (remote cursor locations and selected ranges) */
.jp-CodeMirrorEditor .cm-ySelectionCaret {
position: relative;
border-left: 1px solid black;
margin-left: -1px;
margin-right: -1px;
box-sizing: border-box;
}
.jp-CodeMirrorEditor .cm-ySelectionCaret > .cm-ySelectionInfo {
white-space: nowrap;
position: absolute;
top: -1.15em;
padding-bottom: 0.05em;
left: -1px;
font-size: 0.95em;
font-family: var(--jp-ui-font-family);
font-weight: bold;
line-height: normal;
user-select: none;
color: white;
padding-left: 2px;
padding-right: 2px;
z-index: 101;
transition: opacity 0.3s ease-in-out;
}
.jp-CodeMirrorEditor .cm-ySelectionInfo {
transition-delay: 0.7s;
opacity: 0;
}
.jp-CodeMirrorEditor .cm-ySelectionCaret:hover > .cm-ySelectionInfo {
opacity: 1;
transition-delay: 0s;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-MimeDocument {
outline: none;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Variables
|----------------------------------------------------------------------------*/
:root {
--jp-private-filebrowser-button-height: 28px;
--jp-private-filebrowser-button-width: 48px;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-FileBrowser .jp-SidePanel-content {
display: flex;
flex-direction: column;
}
.jp-FileBrowser-toolbar.jp-Toolbar {
flex-wrap: wrap;
row-gap: 12px;
border-bottom: none;
height: auto;
margin: 8px 12px 0;
box-shadow: none;
padding: 0;
justify-content: flex-start;
}
.jp-FileBrowser-Panel {
flex: 1 1 auto;
display: flex;
flex-direction: column;
}
.jp-BreadCrumbs {
flex: 0 0 auto;
margin: 8px 12px;
}
.jp-BreadCrumbs-item {
margin: 0 2px;
padding: 0 2px;
border-radius: var(--jp-border-radius);
cursor: pointer;
}
.jp-BreadCrumbs-item:hover {
background-color: var(--jp-layout-color2);
}
.jp-BreadCrumbs-item:first-child {
margin-left: 0;
}
.jp-BreadCrumbs-item.jp-mod-dropTarget {
background-color: var(--jp-brand-color2);
opacity: 0.7;
}
/*-----------------------------------------------------------------------------
| Buttons
|----------------------------------------------------------------------------*/
.jp-FileBrowser-toolbar > .jp-Toolbar-item {
flex: 0 0 auto;
padding-left: 0;
padding-right: 2px;
align-items: center;
height: unset;
}
.jp-FileBrowser-toolbar > .jp-Toolbar-item .jp-ToolbarButtonComponent {
width: 40px;
}
/*-----------------------------------------------------------------------------
| Other styles
|----------------------------------------------------------------------------*/
.jp-FileDialog.jp-mod-conflict input {
color: var(--jp-error-color1);
}
.jp-FileDialog .jp-new-name-title {
margin-top: 12px;
}
.jp-LastModified-hidden {
display: none;
}
.jp-FileSize-hidden {
display: none;
}
.jp-FileBrowser .lm-AccordionPanel > h3:first-child {
display: none;
}
/*-----------------------------------------------------------------------------
| DirListing
|----------------------------------------------------------------------------*/
.jp-DirListing {
flex: 1 1 auto;
display: flex;
flex-direction: column;
outline: 0;
}
.jp-DirListing-header {
flex: 0 0 auto;
display: flex;
flex-direction: row;
align-items: center;
overflow: hidden;
border-top: var(--jp-border-width) solid var(--jp-border-color2);
border-bottom: var(--jp-border-width) solid var(--jp-border-color1);
box-shadow: var(--jp-toolbar-box-shadow);
z-index: 2;
}
.jp-DirListing-headerItem {
padding: 4px 12px 2px;
font-weight: 500;
}
.jp-DirListing-headerItem:hover {
background: var(--jp-layout-color2);
}
.jp-DirListing-headerItem.jp-id-name {
flex: 1 0 84px;
}
.jp-DirListing-headerItem.jp-id-modified {
flex: 0 0 112px;
border-left: var(--jp-border-width) solid var(--jp-border-color2);
text-align: right;
}
.jp-DirListing-headerItem.jp-id-filesize {
flex: 0 0 75px;
border-left: var(--jp-border-width) solid var(--jp-border-color2);
text-align: right;
}
.jp-id-narrow {
display: none;
flex: 0 0 5px;
padding: 4px;
border-left: var(--jp-border-width) solid var(--jp-border-color2);
text-align: right;
color: var(--jp-border-color2);
}
.jp-DirListing-narrow .jp-id-narrow {
display: block;
}
.jp-DirListing-narrow .jp-id-modified,
.jp-DirListing-narrow .jp-DirListing-itemModified {
display: none;
}
.jp-DirListing-headerItem.jp-mod-selected {
font-weight: 600;
}
/* increase specificity to override bundled default */
.jp-DirListing-content {
flex: 1 1 auto;
margin: 0;
padding: 0;
list-style-type: none;
overflow: auto;
background-color: var(--jp-layout-color1);
}
.jp-DirListing-content mark {
color: var(--jp-ui-font-color0);
background-color: transparent;
font-weight: bold;
}
.jp-DirListing-content .jp-DirListing-item.jp-mod-selected mark {
color: var(--jp-ui-inverse-font-color0);
}
/* Style the directory listing content when a user drops a file to upload */
.jp-DirListing.jp-mod-native-drop .jp-DirListing-content {
outline: 5px dashed rgba(128, 128, 128, 0.5);
outline-offset: -10px;
cursor: copy;
}
.jp-DirListing-item {
display: flex;
flex-direction: row;
align-items: center;
padding: 4px 12px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.jp-DirListing-checkboxWrapper {
/* Increases hit area of checkbox. */
padding: 4px;
}
.jp-DirListing-header
.jp-DirListing-checkboxWrapper
+ .jp-DirListing-headerItem {
padding-left: 4px;
}
.jp-DirListing-content .jp-DirListing-checkboxWrapper {
position: relative;
left: -4px;
margin: -4px 0 -4px -8px;
}
.jp-DirListing-checkboxWrapper.jp-mod-visible {
visibility: visible;
}
/* For devices that support hovering, hide checkboxes until hovered, selected...
*/
@media (hover: hover) {
.jp-DirListing-checkboxWrapper {
visibility: hidden;
}
.jp-DirListing-item:hover .jp-DirListing-checkboxWrapper,
.jp-DirListing-item.jp-mod-selected .jp-DirListing-checkboxWrapper {
visibility: visible;
}
}
.jp-DirListing-item[data-is-dot] {
opacity: 75%;
}
.jp-DirListing-item.jp-mod-selected {
color: var(--jp-ui-inverse-font-color1);
background: var(--jp-brand-color1);
}
.jp-DirListing-item.jp-mod-dropTarget {
background: var(--jp-brand-color3);
}
.jp-DirListing-item:hover:not(.jp-mod-selected) {
background: var(--jp-layout-color2);
}
.jp-DirListing-itemIcon {
flex: 0 0 20px;
margin-right: 4px;
}
.jp-DirListing-itemText {
flex: 1 0 64px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
user-select: none;
}
.jp-DirListing-itemText:focus {
outline-width: 2px;
outline-color: var(--jp-inverse-layout-color1);
outline-style: solid;
outline-offset: 1px;
}
.jp-DirListing-item.jp-mod-selected .jp-DirListing-itemText:focus {
outline-color: var(--jp-layout-color1);
}
.jp-DirListing-itemModified {
flex: 0 0 125px;
text-align: right;
}
.jp-DirListing-itemFileSize {
flex: 0 0 90px;
text-align: right;
}
.jp-DirListing-editor {
flex: 1 0 64px;
outline: none;
border: none;
color: var(--jp-ui-font-color1);
background-color: var(--jp-layout-color1);
}
.jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon::before {
color: var(--jp-success-color1);
content: '\25CF';
font-size: 8px;
position: absolute;
left: -8px;
}
.jp-DirListing-item.jp-mod-running.jp-mod-selected
.jp-DirListing-itemIcon::before {
color: var(--jp-ui-inverse-font-color1);
}
.jp-DirListing-item.lm-mod-drag-image,
.jp-DirListing-item.jp-mod-selected.lm-mod-drag-image {
font-size: var(--jp-ui-font-size1);
padding-left: 4px;
margin-left: 4px;
width: 160px;
background-color: var(--jp-ui-inverse-font-color2);
box-shadow: var(--jp-elevation-z2);
border-radius: 0;
color: var(--jp-ui-font-color1);
transform: translateX(-40%) translateY(-58%);
}
.jp-Document {
min-width: 120px;
min-height: 120px;
outline: none;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Main OutputArea
| OutputArea has a list of Outputs
|----------------------------------------------------------------------------*/
.jp-OutputArea {
overflow-y: auto;
}
.jp-OutputArea-child {
display: table;
table-layout: fixed;
width: 100%;
overflow: hidden;
}
.jp-OutputPrompt {
width: var(--jp-cell-prompt-width);
color: var(--jp-cell-outprompt-font-color);
font-family: var(--jp-cell-prompt-font-family);
padding: var(--jp-code-padding);
letter-spacing: var(--jp-cell-prompt-letter-spacing);
line-height: var(--jp-code-line-height);
font-size: var(--jp-code-font-size);
border: var(--jp-border-width) solid transparent;
opacity: var(--jp-cell-prompt-opacity);
/* Right align prompt text, don't wrap to handle large prompt numbers */
text-align: right;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
/* Disable text selection */
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.jp-OutputArea-prompt {
display: table-cell;
vertical-align: top;
}
.jp-OutputArea-output {
display: table-cell;
width: 100%;
height: auto;
overflow: auto;
user-select: text;
-moz-user-select: text;
-webkit-user-select: text;
-ms-user-select: text;
}
.jp-OutputArea .jp-RenderedText {
padding-left: 1ch;
}
/**
* Prompt overlay.
*/
.jp-OutputArea-promptOverlay {
position: absolute;
top: 0;
width: var(--jp-cell-prompt-width);
height: 100%;
opacity: 0.5;
}
.jp-OutputArea-promptOverlay:hover {
background: var(--jp-layout-color2);
box-shadow: inset 0 0 1px var(--jp-inverse-layout-color0);
cursor: zoom-out;
}
.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay:hover {
cursor: zoom-in;
}
/**
* Isolated output.
*/
.jp-OutputArea-output.jp-mod-isolated {
width: 100%;
display: block;
}
/*
When drag events occur, `lm-mod-override-cursor` is added to the body.
Because iframes steal all cursor events, the following two rules are necessary
to suppress pointer events while resize drags are occurring. There may be a
better solution to this problem.
*/
body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated {
position: relative;
}
body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: transparent;
}
/* pre */
.jp-OutputArea-output pre {
border: none;
margin: 0;
padding: 0;
overflow-x: auto;
overflow-y: auto;
word-break: break-all;
word-wrap: break-word;
white-space: pre-wrap;
}
/* tables */
.jp-OutputArea-output.jp-RenderedHTMLCommon table {
margin-left: 0;
margin-right: 0;
}
/* description lists */
.jp-OutputArea-output dl,
.jp-OutputArea-output dt,
.jp-OutputArea-output dd {
display: block;
}
.jp-OutputArea-output dl {
width: 100%;
overflow: hidden;
padding: 0;
margin: 0;
}
.jp-OutputArea-output dt {
font-weight: bold;
float: left;
width: 20%;
padding: 0;
margin: 0;
}
.jp-OutputArea-output dd {
float: left;
width: 80%;
padding: 0;
margin: 0;
}
.jp-TrimmedOutputs pre {
background: var(--jp-layout-color3);
font-size: calc(var(--jp-code-font-size) * 1.4);
text-align: center;
text-transform: uppercase;
}
/* Hide the gutter in case of
* - nested output areas (e.g. in the case of output widgets)
* - mirrored output areas
*/
.jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt {
display: none;
}
/* Hide empty lines in the output area, for instance due to cleared widgets */
.jp-OutputArea-prompt:empty {
padding: 0;
border: 0;
}
/*-----------------------------------------------------------------------------
| executeResult is added to any Output-result for the display of the object
| returned by a cell
|----------------------------------------------------------------------------*/
.jp-OutputArea-output.jp-OutputArea-executeResult {
margin-left: 0;
width: 100%;
}
/* Text output with the Out[] prompt needs a top padding to match the
* alignment of the Out[] prompt itself.
*/
.jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output {
padding-top: var(--jp-code-padding);
border-top: var(--jp-border-width) solid transparent;
}
/*-----------------------------------------------------------------------------
| The Stdin output
|----------------------------------------------------------------------------*/
.jp-Stdin-prompt {
color: var(--jp-content-font-color0);
padding-right: var(--jp-code-padding);
vertical-align: baseline;
flex: 0 0 auto;
}
.jp-Stdin-input {
font-family: var(--jp-code-font-family);
font-size: inherit;
color: inherit;
background-color: inherit;
width: 42%;
min-width: 200px;
/* make sure input baseline aligns with prompt */
vertical-align: baseline;
/* padding + margin = 0.5em between prompt and cursor */
padding: 0 0.25em;
margin: 0 0.25em;
flex: 0 0 70%;
}
.jp-Stdin-input::placeholder {
opacity: 0;
}
.jp-Stdin-input:focus {
box-shadow: none;
}
.jp-Stdin-input:focus::placeholder {
opacity: 1;
}
/*-----------------------------------------------------------------------------
| Output Area View
|----------------------------------------------------------------------------*/
.jp-LinkedOutputView .jp-OutputArea {
height: 100%;
display: block;
}
.jp-LinkedOutputView .jp-OutputArea-output:only-child {
height: 100%;
}
/*-----------------------------------------------------------------------------
| Printing
|----------------------------------------------------------------------------*/
@media print {
.jp-OutputArea-child {
break-inside: avoid-page;
}
}
/*-----------------------------------------------------------------------------
| Mobile
|----------------------------------------------------------------------------*/
@media only screen and (max-width: 760px) {
.jp-OutputPrompt {
display: table-row;
text-align: left;
}
.jp-OutputArea-child .jp-OutputArea-output {
display: table-row;
margin-left: var(--jp-notebook-padding);
}
}
/* Trimmed outputs warning */
.jp-TrimmedOutputs > a {
margin: 10px;
text-decoration: none;
cursor: pointer;
}
.jp-TrimmedOutputs > a:hover {
text-decoration: none;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Table of Contents
|----------------------------------------------------------------------------*/
:root {
--jp-private-toc-active-width: 4px;
}
.jp-TableOfContents {
display: flex;
flex-direction: column;
background: var(--jp-layout-color1);
color: var(--jp-ui-font-color1);
font-size: var(--jp-ui-font-size1);
height: 100%;
}
.jp-TableOfContents-placeholder {
text-align: center;
}
.jp-TableOfContents-placeholderContent {
color: var(--jp-content-font-color2);
padding: 8px;
}
.jp-TableOfContents-placeholderContent > h3 {
margin-bottom: var(--jp-content-heading-margin-bottom);
}
.jp-TableOfContents .jp-SidePanel-content {
overflow-y: auto;
}
.jp-TableOfContents-tree {
margin: 4px;
}
.jp-TableOfContents ol {
list-style-type: none;
}
/* stylelint-disable-next-line selector-max-type */
.jp-TableOfContents li > ol {
/* Align left border with triangle icon center */
padding-left: 11px;
}
.jp-TableOfContents-content {
/* left margin for the active heading indicator */
margin: 0 0 0 var(--jp-private-toc-active-width);
padding: 0;
background-color: var(--jp-layout-color1);
}
.jp-tocItem {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.jp-tocItem-heading {
display: flex;
cursor: pointer;
}
.jp-tocItem-heading:hover {
background-color: var(--jp-layout-color2);
}
.jp-tocItem-content {
display: block;
padding: 4px 0;
white-space: nowrap;
text-overflow: ellipsis;
overflow-x: hidden;
}
.jp-tocItem-collapser {
height: 20px;
margin: 2px 2px 0;
padding: 0;
background: none;
border: none;
cursor: pointer;
}
.jp-tocItem-collapser:hover {
background-color: var(--jp-layout-color3);
}
/* Active heading indicator */
.jp-tocItem-heading::before {
content: ' ';
background: transparent;
width: var(--jp-private-toc-active-width);
height: 24px;
position: absolute;
left: 0;
border-radius: var(--jp-border-radius);
}
.jp-tocItem-heading.jp-tocItem-active::before {
background-color: var(--jp-brand-color1);
}
.jp-tocItem-heading:hover.jp-tocItem-active::before {
background: var(--jp-brand-color0);
opacity: 1;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-Collapser {
flex: 0 0 var(--jp-cell-collapser-width);
padding: 0;
margin: 0;
border: none;
outline: none;
background: transparent;
border-radius: var(--jp-border-radius);
opacity: 1;
}
.jp-Collapser-child {
display: block;
width: 100%;
box-sizing: border-box;
/* height: 100% doesn't work because the height of its parent is computed from content */
position: absolute;
top: 0;
bottom: 0;
}
/*-----------------------------------------------------------------------------
| Printing
|----------------------------------------------------------------------------*/
/*
Hiding collapsers in print mode.
Note: input and output wrappers have "display: block" propery in print mode.
*/
@media print {
.jp-Collapser {
display: none;
}
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Header/Footer
|----------------------------------------------------------------------------*/
/* Hidden by zero height by default */
.jp-CellHeader,
.jp-CellFooter {
height: 0;
width: 100%;
padding: 0;
margin: 0;
border: none;
outline: none;
background: transparent;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Input
|----------------------------------------------------------------------------*/
/* All input areas */
.jp-InputArea {
display: table;
table-layout: fixed;
width: 100%;
overflow: hidden;
}
.jp-InputArea-editor {
display: table-cell;
overflow: hidden;
vertical-align: top;
/* This is the non-active, default styling */
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
border-radius: 0;
background: var(--jp-cell-editor-background);
}
.jp-InputPrompt {
display: table-cell;
vertical-align: top;
width: var(--jp-cell-prompt-width);
color: var(--jp-cell-inprompt-font-color);
font-family: var(--jp-cell-prompt-font-family);
padding: var(--jp-code-padding);
letter-spacing: var(--jp-cell-prompt-letter-spacing);
opacity: var(--jp-cell-prompt-opacity);
line-height: var(--jp-code-line-height);
font-size: var(--jp-code-font-size);
border: var(--jp-border-width) solid transparent;
/* Right align prompt text, don't wrap to handle large prompt numbers */
text-align: right;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
/* Disable text selection */
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/*-----------------------------------------------------------------------------
| Mobile
|----------------------------------------------------------------------------*/
@media only screen and (max-width: 760px) {
.jp-InputArea-editor {
display: table-row;
margin-left: var(--jp-notebook-padding);
}
.jp-InputPrompt {
display: table-row;
text-align: left;
}
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Placeholder
|----------------------------------------------------------------------------*/
.jp-Placeholder {
display: table;
table-layout: fixed;
width: 100%;
}
.jp-Placeholder-prompt {
display: table-cell;
box-sizing: border-box;
}
.jp-Placeholder-content {
display: table-cell;
padding: 4px 6px;
border: 1px solid transparent;
border-radius: 0;
background: none;
box-sizing: border-box;
cursor: pointer;
}
.jp-Placeholder-contentContainer {
display: flex;
}
.jp-Placeholder-content:hover,
.jp-InputPlaceholder > .jp-Placeholder-content:hover {
border-color: var(--jp-layout-color3);
}
.jp-Placeholder-content .jp-MoreHorizIcon {
width: 32px;
height: 16px;
border: 1px solid transparent;
border-radius: var(--jp-border-radius);
}
.jp-Placeholder-content .jp-MoreHorizIcon:hover {
border: 1px solid var(--jp-border-color1);
box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.25);
background-color: var(--jp-layout-color0);
}
.jp-PlaceholderText {
white-space: nowrap;
overflow-x: hidden;
color: var(--jp-inverse-layout-color3);
font-family: var(--jp-code-font-family);
}
.jp-InputPlaceholder > .jp-Placeholder-content {
border-color: var(--jp-cell-editor-border-color);
background: var(--jp-cell-editor-background);
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Private CSS variables
|----------------------------------------------------------------------------*/
:root {
--jp-private-cell-scrolling-output-offset: 5px;
}
/*-----------------------------------------------------------------------------
| Cell
|----------------------------------------------------------------------------*/
.jp-Cell {
padding: var(--jp-cell-padding);
margin: 0;
border: none;
outline: none;
background: transparent;
}
/*-----------------------------------------------------------------------------
| Common input/output
|----------------------------------------------------------------------------*/
.jp-Cell-inputWrapper,
.jp-Cell-outputWrapper {
display: flex;
flex-direction: row;
padding: 0;
margin: 0;
/* Added to reveal the box-shadow on the input and output collapsers. */
overflow: visible;
}
/* Only input/output areas inside cells */
.jp-Cell-inputArea,
.jp-Cell-outputArea {
flex: 1 1 auto;
}
/*-----------------------------------------------------------------------------
| Collapser
|----------------------------------------------------------------------------*/
/* Make the output collapser disappear when there is not output, but do so
* in a manner that leaves it in the layout and preserves its width.
*/
.jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser {
border: none !important;
background: transparent !important;
}
.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser {
min-height: var(--jp-cell-collapser-min-height);
}
/*-----------------------------------------------------------------------------
| Output
|----------------------------------------------------------------------------*/
/* Put a space between input and output when there IS output */
.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper {
margin-top: 5px;
}
.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea {
overflow-y: auto;
max-height: 24em;
margin-left: var(--jp-private-cell-scrolling-output-offset);
resize: vertical;
}
.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea[style*='height'] {
max-height: unset;
}
.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea::after {
content: ' ';
box-shadow: inset 0 0 6px 2px rgb(0 0 0 / 30%);
width: 100%;
height: 100%;
position: sticky;
bottom: 0;
top: 0;
margin-top: -50%;
float: left;
display: block;
pointer-events: none;
}
.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-child {
padding-top: 6px;
}
.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt {
width: calc(
var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset)
);
}
.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay {
left: calc(-1 * var(--jp-private-cell-scrolling-output-offset));
}
/*-----------------------------------------------------------------------------
| CodeCell
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| MarkdownCell
|----------------------------------------------------------------------------*/
.jp-MarkdownOutput {
display: table-cell;
width: 100%;
margin-top: 0;
margin-bottom: 0;
padding-left: var(--jp-code-padding);
}
.jp-MarkdownOutput.jp-RenderedHTMLCommon {
overflow: auto;
}
/* collapseHeadingButton (show always if hiddenCellsButton is _not_ shown) */
.jp-collapseHeadingButton {
display: flex;
min-height: var(--jp-cell-collapser-min-height);
font-size: var(--jp-code-font-size);
position: absolute;
background-color: transparent;
background-size: 25px;
background-repeat: no-repeat;
background-position-x: center;
background-position-y: top;
background-image: var(--jp-icon-caret-down);
right: 0;
top: 0;
bottom: 0;
}
.jp-collapseHeadingButton.jp-mod-collapsed {
background-image: var(--jp-icon-caret-right);
}
/*
set the container font size to match that of content
so that the nested collapse buttons have the right size
*/
.jp-MarkdownCell .jp-InputPrompt {
font-size: var(--jp-content-font-size1);
}
/*
Align collapseHeadingButton with cell top header
The font sizes are identical to the ones in packages/rendermime/style/base.css
*/
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='1'] {
font-size: var(--jp-content-font-size5);
background-position-y: calc(0.3 * var(--jp-content-font-size5));
}
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='2'] {
font-size: var(--jp-content-font-size4);
background-position-y: calc(0.3 * var(--jp-content-font-size4));
}
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='3'] {
font-size: var(--jp-content-font-size3);
background-position-y: calc(0.3 * var(--jp-content-font-size3));
}
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='4'] {
font-size: var(--jp-content-font-size2);
background-position-y: calc(0.3 * var(--jp-content-font-size2));
}
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='5'] {
font-size: var(--jp-content-font-size1);
background-position-y: top;
}
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='6'] {
font-size: var(--jp-content-font-size0);
background-position-y: top;
}
/* collapseHeadingButton (show only on (hover,active) if hiddenCellsButton is shown) */
.jp-Notebook.jp-mod-showHiddenCellsButton .jp-collapseHeadingButton {
display: none;
}
.jp-Notebook.jp-mod-showHiddenCellsButton
:is(.jp-MarkdownCell:hover, .jp-mod-active)
.jp-collapseHeadingButton {
display: flex;
}
/* showHiddenCellsButton (only show if jp-mod-showHiddenCellsButton is set, which
is a consequence of the showHiddenCellsButton option in Notebook Settings)*/
.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton {
margin-left: calc(var(--jp-cell-prompt-width) + 2 * var(--jp-code-padding));
margin-top: var(--jp-code-padding);
border: 1px solid var(--jp-border-color2);
background-color: var(--jp-border-color3) !important;
color: var(--jp-content-font-color0) !important;
display: flex;
}
.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton:hover {
background-color: var(--jp-border-color2) !important;
}
.jp-showHiddenCellsButton {
display: none;
}
/*-----------------------------------------------------------------------------
| Printing
|----------------------------------------------------------------------------*/
/*
Using block instead of flex to allow the use of the break-inside CSS property for
cell outputs.
*/
@media print {
.jp-Cell-inputWrapper,
.jp-Cell-outputWrapper {
display: block;
}
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Variables
|----------------------------------------------------------------------------*/
:root {
--jp-notebook-toolbar-padding: 2px 5px 2px 2px;
}
/*-----------------------------------------------------------------------------
/*-----------------------------------------------------------------------------
| Styles
|----------------------------------------------------------------------------*/
.jp-NotebookPanel-toolbar {
padding: var(--jp-notebook-toolbar-padding);
/* disable paint containment from lumino 2.0 default strict CSS containment */
contain: style size !important;
}
.jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused {
border: none;
box-shadow: none;
}
.jp-Notebook-toolbarCellTypeDropdown select {
height: 24px;
font-size: var(--jp-ui-font-size1);
line-height: 14px;
border-radius: 0;
display: block;
}
.jp-Notebook-toolbarCellTypeDropdown span {
top: 5px !important;
}
.jp-Toolbar-responsive-popup {
position: absolute;
height: fit-content;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-end;
border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);
box-shadow: var(--jp-toolbar-box-shadow);
background: var(--jp-toolbar-background);
min-height: var(--jp-toolbar-micro-height);
padding: var(--jp-notebook-toolbar-padding);
z-index: 1;
right: 0;
top: 0;
}
.jp-Toolbar > .jp-Toolbar-responsive-opener {
margin-left: auto;
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Variables
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
/*-----------------------------------------------------------------------------
| Styles
|----------------------------------------------------------------------------*/
.jp-Notebook-ExecutionIndicator {
position: relative;
display: inline-block;
height: 100%;
z-index: 9997;
}
.jp-Notebook-ExecutionIndicator-tooltip {
visibility: hidden;
height: auto;
width: max-content;
width: -moz-max-content;
background-color: var(--jp-layout-color2);
color: var(--jp-ui-font-color1);
text-align: justify;
border-radius: 6px;
padding: 0 5px;
position: fixed;
display: table;
}
.jp-Notebook-ExecutionIndicator-tooltip.up {
transform: translateX(-50%) translateY(-100%) translateY(-32px);
}
.jp-Notebook-ExecutionIndicator-tooltip.down {
transform: translateX(calc(-100% + 16px)) translateY(5px);
}
.jp-Notebook-ExecutionIndicator-tooltip.hidden {
display: none;
}
.jp-Notebook-ExecutionIndicator:hover .jp-Notebook-ExecutionIndicator-tooltip {
visibility: visible;
}
.jp-Notebook-ExecutionIndicator span {
font-size: var(--jp-ui-font-size1);
font-family: var(--jp-ui-font-family);
color: var(--jp-ui-font-color1);
line-height: 24px;
display: block;
}
.jp-Notebook-ExecutionIndicator-progress-bar {
display: flex;
justify-content: center;
height: 100%;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
/*
* Execution indicator
*/
.jp-tocItem-content::after {
content: '';
/* Must be identical to form a circle */
width: 12px;
height: 12px;
background: none;
border: none;
position: absolute;
right: 0;
}
.jp-tocItem-content[data-running='0']::after {
border-radius: 50%;
border: var(--jp-border-width) solid var(--jp-inverse-layout-color3);
background: none;
}
.jp-tocItem-content[data-running='1']::after {
border-radius: 50%;
border: var(--jp-border-width) solid var(--jp-inverse-layout-color3);
background-color: var(--jp-inverse-layout-color3);
}
.jp-tocItem-content[data-running='0'],
.jp-tocItem-content[data-running='1'] {
margin-right: 12px;
}
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
.jp-Notebook-footer {
height: 27px;
margin-left: calc(
var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) +
var(--jp-cell-padding)
);
width: calc(
100% -
(
var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) +
var(--jp-cell-padding) + var(--jp-cell-padding)
)
);
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
color: var(--jp-ui-font-color3);
margin-top: 6px;
background: none;
cursor: pointer;
}
.jp-Notebook-footer:focus {
border-color: var(--jp-cell-editor-active-border-color);
}
/* For devices that support hovering, hide footer until hover */
@media (hover: hover) {
.jp-Notebook-footer {
opacity: 0;
}
.jp-Notebook-footer:focus,
.jp-Notebook-footer:hover {
opacity: 1;
}
}
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| Imports
|----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
| CSS variables
|----------------------------------------------------------------------------*/
:root {
--jp-side-by-side-output-size: 1fr;
--jp-side-by-side-resized-cell: var(--jp-side-by-side-output-size);
--jp-private-notebook-dragImage-width: 304px;
--jp-private-notebook-dragImage-height: 36px;
--jp-private-notebook-selected-color: var(--md-blue-400);
--jp-private-notebook-active-color: var(--md-green-400);
}
/*-----------------------------------------------------------------------------
| Notebook
|----------------------------------------------------------------------------*/
/* stylelint-disable selector-max-class */
.jp-NotebookPanel {
display: block;
height: 100%;
}
.jp-NotebookPanel.jp-Document {
min-width: 240px;
min-height: 120px;
}
.jp-Notebook {
padding: var(--jp-notebook-padding);
outline: none;
overflow: auto;
background: var(--jp-layout-color0);
}
.jp-Notebook.jp-mod-scrollPastEnd::after {
display: block;
content: '';
min-height: var(--jp-notebook-scroll-padding);
}
.jp-MainAreaWidget-ContainStrict .jp-Notebook * {
contain: strict;
}
.jp-Notebook .jp-Cell {
overflow: visible;
}
.jp-Notebook .jp-Cell .jp-InputPrompt {
cursor: move;
}
/*-----------------------------------------------------------------------------
| Notebook state related styling
|
| The notebook and cells each have states, here are the possibilities:
|
| - Notebook
| - Command
| - Edit
| - Cell
| - None
| - Active (only one can be active)
| - Selected (the cells actions are applied to)
| - Multiselected (when multiple selected, the cursor)
| - No outputs
|----------------------------------------------------------------------------*/
/* Command or edit modes */
.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt {
opacity: var(--jp-cell-prompt-not-active-opacity);
color: var(--jp-cell-prompt-not-active-font-color);
}
.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt {
opacity: var(--jp-cell-prompt-not-active-opacity);
color: var(--jp-cell-prompt-not-active-font-color);
}
/* cell is active */
.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser {
background: var(--jp-brand-color1);
}
/* cell is dirty */
.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt {
color: var(--jp-warn-color1);
}
.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt::before {
color: var(--jp-warn-color1);
content: '•';
}
.jp-Notebook .jp-Cell.jp-mod-active.jp-mod-dirty .jp-Collapser {
background: var(--jp-warn-color1);
}
/* collapser is hovered */
.jp-Notebook .jp-Cell .jp-Collapser:hover {
box-shadow: var(--jp-elevation-z2);
background: var(--jp-brand-color1);
opacity: var(--jp-cell-collapser-not-active-hover-opacity);
}
/* cell is active and collapser is hovered */
.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover {
background: var(--jp-brand-color0);
opacity: 1;
}
/* Command mode */
.jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected {
background: var(--jp-notebook-multiselected-color);
}
.jp-Notebook.jp-mod-commandMode
.jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected) {
background: transparent;
}
/* Edit mode */
.jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor {
border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);
box-shadow: var(--jp-input-box-shadow);
background-color: var(--jp-cell-editor-active-background);
}
/*-----------------------------------------------------------------------------
| Notebook drag and drop
|----------------------------------------------------------------------------*/
.jp-Notebook-cell.jp-mod-dropSource {
opacity: 0.5;
}
.jp-Notebook-cell.jp-mod-dropTarget,
.jp-Notebook.jp-mod-commandMode
.jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget {
border-top-color: var(--jp-private-notebook-selected-color);
border-top-style: solid;
border-top-width: 2px;
}
.jp-dragImage {
display: block;
flex-direction: row;
width: var(--jp-private-notebook-dragImage-width);
height: var(--jp-private-notebook-dragImage-height);
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
background: var(--jp-cell-editor-background);
overflow: visible;
}
.jp-dragImage-singlePrompt {
box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12);
}
.jp-dragImage .jp-dragImage-content {
flex: 1 1 auto;
z-index: 2;
font-size: var(--jp-code-font-size);
font-family: var(--jp-code-font-family);
line-height: var(--jp-code-line-height);
padding: var(--jp-code-padding);
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
background: var(--jp-cell-editor-background-color);
color: var(--jp-content-font-color3);
text-align: left;
margin: 4px 4px 4px 0;
}
.jp-dragImage .jp-dragImage-prompt {
flex: 0 0 auto;
min-width: 36px;
color: var(--jp-cell-inprompt-font-color);
padding: var(--jp-code-padding);
padding-left: 12px;
font-family: var(--jp-cell-prompt-font-family);
letter-spacing: var(--jp-cell-prompt-letter-spacing);
line-height: 1.9;
font-size: var(--jp-code-font-size);
border: var(--jp-border-width) solid transparent;
}
.jp-dragImage-multipleBack {
z-index: -1;
position: absolute;
height: 32px;
width: 300px;
top: 8px;
left: 8px;
background: var(--jp-layout-color2);
border: var(--jp-border-width) solid var(--jp-input-border-color);
box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12);
}
/*-----------------------------------------------------------------------------
| Cell toolbar
|----------------------------------------------------------------------------*/
.jp-NotebookTools {
display: block;
min-width: var(--jp-sidebar-min-width);
color: var(--jp-ui-font-color1);
background: var(--jp-layout-color1);
/* This is needed so that all font sizing of children done in ems is
* relative to this base size */
font-size: var(--jp-ui-font-size1);
overflow: auto;
}
.jp-ActiveCellTool {
padding: 12px 0;
display: flex;
}
.jp-ActiveCellTool-Content {
flex: 1 1 auto;
}
.jp-ActiveCellTool .jp-ActiveCellTool-CellContent {
background: var(--jp-cell-editor-background);
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
border-radius: 0;
min-height: 29px;
}
.jp-ActiveCellTool .jp-InputPrompt {
min-width: calc(var(--jp-cell-prompt-width) * 0.75);
}
.jp-ActiveCellTool-CellContent > pre {
padding: 5px 4px;
margin: 0;
white-space: normal;
}
.jp-MetadataEditorTool {
flex-direction: column;
padding: 12px 0;
}
.jp-RankedPanel > :not(:first-child) {
margin-top: 12px;
}
.jp-KeySelector select.jp-mod-styled {
font-size: var(--jp-ui-font-size1);
color: var(--jp-ui-font-color0);
border: var(--jp-border-width) solid var(--jp-border-color1);
}
.jp-KeySelector label,
.jp-MetadataEditorTool label,
.jp-NumberSetter label {
line-height: 1.4;
}
.jp-NotebookTools .jp-select-wrapper {
margin-top: 4px;
margin-bottom: 0;
}
.jp-NumberSetter input {
width: 100%;
margin-top: 4px;
}
.jp-NotebookTools .jp-Collapse {
margin-top: 16px;
}
/*-----------------------------------------------------------------------------
| Presentation Mode (.jp-mod-presentationMode)
|----------------------------------------------------------------------------*/
.jp-mod-presentationMode .jp-Notebook {
--jp-content-font-size1: var(--jp-content-presentation-font-size1);
--jp-code-font-size: var(--jp-code-presentation-font-size);
}
.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,
.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt {
flex: 0 0 110px;
}
/*-----------------------------------------------------------------------------
| Side-by-side Mode (.jp-mod-sideBySide)
|----------------------------------------------------------------------------*/
.jp-mod-sideBySide.jp-Notebook .jp-Notebook-cell {
margin-top: 3em;
margin-bottom: 3em;
margin-left: 5%;
margin-right: 5%;
}
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell {
display: grid;
grid-template-columns: minmax(0, 1fr) min-content minmax(
0,
var(--jp-side-by-side-output-size)
);
grid-template-rows: auto minmax(0, 1fr) auto;
grid-template-areas:
'header header header'
'input handle output'
'footer footer footer';
}
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell.jp-mod-resizedCell {
grid-template-columns: minmax(0, 1fr) min-content minmax(
0,
var(--jp-side-by-side-resized-cell)
);
}
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellHeader {
grid-area: header;
}
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-inputWrapper {
grid-area: input;
}
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-outputWrapper {
/* overwrite the default margin (no vertical separation needed in side by side move */
margin-top: 0;
grid-area: output;
}
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellFooter {
grid-area: footer;
}
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle {
grid-area: handle;
user-select: none;
display: block;
height: 100%;
cursor: ew-resize;
padding: 0 var(--jp-cell-padding);
}
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle::after {
content: '';
display: block;
background: var(--jp-border-color2);
height: 100%;
width: 5px;
}
.jp-mod-sideBySide.jp-Notebook
.jp-CodeCell.jp-mod-resizedCell
.jp-CellResizeHandle::after {
background: var(--jp-border-color0);
}
.jp-CellResizeHandle {
display: none;
}
/*-----------------------------------------------------------------------------
| Placeholder
|----------------------------------------------------------------------------*/
.jp-Cell-Placeholder {
padding-left: 55px;
}
.jp-Cell-Placeholder-wrapper {
background: #fff;
border: 1px solid;
border-color: #e5e6e9 #dfe0e4 #d0d1d5;
border-radius: 4px;
-webkit-border-radius: 4px;
margin: 10px 15px;
}
.jp-Cell-Placeholder-wrapper-inner {
padding: 15px;
position: relative;
}
.jp-Cell-Placeholder-wrapper-body {
background-repeat: repeat;
background-size: 50% auto;
}
.jp-Cell-Placeholder-wrapper-body div {
background: #f6f7f8;
background-image: -webkit-linear-gradient(
left,
#f6f7f8 0%,
#edeef1 20%,
#f6f7f8 40%,
#f6f7f8 100%
);
background-repeat: no-repeat;
background-size: 800px 104px;
height: 104px;
position: absolute;
right: 15px;
left: 15px;
top: 15px;
}
div.jp-Cell-Placeholder-h1 {
top: 20px;
height: 20px;
left: 15px;
width: 150px;
}
div.jp-Cell-Placeholder-h2 {
left: 15px;
top: 50px;
height: 10px;
width: 100px;
}
div.jp-Cell-Placeholder-content-1,
div.jp-Cell-Placeholder-content-2,
div.jp-Cell-Placeholder-content-3 {
left: 15px;
right: 15px;
height: 10px;
}
div.jp-Cell-Placeholder-content-1 {
top: 100px;
}
div.jp-Cell-Placeholder-content-2 {
top: 120px;
}
div.jp-Cell-Placeholder-content-3 {
top: 140px;
}
</style>
<style type="text/css">
/*-----------------------------------------------------------------------------
| Copyright (c) Jupyter Development Team.
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
/*
The following CSS variables define the main, public API for styling JupyterLab.
These variables should be used by all plugins wherever possible. In other
words, plugins should not define custom colors, sizes, etc unless absolutely
necessary. This enables users to change the visual theme of JupyterLab
by changing these variables.
Many variables appear in an ordered sequence (0,1,2,3). These sequences
are designed to work well together, so for example, `--jp-border-color1` should
be used with `--jp-layout-color1`. The numbers have the following meanings:
* 0: super-primary, reserved for special emphasis
* 1: primary, most important under normal situations
* 2: secondary, next most important under normal situations
* 3: tertiary, next most important under normal situations
Throughout JupyterLab, we are mostly following principles from Google's
Material Design when selecting colors. We are not, however, following
all of MD as it is not optimized for dense, information rich UIs.
*/
:root {
/* Elevation
*
* We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here:
*
* https://github.com/material-components/material-components-web
* https://material-components-web.appspot.com/elevation.html
*/
--jp-shadow-base-lightness: 0;
--jp-shadow-umbra-color: rgba(
var(--jp-shadow-base-lightness),
var(--jp-shadow-base-lightness),
var(--jp-shadow-base-lightness),
0.2
);
--jp-shadow-penumbra-color: rgba(
var(--jp-shadow-base-lightness),
var(--jp-shadow-base-lightness),
var(--jp-shadow-base-lightness),
0.14
);
--jp-shadow-ambient-color: rgba(
var(--jp-shadow-base-lightness),
var(--jp-shadow-base-lightness),
var(--jp-shadow-base-lightness),
0.12
);
--jp-elevation-z0: none;
--jp-elevation-z1: 0 2px 1px -1px var(--jp-shadow-umbra-color),
0 1px 1px 0 var(--jp-shadow-penumbra-color),
0 1px 3px 0 var(--jp-shadow-ambient-color);
--jp-elevation-z2: 0 3px 1px -2px var(--jp-shadow-umbra-color),
0 2px 2px 0 var(--jp-shadow-penumbra-color),
0 1px 5px 0 var(--jp-shadow-ambient-color);
--jp-elevation-z4: 0 2px 4px -1px var(--jp-shadow-umbra-color),
0 4px 5px 0 var(--jp-shadow-penumbra-color),
0 1px 10px 0 var(--jp-shadow-ambient-color);
--jp-elevation-z6: 0 3px 5px -1px var(--jp-shadow-umbra-color),
0 6px 10px 0 var(--jp-shadow-penumbra-color),
0 1px 18px 0 var(--jp-shadow-ambient-color);
--jp-elevation-z8: 0 5px 5px -3px var(--jp-shadow-umbra-color),
0 8px 10px 1px var(--jp-shadow-penumbra-color),
0 3px 14px 2px var(--jp-shadow-ambient-color);
--jp-elevation-z12: 0 7px 8px -4px var(--jp-shadow-umbra-color),
0 12px 17px 2px var(--jp-shadow-penumbra-color),
0 5px 22px 4px var(--jp-shadow-ambient-color);
--jp-elevation-z16: 0 8px 10px -5px var(--jp-shadow-umbra-color),
0 16px 24px 2px var(--jp-shadow-penumbra-color),
0 6px 30px 5px var(--jp-shadow-ambient-color);
--jp-elevation-z20: 0 10px 13px -6px var(--jp-shadow-umbra-color),
0 20px 31px 3px var(--jp-shadow-penumbra-color),
0 8px 38px 7px var(--jp-shadow-ambient-color);
--jp-elevation-z24: 0 11px 15px -7px var(--jp-shadow-umbra-color),
0 24px 38px 3px var(--jp-shadow-penumbra-color),
0 9px 46px 8px var(--jp-shadow-ambient-color);
/* Borders
*
* The following variables, specify the visual styling of borders in JupyterLab.
*/
--jp-border-width: 1px;
--jp-border-color0: var(--md-grey-400);
--jp-border-color1: var(--md-grey-400);
--jp-border-color2: var(--md-grey-300);
--jp-border-color3: var(--md-grey-200);
--jp-inverse-border-color: var(--md-grey-600);
--jp-border-radius: 2px;
/* UI Fonts
*
* The UI font CSS variables are used for the typography all of the JupyterLab
* user interface elements that are not directly user generated content.
*
* The font sizing here is done assuming that the body font size of --jp-ui-font-size1
* is applied to a parent element. When children elements, such as headings, are sized
* in em all things will be computed relative to that body size.
*/
--jp-ui-font-scale-factor: 1.2;
--jp-ui-font-size0: 0.83333em;
--jp-ui-font-size1: 13px; /* Base font size */
--jp-ui-font-size2: 1.2em;
--jp-ui-font-size3: 1.44em;
--jp-ui-font-family: system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI',
helvetica, arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
'Segoe UI Symbol';
/*
* Use these font colors against the corresponding main layout colors.
* In a light theme, these go from dark to light.
*/
/* Defaults use Material Design specification */
--jp-ui-font-color0: rgba(0, 0, 0, 1);
--jp-ui-font-color1: rgba(0, 0, 0, 0.87);
--jp-ui-font-color2: rgba(0, 0, 0, 0.54);
--jp-ui-font-color3: rgba(0, 0, 0, 0.38);
/*
* Use these against the brand/accent/warn/error colors.
* These will typically go from light to darker, in both a dark and light theme.
*/
--jp-ui-inverse-font-color0: rgba(255, 255, 255, 1);
--jp-ui-inverse-font-color1: rgba(255, 255, 255, 1);
--jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7);
--jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5);
/* Content Fonts
*
* Content font variables are used for typography of user generated content.
*
* The font sizing here is done assuming that the body font size of --jp-content-font-size1
* is applied to a parent element. When children elements, such as headings, are sized
* in em all things will be computed relative to that body size.
*/
--jp-content-line-height: 1.6;
--jp-content-font-scale-factor: 1.2;
--jp-content-font-size0: 0.83333em;
--jp-content-font-size1: 14px; /* Base font size */
--jp-content-font-size2: 1.2em;
--jp-content-font-size3: 1.44em;
--jp-content-font-size4: 1.728em;
--jp-content-font-size5: 2.0736em;
/* This gives a magnification of about 125% in presentation mode over normal. */
--jp-content-presentation-font-size1: 17px;
--jp-content-heading-line-height: 1;
--jp-content-heading-margin-top: 1.2em;
--jp-content-heading-margin-bottom: 0.8em;
--jp-content-heading-font-weight: 500;
/* Defaults use Material Design specification */
--jp-content-font-color0: rgba(0, 0, 0, 1);
--jp-content-font-color1: rgba(0, 0, 0, 0.87);
--jp-content-font-color2: rgba(0, 0, 0, 0.54);
--jp-content-font-color3: rgba(0, 0, 0, 0.38);
--jp-content-link-color: var(--md-blue-900);
--jp-content-font-family: system-ui, -apple-system, blinkmacsystemfont,
'Segoe UI', helvetica, arial, sans-serif, 'Apple Color Emoji',
'Segoe UI Emoji', 'Segoe UI Symbol';
/*
* Code Fonts
*
* Code font variables are used for typography of code and other monospaces content.
*/
--jp-code-font-size: 13px;
--jp-code-line-height: 1.3077; /* 17px for 13px base */
--jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */
--jp-code-font-family-default: menlo, consolas, 'DejaVu Sans Mono', monospace;
--jp-code-font-family: var(--jp-code-font-family-default);
/* This gives a magnification of about 125% in presentation mode over normal. */
--jp-code-presentation-font-size: 16px;
/* may need to tweak cursor width if you change font size */
--jp-code-cursor-width0: 1.4px;
--jp-code-cursor-width1: 2px;
--jp-code-cursor-width2: 4px;
/* Layout
*
* The following are the main layout colors use in JupyterLab. In a light
* theme these would go from light to dark.
*/
--jp-layout-color0: white;
--jp-layout-color1: white;
--jp-layout-color2: var(--md-grey-200);
--jp-layout-color3: var(--md-grey-400);
--jp-layout-color4: var(--md-grey-600);
/* Inverse Layout
*
* The following are the inverse layout colors use in JupyterLab. In a light
* theme these would go from dark to light.
*/
--jp-inverse-layout-color0: #111;
--jp-inverse-layout-color1: var(--md-grey-900);
--jp-inverse-layout-color2: var(--md-grey-800);
--jp-inverse-layout-color3: var(--md-grey-700);
--jp-inverse-layout-color4: var(--md-grey-600);
/* Brand/accent */
--jp-brand-color0: var(--md-blue-900);
--jp-brand-color1: var(--md-blue-700);
--jp-brand-color2: var(--md-blue-300);
--jp-brand-color3: var(--md-blue-100);
--jp-brand-color4: var(--md-blue-50);
--jp-accent-color0: var(--md-green-900);
--jp-accent-color1: var(--md-green-700);
--jp-accent-color2: var(--md-green-300);
--jp-accent-color3: var(--md-green-100);
/* State colors (warn, error, success, info) */
--jp-warn-color0: var(--md-orange-900);
--jp-warn-color1: var(--md-orange-700);
--jp-warn-color2: var(--md-orange-300);
--jp-warn-color3: var(--md-orange-100);
--jp-error-color0: var(--md-red-900);
--jp-error-color1: var(--md-red-700);
--jp-error-color2: var(--md-red-300);
--jp-error-color3: var(--md-red-100);
--jp-success-color0: var(--md-green-900);
--jp-success-color1: var(--md-green-700);
--jp-success-color2: var(--md-green-300);
--jp-success-color3: var(--md-green-100);
--jp-info-color0: var(--md-cyan-900);
--jp-info-color1: var(--md-cyan-700);
--jp-info-color2: var(--md-cyan-300);
--jp-info-color3: var(--md-cyan-100);
/* Cell specific styles */
--jp-cell-padding: 5px;
--jp-cell-collapser-width: 8px;
--jp-cell-collapser-min-height: 20px;
--jp-cell-collapser-not-active-hover-opacity: 0.6;
--jp-cell-editor-background: var(--md-grey-100);
--jp-cell-editor-border-color: var(--md-grey-300);
--jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300);
--jp-cell-editor-active-background: var(--jp-layout-color0);
--jp-cell-editor-active-border-color: var(--jp-brand-color1);
--jp-cell-prompt-width: 64px;
--jp-cell-prompt-font-family: var(--jp-code-font-family-default);
--jp-cell-prompt-letter-spacing: 0;
--jp-cell-prompt-opacity: 1;
--jp-cell-prompt-not-active-opacity: 0.5;
--jp-cell-prompt-not-active-font-color: var(--md-grey-700);
/* A custom blend of MD grey and blue 600
* See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */
--jp-cell-inprompt-font-color: #307fc1;
/* A custom blend of MD grey and orange 600
* https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */
--jp-cell-outprompt-font-color: #bf5b3d;
/* Notebook specific styles */
--jp-notebook-padding: 10px;
--jp-notebook-select-background: var(--jp-layout-color1);
--jp-notebook-multiselected-color: var(--md-blue-50);
/* The scroll padding is calculated to fill enough space at the bottom of the
notebook to show one single-line cell (with appropriate padding) at the top
when the notebook is scrolled all the way to the bottom. We also subtract one
pixel so that no scrollbar appears if we have just one single-line cell in the
notebook. This padding is to enable a 'scroll past end' feature in a notebook.
*/
--jp-notebook-scroll-padding: calc(
100% - var(--jp-code-font-size) * var(--jp-code-line-height) -
var(--jp-code-padding) - var(--jp-cell-padding) - 1px
);
/* Rendermime styles */
--jp-rendermime-error-background: #fdd;
--jp-rendermime-table-row-background: var(--md-grey-100);
--jp-rendermime-table-row-hover-background: var(--md-light-blue-50);
/* Dialog specific styles */
--jp-dialog-background: rgba(0, 0, 0, 0.25);
/* Console specific styles */
--jp-console-padding: 10px;
/* Toolbar specific styles */
--jp-toolbar-border-color: var(--jp-border-color1);
--jp-toolbar-micro-height: 8px;
--jp-toolbar-background: var(--jp-layout-color1);
--jp-toolbar-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.24);
--jp-toolbar-header-margin: 4px 4px 0 4px;
--jp-toolbar-active-background: var(--md-grey-300);
/* Statusbar specific styles */
--jp-statusbar-height: 24px;
/* Input field styles */
--jp-input-box-shadow: inset 0 0 2px var(--md-blue-300);
--jp-input-active-background: var(--jp-layout-color1);
--jp-input-hover-background: var(--jp-layout-color1);
--jp-input-background: var(--md-grey-100);
--jp-input-border-color: var(--jp-inverse-border-color);
--jp-input-active-border-color: var(--jp-brand-color1);
--jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3);
/* General editor styles */
--jp-editor-selected-background: #d9d9d9;
--jp-editor-selected-focused-background: #d7d4f0;
--jp-editor-cursor-color: var(--jp-ui-font-color0);
/* Code mirror specific styles */
--jp-mirror-editor-keyword-color: #008000;
--jp-mirror-editor-atom-color: #88f;
--jp-mirror-editor-number-color: #080;
--jp-mirror-editor-def-color: #00f;
--jp-mirror-editor-variable-color: var(--md-grey-900);
--jp-mirror-editor-variable-2-color: rgb(0, 54, 109);
--jp-mirror-editor-variable-3-color: #085;
--jp-mirror-editor-punctuation-color: #05a;
--jp-mirror-editor-property-color: #05a;
--jp-mirror-editor-operator-color: #a2f;
--jp-mirror-editor-comment-color: #408080;
--jp-mirror-editor-string-color: #ba2121;
--jp-mirror-editor-string-2-color: #708;
--jp-mirror-editor-meta-color: #a2f;
--jp-mirror-editor-qualifier-color: #555;
--jp-mirror-editor-builtin-color: #008000;
--jp-mirror-editor-bracket-color: #997;
--jp-mirror-editor-tag-color: #170;
--jp-mirror-editor-attribute-color: #00c;
--jp-mirror-editor-header-color: blue;
--jp-mirror-editor-quote-color: #090;
--jp-mirror-editor-link-color: #00c;
--jp-mirror-editor-error-color: #f00;
--jp-mirror-editor-hr-color: #999;
/*
RTC user specific colors.
These colors are used for the cursor, username in the editor,
and the icon of the user.
*/
--jp-collaborator-color1: #ffad8e;
--jp-collaborator-color2: #dac83d;
--jp-collaborator-color3: #72dd76;
--jp-collaborator-color4: #00e4d0;
--jp-collaborator-color5: #45d4ff;
--jp-collaborator-color6: #e2b1ff;
--jp-collaborator-color7: #ff9de6;
/* Vega extension styles */
--jp-vega-background: white;
/* Sidebar-related styles */
--jp-sidebar-min-width: 250px;
/* Search-related styles */
--jp-search-toggle-off-opacity: 0.5;
--jp-search-toggle-hover-opacity: 0.8;
--jp-search-toggle-on-opacity: 1;
--jp-search-selected-match-background-color: rgb(245, 200, 0);
--jp-search-selected-match-color: black;
--jp-search-unselected-match-background-color: var(
--jp-inverse-layout-color0
);
--jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0);
/* Icon colors that work well with light or dark backgrounds */
--jp-icon-contrast-color0: var(--md-purple-600);
--jp-icon-contrast-color1: var(--md-green-600);
--jp-icon-contrast-color2: var(--md-pink-600);
--jp-icon-contrast-color3: var(--md-blue-600);
/* Button colors */
--jp-accept-color-normal: var(--md-blue-700);
--jp-accept-color-hover: var(--md-blue-800);
--jp-accept-color-active: var(--md-blue-900);
--jp-warn-color-normal: var(--md-red-700);
--jp-warn-color-hover: var(--md-red-800);
--jp-warn-color-active: var(--md-red-900);
--jp-reject-color-normal: var(--md-grey-600);
--jp-reject-color-hover: var(--md-grey-700);
--jp-reject-color-active: var(--md-grey-800);
/* File or activity icons and switch semantic variables */
--jp-jupyter-icon-color: #f37626;
--jp-notebook-icon-color: #f37626;
--jp-json-icon-color: var(--md-orange-700);
--jp-console-icon-background-color: var(--md-blue-700);
--jp-console-icon-color: white;
--jp-terminal-icon-background-color: var(--md-grey-800);
--jp-terminal-icon-color: var(--md-grey-200);
--jp-text-editor-icon-color: var(--md-grey-700);
--jp-inspector-icon-color: var(--md-grey-700);
--jp-switch-color: var(--md-grey-400);
--jp-switch-true-position-color: var(--md-orange-900);
}
</style>
<style type="text/css">
/* Force rendering true colors when outputing to pdf */
* {
-webkit-print-color-adjust: exact;
}
/* Misc */
a.anchor-link {
display: none;
}
/* Input area styling */
.jp-InputArea {
overflow: hidden;
}
.jp-InputArea-editor {
overflow: hidden;
}
.cm-editor.cm-s-jupyter .highlight pre {
/* weird, but --jp-code-padding defined to be 5px but 4px horizontal padding is hardcoded for pre.cm-line */
padding: var(--jp-code-padding) 4px;
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
color: inherit;
}
.jp-OutputArea-output pre {
line-height: inherit;
font-family: inherit;
}
.jp-RenderedText pre {
color: var(--jp-content-font-color1);
font-size: var(--jp-code-font-size);
}
/* Hiding the collapser by default */
.jp-Collapser {
display: none;
}
@page {
margin: 0.5in; /* Margin for each printed piece of paper */
}
@media print {
.jp-Cell-inputWrapper,
.jp-Cell-outputWrapper {
display: block;
}
}
</style>
<!-- Load mathjax -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS_CHTML-full,Safe"> </script>
<!-- MathJax configuration -->
<script type="text/x-mathjax-config">
init_mathjax = function() {
if (window.MathJax) {
// MathJax loaded
MathJax.Hub.Config({
TeX: {
equationNumbers: {
autoNumber: "AMS",
useLabelIds: true
}
},
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true,
processEnvironments: true
},
displayAlign: 'center',
CommonHTML: {
linebreaks: {
automatic: true
}
}
});
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
}
}
init_mathjax();
</script>
<!-- End of mathjax configuration --><script type="module">
document.addEventListener("DOMContentLoaded", async () => {
const diagrams = document.querySelectorAll(".jp-Mermaid > pre.mermaid");
// do not load mermaidjs if not needed
if (!diagrams.length) {
return;
}
const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs")).default;
const parser = new DOMParser();
mermaid.initialize({
maxTextSize: 100000,
maxEdges: 100000,
startOnLoad: false,
fontFamily: window
.getComputedStyle(document.body)
.getPropertyValue("--jp-ui-font-family"),
theme: document.querySelector("body[data-jp-theme-light='true']")
? "default"
: "dark",
});
let _nextMermaidId = 0;
function makeMermaidImage(svg) {
const img = document.createElement("img");
const doc = parser.parseFromString(svg, "image/svg+xml");
const svgEl = doc.querySelector("svg");
const { maxWidth } = svgEl?.style || {};
const firstTitle = doc.querySelector("title");
const firstDesc = doc.querySelector("desc");
img.setAttribute("src", `data:image/svg+xml,${encodeURIComponent(svg)}`);
if (maxWidth) {
img.width = parseInt(maxWidth);
}
if (firstTitle) {
img.setAttribute("alt", firstTitle.textContent);
}
if (firstDesc) {
const caption = document.createElement("figcaption");
caption.className = "sr-only";
caption.textContent = firstDesc.textContent;
return [img, caption];
}
return [img];
}
async function makeMermaidError(text) {
let errorMessage = "";
try {
await mermaid.parse(text);
} catch (err) {
errorMessage = `${err}`;
}
const result = document.createElement("details");
result.className = 'jp-RenderedMermaid-Details';
const summary = document.createElement("summary");
summary.className = 'jp-RenderedMermaid-Summary';
const pre = document.createElement("pre");
const code = document.createElement("code");
code.innerText = text;
pre.appendChild(code);
summary.appendChild(pre);
result.appendChild(summary);
const warning = document.createElement("pre");
warning.innerText = errorMessage;
result.appendChild(warning);
return [result];
}
async function renderOneMarmaid(src) {
const id = `jp-mermaid-${_nextMermaidId++}`;
const parent = src.parentNode;
let raw = src.textContent.trim();
const el = document.createElement("div");
el.style.visibility = "hidden";
document.body.appendChild(el);
let results = null;
let output = null;
try {
let { svg } = await mermaid.render(id, raw, el);
svg = cleanMermaidSvg(svg);
results = makeMermaidImage(svg);
output = document.createElement("figure");
results.map(output.appendChild, output);
} catch (err) {
parent.classList.add("jp-mod-warning");
results = await makeMermaidError(raw);
output = results[0];
} finally {
el.remove();
}
parent.classList.add("jp-RenderedMermaid");
parent.appendChild(output);
}
/**
* Post-process to ensure mermaid diagrams contain only valid SVG and XHTML.
*/
function cleanMermaidSvg(svg) {
return svg.replace(RE_VOID_ELEMENT, replaceVoidElement);
}
/**
* A regular expression for all void elements, which may include attributes and
* a slash.
*
* @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element
*
* Of these, only `<br>` is generated by Mermaid in place of `\n`,
* but _any_ "malformed" tag will break the SVG rendering entirely.
*/
const RE_VOID_ELEMENT =
/<\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\s*([^>]*?)\s*>/gi;
/**
* Ensure a void element is closed with a slash, preserving any attributes.
*/
function replaceVoidElement(match, tag, rest) {
rest = rest.trim();
if (!rest.endsWith('/')) {
rest = `${rest} /`;
}
return `<${tag} ${rest}>`;
}
void Promise.all([...diagrams].map(renderOneMarmaid));
});
</script>
<style>
.jp-Mermaid:not(.jp-RenderedMermaid) {
display: none;
}
.jp-RenderedMermaid {
overflow: auto;
display: flex;
}
.jp-RenderedMermaid.jp-mod-warning {
width: auto;
padding: 0.5em;
margin-top: 0.5em;
border: var(--jp-border-width) solid var(--jp-warn-color2);
border-radius: var(--jp-border-radius);
color: var(--jp-ui-font-color1);
font-size: var(--jp-ui-font-size1);
white-space: pre-wrap;
word-wrap: break-word;
}
.jp-RenderedMermaid figure {
margin: 0;
overflow: auto;
max-width: 100%;
}
.jp-RenderedMermaid img {
max-width: 100%;
}
.jp-RenderedMermaid-Details > pre {
margin-top: 1em;
}
.jp-RenderedMermaid-Summary {
color: var(--jp-warn-color2);
}
.jp-RenderedMermaid:not(.jp-mod-warning) pre {
display: none;
}
.jp-RenderedMermaid-Summary > pre {
display: inline-block;
white-space: normal;
}
</style>
<!-- End of mermaid configuration --></head>
<body class="jp-Notebook" data-jp-theme-light="true" data-jp-theme-name="JupyterLab Light">
<main>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=7606d30a">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<img alt="No description has been provided for this image" src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/VU_logo.png/800px-VU_logo.png?20161029201021" width="350"/>
<h3 id="Programming-large-scale-parallel-systems">Programming large-scale parallel systems<a class="anchor-link" href="#Programming-large-scale-parallel-systems"></a></h3>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=4ac1e5d9">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h1 id="Intro-to-MPI-(collectives)">Intro to MPI (collectives)<a class="anchor-link" href="#Intro-to-MPI-(collectives)"></a></h1>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=a341be2e">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="Contents">Contents<a class="anchor-link" href="#Contents"></a></h2><p>In this notebook, we will continue learning the basics of parallel computing using the Message Passing Interface (MPI) from Julia. In particular, we will learn:</p>
<ul>
<li>How to use basic collective communication directives</li>
<li>How to use MPI communicators</li>
</ul>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=c87b3c82">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="Collective-communication">Collective communication<a class="anchor-link" href="#Collective-communication"></a></h2><p>MPI provides a set of routines for communication involving multiple processes. These are called <em>collective communication</em> operations. Some usual collective operations are:</p>
<ul>
<li><code>MPI_Barrier</code>: Synchronize all processes</li>
<li><code>MPI_Bcase</code>: Send the same data from one to all processes</li>
<li><code>MPI_Gather</code>: Gather data from all processes to one</li>
<li><code>MPI_Scatter</code>: Scatter data from one to all all processes</li>
<li><code>MPI_Reduce</code>: Reduce data from all processes to a single one</li>
<li><code>MPI_Scan</code>: Scan (or prefix) reduction</li>
<li><code>MPI_Allgather</code>: Like a <code>MPI_Gather</code> but all processes receive the result</li>
<li><code>MPI_Allreduce</code>: Like <code>MPI_Reduce</code> but all processes receive the result</li>
<li><code>MPI_Alltoall</code>: Exchange data from all to all processes</li>
</ul>
<p>We will discuss some of them in greater detail in this notebook.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=4ffa5e56">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="Why-collective-operations?">Why collective operations?<a class="anchor-link" href="#Why-collective-operations?"></a></h2><p>Point-to-point communication functions provide all the building blocks needed in parallel programs and could be used to implement the collective functions described above. Then, why does MPI provide collective communication functions? There are several reasons:</p>
<ul>
<li>Ease of use: It is handy for users to have these functions readily available instead of having to implement them.</li>
<li>Performance: Library implementations typically use efficient algorithms (such as reduction trees).</li>
<li>Hardware support: Hardware vendors can optimize the MPI library for their machine and even develop hardware specially design to perform MPI operations efficiently. For instance, <a href="https://en.wikipedia.org/wiki/IBM_Blue_Gene">IMB Blue Gene</a> was equipped with auxiliary networks for MPI collectives.</li>
</ul>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=53a0f5fa">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="Semantics-of-collective-operations">Semantics of collective operations<a class="anchor-link" href="#Semantics-of-collective-operations"></a></h2><p>These are key properties of collective operations:</p>
<ul>
<li>Completeness: All the collective communication directives above are <em>complete</em> operations. Thus, it is safe to use and reset the buffers once the function returns.</li>
<li>Standard mode: Collective directives are in standard mode only, like <code>MPI_Send</code>. Assuming that they block is erroneous, assuming that they do not block is also erroneous.</li>
<li>Synchronization: Completion of a call does not guarantee that other processes have completed the operation. A collective operation may or may not have the effect of synchronizing all processes, the only exception is <code>MPI_Barrier</code> of course.</li>
</ul>
<div class="alert alert-block alert-info">
<b>Note:</b> Recent versions of the MPI standard also include non-blocking (i.e., incomplete) versions of collective operations (not covered in this notebook). A particularly funny one is the non-blocking barrier `MPI_Ibarrier`.
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e9e2a219">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="MPI_Barrier">MPI_Barrier<a class="anchor-link" href="#MPI_Barrier"></a></h2><p>This function is used to synchronizes a group of processes. All processes block until all have reached the barrier. It is often invoked at the end of for loops to make sure all processes have finished the current loop iteration to move to the next one. We will see an example later in another notebook when studying the traveling sales person problem (TSP).</p>
<p>In Julia:</p>
<div class="highlight"><pre><span></span><span class="n">MPI</span><span class="o">.</span><span class="n">Barrier</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
</pre></div>
<p>In C:</p>
<div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">MPI_Barrier</span><span class="p">(</span><span class="n">MPI_Comm</span><span class="w"> </span><span class="n">comm</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=d9753e4b">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3><p>In this example the ranks sleep for a random amount of time and then they call barrier. It is guaranteed that the message "Done!" will be printed after all processes printed "I woke up" since we used a barrier. Try also to comment out the call to <code>MPI.Barrier</code>. You will see that the message can be printed in any order in this case.</p>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=9a66c717">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">sleep</span><span class="p">(</span><span class="n">rand</span><span class="p">(</span><span class="mi">1</span><span class="o">:</span><span class="mi">3</span><span class="p">))</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I woke up"</span><span class="p">)</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Barrier</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] Done!"</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 4 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=df0223ff">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="MPI_Reduce">MPI_Reduce<a class="anchor-link" href="#MPI_Reduce"></a></h2><p>This function combines values provided by different processors according to a given reduction operation. The result is received in a single process (called the root process).</p>
<p>In Julia:</p>
<div class="highlight"><pre><span></span><span class="n">MPI</span><span class="o">.</span><span class="n">Reduce!</span><span class="p">(</span><span class="n">sendbuf</span><span class="p">,</span><span class="w"> </span><span class="n">recvbuf</span><span class="p">,</span><span class="w"> </span><span class="n">op</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">;</span><span class="w"> </span><span class="n">root</span><span class="p">)</span>
</pre></div>
<p>In C:</p>
<pre><code>int MPI_Reduce(const void *sendbuf, void *recvbuf, int count,
MPI_Datatype datatype, MPI_Op op, int root,
MPI_Comm comm)
</code></pre>
<div class="alert alert-block alert-info">
<b>Note:</b> `MPI_Reduce` (and related functions like `MPI_Allreduce`) use operations that are *commutative* and *associative*, such as addition, multiplication, maximum, minimum, logical and, logical or. Otherwise the result will be undefined as it will depend in which order the operations are done.
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=2fc1aa28">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3><p>Each process generates a random integer. Compute the sum of all these integers. Receive the result on rank 0.</p>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=341b8438">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rand</span><span class="p">(</span><span class="mi">1</span><span class="o">:</span><span class="mi">4</span><span class="p">)</span>
<span class="w"> </span><span class="n">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="n">sndbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">value</span><span class="p">]</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">root</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="c"># This can be anything as only the root process</span>
<span class="w"> </span><span class="c"># Will receive data</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">nothing</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I am contributing with </span><span class="si">$sndbuf</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Reduce!</span><span class="p">(</span><span class="n">sndbuf</span><span class="p">,</span><span class="w"> </span><span class="n">rcvbuf</span><span class="p">,</span><span class="w"> </span><span class="o">+</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">;</span><span class="w"> </span><span class="n">root</span><span class="p">)</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] The sum is </span><span class="si">$rcvbuf</span><span class="s">"</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 3 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=3ea77a8f">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="Reducing-multiple-values">Reducing multiple values<a class="anchor-link" href="#Reducing-multiple-values"></a></h2><p>If more than one item is provided in the send buffers, <code>MPI_Reduce</code> does the reduction element by element.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=b26fd0b2">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3><p>Each process generates 2 random integers. Take a look to the result of reduce. Note that the values have ben reduced "element by element".</p>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=1a145948">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">sndbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rand</span><span class="p">(</span><span class="mi">1</span><span class="o">:</span><span class="mi">4</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span><span class="n">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">root</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">nothing</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I am contributing with </span><span class="si">$sndbuf</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Reduce!</span><span class="p">(</span><span class="n">sndbuf</span><span class="p">,</span><span class="w"> </span><span class="n">rcvbuf</span><span class="p">,</span><span class="w"> </span><span class="o">+</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">;</span><span class="w"> </span><span class="n">root</span><span class="p">)</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] The sum is </span><span class="si">$rcvbuf</span><span class="s">"</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 3 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=539df34f">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="MPI_Allreduce">MPI_Allreduce<a class="anchor-link" href="#MPI_Allreduce"></a></h2><p>This is a variant of <code>MPI_Reduce</code> in which all processes get the result.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=be0381bb">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3><p>This is the same example as above, but all processes get the result.</p>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=1595f4f5">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">sndbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rand</span><span class="p">(</span><span class="mi">1</span><span class="o">:</span><span class="mi">4</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span><span class="c"># All ranks allocate a receive buffer</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I am contributing with </span><span class="si">$sndbuf</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Allreduce!</span><span class="p">(</span><span class="n">sndbuf</span><span class="p">,</span><span class="w"> </span><span class="n">rcvbuf</span><span class="p">,</span><span class="w"> </span><span class="o">+</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] The sum is </span><span class="si">$rcvbuf</span><span class="s">"</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 3 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=97dc2886">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="MPI_Gather">MPI_Gather<a class="anchor-link" href="#MPI_Gather"></a></h2><p>Each rank sends a message to the root rank (the root rank also sends a message to itself). The root rank receives all these values in a buffer (e.g. a vector). This function assumes that the amount of data sent from each rank is the same. The root process can be any process and it is rank 0 by default in Julia.</p>
<p>In Julia:</p>
<div class="highlight"><pre><span></span><span class="n">MPI</span><span class="o">.</span><span class="n">Gather!</span><span class="p">(</span><span class="n">sendbuf</span><span class="p">,</span><span class="w"> </span><span class="n">recvbuf</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">;</span><span class="w"> </span><span class="n">root</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
</pre></div>
<p>In C:</p>
<div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">MPI_Gather</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">sendbuf</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">sendcount</span><span class="p">,</span><span class="w"> </span><span class="n">MPI_Datatype</span><span class="w"> </span><span class="n">sendtype</span><span class="p">,</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">recvbuf</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">recvcount</span><span class="p">,</span><span class="w"> </span><span class="n">MPI_Datatype</span><span class="w"> </span><span class="n">recvtype</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">root</span><span class="p">,</span>
<span class="w"> </span><span class="n">MPI_Comm</span><span class="w"> </span><span class="n">comm</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=3d0a1e9d">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3><p>Each process sends an integer to rank 0.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=4bdf9c02">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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" width="350">
</img></div>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=1f8a70c6">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="o">*</span><span class="p">(</span><span class="n">rank</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span><span class="n">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="n">sndbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">msg</span><span class="p">]</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">root</span>
<span class="w"> </span><span class="n">nranks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_size</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zeros</span><span class="p">(</span><span class="kt">Int</span><span class="p">,</span><span class="n">nranks</span><span class="p">)</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="c"># This can be anything as only the root process</span>
<span class="w"> </span><span class="c"># Will receive data</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">nothing</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I am sending </span><span class="si">$sndbuf</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Gather!</span><span class="p">(</span><span class="n">sndbuf</span><span class="p">,</span><span class="w"> </span><span class="n">rcvbuf</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">;</span><span class="w"> </span><span class="n">root</span><span class="p">)</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I received </span><span class="si">$rcvbuf</span><span class="s">"</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 3 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=0f85f08d">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="MPI_Allgather">MPI_Allgather<a class="anchor-link" href="#MPI_Allgather"></a></h2><p>This is a variant of <code>MPI_Gather</code> in which all processes get the result.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=4bf2ef34">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=070e1fc1">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="o">*</span><span class="p">(</span><span class="n">rank</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span><span class="n">sndbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">msg</span><span class="p">]</span>
<span class="w"> </span><span class="n">nranks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_size</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zeros</span><span class="p">(</span><span class="kt">Int</span><span class="p">,</span><span class="n">nranks</span><span class="p">)</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I am sending </span><span class="si">$sndbuf</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Allgather!</span><span class="p">(</span><span class="n">sndbuf</span><span class="p">,</span><span class="w"> </span><span class="n">rcvbuf</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="c"># All ranks receive the result</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I received </span><span class="si">$rcvbuf</span><span class="s">"</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 3 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=fb6a9034">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="MPI_Gatherv">MPI_Gatherv<a class="anchor-link" href="#MPI_Gatherv"></a></h2><p>This function is similar to <code>MPI_Gather</code>, but it is used when there is a different amount of data sent from each process. There is also <code>MPI_Allgatherv</code> for which all processes will receive the result.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e0d2998c">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3><p>Each processes sends <code>rank+1</code> integers to rank 0.</p>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=23814278">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">sndbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fill</span><span class="p">(</span><span class="mi">10</span><span class="o">*</span><span class="n">rank</span><span class="p">,</span><span class="n">rank</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="w"> </span><span class="n">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">root</span>
<span class="w"> </span><span class="n">nranks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_size</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="c"># Define the amount of data to be received</span>
<span class="w"> </span><span class="c"># from each rank</span>
<span class="w"> </span><span class="n">counts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="n">rank</span><span class="o">+</span><span class="mi">1</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">0</span><span class="o">:</span><span class="p">(</span><span class="n">nranks</span><span class="o">-</span><span class="mi">1</span><span class="p">)]</span>
<span class="w"> </span><span class="c"># Total amount of receive data</span>
<span class="w"> </span><span class="n">ndata</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sum</span><span class="p">(</span><span class="n">counts</span><span class="p">)</span>
<span class="w"> </span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zeros</span><span class="p">(</span><span class="kt">Int</span><span class="p">,</span><span class="n">ndata</span><span class="p">)</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">VBuffer</span><span class="p">(</span><span class="n">data</span><span class="p">,</span><span class="n">counts</span><span class="p">)</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="c"># This can be anything as only the root process</span>
<span class="w"> </span><span class="c"># Will receive data</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">nothing</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I am sending </span><span class="si">$sndbuf</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Gatherv!</span><span class="p">(</span><span class="n">sndbuf</span><span class="p">,</span><span class="w"> </span><span class="n">rcvbuf</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">;</span><span class="w"> </span><span class="n">root</span><span class="p">)</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">root</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I received </span><span class="si">$data</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="k">end</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 4 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=25c2fb1e">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="How-to-get-the-amount-of-data-to-be-received?">How to get the amount of data to be received?<a class="anchor-link" href="#How-to-get-the-amount-of-data-to-be-received?"></a></h2><p>Remember that <code>MPI_Probe</code> allows you to query the amount of data to be received with <code>MPI_Recv</code>. Unfortunately, this mechanism does not work for MPI collectives. A workaround is to first communicate the amount of data to be gathered, allocate the receive buffer accordingly, and then communicate the actual message.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=12f9e2ca">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3><p>Each process sends a random amount of integers to rank 0.</p>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=b10430a9">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="c"># Get number of ints to send</span>
<span class="w"> </span><span class="n">count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rand</span><span class="p">(</span><span class="mi">1</span><span class="o">:</span><span class="mi">4</span><span class="p">)</span>
<span class="w"> </span><span class="c"># Generate data to send</span>
<span class="w"> </span><span class="n">sndbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fill</span><span class="p">(</span><span class="n">rank</span><span class="p">,</span><span class="n">count</span><span class="p">)</span>
<span class="w"> </span><span class="c"># Communicate counts</span>
<span class="w"> </span><span class="n">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">root</span>
<span class="w"> </span><span class="n">nranks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_size</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">counts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zeros</span><span class="p">(</span><span class="kt">Int</span><span class="p">,</span><span class="n">nranks</span><span class="p">)</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="n">counts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">nothing</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Gather!</span><span class="p">([</span><span class="n">count</span><span class="p">],</span><span class="w"> </span><span class="n">counts</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">;</span><span class="w"> </span><span class="n">root</span><span class="p">)</span>
<span class="w"> </span><span class="c"># Allocate receive buffer</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">root</span>
<span class="w"> </span><span class="n">ndata</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sum</span><span class="p">(</span><span class="n">counts</span><span class="p">)</span>
<span class="w"> </span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zeros</span><span class="p">(</span><span class="kt">Int</span><span class="p">,</span><span class="n">ndata</span><span class="p">)</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">VBuffer</span><span class="p">(</span><span class="n">data</span><span class="p">,</span><span class="n">counts</span><span class="p">)</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">nothing</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="c"># Communicate data</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I am sending </span><span class="si">$sndbuf</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Gatherv!</span><span class="p">(</span><span class="n">sndbuf</span><span class="p">,</span><span class="w"> </span><span class="n">rcvbuf</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">;</span><span class="w"> </span><span class="n">root</span><span class="p">)</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">root</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I received </span><span class="si">$data</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="k">end</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 4 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=8b4254d1">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="MPI_Scatter">MPI_Scatter<a class="anchor-link" href="#MPI_Scatter"></a></h2><p>This is the inverse operation of <code>MPI_Gather</code>. The root rank sends a distinct message to each rank.</p>
<p>In Julia:</p>
<div class="highlight"><pre><span></span><span class="n">MPI</span><span class="o">.</span><span class="n">Scatter!</span><span class="p">(</span><span class="n">sendbuf</span><span class="p">,</span><span class="w"> </span><span class="n">recvbuf</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">;</span><span class="w"> </span><span class="n">root</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
</pre></div>
<p>In C:</p>
<div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">MPI_Scatter</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">sendbuf</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">sendcount</span><span class="p">,</span><span class="w"> </span><span class="n">MPI_Datatype</span><span class="w"> </span><span class="n">sendtype</span><span class="p">,</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">recvbuf</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">recvcount</span><span class="p">,</span><span class="w"> </span><span class="n">MPI_Datatype</span><span class="w"> </span><span class="n">recvtype</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">root</span><span class="p">,</span>
<span class="w"> </span><span class="n">MPI_Comm</span><span class="w"> </span><span class="n">comm</span><span class="p">)</span>
</pre></div>
<div class="alert alert-block alert-info">
<b>Note:</b> `MPI_Scatter` sends the same amount of data to each rank. To send a variable amount of data there is `MPI_Scatterv` (`MPI.Scatterv!` in julia), which works similar to `MPI_Gatherv`.
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e55aa353">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3><p>Rank 0 sends a unique integer to each rank.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=74d5b606">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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P3489evXtzYyIUJMeXk5f/vb3/jLX/7iMQMuLRGijnUFPgC0ZrqMjY3l97//PVOnTqVVq1bWRiZECFq2bBl5eXlVJh+8+eabycvLk9ZLURfqAe+jkt9ekycAPXr0wG63k5CgVawiRESpruo7VFajkiRKdPo58CYaF/GYmBhSU1P505/+RJs2WsUqQkSUlStXkpOTw+7du122y2pUIkjqA/8CGunsLK2XIppt27YNm83G+vXrXbZL66UIgmJggM6OV111FU899RS//vWvMQytfIsQEePEiRPMmjWLgoICysvLK7fHxMRw1113YbPZuPzyy4MYoSJJlOiUi0YCpXv37uTl5UkGXESlL7/8kpycHFatWuWyPVQy4CJq/QGNBEr79u2x2WzcfvvtdRCSEKHlyJEjzJw5k4ULF0rrpQgV/bzt0LBhQyZOnMikSZNo1EgrTy5ExLh48SILFizg2Wef5ejRoy7f69u3L7m5uSH1QEiSKNHJ6+SD9erVY/jw4dx88811EY8QIePkyZOV8554yoBnZWXJalQimK7R2alv37707t3b6liECCnl5eX8/e9/5/nnn5fWSxFKYlHzENaoU6dODBs2TBIoIuqUlpaSnZ3N9u3bXbZfd911/OlPfyIlJSVIkVVP1m6LTl952+HChQs8/fTT9O/fn+XLl9dFTEIE1cWLF3n99dfp06cPr776qksCJTExkeLiYvLz8yWBIoJtp85OCxcuJDExkb///e9cuHDB6piECLpVq1YxePBgcnJyXBIoHTp04PXXX+fNN9+UBIoIaZ999hnDhw/nscce4/vvvw92OEJY7uuvv2bs2LHcfffdLgmUxo0bk5GRwerVq0MygQKSRIlW3+ruuHfvXu6//35++9vfVpkVWYhIsW7dOoYOHcoTTzzhUkIYHx/P7NmzKSwsDKkSQhHVTuvuePz4cTIzM0lOTmbt2rVWxiRE0OzevZv77ruPUaNG8eWXX1Zub9asGZmZmaxevVrmrhJho6KigoULF9K3b19eeukllwc6QkSKU6dO8cwzz9C/f3/ef//9yu2GYZCWlsb69evJyMgI6eW8JYkitKxdu5bk5GSmTp3KkSNHgh2OEAFRVlbGlClTSEtL85gBX7duHampqUGMUIja27FjB7/97W+555572LlTq5BFiJB38uRJpk+fzuDBg1m5cmXl9piYGNLS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" width="350"/>
</div>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=5ea413fd">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="n">nranks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_size</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="n">rcv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kt">Ref</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="w"> </span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">root</span>
<span class="w"> </span><span class="n">snd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mi">10</span><span class="o">*</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">nranks</span><span class="p">]</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I am sending: </span><span class="si">$snd</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="c"># Only the root rank sends data</span>
<span class="w"> </span><span class="c"># so this can be anything</span>
<span class="w"> </span><span class="n">snd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">nothing</span>
<span class="w"> </span><span class="k">end</span><span class="w"> </span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Scatter!</span><span class="p">(</span><span class="n">snd</span><span class="p">,</span><span class="n">rcv</span><span class="p">,</span><span class="n">comm</span><span class="p">;</span><span class="n">root</span><span class="p">)</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I have received: </span><span class="si">$</span><span class="p">(</span><span class="n">rcv</span><span class="p">[])</span><span class="s">"</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 4 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=ed8da7f9">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="MPI_Bcast">MPI_Bcast<a class="anchor-link" href="#MPI_Bcast"></a></h2><p>Similar to <code>MPI_Scatter</code>, but we send the same message to all processes.</p>
<p>In Julia:</p>
<div class="highlight"><pre><span></span><span class="n">MPI</span><span class="o">.</span><span class="n">Bcast!</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">;</span><span class="w"> </span><span class="n">root</span><span class="p">)</span>
</pre></div>
<p>In C:</p>
<div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">MPI_Bcast</span><span class="p">(</span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">buffer</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">count</span><span class="p">,</span><span class="w"> </span><span class="n">MPI_Datatype</span><span class="w"> </span><span class="n">datatype</span><span class="p">,</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">root</span><span class="p">,</span><span class="w"> </span><span class="n">MPI_Comm</span><span class="w"> </span><span class="n">comm</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=97369713">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3><p>Rank 0 sends the same integer to all processes.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=26b56c81">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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1rm6uvrUsBthcRq57dy5My+99BK/+tWvOP3000NolTdr167lzjvv9FNiNidLFKY6jecOjqX0X+Bmh+iU/vv27UtxczLSSTU1NRlZh+T8889n+vTpzJgxg4suuijs5iRkJdoYOnSol0QbL+EhmYdIHlH8TuykLVu2ZGz8fuKJJ7IufntMlKT4LdLQfkyeANdJ96yyeWVlZW4T+2W7wrq6un5hN8KJVaLwxRdf5Nprrw27OQlZJWatm7YuzcVUFCnFlH7LOUHVxFgGFOMxpX9xcXFepPQPKytsvBIobdq0YdKkSbz55psMGJBRS0scWeszPJaAsP4mh+Hib1Ikjyl+N6JJkyYZF78ffPBB3nzzTYYNG5bmVnmn+C0SCE/lPOvq6pg1a5bXknNZq6CgIJSL23hxu2XLltx7771UVlZmVYlCjyVmV3Psb3JloA0MWdD/e7OBy/CR0n/JkiUBNy08kUgklA/1BRdcQMuWLb9+3qRJE+644w4qKyv53ve+lzV164qKipg4cSJffulqYGI7Zn2G69E2EQF8xu/BgwcrfgegsfhdWlqaq/F7B4rfIl7MBa7D5Sjg3r17mTx5Mn379qWioiLwxoUolHXT7dq147TTTmvw2rBhw3jrrbcYP348xx13XBjN8sRHidkvMUsPriRPShSm41bIQY6tb3Kd0v+WW27J5ZT+3Xbu3Hliuk968skn84c//IEePXowdOhQXnvtNR599FFOOeWUdDfFs48++oiRI0dSUlLC559/7maXWsz6zwsx6zPyM328SHI8x+8VK1Z8Hb83b94cdPvCcEMY8btt27Y89dRT9OzZM+vid3SOFMVvkcBFr099HBfrU9etW0dJSQljx45l1apVQbcvDGdXVVWlvb5U06ZNmT59On369KF///4899xzPPHEE5xzzjnpbopnKjHrXkEI57we8+XYzc3GrVq14vvf/z733HNPVmS28+Ab7du3/3sjP/8HDun8y8vL+eEPfxhcqzLMrl27+MUvfsEf//hHL+XU5gBluCjZJiKe+Irfd999d4NR1Rwwsn379i808vPXccj8XVZWxo9+9KPgWpVhdu/ezZQpUxS/RcLVEfglcJObjZs1a8a4ceO4//77syKJoQf3tm/f/rFGfv4/wHfsL9566638+te/Dq5VGebAgQP87ne/4ze/+Y2XcmrvYHKuuC4wnUvC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RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERHLUT4C1UY8fh9ucpLUAmobdCBGRHLKMht8TvcNtjoiIpNhlNIzzazHX1NnoBKBZ2I2Ipo5JbjsVuCDqebuwGuLT9cA4oCfQHjgNqANqgM+BN4CngM/CaqCISJY7D2gb9fy4kNrhVwFwIdAZ816ifQS8lO4GiYhkmBY07A+AiZ2ZrDnQC+gHXAtcCZzBsY70l0AV8A4wH3gG2Jf+ZkqumwZEoh6/D7c5rp0HvELDtsd7HMW8z5PCaKiISJbbScOYenO4zUmoPTAMmATMBr4g/vfDn8JpoohIRrmW2PjYMtQWOWuGie9Wx9hNP8B67AV+Dhyf9lZLTsvGznQ3YBvePkAR4FPg3BDaKyKSzbKlM30GsANv3wvqTIuIZE9nehner//tjzWY95s2muYtmaQj8Cqxo8x1wLuYD0iz+u2utm1zKTAHMzV8d7DNFBGRNGsOnBx2I0REJDCtE/x8B2Y2UlPgLJyXJV0IVAB9gQ9T2jrJS9k0Mt0EWE7sHabXgEsctu+K8x2sv6ajsSIiOSJbRqbPpfHRiLXAYdtrGpkWEcmekenVNGzjauA/gYGYxGPRmmJms87ADLrZ399nZG+SNckg2dSZ/jaxH4S/0fjsidbAQts+dZjRaRERSSwbO9NVmPXSkzDr606t38a+REidaRGR7OpMH8WsmS7GfZK0ocABYt/j+ADaKHkmWzrTzYF1NGzrFtwlFTuf2CQFbwbSShGR3JMtnekTgP40zDxup860iEisbOlMPwpc7nPf/0Pse/w4Re2SPJYtnemRxH4ASj3sP8Vh/0tT3EYRkVyULZ1pN9SZFhGJlS2d6WRVEvs+zw/6pLmWgOxSzBTf8zGL0g9iFp8/n2C/pkCn+sd5wImYNby7MYvdPwSWArVBNLpeAXANcAVwNtAG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" width="350"/>
</div>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=4de15781">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="n">nranks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_size</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="n">buffer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kt">Ref</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">root</span>
<span class="w"> </span><span class="n">buffer</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">20</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I am sending: </span><span class="si">$</span><span class="p">(</span><span class="n">buffer</span><span class="p">[])</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="k">end</span><span class="w"> </span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Bcast!</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span><span class="n">comm</span><span class="p">;</span><span class="n">root</span><span class="p">)</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">] I have received: </span><span class="si">$</span><span class="p">(</span><span class="n">buffer</span><span class="p">[])</span><span class="s">"</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 4 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e83be96d">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="Communicators">Communicators<a class="anchor-link" href="#Communicators"></a></h2><p>A key component in MPI programming are so-called communicators. A communicator object has to main purposes:</p>
<ol>
<li>To provide an isolated communication context</li>
<li>To define a group of processes</li>
</ol>
<h3 id="Communication-context">Communication context<a class="anchor-link" href="#Communication-context"></a></h3><p>When you write an MPI program it is very likely that you are going to use libraries that also use MPI to send messages. Ideally, these libraries should not interfere with application messages. Using tags to isolate the messages send by your application does not solve the problem. MPI communicators fix this problem as they provided an isolated communication context. For instance, <code>MPI_SEND</code> and <code>MPI_RECV</code> specify a communicator. <code>MPI_RECV</code> can only receive messages sent to same communicator. The same is also true for collective communication directives. If two libraries use different communicators, their message will never interfere. In particular it is recommended to never use the default communicator, <code>MPI_COMM_WORLD</code>, directly when working with other libraries. A new isolated communicator can be created with <code>MPI_Comm_dup</code>.</p>
<h3 id="Groups-of-processes">Groups of processes<a class="anchor-link" href="#Groups-of-processes"></a></h3><p>On the other hand, imagine that we want to use an MPI communication directive like <code>MPI_Gather</code>, but we only want a subset of the processes to participate in the operation. So far, we have used always the default communication <code>MPI_COMM_WORLD</code>, which represents all processes. Thus, by using this communicator, we are including all processes in the operation. We can create other communicators that contain only a subset of processes. To this end, we can use function <code>MPI_Comm_split</code>.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=556ca223">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="MPI_Comm_dup">MPI_Comm_dup<a class="anchor-link" href="#MPI_Comm_dup"></a></h2><p>Duplicate a given communicator, creating a new one with an new communication context.</p>
<p>In Julia:</p>
<div class="highlight"><pre><span></span><span class="n">newcomm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_dup</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
</pre></div>
<p>In C:</p>
<div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">MPI_Comm_dup</span><span class="p">(</span><span class="n">MPI_Comm</span><span class="w"> </span><span class="n">comm</span><span class="p">,</span><span class="w"> </span><span class="n">MPI_Comm</span><span class="w"> </span><span class="o">*</span><span class="n">newcomm</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=9acfb792">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3><p>Send value 2 from rank 2 to rank 3. Then send value 1 also from rank 2 to rank 3. Note that we are using 2 different communicators for each send receive pair in such a way that we first receive value 1 and then value 2, even if this not was the other in which the data was sent. Try also to define <code>comm2 = comm</code> and see how the result will change.</p>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=e50d44f6">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="c"># We create a new communicator</span>
<span class="w"> </span><span class="n">comm2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_dup</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">2</span>
<span class="w"> </span><span class="n">sndbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Send</span><span class="p">(</span><span class="n">sndbuf</span><span class="p">,</span><span class="w"> </span><span class="n">comm2</span><span class="p">;</span><span class="w"> </span><span class="n">dest</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="n">sndbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Send</span><span class="p">(</span><span class="n">sndbuf</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">;</span><span class="w"> </span><span class="n">dest</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">3</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zeros</span><span class="p">(</span><span class="kt">Int</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Recv!</span><span class="p">(</span><span class="n">rcvbuf</span><span class="p">,</span><span class="w"> </span><span class="n">comm</span><span class="p">;</span><span class="w"> </span><span class="n">source</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="nd">@show</span><span class="w"> </span><span class="n">rcvbuf</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Recv!</span><span class="p">(</span><span class="n">rcvbuf</span><span class="p">,</span><span class="w"> </span><span class="n">comm2</span><span class="p">;</span><span class="w"> </span><span class="n">source</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="nd">@show</span><span class="w"> </span><span class="n">rcvbuf</span>
<span class="w"> </span><span class="k">end</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 4 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=5e1b13eb">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="MPI_Comm_split">MPI_Comm_split<a class="anchor-link" href="#MPI_Comm_split"></a></h2><p>Split a given communicator.</p>
<p>In Julia:</p>
<div class="highlight"><pre><span></span><span class="n">newcomm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_split</span><span class="p">(</span><span class="n">comm</span><span class="p">,</span><span class="w"> </span><span class="n">color</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="p">)</span>
</pre></div>
<p>In C:</p>
<div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">MPI_Comm_split</span><span class="p">(</span><span class="n">MPI_Comm</span><span class="w"> </span><span class="n">comm</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">color</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">key</span><span class="p">,</span>
<span class="w"> </span><span class="n">MPI_Comm</span><span class="w"> </span><span class="o">*</span><span class="n">newcomm</span><span class="p">)</span>
</pre></div>
<p>There are two key parameters:</p>
<ul>
<li><code>color</code>: all processes with the same color will be grouped in the same new communicator.</li>
<li><code>key</code>: The processes will be ranked in the new communicator according to key, breaking ties with the rank in the old communicator.</li>
</ul>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=2b128840">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3><p>Create two groups of processes, one for processes with rank id even, and another for the rest. Note that the rank id will be function of the given communicator.</p>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=b18cb74d">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mod</span><span class="p">(</span><span class="n">rank</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="n">newcomm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_split</span><span class="p">(</span><span class="n">comm</span><span class="p">,</span><span class="w"> </span><span class="n">color</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="p">)</span>
<span class="w"> </span><span class="n">newrank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">newcomm</span><span class="p">)</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"Hello, I am rank </span><span class="si">$rank</span><span class="s"> in world and rank </span><span class="si">$newrank</span><span class="s"> in group </span><span class="si">$color</span><span class="s">."</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 4 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=b22e4bf4">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Example">Example<a class="anchor-link" href="#Example"></a></h3><p>Processes with odd rank id generate a random integer. Sum all these integers and send them to the first process with odd rank id. Note that we are using a new communicator to perform the reduction.</p>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=4c0e504b">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">quote</span>
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">MPI</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Init</span><span class="p">()</span>
<span class="w"> </span><span class="n">comm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">COMM_WORLD</span>
<span class="w"> </span><span class="n">rank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span>
<span class="w"> </span><span class="n">color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mod</span><span class="p">(</span><span class="n">rank</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="n">newcomm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_split</span><span class="p">(</span><span class="n">comm</span><span class="p">,</span><span class="w"> </span><span class="n">color</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="p">)</span>
<span class="w"> </span><span class="c"># Only odd rank ids will execute this</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">color</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">1</span>
<span class="w"> </span><span class="n">newrank</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Comm_rank</span><span class="p">(</span><span class="n">newcomm</span><span class="p">)</span>
<span class="w"> </span><span class="n">newroot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="n">sndbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">rand</span><span class="p">(</span><span class="mi">1</span><span class="o">:</span><span class="mi">4</span><span class="p">)]</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">newrank</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">newroot</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="n">rcvbuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">nothing</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">, newrank </span><span class="si">$newrank</span><span class="s">] I am contributing with </span><span class="si">$sndbuf</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="n">MPI</span><span class="o">.</span><span class="n">Reduce!</span><span class="p">(</span><span class="n">sndbuf</span><span class="p">,</span><span class="w"> </span><span class="n">rcvbuf</span><span class="p">,</span><span class="w"> </span><span class="o">+</span><span class="p">,</span><span class="w"> </span><span class="n">newcomm</span><span class="p">;</span><span class="n">root</span><span class="o">=</span><span class="n">newroot</span><span class="p">)</span>
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"[rank </span><span class="si">$rank</span><span class="s">, newrank </span><span class="si">$newrank</span><span class="s">] The sum is </span><span class="si">$rcvbuf</span><span class="s">"</span><span class="p">)</span>
<span class="w"> </span><span class="k">end</span>
<span class="k">end</span>
<span class="n">run</span><span class="p">(</span><span class="sb">`</span><span class="si">$</span><span class="p">(</span><span class="n">mpiexec</span><span class="p">())</span><span class="sb"> -np 4 julia --project=. -e </span><span class="si">$code</span><span class="sb">`</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=d465ebce">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<p>Try to run the code without splitting the communicator. I.e., replace <code>newcomm = MPI.Comm_split(comm, color, key)</code> with <code>newcomm = comm</code>. Try to figure out what will happen before executing the code.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=d334aea1">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="Conclusion">Conclusion<a class="anchor-link" href="#Conclusion"></a></h2><ul>
<li>MPI also defines operations involving several processes called, collective operations.</li>
<li>These are provided both for convenience and performance.</li>
<li>The semantics are equivalent to "standard mode" <code>MPI_Send</code>, but there are also non-blocking versions (not discussed in this notebook).</li>
<li>Discovering message sizes is often done by communicating the message size, instead of using <code>MPI_Probe</code>.</li>
<li>Finally, we discussed MPI communicators. They provide two key features: isolated communication context and creating groups of processes. They are useful, for instance, to combine different libraries using MPI in the same application, and to use collective operations in a subset of the processes.</li>
</ul>
<p>After learning this material and the previous MPI notebook, you have a solid basis to start implementing sophisticated parallel algorithms using MPI.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=c6b23485">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="Exercises">Exercises<a class="anchor-link" href="#Exercises"></a></h2>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=90dc58bb">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Exercise-1">Exercise 1<a class="anchor-link" href="#Exercise-1"></a></h3><p>In the parallel implementation of the Jacobi method in previous notebook, we assumed that the method runs for a given number of iterations. However, other stopping criteria are used in practice. The following sequential code implements a version of Jacobi in which the method iterates until the norm of the difference between u and u_new is below a tolerance.</p>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=0fcb0cd6">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="k">function</span><span class="w"> </span><span class="n">jacobi_with_tol</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="n">tol</span><span class="p">)</span>
<span class="w"> </span><span class="n">u</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zeros</span><span class="p">(</span><span class="n">n</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span><span class="n">u</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span>
<span class="w"> </span><span class="n">u</span><span class="p">[</span><span class="k">end</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
<span class="w"> </span><span class="n">u_new</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">copy</span><span class="p">(</span><span class="n">u</span><span class="p">)</span>
<span class="w"> </span><span class="n">increment</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">similar</span><span class="p">(</span><span class="n">u</span><span class="p">)</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="nb">true</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">2</span><span class="o">:</span><span class="p">(</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="w"> </span><span class="n">u_new</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.5</span><span class="o">*</span><span class="p">(</span><span class="n">u</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="n">u</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="n">increment</span><span class="w"> </span><span class="o">.=</span><span class="w"> </span><span class="n">u_new</span><span class="w"> </span><span class="o">.-</span><span class="w"> </span><span class="n">u</span>
<span class="w"> </span><span class="n">norm_increment</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.0</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">n</span>
<span class="w"> </span><span class="n">increment_i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">increment</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="w"> </span><span class="n">norm_increment</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">increment_i</span><span class="o">*</span><span class="n">increment_i</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="n">norm_increment</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sqrt</span><span class="p">(</span><span class="n">norm_increment</span><span class="p">)</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">norm_increment</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">tol</span><span class="o">*</span><span class="n">n</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">u_new</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="n">u</span><span class="p">,</span><span class="w"> </span><span class="n">u_new</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">u_new</span><span class="p">,</span><span class="w"> </span><span class="n">u</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="n">u</span>
<span class="k">end</span>
</pre></div>
</div>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=dbf0c3b8">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span>
<span class="n">tol</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1e-12</span>
<span class="n">jacobi_with_tol</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="n">tol</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=aab1455e">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<p>Implement a parallel version of this algorithm. Recommended: start with the parallel implementation given in the previous notebook (see function <code>jacobi_mpi</code>) and introduce the new stopping criteria. Think carefully about which MPI operations you need to use in this case.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=5e8f6e6a">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h1 id="License">License<a class="anchor-link" href="#License"></a></h1><p>This notebook is part of the course <a href="https://www.francescverdugo.com/XM_40017">Programming Large Scale Parallel Systems</a> at Vrije Universiteit Amsterdam and may be used under a <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> license.</p>
</div>
</div>
</div>
</div>
</main>
</body>
</html>