diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..e601d576 --- /dev/null +++ b/404.html @@ -0,0 +1,16 @@ + + + + + +Page Not Found | Template FastAPI React + + + + +
+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + + + \ No newline at end of file diff --git a/assets/css/styles.fc8ee88d.css b/assets/css/styles.fc8ee88d.css new file mode 100644 index 00000000..bf85ceab --- /dev/null +++ b/assets/css/styles.fc8ee88d.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#2e8555;--ifm-color-primary-dark:#29784c;--ifm-color-primary-darker:#277148;--ifm-color-primary-darkest:#205d3b;--ifm-color-primary-light:#33925d;--ifm-color-primary-lighter:#359962;--ifm-color-primary-lightest:#3cad6e;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none,.tabItem_LNqP{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul,.tabList__CuJ{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area.breadcrumbs__link[href]:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_S0QG>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q>:last-child,.footer__items,.tabItem_Ymn6>:last-child{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter);content:""}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.docsWrapper_BCFX,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.announcementBar_mb4j,.skipToContent_fXgn{z-index:calc(var(--ifm-z-index-fixed) + 1)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-duration:.25s;transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;right:0;transition-duration:.1s;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}[data-theme=dark]{--ifm-color-primary:#25c2a0;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#29d5b0;--ifm-color-primary-lighter:#32d8b4;--ifm-color-primary-lightest:#4fddbf;--docusaurus-highlighted-code-line-bg:#0000004d}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#docusaurus-base-url-issue-banner-container,.collapseSidebarButton_PEFL,.docSidebarContainer_b6E3,.sidebarLogo_isFc,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);box-shadow:var(--ifm-global-shadow-lw);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.mainWrapper_z2l0{flex:1 0 auto}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 #00000026;transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 #0003}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:.5rem;font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.heroBanner_qdFl{overflow:hidden;padding:4rem 0;position:relative;text-align:center}.buttons_AeoN{align-items:center;display:flex;justify-content:center}.description_meEo{font-size:24px;margin:32px auto;text-align:center;width:65%}.features_cAfv{flex-wrap:wrap;margin:10px auto 80px}.feature_xuHn,.features_cAfv{display:flex;justify-content:center}.feature_xuHn{--feature-size:220px;align-items:center;background:#ffffff14;border:1px solid #ffffff2e;border-radius:16px;box-shadow:0 4px 30px #0000001a;font-size:16px;font-weight:700;height:var(--feature-size);margin:10px;padding:12px;text-align:center;transition:.25s;width:var(--feature-size)}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.feature_xuHn:hover{background:#ffffff1f}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity .2s ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:.15s;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.img_ev3q{height:auto}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.breadcrumbHomeIcon_OVgt{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}.mdxPageWrapper_j9I6{justify-content:center}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg);position:sticky}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;max-height:100vh;padding-top:var(--ifm-navbar-height);position:sticky;top:0;transition:opacity 50ms;width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{height:0;opacity:0;overflow:hidden;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_m80_{align-items:center;display:flex;height:100%;justify-content:center;max-height:100vh;top:0;transition:background-color var(--ifm-transition-fast) ease}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media screen and (max-width:996px){.heroBanner_qdFl{padding:2rem}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/images/clean-architecture-horizontal2-89d7350d193766d81f16643008c28a16.png b/assets/images/clean-architecture-horizontal2-89d7350d193766d81f16643008c28a16.png new file mode 100644 index 00000000..4d62e561 Binary files /dev/null and b/assets/images/clean-architecture-horizontal2-89d7350d193766d81f16643008c28a16.png differ diff --git a/assets/images/clean-architecture2-e72f296e5bfa4a0d19a261aa8d1eda47.png b/assets/images/clean-architecture2-e72f296e5bfa4a0d19a261aa8d1eda47.png new file mode 100644 index 00000000..375efe59 Binary files /dev/null and b/assets/images/clean-architecture2-e72f296e5bfa4a0d19a261aa8d1eda47.png differ diff --git a/assets/images/fast-api-4ed5595066ba8b486810824e9770c6eb.png b/assets/images/fast-api-4ed5595066ba8b486810824e9770c6eb.png new file mode 100644 index 00000000..10bf7bd1 Binary files /dev/null and b/assets/images/fast-api-4ed5595066ba8b486810824e9770c6eb.png differ diff --git a/assets/images/features-a73ae32cb4391fdd586e23d450e6f2d7.png b/assets/images/features-a73ae32cb4391fdd586e23d450e6f2d7.png new file mode 100644 index 00000000..754c8d0c Binary files /dev/null and b/assets/images/features-a73ae32cb4391fdd586e23d450e6f2d7.png differ diff --git a/assets/js/05e44ab7.b8156b68.js b/assets/js/05e44ab7.b8156b68.js new file mode 100644 index 00000000..7424de59 --- /dev/null +++ b/assets/js/05e44ab7.b8156b68.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[833],{7656:t=>{t.exports=JSON.parse('{"title":"Running","slug":"/category/running","permalink":"/template-fastapi-react/docs/category/running","navigation":{"previous":{"title":"How to do something","permalink":"/template-fastapi-react/docs/about/how-to/how-to-do-something"},"next":{"title":"Prerequisites","permalink":"/template-fastapi-react/docs/about/running/prerequisites"}}}')}}]); \ No newline at end of file diff --git a/assets/js/06314cb9.e2de962b.js b/assets/js/06314cb9.e2de962b.js new file mode 100644 index 00000000..96c83476 --- /dev/null +++ b/assets/js/06314cb9.e2de962b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[297],{8793:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>u});var i=n(7462),a=(n(7294),n(3905));n(1839);const s={sidebar_position:4},r="Securing endpoints",o={unversionedId:"contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints",id:"contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints",title:"Securing endpoints",description:"The REST API (i.e. python FastAPI server) has access to, and is responsible for serving, data that could be private. Therefore we need to validate that the request is coming from an authenticated client.",source:"@site/docs/contribute/development-guide/coding/extending-the-api/adding-features/03-securing-endpoints.md",sourceDirName:"contribute/development-guide/coding/extending-the-api/adding-features",slug:"/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/extending-the-api/adding-features/03-securing-endpoints.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"contribute",previous:{title:"Use cases",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-cases"},next:{title:"Generate API clients",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/generate-api-clients"}},d={},u=[],p={toc:u};function c(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,i.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"securing-endpoints"},"Securing endpoints"),(0,a.kt)("p",null,"The REST API (i.e. python FastAPI server) has access to, and is responsible for serving, data that could be private. Therefore we need to validate that the request is coming from an authenticated client."),(0,a.kt)("p",null,"We do that in these steps;"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Require a JWT on each request"),(0,a.kt)("li",{parentName:"ol"},"Fetch the RSA public keys from the authentication server."),(0,a.kt)("li",{parentName:"ol"},"Validate the JWT signature with the auth server's public key")),(0,a.kt)("p",null,"FastAPI has system called ",(0,a.kt)("a",{parentName:"p",href:"https://fastapi.tiangolo.com/tutorial/dependencies"},(0,a.kt)("strong",{parentName:"a"},"dependencies"))," that is well suited for running a specific function before every request."),(0,a.kt)("p",null,"Here is an example;"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"routes = APIRouter()\napp = FastAPI(title=\"Awesome Boilerplate\") # Create the FastAPI app\napp.include_router(routes) # Add a route/controller to the app\n# Add the 'auth_with_jwt()' function as a dependency\n# This function will do the actual JWT validation with step 2 and 3\napp.include_router(routes, dependencies=[Security(auth_with_jwt)])\n")),(0,a.kt)("p",null,"That's it! Now every route added like this will require a successful JWT validation before the request will be processed."),(0,a.kt)("p",null,"Dependencies can also return values, useful if you need to do some kind of ",(0,a.kt)("strong",{parentName:"p"},"authorization"),".\nHere is one example;"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},'@router.delete("/{id}", operation_id="delete-report")\ndef delete_report(id: str, user: User = Depends(auth_with_jwt)):\n if has_permission(user):\n delete_report(id)\n return "OK"\n else:\n return PlainTextResponse("Permission denied", status_code=402)\n')))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/14a713f6.d009dfb8.js b/assets/js/14a713f6.d009dfb8.js new file mode 100644 index 00000000..ce323ca8 --- /dev/null +++ b/assets/js/14a713f6.d009dfb8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[109],{3118:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>d,default:()=>c,frontMatter:()=>s,metadata:()=>r,toc:()=>p});var n=o(7462),i=(o(7294),o(3905)),a=(o(1839),o(814));const s={},d="Use cases",r={unversionedId:"contribute/development-guide/coding/extending-the-api/adding-features/use-cases",id:"contribute/development-guide/coding/extending-the-api/adding-features/use-cases",title:"Use cases",description:"Use cases implement and encapsulate all the application business rules.",source:"@site/docs/contribute/development-guide/coding/extending-the-api/adding-features/02-use-cases.md",sourceDirName:"contribute/development-guide/coding/extending-the-api/adding-features",slug:"/contribute/development-guide/coding/extending-the-api/adding-features/use-cases",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-cases",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/extending-the-api/adding-features/02-use-cases.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"contribute",previous:{title:"Controller",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllers"},next:{title:"Securing endpoints",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints"}},u={},p=[{value:"Testing use cases",id:"testing-use-cases",level:2}],l={toc:p};function c(e){let{components:t,...o}=e;return(0,i.kt)("wrapper",(0,n.Z)({},l,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"use-cases"},"Use cases"),(0,i.kt)("p",null,"Use cases implement and encapsulate all the application business rules."),(0,i.kt)("p",null,"If the use case wants to access a database (infrastructure layer), then the use case will use a data provider interface. The ",(0,i.kt)("inlineCode",{parentName:"p"},"add_todo_use_case")," interacts with the infrastructure layer via ",(0,i.kt)("inlineCode",{parentName:"p"},"TodoRepositoryInterface"),"."),(0,i.kt)(a.Z,{language:"jsx",mdxType:"CodeBlock"},'import uuid\n\nfrom pydantic import BaseModel, Field\n\nfrom features.todo.entities.todo_item import TodoItem\nfrom features.todo.repository.todo_repository_interface import TodoRepositoryInterface\n\n\nclass AddTodoRequest(BaseModel):\n title: str = Field(\n title="The title of the item",\n max_length=300,\n min_length=1,\n json_schema_extra={\n "examples": ["Read about clean architecture"],\n },\n )\n\n\nclass AddTodoResponse(BaseModel):\n id: str = Field(\n json_schema_extra={\n "examples": ["vytxeTZskVKR7C7WgdSP3d"],\n }\n )\n title: str = Field(\n json_schema_extra={\n "examples": ["Read about clean architecture"],\n }\n )\n is_completed: bool = False\n\n @staticmethod\n def from_entity(todo_item: TodoItem) -> "AddTodoResponse":\n return AddTodoResponse(id=todo_item.id, title=todo_item.title, is_completed=todo_item.is_completed)\n\n\ndef add_todo_use_case(\n data: AddTodoRequest,\n user_id: str,\n todo_repository: TodoRepositoryInterface,\n) -> AddTodoResponse:\n todo_item = TodoItem(id=str(uuid.uuid4()), title=data.title, user_id=user_id)\n todo_repository.create(todo_item)\n return AddTodoResponse.from_entity(todo_item)\n'),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Required"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Each use case needs to have its own read and write model to handle custom requests inputs and outputs for each use case."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Optional"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"A ",(0,i.kt)("a",{parentName:"li",href:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces"},"repository interface")," describing necessary repository methods.",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"The use case uses ",(0,i.kt)("a",{parentName:"li",href:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories"},"repositories")," for reading and writing to external systems like databases.")))))),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Changes to use cases should not impact the entities."),(0,i.kt)("p",{parentName:"admonition"},"The use-case should only know of the repository interface (abstract class) before run-time. The concrete implementation of a repository is injected (dependency injection) into the use-case at run-time.")),(0,i.kt)("h2",{id:"testing-use-cases"},"Testing use cases"),(0,i.kt)("p",null,"Use the ",(0,i.kt)("inlineCode",{parentName:"p"},"todo_repository")," fixture as input to use_cases."),(0,i.kt)(a.Z,{language:"jsx",mdxType:"CodeBlock"},'import pytest\r\nfrom pydantic import ValidationError\r\n\r\nfrom features.todo.repository.todo_repository_interface import TodoRepositoryInterface\r\nfrom features.todo.use_cases.add_todo import AddTodoRequest, add_todo_use_case\r\n\r\n\r\ndef test_add_with_valid_title_should_return_todo(todo_repository: TodoRepositoryInterface):\r\n data = AddTodoRequest(title="new todo")\r\n result = add_todo_use_case(data, user_id="xyz", todo_repository=todo_repository)\r\n assert result.title == data.title\r\n\r\n\r\ndef test_add_with_empty_title_should_throw_validation_error(todo_repository: TodoRepositoryInterface):\r\n with pytest.raises(ValidationError):\r\n data = AddTodoRequest(title="")\r\n add_todo_use_case(data, user_id="xyz", todo_repository=todo_repository)\r\n'))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.9428a0f9.js b/assets/js/14eb3368.9428a0f9.js new file mode 100644 index 00000000..1e8af9bc --- /dev/null +++ b/assets/js/14eb3368.9428a0f9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[817],{1986:(e,t,n)=>{n.d(t,{Z:()=>E});var a=n(7462),r=n(7294),i=n(6010),l=n(5281),s=n(3438),c=n(8596),o=n(9960),m=n(4996),d=n(5999);function u(e){return r.createElement("svg",(0,a.Z)({viewBox:"0 0 24 24"},e),r.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const b={breadcrumbsContainer:"breadcrumbsContainer_Z_bl",breadcrumbHomeIcon:"breadcrumbHomeIcon_OVgt"};function h(e){let{children:t,href:n,isLast:a}=e;const i="breadcrumbs__link";return a?r.createElement("span",{className:i,itemProp:"name"},t):n?r.createElement(o.Z,{className:i,href:n,itemProp:"item"},r.createElement("span",{itemProp:"name"},t)):r.createElement("span",{className:i},t)}function v(e){let{children:t,active:n,index:l,addMicrodata:s}=e;return r.createElement("li",(0,a.Z)({},s&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,i.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,r.createElement("meta",{itemProp:"position",content:String(l+1)}))}function g(){const e=(0,m.Z)("/");return r.createElement("li",{className:"breadcrumbs__item"},r.createElement(o.Z,{"aria-label":(0,d.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:(0,i.Z)("breadcrumbs__link",b.breadcrumbsItemLink),href:e},r.createElement(u,{className:b.breadcrumbHomeIcon})))}function E(){const e=(0,s.s1)(),t=(0,c.Ns)();return e?r.createElement("nav",{className:(0,i.Z)(l.k.docs.docBreadcrumbs,b.breadcrumbsContainer),"aria-label":(0,d.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},r.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&r.createElement(g,null),e.map(((t,n)=>{const a=n===e.length-1;return r.createElement(v,{key:n,active:a,index:n,addMicrodata:!!t.href},r.createElement(h,{href:t.href,isLast:a},t.label))})))):null}},4228:(e,t,n)=>{n.r(t),n.d(t,{default:()=>C});var a=n(7294),r=n(1944),i=n(3438),l=n(4996),s=n(6010),c=n(9960),o=n(3919),m=n(5999);const d="cardContainer_fWXF",u="cardTitle_rnsV",b="cardDescription_PWke";function h(e){let{href:t,children:n}=e;return a.createElement(c.Z,{href:t,className:(0,s.Z)("card padding--lg",d)},n)}function v(e){let{href:t,icon:n,title:r,description:i}=e;return a.createElement(h,{href:t},a.createElement("h2",{className:(0,s.Z)("text--truncate",u),title:r},n," ",r),i&&a.createElement("p",{className:(0,s.Z)("text--truncate",b),title:i},i))}function g(e){let{item:t}=e;const n=(0,i.Wl)(t);return n?a.createElement(v,{href:n,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:(0,m.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function E(e){let{item:t}=e;const n=(0,o.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",r=(0,i.xz)(t.docId??void 0);return a.createElement(v,{href:t.href,icon:n,title:t.label,description:null==r?void 0:r.description})}function p(e){let{item:t}=e;switch(t.type){case"link":return a.createElement(E,{item:t});case"category":return a.createElement(g,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function f(e){let{className:t}=e;const n=(0,i.jA)();return a.createElement(N,{items:n.items,className:t})}function N(e){const{items:t,className:n}=e;if(!t)return a.createElement(f,e);const r=(0,i.MN)(t);return a.createElement("section",{className:(0,s.Z)("row",n)},r.map(((e,t)=>a.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},a.createElement(p,{item:e})))))}var Z=n(4966),k=n(3120),L=n(4364),_=n(1986),T=n(2503);const x="generatedIndexPage_vN6x",I="list_eTzJ",y="title_kItE";function w(e){let{categoryGeneratedIndex:t}=e;return a.createElement(r.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,l.Z)(t.image)})}function V(e){let{categoryGeneratedIndex:t}=e;const n=(0,i.jA)();return a.createElement("div",{className:x},a.createElement(k.Z,null),a.createElement(_.Z,null),a.createElement(L.Z,null),a.createElement("header",null,a.createElement(T.Z,{as:"h1",className:y},t.title),t.description&&a.createElement("p",null,t.description)),a.createElement("article",{className:"margin-top--lg"},a.createElement(N,{items:n.items,className:I})),a.createElement("footer",{className:"margin-top--lg"},a.createElement(Z.Z,{previous:t.navigation.previous,next:t.navigation.next})))}function C(e){return a.createElement(a.Fragment,null,a.createElement(w,e),a.createElement(V,e))}},4966:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(7462),r=n(7294),i=n(5999),l=n(6010),s=n(9960);function c(e){const{permalink:t,title:n,subLabel:a,isNext:i}=e;return r.createElement(s.Z,{className:(0,l.Z)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},a&&r.createElement("div",{className:"pagination-nav__sublabel"},a),r.createElement("div",{className:"pagination-nav__label"},n))}function o(e){const{previous:t,next:n}=e;return r.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,i.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},t&&r.createElement(c,(0,a.Z)({},t,{subLabel:r.createElement(i.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&r.createElement(c,(0,a.Z)({},n,{subLabel:r.createElement(i.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},4364:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(7294),r=n(6010),i=n(5999),l=n(5281),s=n(4477);function c(e){let{className:t}=e;const n=(0,s.E)();return n.badge?a.createElement("span",{className:(0,r.Z)(t,l.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(i.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}},3120:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(7294),r=n(6010),i=n(2263),l=n(9960),s=n(5999),c=n(143),o=n(5281),m=n(373),d=n(4477);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(s.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(s.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function b(e){const t=u[e.versionMetadata.banner];return a.createElement(t,e)}function h(e){let{versionLabel:t,to:n,onClick:r}=e;return a.createElement(s.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(l.Z,{to:n,onClick:r},a.createElement(s.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function v(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:l}}=(0,i.Z)(),{pluginId:s}=(0,c.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,m.J)(s),{latestDocSuggestion:u,latestVersionSuggestion:v}=(0,c.Jo)(s),g=u??(E=v).docs.find((e=>e.id===E.mainDocId));var E;return a.createElement("div",{className:(0,r.Z)(t,o.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(b,{siteTitle:l,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(h,{versionLabel:v.label,to:g.path,onClick:()=>d(v.name)})))}function g(e){let{className:t}=e;const n=(0,d.E)();return n.banner?a.createElement(v,{className:t,versionMetadata:n}):null}},2503:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(7462),r=n(7294),i=n(6010),l=n(5999),s=n(6668);const c="anchorWithStickyNavbar_LWe7",o="anchorWithHideOnScrollNavbar_WYt5";function m(e){let{as:t,id:n,...m}=e;const{navbar:{hideOnScroll:d}}=(0,s.L)();return"h1"!==t&&n?r.createElement(t,(0,a.Z)({},m,{className:(0,i.Z)("anchor",d?o:c),id:n}),m.children,r.createElement("a",{className:"hash-link",href:`#${n}`,title:(0,l.I)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"\u200b")):r.createElement(t,(0,a.Z)({},m,{id:void 0}))}}}]); \ No newline at end of file diff --git a/assets/js/17896441.1939eeab.js b/assets/js/17896441.1939eeab.js new file mode 100644 index 00000000..040a4614 --- /dev/null +++ b/assets/js/17896441.1939eeab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[918],{1986:(e,t,a)=>{a.d(t,{Z:()=>E});var n=a(7462),l=a(7294),r=a(6010),s=a(5281),o=a(3438),c=a(8596),i=a(9960),d=a(4996),m=a(5999);function u(e){return l.createElement("svg",(0,n.Z)({viewBox:"0 0 24 24"},e),l.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const b={breadcrumbsContainer:"breadcrumbsContainer_Z_bl",breadcrumbHomeIcon:"breadcrumbHomeIcon_OVgt"};function p(e){let{children:t,href:a,isLast:n}=e;const r="breadcrumbs__link";return n?l.createElement("span",{className:r,itemProp:"name"},t):a?l.createElement(i.Z,{className:r,href:a,itemProp:"item"},l.createElement("span",{itemProp:"name"},t)):l.createElement("span",{className:r},t)}function v(e){let{children:t,active:a,index:s,addMicrodata:o}=e;return l.createElement("li",(0,n.Z)({},o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,r.Z)("breadcrumbs__item",{"breadcrumbs__item--active":a})}),t,l.createElement("meta",{itemProp:"position",content:String(s+1)}))}function h(){const e=(0,d.Z)("/");return l.createElement("li",{className:"breadcrumbs__item"},l.createElement(i.Z,{"aria-label":(0,m.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:(0,r.Z)("breadcrumbs__link",b.breadcrumbsItemLink),href:e},l.createElement(u,{className:b.breadcrumbHomeIcon})))}function E(){const e=(0,o.s1)(),t=(0,c.Ns)();return e?l.createElement("nav",{className:(0,r.Z)(s.k.docs.docBreadcrumbs,b.breadcrumbsContainer),"aria-label":(0,m.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},l.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&l.createElement(h,null),e.map(((t,a)=>{const n=a===e.length-1;return l.createElement(v,{key:a,active:n,index:a,addMicrodata:!!t.href},l.createElement(p,{href:t.href,isLast:n},t.label))})))):null}},230:(e,t,a)=>{a.r(t),a.d(t,{default:()=>ne});var n=a(7294),l=a(1944),r=a(902);const s=n.createContext(null);function o(e){let{children:t,content:a}=e;const l=function(e){return(0,n.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(a);return n.createElement(s.Provider,{value:l},t)}function c(){const e=(0,n.useContext)(s);if(null===e)throw new r.i6("DocProvider");return e}function i(){const{metadata:e,frontMatter:t,assets:a}=c();return n.createElement(l.d,{title:e.title,description:e.description,keywords:t.keywords,image:a.image??t.image})}var d=a(6010),m=a(7524),u=a(4966);function b(){const{metadata:e}=c();return n.createElement(u.Z,{previous:e.previous,next:e.next})}var p=a(3120),v=a(4364),h=a(5281),E=a(5999);function g(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:a}=e;return n.createElement(E.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:n.createElement("b",null,n.createElement("time",{dateTime:new Date(1e3*t).toISOString()},a))}}," on {date}")}function f(e){let{lastUpdatedBy:t}=e;return n.createElement(E.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:n.createElement("b",null,t)}}," by {user}")}function Z(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:a,lastUpdatedBy:l}=e;return n.createElement("span",{className:h.k.common.lastUpdated},n.createElement(E.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&a?n.createElement(g,{lastUpdatedAt:t,formattedLastUpdatedAt:a}):"",byUser:l?n.createElement(f,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}var _=a(7462);const N="iconEdit_Z9Sw";function k(e){let{className:t,...a}=e;return n.createElement("svg",(0,_.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,d.Z)(N,t),"aria-hidden":"true"},a),n.createElement("g",null,n.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function L(e){let{editUrl:t}=e;return n.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:h.k.common.editThisPage},n.createElement(k,null),n.createElement(E.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}var T=a(9960);const U="tag_zVej",w="tagRegular_sFm0",C="tagWithCount_h2kH";function y(e){let{permalink:t,label:a,count:l}=e;return n.createElement(T.Z,{href:t,className:(0,d.Z)(U,l?C:w)},a,l&&n.createElement("span",null,l))}const x="tags_jXut",A="tag_QGVx";function M(e){let{tags:t}=e;return n.createElement(n.Fragment,null,n.createElement("b",null,n.createElement(E.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),n.createElement("ul",{className:(0,d.Z)(x,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:a}=e;return n.createElement("li",{key:a,className:A},n.createElement(y,{label:t,permalink:a}))}))))}const B="lastUpdated_vwxv";function I(e){return n.createElement("div",{className:(0,d.Z)(h.k.docs.docFooterTagsRow,"row margin-bottom--sm")},n.createElement("div",{className:"col"},n.createElement(M,e)))}function V(e){let{editUrl:t,lastUpdatedAt:a,lastUpdatedBy:l,formattedLastUpdatedAt:r}=e;return n.createElement("div",{className:(0,d.Z)(h.k.docs.docFooterEditMetaRow,"row")},n.createElement("div",{className:"col"},t&&n.createElement(L,{editUrl:t})),n.createElement("div",{className:(0,d.Z)("col",B)},(a||l)&&n.createElement(Z,{lastUpdatedAt:a,formattedLastUpdatedAt:r,lastUpdatedBy:l})))}function H(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:a,formattedLastUpdatedAt:l,lastUpdatedBy:r,tags:s}=e,o=s.length>0,i=!!(t||a||r);return o||i?n.createElement("footer",{className:(0,d.Z)(h.k.docs.docFooter,"docusaurus-mt-lg")},o&&n.createElement(I,{tags:s}),i&&n.createElement(V,{editUrl:t,lastUpdatedAt:a,lastUpdatedBy:r,formattedLastUpdatedAt:l})):null}var P=a(6043),D=a(3743);const S="tocCollapsibleButton_TO0P",F="tocCollapsibleButtonExpanded_MG3E";function O(e){let{collapsed:t,...a}=e;return n.createElement("button",(0,_.Z)({type:"button"},a,{className:(0,d.Z)("clean-btn",S,!t&&F,a.className)}),n.createElement(E.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const z="tocCollapsible_ETCw",R="tocCollapsibleContent_vkbj",j="tocCollapsibleExpanded_sAul";function G(e){let{toc:t,className:a,minHeadingLevel:l,maxHeadingLevel:r}=e;const{collapsed:s,toggleCollapsed:o}=(0,P.u)({initialState:!0});return n.createElement("div",{className:(0,d.Z)(z,!s&&j,a)},n.createElement(O,{collapsed:s,onClick:o}),n.createElement(P.z,{lazy:!0,className:R,collapsed:s},n.createElement(D.Z,{toc:t,minHeadingLevel:l,maxHeadingLevel:r})))}const q="tocMobile_ITEo";function J(){const{toc:e,frontMatter:t}=c();return n.createElement(G,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,d.Z)(h.k.docs.docTocMobile,q)})}var Q=a(9407);function W(){const{toc:e,frontMatter:t}=c();return n.createElement(Q.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:h.k.docs.docTocDesktop})}var X=a(2503),$=a(5203);function K(e){let{children:t}=e;const a=function(){const{metadata:e,frontMatter:t,contentTitle:a}=c();return t.hide_title||void 0!==a?null:e.title}();return n.createElement("div",{className:(0,d.Z)(h.k.docs.docMarkdown,"markdown")},a&&n.createElement("header",null,n.createElement(X.Z,{as:"h1"},a)),n.createElement($.Z,null,t))}var Y=a(1986);const ee="docItemContainer_Djhp",te="docItemCol_VOVn";function ae(e){let{children:t}=e;const a=function(){const{frontMatter:e,toc:t}=c(),a=(0,m.i)(),l=e.hide_table_of_contents,r=!l&&t.length>0;return{hidden:l,mobile:r?n.createElement(J,null):void 0,desktop:!r||"desktop"!==a&&"ssr"!==a?void 0:n.createElement(W,null)}}();return n.createElement("div",{className:"row"},n.createElement("div",{className:(0,d.Z)("col",!a.hidden&&te)},n.createElement(p.Z,null),n.createElement("div",{className:ee},n.createElement("article",null,n.createElement(Y.Z,null),n.createElement(v.Z,null),a.mobile,n.createElement(K,null,t),n.createElement(H,null)),n.createElement(b,null))),a.desktop&&n.createElement("div",{className:"col col--3"},a.desktop))}function ne(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,a=e.content;return n.createElement(o,{content:e.content},n.createElement(l.FG,{className:t},n.createElement(i,null),n.createElement(ae,null,n.createElement(a,null))))}},4966:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7462),l=a(7294),r=a(5999),s=a(6010),o=a(9960);function c(e){const{permalink:t,title:a,subLabel:n,isNext:r}=e;return l.createElement(o.Z,{className:(0,s.Z)("pagination-nav__link",r?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},n&&l.createElement("div",{className:"pagination-nav__sublabel"},n),l.createElement("div",{className:"pagination-nav__label"},a))}function i(e){const{previous:t,next:a}=e;return l.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,r.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},t&&l.createElement(c,(0,n.Z)({},t,{subLabel:l.createElement(r.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),a&&l.createElement(c,(0,n.Z)({},a,{subLabel:l.createElement(r.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},4364:(e,t,a)=>{a.d(t,{Z:()=>c});var n=a(7294),l=a(6010),r=a(5999),s=a(5281),o=a(4477);function c(e){let{className:t}=e;const a=(0,o.E)();return a.badge?n.createElement("span",{className:(0,l.Z)(t,s.k.docs.docVersionBadge,"badge badge--secondary")},n.createElement(r.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:a.label}},"Version: {versionLabel}")):null}},3120:(e,t,a)=>{a.d(t,{Z:()=>h});var n=a(7294),l=a(6010),r=a(2263),s=a(9960),o=a(5999),c=a(143),i=a(5281),d=a(373),m=a(4477);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:a}=e;return n.createElement(o.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:n.createElement("b",null,a.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:a}=e;return n.createElement(o.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:n.createElement("b",null,a.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function b(e){const t=u[e.versionMetadata.banner];return n.createElement(t,e)}function p(e){let{versionLabel:t,to:a,onClick:l}=e;return n.createElement(o.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:n.createElement("b",null,n.createElement(s.Z,{to:a,onClick:l},n.createElement(o.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function v(e){let{className:t,versionMetadata:a}=e;const{siteConfig:{title:s}}=(0,r.Z)(),{pluginId:o}=(0,c.gA)({failfast:!0}),{savePreferredVersionName:m}=(0,d.J)(o),{latestDocSuggestion:u,latestVersionSuggestion:v}=(0,c.Jo)(o),h=u??(E=v).docs.find((e=>e.id===E.mainDocId));var E;return n.createElement("div",{className:(0,l.Z)(t,i.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},n.createElement("div",null,n.createElement(b,{siteTitle:s,versionMetadata:a})),n.createElement("div",{className:"margin-top--md"},n.createElement(p,{versionLabel:v.label,to:h.path,onClick:()=>m(v.name)})))}function h(e){let{className:t}=e;const a=(0,m.E)();return a.banner?n.createElement(v,{className:t,versionMetadata:a}):null}}}]); \ No newline at end of file diff --git a/assets/js/1b4cc8e2.0a0766ce.js b/assets/js/1b4cc8e2.0a0766ce.js new file mode 100644 index 00000000..5d1cbe75 --- /dev/null +++ b/assets/js/1b4cc8e2.0a0766ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[511],{8905:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>d,default:()=>u,frontMatter:()=>o,metadata:()=>p,toc:()=>c});var a=n(7462),i=(n(7294),n(3905));n(1839);const o={},d="Upgrading",p={unversionedId:"contribute/development-guide/upgrading",id:"contribute/development-guide/upgrading",title:"Upgrading",description:"Packages",source:"@site/docs/contribute/development-guide/04-upgrading.md",sourceDirName:"contribute/development-guide",slug:"/contribute/development-guide/upgrading",permalink:"/template-fastapi-react/docs/contribute/development-guide/upgrading",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/04-upgrading.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{},sidebar:"contribute",previous:{title:"Testing",permalink:"/template-fastapi-react/docs/contribute/development-guide/testing"},next:{title:"Publishing",permalink:"/template-fastapi-react/docs/contribute/development-guide/publishing"}},r={},c=[{value:"Packages",id:"packages",level:2},{value:"API dependencies",id:"api-dependencies",level:3},{value:"Web dependencies",id:"web-dependencies",level:3}],s={toc:c};function u(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"upgrading"},"Upgrading"),(0,i.kt)("h2",{id:"packages"},"Packages"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Remember to restart!"),(0,i.kt)("p",{parentName:"admonition"},"Any changes you make to these files will only come into effect after you restart the\nserver. If you run the application using containers,\nyou need to do ",(0,i.kt)("inlineCode",{parentName:"p"},"docker compose build")," and then ",(0,i.kt)("inlineCode",{parentName:"p"},"docker compose up")," to get the changes.")),(0,i.kt)("h3",{id:"api-dependencies"},"API dependencies"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"cd api/\n# Add or remove package to pyproject.toml\npoetry update\n")),(0,i.kt)("h3",{id:"web-dependencies"},"Web dependencies"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"cd web/\n# Add or remove package to package.json\nyarn install\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1be78505.86914a5e.js b/assets/js/1be78505.86914a5e.js new file mode 100644 index 00000000..88fda218 --- /dev/null +++ b/assets/js/1be78505.86914a5e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[514,972],{9963:(e,t,n)=>{n.r(t),n.d(t,{default:()=>Ie});var a=n(7294),l=n(6010),o=n(1944),r=n(5281),c=n(3320),i=n(3438),s=n(4477),d=n(1116),m=n(4704),u=n(5999),b=n(2466),p=n(5936);const h="backToTopButton_sjWU",E="backToTopButtonShow_xfvO";function f(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,l]=(0,a.useState)(!1),o=(0,a.useRef)(!1),{startScroll:r,cancelScroll:c}=(0,b.Ct)();return(0,b.RF)(((e,n)=>{let{scrollY:a}=e;const r=null==n?void 0:n.scrollY;r&&(o.current?o.current=!1:a>=r?(c(),l(!1)):a{e.location.hash&&(o.current=!0,l(!1))})),{shown:n,scrollToTop:()=>r(0)}}({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,l.Z)("clean-btn",r.k.common.backToTopButton,h,e&&E),type:"button",onClick:t})}var g=n(6775),v=n(7524),_=n(6668),k=n(1327),C=n(7462);function I(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const N="collapseSidebarButton_PEFL",S="collapseSidebarButtonIcon_kv0_";function Z(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,l.Z)("button button--secondary button--outline",N),onClick:t},a.createElement(I,{className:S}))}var y=n(9689),T=n(902);const x=Symbol("EmptyContext"),L=a.createContext(x);function w(e){let{children:t}=e;const[n,l]=(0,a.useState)(null),o=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:l})),[n]);return a.createElement(L.Provider,{value:o},t)}var M=n(6043),A=n(8596),B=n(9960),F=n(2389);function H(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function P(e){let{item:t,onItemClick:n,activePath:o,level:c,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,_.L)(),f=function(e){const t=(0,F.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,i.Wl)(e):void 0),[e,t])}(t),g=(0,i._F)(t,o),v=(0,A.Mg)(h,o),{collapsed:k,setCollapsed:I}=(0,M.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:N,setExpandedItem:S}=function(){const e=(0,a.useContext)(L);if(e===x)throw new T.i6("DocSidebarItemsExpandedStateProvider");return e}(),Z=function(e){void 0===e&&(e=!k),S(e?null:s),I(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:l}=e;const o=(0,T.D9)(t);(0,a.useEffect)((()=>{t&&!o&&n&&l(!1)}),[t,o,n,l])}({isActive:g,collapsed:k,updateCollapsed:Z}),(0,a.useEffect)((()=>{b&&null!=N&&N!==s&&E&&I(!0)}),[b,N,s,I,E]),a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemCategory,r.k.docs.docSidebarItemCategoryLevel(c),"menu__list-item",{"menu__list-item--collapsed":k},p)},a.createElement("div",{className:(0,l.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v})},a.createElement(B.Z,(0,C.Z)({className:(0,l.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{null==n||n(t),h?Z(!1):(e.preventDefault(),Z())}:()=>{null==n||n(t)},"aria-current":v?"page":void 0,"aria-expanded":b?!k:void 0,href:b?f??"#":f},d),u),h&&b&&a.createElement(H,{categoryLabel:u,onClick:e=>{e.preventDefault(),Z()}})),a.createElement(M.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:k},a.createElement(G,{items:m,tabIndex:k?-1:0,onItemClick:n,activePath:o,level:c+1})))}var W=n(3919),D=n(9471);const R="menuExternalLink_NmtK";function z(e){let{item:t,onItemClick:n,activePath:o,level:c,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,i._F)(t,o),E=(0,W.Z)(m);return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(c),"menu__list-item",b),key:u},a.createElement(B.Z,(0,C.Z)({className:(0,l.Z)("menu__link",!E&&R,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(D.Z,null)))}const U="menuHtmlItem_M9Kj";function K(e){let{item:t,level:n,index:o}=e;const{value:c,defaultStyle:i,className:s}=t;return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(n),i&&[U,"menu__list-item"],s),key:o,dangerouslySetInnerHTML:{__html:c}})}function V(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(P,(0,C.Z)({item:t},n));case"html":return a.createElement(K,(0,C.Z)({item:t},n));default:return a.createElement(z,(0,C.Z)({item:t},n))}}function j(e){let{items:t,...n}=e;return a.createElement(w,null,t.map(((e,t)=>a.createElement(V,(0,C.Z)({key:t,item:e,index:t},n)))))}const G=(0,a.memo)(j),Y="menu_SIkG",q="menuWithAnnouncementBar_GW3s";function O(e){let{path:t,sidebar:n,className:o}=e;const c=function(){const{isActive:e}=(0,y.nT)(),[t,n]=(0,a.useState)(e);return(0,b.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{className:(0,l.Z)("menu thin-scrollbar",Y,c&&q,o)},a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(G,{items:n,activePath:t,level:1})))}const X="sidebar_njMd",J="sidebarWithHideableNavbar_wUlq",Q="sidebarHidden_VK0M",$="sidebarLogo_isFc";function ee(e){let{path:t,sidebar:n,onCollapse:o,isHidden:r}=e;const{navbar:{hideOnScroll:c},docs:{sidebar:{hideable:i}}}=(0,_.L)();return a.createElement("div",{className:(0,l.Z)(X,c&&J,r&&Q)},c&&a.createElement(k.Z,{tabIndex:-1,className:$}),a.createElement(O,{path:t,sidebar:n}),i&&a.createElement(Z,{onClick:o}))}const te=a.memo(ee);var ne=n(3102),ae=n(2961);const le=e=>{let{sidebar:t,path:n}=e;const o=(0,ae.e)();return a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(G,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&o.toggle(),"link"===e.type&&o.toggle()},level:1}))};function oe(e){return a.createElement(ne.Zo,{component:le,props:e})}const re=a.memo(oe);function ce(e){const t=(0,v.i)(),n="desktop"===t||"ssr"===t,l="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement(te,e),l&&a.createElement(re,e))}const ie="expandButton_m80_",se="expandButtonIcon_BlDH";function de(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:ie,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(I,{className:se}))}const me="docSidebarContainer_b6E3",ue="docSidebarContainerHidden_b3ry";function be(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:(null==n?void 0:n.name)??"noSidebar"},t)}function pe(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:o}=e;const{pathname:c}=(0,g.TH)(),[i,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{i&&s(!1),o((e=>!e))}),[o,i]);return a.createElement("aside",{className:(0,l.Z)(r.k.docs.docSidebarContainer,me,n&&ue),onTransitionEnd:e=>{e.currentTarget.classList.contains(me)&&n&&s(!0)}},a.createElement(be,null,a.createElement(ce,{sidebar:t,path:c,onCollapse:d,isHidden:i})),i&&a.createElement(de,{toggleSidebar:d}))}const he={docMainContainer:"docMainContainer_gTbr",docMainContainerEnhanced:"docMainContainerEnhanced_Uz_u",docItemWrapperEnhanced:"docItemWrapperEnhanced_czyv"};function Ee(e){let{hiddenSidebarContainer:t,children:n}=e;const o=(0,d.V)();return a.createElement("main",{className:(0,l.Z)(he.docMainContainer,(t||!o)&&he.docMainContainerEnhanced)},a.createElement("div",{className:(0,l.Z)("container padding-top--md padding-bottom--lg",he.docItemWrapper,t&&he.docItemWrapperEnhanced)},n))}const fe="docPage__5DB",ge="docsWrapper_BCFX";function ve(e){let{children:t}=e;const n=(0,d.V)(),[l,o]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:ge},a.createElement(f,null),a.createElement("div",{className:fe},n&&a.createElement(pe,{sidebar:n.items,hiddenSidebarContainer:l,setHiddenSidebarContainer:o}),a.createElement(Ee,{hiddenSidebarContainer:l},t)))}var _e=n(4972),ke=n(197);function Ce(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(ke.Z,{version:t.version,tag:(0,c.os)(t.pluginId,t.version)}),a.createElement(o.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function Ie(e){const{versionMetadata:t}=e,n=(0,i.hI)(e);if(!n)return a.createElement(_e.default,null);const{docElement:c,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(Ce,e),a.createElement(o.FG,{className:(0,l.Z)(r.k.wrapper.docsPages,r.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(ve,null,c)))))}},4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(7294),l=n(5999),o=n(1944),r=n(4704);function c(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.6c196ace.js b/assets/js/1df93b7f.6c196ace.js new file mode 100644 index 00000000..da4b9a9f --- /dev/null +++ b/assets/js/1df93b7f.6c196ace.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[237],{3808:(e,t,n)=>{n.r(t),n.d(t,{default:()=>p});var a=n(7462),i=n(7294),o=n(6010),l=n(9960),r=n(2263),s=n(4704);const c="heroBanner_qdFl",u="buttons_AeoN",m="description_meEo",d="features_cAfv",g="feature_xuHn",h=[{title:"Auto-generated changelogs from Git history"},{title:"Auto-generated API documentations (using FastAPI)"},{title:"Auto-generated API clients (using openapi generator)"},{title:"Pre-commit hooks"},{title:"CI/CD (using Github Actions)"},{title:"Pydantic data validation"},{title:"OAuth2"},{title:"Standardized API error and response model"},{title:"Run using Docker"},{title:"Documentation solution (using Docusaurus)"}];function E(){const{siteConfig:e}=(0,r.Z)();return i.createElement("header",{className:(0,o.Z)("hero hero--primary",c)},i.createElement("div",{className:"container"},i.createElement("h1",{className:"hero__title"},e.title),i.createElement("p",{className:"hero__subtitle"},e.tagline),i.createElement("div",{className:u},i.createElement(l.Z,{className:"button button--secondary button--lg",to:"/docs/about/introduction"},"Start reading the docs"))))}function f(e){let{title:t}=e;return i.createElement("div",{className:(0,o.Z)(g)},t)}function p(){const{siteConfig:e}=(0,r.Z)();return i.createElement(s.Z,{title:`Frontpage | ${e.title}`,description:`Frontpage for ${e.title}`},i.createElement(E,null),i.createElement("main",null,(null==h?void 0:h.length)>0&&i.createElement(i.Fragment,null,i.createElement("h2",{className:m},"Features include:"),i.createElement("section",{className:"container "+d},h.map(((e,t)=>i.createElement(f,(0,a.Z)({key:t},e))))))))}}}]); \ No newline at end of file diff --git a/assets/js/1f391b9e.1cd91990.js b/assets/js/1f391b9e.1cd91990.js new file mode 100644 index 00000000..919c8087 --- /dev/null +++ b/assets/js/1f391b9e.1cd91990.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[85],{4247:(e,t,a)=>{a.r(t),a.d(t,{default:()=>d});var n=a(7294),l=a(6010),c=a(1944),r=a(5281),m=a(4704),i=a(5203),o=a(9407);const s="mdxPageWrapper_j9I6";function d(e){const{content:t}=e,{metadata:{title:a,description:d,frontMatter:u}}=t,{wrapperClassName:p,hide_table_of_contents:g}=u;return n.createElement(c.FG,{className:(0,l.Z)(p??r.k.wrapper.mdxPages,r.k.page.mdxPage)},n.createElement(c.d,{title:a,description:d}),n.createElement(m.Z,null,n.createElement("main",{className:"container container--fluid margin-vert--lg"},n.createElement("div",{className:(0,l.Z)("row",s)},n.createElement("div",{className:(0,l.Z)("col",!g&&"col--8")},n.createElement("article",null,n.createElement(i.Z,null,n.createElement(t,null)))),!g&&t.toc.length>0&&n.createElement("div",{className:"col col--2"},n.createElement(o.Z,{toc:t.toc,minHeadingLevel:u.toc_min_heading_level,maxHeadingLevel:u.toc_max_heading_level}))))))}}}]); \ No newline at end of file diff --git a/assets/js/20f005c0.049174b7.js b/assets/js/20f005c0.049174b7.js new file mode 100644 index 00000000..fee25fe8 --- /dev/null +++ b/assets/js/20f005c0.049174b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[141],{2359:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>u,frontMatter:()=>d,metadata:()=>i,toc:()=>_});var n=o(7462),s=(o(7294),o(3905)),r=(o(1839),o(814));const d={},a="Controller",i={unversionedId:"contribute/development-guide/coding/extending-the-api/adding-features/controllers",id:"contribute/development-guide/coding/extending-the-api/adding-features/controllers",title:"Controller",description:"A controller receives a request, then calls a use case, before finally returning a response.",source:"@site/docs/contribute/development-guide/coding/extending-the-api/adding-features/01-controllers.md",sourceDirName:"contribute/development-guide/coding/extending-the-api/adding-features",slug:"/contribute/development-guide/coding/extending-the-api/adding-features/controllers",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllers",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/extending-the-api/adding-features/01-controllers.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"contribute",previous:{title:"Adding features",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/"},next:{title:"Use cases",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-cases"}},p={},_=[{value:"Testing controllers",id:"testing-controllers",level:2}],l={toc:_};function u(e){let{components:t,...o}=e;return(0,s.kt)("wrapper",(0,n.Z)({},l,o,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"controller"},"Controller"),(0,s.kt)("p",null,"A controller receives a request, then calls a use case, before finally returning a response."),(0,s.kt)("p",null,"The controller (adapter layer) is responsible for validating and transforming requests into an understandable format for the use cases (application layer). The format is defined inside the use cases by the request and response models. The controller takes the user input (the request), converts it into the request model defined by the use case and passes the request model to the use case, and at the end return the response model."),(0,s.kt)(r.Z,{language:"jsx",mdxType:"CodeBlock"},'from fastapi import APIRouter, Depends\n\nfrom authentication.authentication import auth_with_jwt\nfrom authentication.models import User\nfrom features.todo.repository.todo_repository import get_todo_repository\nfrom features.todo.repository.todo_repository_interface import TodoRepositoryInterface\nfrom features.todo.use_cases.add_todo import (\n AddTodoRequest,\n AddTodoResponse,\n add_todo_use_case,\n)\nfrom features.todo.use_cases.delete_todo_by_id import (\n DeleteTodoByIdResponse,\n delete_todo_use_case,\n)\nfrom features.todo.use_cases.get_todo_all import GetTodoAllResponse, get_todo_all_use_case\nfrom features.todo.use_cases.get_todo_by_id import (\n GetTodoByIdResponse,\n get_todo_by_id_use_case,\n)\nfrom features.todo.use_cases.update_todo import (\n UpdateTodoRequest,\n UpdateTodoResponse,\n update_todo_use_case,\n)\n\nrouter = APIRouter(tags=["todos"], prefix="/todos")\n\n\n@router.post("", operation_id="create")\ndef add_todo(\n data: AddTodoRequest,\n user: User = Depends(auth_with_jwt),\n todo_repository: TodoRepositoryInterface = Depends(get_todo_repository),\n) -> AddTodoResponse:\n return add_todo_use_case(data=data, user_id=user.user_id, todo_repository=todo_repository)\n\n\n@router.get("/{id}", operation_id="get_by_id")\ndef get_todo_by_id(\n id: str,\n user: User = Depends(auth_with_jwt),\n todo_repository: TodoRepositoryInterface = Depends(get_todo_repository),\n) -> GetTodoByIdResponse:\n return get_todo_by_id_use_case(id=id, user_id=user.user_id, todo_repository=todo_repository)\n\n\n@router.delete("/{id}", operation_id="delete_by_id")\ndef delete_todo_by_id(\n id: str,\n user: User = Depends(auth_with_jwt),\n todo_repository: TodoRepositoryInterface = Depends(get_todo_repository),\n) -> DeleteTodoByIdResponse:\n return delete_todo_use_case(id=id, user_id=user.user_id, todo_repository=todo_repository)\n\n\n@router.get("", operation_id="get_all")\ndef get_todo_all(\n user: User = Depends(auth_with_jwt), todo_repository: TodoRepositoryInterface = Depends(get_todo_repository)\n) -> list[GetTodoAllResponse]:\n return get_todo_all_use_case(user_id=user.user_id, todo_repository=todo_repository) # type: ignore\n\n\n@router.put("/{id}", operation_id="update_by_id")\ndef update_todo(\n id: str,\n data: UpdateTodoRequest,\n user: User = Depends(auth_with_jwt),\n todo_repository: TodoRepositoryInterface = Depends(get_todo_repository),\n) -> UpdateTodoResponse:\n return update_todo_use_case(id=id, data=data, user_id=user.user_id, todo_repository=todo_repository)\n'),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"Required"),(0,s.kt)("ul",{parentName:"li"},(0,s.kt)("li",{parentName:"ul"},"The controller needs to be decorated with the ",(0,s.kt)("inlineCode",{parentName:"li"},"create_response")," decorator, which handles exceptions and returns a unified response type."),(0,s.kt)("li",{parentName:"ul"},"The controller needs to have set the ",(0,s.kt)("inlineCode",{parentName:"li"},"response_model")," and ",(0,s.kt)("inlineCode",{parentName:"li"},"request_model"),", that is used to generate API documentation and used for validation."))),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"Optional"),(0,s.kt)("ul",{parentName:"li"},(0,s.kt)("li",{parentName:"ul"},"Add ",(0,s.kt)("a",{parentName:"li",href:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces"},"repository interface")," to handle communication to external services such as databases and inject the repository implementations to the controller endpoint and pass the injected repository implementations to the use case.")))),(0,s.kt)("admonition",{type:"note"},(0,s.kt)("p",{parentName:"admonition"},"FastAPI is built around the ",(0,s.kt)("a",{parentName:"p",href:"https://github.com/OAI/OpenAPI-Specification"},"OpenAPI Specification")," (formerly known as swagger) standards. In FastAPI, by coding your endpoints, you are automatically writing your API documentation. FastAPI maps your endpoint details to a ",(0,s.kt)("a",{parentName:"p",href:"https://json-schema.org/"},"JSON Schema")," document. Under the hood, FastAPI uses Pydantic for data validation. With Pydantic along with ",(0,s.kt)("a",{parentName:"p",href:"https://docs.python.org/3/library/typing.html"},"type hints"),", you get a nice editor experience with autocompletion.")),(0,s.kt)("h2",{id:"testing-controllers"},"Testing controllers"),(0,s.kt)("p",null,"Use the ",(0,s.kt)("inlineCode",{parentName:"p"},"test_client")," fixture to populate the database with test data and ",(0,s.kt)("inlineCode",{parentName:"p"},"test_app")," fixture to perform REST API calls."),(0,s.kt)(r.Z,{language:"jsx",mdxType:"CodeBlock"},'import pytest\nfrom starlette.status import (\n HTTP_200_OK,\n HTTP_404_NOT_FOUND,\n HTTP_422_UNPROCESSABLE_ENTITY,\n)\nfrom starlette.testclient import TestClient\n\nfrom data_providers.clients.client_interface import ClientInterface\n\n\nclass TestTodo:\n @pytest.fixture(autouse=True)\n def setup_database(self, test_client: ClientInterface):\n test_client.insert_many(\n [\n {"_id": "1", "id": "1", "title": "title 1", "user_id": "nologin"},\n {"_id": "2", "id": "2", "title": "title 2", "user_id": "nologin"},\n ]\n )\n\n def test_get_todo_all(self, test_app: TestClient):\n response = test_app.get("/todos")\n items = response.json()\n\n assert response.status_code == HTTP_200_OK\n assert len(items) == 2\n assert items[0]["id"] == "1"\n assert items[0]["title"] == "title 1"\n assert items[1]["id"] == "2"\n assert items[1]["title"] == "title 2"\n\n def test_get_todo_by_id(self, test_app: TestClient):\n response = test_app.get("/todos/1")\n\n assert response.status_code == HTTP_200_OK\n assert response.json()["id"] == "1"\n assert response.json()["title"] == "title 1"\n\n def test_get_todo_should_return_not_found(self, test_app: TestClient):\n response = test_app.get("/todos/unknown")\n assert response.status_code == HTTP_404_NOT_FOUND\n\n def test_add_todo(self, test_app: TestClient):\n response = test_app.post("/todos", json={"title": "title 3"})\n item = response.json()\n\n assert response.status_code == HTTP_200_OK\n assert item["title"] == "title 3"\n\n def test_add_todo_should_return_unprocessable_when_invalid_entity(self, test_app: TestClient):\n response = test_app.post("/todos", json=None)\n\n assert response.status_code == HTTP_422_UNPROCESSABLE_ENTITY\n\n def test_update_todo(self, test_app):\n response = test_app.put("/todos/1", json={"title": "title 1 updated", "is_completed": False})\n\n assert response.status_code == HTTP_200_OK\n assert response.json()["success"]\n\n def test_update_todo_should_return_not_found(self, test_app):\n response = test_app.put("/todos/unknown", json={"title": "something", "is_completed": False})\n assert response.status_code == HTTP_404_NOT_FOUND\n\n def test_update_todo_should_return_unprocessable_when_invalid_entity(self, test_app: TestClient):\n response = test_app.put("/todos/1", json={"title": ""})\n\n assert response.status_code == HTTP_422_UNPROCESSABLE_ENTITY\n\n def test_delete_todo(self, test_app: TestClient):\n response = test_app.delete("/todos/1")\n\n assert response.status_code == HTTP_200_OK\n assert response.json()["success"]\n\n def test_delete_todo_should_return_not_found(self, test_app: TestClient):\n response = test_app.delete("/todos/unknown")\n assert response.status_code == HTTP_404_NOT_FOUND\n'),(0,s.kt)("admonition",{type:"note"},(0,s.kt)("p",{parentName:"admonition"},"Mark it as integration test.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2424d345.a6d361c6.js b/assets/js/2424d345.a6d361c6.js new file mode 100644 index 00000000..94560503 --- /dev/null +++ b/assets/js/2424d345.a6d361c6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[89],{5449:(t,o,e)=>{e.r(o),e.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>c,frontMatter:()=>i,metadata:()=>r,toc:()=>h});var a=e(7462),n=(e(7294),e(3905));e(1839);const i={},s="How to do something",r={unversionedId:"about/how-to/how-to-do-something",id:"about/how-to/how-to-do-something",title:"How to do something",description:"",source:"@site/docs/about/how-to/01-how-to-do-something.md",sourceDirName:"about/how-to",slug:"/about/how-to/how-to-do-something",permalink:"/template-fastapi-react/docs/about/how-to/how-to-do-something",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/about/how-to/01-how-to-do-something.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"about",previous:{title:"How to",permalink:"/template-fastapi-react/docs/category/how-to"},next:{title:"Running",permalink:"/template-fastapi-react/docs/category/running"}},d={},h=[],m={toc:h};function c(t){let{components:o,...e}=t;return(0,n.kt)("wrapper",(0,a.Z)({},m,e,{components:o,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"how-to-do-something"},"How to do something"))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2e61c9f2.6d5fa105.js b/assets/js/2e61c9f2.6d5fa105.js new file mode 100644 index 00000000..893e50a3 --- /dev/null +++ b/assets/js/2e61c9f2.6d5fa105.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[413],{9811:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>u,toc:()=>r});var n=i(7462),o=(i(7294),i(3905));i(1839);const a={},s="Documentation",u={unversionedId:"contribute/documentation",id:"contribute/documentation",title:"Documentation",description:"This site was generated from the contents of your documentation folder using Docusaurus and we host it on GitHub Pages.",source:"@site/docs/contribute/03-documentation.md",sourceDirName:"contribute",slug:"/contribute/documentation",permalink:"/template-fastapi-react/docs/contribute/documentation",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/03-documentation.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{},sidebar:"contribute",previous:{title:"Publishing",permalink:"/template-fastapi-react/docs/contribute/development-guide/publishing"}},l={},r=[{value:"How it works",id:"how-it-works",level:2},{value:"Publishing",id:"publishing",level:2},{value:"Initial settings",id:"initial-settings",level:2},{value:"Assets",id:"assets",level:2}],c={toc:r};function d(t){let{components:e,...i}=t;return(0,o.kt)("wrapper",(0,n.Z)({},c,i,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"documentation"},"Documentation"),(0,o.kt)("p",null,"This site was generated from the contents of your ",(0,o.kt)("inlineCode",{parentName:"p"},"documentation")," folder using ",(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/"},"Docusaurus")," and we host it on GitHub Pages."),(0,o.kt)("h2",{id:"how-it-works"},"How it works"),(0,o.kt)("p",null,"From Docusaurus own documentation:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Docusaurus is a static-site generator. It builds a single-page application with fast client-side navigation, leveraging the full power of React to make your site interactive. It provides out-of-the-box documentation features but can be used to create any kind of site (personal website, product, blog, marketing landing pages, etc).")),(0,o.kt)("p",null,"While Docusaurus is rich on features, we use it mostly to host markdown pages. The main bulk of the documentation is located in ",(0,o.kt)("inlineCode",{parentName:"p"},"documentation/docs"),"."),(0,o.kt)("h2",{id:"publishing"},"Publishing"),(0,o.kt)("p",null,"We are using the Github Action ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/publish-docs.yaml"},(0,o.kt)("inlineCode",{parentName:"a"},"publish-docs.yaml"))," to build and publish the documentation website. This action is run every time someone pushes to the ",(0,o.kt)("inlineCode",{parentName:"p"},"main")," branch."),(0,o.kt)("p",null,"This will checkout the code, download the changelog from the ",(0,o.kt)("inlineCode",{parentName:"p"},"generate-changelog.yaml")," action, and build the documentation. Then it will deploy the documentation (placed in the documentation/build/ folder) to GitHub Pages."),(0,o.kt)("h2",{id:"initial-settings"},"Initial settings"),(0,o.kt)("p",null,"When deployed to GitHub Pages, you do need to configure your site under the settings. Pick the gh-pages branch and select either a private url or a public one. It will show you the site\u2019s url, which should now contain your generated documentation site."),(0,o.kt)("h2",{id:"assets"},"Assets"),(0,o.kt)("p",null,"All assets files are places under ",(0,o.kt)("inlineCode",{parentName:"p"},"documentation/static")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/327.6bc39bf0.js b/assets/js/327.6bc39bf0.js new file mode 100644 index 00000000..f10b1f6a --- /dev/null +++ b/assets/js/327.6bc39bf0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[327],{2503:(e,n,t)=>{t.d(n,{Z:()=>m});var a=t(7462),i=t(7294),l=t(6010),o=t(5999),r=t(6668);const c="anchorWithStickyNavbar_LWe7",s="anchorWithHideOnScrollNavbar_WYt5";function m(e){let{as:n,id:t,...m}=e;const{navbar:{hideOnScroll:d}}=(0,r.L)();return"h1"!==n&&t?i.createElement(n,(0,a.Z)({},m,{className:(0,l.Z)("anchor",d?s:c),id:t}),m.children,i.createElement("a",{className:"hash-link",href:`#${t}`,title:(0,o.I)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"\u200b")):i.createElement(n,(0,a.Z)({},m,{id:void 0}))}},5203:(e,n,t)=>{t.d(n,{Z:()=>S});var a=t(7294),i=t(3905),l=t(7462),o=t(5742);var r=t(814);var c=t(9960);var s=t(6010),m=t(2389),d=t(6043);const u="details_lb9f",f="isBrowser_bmU9",h="collapsibleContent_i85q";function v(e){return!!e&&("SUMMARY"===e.tagName||v(e.parentElement))}function p(e,n){return!!e&&(e===n||p(e.parentElement,n))}function E(e){let{summary:n,children:t,...i}=e;const o=(0,m.Z)(),r=(0,a.useRef)(null),{collapsed:c,setCollapsed:E}=(0,d.u)({initialState:!i.open}),[g,C]=(0,a.useState)(i.open);return a.createElement("details",(0,l.Z)({},i,{ref:r,open:g,"data-collapsed":c,className:(0,s.Z)(u,o&&f,i.className),onMouseDown:e=>{v(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const n=e.target;v(n)&&p(n,r.current)&&(e.preventDefault(),c?(E(!1),C(!0)):E(!0))}}),n??a.createElement("summary",null,"Details"),a.createElement(d.z,{lazy:!1,collapsed:c,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{E(e),C(!e)}},a.createElement("div",{className:h},t)))}const g="details_b_Ee";function C(e){let{...n}=e;return a.createElement(E,(0,l.Z)({},n,{className:(0,s.Z)("alert alert--info",g,n.className)}))}var N=t(2503);function L(e){return a.createElement(N.Z,e)}const b="containsTaskList_mC6p";const Z="img_ev3q";var y=t(5281),H=t(5999);const k="admonition_LlT9",x="admonitionHeading_tbUL",T="admonitionIcon_kALy",_="admonitionContent_S0QG";const z={note:{infimaClassName:"secondary",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:a.createElement(H.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:a.createElement(H.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:a.createElement(H.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:a.createElement(H.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 16 16"},a.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:a.createElement(H.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},M={secondary:"note",important:"info",success:"tip",warning:"danger"};function A(e){const{mdxAdmonitionTitle:n,rest:t}=function(e){const n=a.Children.toArray(e),t=n.find((e=>{var n;return a.isValidElement(e)&&"mdxAdmonitionTitle"===(null==(n=e.props)?void 0:n.mdxType)})),i=a.createElement(a.Fragment,null,n.filter((e=>e!==t)));return{mdxAdmonitionTitle:t,rest:i}}(e.children);return{...e,title:e.title??n,children:t}}const w={head:function(e){const n=a.Children.map(e.children,(e=>a.isValidElement(e)?function(e){var n;if(null!=(n=e.props)&&n.mdxType&&e.props.originalType){const{mdxType:n,originalType:t,...i}=e.props;return a.createElement(e.props.originalType,i)}return e}(e):e));return a.createElement(o.Z,e,n)},code:function(e){const n=["a","b","big","i","span","em","strong","sup","sub","small"];return a.Children.toArray(e.children).every((e=>{var t;return"string"==typeof e&&!e.includes("\n")||(0,a.isValidElement)(e)&&n.includes(null==(t=e.props)?void 0:t.mdxType)}))?a.createElement("code",e):a.createElement(r.Z,e)},a:function(e){return a.createElement(c.Z,e)},pre:function(e){var n;return a.createElement(r.Z,(0,a.isValidElement)(e.children)&&"code"===(null==(n=e.children.props)?void 0:n.originalType)?e.children.props:{...e})},details:function(e){const n=a.Children.toArray(e.children),t=n.find((e=>{var n;return a.isValidElement(e)&&"summary"===(null==(n=e.props)?void 0:n.mdxType)})),i=a.createElement(a.Fragment,null,n.filter((e=>e!==t)));return a.createElement(C,(0,l.Z)({},e,{summary:t}),i)},ul:function(e){return a.createElement("ul",(0,l.Z)({},e,{className:(n=e.className,(0,s.Z)(n,(null==n?void 0:n.includes("contains-task-list"))&&b))}));var n},img:function(e){return a.createElement("img",(0,l.Z)({loading:"lazy"},e,{className:(n=e.className,(0,s.Z)(n,Z))}));var n},h1:e=>a.createElement(L,(0,l.Z)({as:"h1"},e)),h2:e=>a.createElement(L,(0,l.Z)({as:"h2"},e)),h3:e=>a.createElement(L,(0,l.Z)({as:"h3"},e)),h4:e=>a.createElement(L,(0,l.Z)({as:"h4"},e)),h5:e=>a.createElement(L,(0,l.Z)({as:"h5"},e)),h6:e=>a.createElement(L,(0,l.Z)({as:"h6"},e)),admonition:function(e){const{children:n,type:t,title:i,icon:l}=A(e),o=function(e){const n=M[e]??e;return z[n]||(console.warn(`No admonition config found for admonition type "${n}". Using Info as fallback.`),z.info)}(t),r=i??o.label,{iconComponent:c}=o,m=l??a.createElement(c,null);return a.createElement("div",{className:(0,s.Z)(y.k.common.admonition,y.k.common.admonitionType(e.type),"alert",`alert--${o.infimaClassName}`,k)},a.createElement("div",{className:x},a.createElement("span",{className:T},m),r),a.createElement("div",{className:_},n))}};function S(e){let{children:n}=e;return a.createElement(i.Zo,{components:w},n)}},9407:(e,n,t)=>{t.d(n,{Z:()=>c});var a=t(7462),i=t(7294),l=t(6010),o=t(3743);const r="tableOfContents_bqdL";function c(e){let{className:n,...t}=e;return i.createElement("div",{className:(0,l.Z)(r,"thin-scrollbar",n)},i.createElement(o.Z,(0,a.Z)({},t,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}},3743:(e,n,t)=>{t.d(n,{Z:()=>h});var a=t(7462),i=t(7294),l=t(6668);function o(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const a=t.slice(2,e.level);e.parentIndex=Math.max(...a),t[e.level]=n}));const a=[];return n.forEach((e=>{const{parentIndex:t,...i}=e;t>=0?n[t].children.push(i):a.push(i)})),a}function r(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return n.flatMap((e=>{const n=r({toc:e.children,minHeadingLevel:t,maxHeadingLevel:a});return function(e){return e.level>=t&&e.level<=a}(e)?[{...e,children:n}]:n}))}function c(e){const n=e.getBoundingClientRect();return n.top===n.bottom?c(e.parentNode):n}function s(e,n){let{anchorTopOffset:t}=n;const a=e.find((e=>c(e).top>=t));if(a){return function(e){return e.top>0&&e.bottom{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,i.useRef)(void 0),t=m();(0,i.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:i,minHeadingLevel:l,maxHeadingLevel:o}=e;function r(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),r=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const a=[];for(let i=n;i<=t;i+=1)a.push(`h${i}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:l,maxHeadingLevel:o}),c=s(r,{anchorTopOffset:t.current}),m=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(i),e.classList.add(i),n.current=e):e.classList.remove(i)}(e,e===m)}))}return document.addEventListener("scroll",r),document.addEventListener("resize",r),r(),()=>{document.removeEventListener("scroll",r),document.removeEventListener("resize",r)}}),[e,t])}function u(e){let{toc:n,className:t,linkClassName:a,isChild:l}=e;return n.length?i.createElement("ul",{className:l?void 0:t},n.map((e=>i.createElement("li",{key:e.id},i.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),i.createElement(u,{isChild:!0,toc:e.children,className:t,linkClassName:a}))))):null}const f=i.memo(u);function h(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:s,minHeadingLevel:m,maxHeadingLevel:u,...h}=e;const v=(0,l.L)(),p=m??v.tableOfContents.minHeadingLevel,E=u??v.tableOfContents.maxHeadingLevel,g=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,i.useMemo)((()=>r({toc:o(n),minHeadingLevel:t,maxHeadingLevel:a})),[n,t,a])}({toc:n,minHeadingLevel:p,maxHeadingLevel:E});return d((0,i.useMemo)((()=>{if(c&&s)return{linkClassName:c,linkActiveClassName:s,minHeadingLevel:p,maxHeadingLevel:E}}),[c,s,p,E])),i.createElement(f,(0,a.Z)({toc:g,className:t,linkClassName:c},h))}}}]); \ No newline at end of file diff --git a/assets/js/3cb05d6d.2e6d8bf1.js b/assets/js/3cb05d6d.2e6d8bf1.js new file mode 100644 index 00000000..e338910a --- /dev/null +++ b/assets/js/3cb05d6d.2e6d8bf1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[176],{516:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>d,toc:()=>p});var a=n(7462),i=(n(7294),n(3905)),o=(n(1839),n(814));const r={sidebar_position:2},s="Extending the API",d={unversionedId:"contribute/development-guide/coding/extending-the-api/index",id:"contribute/development-guide/coding/extending-the-api/index",title:"Extending the API",description:"FastAPI",source:"@site/docs/contribute/development-guide/coding/extending-the-api/index.md",sourceDirName:"contribute/development-guide/coding/extending-the-api",slug:"/contribute/development-guide/coding/extending-the-api/",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/extending-the-api/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"contribute",previous:{title:"Architecture overview",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/architecture"},next:{title:"Adding entities",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-entities"}},l={},p=[{value:"FastAPI",id:"fastapi",level:2},{value:"Codebase structure",id:"codebase-structure",level:2},{value:"Get started",id:"get-started",level:2},{value:"Configuration",id:"configuration",level:2}],c={toc:p};function u(e){let{components:t,...r}=e;return(0,i.kt)("wrapper",(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"extending-the-api"},"Extending the API"),(0,i.kt)("h2",{id:"fastapi"},"FastAPI"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://github.com/tiangolo/fastapi"},"FastAPI")," is a high-performant REST API framework for Python. It's built on top of ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/encode/starlette"},"Starlette"),", an ASGI (Asynchronous Server Gateway Interface) implementation for Python, and it uses ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/pydantic/pydantic"},"Pydantic")," for data validation. It can generate ",(0,i.kt)("a",{parentName:"p",href:"https://swagger.io/docs/specification/about/"},"OpenAPI")," documentation from your code and also produces a ",(0,i.kt)("a",{parentName:"p",href:"https://swagger.io/tools/swagger-ui/"},"Swagger UI")," that you can use to test your application. OpenAPI uses a subset of ",(0,i.kt)("a",{parentName:"p",href:"https://json-schema.org/"},"JSON Schema")," to describe APIs and define the validation rules of the\nAPI payloads and parameters."),(0,i.kt)("p",null,"To run FastAPI applications, we use the process manager ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/encode/uvicorn"},"uvicorn"),". Check out the official ",(0,i.kt)("a",{parentName:"p",href:"https://fastapi.tiangolo.com/deployment/server-workers/"},"documentation")," for more details."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"FastAPI",src:n(3679).Z,width:"616",height:"743"})),(0,i.kt)("h2",{id:"codebase-structure"},"Codebase structure"),(0,i.kt)("p",null,"The API is grouped by features."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Features",src:n(8116).Z,width:"2374",height:"1414"})),(0,i.kt)("p",null,"The API has a feature-based folder structure following the principles of ",(0,i.kt)("a",{parentName:"p",href:"/template-fastapi-react/docs/contribute/development-guide/coding/architecture"},"Clean Architecture"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"\u251c\u2500\u2500 api/\n\u2502 \u2514\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 common/\n\u2502 \u251c\u2500\u2500 entities/\n\u2502 \u251c\u2500\u2500 features/\n\u2502 \u2502 \u251c\u2500\u2500 health_check/\n\u2502 \u2502 \u251c\u2500\u2500 todo/\n\u2502 \u2502 \u251c\u2500\u2500 whoami/\n\u2502 \u2502 \u2514\u2500\u2500 ...\n\u2502 \u251c\u2500\u2500 data_providers/\n\u2502 \u2514\u2500\u2500 tests/\n\u2502 \u251c\u2500\u2500 unit/\n\u2502 \u2514\u2500\u2500 integration/\n\u2514\u2500\u2500 ...\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"common")," contains shared code like authentication, exceptions, response decorator"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-entities"},(0,i.kt)("inlineCode",{parentName:"a"},"entities"))," contains all entities, enums, exceptions, interfaces, types and logic specific to the domain layer"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"adding-features"},(0,i.kt)("inlineCode",{parentName:"a"},"features"))," contains use-cases (application logic), repository interfaces, and controllers"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"adding-data-providers"},(0,i.kt)("inlineCode",{parentName:"a"},"data providers"))," contains classes for accessing external resources such as databases, file systems, web services, and repository implementations"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"tests")," contains unit and integrations tests")),(0,i.kt)("h2",{id:"get-started"},"Get started"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Create the domain model by ",(0,i.kt)("a",{parentName:"li",href:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-entities"},"adding entities")),(0,i.kt)("li",{parentName:"ol"},"Extend the API by ",(0,i.kt)("a",{parentName:"li",href:"adding-features"},"adding features"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Add a ",(0,i.kt)("a",{parentName:"li",href:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-cases"},"use case")," to handle application logic"),(0,i.kt)("li",{parentName:"ul"},"Add a ",(0,i.kt)("a",{parentName:"li",href:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllers"},"controller")," to handle API requests",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Add an endpoint to the controller that executes the use case"))))),(0,i.kt)("li",{parentName:"ol"},"Add a data provider, ",(0,i.kt)("a",{parentName:"li",href:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces"},"repository interface")," and ",(0,i.kt)("a",{parentName:"li",href:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories"},"repository")," to handle communication to external services such as databases.")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Entities and data providers can be shared between features (the entrypoints and use-cases).")),(0,i.kt)("h2",{id:"configuration"},"Configuration"),(0,i.kt)("p",null,"All configuration parameters are expected to be environment variables, and are defined in this file ",(0,i.kt)("inlineCode",{parentName:"p"},"api/src/config.py"),"."),(0,i.kt)(o.Z,{language:"jsx",mdxType:"CodeBlock"},'from pydantic import Field\nfrom pydantic_settings import BaseSettings\n\nfrom authentication.models import User\nfrom common.logger_level import LoggerLevel\n\n\nclass Config(BaseSettings):\n # Pydantic-settings in pydantic v2 automatically fetch config settings from env-variables\n ENVIRONMENT: str = "local"\n\n # Logging\n LOGGER_LEVEL: LoggerLevel = Field(default=LoggerLevel.INFO)\n APPINSIGHTS_CONSTRING: str | None = None\n\n # Database\n MONGODB_USERNAME: str = "dummy"\n MONGODB_PASSWORD: str = "dummy"\n MONGODB_HOSTNAME: str = "db"\n MONGODB_DATABASE: str = "test"\n MONGODB_PORT: int = 27017\n\n # Access control\n APPLICATION_ADMIN: str = "admin"\n APPLICATION_ADMIN_ROLE: str = "admin"\n\n # Authentication\n SECRET_KEY: str | None = None\n AUTH_ENABLED: bool = False\n JWT_SELF_SIGNING_ISSUER: str = "APPLICATION" # Which value will be used to sign self-signed JWT\'s\n TEST_TOKEN: bool = False # This value should only be changed at runtime by test setup\n OAUTH_WELL_KNOWN: str | None = None\n OAUTH_TOKEN_ENDPOINT: str = ""\n OAUTH_AUTH_ENDPOINT: str = ""\n OAUTH_CLIENT_ID: str = ""\n OAUTH_AUTH_SCOPE: str = ""\n OAUTH_AUDIENCE: str = ""\n MICROSOFT_AUTH_PROVIDER: str = "login.microsoftonline.com"\n\n @property\n def log_level(self) -> str:\n """Returns LOGGER_LEVEL as a (lower case) string."""\n return str(self.LOGGER_LEVEL.value).lower()\n\n\nconfig = Config()\n\nif config.AUTH_ENABLED and not all((config.OAUTH_AUTH_ENDPOINT, config.OAUTH_TOKEN_ENDPOINT, config.OAUTH_WELL_KNOWN)):\n raise ValueError("Authentication was enabled, but some auth configuration parameters are missing")\n\nif not config.AUTH_ENABLED:\n print("\\n")\n print("################ WARNING ################")\n print("# Authentication is disabled #")\n print("################ WARNING ################\\n")\n\ndefault_user: User = User(\n user_id="nologin",\n full_name="Not Authenticated",\n email="nologin@example.com",\n)\n'),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"../../../../about/running/configure"},"configuration")," for a description of the different configuration options available."))}u.isMDXComponent=!0},3679:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/fast-api-4ed5595066ba8b486810824e9770c6eb.png"},8116:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/features-a73ae32cb4391fdd586e23d450e6f2d7.png"}}]); \ No newline at end of file diff --git a/assets/js/415192e1.5c02af10.js b/assets/js/415192e1.5c02af10.js new file mode 100644 index 00000000..32ed05c5 --- /dev/null +++ b/assets/js/415192e1.5c02af10.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[295],{3380:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>d,toc:()=>r});var i=n(7462),s=(n(7294),n(3905)),o=(n(1839),n(814));const a={},l="Clients",d={unversionedId:"contribute/development-guide/coding/extending-the-api/adding-data-providers/clients",id:"contribute/development-guide/coding/extending-the-api/adding-data-providers/clients",title:"Clients",description:"The template already ships with a mongo database client for connecting to MongoDB databases. However, if you need a client that can talk to e.g. PostgreSQL you need to add this.",source:"@site/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/01-clients.md",sourceDirName:"contribute/development-guide/coding/extending-the-api/adding-data-providers",slug:"/contribute/development-guide/coding/extending-the-api/adding-data-providers/clients",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/clients",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/01-clients.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"contribute",previous:{title:"Adding data providers",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/"},next:{title:"Repository interfaces",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces"}},c={},r=[{value:"Testing clients",id:"testing-clients",level:2}],_={toc:r};function m(e){let{components:t,...n}=e;return(0,s.kt)("wrapper",(0,i.Z)({},_,n,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"clients"},"Clients"),(0,s.kt)("p",null,"The template already ships with a mongo database client for connecting to MongoDB databases. However, if you need a client that can talk to e.g. PostgreSQL you need to add this."),(0,s.kt)(o.Z,{language:"jsx",mdxType:"CodeBlock"},'from typing import Any\n\nfrom pymongo.cursor import Cursor\nfrom pymongo.database import Database\nfrom pymongo.errors import DuplicateKeyError\nfrom pymongo.mongo_client import MongoClient\nfrom pymongo.results import DeleteResult, InsertManyResult\n\nfrom common.exceptions import NotFoundException, ValidationException\nfrom config import config\nfrom data_providers.clients.client_interface import ClientInterface\n\nMONGO_CLIENT: MongoClient[dict[str, Any]] = MongoClient(\n host=config.MONGODB_HOSTNAME,\n port=config.MONGODB_PORT,\n username=config.MONGODB_USERNAME,\n password=config.MONGODB_PASSWORD,\n authSource="admin",\n tls=False,\n connectTimeoutMS=5000,\n serverSelectionTimeoutMS=5000,\n retryWrites=False,\n)\n\n\nclass MongoDatabaseClient(ClientInterface[dict, str]):\n def __init__(self, collection_name: str, database_name: str, client: MongoClient[dict[str, Any]] = MONGO_CLIENT):\n database: Database[dict[str, Any]] = client[database_name]\n self.database = database\n self.collection_name = collection_name\n self.collection = database[collection_name]\n\n def wipe_db(self) -> None:\n databases = self.database.client.list_database_names()\n databases_to_delete = [\n database_name for database_name in databases if database_name not in ("admin", "config", "local")\n ] # Don\'t delete the mongo admin or local database\n for database_name in databases_to_delete:\n self.database.client.drop_database(database_name)\n\n def delete_collection(self) -> None:\n self.collection.drop()\n\n def create(self, document: dict[str, Any]) -> dict[str, Any]:\n try:\n result = self.collection.insert_one(document)\n return self.get(str(result.inserted_id))\n except DuplicateKeyError:\n raise ValidationException(message=f"The document with id \'{document[\'_id\']}\' already exists")\n\n def list_collection(self) -> list[dict[str, Any]]:\n return list(self.collection.find())\n\n def get(self, uid: str) -> dict[str, Any]:\n document = self.collection.find_one(filter={"_id": uid})\n if document is None:\n raise NotFoundException\n else:\n return dict(document)\n\n def update(self, uid: str, document: dict[str, Any]) -> dict[str, Any]:\n if self.collection.find_one(filter={"_id": uid}) is None:\n raise NotFoundException(extra={"uid": uid})\n self.collection.replace_one({"_id": uid}, document)\n return self.get(uid)\n\n def delete(self, uid: str) -> bool:\n result = self.collection.delete_one(filter={"_id": uid})\n return result.deleted_count > 0\n\n def find(self, filter: dict[str, Any]) -> Cursor[dict[str, Any]]:\n return self.collection.find(filter=filter)\n\n def find_one(self, filter: dict[str, Any]) -> dict[str, Any] | None:\n return self.collection.find_one(filter=filter)\n\n def insert_many(self, items: list[dict[str, Any]]) -> InsertManyResult:\n return self.collection.insert_many(items)\n\n def delete_many(self, filter: dict[str, Any]) -> DeleteResult:\n return self.collection.delete_many(filter)\n'),(0,s.kt)("h2",{id:"testing-clients"},"Testing clients"),(0,s.kt)("p",null,"The ",(0,s.kt)("inlineCode",{parentName:"p"},"test_client")," fixture are using the mongomock instead of real database."),(0,s.kt)(o.Z,{language:"jsx",mdxType:"CodeBlock"},'import pytest\n\nfrom common.exceptions import NotFoundException, ValidationException\nfrom data_providers.clients.mongodb.mongo_database_client import MongoDatabaseClient\n\n\nclass TestMongoDatabaseClient:\n def test_find_one(self, test_client: MongoDatabaseClient):\n document = {"_id": "81549300", "name": "hello"}\n\n test_client.collection.insert_one(document)\n assert test_client.find_one({"_id": document["_id"]}) == document\n assert test_client.find_one({"name": document["name"]}) == document\n assert test_client.find_one({"_id": document["_id"], "name": document["name"]}) == document\n assert test_client.find_one({"_id": "unknown"}) is None\n\n def test_create(self, test_client: MongoDatabaseClient):\n document = {"_id": "987321", "name": "alberto"}\n assert test_client.collection.count_documents({}) == 0\n result = test_client.create(document)\n assert test_client.collection.count_documents({}) == 1\n assert result == document\n # try to create entry with already existing id:\n with pytest.raises(ValidationException):\n test_client.create(document)\n\n def test_get(self, test_client: MongoDatabaseClient):\n document = {"_id": "81549300", "name": "hello"}\n test_client.collection.insert_one(document)\n assert test_client.get(document["_id"]) == document\n with pytest.raises(NotFoundException):\n test_client.get("unknown")\n\n def test_find(self, test_client: MongoDatabaseClient):\n documents = [\n {"_id": "81549300", "name": "hello"},\n {"_id": "1a2b", "name": "pingvin"},\n {"_id": "987321", "name": "alberto"},\n {"_id": "987456", "name": "alberto"},\n ]\n test_client.collection.insert_many(documents)\n assert list(test_client.find({})) == documents\n assert list(test_client.find({"name": "alberto"})) == [\n documents[2],\n documents[3],\n ]\n\n def test_list(self, test_client: MongoDatabaseClient):\n documents = [\n {"_id": "81549300", "name": "hello"},\n {"_id": "1a2b", "name": "pingvin"},\n {"_id": "987321", "name": "alberto"},\n {"_id": "987456", "name": "alberto"},\n ]\n test_client.collection.insert_many(documents)\n assert test_client.list_collection() == documents\n\n def test_update(self, test_client: MongoDatabaseClient):\n document = {"_id": "987321", "name": "alberto"}\n test_client.collection.insert_one(document)\n instance = document\n instance_id = instance["_id"]\n instance["name"] = "Francois"\n assert test_client.find_one({"_id": instance_id}) != instance["name"]\n result = test_client.update(instance_id, instance)\n assert result["name"] == instance["name"]\n assert test_client.find_one({"_id": instance_id}) == instance\n # update with non-existing id\n entries = list(test_client.find({}))\n with pytest.raises(NotFoundException):\n assert test_client.update("instance_id", instance)\n assert list(test_client.find({})) == entries\n\n def test_delete(self, test_client: MongoDatabaseClient):\n document = {"_id": "987321", "name": "alberto"}\n test_client.collection.insert_one(document)\n test_client.delete(document["_id"])\n assert test_client.collection.count_documents({}) == 0\n assert test_client.find_one({"_id": document["_id"]}) is None\n # try to delete the same entry again\n test_client.delete(document["_id"])\n assert test_client.collection.count_documents({}) == 0\n\n def test_delete_collection(self, test_client: MongoDatabaseClient):\n documents = [\n {"_id": "81549300", "name": "hello"},\n {"_id": "1a2b", "name": "pingvin"},\n {"_id": "987321", "name": "alberto"},\n {"_id": "987456", "name": "alberto"},\n ]\n test_client.collection.insert_many(documents)\n # add second collection to TestDB:\n test_client.database.create_collection("peppers")\n active_collections = test_client.database.list_collection_names()\n number_of_entries_in_original_collection = test_client.collection.count_documents({})\n assert number_of_entries_in_original_collection > 0\n assert len(active_collections) == 2\n test_client.delete_collection()\n assert test_client.database.list_collection_names() == ["peppers"]\n assert test_client.collection.count_documents({}) == 0\n\n def test_create_in_empty_database(self, test_client: MongoDatabaseClient):\n document = {"_id": "1a2b", "name": "pingvin"}\n assert test_client.collection.count_documents({}) == 0\n result = test_client.create(document)\n assert test_client.collection.count_documents({}) == 1\n assert result == document\n\n def test_wipe_db(self, test_client: MongoDatabaseClient):\n documents = [\n {"_id": "81549300", "name": "hello"},\n {"_id": "1a2b", "name": "pingvin"},\n {"_id": "987321", "name": "alberto"},\n {"_id": "987456", "name": "alberto"},\n ]\n test_client.collection.insert_many(documents)\n original_database = test_client.database.client.list_database_names()[0]\n collections_in_original_db = test_client.database.client[original_database].list_collection_names()\n # add admin database (admin collection should not be wiped)\n test_client.database.client["admin"].create_collection("vips")\n active_dbs = test_client.database.client.list_database_names()\n collections_in_admin_db = test_client.database.client["admin"].list_collection_names()\n assert len(active_dbs) == 2\n assert len(collections_in_original_db) == 1\n assert len(collections_in_admin_db) == 1\n test_client.wipe_db()\n assert test_client.database.client.list_database_names() == ["admin"]\n assert test_client.database[collections_in_original_db[0]].count_documents({}) == 0\n'))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/41b8e814.b9683f34.js b/assets/js/41b8e814.b9683f34.js new file mode 100644 index 00000000..a3e687f6 --- /dev/null +++ b/assets/js/41b8e814.b9683f34.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3],{5162:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(7294),s=n(6010);const l="tabItem_Ymn6";function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,s.Z)(l,i),hidden:n},t)}},5488:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(7462),s=n(7294),l=n(6010),i=n(2389),r=n(7392),o=n(7094),u=n(2466);const d="tabList__CuJ",c="tabItem_LNqP";function p(e){var t;const{lazy:n,block:i,defaultValue:p,values:m,groupId:g,className:b}=e,v=s.Children.map(e.children,(e=>{if((0,s.isValidElement)(e)&&"value"in e.props)return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})),h=m??v.map((e=>{let{props:{value:t,label:n,attributes:a}}=e;return{value:t,label:n,attributes:a}})),k=(0,r.l)(h,((e,t)=>e.value===t.value));if(k.length>0)throw new Error(`Docusaurus error: Duplicate values "${k.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`);const f=null===p?p:p??(null==(t=v.find((e=>e.props.default)))?void 0:t.props.value)??v[0].props.value;if(null!==f&&!h.some((e=>e.value===f)))throw new Error(`Docusaurus error: The has a defaultValue "${f}" but none of its children has the corresponding value. Available values are: ${h.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);const{tabGroupChoices:T,setTabGroupChoices:y}=(0,o.U)(),[w,N]=(0,s.useState)(f),I=[],{blockElementScrollPositionUntilNextRender:x}=(0,u.o5)();if(null!=g){const e=T[g];null!=e&&e!==w&&h.some((t=>t.value===e))&&N(e)}const Z=e=>{const t=e.currentTarget,n=I.indexOf(t),a=h[n].value;a!==w&&(x(t),N(a),null!=g&&y(g,String(a)))},E=e=>{var t;let n=null;switch(e.key){case"ArrowRight":{const t=I.indexOf(e.currentTarget)+1;n=I[t]??I[0];break}case"ArrowLeft":{const t=I.indexOf(e.currentTarget)-1;n=I[t]??I[I.length-1];break}}null==(t=n)||t.focus()};return s.createElement("div",{className:(0,l.Z)("tabs-container",d)},s.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":i},b)},h.map((e=>{let{value:t,label:n,attributes:i}=e;return s.createElement("li",(0,a.Z)({role:"tab",tabIndex:w===t?0:-1,"aria-selected":w===t,key:t,ref:e=>I.push(e),onKeyDown:E,onFocus:Z,onClick:Z},i,{className:(0,l.Z)("tabs__item",c,null==i?void 0:i.className,{"tabs__item--active":w===t})}),n??t)}))),n?(0,s.cloneElement)(v.filter((e=>e.props.value===w))[0],{className:"margin-top--md"}):s.createElement("div",{className:"margin-top--md"},v.map(((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==w})))))}function m(e){const t=(0,i.Z)();return s.createElement(p,(0,a.Z)({key:String(t)},e))}},8979:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>m,frontMatter:()=>r,metadata:()=>u,toc:()=>c});var a=n(7462),s=(n(7294),n(3905)),l=(n(1839),n(5162)),i=n(5488);const r={},o="Testing",u={unversionedId:"contribute/development-guide/testing",id:"contribute/development-guide/testing",title:"Testing",description:"API",source:"@site/docs/contribute/development-guide/03-testing.md",sourceDirName:"contribute/development-guide",slug:"/contribute/development-guide/testing",permalink:"/template-fastapi-react/docs/contribute/development-guide/testing",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/03-testing.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{},sidebar:"contribute",previous:{title:"Extending the web",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-web/"},next:{title:"Upgrading",permalink:"/template-fastapi-react/docs/contribute/development-guide/upgrading"}},d={},c=[{value:"API",id:"api",level:2},{value:"Unit tests",id:"unit-tests",level:3},{value:"Integration tests",id:"integration-tests",level:3},{value:"Web",id:"web",level:2},{value:"Unit tests",id:"unit-tests-1",level:3}],p={toc:c};function m(e){let{components:t,...n}=e;return(0,s.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"testing"},"Testing"),(0,s.kt)("h2",{id:"api"},"API"),(0,s.kt)("p",null,"The application has two types of API tests: unit tests and integration tests."),(0,s.kt)("h3",{id:"unit-tests"},"Unit tests"),(0,s.kt)("p",null,"You will find unit tests under ",(0,s.kt)("inlineCode",{parentName:"p"},"src/tests/unit"),"."),(0,s.kt)(i.Z,{groupId:"api-testing",mdxType:"Tabs"},(0,s.kt)(l.Z,{value:"using-docker",label:"Using docker",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-shell"},"docker compose run --rm api pytest\n"))),(0,s.kt)(l.Z,{value:"without-using-docker",label:"Without using docker",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-shell"},"cd api/\npytest\n")))),(0,s.kt)("p",null,"As a general rule, unit tests should not have any external dependencies - especially on the file system."),(0,s.kt)("h3",{id:"integration-tests"},"Integration tests"),(0,s.kt)("p",null,"The integrations tests can be found under ",(0,s.kt)("inlineCode",{parentName:"p"},"src/tests/integration"),"."),(0,s.kt)("p",null,"To run integration tests add ",(0,s.kt)("inlineCode",{parentName:"p"},"--integration")," as argument for pytest."),(0,s.kt)("p",null,"These tests depends on mongodb and that it's running."),(0,s.kt)("h2",{id:"web"},"Web"),(0,s.kt)("h3",{id:"unit-tests-1"},"Unit tests"),(0,s.kt)(i.Z,{groupId:"web-testing",mdxType:"Tabs"},(0,s.kt)(l.Z,{value:"using-docker",label:"Using docker",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-shell"},"docker compose run --rm web yarn test\n"))),(0,s.kt)(l.Z,{value:"without-using-docker",label:"Without using docker",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-shell"},"cd web/\nyarn test\n")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/428320b6.b0e6cab4.js b/assets/js/428320b6.b0e6cab4.js new file mode 100644 index 00000000..332f63dc --- /dev/null +++ b/assets/js/428320b6.b0e6cab4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[193],{1425:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>n,contentTitle:()=>l,default:()=>d,frontMatter:()=>p,metadata:()=>o,toc:()=>f});var i=a(7462),r=(a(7294),a(3905));a(1839);const c={toc:[{value:"1.5.0 (2024-09-04)",id:"150-2024-09-04",level:2},{value:"Features",id:"features",level:3},{value:"Bug Fixes",id:"bug-fixes",level:3},{value:"1.4.0 (2023-03-01)",id:"140-2023-03-01",level:2},{value:"Features",id:"features-1",level:3},{value:"Bug Fixes",id:"bug-fixes-1",level:3},{value:"Tests",id:"tests",level:3},{value:"Build System",id:"build-system",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores",level:3},{value:"Code Refactoring",id:"code-refactoring",level:3},{value:"Continuous Integration",id:"continuous-integration",level:3},{value:"Documentation",id:"documentation",level:3},{value:"1.3.0 (2022-11-11)",id:"130-2022-11-11",level:2},{value:"Features",id:"features-2",level:3},{value:"Bug Fixes",id:"bug-fixes-2",level:3},{value:"1.2.1 (2022-11-09)",id:"121-2022-11-09",level:2},{value:"Bug Fixes",id:"bug-fixes-3",level:3},{value:"1.2.0 (2022-11-09)",id:"120-2022-11-09",level:2},{value:"Features",id:"features-3",level:3},{value:"Bug Fixes",id:"bug-fixes-4",level:3},{value:"1.1.1 (2022-11-04)",id:"111-2022-11-04",level:2},{value:"Bug Fixes",id:"bug-fixes-5",level:3},{value:"1.1.0 (2022-11-04)",id:"110-2022-11-04",level:2},{value:"Features",id:"features-4",level:3},{value:"Bug Fixes",id:"bug-fixes-6",level:3},{value:"1.0.0 (2022-09-07)",id:"100-2022-09-07",level:2},{value:"Features",id:"features-5",level:3},{value:"Bug Fixes",id:"bug-fixes-7",level:3}]};function m(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,i.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Warning: This is the development version."),(0,r.kt)("h1",{id:"changelog"},"Changelog"),(0,r.kt)("p",null,"All notable changes to this project will be documented in this file. See ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/conventional-changelog/standard-version"},"standard-version")," for commit guidelines."),(0,r.kt)("h2",{id:"150-2024-09-04"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/boilerplate-clean-architecture/compare/v1.4.0...v1.5.0"},"1.5.0")," (2024-09-04)"),(0,r.kt)("h3",{id:"features"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add Popover component (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/c8964bd89fee3f240357d63453051b132e1ecdfa"},"c8964bd"),")"),(0,r.kt)("li",{parentName:"ul"},"add react context to handle todo state (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/510e4704f67c9094176514c2a3ed6efc39997037"},"510e470"),")"),(0,r.kt)("li",{parentName:"ul"},"add reusable IconButton component (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/f933e30f34a1bdb0e3d56d73b470f6816b532973"},"f933e30"),")"),(0,r.kt)("li",{parentName:"ul"},"replace exception handling (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/35ae0ef0bbbaf06ca9a4bf68618ca29718b5d00a"},"35ae0ef"),")"),(0,r.kt)("li",{parentName:"ul"},"replace prettier and eslint with biome (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/afe2cb978ef4260d88835fc5f62db69164aa2fb2"},"afe2cb9"),")")),(0,r.kt)("h3",{id:"bug-fixes"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"docs reference out of date (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/bd4cc8d3d2a3b580c0df8bffa7378fc0a2c6413c"},"bd4cc8d"),")"),(0,r.kt)("li",{parentName:"ul"},"extras typing is not always dict","[str,str]"," (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/7ba069436255dc88372fd9b73db854477e7bf6f8"},"7ba0694"),")"),(0,r.kt)("li",{parentName:"ul"},"make authentication work again (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/3e8da0fd68a6619ca32466e934bb915652cce85f"},"3e8da0f"),")"),(0,r.kt)("li",{parentName:"ul"},"mypy error (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/66303aa35f571e8588c3342bdb25cb56566085a2"},"66303aa"),")"),(0,r.kt)("li",{parentName:"ul"},"ran api again (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/afa8158c9815352de7195d6d988302a6d7d87ffb"},"afa8158"),")"),(0,r.kt)("li",{parentName:"ul"},"ran generator (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/19ff51bf4bc99751af93a13a36ea8f3990e6c64c"},"19ff51b"),")"),(0,r.kt)("li",{parentName:"ul"},"replace gunicorn with horizontal scaling (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/a8baa0f9ac2f246b17f55aada11845ddcaee15cc"},"a8baa0f"),")"),(0,r.kt)("li",{parentName:"ul"},"The template no longer use the node image in production (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/f9b68d9ec28482a71dd721e0ff1a42c3b6565ed5"},"f9b68d9"),")"),(0,r.kt)("li",{parentName:"ul"},"update old references (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/5152a1ff419336428b69c7dc7212b1d422fb93bf"},"5152a1f"),")"),(0,r.kt)("li",{parentName:"ul"},"update to match new parameters for get pydantic json schema (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/c6b14a8da9639cd2b5fe04b25b52310aa1017664"},"c6b14a8"),")")),(0,r.kt)("h2",{id:"140-2023-03-01"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/v1.3.0...v1.4.0"},"1.4.0")," (2023-03-01)"),(0,r.kt)("h3",{id:"features-1"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Add info popover with version (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/28aa51377592b7c5bb9b59d245ab275b47a52653"},"28aa513"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/154"},"#154"))),(0,r.kt)("h3",{id:"bug-fixes-1"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add error handling of version file fetch (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a4f68897e446ebb4ebd91f58110bfa403df53fc9"},"a4f6889"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," handle lists in create_response (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/333f7d4afbac95609ae15b05b3a8f1d978ee1107"},"333f7d4"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," make health-check return PlainTextResponse (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/12d51697ee78edbbe519c874b4fddfb8f0786718"},"12d5169"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," remove empty default pydantic field in models (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0424282f7dee8662c6d0b8faa01f78bdaced3a3f"},"0424282"),")"),(0,r.kt)("li",{parentName:"ul"},"remove /api as root path. (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/208ceb98dcf269e18b43d6ffda04dd265bfe868c"},"208ceb9"),")"),(0,r.kt)("li",{parentName:"ul"},"replace deprecated output definition (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c53b003498afb8f2568815a4c3da56f8d15542af"},"c53b003"),")")),(0,r.kt)("h3",{id:"tests"},"Tests"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Upgrade pre-commits (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bd8f1106cde2ec215ea9a519a4afd5daa460fb96"},"bd8f110"),")")),(0,r.kt)("h3",{id:"build-system"},"Build System"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add typescript plugin (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/83ade0cdb86d15bbe072e036fbe0ac1b106f8015"},"83ade0c"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ci/cd:")," update flake8 repo location (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e6953ad3ca280975c9589939a1e728a73fbfd418"},"e6953ad"),")"),(0,r.kt)("li",{parentName:"ul"},"enable scripts to build necessary packages (YN0007) (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f1cf2c3f7d6fc7190535c8abf97c55bfa6839e56"},"f1cf2c3"),")"),(0,r.kt)("li",{parentName:"ul"},"missing peer dependencies (YN0002) (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9e8981d581c2509039beda4a7a34980c574bf179"},"9e8981d"),")"),(0,r.kt)("li",{parentName:"ul"},"set yarn version (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/afb5834883d6d1f01026d602fb434db38443c8b0"},"afb5834"),")")),(0,r.kt)("h3",{id:"miscellaneous-chores"},"Miscellaneous Chores"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Add yarn upgrade-interactive (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/91d998f317d8b697a75a920108a94e5479b13f78"},"91d998f"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," return Pydantic model instead of dict (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/427a9633d31cc3298d463fc4f1a225bd36f76867"},"427a963"),")"),(0,r.kt)("li",{parentName:"ul"},"ignore diffs on yarn plugins (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/78017e5216f863b19842e09574bf035db78f88de"},"78017e5"),")"),(0,r.kt)("li",{parentName:"ul"},"remove empty catch (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0264cb5960dfee0cfb36dcf1e9ebbd099ddac51e"},"0264cb5"),")"),(0,r.kt)("li",{parentName:"ul"},"remove redundant conditional (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/925d5b4a5391b39acfc6e639ee9a47a676697ebb"},"925d5b4"),")"),(0,r.kt)("li",{parentName:"ul"},"type CommitInfo (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2179e13f256cba46959c101f76593f262daee5d4"},"2179e13"),")"),(0,r.kt)("li",{parentName:"ul"},"Update all web packages (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a193af56c4e0ed68be9b7ad05d7a5747130c0321"},"a193af5"),")"),(0,r.kt)("li",{parentName:"ul"},"update dependencies (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fb2cf508f3f30f12bf39f23a9a630d92e12f47b0"},"fb2cf50"),")"),(0,r.kt)("li",{parentName:"ul"},"update sdks (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/385a55eefab23b695e2a4f1f12b1ca97e93a9820"},"385a55e"),")"),(0,r.kt)("li",{parentName:"ul"},"upgrade versions (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bc9f6a3dadb920167419e8b66bd79a396c09cad9"},"bc9f6a3"),")"),(0,r.kt)("li",{parentName:"ul"},"upgrade versions (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/041f78e9c0cdb1be8fd83099d33b7c1e36e3633a"},"041f78e"),")")),(0,r.kt)("h3",{id:"code-refactoring"},"Code Refactoring"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," replace response_class with return type annotations (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b1fa3bd6b342ba89e5d2237721573a83cfd503fe"},"b1fa3bd"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ci:")," extract ghcr login into separate step (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0d90fe00438ad9c995198cba8e268c8268af1e4a"},"0d90fe0"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ci:")," remove crazy-max external action (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b41990d92c19d2a661900a208a60d604a5ab470c"},"b41990d"),")"),(0,r.kt)("li",{parentName:"ul"},"create empty yarn.lock (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/39050e72af50debd95380590fe4ee803a5995589"},"39050e7"),")"),(0,r.kt)("li",{parentName:"ul"},"separate responsibilities by moving useEffect to a custom hook (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cc33a5d1f856aff8e529c4c3df43d326fb5a8a90"},"cc33a5d"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"workflow:")," Fix linting errors (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8ea9f69fbb5919568ba99fed659be77e18647d48"},"8ea9f69"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"workflow:")," rename and restructure workflows (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f08fffaf7ffaf46503debfc4e4bd60320592a84e"},"f08fffa"),")")),(0,r.kt)("h3",{id:"continuous-integration"},"Continuous Integration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Add rollback workflow (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b1cca70e53c7080427979b3efe0ee30ccffafdd0"},"b1cca70"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/153"},"#153")),(0,r.kt)("li",{parentName:"ul"},"allow publishing multiple tags at once (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/4c5d8677395054254551757f871570dad1695933"},"4c5d867"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/153"},"#153")),(0,r.kt)("li",{parentName:"ul"},"bump pre-commit hooks (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9a0cea7d6a03aaa99101135f626b948c87dd6882"},"9a0cea7"),")"),(0,r.kt)("li",{parentName:"ul"},"change oauth redurect url to radix playground (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/655c55f5027baea255d29ea881df0030695da5aa"},"655c55f"),")"),(0,r.kt)("li",{parentName:"ul"},"Change version logging format on build (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/49ca8939a6dd8fd753ba171653a5977a869a0249"},"49ca893"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/154"},"#154")),(0,r.kt)("li",{parentName:"ul"},"correct permissions (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6d9d563a3cf3db335c1d34b3630ac64212881186"},"6d9d563"),")"),(0,r.kt)("li",{parentName:"ul"},"Fix bug in publish docs (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a696a33a9e451f3d261e2b07538aebac418ac3d3"},"a696a33"),")"),(0,r.kt)("li",{parentName:"ul"},"Include all commit types in changelog (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/73cfaaadf916c7e15accb347183f89e50651f279"},"73cfaaa"),")"),(0,r.kt)("li",{parentName:"ul"},"login as the service principal to request an access token (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fabe3b469ce49f9c64ff3e0781d6564c78f709f5"},"fabe3b4"),")"),(0,r.kt)("li",{parentName:"ul"},"pass tag name to publish-image workflow (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/dcedc16f6ab2d16d74f4c41ffaf4100f638b88dc"},"dcedc16"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/153"},"#153")),(0,r.kt)("li",{parentName:"ul"},"remove secret as input to reusable workflow (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1ec6cbb2e5360de99d99416739093a02a38c5ba7"},"1ec6cbb"),")"),(0,r.kt)("li",{parentName:"ul"},"specify playground context (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/142bc139c4cd4b7e145a00dde2161a502afa9363"},"142bc13"),")")),(0,r.kt)("h3",{id:"documentation"},"Documentation"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add what is fastapi (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bbec23b85d2b0c1fadfd4e4ea6e3df7e63683e78"},"bbec23b"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ci:")," add comment to azure login (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f6b9c962d23a7eb2832e14b1d37d9e8b14419f5d"},"f6b9c96"),")"),(0,r.kt)("li",{parentName:"ul"},"rewrite 01-setup Yarn PnP in VSCode (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/df4c7d0dadbbccaafa6fa5c13d0bd3b16faf5243"},"df4c7d0"),")"),(0,r.kt)("li",{parentName:"ul"},"update link to radix playground (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6c932c3c48739bce3cc21e24a416405a64e5cc31"},"6c932c3"),")")),(0,r.kt)("h2",{id:"130-2022-11-11"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/v1.2.1...v1.3.0"},"1.3.0")," (2022-11-11)"),(0,r.kt)("h3",{id:"features-2"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"allow each user to have their own todos (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9456ab84f5f5e0b804bd0011037ee72d7da49fbb"},"9456ab8"),")")),(0,r.kt)("h3",{id:"bug-fixes-2"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add missing dependency without causing infinite loop of rerendering (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8f5c01d5141c4dbd4ac9b99ebc39ae10f378147f"},"8f5c01d"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," raise MissingPrivilegeException when relevant (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0c55af393a4ffc189a068c821545261eb10ef7d4"},"0c55af3"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," raise MissingPrivilegeException when relevant (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/613cc4257699ddb1c2a772b54f28ccec84f2778b"},"613cc42"),")"),(0,r.kt)("li",{parentName:"ul"},"make todo title required, not optional (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bc8dab62079ded3e87c1113e81f1cd9911ad1a65"},"bc8dab6"),")"),(0,r.kt)("li",{parentName:"ul"},"only allow users to delete their own todos (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1cf1e7a8eefac27552dcdc9df0a30cf59c042eab"},"1cf1e7a"),")"),(0,r.kt)("li",{parentName:"ul"},"test suite (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/31da3f7e720d0838e59e280aa4d873b44e24cecb"},"31da3f7"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"tests:")," fix up integration tests with per-user todos (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b7cc0caa51535020bb329c7c21cde4b458baa81c"},"b7cc0ca"),")")),(0,r.kt)("h2",{id:"121-2022-11-09"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/v1.2.0...v1.2.1"},"1.2.1")," (2022-11-09)"),(0,r.kt)("h3",{id:"bug-fixes-3"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," adding todo item now clears input. (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/82e6f6baee06ccbd50c4d59fe7a9a97a4b1df094"},"82e6f6b"),")")),(0,r.kt)("h2",{id:"120-2022-11-09"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/v1.1.1...v1.2.0"},"1.2.0")," (2022-11-09)"),(0,r.kt)("h3",{id:"features-3"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"expand and visualize auth states (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/51c9870bc657d586464780c664aeb6edb49b5ba2"},"51c9870"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," clear input on add-todo (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d61adc16ea35a25b2d556b61b9d1cf710de41e8e"},"d61adc1"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," visualize loading state better (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6a6ab81bec55bf79aeda5a07e8eff5cdd84b4ab5"},"6a6ab81"),")")),(0,r.kt)("h3",{id:"bug-fixes-4"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"make useTodos simpler to use (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e8f0a1866c594ca0a526bac3ae3e5a1f8551a005"},"e8f0a18"),")")),(0,r.kt)("h2",{id:"111-2022-11-04"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/v1.1.0...v1.1.1"},"1.1.1")," (2022-11-04)"),(0,r.kt)("h3",{id:"bug-fixes-5"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"resolve PR feedback (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bd3debe820f27ebf7d892ecbda77720fc66be06b"},"bd3debe"),")")),(0,r.kt)("h2",{id:"110-2022-11-04"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/v1.0.0...v1.1.0"},"1.1.0")," (2022-11-04)"),(0,r.kt)("h3",{id:"features-4"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"standardized ErrorResponse model (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c09e4dccf5abd62fa05e9b1c0a577ea72d0129c4"},"c09e4dc"),")")),(0,r.kt)("h3",{id:"bug-fixes-6"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add types to fixtures (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0528e5beb9bec905cedee1db2af3b2a5248fe85d"},"0528e5b"),")"),(0,r.kt)("li",{parentName:"ul"},"delete non existing item should return 404 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/43414160eef1bee7ff2ea44c7c9f99e041ccc977"},"4341416"),")")),(0,r.kt)("h2",{id:"100-2022-09-07"},"1.0.0 (2022-09-07)"),(0,r.kt)("h3",{id:"features-5"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add auth (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a201f138ee5a02218b5e4b2b08b0f00f88bb5dd3"},"a201f13"),")"),(0,r.kt)("li",{parentName:"ul"},"add axios (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/88448c2d52007d68651a26d46c6672369172698a"},"88448c2"),")"),(0,r.kt)("li",{parentName:"ul"},"add equinor design system (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b96d4dae0ec65f4938d862bc8bbf079cb5950ae4"},"b96d4da"),")"),(0,r.kt)("li",{parentName:"ul"},"add equinor typeface (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/53a742398782a9452bc61127d62f408a840dfb5a"},"53a7423"),")"),(0,r.kt)("li",{parentName:"ul"},"add eslint to pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/20c872da056b89e038bd87c79e2fcd40bab85cf9"},"20c872d"),")"),(0,r.kt)("li",{parentName:"ul"},"Add extra checks to pre-commit and run safety in venv (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/27a6cbe7bea4843a70947fdcf5ba73f1dd5af871"},"27a6cbe"),")"),(0,r.kt)("li",{parentName:"ul"},"add flake8, safety and pytests to pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1917997411b7a1f1844c3463388005576d8acc77"},"1917997"),")"),(0,r.kt)("li",{parentName:"ul"},"add mypy type checking to pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/437cedd17cb86165448526fd8011730f4dbe03b6"},"437cedd"),")"),(0,r.kt)("li",{parentName:"ul"},"add prettier (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b1ce63a700471c54b75e5f58c35d0d3ccabdf0d5"},"b1ce63a"),")"),(0,r.kt)("li",{parentName:"ul"},"autogenerate release changelog (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e463ae2e2694358936802e9fbf6dc3a7cfca846d"},"e463ae2"),")"),(0,r.kt)("li",{parentName:"ul"},"build and push images in ci (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/477ad8564bc92105b990715cc0bebeb5c7aff4d8"},"477ad85"),")"),(0,r.kt)("li",{parentName:"ul"},"create-react-app with typescript and equinor icons (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2cfa523e2e1df8ebe0fa3b003fc6936d1bebaa13"},"2cfa523"),")"),(0,r.kt)("li",{parentName:"ul"},"init todo example (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8beaf084352f16c8715ebe6f77b40d30450d2e04"},"8beaf08"),")"),(0,r.kt)("li",{parentName:"ul"},"official nginx image running unprivileged (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fab0c1445920ae5c0cb0eb05308b6a223aed3de8"},"fab0c14"),")"),(0,r.kt)("li",{parentName:"ul"},"pre-commit in CI from pre-commit-config.yaml (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/5d806b5bd1ceda039670dd3b30ef19de49519a16"},"5d806b5"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"pre-commit:")," Add autoflake to pre-commits (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8d97b34f7eeb90b00c0c5d2410b820af259ce7b1"},"8d97b34"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/31"},"#31")),(0,r.kt)("li",{parentName:"ul"},"response decorator takes Response type as parameter (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9a7f2287f9bac7e0f68f916c37b4273dc8b95d9b"},"9a7f228"),")"),(0,r.kt)("li",{parentName:"ul"},"reusable gh actions workflows (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d557ebc8438a4b28d83d2f40d8a7aa2991db1197"},"d557ebc"),")"),(0,r.kt)("li",{parentName:"ul"},"show changelog in documentation (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6da9b86770ffca6431f16b945680a87637268497"},"6da9b86"),")"),(0,r.kt)("li",{parentName:"ul"},"tutorial on authentication (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fd789c0d7bd3dda1e1ce0ee78ee9c73c4670fe41"},"fd789c0"),")")),(0,r.kt)("h3",{id:"bug-fixes-7"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add missing decorators (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/54fd2f8a3826d2a5bc5bbc7419cbdd83de4811f1"},"54fd2f8"),")"),(0,r.kt)("li",{parentName:"ul"},"add required additional dependencies to eslint pre-commit env (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cca8509bf7a4edc5c38ad5fe3a7b0812fdb95040"},"cca8509"),")"),(0,r.kt)("li",{parentName:"ul"},"add venv (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d682b0817d735547f3a3cd7391d942983cbf666c"},"d682b08"),")"),(0,r.kt)("li",{parentName:"ul"},"cast variable that cannot be undefined to boolean (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/372f781d805d25f2e7aaa284d3b70622989e9136"},"372f781"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"dev:")," env_file in docker-compose.override.yml (PR ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/39"},"#39"),") (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2aa80bdfc211f44d624f1cdad4f8b0844164c4bf"},"2aa80bd"),")"),(0,r.kt)("li",{parentName:"ul"},"disable pull (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/de2d04530a511a798fb757e85cb07872f0dfb129"},"de2d045"),")"),(0,r.kt)("li",{parentName:"ul"},"duplicated pre-commit hook (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a21f5a69ba1ea3a10371f48071ef2de8b3d56448"},"a21f5a6"),")"),(0,r.kt)("li",{parentName:"ul"},"fix mypy errors (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d9543c187859de7fad59f91b79eaa4f63a56a1c6"},"d9543c1"),")"),(0,r.kt)("li",{parentName:"ul"},"fix pytest_plugin import error (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b5218196028c904e6a51d9a0971d7637264c87a2"},"b521819"),")"),(0,r.kt)("li",{parentName:"ul"},"lock cryptography dependency since a bad new release. Set authentication scheme to allow for no tokens. Exclude some file from pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ea6a9314482ca75d8d79c999959460b17ceec754"},"ea6a931"),")"),(0,r.kt)("li",{parentName:"ul"},"move Response decorator to controllers (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bd36b4a316f6a2c1216584235eb5dd462f6d0707"},"bd36b4a"),")"),(0,r.kt)("li",{parentName:"ul"},"only run safety hook once (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bc33372bd57d7b8710cd7460f1c18c6b55c38634"},"bc33372"),")"),(0,r.kt)("li",{parentName:"ul"},"poetry command (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ccbb2e10845f9cf3215e5e95fd07f21c3b108249"},"ccbb2e1"),")"),(0,r.kt)("li",{parentName:"ul"},"pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/5192d0e79e433cf925d0569a237a101f77b68c5b"},"5192d0e"),")"),(0,r.kt)("li",{parentName:"ul"},"python-version (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a9341092771e81aced0ed4481eb582785dd08113"},"a934109"),")"),(0,r.kt)("li",{parentName:"ul"},"remove encryption.py (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a500444b936bcc99bdcd73ebdc6eb9eeb5de2ac3"},"a500444"),")"),(0,r.kt)("li",{parentName:"ul"},"set correct base path for docs (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0dda0b23b94155f1eb6cd194d31af1f9265ecd2b"},"0dda0b2"),")"),(0,r.kt)("li",{parentName:"ul"},"set correct type on todo local state (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2a4020ce9f84affb1725f4e4b476dc1c20b67b0e"},"2a4020c"),")"),(0,r.kt)("li",{parentName:"ul"},"turn off eslint rules that are unnecessary or might conflict with prettier (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d6beaf7426821d5bb5efd68fe6407d13ee1d38d5"},"d6beaf7"),")"),(0,r.kt)("li",{parentName:"ul"},"typo (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fb557b8adb56fc0d5aa430a1d505d1066be1ed13"},"fb557b8"),")"),(0,r.kt)("li",{parentName:"ul"},"use const on variable that is never reassigned (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9f7c54304385c49123a3d436b5cce66997ab1e62"},"9f7c543"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," correct base path (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a3872d5c67f1764c28d7450e9bf4c350cc0e87b6"},"a3872d5"),")"),(0,r.kt)("li",{parentName:"ul"},"yarn build again (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/dfc48fda537d152974a9610e3263245c69346768"},"dfc48fd"),")")))}m.isMDXComponent=!0;const p={},l="Changelog",o={unversionedId:"changelog/changelog",id:"changelog/changelog",title:"Changelog",description:"1.5.0 (2024-07-22)",source:"@site/docs/changelog/changelog.md",sourceDirName:"changelog",slug:"/changelog/",permalink:"/template-fastapi-react/docs/changelog/",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/changelog/changelog.md",tags:[],version:"current",frontMatter:{}},n={},f=[{value:"1.5.0 (2024-07-22)",id:"150-2024-07-22",level:2},{value:"Features",id:"features",level:3},{value:"Bug Fixes",id:"bug-fixes",level:3},{value:"Documentation",id:"documentation",level:3},{value:"Styles",id:"styles",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores",level:3},{value:"Code Refactoring",id:"code-refactoring",level:3},{value:"Tests",id:"tests",level:3},{value:"Build System",id:"build-system",level:3},{value:"Continuous Integration",id:"continuous-integration",level:3},{value:"slug: "/changelog"",id:"slug-changelog",level:2}],s={toc:f};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,i.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"changelog"},"Changelog"),(0,r.kt)("h2",{id:"150-2024-07-22"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/template-fastapi-react-v1.4.0...template-fastapi-react-v1.5.0"},"1.5.0")," (2024-07-22)"),(0,r.kt)("h3",{id:"features"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add auth (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a201f138ee5a02218b5e4b2b08b0f00f88bb5dd3"},"a201f13"),")"),(0,r.kt)("li",{parentName:"ul"},"add axios (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/88448c2d52007d68651a26d46c6672369172698a"},"88448c2"),")"),(0,r.kt)("li",{parentName:"ul"},"add equinor design system (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b96d4dae0ec65f4938d862bc8bbf079cb5950ae4"},"b96d4da"),")"),(0,r.kt)("li",{parentName:"ul"},"add equinor typeface (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/53a742398782a9452bc61127d62f408a840dfb5a"},"53a7423"),")"),(0,r.kt)("li",{parentName:"ul"},"add eslint to pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/20c872da056b89e038bd87c79e2fcd40bab85cf9"},"20c872d"),")"),(0,r.kt)("li",{parentName:"ul"},"Add extra checks to pre-commit and run safety in venv (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/27a6cbe7bea4843a70947fdcf5ba73f1dd5af871"},"27a6cbe"),")"),(0,r.kt)("li",{parentName:"ul"},"add flake8, safety and pytests to pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1917997411b7a1f1844c3463388005576d8acc77"},"1917997"),")"),(0,r.kt)("li",{parentName:"ul"},"Add info popover with version (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/28aa51377592b7c5bb9b59d245ab275b47a52653"},"28aa513"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/154"},"#154")),(0,r.kt)("li",{parentName:"ul"},"add mypy type checking to pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/437cedd17cb86165448526fd8011730f4dbe03b6"},"437cedd"),")"),(0,r.kt)("li",{parentName:"ul"},"add OpenCensusRequestLoggingMiddleware middleware (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b9c035bf3b815eba0b63dafcf445d7dd13990cf6"},"b9c035b"),")"),(0,r.kt)("li",{parentName:"ul"},"add Popover component (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c8964bd89fee3f240357d63453051b132e1ecdfa"},"c8964bd"),")"),(0,r.kt)("li",{parentName:"ul"},"add prettier (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b1ce63a700471c54b75e5f58c35d0d3ccabdf0d5"},"b1ce63a"),")"),(0,r.kt)("li",{parentName:"ul"},"add react context to handle todo state (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/510e4704f67c9094176514c2a3ed6efc39997037"},"510e470"),")"),(0,r.kt)("li",{parentName:"ul"},"add reusable IconButton component (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f933e30f34a1bdb0e3d56d73b470f6816b532973"},"f933e30"),")"),(0,r.kt)("li",{parentName:"ul"},"allow each user to have their own todos (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9456ab84f5f5e0b804bd0011037ee72d7da49fbb"},"9456ab8"),")"),(0,r.kt)("li",{parentName:"ul"},"autogenerate release changelog (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e463ae2e2694358936802e9fbf6dc3a7cfca846d"},"e463ae2"),")"),(0,r.kt)("li",{parentName:"ul"},"build and push images in ci (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/477ad8564bc92105b990715cc0bebeb5c7aff4d8"},"477ad85"),")"),(0,r.kt)("li",{parentName:"ul"},"create-react-app with typescript and equinor icons (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2cfa523e2e1df8ebe0fa3b003fc6936d1bebaa13"},"2cfa523"),")"),(0,r.kt)("li",{parentName:"ul"},"expand and visualize auth states (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/51c9870bc657d586464780c664aeb6edb49b5ba2"},"51c9870"),")"),(0,r.kt)("li",{parentName:"ul"},"init todo example (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8beaf084352f16c8715ebe6f77b40d30450d2e04"},"8beaf08"),")"),(0,r.kt)("li",{parentName:"ul"},"official nginx image running unprivileged (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fab0c1445920ae5c0cb0eb05308b6a223aed3de8"},"fab0c14"),")"),(0,r.kt)("li",{parentName:"ul"},"pre-commit in CI from pre-commit-config.yaml (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/5d806b5bd1ceda039670dd3b30ef19de49519a16"},"5d806b5"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"pre-commit:")," Add autoflake to pre-commits (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8d97b34f7eeb90b00c0c5d2410b820af259ce7b1"},"8d97b34"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/31"},"#31")),(0,r.kt)("li",{parentName:"ul"},"replace exception handling (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/35ae0ef0bbbaf06ca9a4bf68618ca29718b5d00a"},"35ae0ef"),")"),(0,r.kt)("li",{parentName:"ul"},"replace prettier and eslint with biome (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/afe2cb978ef4260d88835fc5f62db69164aa2fb2"},"afe2cb9"),")"),(0,r.kt)("li",{parentName:"ul"},"response decorator takes Response type as parameter (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9a7f2287f9bac7e0f68f916c37b4273dc8b95d9b"},"9a7f228"),")"),(0,r.kt)("li",{parentName:"ul"},"reusable gh actions workflows (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d557ebc8438a4b28d83d2f40d8a7aa2991db1197"},"d557ebc"),")"),(0,r.kt)("li",{parentName:"ul"},"show changelog in documentation (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6da9b86770ffca6431f16b945680a87637268497"},"6da9b86"),")"),(0,r.kt)("li",{parentName:"ul"},"standardized ErrorResponse model (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c09e4dccf5abd62fa05e9b1c0a577ea72d0129c4"},"c09e4dc"),")"),(0,r.kt)("li",{parentName:"ul"},"tutorial on authentication (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fd789c0d7bd3dda1e1ce0ee78ee9c73c4670fe41"},"fd789c0"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," clear input on add-todo (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d61adc16ea35a25b2d556b61b9d1cf710de41e8e"},"d61adc1"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," visualize loading state better (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6a6ab81bec55bf79aeda5a07e8eff5cdd84b4ab5"},"6a6ab81"),")")),(0,r.kt)("h3",{id:"bug-fixes"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add error handling of version file fetch (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a4f68897e446ebb4ebd91f58110bfa403df53fc9"},"a4f6889"),")"),(0,r.kt)("li",{parentName:"ul"},"add missing decorators (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/54fd2f8a3826d2a5bc5bbc7419cbdd83de4811f1"},"54fd2f8"),")"),(0,r.kt)("li",{parentName:"ul"},"add missing dependency without causing infinite loop of rerendering (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8f5c01d5141c4dbd4ac9b99ebc39ae10f378147f"},"8f5c01d"),")"),(0,r.kt)("li",{parentName:"ul"},"add required additional dependecies to eslint pre-commit env (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cca8509bf7a4edc5c38ad5fe3a7b0812fdb95040"},"cca8509"),")"),(0,r.kt)("li",{parentName:"ul"},"add types to fixtures (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0528e5beb9bec905cedee1db2af3b2a5248fe85d"},"0528e5b"),")"),(0,r.kt)("li",{parentName:"ul"},"add venv (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d682b0817d735547f3a3cd7391d942983cbf666c"},"d682b08"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," handle lists in create_response (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/333f7d4afbac95609ae15b05b3a8f1d978ee1107"},"333f7d4"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," make health-check return PlainTextResponse (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/12d51697ee78edbbe519c874b4fddfb8f0786718"},"12d5169"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," raise MissingPrivilegeException when relevant (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0c55af393a4ffc189a068c821545261eb10ef7d4"},"0c55af3"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," raise MissingPrivilegeException when relevant (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/613cc4257699ddb1c2a772b54f28ccec84f2778b"},"613cc42"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," remove empty default pydantic field in models (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0424282f7dee8662c6d0b8faa01f78bdaced3a3f"},"0424282"),")"),(0,r.kt)("li",{parentName:"ul"},"cast variable that cannot be undefined to boolean (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/372f781d805d25f2e7aaa284d3b70622989e9136"},"372f781"),")"),(0,r.kt)("li",{parentName:"ul"},"delete non existing item should return 404 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/43414160eef1bee7ff2ea44c7c9f99e041ccc977"},"4341416"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"dev:")," env_file in docker-compose.override.yml (PR ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/39"},"#39"),") (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2aa80bdfc211f44d624f1cdad4f8b0844164c4bf"},"2aa80bd"),")"),(0,r.kt)("li",{parentName:"ul"},"disable pull (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/de2d04530a511a798fb757e85cb07872f0dfb129"},"de2d045"),")"),(0,r.kt)("li",{parentName:"ul"},"docs reference out of date (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bd4cc8d3d2a3b580c0df8bffa7378fc0a2c6413c"},"bd4cc8d"),")"),(0,r.kt)("li",{parentName:"ul"},"duplicated pre-commit hook (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a21f5a69ba1ea3a10371f48071ef2de8b3d56448"},"a21f5a6"),")"),(0,r.kt)("li",{parentName:"ul"},"extras typing is not always dict","[str,str]"," (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/7ba069436255dc88372fd9b73db854477e7bf6f8"},"7ba0694"),")"),(0,r.kt)("li",{parentName:"ul"},"fix mypy errors (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d9543c187859de7fad59f91b79eaa4f63a56a1c6"},"d9543c1"),")"),(0,r.kt)("li",{parentName:"ul"},"fix pytest_plugin import error (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b5218196028c904e6a51d9a0971d7637264c87a2"},"b521819"),")"),(0,r.kt)("li",{parentName:"ul"},"lock cryptography dependency since a bad new release. Set authentication scheme to allow for no tokens. Exclude some file from pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ea6a9314482ca75d8d79c999959460b17ceec754"},"ea6a931"),")"),(0,r.kt)("li",{parentName:"ul"},"make authentication work again (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/3e8da0fd68a6619ca32466e934bb915652cce85f"},"3e8da0f"),")"),(0,r.kt)("li",{parentName:"ul"},"make todo title required, not optional (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bc8dab62079ded3e87c1113e81f1cd9911ad1a65"},"bc8dab6"),")"),(0,r.kt)("li",{parentName:"ul"},"make useTodos simpler to use (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e8f0a1866c594ca0a526bac3ae3e5a1f8551a005"},"e8f0a18"),")"),(0,r.kt)("li",{parentName:"ul"},"move Response decorator to controllers (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bd36b4a316f6a2c1216584235eb5dd462f6d0707"},"bd36b4a"),")"),(0,r.kt)("li",{parentName:"ul"},"only allow users to delete their own todos (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1cf1e7a8eefac27552dcdc9df0a30cf59c042eab"},"1cf1e7a"),")"),(0,r.kt)("li",{parentName:"ul"},"only run safety hook once (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bc33372bd57d7b8710cd7460f1c18c6b55c38634"},"bc33372"),")"),(0,r.kt)("li",{parentName:"ul"},"poetry command (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ccbb2e10845f9cf3215e5e95fd07f21c3b108249"},"ccbb2e1"),")"),(0,r.kt)("li",{parentName:"ul"},"pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/5192d0e79e433cf925d0569a237a101f77b68c5b"},"5192d0e"),")"),(0,r.kt)("li",{parentName:"ul"},"python-version (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a9341092771e81aced0ed4481eb582785dd08113"},"a934109"),")"),(0,r.kt)("li",{parentName:"ul"},"ran api again (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/afa8158c9815352de7195d6d988302a6d7d87ffb"},"afa8158"),")"),(0,r.kt)("li",{parentName:"ul"},"ran generator (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/19ff51bf4bc99751af93a13a36ea8f3990e6c64c"},"19ff51b"),")"),(0,r.kt)("li",{parentName:"ul"},"remove /api as root path. (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/208ceb98dcf269e18b43d6ffda04dd265bfe868c"},"208ceb9"),")"),(0,r.kt)("li",{parentName:"ul"},"remove encryption.py (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a500444b936bcc99bdcd73ebdc6eb9eeb5de2ac3"},"a500444"),")"),(0,r.kt)("li",{parentName:"ul"},"replace deprecated output definition (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c53b003498afb8f2568815a4c3da56f8d15542af"},"c53b003"),")"),(0,r.kt)("li",{parentName:"ul"},"replace gunicorn with horizontal scaling (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a8baa0f9ac2f246b17f55aada11845ddcaee15cc"},"a8baa0f"),")"),(0,r.kt)("li",{parentName:"ul"},"resolve PR feedback (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bd3debe820f27ebf7d892ecbda77720fc66be06b"},"bd3debe"),")"),(0,r.kt)("li",{parentName:"ul"},"set correct base path for docs (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0dda0b23b94155f1eb6cd194d31af1f9265ecd2b"},"0dda0b2"),")"),(0,r.kt)("li",{parentName:"ul"},"set correct type on todo local state (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2a4020ce9f84affb1725f4e4b476dc1c20b67b0e"},"2a4020c"),")"),(0,r.kt)("li",{parentName:"ul"},"test suite (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/31da3f7e720d0838e59e280aa4d873b44e24cecb"},"31da3f7"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"tests:")," fix up integration tests with per-user todos (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b7cc0caa51535020bb329c7c21cde4b458baa81c"},"b7cc0ca"),")"),(0,r.kt)("li",{parentName:"ul"},"The template no longer use the node image in production (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f9b68d9ec28482a71dd721e0ff1a42c3b6565ed5"},"f9b68d9"),")"),(0,r.kt)("li",{parentName:"ul"},"turn off eslint rules that are unnecessary or might conflict with prettier (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d6beaf7426821d5bb5efd68fe6407d13ee1d38d5"},"d6beaf7"),")"),(0,r.kt)("li",{parentName:"ul"},"typo (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fb557b8adb56fc0d5aa430a1d505d1066be1ed13"},"fb557b8"),")"),(0,r.kt)("li",{parentName:"ul"},"update old references (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/5152a1ff419336428b69c7dc7212b1d422fb93bf"},"5152a1f"),")"),(0,r.kt)("li",{parentName:"ul"},"update to match new parameters for get pydantic json schema (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c6b14a8da9639cd2b5fe04b25b52310aa1017664"},"c6b14a8"),")"),(0,r.kt)("li",{parentName:"ul"},"use const on variable that is never reassigned (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9f7c54304385c49123a3d436b5cce66997ab1e62"},"9f7c543"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," adding todo item now clears input. (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/82e6f6baee06ccbd50c4d59fe7a9a97a4b1df094"},"82e6f6b"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," correct base path (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a3872d5c67f1764c28d7450e9bf4c350cc0e87b6"},"a3872d5"),")"),(0,r.kt)("li",{parentName:"ul"},"yarn build again (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/dfc48fda537d152974a9610e3263245c69346768"},"dfc48fd"),")")),(0,r.kt)("h3",{id:"documentation"},"Documentation"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Adapt config file (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8b472981776d2cb11c477e5987afd420e38cfa7b"},"8b47298"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"add application tree (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/59aaf944a80a44a3c8a684e091210bea7e7bafda"},"59aaf94"),")"),(0,r.kt)("li",{parentName:"ul"},"add configuration section to extending the API page (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/928e7f59b339ba23dea25c9160f7033d286726fc"},"928e7f5"),")"),(0,r.kt)("li",{parentName:"ul"},"add data provider (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e3f0055874beec0855b2f1eb490b11a829ff0ed1"},"e3f0055"),")"),(0,r.kt)("li",{parentName:"ul"},"add example to git commit format (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9e7f1dcfb351761b9448ef5c33e0507edb0b850b"},"9e7f1dc"),")"),(0,r.kt)("li",{parentName:"ul"},"add glossary of terms and explain enterprise vs application logic (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/edc720f3bf0c844e57e62040cd9aebe09f5648de"},"edc720f"),")"),(0,r.kt)("li",{parentName:"ul"},"add how to extend the web (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6700cbda53d90c63c0ba8cac4ba0a447d82e7be5"},"6700cbd"),")"),(0,r.kt)("li",{parentName:"ul"},"add how to tests components (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ba78d28faf08ab724f1f0b169bf9227e933a66e0"},"ba78d28"),")"),(0,r.kt)("li",{parentName:"ul"},"add link to API docs (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e5f86387aabdcc408c9673e2380fe879421a633b"},"e5f8638"),")"),(0,r.kt)("li",{parentName:"ul"},"add link to demo (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f1475f691b8d692822e827bcd484ae733fea4d83"},"f1475f6"),")"),(0,r.kt)("li",{parentName:"ul"},"add missing environment variables descriptions (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0b228fb5b9baece31ea4d4001abbb0cfe7c85e01"},"0b228fb"),")"),(0,r.kt)("li",{parentName:"ul"},"add on push to main branch badge (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/657f3b712ea17154a639037689cc2f372ff8a1a4"},"657f3b7"),")"),(0,r.kt)("li",{parentName:"ul"},"add overview (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8287989f03f5d5398a13b977b42ee35e0b6da417"},"8287989"),")"),(0,r.kt)("li",{parentName:"ul"},"add what is fastapi (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bbec23b85d2b0c1fadfd4e4ea6e3df7e63683e78"},"bbec23b"),")"),(0,r.kt)("li",{parentName:"ul"},"addd list of features (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e8304a3c143bb8351fbea510f71f4ed725cbb60f"},"e8304a3"),")"),(0,r.kt)("li",{parentName:"ul"},"allow and move plantuml directly in markdown (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/99bacb43851aec92f61cd9f9a8a2b3f2a710e0c8"},"99bacb4"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ci:")," add comment to azure login (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f6b9c962d23a7eb2832e14b1d37d9e8b14419f5d"},"f6b9c96"),")"),(0,r.kt)("li",{parentName:"ul"},"Delete blog (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/85f43fd5982a74c3fbc312cf1ec2ad8e0687b13d"},"85f43fd"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"Fix baseUrl bug (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b14aa8c090b0b285ca5ac25648bd3ffee4dc7e7f"},"b14aa8c"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"fix broken links (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/de60d945e158cd7de61d1e2850d77fc8e95bff3d"},"de60d94"),")"),(0,r.kt)("li",{parentName:"ul"},"Fix broken links (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6b18ff533ceade8db48df4c33d88bd09bfd50a89"},"6b18ff5"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"Fix frontpage (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c30453821ee7bc68691d55ab02eeafe90da79683"},"c304538"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"Generate docs on feature branch push (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/73fa918dd4e1a3a4c86a247bfc8658844cd9ca91"},"73fa918"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"how to contribute to template (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/526b4b0afd6deb6c7120722c15a3a5327c3832d8"},"526b4b0"),")"),(0,r.kt)("li",{parentName:"ul"},"how to register a feature to the app (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/efdba6b34cc74f827a19c6eedc96dcce37d3b041"},"efdba6b"),")"),(0,r.kt)("li",{parentName:"ul"},"minor change to clean architecture (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ac0b607b931861d84a7fa653d0ddb06737f17ce2"},"ac0b607"),")"),(0,r.kt)("li",{parentName:"ul"},"Move and adapt markdown files (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8dfc7d90d3f6aeb46451711c109579e30d3b5cb6"},"8dfc7d9"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"move contributing to own page (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cc1971450902a584ff7040adb9b8a6363741f866"},"cc19714"),")"),(0,r.kt)("li",{parentName:"ul"},"move glossary of terms to end of page and explain the two business logic layers (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/02f9b707272b0d23c9049e3b111bb71b7254e73b"},"02f9b70"),")"),(0,r.kt)("li",{parentName:"ul"},"Move images (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ac1e323dbb8c2101648fa4c81566b23ba1a8fe7f"},"ac1e323"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"overview of github workflows (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/839d1b50c4cc420a86407e9643df397e1590c214"},"839d1b5"),")"),(0,r.kt)("li",{parentName:"ul"},"overview of pre-commit hooks (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e479932ae6ee47e1ac16a68dd4fa853e5cd20571"},"e479932"),")"),(0,r.kt)("li",{parentName:"ul"},"re-structure documentation (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/41878233bfcb41961f2cab3cc9ff3683f3bb5341"},"4187823"),")"),(0,r.kt)("li",{parentName:"ul"},"re-write intro to controllers (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cb1b28ad56648ffba30eebf6a5a7d040e572813a"},"cb1b28a"),")"),(0,r.kt)("li",{parentName:"ul"},"Readd puml files (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/290eb6990204d2794125ca5b59092f74c70761f8"},"290eb69"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"remove calculations from description (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/178829da8480d558ff4a6c776fffb8aaf693ee92"},"178829d"),")"),(0,r.kt)("li",{parentName:"ul"},"Remove comment (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/162608804781e2549412db21693b640305ac9be1"},"1626088"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"Remove docs build on feature push (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/4d41153064033407aaed7271ea6de4d9d4ebf29e"},"4d41153"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"Remove error in documentation docs (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/5d1075fc35054de77517093fbcccea4b42fdf8ea"},"5d1075f"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"remove key features (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1e97ba8ef8edc774bb6374030de2a945a50fa5d8"},"1e97ba8"),")"),(0,r.kt)("li",{parentName:"ul"},"Remove references to Doctave (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6949799419ed04141326c3b8b4521c46329bcc96"},"6949799"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"remove simulations from API description (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ac49fddcfa6e39906f180990eb06cddbf2a4c53d"},"ac49fdd"),")"),(0,r.kt)("li",{parentName:"ul"},"Remove unused docusaurus files (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/13a6f92b80c993f3f5aee0aec623a3589edca652"},"13a6f92"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"remove web app image in introduction (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0bf620da86c67cd43dcbab4201783bc5d97c57b5"},"0bf620d"),")"),(0,r.kt)("li",{parentName:"ul"},"rename of the application (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e7c695245c3c7c33015734735ceebb6cc71a53bb"},"e7c6952"),")"),(0,r.kt)("li",{parentName:"ul"},"Rename Tutorial to Docs (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1c92b9eb4478963d1ed746825bafd0bd249d13c5"},"1c92b9e"),")"),(0,r.kt)("li",{parentName:"ul"},"Respect browser color scheme (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/63289ba31762b29a3c1aed7be50b2ec165f3828f"},"63289ba"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"revert left to right for diagrams (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6ab6ea7d5ee0d91eb74129a1ea3c0fc78c856f28"},"6ab6ea7"),")"),(0,r.kt)("li",{parentName:"ul"},"rewrite 01-setup Yarn PnP in VSCode (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/df4c7d0dadbbccaafa6fa5c13d0bd3b16faf5243"},"df4c7d0"),")"),(0,r.kt)("li",{parentName:"ul"},"Run create-docusaurus (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c52ff06063b4896b428ede715963828f4bc05f8e"},"c52ff06"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"style feature list (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/568539e74b32fa60b032a180366c168221b93196"},"568539e"),")"),(0,r.kt)("li",{parentName:"ul"},"turn puml diagrams sideways (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a7a35fae88adead751ac2b727281aa8470c67c54"},"a7a35fa"),")"),(0,r.kt)("li",{parentName:"ul"},"Update documentation version (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/76f1aaa967de8aa3a294bcc6439edcd7c37aa703"},"76f1aaa"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"Update github workflow (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e2eba4ab2f9152f536427792c00f67cc87861b9e"},"e2eba4a"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/70"},"#70")),(0,r.kt)("li",{parentName:"ul"},"update link to radix playground (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6c932c3c48739bce3cc21e24a416405a64e5cc31"},"6c932c3"),")"),(0,r.kt)("li",{parentName:"ul"},"use tabs to show platform specific options (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2216c0a952b438cc04b9aab015b6b51db0801837"},"2216c0a"),")")),(0,r.kt)("h3",{id:"styles"},"Styles"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"fix typos + add codespell pre-commit hook (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/025ad8a61282c6635efd53a3a9f1c27ae6579958"},"025ad8a"),")"),(0,r.kt)("li",{parentName:"ul"},"Make eslint.js and index.js prettier (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9d22357e3f5f07c098aa539f1e3cd694d30990e8"},"9d22357"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/44"},"#44")),(0,r.kt)("li",{parentName:"ul"},"run biome (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/27b2b15e18f11dd1c123843e380aed14ef5b6a97"},"27b2b15"),")")),(0,r.kt)("h3",{id:"miscellaneous-chores"},"Miscellaneous Chores"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add action to initialize state fetched asynchronously (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d85b789e9ff3170864cf8f1cdb2d4945fdd2ee9d"},"d85b789"),")"),(0,r.kt)("li",{parentName:"ul"},"add eslint for typescript (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a6f8e7ff1dfefefdd8329b93550d1aa6e00a4396"},"a6f8e7f"),")"),(0,r.kt)("li",{parentName:"ul"},"add issue templates and labels (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/32cadec68e770255f49d2735338aaac3d18af7a9"},"32cadec"),")"),(0,r.kt)("li",{parentName:"ul"},"add labels to cover conventional commits (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/57dd01811bb50aadb821e3348ecb3c5729923ab4"},"57dd018"),")"),(0,r.kt)("li",{parentName:"ul"},"add script to run eslint (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2c8e006ecadca27e6650316efcb640951d127e0d"},"2c8e006"),")"),(0,r.kt)("li",{parentName:"ul"},"add union type to support broader area of usage (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f253241dc35bc17af207a09993613fd20d14d1c0"},"f253241"),")"),(0,r.kt)("li",{parentName:"ul"},"add vitest (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6c4502164490100e9ded58f7f322f37bc5c9887b"},"6c45021"),")"),(0,r.kt)("li",{parentName:"ul"},"Add yarn upgrade-interactive (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/91d998f317d8b697a75a920108a94e5479b13f78"},"91d998f"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," return Pydantic model instead of dict (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/427a9633d31cc3298d463fc4f1a225bd36f76867"},"427a963"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"build:")," add pre-commit hook to generate ts api (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/caec39e384f49b7e4a5347a6547f82ec0f7e3c0a"},"caec39e"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"build:")," delete old generated ts files (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/12c876624f5a8ab279bef8e5641ac1cc30be0176"},"12c8766"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"build:")," generate new files, and use them (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/5c16ae93d76ae27f9a553467f61378f32a7f3534"},"5c16ae9"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"build:")," install new api codegen tool (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6318b37adfb79d1955cc7d368145edb631909b69"},"6318b37"),")"),(0,r.kt)("li",{parentName:"ul"},"bump web node image version (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/337ed61359ebdc4f4f0192ebe290dabd5ee402d6"},"337ed61"),")"),(0,r.kt)("li",{parentName:"ul"},"configure prettier recommended plugin (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/40d852760a221c5a4e3f7e516b95126ae03b2c30"},"40d8527"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"dev:")," add black formatter location to specify line length (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2755265403ee453e575e71b5b5446685dee38cea"},"2755265"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"dev:")," make CRA websocket use port 80 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/53d251896a6a6b43e37bad3132ee765d02491658"},"53d2518"),")"),(0,r.kt)("li",{parentName:"ul"},"disable unnecessary rules after the new jsx transform from React 17 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9109e775cda535d30bfc0e8b8e74c925edce90c0"},"9109e77"),")"),(0,r.kt)("li",{parentName:"ul"},"document bandit exception (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b3a54608c5f596878daed7d41f07f783565e5732"},"b3a5460"),")"),(0,r.kt)("li",{parentName:"ul"},"fix file-formatter hooks exclude regex (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/61a3e36dc63f258013b7fa02a188907627fa6196"},"61a3e36"),")"),(0,r.kt)("li",{parentName:"ul"},"fix yarn pnp runtime files (no-install setup) (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/194018683344dfaf9e982474b2024f4f6d8b099f"},"1940186"),")"),(0,r.kt)("li",{parentName:"ul"},"forward ref to IconButton (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/02b1edd6b2bc866d5142a4fbd9d8c3664b362070"},"02b1edd"),")"),(0,r.kt)("li",{parentName:"ul"},"generate api with axios (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a2fea020e0669a4cda3e324f47eba218d5b67d8e"},"a2fea02"),")"),(0,r.kt)("li",{parentName:"ul"},"ignore correct path eslint (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8c1a88ed34c7ecac2a6e92af4917e24383476b1e"},"8c1a88e"),")"),(0,r.kt)("li",{parentName:"ul"},"ignore diffs on yarn plugins (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/78017e5216f863b19842e09574bf035db78f88de"},"78017e5"),")"),(0,r.kt)("li",{parentName:"ul"},"ignore generated folder on formatting/linting (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8471ab113ea999f57b24757fbd2c85bed489fd33"},"8471ab1"),")"),(0,r.kt)("li",{parentName:"ul"},"init api and web (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/560296183e54d20c736e243549d1012dc58b56ce"},"5602961"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"main:")," release 1.0.0 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b490f5755c91f405f8bf45103096e720ecf6b91a"},"b490f57"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"main:")," release 1.1.0 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0fc805232dc49ca0045fcaf8b745a4b11d4839d7"},"0fc8052"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"main:")," release 1.1.1 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/89d74cb6c1b02fd206f7d7ff6b8a6abd613cf476"},"89d74cb"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"main:")," release 1.2.0 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/48fe424cee17ed49f30c9f6b87a218f7816a7ba9"},"48fe424"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"main:")," release 1.2.1 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0b2bcc3054ce80202fa4b1cd42642e3481dfcef0"},"0b2bcc3"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"main:")," release 1.3.0 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1d8d8bb39b0be482144a53fce5d40193a6bc76a3"},"1d8d8bb"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"main:")," release 1.4.0 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0c37123f1c08b634b06f7d8ec71eab56c11851fc"},"0c37123"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"pre-commit:")," Change from autoflake to pycln (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2104864487762fb6a1de666bad9bd42e8aea0f5f"},"2104864"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/31"},"#31")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"pre-commit:")," Make local tests run on windows (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/81717389560dc2a9bc7b1723613b6b8a4c9d78b1"},"8171738"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"pre-commit:")," Move autoflake before isort (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/984f69e2ba2cfbf5884dbe0b609499418ab9c19e"},"984f69e"),")"),(0,r.kt)("li",{parentName:"ul"},"prettier ignores files in node_modules by default (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/23da6e53e7a7cf6ff40ea86b9df57de9c2e2765f"},"23da6e5"),")"),(0,r.kt)("li",{parentName:"ul"},"remove conditional render (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/36745ec4612f1a6c4f2d472e04fec89be0389258"},"36745ec"),")"),(0,r.kt)("li",{parentName:"ul"},"remove dead links to demo application (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e6dd31d1c9aea0dddb3ee9ae049edd1ae0dfede9"},"e6dd31d"),")"),(0,r.kt)("li",{parentName:"ul"},"remove empty catch (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0264cb5960dfee0cfb36dcf1e9ebbd099ddac51e"},"0264cb5"),")"),(0,r.kt)("li",{parentName:"ul"},"remove flake8 file from Dockerfile (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fe4890326931bef6ebd355297ffffbb85dd39d1a"},"fe48903"),")"),(0,r.kt)("li",{parentName:"ul"},"remove old yarn-2 stuff (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ddbb339db668b8a6a62ad9ef2f38e3e8b6ab4faf"},"ddbb339"),")"),(0,r.kt)("li",{parentName:"ul"},"remove package-lock (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/4ea44173912c00eebd59915f687032f64c3512f6"},"4ea4417"),")"),(0,r.kt)("li",{parentName:"ul"},"remove PnP (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/52633270e4907059de0b1adde1d0423a13143fb2"},"5263327"),")"),(0,r.kt)("li",{parentName:"ul"},"remove react-app from eslint extends (debatable) (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1f955d6f3a1e1256dcb2a91a7effa715e9092075"},"1f955d6"),")"),(0,r.kt)("li",{parentName:"ul"},"remove redundant conditional (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/925d5b4a5391b39acfc6e639ee9a47a676697ebb"},"925d5b4"),")"),(0,r.kt)("li",{parentName:"ul"},"remove safety from dependencies (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0e6934513d910f32c93b8503b551762ef29674cf"},"0e69345"),")"),(0,r.kt)("li",{parentName:"ul"},"remove safety from pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d0719fdfd4fffed1c5aa20427ead5b37224d2af0"},"d0719fd"),")"),(0,r.kt)("li",{parentName:"ul"},"remove unused export (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/48199e7b880990061e8bc5302eb706b9ea73797d"},"48199e7"),")"),(0,r.kt)("li",{parentName:"ul"},"replace deprecated pytest function (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d35b0c325dc8893c40f024750cbad83acd32a93d"},"d35b0c3"),")"),(0,r.kt)("li",{parentName:"ul"},"set language version interrogate (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/57032e862b8ff66d07461f8ca3b31560eec7dd0a"},"57032e8"),")"),(0,r.kt)("li",{parentName:"ul"},"substitute HashRouter with BrowserRouter in web app (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c2230d5880cf4e6e803f102282bcd0217de49d4d"},"c2230d5"),")"),(0,r.kt)("li",{parentName:"ul"},"type CommitInfo (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2179e13f256cba46959c101f76593f262daee5d4"},"2179e13"),")"),(0,r.kt)("li",{parentName:"ul"},"typing errors (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1ebe6957ee77aff93cfac6f1acfd832a2a0f3b96"},"1ebe695"),")"),(0,r.kt)("li",{parentName:"ul"},"Update all web packages (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a193af56c4e0ed68be9b7ad05d7a5747130c0321"},"a193af5"),")"),(0,r.kt)("li",{parentName:"ul"},"update dependencies (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fb2cf508f3f30f12bf39f23a9a630d92e12f47b0"},"fb2cf50"),")"),(0,r.kt)("li",{parentName:"ul"},"update dependencies (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/67061eb5ddb72e9fd49375d2b9e3fc8c73c572f5"},"67061eb"),")"),(0,r.kt)("li",{parentName:"ul"},"update gitignore (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/995ee825598a9de09ea8094d2e0bcbe27a2b1b9e"},"995ee82"),")"),(0,r.kt)("li",{parentName:"ul"},"update poetry.lock (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ce0736870d873805c348c5fa2c915db449a76168"},"ce07368"),")"),(0,r.kt)("li",{parentName:"ul"},"update sdks (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/385a55eefab23b695e2a4f1f12b1ca97e93a9820"},"385a55e"),")"),(0,r.kt)("li",{parentName:"ul"},"upgrade release-please (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/381ee02df3c7c60a118761831aa4b499d6af868b"},"381ee02"),")"),(0,r.kt)("li",{parentName:"ul"},"upgrade versions (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bc9f6a3dadb920167419e8b66bd79a396c09cad9"},"bc9f6a3"),")"),(0,r.kt)("li",{parentName:"ul"},"upgrade versions (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/041f78e9c0cdb1be8fd83099d33b7c1e36e3633a"},"041f78e"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"vscode:")," Stop git ignoring vscode settings (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2b643d1fad4555ab78be38fee5c0b7abfad47adc"},"2b643d1"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/44"},"#44")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"yarn:")," Stop running redundant yarn install (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/48415778f2a0b3f636a0b5394959f8d992171b06"},"4841577"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/44"},"#44")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"yarn:")," Use Yarn Zero-Install (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ae03fa630a70b0ad74d3348d6b9c93546563c553"},"ae03fa6"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/44"},"#44"))),(0,r.kt)("h3",{id:"code-refactoring"},"Code Refactoring"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"adding middleware and exception handlers recommended way (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/11384e9d319e59a574e6d9389e00c18402bfda4e"},"11384e9"),")"),(0,r.kt)("li",{parentName:"ul"},"all files under feaures (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/10df906776c6b826ea59dc37e4a1d4924e2d5e87"},"10df906"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," fix type errors in vscode (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fd40ccb730dd23899ac2de7cc9e9e15440647280"},"fd40ccb"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," replace response_class with return type annotations (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b1fa3bd6b342ba89e5d2237721573a83cfd503fe"},"b1fa3bd"),")"),(0,r.kt)("li",{parentName:"ul"},"change test URL to match root path (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/7c665131419de938f263d0e4d6d5e32cf1b8fd00"},"7c66513"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ci:")," extract ghcr login into separat step (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0d90fe00438ad9c995198cba8e268c8268af1e4a"},"0d90fe0"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ci:")," remove crazy-max external action (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b41990d92c19d2a661900a208a60d604a5ab470c"},"b41990d"),")"),(0,r.kt)("li",{parentName:"ul"},"configure prettier on src folder (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/14d63aab822b493cd1ba7ba80c6707146c00ec80"},"14d63aa"),")"),(0,r.kt)("li",{parentName:"ul"},"conform to snake_case filenames (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/018918ec788d9c0202c8a90b0a8f77db3dd3a201"},"018918e"),")"),(0,r.kt)("li",{parentName:"ul"},"create empty yarn.lock (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/39050e72af50debd95380590fe4ee803a5995589"},"39050e7"),")"),(0,r.kt)("li",{parentName:"ul"},"improve type-strictness (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/961a7b2c490009034b1059060c4bc3fe0d1f88bc"},"961a7b2"),")"),(0,r.kt)("li",{parentName:"ul"},"memoize todoAPI, closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/199"},"#199")," (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/35059fae89f1b6eef622fffbfd97a1ef4d022151"},"35059fa"),")"),(0,r.kt)("li",{parentName:"ul"},"migrate to pydantic v2 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/7b0099b0169690c05f0f3875c1e5e790ff6cc515"},"7b0099b"),")"),(0,r.kt)("li",{parentName:"ul"},"mocking database using mongomock (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/19b7023e55d6fe44a7fef9b2fbfc36a30e0ee7df"},"19b7023"),")"),(0,r.kt)("li",{parentName:"ul"},"move default mongo client outside (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9c241ff33d9540de03bd305d90588c787ac57dfe"},"9c241ff"),")"),(0,r.kt)("li",{parentName:"ul"},"move default react eslint config from package.json to .eslintrc (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bbcf3b57bf0430f50f0aa8bfe8ff700e2fd93178"},"bbcf3b5"),")"),(0,r.kt)("li",{parentName:"ul"},"move dependency to API to useTodoAPI hook (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/4055f893111c003dafe25ad9dafbef3940e053c4"},"4055f89"),")"),(0,r.kt)("li",{parentName:"ul"},"move todo component out from App.tsx (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/edfd9f66f06271e0b2cc6c01b9ea468ac7473e45"},"edfd9f6"),")"),(0,r.kt)("li",{parentName:"ul"},"remove empty catch (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f4024bf2c5edc78b26c50497e34d35170461bf53"},"f4024bf"),")"),(0,r.kt)("li",{parentName:"ul"},"remove old repository mock (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/624cf0ac3065e70e84af588d2934f873276f9cd8"},"624cf0a"),")"),(0,r.kt)("li",{parentName:"ul"},"remove prefix in API url path (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bc99f93fdfec513bf518d0146f6e77d10458d689"},"bc99f93"),")"),(0,r.kt)("li",{parentName:"ul"},"remove pyproject.toml parsing with extra-files (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c1d812a59bdd79bccec4dfe5a1dffd2e3316d619"},"c1d812a"),")"),(0,r.kt)("li",{parentName:"ul"},"remove repeated code (DRY) (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c5e6aa14583195fd23c645d1bc6591d1bb4e1481"},"c5e6aa1"),")"),(0,r.kt)("li",{parentName:"ul"},"remove tool versions file (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/480e38e2023c142f7f2efc1596655b1c79f051f2"},"480e38e"),")"),(0,r.kt)("li",{parentName:"ul"},"remove unused className (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1ee3effe4fcfbca071156a46879cea812c879441"},"1ee3eff"),")"),(0,r.kt)("li",{parentName:"ul"},"remove unused doctave file (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c42fdeb96d1871faa53c85a5285187b31f9db01b"},"c42fdeb"),")"),(0,r.kt)("li",{parentName:"ul"},"rename infrastructure to data_providers (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8630fb75854be7014d52753a46244e9e66256133"},"8630fb7"),")"),(0,r.kt)("li",{parentName:"ul"},"rename list() member-function to list_collection (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/7ef87c0cc8dfaacf43c5536420ccf41040436619"},"7ef87c0"),")"),(0,r.kt)("li",{parentName:"ul"},"rename popover state setter (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/500ec0a7b5733856c4818e1f875a82e06f137cfc"},"500ec0a"),")"),(0,r.kt)("li",{parentName:"ul"},"rename unit tests from infrastructure to data providers (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bbd21ba81fe07b9d8d254793cf234441e3c97f81"},"bbd21ba"),")"),(0,r.kt)("li",{parentName:"ul"},"render TodoApp.tsx as single component in App (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f823831d0171038b29d699292551102be2c6adf4"},"f823831"),")"),(0,r.kt)("li",{parentName:"ul"},"replace python-jose with pyjwt (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0d01e42f59e4ce28ea49ef9db44302b8cdcbe184"},"0d01e42"),")"),(0,r.kt)("li",{parentName:"ul"},"rework design (eds) (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f3db74afd105aa54c6a61e8fa3da7bfd050803cd"},"f3db74a"),")"),(0,r.kt)("li",{parentName:"ul"},"rewrite logger middleware to be a 'pure ASGI' middleware (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/309620e565fcae3470d82abd2fa431c2a9ecb03d"},"309620e"),")"),(0,r.kt)("li",{parentName:"ul"},"separate responsibilities by moving useEffect to a custom hook (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cc33a5d1f856aff8e529c4c3df43d326fb5a8a90"},"cc33a5d"),")"),(0,r.kt)("li",{parentName:"ul"},"structure web to group files by feature (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cb5a09bacdcc76a39ad676e8c51c7ceebed8b9d1"},"cb5a09b"),")"),(0,r.kt)("li",{parentName:"ul"},"update some react/axios-related types (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/43e22fb44ec11c75658f89eaa2e70160a07f7c4d"},"43e22fb"),")"),(0,r.kt)("li",{parentName:"ul"},"update typing to python 3.10+ syntax (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/245c69991b2d8d2a62b78971c29ea1a372dd29be"},"245c699"),")"),(0,r.kt)("li",{parentName:"ul"},"use ","<","Icon",">"," data prop instead of name (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/5f142a9bd91356020be94248f91f30ac8d95a5e7"},"5f142a9"),")"),(0,r.kt)("li",{parentName:"ul"},"use case responses decorator instead of use case executor (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d0af7e4d2fa39793133e8d69f5ef63cb19b0e033"},"d0af7e4"),")"),(0,r.kt)("li",{parentName:"ul"},"use common toggle function (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ab78e1f8c632da0abfa8efd586d8836e953d2c7d"},"ab78e1f"),")"),(0,r.kt)("li",{parentName:"ul"},"use default URL for docs and openapi specification (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8b11feda64d5b1664b50b8d439df13fd86bfc2e3"},"8b11fed"),")"),(0,r.kt)("li",{parentName:"ul"},"use descriptive property name (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/80af66078c422ea008b6f23fdf1bdacfc2b44840"},"80af660"),")"),(0,r.kt)("li",{parentName:"ul"},"use IconButton (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c3d236afbe160b8e79c20729d04fa26a71def609"},"c3d236a"),")"),(0,r.kt)("li",{parentName:"ul"},"use IconButton to reduce complexity of TodoItem (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/3bb232fd1c34113837fc1a71d4fc054f6f770ab9"},"3bb232f"),")"),(0,r.kt)("li",{parentName:"ul"},"Use NginX as web server (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/3c6ebd9ba0964d2beae3762061bb82211013a8b6"},"3c6ebd9"),")"),(0,r.kt)("li",{parentName:"ul"},"use Popover component (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/270f2ea35112133a0f887f298606232383189ad7"},"270f2ea"),")"),(0,r.kt)("li",{parentName:"ul"},"use settings in pyproject.toml for pre commit hooks related to python (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/19c397f65311411abf7d98812a0df1d709fed391"},"19c397f"),")"),(0,r.kt)("li",{parentName:"ul"},"use TodoContext to handle todos state (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/7d6cc34882e45fd845f4dcb7c920f7fe15785c81"},"7d6cc34"),")"),(0,r.kt)("li",{parentName:"ul"},"use version from pyproject.toml in docs (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/015206c23f2ad8a89b1fe9b0687e6d9acea6b4e6"},"015206c"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"workflow:")," Fix linting errors (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8ea9f69fbb5919568ba99fed659be77e18647d48"},"8ea9f69"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"workflow:")," rename and restructure workflows (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f08fffaf7ffaf46503debfc4e4bd60320592a84e"},"f08fffa"),")")),(0,r.kt)("h3",{id:"tests"},"Tests"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add jsx-a11y to check accessibility rules on jsx elements (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/77b865d8add2dd272b35743cf3bd84c1a1775367"},"77b865d"),")"),(0,r.kt)("li",{parentName:"ul"},"add rules of hooks (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/4d0d771075143632eea26b75582f7d0566ee7345"},"4d0d771"),")"),(0,r.kt)("li",{parentName:"ul"},"add some simple web tests (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/81fde9c2e0726f7426c938a6877014c84a1d271f"},"81fde9c"),")"),(0,r.kt)("li",{parentName:"ul"},"add unit and integration tests to exception handler (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1d32e628b64ece12c6367cd06268b494ec6fb3ff"},"1d32e62"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"docs:")," Add testing of docs (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/08d8c232fe45e0dd6bc91f238133ee9000a9900d"},"08d8c23"),")"),(0,r.kt)("li",{parentName:"ul"},"mock authorization (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/618258ca76fb00b8f2dabe2d68cd9d3519b403c2"},"618258c"),")"),(0,r.kt)("li",{parentName:"ul"},"move pytest configuration to pyproject.toml (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a5eff87da9a3283afd7272500a3832d16010349a"},"a5eff87"),")"),(0,r.kt)("li",{parentName:"ul"},"Upgrade pre-commits (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bd8f1106cde2ec215ea9a519a4afd5daa460fb96"},"bd8f110"),")")),(0,r.kt)("h3",{id:"build-system"},"Build System"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add mongodb to run in radix (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/43faa805dfc40a406ae96be55d2a9d2c060be51d"},"43faa80"),")"),(0,r.kt)("li",{parentName:"ul"},"add path to init.sh to cmd (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/10feabb88d086c19f82d9579f3ef7148b0507e05"},"10feabb"),")"),(0,r.kt)("li",{parentName:"ul"},"add react-oauth2-code-pkce (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/06b2a279be5295d7ee9262ced2f704cc93062c3c"},"06b2a27"),")"),(0,r.kt)("li",{parentName:"ul"},"add typescript plugin (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/83ade0cdb86d15bbe072e036fbe0ac1b106f8015"},"83ade0c"),")"),(0,r.kt)("li",{parentName:"ul"},"adding missing packges (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/02a92ca3410173eed92e13a7705a59c68179a446"},"02a92ca"),")"),(0,r.kt)("li",{parentName:"ul"},"api crashes fix (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e94a17e87979c90e02112b947927f1bf9510cbea"},"e94a17e"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," add requests library (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/4c4790d73c26e31da2cecc820354e4288fae22bb"},"4c4790d"),")"),(0,r.kt)("li",{parentName:"ul"},"bump python version to 3.11 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/225a530784730a413974c8b5df8ec767cafe6afd"},"225a530"),")"),(0,r.kt)("li",{parentName:"ul"},"bump versions in pyproject.toml (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b18536637aaad91a48de4ba834668452a5d25c27"},"b185366"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ci/cd:")," update flake8 repo location (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e6953ad3ca280975c9589939a1e728a73fbfd418"},"e6953ad"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"deps:")," bump certifi from 2022.12.7 to 2023.7.22 in /api (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a9ab785c07ed47b6e8536b58ff578d1c015e8361"},"a9ab785"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"deps:")," update react-oauth-code-pkce (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/37f6008ed9312c851ad068ff697a27cdae2f4b63"},"37f6008"),")"),(0,r.kt)("li",{parentName:"ul"},"enable auth for web in readix (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d8c6797328756383d9423c7e559c77c85a116d54"},"d8c6797"),")"),(0,r.kt)("li",{parentName:"ul"},"enable scripts to build necessary packages (YN0007) (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f1cf2c3f7d6fc7190535c8abf97c55bfa6839e56"},"f1cf2c3"),")"),(0,r.kt)("li",{parentName:"ul"},"fix mac m1 virtiofs docker problem (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8c017a6504d812f6752711d7cbe9daeb19ee1b82"},"8c017a6"),")"),(0,r.kt)("li",{parentName:"ul"},"missing peer dependencies (YN0002) (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9e8981d581c2509039beda4a7a34980c574bf179"},"9e8981d"),")"),(0,r.kt)("li",{parentName:"ul"},"move config of codespell to pyproject.toml (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f3d4fa75259530f1955a059732f92b102748107c"},"f3d4fa7"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"radix:")," add missing db environment variables for api (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cc8ee598a648e8cc69d75498e09f34588160b330"},"cc8ee59"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"radix:")," add missing port definition (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fbf548ee08b72a8fd608530b968e64fe33e799ed"},"fbf548e"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"radix:")," add missing root password for mongodb (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/71de4768dbb7639ff7e4c4f227e879144d7b7297"},"71de476"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"radix:")," add more resources to api (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f18518a5bf0dc7655749094de96fcee608b16dc5"},"f18518a"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"radix:")," non root mongodb image (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a8a60f13509ceba6326b39e06b38186cb1ed9e9e"},"a8a60f1"),")"),(0,r.kt)("li",{parentName:"ul"},"run as non-root (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a5a255f24ff0d3e54539018c24a0534a7e7d6b06"},"a5a255f"),")"),(0,r.kt)("li",{parentName:"ul"},"set oauth client id and audience (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1fc42ec93c374990379aacbcbe8952e6ad87fcdc"},"1fc42ec"),")"),(0,r.kt)("li",{parentName:"ul"},"set yarn version (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/afb5834883d6d1f01026d602fb434db38443c8b0"},"afb5834"),")"),(0,r.kt)("li",{parentName:"ul"},"styled components post-install causing noise in yarn pnp (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/03dfac0d20ca0d82cffd04c000752642882b8188"},"03dfac0"),")"),(0,r.kt)("li",{parentName:"ul"},"Update api packages (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9dc46b4e315930a381e4f7f7fd6fddaef173d4eb"},"9dc46b4"),")"),(0,r.kt)("li",{parentName:"ul"},"update environment name (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2c40003cdcfb73d437b86ac1b7dcd97172a4d6af"},"2c40003"),")"),(0,r.kt)("li",{parentName:"ul"},"update OAUTH_AUDIENCE settings (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c38c8e233daa2c3ad168218f277d4d0163dcd074"},"c38c8e2"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," replace cra and webpack with vite (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/4f67778a364ea5d6742758113f043688c90f6cbb"},"4f67778"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"yarn:")," Migrate the lockfile (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2e71fbaaf1c195a82b094f88b898f867f45a5f7f"},"2e71fba"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/44"},"#44")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"yarn:")," Set Yarn to version berry (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e2a335276176bdae752536f4f902fca414f4ddc5"},"e2a3352"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/44"},"#44")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"yarn:")," Swithc to Plug'n'Play setup (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/751640ec61c19a94517f1c303865f0abd2c5ccec"},"751640e"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/44"},"#44")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"yarn:")," Update Dockerfile (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/78bddadfa79a483d65d2430f78c0a0fd0af05155"},"78bddad"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/44"},"#44")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"yarn:")," Update gitignore (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a527bec89c5d4972eb34d9283444cfa98e1293b6"},"a527bec"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/44"},"#44")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"yarn:")," Update yarn commands (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/5a0cbd281a12494e29feff24c432070c094cf1df"},"5a0cbd2"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/44"},"#44"))),(0,r.kt)("h3",{id:"continuous-integration"},"Continuous Integration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"activate publish (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cc14523dfed5f1451237c55fcb3e3cf22a4b96ec"},"cc14523"),")"),(0,r.kt)("li",{parentName:"ul"},"add build and deploy settings for production (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/02dbc999e6919009f62735df30e57a29975c2c5e"},"02dbc99"),")"),(0,r.kt)("li",{parentName:"ul"},"add check to typescript-client to ensure right api-spec is used (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/edc4621f922429ec00f425da6313dd148d766b62"},"edc4621"),")"),(0,r.kt)("li",{parentName:"ul"},"Add rollback workflow (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b1cca70e53c7080427979b3efe0ee30ccffafdd0"},"b1cca70"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/153"},"#153")),(0,r.kt)("li",{parentName:"ul"},"allow publishing multiple tags at once (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/4c5d8677395054254551757f871570dad1695933"},"4c5d867"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/153"},"#153")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," enable ruff autofix (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/aeaac4d2ac182abd15bb6446162f511da40fc3de"},"aeaac4d"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," enable upgradepy (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/59c75f7d19647355d7c329bb56bc6975cc14ff3e"},"59c75f7"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," replace flake8 with ruff (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/180a48cca4bf1d4daced7c73e2f1e7e3f1dd6ced"},"180a48c"),")"),(0,r.kt)("li",{parentName:"ul"},"bump pre-commit hooks (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/24455caf0c4b4f8e281c5be3ef6ab078997cfd4d"},"24455ca"),")"),(0,r.kt)("li",{parentName:"ul"},"bump pre-commit hooks (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9a0cea7d6a03aaa99101135f626b948c87dd6882"},"9a0cea7"),")"),(0,r.kt)("li",{parentName:"ul"},"call correct workflow file (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cb2c2eb55ea652839ffd652d9dd25179c784135b"},"cb2c2eb"),")"),(0,r.kt)("li",{parentName:"ul"},"change oauth redurect url to radix playground (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/655c55f5027baea255d29ea881df0030695da5aa"},"655c55f"),")"),(0,r.kt)("li",{parentName:"ul"},"Change version logging format on build (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/49ca8939a6dd8fd753ba171653a5977a869a0249"},"49ca893"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/154"},"#154")),(0,r.kt)("li",{parentName:"ul"},"correct permissions (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6d9d563a3cf3db335c1d34b3630ac64212881186"},"6d9d563"),")"),(0,r.kt)("li",{parentName:"ul"},"correct version path for web (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/781cef20ff5d734c83535ec3dac15bb9aaffa14e"},"781cef2"),")"),(0,r.kt)("li",{parentName:"ul"},"disable deploy workflows (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/7f3e2752f99a3ae21996ef18832ce5040648f1a6"},"7f3e275"),")"),(0,r.kt)("li",{parentName:"ul"},"enable publish latest (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/3716ee66c772120955c958b90ba7a99f4a6016c4"},"3716ee6"),")"),(0,r.kt)("li",{parentName:"ul"},"enforce conventional commits (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c0a40b00f2d98ea5bd0437935441d8cf4e28c8ce"},"c0a40b0"),")"),(0,r.kt)("li",{parentName:"ul"},"Fix bug in publish docs (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a696a33a9e451f3d261e2b07538aebac418ac3d3"},"a696a33"),")"),(0,r.kt)("li",{parentName:"ul"},"Include all commit types in changelog (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/73cfaaadf916c7e15accb347183f89e50651f279"},"73cfaaa"),")"),(0,r.kt)("li",{parentName:"ul"},"login as the service principal to request an access token (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fabe3b469ce49f9c64ff3e0781d6564c78f709f5"},"fabe3b4"),")"),(0,r.kt)("li",{parentName:"ul"},"pass tag name to publish-image workflow (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/dcedc16f6ab2d16d74f4c41ffaf4100f638b88dc"},"dcedc16"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/153"},"#153")),(0,r.kt)("li",{parentName:"ul"},"pipeline not running (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/4b5e587555c759f37a3742de5895024fb0bf66f2"},"4b5e587"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"pre-commit:")," add end-of-file-fixer hook (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cea07f17ae9ddf38033bb9ca840bf09a9eadb26a"},"cea07f1"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"pre-commit:")," add no-commit-to-branch hook (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/073879ce5668779b219c99c063855c48b3c1400d"},"073879c"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"pre-commit:")," make convential commit hook run (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d50f01d40890c098683263bf5aab0f591354b41f"},"d50f01d"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"pre-commit:")," update hook versions (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a5bd7d398233a3fa42bacedfa971627d9d208c35"},"a5bd7d3"),")"),(0,r.kt)("li",{parentName:"ul"},"publish nginx image to docker registry (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/939a29cd785d097b34f97df5613dc7830ba84c3c"},"939a29c"),")"),(0,r.kt)("li",{parentName:"ul"},"release to production on release created (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b3e5e5749fe988f26b434e979ae0d918dff8cc60"},"b3e5e57"),")"),(0,r.kt)("li",{parentName:"ul"},"remove pycln (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9614b7e06040cab2fcbc9064a90fc6cbbd3cba0f"},"9614b7e"),")"),(0,r.kt)("li",{parentName:"ul"},"remove secret as input to reusable workflow (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1ec6cbb2e5360de99d99416739093a02a38c5ba7"},"1ec6cbb"),")"),(0,r.kt)("li",{parentName:"ul"},"remove unused code (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fda13257393da0a34a6c251aad63992efde22a60"},"fda1325"),")"),(0,r.kt)("li",{parentName:"ul"},"replace local mypy with pre-commit hook (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/4cee89e79e80a41627c69e67dcdf5697a421606d"},"4cee89e"),")"),(0,r.kt)("li",{parentName:"ul"},"run pytest integrations tests (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0fff7a34a3b6ca79e925837d47a9142164936131"},"0fff7a3"),")"),(0,r.kt)("li",{parentName:"ul"},"set correct oauth redirect url for test environment (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/3c5db0841dc9761a9ebe7abb422f8875908ade0b"},"3c5db08"),")"),(0,r.kt)("li",{parentName:"ul"},"set correct radix environment to deploy for latest (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/aee20af7ff7a7c632484e0e51434cade67940609"},"aee20af"),")"),(0,r.kt)("li",{parentName:"ul"},"specify playground context (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/142bc139c4cd4b7e145a00dde2161a502afa9363"},"142bc13"),")"),(0,r.kt)("li",{parentName:"ul"},"update azure auth configuration (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fb02376cbd27c36502ef19a72b8c17de72c1db11"},"fb02376"),")"),(0,r.kt)("li",{parentName:"ul"},"use ruff implementation of isort and bandit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1151ec486a6713cd4f95bf145eb36900d552eafc"},"1151ec4"),")")),(0,r.kt)("hr",null),(0,r.kt)("p",null,'title: "Changelog"\nhide_title: true\nsidebar_label: "Changelog"\nid: "changelog"'),(0,r.kt)("h2",{id:"slug-changelog"},'slug: "/changelog"'),(0,r.kt)(m,{mdxType:"Contributing"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/492dc3f9.b3c5f638.js b/assets/js/492dc3f9.b3c5f638.js new file mode 100644 index 00000000..fe09ad84 --- /dev/null +++ b/assets/js/492dc3f9.b3c5f638.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[396],{2489:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var i=n(7462),a=(n(7294),n(3905));n(1839);const o={},r="Configuration",l={unversionedId:"about/running/configure",id:"about/running/configure",title:"Configuration",description:"This document goes through all the different configuration options available.",source:"@site/docs/about/running/02-configure.md",sourceDirName:"about/running",slug:"/about/running/configure",permalink:"/template-fastapi-react/docs/about/running/configure",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/about/running/02-configure.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"about",previous:{title:"Prerequisites",permalink:"/template-fastapi-react/docs/about/running/prerequisites"},next:{title:"Starting services",permalink:"/template-fastapi-react/docs/about/running/starting-services"}},u={},s=[{value:".env",id:"env",level:2},{value:"Web",id:"web",level:3},{value:"Authentication",id:"authentication",level:4},{value:"API",id:"api",level:3},{value:"System",id:"system",level:4},{value:"Database",id:"database",level:4},{value:"Authentication",id:"authentication-1",level:4}],p={toc:s};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,i.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"configuration"},"Configuration"),(0,a.kt)("p",null,"This document goes through all the different configuration options available."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Remember to restart"),(0,a.kt)("p",{parentName:"admonition"},"Any changes you make to this file will only come into effect when you restart the\nserver.")),(0,a.kt)("h2",{id:"env"},".env"),(0,a.kt)("p",null,"First, let's look at the options available in the ",(0,a.kt)("inlineCode",{parentName:"p"},".env")," file."),(0,a.kt)("h3",{id:"web"},"Web"),(0,a.kt)("h4",{id:"authentication"},"Authentication"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"AUTH_ENABLED"),": To enable or disable authentication"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CLIENT_ID"),": Find the app's client ID under Azure Active Directory service (also called application ID). The client ID is used to tell Azure which resource a user is attempting to access."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"TENANT_ID"),": Find tenant ID through the Azure portal under Azure Active Directory service. Select properties and under scroll down to the Tenant ID field."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"AUTH_SCOPE"),": Find the scope the Azure portal under Azure Active Directory service and App registrations. The scope is located under the expose an API.")),(0,a.kt)("h3",{id:"api"},"API"),(0,a.kt)("h4",{id:"system"},"System"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ENVIRONMENT"),": local for hot-reloading, or production for speed"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"LOGGER_LEVEL"),": DEBUG, ERROR, INFO, WARN")),(0,a.kt)("h4",{id:"database"},"Database"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MONGODB_USERNAME"),": The username"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MONGODB_PASSWORD"),": The password"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MONGODB_HOSTNAME"),": The host where it's running"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MONGODB_DATABASE"),": The database to connect to"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MONGODB_PORT"),": The port that is used")),(0,a.kt)("h4",{id:"authentication-1"},"Authentication"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"OAUTH_TOKEN_ENDPOINT"),": The endpoint to obtain tokens."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"OAUTH_AUTH_ENDPOINT"),": The authorization endpoint performs authentication of the end-user (this is done by redirecting the user agent to this endpoint)."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"OAUTH_WELL_KNOWN"),": The endpoints that lists endpoints and other configuration options relevant to the OpenID Connect implementation in the project."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"OAUTH_AUDIENCE"),": If using azure ad, audience is the azure client id."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"SECRET_KEY"),": The secret used for signing JWT.")),(0,a.kt)("p",null,"Used by the docs:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"OAUTH_CLIENT_ID"),": Find the app's client ID under Azure Active Directory service (also called application ID). The client ID is used to tell Azure which resource a user is attempting to access."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"OAUTH_AUTH_SCOPE"),": Find the scope the Azure portal under Azure Active Directory service and App registrations. The scope is located under the expose an API.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4b94b993.25343c8e.js b/assets/js/4b94b993.25343c8e.js new file mode 100644 index 00000000..40562b64 --- /dev/null +++ b/assets/js/4b94b993.25343c8e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[859],{4657:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>r,contentTitle:()=>c,default:()=>p,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var o=a(7462),s=(a(7294),a(3905));a(1839);const n={},c="Use case",i={unversionedId:"about/concepts/use-case",id:"about/concepts/use-case",title:"Use case",description:"There will be one use case for each individual action/command of an actor. An actor is a person or another system that interacts with our application. Typically, it will be a regular user.",source:"@site/docs/about/concepts/02-use-case.md",sourceDirName:"about/concepts",slug:"/about/concepts/use-case",permalink:"/template-fastapi-react/docs/about/concepts/use-case",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/about/concepts/02-use-case.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"about",previous:{title:"Task",permalink:"/template-fastapi-react/docs/about/concepts/task"},next:{title:"How to",permalink:"/template-fastapi-react/docs/category/how-to"}},r={},l=[{value:"Examples",id:"examples",level:2},{value:"Related concepts",id:"related-concepts",level:2}],u={toc:l};function p(e){let{components:t,...a}=e;return(0,s.kt)("wrapper",(0,o.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"use-case"},"Use case"),(0,s.kt)("p",null,"There will be one use case for each individual action/command of an actor. An actor is a person or another system that interacts with our application. Typically, it will be a regular user."),(0,s.kt)("h2",{id:"examples"},"Examples"),(0,s.kt)("p",null,"For a meetup.com clone, it could be:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"Confirming attendance as an attendee"),(0,s.kt)("li",{parentName:"ul"},"Cancelling attendance as an attendee"),(0,s.kt)("li",{parentName:"ul"},"Drafting new meeting as an organizer")),(0,s.kt)("h2",{id:"related-concepts"},"Related concepts"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/57dd7c71.325d5b48.js b/assets/js/57dd7c71.325d5b48.js new file mode 100644 index 00000000..5d14a1a4 --- /dev/null +++ b/assets/js/57dd7c71.325d5b48.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[508],{5162:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),l=a(6010);const r="tabItem_Ymn6";function i(e){let{children:t,hidden:a,className:i}=e;return n.createElement("div",{role:"tabpanel",className:(0,l.Z)(r,i),hidden:a},t)}},5488:(e,t,a)=>{a.d(t,{Z:()=>c});var n=a(7462),l=a(7294),r=a(6010),i=a(2389),o=a(7392),p=a(7094),s=a(2466);const m="tabList__CuJ",u="tabItem_LNqP";function d(e){var t;const{lazy:a,block:i,defaultValue:d,values:c,groupId:k,className:g}=e,h=l.Children.map(e.children,(e=>{if((0,l.isValidElement)(e)&&"value"in e.props)return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})),N=c??h.map((e=>{let{props:{value:t,label:a,attributes:n}}=e;return{value:t,label:a,attributes:n}})),y=(0,o.l)(N,((e,t)=>e.value===t.value));if(y.length>0)throw new Error(`Docusaurus error: Duplicate values "${y.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`);const v=null===d?d:d??(null==(t=h.find((e=>e.props.default)))?void 0:t.props.value)??h[0].props.value;if(null!==v&&!N.some((e=>e.value===v)))throw new Error(`Docusaurus error: The has a defaultValue "${v}" but none of its children has the corresponding value. Available values are: ${N.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);const{tabGroupChoices:b,setTabGroupChoices:f}=(0,p.U)(),[w,C]=(0,l.useState)(v),P=[],{blockElementScrollPositionUntilNextRender:T}=(0,s.o5)();if(null!=k){const e=b[k];null!=e&&e!==w&&N.some((t=>t.value===e))&&C(e)}const x=e=>{const t=e.currentTarget,a=P.indexOf(t),n=N[a].value;n!==w&&(T(t),C(n),null!=k&&f(k,String(n)))},I=e=>{var t;let a=null;switch(e.key){case"ArrowRight":{const t=P.indexOf(e.currentTarget)+1;a=P[t]??P[0];break}case"ArrowLeft":{const t=P.indexOf(e.currentTarget)-1;a=P[t]??P[P.length-1];break}}null==(t=a)||t.focus()};return l.createElement("div",{className:(0,r.Z)("tabs-container",m)},l.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":i},g)},N.map((e=>{let{value:t,label:a,attributes:i}=e;return l.createElement("li",(0,n.Z)({role:"tab",tabIndex:w===t?0:-1,"aria-selected":w===t,key:t,ref:e=>P.push(e),onKeyDown:I,onFocus:x,onClick:x},i,{className:(0,r.Z)("tabs__item",u,null==i?void 0:i.className,{"tabs__item--active":w===t})}),a??t)}))),a?(0,l.cloneElement)(h.filter((e=>e.props.value===w))[0],{className:"margin-top--md"}):l.createElement("div",{className:"margin-top--md"},h.map(((e,t)=>(0,l.cloneElement)(e,{key:t,hidden:e.props.value!==w})))))}function c(e){const t=(0,i.Z)();return l.createElement(d,(0,n.Z)({key:String(t)},e))}},9535:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>m,contentTitle:()=>p,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var n=a(7462),l=(a(7294),a(3905)),r=(a(1839),a(5162)),i=a(5488);const o={},p="Setup",s={unversionedId:"contribute/development-guide/setup",id:"contribute/development-guide/setup",title:"Setup",description:"Prerequisites",source:"@site/docs/contribute/development-guide/01-setup.md",sourceDirName:"contribute/development-guide",slug:"/contribute/development-guide/setup",permalink:"/template-fastapi-react/docs/contribute/development-guide/setup",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/01-setup.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"contribute",previous:{title:"Development guide",permalink:"/template-fastapi-react/docs/category/development-guide"},next:{title:"Coding",permalink:"/template-fastapi-react/docs/category/coding"}},m={},u=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Pre-commit",id:"pre-commit",level:2},{value:"Installation",id:"installation",level:3},{value:"Usage",id:"usage",level:3},{value:"Hooks",id:"hooks",level:3},{value:"API",id:"api",level:2},{value:"Create virtualenv",id:"create-virtualenv",level:3},{value:"Activate virtualenv",id:"activate-virtualenv",level:3},{value:"Install Poetry",id:"install-poetry",level:3},{value:"Install packages",id:"install-packages",level:3},{value:"Web",id:"web",level:2},{value:"Package management",id:"package-management",level:3},{value:"Yarn PnP in Jetbrains IDEs",id:"yarn-pnp-in-jetbrains-ides",level:4},{value:"Yarn PnP in VSCode",id:"yarn-pnp-in-vscode",level:4}],d={toc:u};function c(e){let{components:t,...a}=e;return(0,l.kt)("wrapper",(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"setup"},"Setup"),(0,l.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,l.kt)("p",null,"To work with the template monorepo you'll need to install ",(0,l.kt)("a",{parentName:"p",href:"/template-fastapi-react/docs/about/running/prerequisites"},"these tools"),"."),(0,l.kt)("h2",{id:"pre-commit"},"Pre-commit"),(0,l.kt)("p",null,"When contributing to this project, pre-commits are necessary, as they run certain tests, sanitisers, and formatters."),(0,l.kt)("p",null,"The project provides a ",(0,l.kt)("inlineCode",{parentName:"p"},".pre-commit-config.yaml")," file that is used to setup git ",(0,l.kt)("em",{parentName:"p"},"pre-commit hooks"),"."),(0,l.kt)("p",null,"On commit locally, code is automatically formatted and checked for security vulnerabilities using pre-commit git hooks."),(0,l.kt)("h3",{id:"installation"},"Installation"),(0,l.kt)("p",null,"To initialize pre-commit in your local repository, run"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"pre-commit install\n")),(0,l.kt)("p",null,"This tells pre-commit to run for this repository on every commit."),(0,l.kt)("h3",{id:"usage"},"Usage"),(0,l.kt)("p",null,"Pre-commit will run on every commit, but can also be run manually on all files:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"pre-commit run --all-files\n")),(0,l.kt)("p",null,"Pre-commit tests can be skipped on commits with ",(0,l.kt)("inlineCode",{parentName:"p"},"git commit --no-verify"),"."),(0,l.kt)("admonition",{type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"If you have to skip the pre-commit tests, you're probably doing something you're not supposed to, and whoever commits after you might have to fix your \"mistakes\". Consider updating the pre-commit hooks if your code is non-compliant.")),(0,l.kt)("h3",{id:"hooks"},"Hooks"),(0,l.kt)("details",null,(0,l.kt)("summary",null,"Overview"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Repository"),(0,l.kt)("th",{parentName:"tr",align:null},"Hook"),(0,l.kt)("th",{parentName:"tr",align:null},"Purpose"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://github.com/pre-commit/pre-commit-hooks"},"pre-commit/pre-commit-hooks")),(0,l.kt)("td",{parentName:"tr",align:null},"check-ast"),(0,l.kt)("td",{parentName:"tr",align:null},"Check whether files parse as valid python")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null},"check-merge-conflict"),(0,l.kt)("td",{parentName:"tr",align:null},"Check for files that contain merge conflict strings")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null},"check-case-conflict"),(0,l.kt)("td",{parentName:"tr",align:null},"Check for files with names that would conflict on a case-insensitive filesystem")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null},"check-json"),(0,l.kt)("td",{parentName:"tr",align:null},"Verify syntax of all JSON files")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null},"check-toml"),(0,l.kt)("td",{parentName:"tr",align:null},"Verify syntax of all TOML files")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null},"check-yaml"),(0,l.kt)("td",{parentName:"tr",align:null},"Verify syntax of all YAML files")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null},"trailing-whitespace"),(0,l.kt)("td",{parentName:"tr",align:null},"Trim trailing whitespace")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null},"mixed-line-ending"),(0,l.kt)("td",{parentName:"tr",align:null},"Replaces or checks mixed line ending")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null},"detect-private-key"),(0,l.kt)("td",{parentName:"tr",align:null},"Checks for the existence of private keys")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://github.com/compilerla/conventional-pre-commit"},"compilerla/conventional-pre-commit")),(0,l.kt)("td",{parentName:"tr",align:null},"conventional-pre-commit"),(0,l.kt)("td",{parentName:"tr",align:null},"A pre-commit hook to check commit messages for Conventional Commits formatting")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://github.com/ambv/black"},"ambv/black")),(0,l.kt)("td",{parentName:"tr",align:null},"black"),(0,l.kt)("td",{parentName:"tr",align:null},"Python code formatter")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://github.com/PyCQA/bandit"},"PyCQA/bandit")),(0,l.kt)("td",{parentName:"tr",align:null},"bandit"),(0,l.kt)("td",{parentName:"tr",align:null},"A security linter designed to find common security issues in Python code")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://github.com/econchick/interrogate"},"econchick/interrogate")),(0,l.kt)("td",{parentName:"tr",align:null},"interrogate"),(0,l.kt)("td",{parentName:"tr",align:null},"Check the code base for missing docstrings")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://github.com/hadialqattan/pycln"},"hadialqattan/pycln")),(0,l.kt)("td",{parentName:"tr",align:null},"pycln"),(0,l.kt)("td",{parentName:"tr",align:null},"Finds and removes unused import statements")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://github.com/pycqa/isort"},"pycqa/isort")),(0,l.kt)("td",{parentName:"tr",align:null},"isort"),(0,l.kt)("td",{parentName:"tr",align:null},"Sort imports alphabetically, and automatically separated into sections and by type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://github.com/pre-commit/mirrors-prettier"},"pre-commit/mirrors-prettier")),(0,l.kt)("td",{parentName:"tr",align:null},"prettier"),(0,l.kt)("td",{parentName:"tr",align:null},"TypeScript/JavaScript/JSON ++ code formatter")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://github.com/pre-commit/mirrors-eslint"},"pre-commit/mirrors-eslint")),(0,l.kt)("td",{parentName:"tr",align:null},"eslint"),(0,l.kt)("td",{parentName:"tr",align:null},"Helps you find and fix problems in your JavaScript code")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://gitlab.com/pycqa/flake8"},"pycqa/flake8")),(0,l.kt)("td",{parentName:"tr",align:null},"flake8"),(0,l.kt)("td",{parentName:"tr",align:null},"Check the style and quality of Python code")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://github.com/equinor/template-fastapi-react/blob/main/.pre-commit-config.yaml"},"local")),(0,l.kt)("td",{parentName:"tr",align:null},"mypy"),(0,l.kt)("td",{parentName:"tr",align:null},"Python type checker")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null},"pytest"),(0,l.kt)("td",{parentName:"tr",align:null},"Python test runner")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null}))))),(0,l.kt)("h2",{id:"api"},"API"),(0,l.kt)("p",null,"From inside the /api folder."),(0,l.kt)("h3",{id:"create-virtualenv"},"Create virtualenv"),(0,l.kt)("p",null,"Virtual environment is used for running unit tests with pre-commit and upgrade packages. It also can be used to run the application if you not are using Docker."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"python3 -m venv .venv\n")),(0,l.kt)("h3",{id:"activate-virtualenv"},"Activate virtualenv"),(0,l.kt)(i.Z,{groupId:"operating-system",mdxType:"Tabs"},(0,l.kt)(r.Z,{value:"linux",label:"Linux",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"source .venv/bin/activate\n"))),(0,l.kt)(r.Z,{value:"windows",label:"Windows",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-powershell"},".\\venv\\Scripts\\Activate.ps1\npip install --upgrade pip\n")))),(0,l.kt)("h3",{id:"install-poetry"},"Install Poetry"),(0,l.kt)("p",null,"Poetry is used to manage Python package dependencies."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ pip install poetry\n$ poetry config virtualenvs.create false # Not create venv\n")),(0,l.kt)("p",null,"The installation instructions can be found ",(0,l.kt)("a",{parentName:"p",href:"https://python-poetry.org/docs/#installation"},"here"),"."),(0,l.kt)("h3",{id:"install-packages"},"Install packages"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ poetry install\n")),(0,l.kt)("h2",{id:"web"},"Web"),(0,l.kt)("p",null,"From inside the /web folder."),(0,l.kt)("h3",{id:"package-management"},"Package management"),(0,l.kt)("p",null,"This project uses ",(0,l.kt)("strong",{parentName:"p"},"Yarn 2 Plug'n'Play")," to manage web package dependencies.\nThat means there is no need to run npm/yarn install.\nHowever, if you want to add/remove/update packages, you need yarn installed locally."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ npm install -g yarn\n")),(0,l.kt)("h4",{id:"yarn-pnp-in-jetbrains-ides"},"Yarn PnP in Jetbrains IDEs"),(0,l.kt)("p",null,"To let the IDE know that dependencies can be found in ",(0,l.kt)("inlineCode",{parentName:"p"},".yarn")," instead of ",(0,l.kt)("inlineCode",{parentName:"p"},"node_modules"),", follow these steps; ",(0,l.kt)("a",{parentName:"p",href:"https://www.jetbrains.com/help/idea/installing-and-removing-external-software-using-node-package-manager.html#ws_npm_yarn_set_up_yarn2"},"https://www.jetbrains.com/help/idea/installing-and-removing-external-software-using-node-package-manager.html#ws_npm_yarn_set_up_yarn2")),(0,l.kt)("h4",{id:"yarn-pnp-in-vscode"},"Yarn PnP in VSCode"),(0,l.kt)("p",null,"Because the project uses Yarn PnP, VSCode's language server must use the same typescript executable as the project in order to access dependencies. This is located in ",(0,l.kt)("inlineCode",{parentName:"p"},"web/.yarn/sdks/typescript/lib"),". To use this version, simply open a ",(0,l.kt)("inlineCode",{parentName:"p"},".ts(x)")," file, open the command palette (default ",(0,l.kt)("inlineCode",{parentName:"p"},"Ctrl+Shift+P")," or ",(0,l.kt)("inlineCode",{parentName:"p"},"Cmd+Shift+P"),"), find ",(0,l.kt)("inlineCode",{parentName:"p"},"TypeScript: Select TypeScript Version...")," and select ",(0,l.kt)("inlineCode",{parentName:"p"},"Use Workspace Version"),"."),(0,l.kt)("p",null,"Not using the correct typescript executable might cause ",(0,l.kt)("inlineCode",{parentName:"p"},"Cannot find module '***' or its corresponding type declarations.")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.")," errors."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5fef8d46.fc4c9a16.js b/assets/js/5fef8d46.fc4c9a16.js new file mode 100644 index 00000000..680e26da --- /dev/null +++ b/assets/js/5fef8d46.fc4c9a16.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[219],{5714:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>d,default:()=>l,frontMatter:()=>a,metadata:()=>u,toc:()=>c});var i=n(7462),o=(n(7294),n(3905)),r=(n(1839),n(814));const a={},d="Adding features",u={unversionedId:"contribute/development-guide/coding/extending-the-api/adding-features/index",id:"contribute/development-guide/coding/extending-the-api/adding-features/index",title:"Adding features",description:"A feature has this structure.",source:"@site/docs/contribute/development-guide/coding/extending-the-api/adding-features/index.md",sourceDirName:"contribute/development-guide/coding/extending-the-api/adding-features",slug:"/contribute/development-guide/coding/extending-the-api/adding-features/",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/extending-the-api/adding-features/index.md",tags:[],version:"current",frontMatter:{},sidebar:"contribute",previous:{title:"Repositories",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories"},next:{title:"Controller",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllers"}},s={},c=[{value:"Register a feature",id:"register-a-feature",level:2}],p={toc:c};function l(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,i.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"adding-features"},"Adding features"),(0,o.kt)("p",null,"A feature has this structure."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"\u251c\u2500\u2500 todo/\n\u2502 \u251c\u2500\u2500 use_cases/ - Application logic\n\u2502 \u251c\u2500\u2500 exceptions.py - Exceptions classes (optional)\n\u2502 \u2514\u2500\u2500 controller.py - The entrypoint\n\u2514\u2500\u2500 ...\n")),(0,o.kt)("p",null,"Define endpoints in the controller that calls use cases that implements the application logic."),(0,o.kt)("h2",{id:"register-a-feature"},"Register a feature"),(0,o.kt)("p",null,"Import the router of the feature and include it to the app."),(0,o.kt)(r.Z,{language:"jsx",mdxType:"CodeBlock"},'import click\nfrom fastapi import APIRouter, FastAPI, Security\nfrom starlette.middleware import Middleware\n\nfrom authentication.authentication import auth_with_jwt\nfrom common.exception_handlers import add_exception_handlers\nfrom common.middleware import LocalLoggerMiddleware, OpenCensusRequestLoggingMiddleware\nfrom common.responses import responses\nfrom config import config\nfrom features.health_check import health_check_feature\nfrom features.todo import todo_feature\nfrom features.whoami import whoami_feature\n\ndescription_md = """\n### Description\nA RESTful API for handling todo items.\n\nAnyone in Equinor are authorized to use the API.\n * Click **Authorize** to login and start testing.\n\n### Resources\n * [Docs](https://equinor.github.io/template-fastapi-react/)\n * [Github](https://github.com/equinor/template-fastapi-react)\n\n For questions about usage or expanding the API, create issue on Github or see docs.\n"""\n\n\ndef create_app() -> FastAPI:\n public_routes = APIRouter()\n public_routes.include_router(health_check_feature.router)\n\n authenticated_routes = APIRouter()\n authenticated_routes.include_router(todo_feature.router)\n authenticated_routes.include_router(whoami_feature.router)\n\n middleware = [Middleware(LocalLoggerMiddleware)]\n if config.APPINSIGHTS_CONSTRING:\n middleware.append(Middleware(OpenCensusRequestLoggingMiddleware))\n\n app = FastAPI(\n title="Template FastAPI React",\n version="1.4.0", # x-release-please-version\n description=description_md,\n responses=responses,\n middleware=middleware,\n license_info={"name": "MIT", "url": "https://github.com/equinor/template-fastapi-react/blob/main/LICENSE.md"},\n swagger_ui_init_oauth={\n "clientId": config.OAUTH_CLIENT_ID,\n "appName": "TemplateFastAPIReact",\n "usePkceWithAuthorizationCodeGrant": True,\n "scopes": config.OAUTH_AUTH_SCOPE,\n "useBasicAuthenticationWithAccessCodeGrant": True,\n },\n )\n\n add_exception_handlers(app)\n\n app.include_router(authenticated_routes, dependencies=[Security(auth_with_jwt)])\n app.include_router(public_routes)\n\n return app\n\n\n@click.group()\ndef cli() -> None:\n pass\n\n\n@cli.command()\ndef run() -> None:\n import uvicorn\n\n uvicorn.run(\n "app:create_app",\n host="0.0.0.0", # noqa:S104\n port=5000,\n factory=True,\n reload=config.ENVIRONMENT == "local",\n log_level=config.log_level,\n )\n\n\nif __name__ == "__main__":\n cli() # run commands in cli() group\n'))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/61b19cc7.35a6f195.js b/assets/js/61b19cc7.35a6f195.js new file mode 100644 index 00000000..e68bd01f --- /dev/null +++ b/assets/js/61b19cc7.35a6f195.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[118],{3214:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>p,frontMatter:()=>n,metadata:()=>l,toc:()=>u});var r=o(7462),a=(o(7294),o(3905));o(1839);const n={},s="Ground rules",l={unversionedId:"contribute/ground-rules",id:"contribute/ground-rules",title:"Ground rules",description:"* For major changes, please open an issue first to discuss what you would like to change.",source:"@site/docs/contribute/02-ground-rules.md",sourceDirName:"contribute",slug:"/contribute/ground-rules",permalink:"/template-fastapi-react/docs/contribute/ground-rules",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/02-ground-rules.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"contribute",previous:{title:"How to start contributing",permalink:"/template-fastapi-react/docs/contribute/how-to-start-contributing"},next:{title:"Development guide",permalink:"/template-fastapi-react/docs/category/development-guide"}},i={},u=[{value:"Pull Requests",id:"pull-requests",level:2},{value:"Git commit format",id:"git-commit-format",level:2}],m={toc:u};function p(e){let{components:t,...o}=e;return(0,a.kt)("wrapper",(0,r.Z)({},m,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"ground-rules"},"Ground rules"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"For major changes, please open an issue first to discuss what you would like to change.",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Search for existing issues and pull requests on the ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/projects/1"},"project development board")," before creating your own."))),(0,a.kt)("li",{parentName:"ul"},"Contributors should fork the repository and work on fixes or enhancements on their own fork.",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Use the ",(0,a.kt)("a",{parentName:"li",href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork"},"pull request feature")," to submit your changes to this repository."),(0,a.kt)("li",{parentName:"ul"},"All pull requests should be rebased (with main) and commits squashed prior to the final merge process."),(0,a.kt)("li",{parentName:"ul"},"Use ",(0,a.kt)("a",{parentName:"li",href:"https://www.conventionalcommits.org/en/v1.0.0/"},"conventional commit")," formatting for commit messages, so that it's possible to auto-generate the changelogs."))),(0,a.kt)("li",{parentName:"ul"},"Use a separate branch for each issue you\u2019re working on.",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Do not combine fixes for multiple issues into one branch."))),(0,a.kt)("li",{parentName:"ul"},"Please include unit tests with all your code changes.",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"All unit tests must be 100% passing before the pull requests will be approved and merged.")))),(0,a.kt)("h2",{id:"pull-requests"},"Pull Requests"),(0,a.kt)("p",null,"Please try to make your pull request easy to review for us."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Make small pull requests. The smaller, the faster to review and the more likely it will be merged soon."),(0,a.kt)("li",{parentName:"ul"},"Don't make changes unrelated to the goals of your PR.",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"There might be typos on some comments, or perhaps a function is in need of refactoring - regardless, if those changes are not related to your PR, please implement those changes in another PR.")))),(0,a.kt)("p",null,"While you're writing up the pull request, you can add Closes #XXX in the message body where #XXX is the issue you're fixing. Therefore, an example would be Closes #42 would close issue #42."),(0,a.kt)("h2",{id:"git-commit-format"},"Git commit format"),(0,a.kt)("p",null,"We have very precise rules over how our git commit messages can be formatted."),(0,a.kt)("p",null,"We are using the ",(0,a.kt)("a",{parentName:"p",href:"https://www.conventionalcommits.org/en/v1.0.0/"},"conventional commits")," formatting for commit messages."),(0,a.kt)("p",null,"Here\u2019s an example commit message:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"type: short description of what you did (imperative tense) <= 50 chars\n\nWhen necessary, mote details can come here, until 72 chars each line.\n\nBREAKING CHANGE: some description\n\nFixes #1234\n")),(0,a.kt)("p",null,"The type can be one of these types: feat, fix, build, ci, docs, style, refactor, test, and chore."),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Summary should:"),(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},"Be written in imperative, present tense, e.g. write ",(0,a.kt)("inlineCode",{parentName:"li"},"add")," instead of ",(0,a.kt)("inlineCode",{parentName:"li"},"added")," or ",(0,a.kt)("inlineCode",{parentName:"li"},"adds"),"."),(0,a.kt)("li",{parentName:"ul"},"Don't capitalize the first letter."),(0,a.kt)("li",{parentName:"ul"},"Don't write dot (.) at the end."))),(0,a.kt)("details",null,(0,a.kt)("summary",null,"An example"),(0,a.kt)("p",null,"patches (1.0.0 \u2192 1.0.1)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'git commit -a -m "fix(parsing): fixed a bug in our parser"\n')),(0,a.kt)("p",null,"features (1.0.0 \u2192 1.1.0)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'git commit -a -m "feat(parser): we now have a parser \\o/"\n')),(0,a.kt)("p",null,"breaking changes (1.0.0 \u2192 2.0.0)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'git commit -a -m "feat(new-parser): introduces a new parsing library\nBREAKING CHANGE: new library does not support foo-construct"\n')),(0,a.kt)("p",null,"Complete:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"refactor!: foo-bar replaces bar-foo\n\nbar-foo does not fit other solutions, use standard convention foo-bar\n\nAB#11\nCloses #22, AB#33, equinor/otherrepo#44\n\nBREAKING CHANGE:\n\n'bar-foo' command has changed from 'bar-foo' to 'foo-bar'\n\nTo migrate your project, change all command where you use 'bar-foo' with 'foo-bar'\n\nCo-authored-by: Elliot Alderson\n"))),(0,a.kt)("p",null,"This leads to more readable messages that are easy to follow when looking through the project history."),(0,a.kt)("p",null,"It is important to note that we use the git commit messages to auto-generate changelogs for each release."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6d61db34.31b6f0e7.js b/assets/js/6d61db34.31b6f0e7.js new file mode 100644 index 00000000..a4b2c1d0 --- /dev/null +++ b/assets/js/6d61db34.31b6f0e7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[260],{4564:e=>{e.exports=JSON.parse('{"title":"Concepts","description":"General introductions to complex domain-specific topics.","slug":"/category/concepts","permalink":"/template-fastapi-react/docs/category/concepts","navigation":{"previous":{"title":"Overview","permalink":"/template-fastapi-react/docs/about/overview"},"next":{"title":"Task","permalink":"/template-fastapi-react/docs/about/concepts/task"}}}')}}]); \ No newline at end of file diff --git a/assets/js/73611911.902cc1fc.js b/assets/js/73611911.902cc1fc.js new file mode 100644 index 00000000..03ce6e95 --- /dev/null +++ b/assets/js/73611911.902cc1fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[250],{4678:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var n=i(7462),d=(i(7294),i(3905)),o=(i(1839),i(814));const s={},a="Adding entities",r={unversionedId:"contribute/development-guide/coding/extending-the-api/adding-entities",id:"contribute/development-guide/coding/extending-the-api/adding-entities",title:"Adding entities",description:"Entities form the domain model of the application.",source:"@site/docs/contribute/development-guide/coding/extending-the-api/02-adding-entities.md",sourceDirName:"contribute/development-guide/coding/extending-the-api",slug:"/contribute/development-guide/coding/extending-the-api/adding-entities",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-entities",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/extending-the-api/02-adding-entities.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"contribute",previous:{title:"Extending the API",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/"},next:{title:"Adding data providers",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/"}},c={},l=[{value:"Testing entities",id:"testing-entities",level:2}],m={toc:l};function p(t){let{components:e,...i}=t;return(0,d.kt)("wrapper",(0,n.Z)({},m,i,{components:e,mdxType:"MDXLayout"}),(0,d.kt)("h1",{id:"adding-entities"},"Adding entities"),(0,d.kt)("p",null,"Entities form the domain model of the application."),(0,d.kt)("p",null,"An entity can be an object with methods, or it can be a set of data structures and functions. It should be a regular\nclass, a dataclass, or a value object (if all the properties are the same, two objects are identical). Entities hold\ndata (state) and logic reusable for various applications."),(0,d.kt)(o.Z,{language:"jsx",mdxType:"CodeBlock"},'from dataclasses import asdict, dataclass, fields\n\n\n@dataclass(frozen=True)\nclass TodoItem:\n id: str\n user_id: str\n title: str\n is_completed: bool = False\n\n def to_dict(self) -> dict[str, str | bool]:\n return asdict(self)\n\n @classmethod\n def from_dict(cls, dict_: dict[str, str | bool]) -> "TodoItem":\n class_fields = {f.name for f in fields(cls)}\n if "_id" in dict_:\n dict_["id"] = dict_.pop("_id")\n data = {k: v for k, v in dict_.items() if k in class_fields}\n return TodoItem(**data) # type:ignore\n'),(0,d.kt)("admonition",{type:"info"},(0,d.kt)("p",{parentName:"admonition"},"Entities must not depend on anything, except possibly other entities."),(0,d.kt)("p",{parentName:"admonition"},"Entities should be the most stable code within your application."),(0,d.kt)("p",{parentName:"admonition"},"Entities should not be affected by any change external to them.")),(0,d.kt)("h2",{id:"testing-entities"},"Testing entities"),(0,d.kt)(o.Z,{language:"jsx",mdxType:"CodeBlock"},'import uuid\n\nfrom features.todo.entities.todo_item import TodoItem\n\n\ndef test_todo_item_init():\n id = str(uuid.uuid4())\n todo = TodoItem(id=id, title="title 1", is_completed=False, user_id="xyz")\n assert todo.id == id\n assert todo.title == "title 1"\n assert not todo.is_completed\n\n\ndef test_todo_item_from_dict():\n id = str(uuid.uuid4())\n init_dict = {"id": id, "title": "title 1", "is_completed": False, "user_id": "xyz"}\n todo = TodoItem.from_dict(init_dict)\n\n assert todo.id == id\n assert todo.title == "title 1"\n assert not todo.is_completed\n\n\ndef test_todo_item_comparison():\n id = str(uuid.uuid4())\n init_dict = {"id": id, "title": "title 1", "is_completed": False, "user_id": "xyz"}\n todo1 = TodoItem.from_dict(init_dict)\n todo2 = TodoItem.from_dict(init_dict)\n\n assert todo1 == todo2\n'))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/75878fc8.2cbd87ce.js b/assets/js/75878fc8.2cbd87ce.js new file mode 100644 index 00000000..735e99b5 --- /dev/null +++ b/assets/js/75878fc8.2cbd87ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[990],{9095:(e,t,a)=>{a.r(t),a.d(t,{contentTitle:()=>m,default:()=>o,frontMatter:()=>c,metadata:()=>l,toc:()=>p});var i=a(7462),r=(a(7294),a(3905));const c={},m=void 0,l={type:"mdx",permalink:"/template-fastapi-react/changelog",source:"@site/src/pages/changelog.md",description:"Warning: This is the development version.",frontMatter:{}},p=[{value:"1.5.0 (2024-09-04)",id:"150-2024-09-04",level:2},{value:"Features",id:"features",level:3},{value:"Bug Fixes",id:"bug-fixes",level:3},{value:"1.4.0 (2023-03-01)",id:"140-2023-03-01",level:2},{value:"Features",id:"features-1",level:3},{value:"Bug Fixes",id:"bug-fixes-1",level:3},{value:"Tests",id:"tests",level:3},{value:"Build System",id:"build-system",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores",level:3},{value:"Code Refactoring",id:"code-refactoring",level:3},{value:"Continuous Integration",id:"continuous-integration",level:3},{value:"Documentation",id:"documentation",level:3},{value:"1.3.0 (2022-11-11)",id:"130-2022-11-11",level:2},{value:"Features",id:"features-2",level:3},{value:"Bug Fixes",id:"bug-fixes-2",level:3},{value:"1.2.1 (2022-11-09)",id:"121-2022-11-09",level:2},{value:"Bug Fixes",id:"bug-fixes-3",level:3},{value:"1.2.0 (2022-11-09)",id:"120-2022-11-09",level:2},{value:"Features",id:"features-3",level:3},{value:"Bug Fixes",id:"bug-fixes-4",level:3},{value:"1.1.1 (2022-11-04)",id:"111-2022-11-04",level:2},{value:"Bug Fixes",id:"bug-fixes-5",level:3},{value:"1.1.0 (2022-11-04)",id:"110-2022-11-04",level:2},{value:"Features",id:"features-4",level:3},{value:"Bug Fixes",id:"bug-fixes-6",level:3},{value:"1.0.0 (2022-09-07)",id:"100-2022-09-07",level:2},{value:"Features",id:"features-5",level:3},{value:"Bug Fixes",id:"bug-fixes-7",level:3}],n={toc:p};function o(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,i.Z)({},n,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Warning: This is the development version."),(0,r.kt)("h1",{id:"changelog"},"Changelog"),(0,r.kt)("p",null,"All notable changes to this project will be documented in this file. See ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/conventional-changelog/standard-version"},"standard-version")," for commit guidelines."),(0,r.kt)("h2",{id:"150-2024-09-04"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/boilerplate-clean-architecture/compare/v1.4.0...v1.5.0"},"1.5.0")," (2024-09-04)"),(0,r.kt)("h3",{id:"features"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add Popover component (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/c8964bd89fee3f240357d63453051b132e1ecdfa"},"c8964bd"),")"),(0,r.kt)("li",{parentName:"ul"},"add react context to handle todo state (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/510e4704f67c9094176514c2a3ed6efc39997037"},"510e470"),")"),(0,r.kt)("li",{parentName:"ul"},"add reusable IconButton component (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/f933e30f34a1bdb0e3d56d73b470f6816b532973"},"f933e30"),")"),(0,r.kt)("li",{parentName:"ul"},"replace exception handling (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/35ae0ef0bbbaf06ca9a4bf68618ca29718b5d00a"},"35ae0ef"),")"),(0,r.kt)("li",{parentName:"ul"},"replace prettier and eslint with biome (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/afe2cb978ef4260d88835fc5f62db69164aa2fb2"},"afe2cb9"),")")),(0,r.kt)("h3",{id:"bug-fixes"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"docs reference out of date (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/bd4cc8d3d2a3b580c0df8bffa7378fc0a2c6413c"},"bd4cc8d"),")"),(0,r.kt)("li",{parentName:"ul"},"extras typing is not always dict","[str,str]"," (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/7ba069436255dc88372fd9b73db854477e7bf6f8"},"7ba0694"),")"),(0,r.kt)("li",{parentName:"ul"},"make authentication work again (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/3e8da0fd68a6619ca32466e934bb915652cce85f"},"3e8da0f"),")"),(0,r.kt)("li",{parentName:"ul"},"mypy error (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/66303aa35f571e8588c3342bdb25cb56566085a2"},"66303aa"),")"),(0,r.kt)("li",{parentName:"ul"},"ran api again (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/afa8158c9815352de7195d6d988302a6d7d87ffb"},"afa8158"),")"),(0,r.kt)("li",{parentName:"ul"},"ran generator (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/19ff51bf4bc99751af93a13a36ea8f3990e6c64c"},"19ff51b"),")"),(0,r.kt)("li",{parentName:"ul"},"replace gunicorn with horizontal scaling (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/a8baa0f9ac2f246b17f55aada11845ddcaee15cc"},"a8baa0f"),")"),(0,r.kt)("li",{parentName:"ul"},"The template no longer use the node image in production (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/f9b68d9ec28482a71dd721e0ff1a42c3b6565ed5"},"f9b68d9"),")"),(0,r.kt)("li",{parentName:"ul"},"update old references (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/5152a1ff419336428b69c7dc7212b1d422fb93bf"},"5152a1f"),")"),(0,r.kt)("li",{parentName:"ul"},"update to match new parameters for get pydantic json schema (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/boilerplate-clean-architecture/commit/c6b14a8da9639cd2b5fe04b25b52310aa1017664"},"c6b14a8"),")")),(0,r.kt)("h2",{id:"140-2023-03-01"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/v1.3.0...v1.4.0"},"1.4.0")," (2023-03-01)"),(0,r.kt)("h3",{id:"features-1"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Add info popover with version (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/28aa51377592b7c5bb9b59d245ab275b47a52653"},"28aa513"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/154"},"#154"))),(0,r.kt)("h3",{id:"bug-fixes-1"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add error handling of version file fetch (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a4f68897e446ebb4ebd91f58110bfa403df53fc9"},"a4f6889"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," handle lists in create_response (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/333f7d4afbac95609ae15b05b3a8f1d978ee1107"},"333f7d4"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," make health-check return PlainTextResponse (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/12d51697ee78edbbe519c874b4fddfb8f0786718"},"12d5169"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," remove empty default pydantic field in models (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0424282f7dee8662c6d0b8faa01f78bdaced3a3f"},"0424282"),")"),(0,r.kt)("li",{parentName:"ul"},"remove /api as root path. (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/208ceb98dcf269e18b43d6ffda04dd265bfe868c"},"208ceb9"),")"),(0,r.kt)("li",{parentName:"ul"},"replace deprecated output definition (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c53b003498afb8f2568815a4c3da56f8d15542af"},"c53b003"),")")),(0,r.kt)("h3",{id:"tests"},"Tests"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Upgrade pre-commits (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bd8f1106cde2ec215ea9a519a4afd5daa460fb96"},"bd8f110"),")")),(0,r.kt)("h3",{id:"build-system"},"Build System"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add typescript plugin (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/83ade0cdb86d15bbe072e036fbe0ac1b106f8015"},"83ade0c"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ci/cd:")," update flake8 repo location (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e6953ad3ca280975c9589939a1e728a73fbfd418"},"e6953ad"),")"),(0,r.kt)("li",{parentName:"ul"},"enable scripts to build necessary packages (YN0007) (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f1cf2c3f7d6fc7190535c8abf97c55bfa6839e56"},"f1cf2c3"),")"),(0,r.kt)("li",{parentName:"ul"},"missing peer dependencies (YN0002) (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9e8981d581c2509039beda4a7a34980c574bf179"},"9e8981d"),")"),(0,r.kt)("li",{parentName:"ul"},"set yarn version (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/afb5834883d6d1f01026d602fb434db38443c8b0"},"afb5834"),")")),(0,r.kt)("h3",{id:"miscellaneous-chores"},"Miscellaneous Chores"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Add yarn upgrade-interactive (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/91d998f317d8b697a75a920108a94e5479b13f78"},"91d998f"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," return Pydantic model instead of dict (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/427a9633d31cc3298d463fc4f1a225bd36f76867"},"427a963"),")"),(0,r.kt)("li",{parentName:"ul"},"ignore diffs on yarn plugins (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/78017e5216f863b19842e09574bf035db78f88de"},"78017e5"),")"),(0,r.kt)("li",{parentName:"ul"},"remove empty catch (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0264cb5960dfee0cfb36dcf1e9ebbd099ddac51e"},"0264cb5"),")"),(0,r.kt)("li",{parentName:"ul"},"remove redundant conditional (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/925d5b4a5391b39acfc6e639ee9a47a676697ebb"},"925d5b4"),")"),(0,r.kt)("li",{parentName:"ul"},"type CommitInfo (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2179e13f256cba46959c101f76593f262daee5d4"},"2179e13"),")"),(0,r.kt)("li",{parentName:"ul"},"Update all web packages (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a193af56c4e0ed68be9b7ad05d7a5747130c0321"},"a193af5"),")"),(0,r.kt)("li",{parentName:"ul"},"update dependencies (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fb2cf508f3f30f12bf39f23a9a630d92e12f47b0"},"fb2cf50"),")"),(0,r.kt)("li",{parentName:"ul"},"update sdks (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/385a55eefab23b695e2a4f1f12b1ca97e93a9820"},"385a55e"),")"),(0,r.kt)("li",{parentName:"ul"},"upgrade versions (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bc9f6a3dadb920167419e8b66bd79a396c09cad9"},"bc9f6a3"),")"),(0,r.kt)("li",{parentName:"ul"},"upgrade versions (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/041f78e9c0cdb1be8fd83099d33b7c1e36e3633a"},"041f78e"),")")),(0,r.kt)("h3",{id:"code-refactoring"},"Code Refactoring"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," replace response_class with return type annotations (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b1fa3bd6b342ba89e5d2237721573a83cfd503fe"},"b1fa3bd"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ci:")," extract ghcr login into separate step (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0d90fe00438ad9c995198cba8e268c8268af1e4a"},"0d90fe0"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ci:")," remove crazy-max external action (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b41990d92c19d2a661900a208a60d604a5ab470c"},"b41990d"),")"),(0,r.kt)("li",{parentName:"ul"},"create empty yarn.lock (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/39050e72af50debd95380590fe4ee803a5995589"},"39050e7"),")"),(0,r.kt)("li",{parentName:"ul"},"separate responsibilities by moving useEffect to a custom hook (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cc33a5d1f856aff8e529c4c3df43d326fb5a8a90"},"cc33a5d"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"workflow:")," Fix linting errors (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8ea9f69fbb5919568ba99fed659be77e18647d48"},"8ea9f69"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"workflow:")," rename and restructure workflows (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f08fffaf7ffaf46503debfc4e4bd60320592a84e"},"f08fffa"),")")),(0,r.kt)("h3",{id:"continuous-integration"},"Continuous Integration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Add rollback workflow (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b1cca70e53c7080427979b3efe0ee30ccffafdd0"},"b1cca70"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/153"},"#153")),(0,r.kt)("li",{parentName:"ul"},"allow publishing multiple tags at once (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/4c5d8677395054254551757f871570dad1695933"},"4c5d867"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/153"},"#153")),(0,r.kt)("li",{parentName:"ul"},"bump pre-commit hooks (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9a0cea7d6a03aaa99101135f626b948c87dd6882"},"9a0cea7"),")"),(0,r.kt)("li",{parentName:"ul"},"change oauth redurect url to radix playground (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/655c55f5027baea255d29ea881df0030695da5aa"},"655c55f"),")"),(0,r.kt)("li",{parentName:"ul"},"Change version logging format on build (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/49ca8939a6dd8fd753ba171653a5977a869a0249"},"49ca893"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/154"},"#154")),(0,r.kt)("li",{parentName:"ul"},"correct permissions (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6d9d563a3cf3db335c1d34b3630ac64212881186"},"6d9d563"),")"),(0,r.kt)("li",{parentName:"ul"},"Fix bug in publish docs (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a696a33a9e451f3d261e2b07538aebac418ac3d3"},"a696a33"),")"),(0,r.kt)("li",{parentName:"ul"},"Include all commit types in changelog (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/73cfaaadf916c7e15accb347183f89e50651f279"},"73cfaaa"),")"),(0,r.kt)("li",{parentName:"ul"},"login as the service principal to request an access token (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fabe3b469ce49f9c64ff3e0781d6564c78f709f5"},"fabe3b4"),")"),(0,r.kt)("li",{parentName:"ul"},"pass tag name to publish-image workflow (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/dcedc16f6ab2d16d74f4c41ffaf4100f638b88dc"},"dcedc16"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/153"},"#153")),(0,r.kt)("li",{parentName:"ul"},"remove secret as input to reusable workflow (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1ec6cbb2e5360de99d99416739093a02a38c5ba7"},"1ec6cbb"),")"),(0,r.kt)("li",{parentName:"ul"},"specify playground context (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/142bc139c4cd4b7e145a00dde2161a502afa9363"},"142bc13"),")")),(0,r.kt)("h3",{id:"documentation"},"Documentation"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add what is fastapi (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bbec23b85d2b0c1fadfd4e4ea6e3df7e63683e78"},"bbec23b"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ci:")," add comment to azure login (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/f6b9c962d23a7eb2832e14b1d37d9e8b14419f5d"},"f6b9c96"),")"),(0,r.kt)("li",{parentName:"ul"},"rewrite 01-setup Yarn PnP in VSCode (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/df4c7d0dadbbccaafa6fa5c13d0bd3b16faf5243"},"df4c7d0"),")"),(0,r.kt)("li",{parentName:"ul"},"update link to radix playground (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6c932c3c48739bce3cc21e24a416405a64e5cc31"},"6c932c3"),")")),(0,r.kt)("h2",{id:"130-2022-11-11"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/v1.2.1...v1.3.0"},"1.3.0")," (2022-11-11)"),(0,r.kt)("h3",{id:"features-2"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"allow each user to have their own todos (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9456ab84f5f5e0b804bd0011037ee72d7da49fbb"},"9456ab8"),")")),(0,r.kt)("h3",{id:"bug-fixes-2"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add missing dependency without causing infinite loop of rerendering (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8f5c01d5141c4dbd4ac9b99ebc39ae10f378147f"},"8f5c01d"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," raise MissingPrivilegeException when relevant (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0c55af393a4ffc189a068c821545261eb10ef7d4"},"0c55af3"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"api:")," raise MissingPrivilegeException when relevant (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/613cc4257699ddb1c2a772b54f28ccec84f2778b"},"613cc42"),")"),(0,r.kt)("li",{parentName:"ul"},"make todo title required, not optional (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bc8dab62079ded3e87c1113e81f1cd9911ad1a65"},"bc8dab6"),")"),(0,r.kt)("li",{parentName:"ul"},"only allow users to delete their own todos (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1cf1e7a8eefac27552dcdc9df0a30cf59c042eab"},"1cf1e7a"),")"),(0,r.kt)("li",{parentName:"ul"},"test suite (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/31da3f7e720d0838e59e280aa4d873b44e24cecb"},"31da3f7"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"tests:")," fix up integration tests with per-user todos (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b7cc0caa51535020bb329c7c21cde4b458baa81c"},"b7cc0ca"),")")),(0,r.kt)("h2",{id:"121-2022-11-09"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/v1.2.0...v1.2.1"},"1.2.1")," (2022-11-09)"),(0,r.kt)("h3",{id:"bug-fixes-3"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," adding todo item now clears input. (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/82e6f6baee06ccbd50c4d59fe7a9a97a4b1df094"},"82e6f6b"),")")),(0,r.kt)("h2",{id:"120-2022-11-09"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/v1.1.1...v1.2.0"},"1.2.0")," (2022-11-09)"),(0,r.kt)("h3",{id:"features-3"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"expand and visualize auth states (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/51c9870bc657d586464780c664aeb6edb49b5ba2"},"51c9870"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," clear input on add-todo (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d61adc16ea35a25b2d556b61b9d1cf710de41e8e"},"d61adc1"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," visualize loading state better (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6a6ab81bec55bf79aeda5a07e8eff5cdd84b4ab5"},"6a6ab81"),")")),(0,r.kt)("h3",{id:"bug-fixes-4"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"make useTodos simpler to use (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e8f0a1866c594ca0a526bac3ae3e5a1f8551a005"},"e8f0a18"),")")),(0,r.kt)("h2",{id:"111-2022-11-04"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/v1.1.0...v1.1.1"},"1.1.1")," (2022-11-04)"),(0,r.kt)("h3",{id:"bug-fixes-5"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"resolve PR feedback (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bd3debe820f27ebf7d892ecbda77720fc66be06b"},"bd3debe"),")")),(0,r.kt)("h2",{id:"110-2022-11-04"},(0,r.kt)("a",{parentName:"h2",href:"https://github.com/equinor/template-fastapi-react/compare/v1.0.0...v1.1.0"},"1.1.0")," (2022-11-04)"),(0,r.kt)("h3",{id:"features-4"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"standardized ErrorResponse model (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/c09e4dccf5abd62fa05e9b1c0a577ea72d0129c4"},"c09e4dc"),")")),(0,r.kt)("h3",{id:"bug-fixes-6"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add types to fixtures (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0528e5beb9bec905cedee1db2af3b2a5248fe85d"},"0528e5b"),")"),(0,r.kt)("li",{parentName:"ul"},"delete non existing item should return 404 (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/43414160eef1bee7ff2ea44c7c9f99e041ccc977"},"4341416"),")")),(0,r.kt)("h2",{id:"100-2022-09-07"},"1.0.0 (2022-09-07)"),(0,r.kt)("h3",{id:"features-5"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add auth (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a201f138ee5a02218b5e4b2b08b0f00f88bb5dd3"},"a201f13"),")"),(0,r.kt)("li",{parentName:"ul"},"add axios (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/88448c2d52007d68651a26d46c6672369172698a"},"88448c2"),")"),(0,r.kt)("li",{parentName:"ul"},"add equinor design system (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b96d4dae0ec65f4938d862bc8bbf079cb5950ae4"},"b96d4da"),")"),(0,r.kt)("li",{parentName:"ul"},"add equinor typeface (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/53a742398782a9452bc61127d62f408a840dfb5a"},"53a7423"),")"),(0,r.kt)("li",{parentName:"ul"},"add eslint to pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/20c872da056b89e038bd87c79e2fcd40bab85cf9"},"20c872d"),")"),(0,r.kt)("li",{parentName:"ul"},"Add extra checks to pre-commit and run safety in venv (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/27a6cbe7bea4843a70947fdcf5ba73f1dd5af871"},"27a6cbe"),")"),(0,r.kt)("li",{parentName:"ul"},"add flake8, safety and pytests to pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/1917997411b7a1f1844c3463388005576d8acc77"},"1917997"),")"),(0,r.kt)("li",{parentName:"ul"},"add mypy type checking to pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/437cedd17cb86165448526fd8011730f4dbe03b6"},"437cedd"),")"),(0,r.kt)("li",{parentName:"ul"},"add prettier (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b1ce63a700471c54b75e5f58c35d0d3ccabdf0d5"},"b1ce63a"),")"),(0,r.kt)("li",{parentName:"ul"},"autogenerate release changelog (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/e463ae2e2694358936802e9fbf6dc3a7cfca846d"},"e463ae2"),")"),(0,r.kt)("li",{parentName:"ul"},"build and push images in ci (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/477ad8564bc92105b990715cc0bebeb5c7aff4d8"},"477ad85"),")"),(0,r.kt)("li",{parentName:"ul"},"create-react-app with typescript and equinor icons (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2cfa523e2e1df8ebe0fa3b003fc6936d1bebaa13"},"2cfa523"),")"),(0,r.kt)("li",{parentName:"ul"},"init todo example (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8beaf084352f16c8715ebe6f77b40d30450d2e04"},"8beaf08"),")"),(0,r.kt)("li",{parentName:"ul"},"official nginx image running unprivileged (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fab0c1445920ae5c0cb0eb05308b6a223aed3de8"},"fab0c14"),")"),(0,r.kt)("li",{parentName:"ul"},"pre-commit in CI from pre-commit-config.yaml (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/5d806b5bd1ceda039670dd3b30ef19de49519a16"},"5d806b5"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"pre-commit:")," Add autoflake to pre-commits (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/8d97b34f7eeb90b00c0c5d2410b820af259ce7b1"},"8d97b34"),"), closes ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/31"},"#31")),(0,r.kt)("li",{parentName:"ul"},"response decorator takes Response type as parameter (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9a7f2287f9bac7e0f68f916c37b4273dc8b95d9b"},"9a7f228"),")"),(0,r.kt)("li",{parentName:"ul"},"reusable gh actions workflows (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d557ebc8438a4b28d83d2f40d8a7aa2991db1197"},"d557ebc"),")"),(0,r.kt)("li",{parentName:"ul"},"show changelog in documentation (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/6da9b86770ffca6431f16b945680a87637268497"},"6da9b86"),")"),(0,r.kt)("li",{parentName:"ul"},"tutorial on authentication (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fd789c0d7bd3dda1e1ce0ee78ee9c73c4670fe41"},"fd789c0"),")")),(0,r.kt)("h3",{id:"bug-fixes-7"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"add missing decorators (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/54fd2f8a3826d2a5bc5bbc7419cbdd83de4811f1"},"54fd2f8"),")"),(0,r.kt)("li",{parentName:"ul"},"add required additional dependencies to eslint pre-commit env (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/cca8509bf7a4edc5c38ad5fe3a7b0812fdb95040"},"cca8509"),")"),(0,r.kt)("li",{parentName:"ul"},"add venv (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d682b0817d735547f3a3cd7391d942983cbf666c"},"d682b08"),")"),(0,r.kt)("li",{parentName:"ul"},"cast variable that cannot be undefined to boolean (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/372f781d805d25f2e7aaa284d3b70622989e9136"},"372f781"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"dev:")," env_file in docker-compose.override.yml (PR ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/39"},"#39"),") (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2aa80bdfc211f44d624f1cdad4f8b0844164c4bf"},"2aa80bd"),")"),(0,r.kt)("li",{parentName:"ul"},"disable pull (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/de2d04530a511a798fb757e85cb07872f0dfb129"},"de2d045"),")"),(0,r.kt)("li",{parentName:"ul"},"duplicated pre-commit hook (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a21f5a69ba1ea3a10371f48071ef2de8b3d56448"},"a21f5a6"),")"),(0,r.kt)("li",{parentName:"ul"},"fix mypy errors (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d9543c187859de7fad59f91b79eaa4f63a56a1c6"},"d9543c1"),")"),(0,r.kt)("li",{parentName:"ul"},"fix pytest_plugin import error (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/b5218196028c904e6a51d9a0971d7637264c87a2"},"b521819"),")"),(0,r.kt)("li",{parentName:"ul"},"lock cryptography dependency since a bad new release. Set authentication scheme to allow for no tokens. Exclude some file from pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ea6a9314482ca75d8d79c999959460b17ceec754"},"ea6a931"),")"),(0,r.kt)("li",{parentName:"ul"},"move Response decorator to controllers (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bd36b4a316f6a2c1216584235eb5dd462f6d0707"},"bd36b4a"),")"),(0,r.kt)("li",{parentName:"ul"},"only run safety hook once (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/bc33372bd57d7b8710cd7460f1c18c6b55c38634"},"bc33372"),")"),(0,r.kt)("li",{parentName:"ul"},"poetry command (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/ccbb2e10845f9cf3215e5e95fd07f21c3b108249"},"ccbb2e1"),")"),(0,r.kt)("li",{parentName:"ul"},"pre-commit (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/5192d0e79e433cf925d0569a237a101f77b68c5b"},"5192d0e"),")"),(0,r.kt)("li",{parentName:"ul"},"python-version (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a9341092771e81aced0ed4481eb582785dd08113"},"a934109"),")"),(0,r.kt)("li",{parentName:"ul"},"remove encryption.py (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a500444b936bcc99bdcd73ebdc6eb9eeb5de2ac3"},"a500444"),")"),(0,r.kt)("li",{parentName:"ul"},"set correct base path for docs (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/0dda0b23b94155f1eb6cd194d31af1f9265ecd2b"},"0dda0b2"),")"),(0,r.kt)("li",{parentName:"ul"},"set correct type on todo local state (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/2a4020ce9f84affb1725f4e4b476dc1c20b67b0e"},"2a4020c"),")"),(0,r.kt)("li",{parentName:"ul"},"turn off eslint rules that are unnecessary or might conflict with prettier (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/d6beaf7426821d5bb5efd68fe6407d13ee1d38d5"},"d6beaf7"),")"),(0,r.kt)("li",{parentName:"ul"},"typo (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/fb557b8adb56fc0d5aa430a1d505d1066be1ed13"},"fb557b8"),")"),(0,r.kt)("li",{parentName:"ul"},"use const on variable that is never reassigned (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/9f7c54304385c49123a3d436b5cce66997ab1e62"},"9f7c543"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"web:")," correct base path (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/a3872d5c67f1764c28d7450e9bf4c350cc0e87b6"},"a3872d5"),")"),(0,r.kt)("li",{parentName:"ul"},"yarn build again (",(0,r.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/commit/dfc48fda537d152974a9610e3263245c69346768"},"dfc48fd"),")")))}o.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/792d5b58.f356f65f.js b/assets/js/792d5b58.f356f65f.js new file mode 100644 index 00000000..81dae3c4 --- /dev/null +++ b/assets/js/792d5b58.f356f65f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[910],{2719:e=>{e.exports=JSON.parse('{"title":"Development guide","description":"This section of the documentation lists instructions and guidelines on how to start developing","slug":"/category/development-guide","permalink":"/template-fastapi-react/docs/category/development-guide","navigation":{"previous":{"title":"Ground rules","permalink":"/template-fastapi-react/docs/contribute/ground-rules"},"next":{"title":"Setup","permalink":"/template-fastapi-react/docs/contribute/development-guide/setup"}}}')}}]); \ No newline at end of file diff --git a/assets/js/814.e703c48f.js b/assets/js/814.e703c48f.js new file mode 100644 index 00000000..1e57df89 --- /dev/null +++ b/assets/js/814.e703c48f.js @@ -0,0 +1 @@ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[814],{814:(e,t,n)=>{"use strict";n.d(t,{Z:()=>q});var o=n(7462),s=n(7294),a=n(2389),r=n(6010),c=n(2949),l=n(6668);function i(){const{prism:e}=(0,l.L)(),{colorMode:t}=(0,c.I)(),n=e.theme,o=e.darkTheme||n;return"dark"===t?o:n}var u=n(5281),p=n(7594),d=n.n(p);const m=/title=(?["'])(?.*?)\1/,g=/\{(?<range>[\d,-]+)\}/,h={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function y(e,t){const n=e.map((e=>{const{start:n,end:o}=h[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null==(t=e.block)?void 0:t.start,null==(n=e.block)?void 0:n.end].filter(Boolean)})).join("|")})\\s*${o})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function f(e,t){let n=e.replace(/\n$/,"");const{language:o,magicComments:s,metastring:a}=t;if(a&&g.test(a)){const e=a.match(g).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${a}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=s[0].className,o=d()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(o),code:n}}if(void 0===o)return{lineClassNames:{},code:n};const r=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return y(["js","jsBlock"],t);case"jsx":case"tsx":return y(["js","jsBlock","jsx"],t);case"html":return y(["js","jsBlock","html"],t);case"python":case"py":case"bash":return y(["bash"],t);case"markdown":case"md":return y(["html","jsx","bash"],t);default:return y(Object.keys(h),t)}}(o,s),c=n.split("\n"),l=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),i=Object.fromEntries(s.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),u=Object.fromEntries(s.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),p=Object.fromEntries(s.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let d=0;d<c.length;){const e=c[d].match(r);if(!e){d+=1;continue}const t=e.slice(1).find((e=>void 0!==e));i[t]?l[i[t]].range+=`${d},`:u[t]?l[u[t]].start=d:p[t]&&(l[p[t]].range+=`${l[p[t]].start}-${d-1},`),c.splice(d,1)}n=c.join("\n");const m={};return Object.entries(l).forEach((e=>{let[t,{range:n}]=e;d()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const b="codeBlockContainer_Ckt0";function k(e){let{as:t,...n}=e;const a=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[o,s]=e;const a=t[o];a&&"string"==typeof s&&(n[a]=s)})),n}(i());return s.createElement(t,(0,o.Z)({},n,{style:a,className:(0,r.Z)(n.className,b,u.k.common.codeBlock)}))}const v={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function E(e){let{children:t,className:n}=e;return s.createElement(k,{as:"pre",tabIndex:0,className:(0,r.Z)(v.codeBlockStandalone,"thin-scrollbar",n)},s.createElement("code",{className:v.codeBlockLines},t))}var N=n(902);const B={attributes:!0,characterData:!0,childList:!0,subtree:!0};function C(e,t){const[n,o]=(0,s.useState)(),a=(0,s.useCallback)((()=>{var t;o(null==(t=e.current)?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,o]);(0,s.useEffect)((()=>{a()}),[a]),function(e,t,n){void 0===n&&(n=B);const o=(0,N.zX)(t),a=(0,N.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(o);return e&&t.observe(e,a),()=>t.disconnect()}),[e,o,a])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const w={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var L={Prism:n(7410).Z,theme:w};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function T(){return T=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},T.apply(this,arguments)}var S=/\r\n|\r|\n/,x=function(e){0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},_=function(e,t){var n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},I=function(e,t){var n=e.plain,o=Object.create(null),s=e.styles.reduce((function(e,n){var o=n.languages,s=n.style;return o&&!o.includes(t)||n.types.forEach((function(t){var n=T({},e[t],s);e[t]=n})),e}),o);return s.root=n,s.plain=T({},n,{backgroundColor:null}),s};function O(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&-1===t.indexOf(o)&&(n[o]=e[o]);return n}const P=function(e){function t(){for(var t=this,n=[],o=arguments.length;o--;)n[o]=arguments[o];e.apply(this,n),j(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?I(e.theme,e.language):void 0;return t.themeDict=n})),j(this,"getLineProps",(function(e){var n=e.key,o=e.className,s=e.style,a=T({},O(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),r=t.getThemeDict(t.props);return void 0!==r&&(a.style=r.plain),void 0!==s&&(a.style=void 0!==a.style?T({},a.style,s):s),void 0!==n&&(a.key=n),o&&(a.className+=" "+o),a})),j(this,"getStyleForToken",(function(e){var n=e.types,o=e.empty,s=n.length,a=t.getThemeDict(t.props);if(void 0!==a){if(1===s&&"plain"===n[0])return o?{display:"inline-block"}:void 0;if(1===s&&!o)return a[n[0]];var r=o?{display:"inline-block"}:{},c=n.map((function(e){return a[e]}));return Object.assign.apply(Object,[r].concat(c))}})),j(this,"getTokenProps",(function(e){var n=e.key,o=e.className,s=e.style,a=e.token,r=T({},O(e,["key","className","style","token"]),{className:"token "+a.types.join(" "),children:a.content,style:t.getStyleForToken(a),key:void 0});return void 0!==s&&(r.style=void 0!==r.style?T({},r.style,s):s),void 0!==n&&(r.key=n),o&&(r.className+=" "+o),r})),j(this,"tokenize",(function(e,t,n,o){var s={code:t,grammar:n,language:o,tokens:[]};e.hooks.run("before-tokenize",s);var a=s.tokens=e.tokenize(s.code,s.grammar,s.language);return e.hooks.run("after-tokenize",s),a}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,o=e.code,s=e.children,a=this.getThemeDict(this.props),r=t.languages[n];return s({tokens:function(e){for(var t=[[]],n=[e],o=[0],s=[e.length],a=0,r=0,c=[],l=[c];r>-1;){for(;(a=o[r]++)<s[r];){var i=void 0,u=t[r],p=n[r][a];if("string"==typeof p?(u=r>0?u:["plain"],i=p):(u=_(u,p.type),p.alias&&(u=_(u,p.alias)),i=p.content),"string"==typeof i){var d=i.split(S),m=d.length;c.push({types:u,content:d[0]});for(var g=1;g<m;g++)x(c),l.push(c=[]),c.push({types:u,content:d[g]})}else r++,t.push(u),n.push(i),o.push(0),s.push(i.length)}r--,t.pop(),n.pop(),o.pop(),s.pop()}return x(c),l}(void 0!==r?this.tokenize(t,o,r,n):[o]),className:"prism-code language-"+n,style:void 0!==a?a.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},t}(s.Component),A="codeLine_lJS_",Z="codeLineNumber_Tfdd",$="codeLineContent_feaV";function z(e){let{line:t,classNames:n,showLineNumbers:a,getLineProps:c,getTokenProps:l}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const i=c({line:t,className:(0,r.Z)(n,a&&A)}),u=t.map(((e,t)=>s.createElement("span",(0,o.Z)({key:t},l({token:e,key:t})))));return s.createElement("span",i,a?s.createElement(s.Fragment,null,s.createElement("span",{className:Z}),s.createElement("span",{className:$},u)):s.createElement(s.Fragment,null,u,s.createElement("br",null)))}var D=n(5999);const H={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function M(e){let{code:t,className:n}=e;const[o,a]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),l=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;const o=document.createElement("textarea"),s=document.activeElement;o.value=e,o.setAttribute("readonly",""),o.style.contain="strict",o.style.position="absolute",o.style.left="-9999px",o.style.fontSize="12pt";const a=document.getSelection();let r=!1;a.rangeCount>0&&(r=a.getRangeAt(0)),n.append(o),o.select(),o.selectionStart=0,o.selectionEnd=e.length;let c=!1;try{c=document.execCommand("copy")}catch{}o.remove(),r&&(a.removeAllRanges(),a.addRange(r)),s&&s.focus()}(t),a(!0),c.current=window.setTimeout((()=>{a(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),s.createElement("button",{type:"button","aria-label":o?(0,D.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,D.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,D.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,r.Z)("clean-btn",n,H.copyButton,o&&H.copyButtonCopied),onClick:l},s.createElement("span",{className:H.copyButtonIcons,"aria-hidden":"true"},s.createElement("svg",{className:H.copyButtonIcon,viewBox:"0 0 24 24"},s.createElement("path",{d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})),s.createElement("svg",{className:H.copyButtonSuccessIcon,viewBox:"0 0 24 24"},s.createElement("path",{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))))}const V="wordWrapButtonIcon_Bwma",W="wordWrapButtonEnabled_EoeP";function R(e){let{className:t,onClick:n,isEnabled:o}=e;const a=(0,D.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return s.createElement("button",{type:"button",onClick:n,className:(0,r.Z)("clean-btn",t,o&&W),"aria-label":a,title:a},s.createElement("svg",{className:V,viewBox:"0 0 24 24","aria-hidden":"true"},s.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})))}function F(e){let{children:t,className:n="",metastring:a,title:c,showLineNumbers:u,language:p}=e;const{prism:{defaultLanguage:d,magicComments:g}}=(0,l.L)(),h=p??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(n)??d,y=i(),b=function(){const[e,t]=(0,s.useState)(!1),[n,o]=(0,s.useState)(!1),a=(0,s.useRef)(null),r=(0,s.useCallback)((()=>{const n=a.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[a,e]),c=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=a.current,n=e>t||a.current.querySelector("code").hasAttribute("style");o(n)}),[a]);return C(a,c),(0,s.useEffect)((()=>{c()}),[e,c]),(0,s.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:a,isEnabled:e,isCodeScrollable:n,toggle:r}}(),E=function(e){var t;return(null==e||null==(t=e.match(m))?void 0:t.groups.title)??""}(a)||c,{lineClassNames:N,code:B}=f(t,{metastring:a,language:h,magicComments:g}),w=u??function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(a);return s.createElement(k,{as:"div",className:(0,r.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`)},E&&s.createElement("div",{className:v.codeBlockTitle},E),s.createElement("div",{className:v.codeBlockContent},s.createElement(P,(0,o.Z)({},L,{theme:y,code:B,language:h??"text"}),(e=>{let{className:t,tokens:n,getLineProps:o,getTokenProps:a}=e;return s.createElement("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,r.Z)(t,v.codeBlock,"thin-scrollbar")},s.createElement("code",{className:(0,r.Z)(v.codeBlockLines,w&&v.codeBlockLinesWithNumbering)},n.map(((e,t)=>s.createElement(z,{key:t,line:e,getLineProps:o,getTokenProps:a,classNames:N[t],showLineNumbers:w})))))})),s.createElement("div",{className:v.buttonGroup},(b.isEnabled||b.isCodeScrollable)&&s.createElement(R,{className:v.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),s.createElement(M,{className:v.codeButton,code:B}))))}function q(e){let{children:t,...n}=e;const r=(0,a.Z)(),c=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof c?F:E;return s.createElement(l,(0,o.Z)({key:String(r)},n),c)}},7594:(e,t)=>{function n(e){let t,n=[];for(let o of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(o))n.push(parseInt(o,10));else if(t=o.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,o,s,a]=t;if(o&&a){o=parseInt(o),a=parseInt(a);const e=o<a?1:-1;"-"!==s&&".."!==s&&"\u2025"!==s||(a+=e);for(let t=o;t!==a;t+=e)n.push(t)}}return n}t.default=n,e.exports=n}}]); \ No newline at end of file diff --git a/assets/js/8140cfa8.b0156491.js b/assets/js/8140cfa8.b0156491.js new file mode 100644 index 00000000..b4ccec42 --- /dev/null +++ b/assets/js/8140cfa8.b0156491.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[256],{770:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>s});var l=a(7462),n=(a(7294),a(3905));a(1839);const r={},i="Publishing",o={unversionedId:"contribute/development-guide/publishing",id:"contribute/development-guide/publishing",title:"Publishing",description:"Github actions",source:"@site/docs/contribute/development-guide/05-publishing.md",sourceDirName:"contribute/development-guide",slug:"/contribute/development-guide/publishing",permalink:"/template-fastapi-react/docs/contribute/development-guide/publishing",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/05-publishing.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{},sidebar:"contribute",previous:{title:"Upgrading",permalink:"/template-fastapi-react/docs/contribute/development-guide/upgrading"},next:{title:"Documentation",permalink:"/template-fastapi-react/docs/contribute/documentation"}},p={},s=[{value:"Github actions",id:"github-actions",level:2},{value:"Workflows",id:"workflows",level:3},{value:"Reusable workflows",id:"reusable-workflows",level:4},{value:"Changelogs",id:"changelogs",level:2},{value:"How to generate",id:"how-to-generate",level:3},{value:"Auto-generated",id:"auto-generated",level:4},{value:"Locally",id:"locally",level:4}],m={toc:s};function u(t){let{components:e,...a}=t;return(0,n.kt)("wrapper",(0,l.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"publishing"},"Publishing"),(0,n.kt)("h2",{id:"github-actions"},"Github actions"),(0,n.kt)("p",null,"We use ",(0,n.kt)("a",{parentName:"p",href:"https://docs.github.com/en/actions"},"GitHub Actions"),", as the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/equinor/template-fastapi-react/actions"},"CI/CD pipeline"),"."),(0,n.kt)("p",null,"GitHub Actions make it easy to automate all our software workflows. They build, test, and deploy the code right from GitHub."),(0,n.kt)("p",null,"All the heavy lifting is done by GitHub. GitHub will simply use the files defined in ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/equinor/template-fastapi-react/tree/main/.github/workflows"},(0,n.kt)("inlineCode",{parentName:"a"},".github/workflows"))," to do the setup."),(0,n.kt)("p",null,"We trigger the reusable workflow like this (note that the chart is slightly outdated):"),(0,n.kt)("img",{src:"https://www.plantuml.com/plantuml/png/DSr12e0m30NHVK-HTK3Fu4qaseyAQLgQkF3s8khwCSpa8JtAORb8IqpLg9s-KzJ4JA9AInTRTtXYvfa27ZvUKlJnQdfHaSDUx528usUUQOEXIs38TVso2PQ_tmq0",alt:"Github Actions"}),(0,n.kt)("p",null,"Since we are using trunk based development, all pushes to main trigger a release to a test environment."),(0,n.kt)("p",null,"Release to production is triggered when we merge in the auto-generated pull requests (that contains changelogs) that are created by the ",(0,n.kt)("inlineCode",{parentName:"p"},"create-release-pr.yaml")," Github action."),(0,n.kt)("h3",{id:"workflows"},"Workflows"),(0,n.kt)("details",null,(0,n.kt)("summary",null,"Overview"),(0,n.kt)("p",null,"Reusable workflows"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Workflow"),(0,n.kt)("th",{parentName:"tr",align:null},"Job"),(0,n.kt)("th",{parentName:"tr",align:null},"Purpose"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/codeql-security-analysis.yaml"},"codeql-security-analysis.yaml")),(0,n.kt)("td",{parentName:"tr",align:null},"analyze"),(0,n.kt)("td",{parentName:"tr",align:null},"Runs ",(0,n.kt)("inlineCode",{parentName:"td"},"CodeQL")," on the source code")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/create-release-pr.yaml"},"create-release-pr.yaml")),(0,n.kt)("td",{parentName:"tr",align:null},"release-please"),(0,n.kt)("td",{parentName:"tr",align:null},"Creates a new release on GitHub")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/deploy-to-radix.yaml"},"deploy-to-radix.yaml")),(0,n.kt)("td",{parentName:"tr",align:null},"deploy-on-radix"),(0,n.kt)("td",{parentName:"tr",align:null},"Deploys the services to Radix")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/generate-changelog.yaml"},"generate-changelog.yaml")),(0,n.kt)("td",{parentName:"tr",align:null},"generate-changelog"),(0,n.kt)("td",{parentName:"tr",align:null},"Automatically generates changelogs based on commit messages")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/label-importer.yaml"},"label-importer.yaml")),(0,n.kt)("td",{parentName:"tr",align:null},"labeler"),(0,n.kt)("td",{parentName:"tr",align:null},"Import labels from ",(0,n.kt)("inlineCode",{parentName:"td"},"labels.yml"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/publish-docs.yaml"},"publish-docs.yaml")),(0,n.kt)("td",{parentName:"tr",align:null},"publish-docs"),(0,n.kt)("td",{parentName:"tr",align:null},"Builds and publishes the latest docs to GitHub pages")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/publish-image.yaml"},"publish-image.yaml")),(0,n.kt)("td",{parentName:"tr",align:null},"build-and-publish-web-main"),(0,n.kt)("td",{parentName:"tr",align:null},"Builds and publishes the Docker image for the Web (frontend)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"build-and-publish-api-main"),(0,n.kt)("td",{parentName:"tr",align:null},"Builds and publishes the Docker image for the API (backend)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"build-and-publish-nginx"),(0,n.kt)("td",{parentName:"tr",align:null},"Builds and publishes the Docker image for the Nginx proxy")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/tests.yaml"},"tests.yaml")),(0,n.kt)("td",{parentName:"tr",align:null},"pre-commit"),(0,n.kt)("td",{parentName:"tr",align:null},"Runs the pre-commit hooks. See ",(0,n.kt)("a",{parentName:"td",href:"/template-fastapi-react/docs/contribute/development-guide/setup#hooks"},"Hooks")," for details")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"test-api"),(0,n.kt)("td",{parentName:"tr",align:null},"Runs tests on the API (backend) using pytest and behave")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"test-web"),(0,n.kt)("td",{parentName:"tr",align:null},"Runs tests on the Web (frontend)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"test-docs"),(0,n.kt)("td",{parentName:"tr",align:null},"Checks that the doc pages build without errors")))),(0,n.kt)("p",null,"Triggerable workflows"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Workflow"),(0,n.kt)("th",{parentName:"tr",align:null},"Job"),(0,n.kt)("th",{parentName:"tr",align:null},"Purpose"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/on-pull-request.yaml"},"on-pull-request.yaml")),(0,n.kt)("td",{parentName:"tr",align:null},"codeql"),(0,n.kt)("td",{parentName:"tr",align:null},"Uses the ",(0,n.kt)("inlineCode",{parentName:"td"},"codeql-security-analysis")," workflow")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"tests"),(0,n.kt)("td",{parentName:"tr",align:null},"Uses the ",(0,n.kt)("inlineCode",{parentName:"td"},"tests")," workflow")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/on-push-main-branch.yaml"},"on-push-main-branch.yaml")),(0,n.kt)("td",{parentName:"tr",align:null},"codeql"),(0,n.kt)("td",{parentName:"tr",align:null},"Uses the ",(0,n.kt)("inlineCode",{parentName:"td"},"codeql-security-analysis")," workflow")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"tests"),(0,n.kt)("td",{parentName:"tr",align:null},"Uses the ",(0,n.kt)("inlineCode",{parentName:"td"},"tests")," workflow")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"generate-changelog"),(0,n.kt)("td",{parentName:"tr",align:null},"Uses the ",(0,n.kt)("inlineCode",{parentName:"td"},"generate-changelog")," workflow")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"docs"),(0,n.kt)("td",{parentName:"tr",align:null},"Uses the ",(0,n.kt)("inlineCode",{parentName:"td"},"publish-docs")," workflow")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"publish-latest"),(0,n.kt)("td",{parentName:"tr",align:null},"Uses the ",(0,n.kt)("inlineCode",{parentName:"td"},"publish-image")," workflow to create a docker image for the ",(0,n.kt)("inlineCode",{parentName:"td"},"test")," environment")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"deploy-test"),(0,n.kt)("td",{parentName:"tr",align:null},"Uses the ",(0,n.kt)("inlineCode",{parentName:"td"},"deploy-to-radix")," workflow to deploy to the ",(0,n.kt)("inlineCode",{parentName:"td"},"test")," environment")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"release-please"),(0,n.kt)("td",{parentName:"tr",align:null},"Creates a new release PR on GitHub")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"publish-production"),(0,n.kt)("td",{parentName:"tr",align:null},"Uses the ",(0,n.kt)("inlineCode",{parentName:"td"},"publish-image")," workflow to create a docker image for the ",(0,n.kt)("inlineCode",{parentName:"td"},"prod")," environment")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"deploy-prod"),(0,n.kt)("td",{parentName:"tr",align:null},"Uses the ",(0,n.kt)("inlineCode",{parentName:"td"},"deploy-to-radix")," workflow to deploy to the ",(0,n.kt)("inlineCode",{parentName:"td"},"prod")," environment")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/on-weekly.yaml"},"on-weekly.yaml")),(0,n.kt)("td",{parentName:"tr",align:null},"codeql"),(0,n.kt)("td",{parentName:"tr",align:null},"Uses the ",(0,n.kt)("inlineCode",{parentName:"td"},"codeql-security-analysis")," workflow"))))),(0,n.kt)("h4",{id:"reusable-workflows"},"Reusable workflows"),(0,n.kt)("p",null,"A reusable workflow is just like any GitHub Actions workflow with one key difference - it includes a ",(0,n.kt)("inlineCode",{parentName:"p"},"workflow_call")," trigger."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"The ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/create-release-pr.yaml"},(0,n.kt)("inlineCode",{parentName:"a"},"create-release-pr.yaml"))," workflow will automatically create a pull request with an auto-generated changelog. It also bumps the version code (using semantic versioning, depending on the types of commits) and create a tagged release that can be used to deploy to production.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"The ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/tests.yml"},(0,n.kt)("inlineCode",{parentName:"a"},"tests.yaml"))," workflow will automatically run all types of tests.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"The ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/equinor/template-fastapi-react/blob/main/.github/workflows/publish-docs.yml"},(0,n.kt)("inlineCode",{parentName:"a"},"publish-docs.yaml"))," workflow will build the documentation. Then it will deploy the documentation (placed in the site folder) to GitHub Pages."))),(0,n.kt)("h2",{id:"changelogs"},"Changelogs"),(0,n.kt)("p",null,"We auto-generate changelogs by following the ",(0,n.kt)("a",{parentName:"p",href:"https://www.conventionalcommits.org/en/v1.0.0/"},"conventional commits")," specification."),(0,n.kt)("h3",{id:"how-to-generate"},"How to generate"),(0,n.kt)("h4",{id:"auto-generated"},"Auto-generated"),(0,n.kt)("p",null,"The Github action ",(0,n.kt)("inlineCode",{parentName:"p"},"release-please.yaml")," is a workflow that will automatically create a pull request with an auto-generated changelog every time code is pushed to the main branch."),(0,n.kt)("h4",{id:"locally"},"Locally"),(0,n.kt)("p",null,"Sometimes it is nice to generate the changelogs locally for testing."),(0,n.kt)("p",null,"It is possible to use ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/nektos/act"},"act")," to run Github actions locally."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"act -j release-please -s GITHUB_TOKEN=<GITHUB_TOKEN>\n")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"GITHUB_TOKEN"),": Log in to GitHub and generate a personal access token (PaT) from ",(0,n.kt)("inlineCode",{parentName:"p"},"Personal settings -> Developer settings -> Personal access tokens"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.be34cfe3.js b/assets/js/935f2afb.be34cfe3.js new file mode 100644 index 00000000..00947e46 --- /dev/null +++ b/assets/js/935f2afb.be34cfe3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"about":[{"type":"link","label":"Introduction","href":"/template-fastapi-react/docs/about/introduction","docId":"about/introduction"},{"type":"link","label":"Overview","href":"/template-fastapi-react/docs/about/overview","docId":"about/overview"},{"type":"category","label":"Concepts","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Task","href":"/template-fastapi-react/docs/about/concepts/task","docId":"about/concepts/task"},{"type":"link","label":"Use case","href":"/template-fastapi-react/docs/about/concepts/use-case","docId":"about/concepts/use-case"}],"href":"/template-fastapi-react/docs/category/concepts"},{"type":"category","label":"How to","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"How to do something","href":"/template-fastapi-react/docs/about/how-to/how-to-do-something","docId":"about/how-to/how-to-do-something"}],"href":"/template-fastapi-react/docs/category/how-to"},{"type":"category","label":"Running","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Prerequisites","href":"/template-fastapi-react/docs/about/running/prerequisites","docId":"about/running/prerequisites"},{"type":"link","label":"Configuration","href":"/template-fastapi-react/docs/about/running/configure","docId":"about/running/configure"},{"type":"link","label":"Starting services","href":"/template-fastapi-react/docs/about/running/starting-services","docId":"about/running/starting-services"}],"href":"/template-fastapi-react/docs/category/running"}],"contribute":[{"type":"link","label":"How to start contributing","href":"/template-fastapi-react/docs/contribute/how-to-start-contributing","docId":"contribute/how-to-start-contributing"},{"type":"link","label":"Ground rules","href":"/template-fastapi-react/docs/contribute/ground-rules","docId":"contribute/ground-rules"},{"type":"category","label":"Development guide","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Setup","href":"/template-fastapi-react/docs/contribute/development-guide/setup","docId":"contribute/development-guide/setup"},{"type":"category","label":"Coding","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Architecture overview","href":"/template-fastapi-react/docs/contribute/development-guide/coding/architecture","docId":"contribute/development-guide/coding/architecture"},{"type":"category","label":"Extending the API","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Adding entities","href":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-entities","docId":"contribute/development-guide/coding/extending-the-api/adding-entities"},{"type":"category","label":"Adding data providers","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Clients","href":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/clients","docId":"contribute/development-guide/coding/extending-the-api/adding-data-providers/clients"},{"type":"link","label":"Repository interfaces","href":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces","docId":"contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces"},{"type":"link","label":"Repositories","href":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories","docId":"contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories"}],"href":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/"},{"type":"category","label":"Adding features","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Controller","href":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllers","docId":"contribute/development-guide/coding/extending-the-api/adding-features/controllers"},{"type":"link","label":"Use cases","href":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-cases","docId":"contribute/development-guide/coding/extending-the-api/adding-features/use-cases"},{"type":"link","label":"Securing endpoints","href":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints","docId":"contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints"}],"href":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/"}],"href":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/"},{"type":"link","label":"Generate API clients","href":"/template-fastapi-react/docs/contribute/development-guide/coding/generate-api-clients","docId":"contribute/development-guide/coding/generate-api-clients"},{"type":"link","label":"Extending the web","href":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-web/","docId":"contribute/development-guide/coding/extending-the-web/index"}],"href":"/template-fastapi-react/docs/category/coding"},{"type":"link","label":"Testing","href":"/template-fastapi-react/docs/contribute/development-guide/testing","docId":"contribute/development-guide/testing"},{"type":"link","label":"Upgrading","href":"/template-fastapi-react/docs/contribute/development-guide/upgrading","docId":"contribute/development-guide/upgrading"},{"type":"link","label":"Publishing","href":"/template-fastapi-react/docs/contribute/development-guide/publishing","docId":"contribute/development-guide/publishing"}],"href":"/template-fastapi-react/docs/category/development-guide"},{"type":"link","label":"Documentation","href":"/template-fastapi-react/docs/contribute/documentation","docId":"contribute/documentation"}]},"docs":{"about/concepts/task":{"id":"about/concepts/task","title":"Task","description":"This is an example of a \\"concept\\" which is domain specific, and not related to your application. It should be replaced by relevant domain specific concepts in your documentation. Note that for some concepts, having an \\"Examples\\"-section does not make sense. Feel free to adapt the example\'s structure to best suit your concepts.","sidebar":"about"},"about/concepts/use-case":{"id":"about/concepts/use-case","title":"Use case","description":"There will be one use case for each individual action/command of an actor. An actor is a person or another system that interacts with our application. Typically, it will be a regular user.","sidebar":"about"},"about/how-to/how-to-do-something":{"id":"about/how-to/how-to-do-something","title":"How to do something","description":"","sidebar":"about"},"about/introduction":{"id":"about/introduction","title":"Introduction","description":"The purpose of the template","sidebar":"about"},"about/overview":{"id":"about/overview","title":"Overview","description":"Getting started","sidebar":"about"},"about/running/configure":{"id":"about/running/configure","title":"Configuration","description":"This document goes through all the different configuration options available.","sidebar":"about"},"about/running/prerequisites":{"id":"about/running/prerequisites","title":"Prerequisites","description":"In order to run you need to have installed:","sidebar":"about"},"about/running/starting-services":{"id":"about/running/starting-services","title":"Starting services","description":"You can start running:","sidebar":"about"},"changelog/changelog":{"id":"changelog/changelog","title":"Changelog","description":"1.5.0 (2024-07-22)"},"contribute/development-guide/coding/architecture":{"id":"contribute/development-guide/coding/architecture","title":"Architecture overview","description":"Architecture diagrams","sidebar":"contribute"},"contribute/development-guide/coding/extending-the-api/adding-data-providers/clients":{"id":"contribute/development-guide/coding/extending-the-api/adding-data-providers/clients","title":"Clients","description":"The template already ships with a mongo database client for connecting to MongoDB databases. However, if you need a client that can talk to e.g. PostgreSQL you need to add this.","sidebar":"contribute"},"contribute/development-guide/coding/extending-the-api/adding-data-providers/index":{"id":"contribute/development-guide/coding/extending-the-api/adding-data-providers/index","title":"Adding data providers","description":"Data providers are part of the infrastructure layer, which is responsible for external infrastructure communications","sidebar":"contribute"},"contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories":{"id":"contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories","title":"Repositories","description":"Concrete implementations of repository interfaces. A repository takes entities and returns entities, while hiding","sidebar":"contribute"},"contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces":{"id":"contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces","title":"Repository interfaces","description":"A repository interface describes the incoming parameters and the type of the object returned by a repository. The","sidebar":"contribute"},"contribute/development-guide/coding/extending-the-api/adding-entities":{"id":"contribute/development-guide/coding/extending-the-api/adding-entities","title":"Adding entities","description":"Entities form the domain model of the application.","sidebar":"contribute"},"contribute/development-guide/coding/extending-the-api/adding-features/controllers":{"id":"contribute/development-guide/coding/extending-the-api/adding-features/controllers","title":"Controller","description":"A controller receives a request, then calls a use case, before finally returning a response.","sidebar":"contribute"},"contribute/development-guide/coding/extending-the-api/adding-features/index":{"id":"contribute/development-guide/coding/extending-the-api/adding-features/index","title":"Adding features","description":"A feature has this structure.","sidebar":"contribute"},"contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints":{"id":"contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints","title":"Securing endpoints","description":"The REST API (i.e. python FastAPI server) has access to, and is responsible for serving, data that could be private. Therefore we need to validate that the request is coming from an authenticated client.","sidebar":"contribute"},"contribute/development-guide/coding/extending-the-api/adding-features/use-cases":{"id":"contribute/development-guide/coding/extending-the-api/adding-features/use-cases","title":"Use cases","description":"Use cases implement and encapsulate all the application business rules.","sidebar":"contribute"},"contribute/development-guide/coding/extending-the-api/index":{"id":"contribute/development-guide/coding/extending-the-api/index","title":"Extending the API","description":"FastAPI","sidebar":"contribute"},"contribute/development-guide/coding/extending-the-web/index":{"id":"contribute/development-guide/coding/extending-the-web/index","title":"Extending the web","description":"The web is grouped by features.","sidebar":"contribute"},"contribute/development-guide/coding/generate-api-clients":{"id":"contribute/development-guide/coding/generate-api-clients","title":"Generate API clients","description":"To generate typescript client for API run:","sidebar":"contribute"},"contribute/development-guide/publishing":{"id":"contribute/development-guide/publishing","title":"Publishing","description":"Github actions","sidebar":"contribute"},"contribute/development-guide/setup":{"id":"contribute/development-guide/setup","title":"Setup","description":"Prerequisites","sidebar":"contribute"},"contribute/development-guide/testing":{"id":"contribute/development-guide/testing","title":"Testing","description":"API","sidebar":"contribute"},"contribute/development-guide/upgrading":{"id":"contribute/development-guide/upgrading","title":"Upgrading","description":"Packages","sidebar":"contribute"},"contribute/documentation":{"id":"contribute/documentation","title":"Documentation","description":"This site was generated from the contents of your documentation folder using Docusaurus and we host it on GitHub Pages.","sidebar":"contribute"},"contribute/ground-rules":{"id":"contribute/ground-rules","title":"Ground rules","description":"* For major changes, please open an issue first to discuss what you would like to change.","sidebar":"contribute"},"contribute/how-to-start-contributing":{"id":"contribute/how-to-start-contributing","title":"How to start contributing","description":"Welcome! We are glad that you want to contribute to our project! \ud83d\udc96","sidebar":"contribute"}}}')}}]); \ No newline at end of file diff --git a/assets/js/95fd3ae2.01388588.js b/assets/js/95fd3ae2.01388588.js new file mode 100644 index 00000000..56c5b306 --- /dev/null +++ b/assets/js/95fd3ae2.01388588.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[898],{9482:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>o,metadata:()=>c,toc:()=>p});var i=n(7462),a=(n(7294),n(3905));n(1839);const o={},r="Generate API clients",c={unversionedId:"contribute/development-guide/coding/generate-api-clients",id:"contribute/development-guide/coding/generate-api-clients",title:"Generate API clients",description:"To generate typescript client for API run:",source:"@site/docs/contribute/development-guide/coding/03-generate-api-clients.md",sourceDirName:"contribute/development-guide/coding",slug:"/contribute/development-guide/coding/generate-api-clients",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/generate-api-clients",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/03-generate-api-clients.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{},sidebar:"contribute",previous:{title:"Securing endpoints",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints"},next:{title:"Extending the web",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-web/"}},d={},p=[],s={toc:p};function l(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,i.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"generate-api-clients"},"Generate API clients"),(0,a.kt)("p",null,"To generate typescript client for API run:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\n./generate-api-client.sh\n")),(0,a.kt)("p",null,"This will populate ",(0,a.kt)("inlineCode",{parentName:"p"},"web/src/api/generated")," with new typescript files that matches the API OpenAPI specification."))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/972.8d79bbe8.js b/assets/js/972.8d79bbe8.js new file mode 100644 index 00000000..5af810a3 --- /dev/null +++ b/assets/js/972.8d79bbe8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[972],{4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(7294),o=n(5999),l=n(1944),r=n(4704);function i(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,o.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/9b8d192f.082a6409.js b/assets/js/9b8d192f.082a6409.js new file mode 100644 index 00000000..97ff797e --- /dev/null +++ b/assets/js/9b8d192f.082a6409.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[172],{3894:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>d,metadata:()=>o,toc:()=>p});var n=i(7462),a=(i(7294),i(3905));i(1839);const d={},r="Adding data providers",o={unversionedId:"contribute/development-guide/coding/extending-the-api/adding-data-providers/index",id:"contribute/development-guide/coding/extending-the-api/adding-data-providers/index",title:"Adding data providers",description:"Data providers are part of the infrastructure layer, which is responsible for external infrastructure communications",source:"@site/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/index.md",sourceDirName:"contribute/development-guide/coding/extending-the-api/adding-data-providers",slug:"/contribute/development-guide/coding/extending-the-api/adding-data-providers/",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/index.md",tags:[],version:"current",frontMatter:{},sidebar:"contribute",previous:{title:"Adding entities",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-entities"},next:{title:"Clients",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/clients"}},s={},p=[],c={toc:p};function u(e){let{components:t,...i}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"adding-data-providers"},"Adding data providers"),(0,a.kt)("p",null,"Data providers are part of the infrastructure layer, which is responsible for external infrastructure communications\nlike database storage, file system, and external systems. The infrastructure layer is the layer that contains all the\nconcrete implementations of the application. It implements interfaces defined in use cases, to provide access to\nexternal systems."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"\u251c\u2500\u2500 data_providers/\n\u2502 \u251c\u2500\u2500 clients/\n\u2502 \u251c\u2500\u2500 repository_interfaces/\n\u2502 \u2514\u2500\u2500 repositories/\n\u2514\u2500\u2500 ...\n")),(0,a.kt)("p",null,"w"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b5acc4c4.0b2208ad.js b/assets/js/b5acc4c4.0b2208ad.js new file mode 100644 index 00000000..527be3ba --- /dev/null +++ b/assets/js/b5acc4c4.0b2208ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[106],{8742:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>c,toc:()=>p});var a=o(7462),r=(o(7294),o(3905));o(1839);const n={},i="Overview",c={unversionedId:"about/overview",id:"about/overview",title:"Overview",description:"Getting started",source:"@site/docs/about/02-overview.md",sourceDirName:"about",slug:"/about/overview",permalink:"/template-fastapi-react/docs/about/overview",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/about/02-overview.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"about",previous:{title:"Introduction",permalink:"/template-fastapi-react/docs/about/introduction"},next:{title:"Concepts",permalink:"/template-fastapi-react/docs/category/concepts"}},s={},p=[{value:"Getting started",id:"getting-started",level:2},{value:"Project structure",id:"project-structure",level:2}],u={toc:p};function d(t){let{components:e,...o}=t;return(0,r.kt)("wrapper",(0,a.Z)({},u,o,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"overview"},"Overview"),(0,r.kt)("h2",{id:"getting-started"},"Getting started"),(0,r.kt)("p",null,"In order to start using this template for your own project, go to ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/equinor/template-fastapi-react"},"equinor/template-fastapi-react")," and click the ",(0,r.kt)("inlineCode",{parentName:"p"},"Use this template")," button to create a copy."),(0,r.kt)("p",null,"Next, go-to the instructions on how-to ",(0,r.kt)("a",{parentName:"p",href:"/template-fastapi-react/docs/about/running/prerequisites"},"run locally")," ."),(0,r.kt)("p",null,"For setting up a development environment, go to the ",(0,r.kt)("a",{parentName:"p",href:"/template-fastapi-react/docs/contribute/development-guide/setup"},"development guide"),". Next, to start coding and extending the template see the ",(0,r.kt)("a",{parentName:"p",href:"/template-fastapi-react/docs/contribute/development-guide/coding/architecture"},"coding section"),"."),(0,r.kt)("p",null,"For starting contributing to the template see ",(0,r.kt)("a",{parentName:"p",href:"/template-fastapi-react/docs/contribute/how-to-start-contributing"},"contribute section"),"."),(0,r.kt)("h2",{id:"project-structure"},"Project structure"),(0,r.kt)("p",null,"Here\u2019s how the app is organized."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"\u251c\u2500\u2500 api/ - backend code\n\u2502\u2500\u2500 web/ - frontend code\n\u2502\u2500\u2500 documentation/ - documentation\n\u251c\u2500\u2500 nginx/ - reverse proxy\n\u251c\u2500\u2500 .env-template - template for environment variables\n\u251c\u2500\u2500 docker-compose.override.yml - for running locally\n\u251c\u2500\u2500 docker-compose.yml - common docker compose settings\n\u2514\u2500\u2500 ...\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b893987e.c7bcf8cd.js b/assets/js/b893987e.c7bcf8cd.js new file mode 100644 index 00000000..2c395fff --- /dev/null +++ b/assets/js/b893987e.c7bcf8cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[499],{5545:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>_,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var i=o(7462),n=(o(7294),o(3905)),d=(o(1839),o(814));const s={},r="Repositories",a={unversionedId:"contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories",id:"contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories",title:"Repositories",description:"Concrete implementations of repository interfaces. A repository takes entities and returns entities, while hiding",source:"@site/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/03-repositories.md",sourceDirName:"contribute/development-guide/coding/extending-the-api/adding-data-providers",slug:"/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/03-repositories.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{},sidebar:"contribute",previous:{title:"Repository interfaces",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces"},next:{title:"Adding features",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/"}},_={},l=[{value:"Testing repositories",id:"testing-repositories",level:2}],m={toc:l};function p(e){let{components:t,...o}=e;return(0,n.kt)("wrapper",(0,i.Z)({},m,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"repositories"},"Repositories"),(0,n.kt)("p",null,"Concrete implementations of repository interfaces. A repository takes entities and returns entities, while hiding\nstorage details. It can work against local, remote, data services or third party services."),(0,n.kt)(d.Z,{language:"jsx",mdxType:"CodeBlock"},'from typing import Any\n\nfrom common.exceptions import NotFoundException\nfrom config import config\nfrom data_providers.clients.client_interface import ClientInterface\nfrom data_providers.clients.mongodb.mongo_database_client import MongoDatabaseClient\nfrom features.todo.entities.todo_item import TodoItem\nfrom features.todo.repository.todo_repository_interface import TodoRepositoryInterface\n\n\ndef to_dict(todo_item: TodoItem) -> dict[str, Any]:\n _dict: dict[str, Any] = todo_item.__dict__\n _dict["_id"] = todo_item.id\n return _dict\n\n\ndef get_todo_repository() -> "TodoRepository":\n mongo_database_client = MongoDatabaseClient(collection_name="todos", database_name=config.MONGODB_DATABASE)\n return TodoRepository(client=mongo_database_client)\n\n\nclass TodoRepository(TodoRepositoryInterface):\n client: ClientInterface\n\n def __init__(self, client: ClientInterface):\n self.client = client\n\n def update(self, todo_item: TodoItem) -> TodoItem:\n updated_todo_item = self.client.update(todo_item.id, to_dict(todo_item))\n return TodoItem.from_dict(updated_todo_item)\n\n def delete(self, todo_item_id: str) -> None:\n is_deleted = self.client.delete(todo_item_id)\n if not is_deleted:\n raise NotFoundException\n\n def delete_all(self) -> None:\n self.client.delete_collection()\n\n def get(self, todo_item_id: str) -> TodoItem:\n todo_item = self.client.get(todo_item_id)\n return TodoItem.from_dict(todo_item)\n\n def create(self, todo_item: TodoItem) -> TodoItem | None:\n inserted_todo_item = self.client.create(to_dict(todo_item))\n return TodoItem.from_dict(inserted_todo_item)\n\n def get_all(self) -> list[TodoItem]:\n todo_items: list[TodoItem] = []\n for item in self.client.list_collection():\n todo_items.append(TodoItem.from_dict(item))\n return todo_items\n\n def find_one(self, filter: dict[str, Any]) -> TodoItem | None:\n todo_item = self.client.find_one(filter)\n if todo_item:\n return TodoItem.from_dict(todo_item)\n return None\n'),(0,n.kt)("h2",{id:"testing-repositories"},"Testing repositories"),(0,n.kt)("p",null,"Use the ",(0,n.kt)("inlineCode",{parentName:"p"},"test_client")," fixture as input to TodoRepository. The ",(0,n.kt)("inlineCode",{parentName:"p"},"test_client")," fixture are using the mongomock instead of\nreal database."),(0,n.kt)(d.Z,{language:"jsx",mdxType:"CodeBlock"},'import pytest\n\nfrom common.exceptions import NotFoundException, ValidationException\nfrom data_providers.clients.mongodb.mongo_database_client import MongoDatabaseClient\nfrom features.todo.entities.todo_item import TodoItem\nfrom features.todo.repository.todo_repository import TodoRepository\n\n\nclass TestTodoRepository:\n @pytest.fixture(autouse=True)\n def _setup_repository(self, test_client: MongoDatabaseClient):\n self.repository = TodoRepository(client=test_client)\n\n def test_create(self):\n todo_item = TodoItem(id="1234", title="todo 1", user_id="xyz")\n self.repository.create(todo_item)\n assert len(self.repository.get_all()) == 1\n\n def test_create_already_exists(self):\n todo_item_1 = TodoItem(id="1234", title="todo 1", user_id="xyz")\n self.repository.create(todo_item_1)\n with pytest.raises(ValidationException):\n todo_item_2 = TodoItem(id="1234", title="todo 1", user_id="xyz")\n self.repository.create(todo_item_2)\n\n def test_find_item_that_exist(self):\n documents = [\n {"_id": "81549300", "title": "todo 1", "user_id": "xyz"},\n {"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},\n {"_id": "987321", "title": "todo 3", "user_id": "abc"},\n {"_id": "987456", "title": "todo 4", "user_id": "abc"},\n ]\n self.repository.client.insert_many(documents)\n todo_item = self.repository.find_one({"title": "todo 2", "user_id": "xyz"})\n assert todo_item is not None and todo_item.id == "1a2b"\n\n def test_find_item_that_does_not_exist(self):\n documents = [\n {"_id": "81549300", "title": "todo 1", "user_id": "xyz"},\n {"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},\n {"_id": "987321", "title": "todo 3", "user_id": "abc"},\n {"_id": "987456", "title": "todo 4", "user_id": "abc"},\n ]\n self.repository.client.insert_many(documents)\n assert self.repository.find_one({"_id": "invalid"}) is None\n\n def test_find_item_of_other_user(self):\n documents = [\n {"_id": "81549300", "title": "todo 1", "user_id": "xyz"},\n {"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},\n {"_id": "987321", "title": "todo 3", "user_id": "abc"},\n {"_id": "987456", "title": "todo 4", "user_id": "abc"},\n ]\n self.repository.client.insert_many(documents)\n assert self.repository.find_one({"_id": "1a2b", "user_id": "abc"}) is None\n\n def test_get_item_that_does_exist(self):\n documents = [\n {"_id": "81549300", "title": "todo 1", "user_id": "xyz"},\n {"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},\n {"_id": "987321", "title": "todo 3", "user_id": "abc"},\n {"_id": "987456", "title": "todo 4", "user_id": "abc"},\n ]\n self.repository.client.insert_many(documents)\n assert self.repository.get("987321").id == "987321"\n\n def test_get_item_that_does_not_exist(self):\n documents = [\n {"_id": "81549300", "title": "todo 1", "user_id": "xyz"},\n {"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},\n {"_id": "987321", "title": "todo 3", "user_id": "abc"},\n {"_id": "987456", "title": "todo 4", "user_id": "abc"},\n ]\n self.repository.client.insert_many(documents)\n with pytest.raises(NotFoundException):\n self.repository.get("invalid")\n\n def test_update_item(self):\n todo_item = TodoItem(id="81549300", title="todo 1", user_id="xyz")\n self.repository.create(todo_item)\n todo_item_to_update = TodoItem(id="81549300", title="Updated title", user_id="xyz")\n self.repository.update(todo_item=todo_item_to_update)\n assert self.repository.get("81549300").title == "Updated title"\n\n def test_update_item_that_does_not_exist(self):\n todo_item_to_update = TodoItem(id="unknown", title="Updated title", user_id="xyz")\n with pytest.raises(NotFoundException):\n self.repository.update(todo_item_to_update)\n\n def test_delete(self):\n documents = [\n {"_id": "81549300", "title": "todo 1", "user_id": "xyz"},\n {"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},\n ]\n self.repository.client.insert_many(documents)\n assert len(self.repository.get_all()) == 2\n self.repository.delete("81549300")\n assert len(self.repository.get_all()) == 1\n assert self.repository.get_all() == [self.repository.get("1a2b")]\n\n def test_delete_all(self):\n documents = [\n {"_id": "81549300", "title": "todo 1", "user_id": "xyz"},\n {"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},\n ]\n self.repository.client.insert_many(documents)\n assert len(self.repository.get_all()) == 2\n self.repository.delete_all()\n assert len(self.repository.get_all()) == 0\n'))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/be239b1c.3a72d963.js b/assets/js/be239b1c.3a72d963.js new file mode 100644 index 00000000..f4e3bbcb --- /dev/null +++ b/assets/js/be239b1c.3a72d963.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[19],{3477:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>n,metadata:()=>i,toc:()=>u});var r=a(7462),o=(a(7294),a(3905));a(1839);const n={},s="How to start contributing",i={unversionedId:"contribute/how-to-start-contributing",id:"contribute/how-to-start-contributing",title:"How to start contributing",description:"Welcome! We are glad that you want to contribute to our project! \ud83d\udc96",source:"@site/docs/contribute/01-how-to-start-contributing.md",sourceDirName:"contribute",slug:"/contribute/how-to-start-contributing",permalink:"/template-fastapi-react/docs/contribute/how-to-start-contributing",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/01-how-to-start-contributing.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"contribute",next:{title:"Ground rules",permalink:"/template-fastapi-react/docs/contribute/ground-rules"}},l={},u=[{value:"Fork the repository",id:"fork-the-repository",level:2},{value:"Code review process",id:"code-review-process",level:2}],c={toc:u};function p(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"how-to-start-contributing"},"How to start contributing"),(0,o.kt)("p",null,"Welcome! We are glad that you want to contribute to our project! \ud83d\udc96"),(0,o.kt)("p",null,"This project accepts contributions via Github pull requests."),(0,o.kt)("p",null,"This document outlines the process to help get your contribution accepted."),(0,o.kt)("p",null,"There are many ways to contribute:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Suggest ",(0,o.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/new?assignees=&labels=type%3A+%3Abulb%3A+feature+request&template=feature-request.md&title="},"features")),(0,o.kt)("li",{parentName:"ul"},"Suggest ",(0,o.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/new?assignees=&labels=type%3A+%3Awrench%3A+maintenance&template=code-maintenance.md&title="},"changes")),(0,o.kt)("li",{parentName:"ul"},"Report ",(0,o.kt)("a",{parentName:"li",href:"https://github.com/equinor/template-fastapi-react/issues/new?assignees=&labels=type%3A+%3Abug+bug&template=bug-report.md&title="},"bugs"))),(0,o.kt)("p",null,"You can start by looking through the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/equinor/template-fastapi-react/issues?q=is%3Aopen+is%3Aissue+label%3A%22%3Ahatching_chick%3A+good+first+issue%22"},"good first issues"),"."),(0,o.kt)("h2",{id:"fork-the-repository"},"Fork the repository"),(0,o.kt)("p",null,"In general, we follow the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/susam/gitpr"},'"fork-and-pull" Git workflow'),"."),(0,o.kt)("p",null,"Here's a quick guide:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Create your own fork of the repository"),(0,o.kt)("li",{parentName:"ol"},"Clone the project to your machine"),(0,o.kt)("li",{parentName:"ol"},"To keep track of the original repository add another remote named upstream")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git remote add upstream git@github.com:equinor/template-fastapi-react.git\n")),(0,o.kt)("ol",{start:4},(0,o.kt)("li",{parentName:"ol"},"Create a branch locally with a succinct but descriptive name and prefixed with change type.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git checkout -b feature/my-new-feature\n")),(0,o.kt)("ol",{start:5},(0,o.kt)("li",{parentName:"ol"},"Make the changes in the created branch."),(0,o.kt)("li",{parentName:"ol"},"Add and run tests for your changes (we only take pull requests with passing tests).")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker compose run --rm api pytest\ndocker compose run --rm web yarn test\n")),(0,o.kt)("ol",{start:7},(0,o.kt)("li",{parentName:"ol"},"Add the changed files")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git add path/to/filename\n")),(0,o.kt)("ol",{start:8},(0,o.kt)("li",{parentName:"ol"},"Commit your changes using the ",(0,o.kt)("a",{parentName:"li",href:"https://www.conventionalcommits.org/en/v1.0.0/"},"conventional commits")," formatting for the commit messages.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},'git commit -m "conventional commit formatted message"\n')),(0,o.kt)("ol",{start:9},(0,o.kt)("li",{parentName:"ol"},"Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git fetch upstream\ngit rebase upstream/main\n")),(0,o.kt)("ol",{start:10},(0,o.kt)("li",{parentName:"ol"},"Push to your fork.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git push origin feature/my-new-feature\n")),(0,o.kt)("ol",{start:11},(0,o.kt)("li",{parentName:"ol"},"Submit a pull request to the original repository (via Github interface). Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us.")),(0,o.kt)("p",null,"That's it... thank you for your contribution!"),(0,o.kt)("p",null,"After your pull request is merged, you can safely delete your branch."),(0,o.kt)("h2",{id:"code-review-process"},"Code review process"),(0,o.kt)("p",null,"The core team looks at pull requests on a regular basis. After feedback has been given we expect responses within three weeks. After three weeks we may close the pull request if it isn't showing any activity."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c66b78d2.a4ca6671.js b/assets/js/c66b78d2.a4ca6671.js new file mode 100644 index 00000000..2ac80fa6 --- /dev/null +++ b/assets/js/c66b78d2.a4ca6671.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6],{2369:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var n=a(7462),r=(a(7294),a(3905));a(1839);const o={},s="Starting services",i={unversionedId:"about/running/starting-services",id:"about/running/starting-services",title:"Starting services",description:"You can start running:",source:"@site/docs/about/running/03-starting-services.md",sourceDirName:"about/running",slug:"/about/running/starting-services",permalink:"/template-fastapi-react/docs/about/running/starting-services",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/about/running/03-starting-services.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{},sidebar:"about",previous:{title:"Configuration",permalink:"/template-fastapi-react/docs/about/running/configure"}},p={},c=[],l={toc:c};function u(t){let{components:e,...a}=t;return(0,r.kt)("wrapper",(0,n.Z)({},l,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"starting-services"},"Starting services"),(0,r.kt)("p",null,"You can start running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"docker compose up\n")),(0,r.kt)("p",null,"The web app will be served at ",(0,r.kt)("a",{parentName:"p",href:"http://localhost"},"http://localhost")),(0,r.kt)("p",null,"The API documentation can be found at ",(0,r.kt)("a",{parentName:"p",href:"http://localhost/api/docs"},"http://localhost/api/docs")),(0,r.kt)("p",null,"The OpenAPI spec can be found at ",(0,r.kt)("a",{parentName:"p",href:"http://localhost/api/openapi.json"},"http://localhost/api/openapi.json")),(0,r.kt)("details",null,(0,r.kt)("summary",null,"Skip Docker (not recommended)"),(0,r.kt)("p",null,"Navigate to the /api folder, activate local venv, then start backend app.py with Uvicorn:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cd api/src/ # go to the location of app.py\nuvicorn app:create_app --reload\n")),(0,r.kt)("p",null,"Navigate to the /web folder, and then start web application:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"yarn start\n"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/common.53c69b33.js b/assets/js/common.53c69b33.js new file mode 100644 index 00000000..a32c1e80 --- /dev/null +++ b/assets/js/common.53c69b33.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[592],{3905:(t,e,n)=>{n.d(e,{Zo:()=>u,kt:()=>f});var r=n(7294);function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function a(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?a(Object(n),!0).forEach((function(e){i(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function s(t,e){if(null==t)return{};var n,r,i=function(t,e){if(null==t)return{};var n,r,i={},a=Object.keys(t);for(r=0;r<a.length;r++)n=a[r],e.indexOf(n)>=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var c=r.createContext({}),l=function(t){var e=r.useContext(c),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},u=function(t){var e=l(t.components);return r.createElement(c.Provider,{value:e},t.children)},h={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},d=r.forwardRef((function(t,e){var n=t.components,i=t.mdxType,a=t.originalType,c=t.parentName,u=s(t,["components","mdxType","originalType","parentName"]),d=l(n),f=i,p=d["".concat(c,".").concat(f)]||d[f]||h[f]||a;return n?r.createElement(p,o(o({ref:e},u),{},{components:n})):r.createElement(p,o({ref:e},u))}));function f(t,e){var n=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var a=n.length,o=new Array(a);o[0]=d;var s={};for(var c in e)hasOwnProperty.call(e,c)&&(s[c]=e[c]);s.originalType=t,s.mdxType="string"==typeof t?t:i,o[1]=s;for(var l=2;l<a;l++)o[l]=n[l];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},1839:(t,e,n)=>{n.d(e,{G:()=>u});var r=n(7294),i={2536:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,6],n=[1,7],r=[1,8],i=[1,9],a=[1,16],o=[1,11],s=[1,12],l=[1,13],u=[1,14],h=[1,15],d=[1,27],f=[1,33],p=[1,34],g=[1,35],y=[1,36],m=[1,37],b=[1,72],v=[1,73],_=[1,74],x=[1,75],k=[1,76],w=[1,77],E=[1,78],T=[1,38],C=[1,39],S=[1,40],A=[1,41],M=[1,42],O=[1,43],N=[1,44],D=[1,45],B=[1,46],L=[1,47],I=[1,48],F=[1,49],R=[1,50],P=[1,51],j=[1,52],z=[1,53],Y=[1,54],U=[1,55],$=[1,56],W=[1,57],q=[1,59],H=[1,60],V=[1,61],G=[1,62],X=[1,63],Z=[1,64],Q=[1,65],K=[1,66],J=[1,67],tt=[1,68],et=[1,69],nt=[24,52],rt=[24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],it=[15,24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],at=[1,94],ot=[1,95],st=[1,96],ct=[1,97],lt=[15,24,52],ut=[7,8,9,10,18,22,25,26,27,28],ht=[15,24,43,52],dt=[15,24,43,52,86,87,89,90],ft=[15,43],pt=[44,46,47,48,49,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],gt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,directive:6,direction_tb:7,direction_bt:8,direction_rl:9,direction_lr:10,graphConfig:11,openDirective:12,typeDirective:13,closeDirective:14,NEWLINE:15,":":16,argDirective:17,open_directive:18,type_directive:19,arg_directive:20,close_directive:21,C4_CONTEXT:22,statements:23,EOF:24,C4_CONTAINER:25,C4_COMPONENT:26,C4_DYNAMIC:27,C4_DEPLOYMENT:28,otherStatements:29,diagramStatements:30,otherStatement:31,title:32,accDescription:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,boundaryStatement:39,boundaryStartStatement:40,boundaryStopStatement:41,boundaryStart:42,LBRACE:43,ENTERPRISE_BOUNDARY:44,attributes:45,SYSTEM_BOUNDARY:46,BOUNDARY:47,CONTAINER_BOUNDARY:48,NODE:49,NODE_L:50,NODE_R:51,RBRACE:52,diagramStatement:53,PERSON:54,PERSON_EXT:55,SYSTEM:56,SYSTEM_DB:57,SYSTEM_QUEUE:58,SYSTEM_EXT:59,SYSTEM_EXT_DB:60,SYSTEM_EXT_QUEUE:61,CONTAINER:62,CONTAINER_DB:63,CONTAINER_QUEUE:64,CONTAINER_EXT:65,CONTAINER_EXT_DB:66,CONTAINER_EXT_QUEUE:67,COMPONENT:68,COMPONENT_DB:69,COMPONENT_QUEUE:70,COMPONENT_EXT:71,COMPONENT_EXT_DB:72,COMPONENT_EXT_QUEUE:73,REL:74,BIREL:75,REL_U:76,REL_D:77,REL_L:78,REL_R:79,REL_B:80,REL_INDEX:81,UPDATE_EL_STYLE:82,UPDATE_REL_STYLE:83,UPDATE_LAYOUT_CONFIG:84,attribute:85,STR:86,STR_KEY:87,STR_VALUE:88,ATTRIBUTE:89,ATTRIBUTE_EMPTY:90,$accept:0,$end:1},terminals_:{2:"error",7:"direction_tb",8:"direction_bt",9:"direction_rl",10:"direction_lr",15:"NEWLINE",16:":",18:"open_directive",19:"type_directive",20:"arg_directive",21:"close_directive",22:"C4_CONTEXT",24:"EOF",25:"C4_CONTAINER",26:"C4_COMPONENT",27:"C4_DYNAMIC",28:"C4_DEPLOYMENT",32:"title",33:"accDescription",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",43:"LBRACE",44:"ENTERPRISE_BOUNDARY",46:"SYSTEM_BOUNDARY",47:"BOUNDARY",48:"CONTAINER_BOUNDARY",49:"NODE",50:"NODE_L",51:"NODE_R",52:"RBRACE",54:"PERSON",55:"PERSON_EXT",56:"SYSTEM",57:"SYSTEM_DB",58:"SYSTEM_QUEUE",59:"SYSTEM_EXT",60:"SYSTEM_EXT_DB",61:"SYSTEM_EXT_QUEUE",62:"CONTAINER",63:"CONTAINER_DB",64:"CONTAINER_QUEUE",65:"CONTAINER_EXT",66:"CONTAINER_EXT_DB",67:"CONTAINER_EXT_QUEUE",68:"COMPONENT",69:"COMPONENT_DB",70:"COMPONENT_QUEUE",71:"COMPONENT_EXT",72:"COMPONENT_EXT_DB",73:"COMPONENT_EXT_QUEUE",74:"REL",75:"BIREL",76:"REL_U",77:"REL_D",78:"REL_L",79:"REL_R",80:"REL_B",81:"REL_INDEX",82:"UPDATE_EL_STYLE",83:"UPDATE_REL_STYLE",84:"UPDATE_LAYOUT_CONFIG",86:"STR",87:"STR_KEY",88:"STR_VALUE",89:"ATTRIBUTE",90:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[3,2],[5,1],[5,1],[5,1],[5,1],[4,1],[6,4],[6,6],[12,1],[13,1],[17,1],[14,1],[11,4],[11,4],[11,4],[11,4],[11,4],[23,1],[23,1],[23,2],[29,1],[29,2],[29,3],[31,1],[31,1],[31,2],[31,2],[31,1],[39,3],[40,3],[40,3],[40,4],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[41,1],[30,1],[30,2],[30,3],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,1],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[45,1],[45,2],[85,1],[85,2],[85,1],[85,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:r.setDirection("TB");break;case 5:r.setDirection("BT");break;case 6:r.setDirection("RL");break;case 7:r.setDirection("LR");break;case 11:console.log("open_directive: ",a[s]),r.parseDirective("%%{","open_directive");break;case 12:break;case 13:a[s]=a[s].trim().replace(/'/g,'"'),console.log("arg_directive: ",a[s]),r.parseDirective(a[s],"arg_directive");break;case 14:console.log("close_directive: ",a[s]),r.parseDirective("}%%","close_directive","c4Context");break;case 15:case 16:case 17:case 18:case 19:r.setC4Type(a[s-3]);break;case 26:r.setTitle(a[s].substring(6)),this.$=a[s].substring(6);break;case 27:r.setAccDescription(a[s].substring(15)),this.$=a[s].substring(15);break;case 28:this.$=a[s].trim(),r.setTitle(this.$);break;case 29:case 30:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 35:case 36:console.log(a[s-1],JSON.stringify(a[s])),a[s].splice(2,0,"ENTERPRISE"),r.addPersonOrSystemBoundary(...a[s]),this.$=a[s];break;case 37:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystemBoundary(...a[s]),this.$=a[s];break;case 38:console.log(a[s-1],JSON.stringify(a[s])),a[s].splice(2,0,"CONTAINER"),r.addContainerBoundary(...a[s]),this.$=a[s];break;case 39:console.log(a[s-1],JSON.stringify(a[s])),r.addDeploymentNode("node",...a[s]),this.$=a[s];break;case 40:console.log(a[s-1],JSON.stringify(a[s])),r.addDeploymentNode("nodeL",...a[s]),this.$=a[s];break;case 41:console.log(a[s-1],JSON.stringify(a[s])),r.addDeploymentNode("nodeR",...a[s]),this.$=a[s];break;case 42:r.popBoundaryParseStack();break;case 46:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("person",...a[s]),this.$=a[s];break;case 47:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("external_person",...a[s]),this.$=a[s];break;case 48:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("system",...a[s]),this.$=a[s];break;case 49:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("system_db",...a[s]),this.$=a[s];break;case 50:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("system_queue",...a[s]),this.$=a[s];break;case 51:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("external_system",...a[s]),this.$=a[s];break;case 52:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("external_system_db",...a[s]),this.$=a[s];break;case 53:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("external_system_queue",...a[s]),this.$=a[s];break;case 54:console.log(a[s-1],JSON.stringify(a[s])),r.addContainer("container",...a[s]),this.$=a[s];break;case 55:console.log(a[s-1],JSON.stringify(a[s])),r.addContainer("container_db",...a[s]),this.$=a[s];break;case 56:console.log(a[s-1],JSON.stringify(a[s])),r.addContainer("container_queue",...a[s]),this.$=a[s];break;case 57:console.log(a[s-1],JSON.stringify(a[s])),r.addContainer("external_container",...a[s]),this.$=a[s];break;case 58:console.log(a[s-1],JSON.stringify(a[s])),r.addContainer("external_container_db",...a[s]),this.$=a[s];break;case 59:console.log(a[s-1],JSON.stringify(a[s])),r.addContainer("external_container_queue",...a[s]),this.$=a[s];break;case 60:console.log(a[s-1],JSON.stringify(a[s])),r.addComponent("component",...a[s]),this.$=a[s];break;case 61:console.log(a[s-1],JSON.stringify(a[s])),r.addComponent("component_db",...a[s]),this.$=a[s];break;case 62:console.log(a[s-1],JSON.stringify(a[s])),r.addComponent("component_queue",...a[s]),this.$=a[s];break;case 63:console.log(a[s-1],JSON.stringify(a[s])),r.addComponent("external_component",...a[s]),this.$=a[s];break;case 64:console.log(a[s-1],JSON.stringify(a[s])),r.addComponent("external_component_db",...a[s]),this.$=a[s];break;case 65:console.log(a[s-1],JSON.stringify(a[s])),r.addComponent("external_component_queue",...a[s]),this.$=a[s];break;case 67:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("rel",...a[s]),this.$=a[s];break;case 68:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("birel",...a[s]),this.$=a[s];break;case 69:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("rel_u",...a[s]),this.$=a[s];break;case 70:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("rel_d",...a[s]),this.$=a[s];break;case 71:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("rel_l",...a[s]),this.$=a[s];break;case 72:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("rel_r",...a[s]),this.$=a[s];break;case 73:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("rel_b",...a[s]),this.$=a[s];break;case 74:console.log(a[s-1],JSON.stringify(a[s])),a[s].splice(0,1),r.addRel("rel",...a[s]),this.$=a[s];break;case 75:console.log(a[s-1],JSON.stringify(a[s])),r.updateElStyle("update_el_style",...a[s]),this.$=a[s];break;case 76:console.log(a[s-1],JSON.stringify(a[s])),r.updateRelStyle("update_rel_style",...a[s]),this.$=a[s];break;case 77:console.log(a[s-1],JSON.stringify(a[s])),r.updateLayoutConfig("update_layout_config",...a[s]),this.$=a[s];break;case 78:console.log("PUSH ATTRIBUTE: ",a[s]),this.$=[a[s]];break;case 79:console.log("PUSH ATTRIBUTE: ",a[s-1]),a[s].unshift(a[s-1]),this.$=a[s];break;case 80:case 82:this.$=a[s].trim();break;case 81:console.log("kv: ",a[s-1],a[s]);let t={};t[a[s-1].trim()]=a[s].trim(),this.$=t;break;case 83:this.$=""}},table:[{3:1,4:2,5:3,6:4,7:e,8:n,9:r,10:i,11:5,12:10,18:a,22:o,25:s,26:l,27:u,28:h},{1:[3]},{1:[2,1]},{1:[2,2]},{3:17,4:2,5:3,6:4,7:e,8:n,9:r,10:i,11:5,12:10,18:a,22:o,25:s,26:l,27:u,28:h},{1:[2,8]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{1:[2,7]},{13:18,19:[1,19]},{15:[1,20]},{15:[1,21]},{15:[1,22]},{15:[1,23]},{15:[1,24]},{19:[2,11]},{1:[2,3]},{14:25,16:[1,26],21:d},t([16,21],[2,12]),{23:28,29:29,30:30,31:31,32:f,33:p,34:g,36:y,38:m,39:58,40:70,42:71,44:b,46:v,47:_,48:x,49:k,50:w,51:E,53:32,54:T,55:C,56:S,57:A,58:M,59:O,60:N,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et},{23:79,29:29,30:30,31:31,32:f,33:p,34:g,36:y,38:m,39:58,40:70,42:71,44:b,46:v,47:_,48:x,49:k,50:w,51:E,53:32,54:T,55:C,56:S,57:A,58:M,59:O,60:N,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et},{23:80,29:29,30:30,31:31,32:f,33:p,34:g,36:y,38:m,39:58,40:70,42:71,44:b,46:v,47:_,48:x,49:k,50:w,51:E,53:32,54:T,55:C,56:S,57:A,58:M,59:O,60:N,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et},{23:81,29:29,30:30,31:31,32:f,33:p,34:g,36:y,38:m,39:58,40:70,42:71,44:b,46:v,47:_,48:x,49:k,50:w,51:E,53:32,54:T,55:C,56:S,57:A,58:M,59:O,60:N,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et},{23:82,29:29,30:30,31:31,32:f,33:p,34:g,36:y,38:m,39:58,40:70,42:71,44:b,46:v,47:_,48:x,49:k,50:w,51:E,53:32,54:T,55:C,56:S,57:A,58:M,59:O,60:N,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et},{15:[1,83]},{17:84,20:[1,85]},{15:[2,14]},{24:[1,86]},t(nt,[2,20],{53:32,39:58,40:70,42:71,30:87,44:b,46:v,47:_,48:x,49:k,50:w,51:E,54:T,55:C,56:S,57:A,58:M,59:O,60:N,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et}),t(nt,[2,21]),t(rt,[2,23],{15:[1,88]}),t(nt,[2,43],{15:[1,89]}),t(it,[2,26]),t(it,[2,27]),{35:[1,90]},{37:[1,91]},t(it,[2,30]),{45:92,85:93,86:at,87:ot,89:st,90:ct},{45:98,85:93,86:at,87:ot,89:st,90:ct},{45:99,85:93,86:at,87:ot,89:st,90:ct},{45:100,85:93,86:at,87:ot,89:st,90:ct},{45:101,85:93,86:at,87:ot,89:st,90:ct},{45:102,85:93,86:at,87:ot,89:st,90:ct},{45:103,85:93,86:at,87:ot,89:st,90:ct},{45:104,85:93,86:at,87:ot,89:st,90:ct},{45:105,85:93,86:at,87:ot,89:st,90:ct},{45:106,85:93,86:at,87:ot,89:st,90:ct},{45:107,85:93,86:at,87:ot,89:st,90:ct},{45:108,85:93,86:at,87:ot,89:st,90:ct},{45:109,85:93,86:at,87:ot,89:st,90:ct},{45:110,85:93,86:at,87:ot,89:st,90:ct},{45:111,85:93,86:at,87:ot,89:st,90:ct},{45:112,85:93,86:at,87:ot,89:st,90:ct},{45:113,85:93,86:at,87:ot,89:st,90:ct},{45:114,85:93,86:at,87:ot,89:st,90:ct},{45:115,85:93,86:at,87:ot,89:st,90:ct},{45:116,85:93,86:at,87:ot,89:st,90:ct},t(lt,[2,66]),{45:117,85:93,86:at,87:ot,89:st,90:ct},{45:118,85:93,86:at,87:ot,89:st,90:ct},{45:119,85:93,86:at,87:ot,89:st,90:ct},{45:120,85:93,86:at,87:ot,89:st,90:ct},{45:121,85:93,86:at,87:ot,89:st,90:ct},{45:122,85:93,86:at,87:ot,89:st,90:ct},{45:123,85:93,86:at,87:ot,89:st,90:ct},{45:124,85:93,86:at,87:ot,89:st,90:ct},{45:125,85:93,86:at,87:ot,89:st,90:ct},{45:126,85:93,86:at,87:ot,89:st,90:ct},{45:127,85:93,86:at,87:ot,89:st,90:ct},{30:128,39:58,40:70,42:71,44:b,46:v,47:_,48:x,49:k,50:w,51:E,53:32,54:T,55:C,56:S,57:A,58:M,59:O,60:N,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et},{15:[1,130],43:[1,129]},{45:131,85:93,86:at,87:ot,89:st,90:ct},{45:132,85:93,86:at,87:ot,89:st,90:ct},{45:133,85:93,86:at,87:ot,89:st,90:ct},{45:134,85:93,86:at,87:ot,89:st,90:ct},{45:135,85:93,86:at,87:ot,89:st,90:ct},{45:136,85:93,86:at,87:ot,89:st,90:ct},{45:137,85:93,86:at,87:ot,89:st,90:ct},{24:[1,138]},{24:[1,139]},{24:[1,140]},{24:[1,141]},t(ut,[2,9]),{14:142,21:d},{21:[2,13]},{1:[2,15]},t(nt,[2,22]),t(rt,[2,24],{31:31,29:143,32:f,33:p,34:g,36:y,38:m}),t(nt,[2,44],{29:29,30:30,31:31,53:32,39:58,40:70,42:71,23:144,32:f,33:p,34:g,36:y,38:m,44:b,46:v,47:_,48:x,49:k,50:w,51:E,54:T,55:C,56:S,57:A,58:M,59:O,60:N,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et}),t(it,[2,28]),t(it,[2,29]),t(lt,[2,46]),t(ht,[2,78],{85:93,45:145,86:at,87:ot,89:st,90:ct}),t(dt,[2,80]),{88:[1,146]},t(dt,[2,82]),t(dt,[2,83]),t(lt,[2,47]),t(lt,[2,48]),t(lt,[2,49]),t(lt,[2,50]),t(lt,[2,51]),t(lt,[2,52]),t(lt,[2,53]),t(lt,[2,54]),t(lt,[2,55]),t(lt,[2,56]),t(lt,[2,57]),t(lt,[2,58]),t(lt,[2,59]),t(lt,[2,60]),t(lt,[2,61]),t(lt,[2,62]),t(lt,[2,63]),t(lt,[2,64]),t(lt,[2,65]),t(lt,[2,67]),t(lt,[2,68]),t(lt,[2,69]),t(lt,[2,70]),t(lt,[2,71]),t(lt,[2,72]),t(lt,[2,73]),t(lt,[2,74]),t(lt,[2,75]),t(lt,[2,76]),t(lt,[2,77]),{41:147,52:[1,148]},{15:[1,149]},{43:[1,150]},t(ft,[2,35]),t(ft,[2,36]),t(ft,[2,37]),t(ft,[2,38]),t(ft,[2,39]),t(ft,[2,40]),t(ft,[2,41]),{1:[2,16]},{1:[2,17]},{1:[2,18]},{1:[2,19]},{15:[1,151]},t(rt,[2,25]),t(nt,[2,45]),t(ht,[2,79]),t(dt,[2,81]),t(lt,[2,31]),t(lt,[2,42]),t(pt,[2,32]),t(pt,[2,33],{15:[1,152]}),t(ut,[2,10]),t(pt,[2,34])],defaultActions:{2:[2,1],3:[2,2],5:[2,8],6:[2,4],7:[2,5],8:[2,6],9:[2,7],16:[2,11],17:[2,3],27:[2,14],85:[2,13],86:[2,15],138:[2,16],139:[2,17],140:[2,18],141:[2,19]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=0,h=2,d=1,f=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var b=p.options&&p.options.ranges;function v(){var t;return"number"!=typeof(t=r.pop()||p.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=v()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==d?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(l=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,u>0&&u--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},b&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,l,c,g.yy,w[1],i,a].concat(f))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},yt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:return 32;case 10:return 33;case 11:return this.begin("acc_title"),34;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),36;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:case 21:break;case 19:c;break;case 20:return 15;case 22:return 22;case 23:return 25;case 24:return 26;case 25:return 27;case 26:return 28;case 27:return this.begin("person_ext"),console.log("begin person_ext"),55;case 28:return this.begin("person"),console.log("begin person"),54;case 29:return this.begin("system_ext_queue"),console.log("begin system_ext_queue"),61;case 30:return this.begin("system_ext_db"),console.log("begin system_ext_db"),60;case 31:return this.begin("system_ext"),console.log("begin system_ext"),59;case 32:return this.begin("system_queue"),console.log("begin system_queue"),58;case 33:return this.begin("system_db"),console.log("begin system_db"),57;case 34:return this.begin("system"),console.log("begin system"),56;case 35:return this.begin("boundary"),console.log("begin boundary"),47;case 36:return this.begin("enterprise_boundary"),console.log("begin enterprise_boundary"),44;case 37:return this.begin("system_boundary"),console.log("begin system_boundary"),46;case 38:return this.begin("container_ext_queue"),console.log("begin container_ext_queue"),67;case 39:return this.begin("container_ext_db"),console.log("begin container_ext_db"),66;case 40:return this.begin("container_ext"),console.log("begin container_ext"),65;case 41:return this.begin("container_queue"),console.log("begin container_queue"),64;case 42:return this.begin("container_db"),console.log("begin container_db"),63;case 43:return this.begin("container"),console.log("begin container"),62;case 44:return this.begin("container_boundary"),console.log("begin container_boundary"),48;case 45:return this.begin("component_ext_queue"),console.log("begin component_ext_queue"),73;case 46:return this.begin("component_ext_db"),console.log("begin component_ext_db"),72;case 47:return this.begin("component_ext"),console.log("begin component_ext"),71;case 48:return this.begin("component_queue"),console.log("begin component_queue"),70;case 49:return this.begin("component_db"),console.log("begin component_db"),69;case 50:return this.begin("component"),console.log("begin component"),68;case 51:case 52:return this.begin("node"),console.log("begin node"),49;case 53:return this.begin("node_l"),console.log("begin node_l"),50;case 54:return this.begin("node_r"),console.log("begin node_r"),51;case 55:return this.begin("rel"),console.log("begin rel"),74;case 56:return this.begin("birel"),console.log("begin birel"),75;case 57:case 58:return this.begin("rel_u"),console.log("begin rel_u"),76;case 59:case 60:return this.begin("rel_d"),console.log("begin rel_d"),77;case 61:case 62:return this.begin("rel_l"),console.log("begin rel_l"),78;case 63:case 64:return this.begin("rel_r"),console.log("begin rel_r"),79;case 65:return this.begin("rel_b"),console.log("begin rel_b"),80;case 66:return this.begin("rel_index"),console.log("begin rel_index"),81;case 67:return this.begin("update_el_style"),console.log("begin update_el_style"),82;case 68:return this.begin("update_rel_style"),console.log("begin update_rel_style"),83;case 69:return this.begin("update_layout_config"),console.log("begin update_layout_config"),84;case 70:return"EOF_IN_STRUCT";case 71:return console.log("begin attribute with ATTRIBUTE_EMPTY"),this.begin("attribute"),"ATTRIBUTE_EMPTY";case 72:console.log("begin attribute"),this.begin("attribute");break;case 73:console.log("STOP attribute"),this.popState(),console.log("STOP diagram"),this.popState();break;case 74:return console.log(",,"),90;case 75:console.log(",");break;case 76:return console.log("ATTRIBUTE_EMPTY"),90;case 77:console.log("begin string"),this.begin("string");break;case 78:console.log("STOP string"),this.popState();break;case 79:return console.log("STR"),"STR";case 80:console.log("begin string_kv"),this.begin("string_kv");break;case 81:return console.log("STR_KEY"),this.begin("string_kv_key"),"STR_KEY";case 82:console.log("begin string_kv_value"),this.popState(),this.begin("string_kv_value");break;case 83:return console.log("STR_VALUE"),"STR_VALUE";case 84:console.log("STOP string_kv_value"),this.popState(),this.popState();break;case 85:return console.log("not STR"),"STR";case 86:return console.log("begin boundary block"),"LBRACE";case 87:return console.log("STOP boundary block"),"RBRACE";case 88:return"SPACE";case 89:return"EOL";case 90:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},string_kv_value:{rules:[83,84],inclusive:!1},string_kv_key:{rules:[82],inclusive:!1},string_kv:{rules:[81],inclusive:!1},string:{rules:[78,79],inclusive:!1},attribute:{rules:[73,74,75,76,77,80,85],inclusive:!1},update_layout_config:{rules:[70,71,72,73],inclusive:!1},update_rel_style:{rules:[70,71,72,73],inclusive:!1},update_el_style:{rules:[70,71,72,73],inclusive:!1},rel_b:{rules:[70,71,72,73],inclusive:!1},rel_r:{rules:[70,71,72,73],inclusive:!1},rel_l:{rules:[70,71,72,73],inclusive:!1},rel_d:{rules:[70,71,72,73],inclusive:!1},rel_u:{rules:[70,71,72,73],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[70,71,72,73],inclusive:!1},node_r:{rules:[70,71,72,73],inclusive:!1},node_l:{rules:[70,71,72,73],inclusive:!1},node:{rules:[70,71,72,73],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[70,71,72,73],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[70,71,72,73],inclusive:!1},component_ext:{rules:[70,71,72,73],inclusive:!1},component_queue:{rules:[70,71,72,73],inclusive:!1},component_db:{rules:[70,71,72,73],inclusive:!1},component:{rules:[70,71,72,73],inclusive:!1},container_boundary:{rules:[70,71,72,73],inclusive:!1},container_ext_queue:{rules:[],inclusive:!1},container_ext_db:{rules:[70,71,72,73],inclusive:!1},container_ext:{rules:[70,71,72,73],inclusive:!1},container_queue:{rules:[70,71,72,73],inclusive:!1},container_db:{rules:[70,71,72,73],inclusive:!1},container:{rules:[70,71,72,73],inclusive:!1},birel:{rules:[70,71,72,73],inclusive:!1},system_boundary:{rules:[70,71,72,73],inclusive:!1},enterprise_boundary:{rules:[70,71,72,73],inclusive:!1},boundary:{rules:[70,71,72,73],inclusive:!1},system_ext_queue:{rules:[70,71,72,73],inclusive:!1},system_ext_db:{rules:[70,71,72,73],inclusive:!1},system_ext:{rules:[70,71,72,73],inclusive:!1},system_queue:{rules:[70,71,72,73],inclusive:!1},system_db:{rules:[70,71,72,73],inclusive:!1},system:{rules:[70,71,72,73],inclusive:!1},person_ext:{rules:[70,71,72,73],inclusive:!1},person:{rules:[70,71,72,73],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,86,87,88,89,90],inclusive:!0}}};function mt(){this.yy={}}return gt.lexer=yt,mt.prototype=gt,gt.Parser=mt,new mt}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(555).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},1362:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,7],r=[1,8],i=[1,9],a=[1,10],o=[1,13],s=[1,12],c=[1,16,25],l=[1,20],u=[1,31],h=[1,32],d=[1,33],f=[1,35],p=[1,38],g=[1,36],y=[1,37],m=[1,39],b=[1,40],v=[1,41],_=[1,42],x=[1,45],k=[1,46],w=[1,47],E=[1,48],T=[16,25],C=[1,62],S=[1,63],A=[1,64],M=[1,65],O=[1,66],N=[1,67],D=[1,68],B=[16,25,32,44,45,53,56,57,58,59,60,61,62,67,69],L=[16,25,30,32,44,45,49,53,56,57,58,59,60,61,62,67,69,84,85,86,87],I=[5,8,9,10,11,16,19,23,25],F=[53,84,85,86,87],R=[53,61,62,84,85,86,87],P=[53,56,57,58,59,60,84,85,86,87],j=[16,25,32],z=[1,100],Y={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statments:5,direction:6,directive:7,direction_tb:8,direction_bt:9,direction_rl:10,direction_lr:11,graphConfig:12,openDirective:13,typeDirective:14,closeDirective:15,NEWLINE:16,":":17,argDirective:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,CLASS_DIAGRAM:23,statements:24,EOF:25,statement:26,className:27,alphaNumToken:28,classLiteralName:29,GENERICTYPE:30,relationStatement:31,LABEL:32,classStatement:33,methodStatement:34,annotationStatement:35,clickStatement:36,cssClassStatement:37,acc_title:38,acc_title_value:39,acc_descr:40,acc_descr_value:41,acc_descr_multiline_value:42,CLASS:43,STYLE_SEPARATOR:44,STRUCT_START:45,members:46,STRUCT_STOP:47,ANNOTATION_START:48,ANNOTATION_END:49,MEMBER:50,SEPARATOR:51,relation:52,STR:53,relationType:54,lineType:55,AGGREGATION:56,EXTENSION:57,COMPOSITION:58,DEPENDENCY:59,LOLLIPOP:60,LINE:61,DOTTED_LINE:62,CALLBACK:63,LINK:64,LINK_TARGET:65,CLICK:66,CALLBACK_NAME:67,CALLBACK_ARGS:68,HREF:69,CSSCLASS:70,commentToken:71,textToken:72,graphCodeTokens:73,textNoTagsToken:74,TAGSTART:75,TAGEND:76,"==":77,"--":78,PCT:79,DEFAULT:80,SPACE:81,MINUS:82,keywords:83,UNICODE_TEXT:84,NUM:85,ALPHA:86,BQUOTE_STR:87,$accept:0,$end:1},terminals_:{2:"error",5:"statments",8:"direction_tb",9:"direction_bt",10:"direction_rl",11:"direction_lr",16:"NEWLINE",17:":",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",23:"CLASS_DIAGRAM",25:"EOF",30:"GENERICTYPE",32:"LABEL",38:"acc_title",39:"acc_title_value",40:"acc_descr",41:"acc_descr_value",42:"acc_descr_multiline_value",43:"CLASS",44:"STYLE_SEPARATOR",45:"STRUCT_START",47:"STRUCT_STOP",48:"ANNOTATION_START",49:"ANNOTATION_END",50:"MEMBER",51:"SEPARATOR",53:"STR",56:"AGGREGATION",57:"EXTENSION",58:"COMPOSITION",59:"DEPENDENCY",60:"LOLLIPOP",61:"LINE",62:"DOTTED_LINE",63:"CALLBACK",64:"LINK",65:"LINK_TARGET",66:"CLICK",67:"CALLBACK_NAME",68:"CALLBACK_ARGS",69:"HREF",70:"CSSCLASS",73:"graphCodeTokens",75:"TAGSTART",76:"TAGEND",77:"==",78:"--",79:"PCT",80:"DEFAULT",81:"SPACE",82:"MINUS",83:"keywords",84:"UNICODE_TEXT",85:"NUM",86:"ALPHA",87:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[3,1],[3,2],[6,1],[6,1],[6,1],[6,1],[4,1],[7,4],[7,6],[13,1],[14,1],[18,1],[15,1],[12,4],[24,1],[24,2],[24,3],[27,1],[27,1],[27,2],[27,2],[27,2],[26,1],[26,2],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,2],[26,2],[26,1],[33,2],[33,4],[33,5],[33,7],[35,4],[46,1],[46,2],[34,1],[34,2],[34,1],[34,1],[31,3],[31,4],[31,4],[31,5],[52,3],[52,2],[52,2],[52,1],[54,1],[54,1],[54,1],[54,1],[54,1],[55,1],[55,1],[36,3],[36,4],[36,3],[36,4],[36,4],[36,5],[36,3],[36,4],[36,4],[36,5],[36,3],[36,4],[36,4],[36,5],[37,3],[71,1],[71,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[74,1],[74,1],[74,1],[74,1],[28,1],[28,1],[28,1],[29,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 5:r.setDirection("TB");break;case 6:r.setDirection("BT");break;case 7:r.setDirection("RL");break;case 8:r.setDirection("LR");break;case 12:r.parseDirective("%%{","open_directive");break;case 13:r.parseDirective(a[s],"type_directive");break;case 14:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 15:r.parseDirective("}%%","close_directive","class");break;case 20:case 21:this.$=a[s];break;case 22:this.$=a[s-1]+a[s];break;case 23:case 24:this.$=a[s-1]+"~"+a[s];break;case 25:r.addRelation(a[s]);break;case 26:a[s-1].title=r.cleanupLabel(a[s]),r.addRelation(a[s-1]);break;case 34:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 35:case 36:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 37:r.addClass(a[s]);break;case 38:r.addClass(a[s-2]),r.setCssClass(a[s-2],a[s]);break;case 39:r.addClass(a[s-3]),r.addMembers(a[s-3],a[s-1]);break;case 40:r.addClass(a[s-5]),r.setCssClass(a[s-5],a[s-3]),r.addMembers(a[s-5],a[s-1]);break;case 41:r.addAnnotation(a[s],a[s-2]);break;case 42:this.$=[a[s]];break;case 43:a[s].push(a[s-1]),this.$=a[s];break;case 44:case 46:case 47:break;case 45:r.addMember(a[s-1],r.cleanupLabel(a[s]));break;case 48:this.$={id1:a[s-2],id2:a[s],relation:a[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 49:this.$={id1:a[s-3],id2:a[s],relation:a[s-1],relationTitle1:a[s-2],relationTitle2:"none"};break;case 50:this.$={id1:a[s-3],id2:a[s],relation:a[s-2],relationTitle1:"none",relationTitle2:a[s-1]};break;case 51:this.$={id1:a[s-4],id2:a[s],relation:a[s-2],relationTitle1:a[s-3],relationTitle2:a[s-1]};break;case 52:this.$={type1:a[s-2],type2:a[s],lineType:a[s-1]};break;case 53:this.$={type1:"none",type2:a[s],lineType:a[s-1]};break;case 54:this.$={type1:a[s-1],type2:"none",lineType:a[s]};break;case 55:this.$={type1:"none",type2:"none",lineType:a[s]};break;case 56:this.$=r.relationType.AGGREGATION;break;case 57:this.$=r.relationType.EXTENSION;break;case 58:this.$=r.relationType.COMPOSITION;break;case 59:this.$=r.relationType.DEPENDENCY;break;case 60:this.$=r.relationType.LOLLIPOP;break;case 61:this.$=r.lineType.LINE;break;case 62:this.$=r.lineType.DOTTED_LINE;break;case 63:case 69:this.$=a[s-2],r.setClickEvent(a[s-1],a[s]);break;case 64:case 70:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 65:case 73:this.$=a[s-2],r.setLink(a[s-1],a[s]);break;case 66:case 74:this.$=a[s-3],r.setLink(a[s-2],a[s-1],a[s]);break;case 67:case 75:this.$=a[s-3],r.setLink(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 68:case 76:this.$=a[s-4],r.setLink(a[s-3],a[s-2],a[s]),r.setTooltip(a[s-3],a[s-1]);break;case 71:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 72:this.$=a[s-4],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setTooltip(a[s-3],a[s]);break;case 77:r.setCssClass(a[s-1],a[s])}},table:[{3:1,4:2,5:e,6:4,7:5,8:n,9:r,10:i,11:a,12:6,13:11,19:o,23:s},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{3:14,4:2,5:e,6:4,7:5,8:n,9:r,10:i,11:a,12:6,13:11,19:o,23:s},{1:[2,9]},t(c,[2,5]),t(c,[2,6]),t(c,[2,7]),t(c,[2,8]),{14:15,20:[1,16]},{16:[1,17]},{20:[2,12]},{1:[2,4]},{15:18,17:[1,19],22:l},t([17,22],[2,13]),{6:30,7:29,8:n,9:r,10:i,11:a,13:11,19:o,24:21,26:22,27:34,28:43,29:44,31:23,33:24,34:25,35:26,36:27,37:28,38:u,40:h,42:d,43:f,48:p,50:g,51:y,63:m,64:b,66:v,70:_,84:x,85:k,86:w,87:E},{16:[1,49]},{18:50,21:[1,51]},{16:[2,15]},{25:[1,52]},{16:[1,53],25:[2,17]},t(T,[2,25],{32:[1,54]}),t(T,[2,27]),t(T,[2,28]),t(T,[2,29]),t(T,[2,30]),t(T,[2,31]),t(T,[2,32]),t(T,[2,33]),{39:[1,55]},{41:[1,56]},t(T,[2,36]),t(T,[2,44],{52:57,54:60,55:61,32:[1,59],53:[1,58],56:C,57:S,58:A,59:M,60:O,61:N,62:D}),{27:69,28:43,29:44,84:x,85:k,86:w,87:E},t(T,[2,46]),t(T,[2,47]),{28:70,84:x,85:k,86:w},{27:71,28:43,29:44,84:x,85:k,86:w,87:E},{27:72,28:43,29:44,84:x,85:k,86:w,87:E},{27:73,28:43,29:44,84:x,85:k,86:w,87:E},{53:[1,74]},t(B,[2,20],{28:43,29:44,27:75,30:[1,76],84:x,85:k,86:w,87:E}),t(B,[2,21],{30:[1,77]}),t(L,[2,91]),t(L,[2,92]),t(L,[2,93]),t([16,25,30,32,44,45,53,56,57,58,59,60,61,62,67,69],[2,94]),t(I,[2,10]),{15:78,22:l},{22:[2,14]},{1:[2,16]},{6:30,7:29,8:n,9:r,10:i,11:a,13:11,19:o,24:79,25:[2,18],26:22,27:34,28:43,29:44,31:23,33:24,34:25,35:26,36:27,37:28,38:u,40:h,42:d,43:f,48:p,50:g,51:y,63:m,64:b,66:v,70:_,84:x,85:k,86:w,87:E},t(T,[2,26]),t(T,[2,34]),t(T,[2,35]),{27:80,28:43,29:44,53:[1,81],84:x,85:k,86:w,87:E},{52:82,54:60,55:61,56:C,57:S,58:A,59:M,60:O,61:N,62:D},t(T,[2,45]),{55:83,61:N,62:D},t(F,[2,55],{54:84,56:C,57:S,58:A,59:M,60:O}),t(R,[2,56]),t(R,[2,57]),t(R,[2,58]),t(R,[2,59]),t(R,[2,60]),t(P,[2,61]),t(P,[2,62]),t(T,[2,37],{44:[1,85],45:[1,86]}),{49:[1,87]},{53:[1,88]},{53:[1,89]},{67:[1,90],69:[1,91]},{28:92,84:x,85:k,86:w},t(B,[2,22]),t(B,[2,23]),t(B,[2,24]),{16:[1,93]},{25:[2,19]},t(j,[2,48]),{27:94,28:43,29:44,84:x,85:k,86:w,87:E},{27:95,28:43,29:44,53:[1,96],84:x,85:k,86:w,87:E},t(F,[2,54],{54:97,56:C,57:S,58:A,59:M,60:O}),t(F,[2,53]),{28:98,84:x,85:k,86:w},{46:99,50:z},{27:101,28:43,29:44,84:x,85:k,86:w,87:E},t(T,[2,63],{53:[1,102]}),t(T,[2,65],{53:[1,104],65:[1,103]}),t(T,[2,69],{53:[1,105],68:[1,106]}),t(T,[2,73],{53:[1,108],65:[1,107]}),t(T,[2,77]),t(I,[2,11]),t(j,[2,50]),t(j,[2,49]),{27:109,28:43,29:44,84:x,85:k,86:w,87:E},t(F,[2,52]),t(T,[2,38],{45:[1,110]}),{47:[1,111]},{46:112,47:[2,42],50:z},t(T,[2,41]),t(T,[2,64]),t(T,[2,66]),t(T,[2,67],{65:[1,113]}),t(T,[2,70]),t(T,[2,71],{53:[1,114]}),t(T,[2,74]),t(T,[2,75],{65:[1,115]}),t(j,[2,51]),{46:116,50:z},t(T,[2,39]),{47:[2,43]},t(T,[2,68]),t(T,[2,72]),t(T,[2,76]),{47:[1,117]},t(T,[2,40])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],6:[2,9],13:[2,12],14:[2,4],20:[2,15],51:[2,14],52:[2,16],79:[2,19],112:[2,43]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=0,h=2,d=1,f=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var b=p.options&&p.options.ranges;function v(){var t;return"number"!=typeof(t=r.pop()||p.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=v()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==d?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(l=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,u>0&&u--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},b&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,l,c,g.yy,w[1],i,a].concat(f))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},U={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),19;case 1:return 8;case 2:return 9;case 3:return 10;case 4:return 11;case 5:return this.begin("type_directive"),20;case 6:return this.popState(),this.begin("arg_directive"),17;case 7:return this.popState(),this.popState(),22;case 8:return 21;case 9:case 10:case 19:case 27:break;case 11:return this.begin("acc_title"),38;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),40;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 37:case 40:case 43:case 46:case 49:case 52:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:return 16;case 20:case 21:return 23;case 22:return this.begin("struct"),45;case 23:return"EDGE_STATE";case 24:return"EOF_IN_STRUCT";case 25:return"OPEN_IN_STRUCT";case 26:return this.popState(),47;case 28:return"MEMBER";case 29:return 43;case 30:return 70;case 31:return 63;case 32:return 64;case 33:return 66;case 34:return 48;case 35:return 49;case 36:this.begin("generic");break;case 38:return"GENERICTYPE";case 39:this.begin("string");break;case 41:return"STR";case 42:this.begin("bqstring");break;case 44:return"BQUOTE_STR";case 45:this.begin("href");break;case 47:return 69;case 48:this.begin("callback_name");break;case 50:this.popState(),this.begin("callback_args");break;case 51:return 67;case 53:return 68;case 54:case 55:case 56:case 57:return 65;case 58:case 59:return 57;case 60:case 61:return 59;case 62:return 58;case 63:return 56;case 64:return 60;case 65:return 61;case 66:return 62;case 67:return 32;case 68:return 44;case 69:return 82;case 70:return"DOT";case 71:return"PLUS";case 72:return 79;case 73:case 74:return"EQUALS";case 75:return 86;case 76:return"PUNCTUATION";case 77:return 85;case 78:return 84;case 79:return 81;case 80:return 25}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:\[\*\])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},callback_args:{rules:[52,53],inclusive:!1},callback_name:{rules:[49,50,51],inclusive:!1},href:{rules:[46,47],inclusive:!1},struct:{rules:[23,24,25,26,27,28],inclusive:!1},generic:{rules:[37,38],inclusive:!1},bqstring:{rules:[43,44],inclusive:!1},string:{rules:[40,41],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,29,30,31,32,33,34,35,36,39,42,45,48,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80],inclusive:!0}}};function $(){this.yy={}}return Y.lexer=U,$.prototype=Y,Y.Parser=$,new $}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8218).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},5890:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,23,25,27,29,30,49],i=[1,17],a=[1,18],o=[1,19],s=[1,20],c=[1,21],l=[1,24],u=[1,29],h=[1,30],d=[1,31],f=[1,32],p=[6,9,11,15,20,23,25,27,29,30,42,43,44,45,49],g=[1,45],y=[30,46,47],m=[4,6,9,11,23,25,27,29,30,49],b=[42,43,44,45],v=[22,37],_=[1,64],x={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,title:23,title_value:24,acc_title:25,acc_title_value:26,acc_descr:27,acc_descr_value:28,acc_descr_multiline_value:29,ALPHANUM:30,".":31,attribute:32,attributeType:33,attributeName:34,attributeKeyType:35,attributeComment:36,ATTRIBUTE_WORD:37,ATTRIBUTE_KEY:38,COMMENT:39,cardinality:40,relType:41,ZERO_OR_ONE:42,ZERO_OR_MORE:43,ONE_OR_MORE:44,ONLY_ONE:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,open_directive:49,type_directive:50,arg_directive:51,close_directive:52,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"title",24:"title_value",25:"acc_title",26:"acc_title_value",27:"acc_descr",28:"acc_descr_value",29:"acc_descr_multiline_value",30:"ALPHANUM",31:".",37:"ATTRIBUTE_WORD",38:"ATTRIBUTE_KEY",39:"COMMENT",42:"ZERO_OR_ONE",43:"ZERO_OR_MORE",44:"ONE_OR_MORE",45:"ONLY_ONE",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD",49:"open_directive",50:"type_directive",51:"arg_directive",52:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[10,2],[10,2],[10,2],[10,1],[17,1],[17,3],[21,1],[21,2],[32,2],[32,3],[32,3],[32,4],[33,1],[34,1],[35,1],[36,1],[18,3],[40,1],[40,1],[40,1],[40,1],[41,1],[41,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:break;case 3:case 7:case 8:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:case 20:case 28:case 29:case 30:case 40:this.$=a[s];break;case 12:r.addEntity(a[s-4]),r.addEntity(a[s-2]),r.addRelationship(a[s-4],a[s],a[s-2],a[s-3]);break;case 13:r.addEntity(a[s-3]),r.addAttributes(a[s-3],a[s-1]);break;case 14:r.addEntity(a[s-2]);break;case 15:r.addEntity(a[s]);break;case 16:case 17:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 18:case 19:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 21:this.$=a[s-2]+a[s-1]+a[s];break;case 22:this.$=[a[s]];break;case 23:a[s].push(a[s-1]),this.$=a[s];break;case 24:this.$={attributeType:a[s-1],attributeName:a[s]};break;case 25:this.$={attributeType:a[s-2],attributeName:a[s-1],attributeKeyType:a[s]};break;case 26:this.$={attributeType:a[s-2],attributeName:a[s-1],attributeComment:a[s]};break;case 27:this.$={attributeType:a[s-3],attributeName:a[s-2],attributeKeyType:a[s-1],attributeComment:a[s]};break;case 31:case 39:this.$=a[s].replace(/"/g,"");break;case 32:this.$={cardA:a[s],relType:a[s-1],cardB:a[s-2]};break;case 33:this.$=r.Cardinality.ZERO_OR_ONE;break;case 34:this.$=r.Cardinality.ZERO_OR_MORE;break;case 35:this.$=r.Cardinality.ONE_OR_MORE;break;case 36:this.$=r.Cardinality.ONLY_ONE;break;case 37:this.$=r.Identification.NON_IDENTIFYING;break;case 38:this.$=r.Identification.IDENTIFYING;break;case 41:r.parseDirective("%%{","open_directive");break;case 42:r.parseDirective(a[s],"type_directive");break;case 43:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 44:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,49:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,49:n},{13:8,50:[1,9]},{50:[2,41]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:i,25:a,27:o,29:s,30:c,49:n},{1:[2,2]},{14:22,15:[1,23],52:l},t([15,52],[2,42]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:15,10:25,12:4,17:16,23:i,25:a,27:o,29:s,30:c,49:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,15],{18:26,40:28,20:[1,27],42:u,43:h,44:d,45:f}),{24:[1,33]},{26:[1,34]},{28:[1,35]},t(r,[2,19]),t(p,[2,20],{31:[1,36]}),{11:[1,37]},{16:38,51:[1,39]},{11:[2,44]},t(r,[2,5]),{17:40,30:c},{21:41,22:[1,42],32:43,33:44,37:g},{41:46,46:[1,47],47:[1,48]},t(y,[2,33]),t(y,[2,34]),t(y,[2,35]),t(y,[2,36]),t(r,[2,16]),t(r,[2,17]),t(r,[2,18]),{17:49,30:c},t(m,[2,9]),{14:50,52:l},{52:[2,43]},{15:[1,51]},{22:[1,52]},t(r,[2,14]),{21:53,22:[2,22],32:43,33:44,37:g},{34:54,37:[1,55]},{37:[2,28]},{40:56,42:u,43:h,44:d,45:f},t(b,[2,37]),t(b,[2,38]),t(p,[2,21]),{11:[1,57]},{19:58,30:[1,60],48:[1,59]},t(r,[2,13]),{22:[2,23]},t(v,[2,24],{35:61,36:62,38:[1,63],39:_}),t([22,37,38,39],[2,29]),{30:[2,32]},t(m,[2,10]),t(r,[2,12]),t(r,[2,39]),t(r,[2,40]),t(v,[2,25],{36:65,39:_}),t(v,[2,26]),t([22,37,39],[2,30]),t(v,[2,31]),t(v,[2,27])],defaultActions:{5:[2,41],7:[2,2],24:[2,44],39:[2,43],45:[2,28],53:[2,23],56:[2,32]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=0,h=2,d=1,f=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var b=p.options&&p.options.ranges;function v(){var t;return"number"!=typeof(t=r.pop()||p.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=v()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==d?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(l=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,u>0&&u--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},b&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,l,c,g.yy,w[1],i,a].concat(f))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},k={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("acc_title"),25;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),27;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.begin("open_directive"),49;case 8:return this.begin("type_directive"),50;case 9:return this.popState(),this.begin("arg_directive"),15;case 10:return this.popState(),this.popState(),52;case 11:return 51;case 12:case 13:case 15:case 20:case 25:break;case 14:return 11;case 16:return 9;case 17:return 48;case 18:return 4;case 19:return this.begin("block"),20;case 21:return 38;case 22:case 23:return 37;case 24:return 39;case 26:return this.popState(),22;case 27:case 40:return e.yytext[0];case 28:case 32:return 42;case 29:case 33:return 43;case 30:case 34:return 44;case 31:return 45;case 35:case 37:case 38:return 46;case 36:return 47;case 39:return 30;case 41:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[A-Za-z][A-Za-z0-9\-_\[\]]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},open_directive:{rules:[8],inclusive:!1},type_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[10,11],inclusive:!1},block:{rules:[20,21,22,23,24,25,26,27],inclusive:!1},INITIAL:{rules:[0,2,4,7,12,13,14,15,16,17,18,19,28,29,30,31,32,33,34,35,36,37,38,39,40,41],inclusive:!0}}};function w(){this.yy={}}return x.lexer=k,w.prototype=x,x.Parser=w,new w}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8009).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},3602:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,9],n=[1,7],r=[1,6],i=[1,8],a=[1,20,21,22,23,38,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],o=[2,10],s=[1,20],c=[1,21],l=[1,22],u=[1,23],h=[1,30],d=[1,32],f=[1,33],p=[1,34],g=[1,62],y=[1,48],m=[1,52],b=[1,36],v=[1,37],_=[1,38],x=[1,39],k=[1,40],w=[1,56],E=[1,63],T=[1,51],C=[1,53],S=[1,55],A=[1,59],M=[1,60],O=[1,41],N=[1,42],D=[1,43],B=[1,44],L=[1,61],I=[1,50],F=[1,54],R=[1,57],P=[1,58],j=[1,49],z=[1,66],Y=[1,71],U=[1,20,21,22,23,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],$=[1,75],W=[1,74],q=[1,76],H=[20,21,23,81,82],V=[1,99],G=[1,104],X=[1,107],Z=[1,108],Q=[1,101],K=[1,106],J=[1,109],tt=[1,102],et=[1,114],nt=[1,113],rt=[1,103],it=[1,105],at=[1,110],ot=[1,111],st=[1,112],ct=[1,115],lt=[20,21,22,23,81,82],ut=[20,21,22,23,53,81,82],ht=[20,21,22,23,40,52,53,55,57,59,61,63,65,66,67,69,71,73,74,76,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],dt=[20,21,23],ft=[20,21,23,52,66,67,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],pt=[1,12,20,21,22,23,24,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],gt=[52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],yt=[1,149],mt=[1,157],bt=[1,158],vt=[1,159],_t=[1,160],xt=[1,144],kt=[1,145],wt=[1,141],Et=[1,152],Tt=[1,153],Ct=[1,154],St=[1,155],At=[1,156],Mt=[1,161],Ot=[1,162],Nt=[1,147],Dt=[1,150],Bt=[1,146],Lt=[1,143],It=[20,21,22,23,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],Ft=[1,165],Rt=[20,21,22,23,26,52,66,67,91,105,106,109,111,112,122,123,124,125,126,127],Pt=[20,21,22,23,24,26,38,40,41,42,52,56,58,60,62,64,66,67,68,70,72,73,75,77,81,82,86,87,88,89,90,91,92,95,105,106,109,111,112,113,114,122,123,124,125,126,127],jt=[12,21,22,24],zt=[22,106],Yt=[1,250],Ut=[1,245],$t=[1,246],Wt=[1,254],qt=[1,251],Ht=[1,248],Vt=[1,247],Gt=[1,249],Xt=[1,252],Zt=[1,253],Qt=[1,255],Kt=[1,273],Jt=[20,21,23,106],te=[20,21,22,23,66,67,86,102,105,106,109,110,111,112,113],ee={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,acc_title:44,acc_title_value:45,acc_descr:46,acc_descr_value:47,acc_descr_multiline_value:48,link:49,node:50,vertex:51,AMP:52,STYLE_SEPARATOR:53,idString:54,DOUBLECIRCLESTART:55,DOUBLECIRCLEEND:56,PS:57,PE:58,"(-":59,"-)":60,STADIUMSTART:61,STADIUMEND:62,SUBROUTINESTART:63,SUBROUTINEEND:64,VERTEX_WITH_PROPS_START:65,ALPHA:66,COLON:67,PIPE:68,CYLINDERSTART:69,CYLINDEREND:70,DIAMOND_START:71,DIAMOND_STOP:72,TAGEND:73,TRAPSTART:74,TRAPEND:75,INVTRAPSTART:76,INVTRAPEND:77,linkStatement:78,arrowText:79,TESTSTR:80,START_LINK:81,LINK:82,textToken:83,STR:84,keywords:85,STYLE:86,LINKSTYLE:87,CLASSDEF:88,CLASS:89,CLICK:90,DOWN:91,UP:92,textNoTags:93,textNoTagsToken:94,DEFAULT:95,stylesOpt:96,alphaNum:97,CALLBACKNAME:98,CALLBACKARGS:99,HREF:100,LINK_TARGET:101,HEX:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,MINUS:109,UNIT:110,BRKT:111,DOT:112,PCT:113,TAGSTART:114,alphaNumToken:115,idStringToken:116,alphaNumStatement:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,PUNCTUATION:122,UNICODE_TEXT:123,PLUS:124,EQUALS:125,MULT:126,UNDERSCORE:127,graphCodeTokens:128,ARROW_CROSS:129,ARROW_POINT:130,ARROW_CIRCLE:131,ARROW_OPEN:132,QUOTE:133,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",44:"acc_title",45:"acc_title_value",46:"acc_descr",47:"acc_descr_value",48:"acc_descr_multiline_value",52:"AMP",53:"STYLE_SEPARATOR",55:"DOUBLECIRCLESTART",56:"DOUBLECIRCLEEND",57:"PS",58:"PE",59:"(-",60:"-)",61:"STADIUMSTART",62:"STADIUMEND",63:"SUBROUTINESTART",64:"SUBROUTINEEND",65:"VERTEX_WITH_PROPS_START",66:"ALPHA",67:"COLON",68:"PIPE",69:"CYLINDERSTART",70:"CYLINDEREND",71:"DIAMOND_START",72:"DIAMOND_STOP",73:"TAGEND",74:"TRAPSTART",75:"TRAPEND",76:"INVTRAPSTART",77:"INVTRAPEND",80:"TESTSTR",81:"START_LINK",82:"LINK",84:"STR",86:"STYLE",87:"LINKSTYLE",88:"CLASSDEF",89:"CLASS",90:"CLICK",91:"DOWN",92:"UP",95:"DEFAULT",98:"CALLBACKNAME",99:"CALLBACKARGS",100:"HREF",101:"LINK_TARGET",102:"HEX",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"MINUS",110:"UNIT",111:"BRKT",112:"DOT",113:"PCT",114:"TAGSTART",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr",122:"PUNCTUATION",123:"UNICODE_TEXT",124:"PLUS",125:"EQUALS",126:"MULT",127:"UNDERSCORE",129:"ARROW_CROSS",130:"ARROW_POINT",131:"ARROW_CIRCLE",132:"ARROW_OPEN",133:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[19,2],[19,2],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[50,1],[50,5],[50,3],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,8],[51,4],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,4],[51,4],[51,1],[49,2],[49,3],[49,3],[49,1],[49,3],[78,1],[79,3],[39,1],[39,2],[39,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[93,1],[93,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[103,1],[103,3],[96,1],[96,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[94,1],[94,1],[94,1],[94,1],[54,1],[54,2],[97,1],[97,2],[117,1],[117,1],[117,1],[117,1],[43,1],[43,1],[43,1],[43,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 5:r.parseDirective("%%{","open_directive");break;case 6:r.parseDirective(a[s],"type_directive");break;case 7:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 8:r.parseDirective("}%%","close_directive","flowchart");break;case 10:case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 11:a[s]!==[]&&a[s-1].push(a[s]),this.$=a[s-1];break;case 12:case 82:case 84:case 96:case 152:case 154:case 155:case 78:case 150:this.$=a[s];break;case 19:r.setDirection("TB"),this.$="TB";break;case 20:r.setDirection(a[s-1]),this.$=a[s-1];break;case 35:this.$=a[s-1].nodes;break;case 41:this.$=r.addSubGraph(a[s-6],a[s-1],a[s-4]);break;case 42:this.$=r.addSubGraph(a[s-3],a[s-1],a[s-3]);break;case 43:this.$=r.addSubGraph(void 0,a[s-1],void 0);break;case 45:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 46:case 47:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 51:r.addLink(a[s-2].stmt,a[s],a[s-1]),this.$={stmt:a[s],nodes:a[s].concat(a[s-2].nodes)};break;case 52:r.addLink(a[s-3].stmt,a[s-1],a[s-2]),this.$={stmt:a[s-1],nodes:a[s-1].concat(a[s-3].nodes)};break;case 53:this.$={stmt:a[s-1],nodes:a[s-1]};break;case 54:this.$={stmt:a[s],nodes:a[s]};break;case 55:case 123:case 125:this.$=[a[s]];break;case 56:this.$=a[s-4].concat(a[s]);break;case 57:this.$=[a[s-2]],r.setClass(a[s-2],a[s]);break;case 58:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"square");break;case 59:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"doublecircle");break;case 60:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"circle");break;case 61:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"ellipse");break;case 62:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"stadium");break;case 63:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"subroutine");break;case 64:this.$=a[s-7],r.addVertex(a[s-7],a[s-1],"rect",void 0,void 0,void 0,Object.fromEntries([[a[s-5],a[s-3]]]));break;case 65:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"cylinder");break;case 66:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"round");break;case 67:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"diamond");break;case 68:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"hexagon");break;case 69:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"odd");break;case 70:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"trapezoid");break;case 71:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"inv_trapezoid");break;case 72:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_right");break;case 73:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_left");break;case 74:this.$=a[s],r.addVertex(a[s]);break;case 75:a[s-1].text=a[s],this.$=a[s-1];break;case 76:case 77:a[s-2].text=a[s-1],this.$=a[s-2];break;case 79:var c=r.destructLink(a[s],a[s-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:a[s-1]};break;case 80:c=r.destructLink(a[s]),this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 81:this.$=a[s-1];break;case 83:case 97:case 153:case 151:this.$=a[s-1]+""+a[s];break;case 98:case 99:this.$=a[s-4],r.addClass(a[s-2],a[s]);break;case 100:this.$=a[s-4],r.setClass(a[s-2],a[s]);break;case 101:case 109:this.$=a[s-1],r.setClickEvent(a[s-1],a[s]);break;case 102:case 110:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 103:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 104:this.$=a[s-4],r.setClickEvent(a[s-4],a[s-3],a[s-2]),r.setTooltip(a[s-4],a[s]);break;case 105:case 111:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 106:case 112:this.$=a[s-3],r.setLink(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 107:case 113:this.$=a[s-3],r.setLink(a[s-3],a[s-2],a[s]);break;case 108:case 114:this.$=a[s-5],r.setLink(a[s-5],a[s-4],a[s]),r.setTooltip(a[s-5],a[s-2]);break;case 115:this.$=a[s-4],r.addVertex(a[s-2],void 0,void 0,a[s]);break;case 116:case 118:this.$=a[s-4],r.updateLink(a[s-2],a[s]);break;case 117:this.$=a[s-4],r.updateLink([a[s-2]],a[s]);break;case 119:this.$=a[s-8],r.updateLinkInterpolate([a[s-6]],a[s-2]),r.updateLink([a[s-6]],a[s]);break;case 120:this.$=a[s-8],r.updateLinkInterpolate(a[s-6],a[s-2]),r.updateLink(a[s-6],a[s]);break;case 121:this.$=a[s-6],r.updateLinkInterpolate([a[s-4]],a[s]);break;case 122:this.$=a[s-6],r.updateLinkInterpolate(a[s-4],a[s]);break;case 124:case 126:a[s-2].push(a[s]),this.$=a[s-2];break;case 128:this.$=a[s-1]+a[s];break;case 156:this.$="v";break;case 157:this.$="-";break;case 158:this.$={stmt:"dir",value:"TB"};break;case 159:this.$={stmt:"dir",value:"BT"};break;case 160:this.$={stmt:"dir",value:"RL"};break;case 161:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},t(a,o,{17:11}),{7:12,13:[1,13]},{16:14,21:n,22:r,24:i},{16:15,21:n,22:r,24:i},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:s,21:c,22:l,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:31,44:d,46:f,48:p,50:35,51:45,52:g,54:46,66:y,67:m,86:b,87:v,88:_,89:x,90:k,91:w,95:E,105:T,106:C,109:S,111:A,112:M,116:47,118:O,119:N,120:D,121:B,122:L,123:I,124:F,125:R,126:P,127:j},{8:64,10:[1,65],15:z},t([10,15],[2,6]),t(a,[2,17]),t(a,[2,18]),t(a,[2,19]),{20:[1,68],21:[1,69],22:Y,27:67,30:70},t(U,[2,11]),t(U,[2,12]),t(U,[2,13]),t(U,[2,14]),t(U,[2,15]),t(U,[2,16]),{9:72,20:$,21:W,23:q,49:73,78:77,81:[1,78],82:[1,79]},{9:80,20:$,21:W,23:q},{9:81,20:$,21:W,23:q},{9:82,20:$,21:W,23:q},{9:83,20:$,21:W,23:q},{9:84,20:$,21:W,23:q},{9:86,20:$,21:W,22:[1,85],23:q},t(U,[2,44]),{45:[1,87]},{47:[1,88]},t(U,[2,47]),t(H,[2,54],{30:89,22:Y}),{22:[1,90]},{22:[1,91]},{22:[1,92]},{22:[1,93]},{26:V,52:G,66:X,67:Z,84:[1,97],91:Q,97:96,98:[1,94],100:[1,95],105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(U,[2,158]),t(U,[2,159]),t(U,[2,160]),t(U,[2,161]),t(lt,[2,55],{53:[1,116]}),t(ut,[2,74],{116:129,40:[1,117],52:g,55:[1,118],57:[1,119],59:[1,120],61:[1,121],63:[1,122],65:[1,123],66:y,67:m,69:[1,124],71:[1,125],73:[1,126],74:[1,127],76:[1,128],91:w,95:E,105:T,106:C,109:S,111:A,112:M,122:L,123:I,124:F,125:R,126:P,127:j}),t(ht,[2,150]),t(ht,[2,175]),t(ht,[2,176]),t(ht,[2,177]),t(ht,[2,178]),t(ht,[2,179]),t(ht,[2,180]),t(ht,[2,181]),t(ht,[2,182]),t(ht,[2,183]),t(ht,[2,184]),t(ht,[2,185]),t(ht,[2,186]),t(ht,[2,187]),t(ht,[2,188]),t(ht,[2,189]),t(ht,[2,190]),{9:130,20:$,21:W,23:q},{11:131,14:[1,132]},t(dt,[2,8]),t(a,[2,20]),t(a,[2,26]),t(a,[2,27]),{21:[1,133]},t(ft,[2,34],{30:134,22:Y}),t(U,[2,35]),{50:135,51:45,52:g,54:46,66:y,67:m,91:w,95:E,105:T,106:C,109:S,111:A,112:M,116:47,122:L,123:I,124:F,125:R,126:P,127:j},t(pt,[2,48]),t(pt,[2,49]),t(pt,[2,50]),t(gt,[2,78],{79:136,68:[1,138],80:[1,137]}),{22:yt,24:mt,26:bt,38:vt,39:139,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t([52,66,67,68,80,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,80]),t(U,[2,36]),t(U,[2,37]),t(U,[2,38]),t(U,[2,39]),t(U,[2,40]),{22:yt,24:mt,26:bt,38:vt,39:163,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(It,o,{17:164}),t(U,[2,45]),t(U,[2,46]),t(H,[2,53],{52:Ft}),{26:V,52:G,66:X,67:Z,91:Q,97:166,102:[1,167],105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},{95:[1,168],103:169,105:[1,170]},{26:V,52:G,66:X,67:Z,91:Q,95:[1,171],97:172,105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},{26:V,52:G,66:X,67:Z,91:Q,97:173,105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(dt,[2,101],{22:[1,174],99:[1,175]}),t(dt,[2,105],{22:[1,176]}),t(dt,[2,109],{115:100,117:178,22:[1,177],26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,122:rt,123:it,124:at,125:ot,126:st,127:ct}),t(dt,[2,111],{22:[1,179]}),t(Rt,[2,152]),t(Rt,[2,154]),t(Rt,[2,155]),t(Rt,[2,156]),t(Rt,[2,157]),t(Pt,[2,162]),t(Pt,[2,163]),t(Pt,[2,164]),t(Pt,[2,165]),t(Pt,[2,166]),t(Pt,[2,167]),t(Pt,[2,168]),t(Pt,[2,169]),t(Pt,[2,170]),t(Pt,[2,171]),t(Pt,[2,172]),t(Pt,[2,173]),t(Pt,[2,174]),{52:g,54:180,66:y,67:m,91:w,95:E,105:T,106:C,109:S,111:A,112:M,116:47,122:L,123:I,124:F,125:R,126:P,127:j},{22:yt,24:mt,26:bt,38:vt,39:181,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:182,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:184,42:_t,52:G,57:[1,183],66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:185,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:186,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:187,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{66:[1,188]},{22:yt,24:mt,26:bt,38:vt,39:189,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:190,42:_t,52:G,66:X,67:Z,71:[1,191],73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:192,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:193,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:194,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(ht,[2,151]),t(jt,[2,3]),{8:195,15:z},{15:[2,7]},t(a,[2,28]),t(ft,[2,33]),t(H,[2,51],{30:196,22:Y}),t(gt,[2,75],{22:[1,197]}),{22:[1,198]},{22:yt,24:mt,26:bt,38:vt,39:199,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,73:xt,81:kt,82:[1,200],83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(Pt,[2,82]),t(Pt,[2,84]),t(Pt,[2,140]),t(Pt,[2,141]),t(Pt,[2,142]),t(Pt,[2,143]),t(Pt,[2,144]),t(Pt,[2,145]),t(Pt,[2,146]),t(Pt,[2,147]),t(Pt,[2,148]),t(Pt,[2,149]),t(Pt,[2,85]),t(Pt,[2,86]),t(Pt,[2,87]),t(Pt,[2,88]),t(Pt,[2,89]),t(Pt,[2,90]),t(Pt,[2,91]),t(Pt,[2,92]),t(Pt,[2,93]),t(Pt,[2,94]),t(Pt,[2,95]),{9:203,20:$,21:W,22:yt,23:q,24:mt,26:bt,38:vt,40:[1,202],42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{18:18,19:19,20:s,21:c,22:l,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,204],43:31,44:d,46:f,48:p,50:35,51:45,52:g,54:46,66:y,67:m,86:b,87:v,88:_,89:x,90:k,91:w,95:E,105:T,106:C,109:S,111:A,112:M,116:47,118:O,119:N,120:D,121:B,122:L,123:I,124:F,125:R,126:P,127:j},{22:Y,30:205},{22:[1,206],26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,115:100,117:178,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:[1,207]},{22:[1,208]},{22:[1,209],106:[1,210]},t(zt,[2,123]),{22:[1,211]},{22:[1,212],26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,115:100,117:178,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:[1,213],26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,115:100,117:178,122:rt,123:it,124:at,125:ot,126:st,127:ct},{84:[1,214]},t(dt,[2,103],{22:[1,215]}),{84:[1,216],101:[1,217]},{84:[1,218]},t(Rt,[2,153]),{84:[1,219],101:[1,220]},t(lt,[2,57],{116:129,52:g,66:y,67:m,91:w,95:E,105:T,106:C,109:S,111:A,112:M,122:L,123:I,124:F,125:R,126:P,127:j}),{22:yt,24:mt,26:bt,38:vt,41:[1,221],42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,56:[1,222],66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:223,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,58:[1,224],66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,60:[1,225],66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,62:[1,226],66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,64:[1,227],66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{67:[1,228]},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,70:[1,229],73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,72:[1,230],73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:231,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,41:[1,232],42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,73:xt,75:[1,233],77:[1,234],81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,73:xt,75:[1,236],77:[1,235],81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{9:237,20:$,21:W,23:q},t(H,[2,52],{52:Ft}),t(gt,[2,77]),t(gt,[2,76]),{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,68:[1,238],73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(gt,[2,79]),t(Pt,[2,83]),{22:yt,24:mt,26:bt,38:vt,39:239,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(It,o,{17:240}),t(U,[2,43]),{51:241,52:g,54:46,66:y,67:m,91:w,95:E,105:T,106:C,109:S,111:A,112:M,116:47,122:L,123:I,124:F,125:R,126:P,127:j},{22:Yt,66:Ut,67:$t,86:Wt,96:242,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{22:Yt,66:Ut,67:$t,86:Wt,96:256,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{22:Yt,66:Ut,67:$t,86:Wt,96:257,102:qt,104:[1,258],105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{22:Yt,66:Ut,67:$t,86:Wt,96:259,102:qt,104:[1,260],105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{105:[1,261]},{22:Yt,66:Ut,67:$t,86:Wt,96:262,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{22:Yt,66:Ut,67:$t,86:Wt,96:263,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{26:V,52:G,66:X,67:Z,91:Q,97:264,105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(dt,[2,102]),{84:[1,265]},t(dt,[2,106],{22:[1,266]}),t(dt,[2,107]),t(dt,[2,110]),t(dt,[2,112],{22:[1,267]}),t(dt,[2,113]),t(ut,[2,58]),t(ut,[2,59]),{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,58:[1,268],66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(ut,[2,66]),t(ut,[2,61]),t(ut,[2,62]),t(ut,[2,63]),{66:[1,269]},t(ut,[2,65]),t(ut,[2,67]),{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,72:[1,270],73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(ut,[2,69]),t(ut,[2,70]),t(ut,[2,72]),t(ut,[2,71]),t(ut,[2,73]),t(jt,[2,4]),t([22,52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,81]),{22:yt,24:mt,26:bt,38:vt,41:[1,271],42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{18:18,19:19,20:s,21:c,22:l,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,272],43:31,44:d,46:f,48:p,50:35,51:45,52:g,54:46,66:y,67:m,86:b,87:v,88:_,89:x,90:k,91:w,95:E,105:T,106:C,109:S,111:A,112:M,116:47,118:O,119:N,120:D,121:B,122:L,123:I,124:F,125:R,126:P,127:j},t(lt,[2,56]),t(dt,[2,115],{106:Kt}),t(Jt,[2,125],{108:274,22:Yt,66:Ut,67:$t,86:Wt,102:qt,105:Ht,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt}),t(te,[2,127]),t(te,[2,129]),t(te,[2,130]),t(te,[2,131]),t(te,[2,132]),t(te,[2,133]),t(te,[2,134]),t(te,[2,135]),t(te,[2,136]),t(te,[2,137]),t(te,[2,138]),t(te,[2,139]),t(dt,[2,116],{106:Kt}),t(dt,[2,117],{106:Kt}),{22:[1,275]},t(dt,[2,118],{106:Kt}),{22:[1,276]},t(zt,[2,124]),t(dt,[2,98],{106:Kt}),t(dt,[2,99],{106:Kt}),t(dt,[2,100],{115:100,117:178,26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,122:rt,123:it,124:at,125:ot,126:st,127:ct}),t(dt,[2,104]),{101:[1,277]},{101:[1,278]},{58:[1,279]},{68:[1,280]},{72:[1,281]},{9:282,20:$,21:W,23:q},t(U,[2,42]),{22:Yt,66:Ut,67:$t,86:Wt,102:qt,105:Ht,107:283,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},t(te,[2,128]),{26:V,52:G,66:X,67:Z,91:Q,97:284,105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},{26:V,52:G,66:X,67:Z,91:Q,97:285,105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(dt,[2,108]),t(dt,[2,114]),t(ut,[2,60]),{22:yt,24:mt,26:bt,38:vt,39:286,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(ut,[2,68]),t(It,o,{17:287}),t(Jt,[2,126],{108:274,22:Yt,66:Ut,67:$t,86:Wt,102:qt,105:Ht,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt}),t(dt,[2,121],{115:100,117:178,22:[1,288],26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,122:rt,123:it,124:at,125:ot,126:st,127:ct}),t(dt,[2,122],{115:100,117:178,22:[1,289],26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,122:rt,123:it,124:at,125:ot,126:st,127:ct}),{22:yt,24:mt,26:bt,38:vt,41:[1,290],42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Et,87:Tt,88:Ct,89:St,90:At,91:Mt,92:Ot,94:142,95:Nt,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{18:18,19:19,20:s,21:c,22:l,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,291],43:31,44:d,46:f,48:p,50:35,51:45,52:g,54:46,66:y,67:m,86:b,87:v,88:_,89:x,90:k,91:w,95:E,105:T,106:C,109:S,111:A,112:M,116:47,118:O,119:N,120:D,121:B,122:L,123:I,124:F,125:R,126:P,127:j},{22:Yt,66:Ut,67:$t,86:Wt,96:292,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{22:Yt,66:Ut,67:$t,86:Wt,96:293,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},t(ut,[2,64]),t(U,[2,41]),t(dt,[2,119],{106:Kt}),t(dt,[2,120],{106:Kt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],132:[2,7]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=0,h=2,d=1,f=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var b=p.options&&p.options.ranges;function v(){var t;return"number"!=typeof(t=r.pop()||p.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=v()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==d?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(l=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,u>0&&u--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},b&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,l,c,g.yy,w[1],i,a].concat(f))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},ne={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:return this.begin("acc_title"),44;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),46;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:case 15:case 24:case 27:case 30:case 33:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 16:return"STR";case 17:return 86;case 18:return 95;case 19:return 87;case 20:return 104;case 21:return 88;case 22:return 89;case 23:this.begin("href");break;case 25:return 100;case 26:this.begin("callbackname");break;case 28:this.popState(),this.begin("callbackargs");break;case 29:return 98;case 31:return 99;case 32:this.begin("click");break;case 34:return 90;case 35:case 36:return t.lex.firstGraph()&&this.begin("dir"),24;case 37:return 38;case 38:return 42;case 39:case 40:case 41:case 42:return 101;case 43:return this.popState(),25;case 44:case 45:case 46:case 47:case 48:case 49:case 50:case 51:case 52:case 53:return this.popState(),26;case 54:return 118;case 55:return 119;case 56:return 120;case 57:return 121;case 58:return 105;case 59:return 111;case 60:return 53;case 61:return 67;case 62:return 52;case 63:return 20;case 64:return 106;case 65:return 126;case 66:case 67:case 68:return 82;case 69:case 70:case 71:return 81;case 72:return 59;case 73:return 60;case 74:return 61;case 75:return 62;case 76:return 63;case 77:return 64;case 78:return 65;case 79:return 69;case 80:return 70;case 81:return 55;case 82:return 56;case 83:return 109;case 84:return 112;case 85:return 127;case 86:return 124;case 87:return 113;case 88:case 89:return 125;case 90:return 114;case 91:return 73;case 92:return 92;case 93:return"SEP";case 94:return 91;case 95:return 66;case 96:return 75;case 97:return 74;case 98:return 77;case 99:return 76;case 100:return 122;case 101:return 123;case 102:return 68;case 103:return 57;case 104:return 58;case 105:return 40;case 106:return 41;case 107:return 71;case 108:return 72;case 109:return 133;case 110:return 21;case 111:return 22;case 112:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\])/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[30,31],inclusive:!1},callbackname:{rules:[27,28,29],inclusive:!1},href:{rules:[24,25],inclusive:!1},click:{rules:[33,34],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[43,44,45,46,47,48,49,50,51,52,53],inclusive:!1},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,5,6,7,9,11,14,17,18,19,20,21,22,23,26,32,35,36,37,38,39,40,41,42,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112],inclusive:!0}}};function re(){this.yy={}}return ee.lexer=ne,re.prototype=ee,ee.Parser=re,new re}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(5354).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},9959:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[7,9,11,12,13,14,15,16,17,18,19,20,22,24,25,27,34,39],i=[1,15],a=[1,16],o=[1,17],s=[1,18],c=[1,19],l=[1,20],u=[1,21],h=[1,22],d=[1,23],f=[1,24],p=[1,25],g=[1,26],y=[1,28],m=[1,30],b=[1,33],v=[5,7,9,11,12,13,14,15,16,17,18,19,20,22,24,25,27,34,39],_={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,topAxis:14,axisFormat:15,excludes:16,includes:17,todayMarker:18,title:19,acc_title:20,acc_title_value:21,acc_descr:22,acc_descr_value:23,acc_descr_multiline_value:24,section:25,clickStatement:26,taskTxt:27,taskData:28,openDirective:29,typeDirective:30,closeDirective:31,":":32,argDirective:33,click:34,callbackname:35,callbackargs:36,href:37,clickStatementDebug:38,open_directive:39,type_directive:40,arg_directive:41,close_directive:42,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"topAxis",15:"axisFormat",16:"excludes",17:"includes",18:"todayMarker",19:"title",20:"acc_title",21:"acc_title_value",22:"acc_descr",23:"acc_descr_value",24:"acc_descr_multiline_value",25:"section",27:"taskTxt",28:"taskData",32:":",34:"click",35:"callbackname",36:"callbackargs",37:"href",39:"open_directive",40:"type_directive",41:"arg_directive",42:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[26,2],[26,3],[26,3],[26,4],[26,3],[26,4],[26,2],[38,2],[38,3],[38,3],[38,4],[38,3],[38,4],[38,2],[29,1],[30,1],[33,1],[31,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 2:return a[s-1];case 3:case 7:case 8:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 9:r.setDateFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 10:r.enableInclusiveEndDates(),this.$=a[s].substr(18);break;case 11:r.TopAxis(),this.$=a[s].substr(8);break;case 12:r.setAxisFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 13:r.setExcludes(a[s].substr(9)),this.$=a[s].substr(9);break;case 14:r.setIncludes(a[s].substr(9)),this.$=a[s].substr(9);break;case 15:r.setTodayMarker(a[s].substr(12)),this.$=a[s].substr(12);break;case 16:r.setDiagramTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 17:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 18:case 19:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 20:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 22:r.addTask(a[s-1],a[s]),this.$="task";break;case 26:this.$=a[s-1],r.setClickEvent(a[s-1],a[s],null);break;case 27:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 28:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],null),r.setLink(a[s-2],a[s]);break;case 29:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setLink(a[s-3],a[s]);break;case 30:this.$=a[s-2],r.setClickEvent(a[s-2],a[s],null),r.setLink(a[s-2],a[s-1]);break;case 31:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-1],a[s]),r.setLink(a[s-3],a[s-2]);break;case 32:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 33:case 39:this.$=a[s-1]+" "+a[s];break;case 34:case 35:case 37:this.$=a[s-2]+" "+a[s-1]+" "+a[s];break;case 36:case 38:this.$=a[s-3]+" "+a[s-2]+" "+a[s-1]+" "+a[s];break;case 40:r.parseDirective("%%{","open_directive");break;case 41:r.parseDirective(a[s],"type_directive");break;case 42:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 43:r.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:e,29:4,39:n},{1:[3]},{3:6,4:2,5:e,29:4,39:n},t(r,[2,3],{6:7}),{30:8,40:[1,9]},{40:[2,40]},{1:[2,1]},{4:29,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:i,13:a,14:o,15:s,16:c,17:l,18:u,19:h,20:d,22:f,24:p,25:g,26:27,27:y,29:4,34:m,39:n},{31:31,32:[1,32],42:b},t([32,42],[2,41]),t(r,[2,8],{1:[2,2]}),t(r,[2,4]),{4:29,10:34,12:i,13:a,14:o,15:s,16:c,17:l,18:u,19:h,20:d,22:f,24:p,25:g,26:27,27:y,29:4,34:m,39:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,9]),t(r,[2,10]),t(r,[2,11]),t(r,[2,12]),t(r,[2,13]),t(r,[2,14]),t(r,[2,15]),t(r,[2,16]),{21:[1,35]},{23:[1,36]},t(r,[2,19]),t(r,[2,20]),t(r,[2,21]),{28:[1,37]},t(r,[2,23]),{35:[1,38],37:[1,39]},{11:[1,40]},{33:41,41:[1,42]},{11:[2,43]},t(r,[2,5]),t(r,[2,17]),t(r,[2,18]),t(r,[2,22]),t(r,[2,26],{36:[1,43],37:[1,44]}),t(r,[2,32],{35:[1,45]}),t(v,[2,24]),{31:46,42:b},{42:[2,42]},t(r,[2,27],{37:[1,47]}),t(r,[2,28]),t(r,[2,30],{36:[1,48]}),{11:[1,49]},t(r,[2,29]),t(r,[2,31]),t(v,[2,25])],defaultActions:{5:[2,40],6:[2,1],33:[2,43],42:[2,42]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=0,h=2,d=1,f=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var b=p.options&&p.options.ranges;function v(){var t;return"number"!=typeof(t=r.pop()||p.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=v()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==d?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(l=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,u>0&&u--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},b&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,l,c,g.yy,w[1],i,a].concat(f))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},x={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),39;case 1:return this.begin("type_directive"),40;case 2:return this.popState(),this.begin("arg_directive"),32;case 3:return this.popState(),this.popState(),42;case 4:return 41;case 5:return this.begin("acc_title"),20;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),22;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 20:case 23:case 26:case 29:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:case 13:case 14:case 16:case 17:case 18:break;case 15:return 11;case 19:this.begin("href");break;case 21:return 37;case 22:this.begin("callbackname");break;case 24:this.popState(),this.begin("callbackargs");break;case 25:return 35;case 27:return 36;case 28:this.begin("click");break;case 30:return 34;case 31:return 5;case 32:return 12;case 33:return 13;case 34:return 14;case 35:return 15;case 36:return 17;case 37:return 16;case 38:return 18;case 39:return"date";case 40:return 19;case 41:return"accDescription";case 42:return 25;case 43:return 27;case 44:return 28;case 45:return 32;case 46:return 7;case 47:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[26,27],inclusive:!1},callbackname:{rules:[23,24,25],inclusive:!1},href:{rules:[20,21],inclusive:!1},click:{rules:[29,30],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,22,28,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],inclusive:!0}}};function k(){this.yy={}}return _.lexer=x,k.prototype=_,_.Parser=k,new k}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(6878).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},2553:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,7],r=[1,5],i=[1,9],a=[1,6],o=[2,6],s=[1,16],c=[6,8,14,20,22,24,25,27,29,32,35,39,49,53],l=[8,14,20,22,24,25,27,29,32,35,39],u=[8,13,14,20,22,24,25,27,29,32,35,39],h=[1,26],d=[6,8,14,49,53],f=[8,14,53],p=[1,64],g=[1,65],y=[1,66],m=[8,14,33,38,41,53],b={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,GG:6,document:7,EOF:8,":":9,DIR:10,options:11,body:12,OPT:13,NL:14,line:15,statement:16,commitStatement:17,mergeStatement:18,cherryPickStatement:19,acc_title:20,acc_title_value:21,acc_descr:22,acc_descr_value:23,acc_descr_multiline_value:24,section:25,branchStatement:26,CHECKOUT:27,ID:28,BRANCH:29,ORDER:30,NUM:31,CHERRY_PICK:32,COMMIT_ID:33,STR:34,MERGE:35,COMMIT_TYPE:36,commitType:37,COMMIT_TAG:38,COMMIT:39,commit_arg:40,COMMIT_MSG:41,NORMAL:42,REVERSE:43,HIGHLIGHT:44,openDirective:45,typeDirective:46,closeDirective:47,argDirective:48,open_directive:49,type_directive:50,arg_directive:51,close_directive:52,";":53,$accept:0,$end:1},terminals_:{2:"error",6:"GG",8:"EOF",9:":",10:"DIR",13:"OPT",14:"NL",20:"acc_title",21:"acc_title_value",22:"acc_descr",23:"acc_descr_value",24:"acc_descr_multiline_value",25:"section",27:"CHECKOUT",28:"ID",29:"BRANCH",30:"ORDER",31:"NUM",32:"CHERRY_PICK",33:"COMMIT_ID",34:"STR",35:"MERGE",36:"COMMIT_TYPE",38:"COMMIT_TAG",39:"COMMIT",41:"COMMIT_MSG",42:"NORMAL",43:"REVERSE",44:"HIGHLIGHT",49:"open_directive",50:"type_directive",51:"arg_directive",52:"close_directive",53:";"},productions_:[0,[3,2],[3,2],[3,3],[3,4],[3,5],[7,0],[7,2],[11,2],[11,1],[12,0],[12,2],[15,2],[15,1],[16,1],[16,1],[16,1],[16,2],[16,2],[16,1],[16,1],[16,1],[16,2],[26,2],[26,4],[19,3],[18,2],[18,4],[18,4],[18,4],[18,6],[18,6],[18,6],[18,6],[18,6],[18,6],[18,8],[18,8],[18,8],[18,8],[18,8],[18,8],[17,2],[17,3],[17,3],[17,5],[17,5],[17,3],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,3],[17,5],[17,5],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[40,0],[40,1],[37,1],[37,1],[37,1],[5,3],[5,5],[45,1],[46,1],[48,1],[47,1],[4,1],[4,1],[4,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 3:return a[s];case 4:return a[s-1];case 5:return r.setDirection(a[s-3]),a[s-1];case 7:r.setOptions(a[s-1]),this.$=a[s];break;case 8:a[s-1]+=a[s],this.$=a[s-1];break;case 10:this.$=[];break;case 11:a[s-1].push(a[s]),this.$=a[s-1];break;case 12:this.$=a[s-1];break;case 17:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 18:case 19:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 20:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 22:r.checkout(a[s]);break;case 23:r.branch(a[s]);break;case 24:r.branch(a[s-2],a[s]);break;case 25:r.cherryPick(a[s]);break;case 26:r.merge(a[s],"","","");break;case 27:r.merge(a[s-2],a[s],"","");break;case 28:r.merge(a[s-2],"",a[s],"");break;case 29:r.merge(a[s-2],"","",a[s]);break;case 30:r.merge(a[s-4],a[s],"",a[s-2]);break;case 31:r.merge(a[s-4],"",a[s],a[s-2]);break;case 32:r.merge(a[s-4],"",a[s-2],a[s]);break;case 33:r.merge(a[s-4],a[s-2],a[s],"");break;case 34:r.merge(a[s-4],a[s-2],"",a[s]);break;case 35:r.merge(a[s-4],a[s],a[s-2],"");break;case 36:r.merge(a[s-6],a[s-4],a[s-2],a[s]);break;case 37:r.merge(a[s-6],a[s],a[s-4],a[s-2]);break;case 38:r.merge(a[s-6],a[s-4],a[s],a[s-2]);break;case 39:r.merge(a[s-6],a[s-2],a[s-4],a[s]);break;case 40:r.merge(a[s-6],a[s],a[s-2],a[s-4]);break;case 41:r.merge(a[s-6],a[s-2],a[s],a[s-4]);break;case 42:r.commit(a[s]);break;case 43:r.commit("","",r.commitType.NORMAL,a[s]);break;case 44:r.commit("","",a[s],"");break;case 45:r.commit("","",a[s],a[s-2]);break;case 46:r.commit("","",a[s-2],a[s]);break;case 47:r.commit("",a[s],r.commitType.NORMAL,"");break;case 48:r.commit("",a[s-2],r.commitType.NORMAL,a[s]);break;case 49:r.commit("",a[s],r.commitType.NORMAL,a[s-2]);break;case 50:r.commit("",a[s-2],a[s],"");break;case 51:r.commit("",a[s],a[s-2],"");break;case 52:r.commit("",a[s-4],a[s-2],a[s]);break;case 53:r.commit("",a[s-4],a[s],a[s-2]);break;case 54:r.commit("",a[s-2],a[s-4],a[s]);break;case 55:r.commit("",a[s],a[s-4],a[s-2]);break;case 56:r.commit("",a[s],a[s-2],a[s-4]);break;case 57:r.commit("",a[s-2],a[s],a[s-4]);break;case 58:r.commit(a[s],"",r.commitType.NORMAL,"");break;case 59:r.commit(a[s],"",r.commitType.NORMAL,a[s-2]);break;case 60:r.commit(a[s-2],"",r.commitType.NORMAL,a[s]);break;case 61:r.commit(a[s-2],"",a[s],"");break;case 62:r.commit(a[s],"",a[s-2],"");break;case 63:r.commit(a[s],a[s-2],r.commitType.NORMAL,"");break;case 64:r.commit(a[s-2],a[s],r.commitType.NORMAL,"");break;case 65:r.commit(a[s-4],"",a[s-2],a[s]);break;case 66:r.commit(a[s-4],"",a[s],a[s-2]);break;case 67:r.commit(a[s-2],"",a[s-4],a[s]);break;case 68:r.commit(a[s],"",a[s-4],a[s-2]);break;case 69:r.commit(a[s],"",a[s-2],a[s-4]);break;case 70:r.commit(a[s-2],"",a[s],a[s-4]);break;case 71:r.commit(a[s-4],a[s],a[s-2],"");break;case 72:r.commit(a[s-4],a[s-2],a[s],"");break;case 73:r.commit(a[s-2],a[s],a[s-4],"");break;case 74:r.commit(a[s],a[s-2],a[s-4],"");break;case 75:r.commit(a[s],a[s-4],a[s-2],"");break;case 76:r.commit(a[s-2],a[s-4],a[s],"");break;case 77:r.commit(a[s-4],a[s],r.commitType.NORMAL,a[s-2]);break;case 78:r.commit(a[s-4],a[s-2],r.commitType.NORMAL,a[s]);break;case 79:r.commit(a[s-2],a[s],r.commitType.NORMAL,a[s-4]);break;case 80:r.commit(a[s],a[s-2],r.commitType.NORMAL,a[s-4]);break;case 81:r.commit(a[s],a[s-4],r.commitType.NORMAL,a[s-2]);break;case 82:r.commit(a[s-2],a[s-4],r.commitType.NORMAL,a[s]);break;case 83:r.commit(a[s-6],a[s-4],a[s-2],a[s]);break;case 84:r.commit(a[s-6],a[s-4],a[s],a[s-2]);break;case 85:r.commit(a[s-6],a[s-2],a[s-4],a[s]);break;case 86:r.commit(a[s-6],a[s],a[s-4],a[s-2]);break;case 87:r.commit(a[s-6],a[s-2],a[s],a[s-4]);break;case 88:r.commit(a[s-6],a[s],a[s-2],a[s-4]);break;case 89:r.commit(a[s-4],a[s-6],a[s-2],a[s]);break;case 90:r.commit(a[s-4],a[s-6],a[s],a[s-2]);break;case 91:r.commit(a[s-2],a[s-6],a[s-4],a[s]);break;case 92:r.commit(a[s],a[s-6],a[s-4],a[s-2]);break;case 93:r.commit(a[s-2],a[s-6],a[s],a[s-4]);break;case 94:r.commit(a[s],a[s-6],a[s-2],a[s-4]);break;case 95:r.commit(a[s],a[s-4],a[s-2],a[s-6]);break;case 96:r.commit(a[s-2],a[s-4],a[s],a[s-6]);break;case 97:r.commit(a[s],a[s-2],a[s-4],a[s-6]);break;case 98:r.commit(a[s-2],a[s],a[s-4],a[s-6]);break;case 99:r.commit(a[s-4],a[s-2],a[s],a[s-6]);break;case 100:r.commit(a[s-4],a[s],a[s-2],a[s-6]);break;case 101:r.commit(a[s-2],a[s-4],a[s-6],a[s]);break;case 102:r.commit(a[s],a[s-4],a[s-6],a[s-2]);break;case 103:r.commit(a[s-2],a[s],a[s-6],a[s-4]);break;case 104:r.commit(a[s],a[s-2],a[s-6],a[s-4]);break;case 105:r.commit(a[s-4],a[s-2],a[s-6],a[s]);break;case 106:r.commit(a[s-4],a[s],a[s-6],a[s-2]);break;case 107:this.$="";break;case 108:this.$=a[s];break;case 109:this.$=r.commitType.NORMAL;break;case 110:this.$=r.commitType.REVERSE;break;case 111:this.$=r.commitType.HIGHLIGHT;break;case 114:r.parseDirective("%%{","open_directive");break;case 115:r.parseDirective(a[s],"type_directive");break;case 116:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 117:r.parseDirective("}%%","close_directive","gitGraph")}},table:[{3:1,4:2,5:3,6:e,8:n,14:r,45:8,49:i,53:a},{1:[3]},{3:10,4:2,5:3,6:e,8:n,14:r,45:8,49:i,53:a},{3:11,4:2,5:3,6:e,8:n,14:r,45:8,49:i,53:a},{7:12,8:o,9:[1,13],10:[1,14],11:15,14:s},t(c,[2,118]),t(c,[2,119]),t(c,[2,120]),{46:17,50:[1,18]},{50:[2,114]},{1:[2,1]},{1:[2,2]},{8:[1,19]},{7:20,8:o,11:15,14:s},{9:[1,21]},t(l,[2,10],{12:22,13:[1,23]}),t(u,[2,9]),{9:[1,25],47:24,52:h},t([9,52],[2,115]),{1:[2,3]},{8:[1,27]},{7:28,8:o,11:15,14:s},{8:[2,7],14:[1,31],15:29,16:30,17:32,18:33,19:34,20:[1,35],22:[1,36],24:[1,37],25:[1,38],26:39,27:[1,40],29:[1,44],32:[1,43],35:[1,42],39:[1,41]},t(u,[2,8]),t(d,[2,112]),{48:45,51:[1,46]},t(d,[2,117]),{1:[2,4]},{8:[1,47]},t(l,[2,11]),{4:48,8:n,14:r,53:a},t(l,[2,13]),t(f,[2,14]),t(f,[2,15]),t(f,[2,16]),{21:[1,49]},{23:[1,50]},t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),{28:[1,51]},t(f,[2,107],{40:52,33:[1,55],34:[1,57],36:[1,54],38:[1,53],41:[1,56]}),{28:[1,58]},{33:[1,59]},{28:[1,60]},{47:61,52:h},{52:[2,116]},{1:[2,5]},t(l,[2,12]),t(f,[2,17]),t(f,[2,18]),t(f,[2,22]),t(f,[2,42]),{34:[1,62]},{37:63,42:p,43:g,44:y},{34:[1,67]},{34:[1,68]},t(f,[2,108]),t(f,[2,26],{33:[1,69],36:[1,70],38:[1,71]}),{34:[1,72]},t(f,[2,23],{30:[1,73]}),t(d,[2,113]),t(f,[2,43],{33:[1,75],36:[1,74],41:[1,76]}),t(f,[2,44],{33:[1,78],38:[1,77],41:[1,79]}),t(m,[2,109]),t(m,[2,110]),t(m,[2,111]),t(f,[2,47],{36:[1,81],38:[1,80],41:[1,82]}),t(f,[2,58],{33:[1,85],36:[1,84],38:[1,83]}),{34:[1,86]},{37:87,42:p,43:g,44:y},{34:[1,88]},t(f,[2,25]),{31:[1,89]},{37:90,42:p,43:g,44:y},{34:[1,91]},{34:[1,92]},{34:[1,93]},{34:[1,94]},{34:[1,95]},{34:[1,96]},{37:97,42:p,43:g,44:y},{34:[1,98]},{34:[1,99]},{37:100,42:p,43:g,44:y},{34:[1,101]},t(f,[2,27],{36:[1,102],38:[1,103]}),t(f,[2,28],{33:[1,105],38:[1,104]}),t(f,[2,29],{33:[1,106],36:[1,107]}),t(f,[2,24]),t(f,[2,45],{33:[1,108],41:[1,109]}),t(f,[2,49],{36:[1,110],41:[1,111]}),t(f,[2,59],{33:[1,113],36:[1,112]}),t(f,[2,46],{33:[1,114],41:[1,115]}),t(f,[2,51],{38:[1,116],41:[1,117]}),t(f,[2,62],{33:[1,119],38:[1,118]}),t(f,[2,48],{36:[1,120],41:[1,121]}),t(f,[2,50],{38:[1,122],41:[1,123]}),t(f,[2,63],{36:[1,124],38:[1,125]}),t(f,[2,60],{33:[1,127],36:[1,126]}),t(f,[2,61],{33:[1,129],38:[1,128]}),t(f,[2,64],{36:[1,130],38:[1,131]}),{37:132,42:p,43:g,44:y},{34:[1,133]},{34:[1,134]},{34:[1,135]},{34:[1,136]},{37:137,42:p,43:g,44:y},{34:[1,138]},{34:[1,139]},{37:140,42:p,43:g,44:y},{34:[1,141]},{37:142,42:p,43:g,44:y},{34:[1,143]},{34:[1,144]},{34:[1,145]},{34:[1,146]},{34:[1,147]},{34:[1,148]},{34:[1,149]},{37:150,42:p,43:g,44:y},{34:[1,151]},{34:[1,152]},{34:[1,153]},{37:154,42:p,43:g,44:y},{34:[1,155]},{37:156,42:p,43:g,44:y},{34:[1,157]},{34:[1,158]},{34:[1,159]},{37:160,42:p,43:g,44:y},{34:[1,161]},t(f,[2,33],{38:[1,162]}),t(f,[2,34],{36:[1,163]}),t(f,[2,32],{33:[1,164]}),t(f,[2,35],{38:[1,165]}),t(f,[2,30],{36:[1,166]}),t(f,[2,31],{33:[1,167]}),t(f,[2,56],{41:[1,168]}),t(f,[2,69],{33:[1,169]}),t(f,[2,57],{41:[1,170]}),t(f,[2,80],{36:[1,171]}),t(f,[2,70],{33:[1,172]}),t(f,[2,79],{36:[1,173]}),t(f,[2,55],{41:[1,174]}),t(f,[2,68],{33:[1,175]}),t(f,[2,54],{41:[1,176]}),t(f,[2,74],{38:[1,177]}),t(f,[2,67],{33:[1,178]}),t(f,[2,73],{38:[1,179]}),t(f,[2,53],{41:[1,180]}),t(f,[2,81],{36:[1,181]}),t(f,[2,52],{41:[1,182]}),t(f,[2,75],{38:[1,183]}),t(f,[2,76],{38:[1,184]}),t(f,[2,82],{36:[1,185]}),t(f,[2,66],{33:[1,186]}),t(f,[2,77],{36:[1,187]}),t(f,[2,65],{33:[1,188]}),t(f,[2,71],{38:[1,189]}),t(f,[2,72],{38:[1,190]}),t(f,[2,78],{36:[1,191]}),{34:[1,192]},{37:193,42:p,43:g,44:y},{34:[1,194]},{34:[1,195]},{37:196,42:p,43:g,44:y},{34:[1,197]},{34:[1,198]},{34:[1,199]},{34:[1,200]},{37:201,42:p,43:g,44:y},{34:[1,202]},{37:203,42:p,43:g,44:y},{34:[1,204]},{34:[1,205]},{34:[1,206]},{34:[1,207]},{34:[1,208]},{34:[1,209]},{34:[1,210]},{37:211,42:p,43:g,44:y},{34:[1,212]},{34:[1,213]},{34:[1,214]},{37:215,42:p,43:g,44:y},{34:[1,216]},{37:217,42:p,43:g,44:y},{34:[1,218]},{34:[1,219]},{34:[1,220]},{37:221,42:p,43:g,44:y},t(f,[2,36]),t(f,[2,38]),t(f,[2,37]),t(f,[2,39]),t(f,[2,41]),t(f,[2,40]),t(f,[2,97]),t(f,[2,98]),t(f,[2,95]),t(f,[2,96]),t(f,[2,100]),t(f,[2,99]),t(f,[2,104]),t(f,[2,103]),t(f,[2,102]),t(f,[2,101]),t(f,[2,106]),t(f,[2,105]),t(f,[2,94]),t(f,[2,93]),t(f,[2,92]),t(f,[2,91]),t(f,[2,89]),t(f,[2,90]),t(f,[2,88]),t(f,[2,87]),t(f,[2,86]),t(f,[2,85]),t(f,[2,83]),t(f,[2,84])],defaultActions:{9:[2,114],10:[2,1],11:[2,2],19:[2,3],27:[2,4],46:[2,116],47:[2,5]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=0,h=2,d=1,f=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var b=p.options&&p.options.ranges;function v(){var t;return"number"!=typeof(t=r.pop()||p.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=v()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==d?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(l=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,u>0&&u--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},b&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,l,c,g.yy,w[1],i,a].concat(f))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},v={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),49;case 1:return this.begin("type_directive"),50;case 2:return this.popState(),this.begin("arg_directive"),9;case 3:return this.popState(),this.popState(),52;case 4:return 51;case 5:return this.begin("acc_title"),20;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),22;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 35:case 38:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:return 14;case 13:case 14:case 15:break;case 16:return 6;case 17:return 39;case 18:return 33;case 19:return 36;case 20:return 41;case 21:return 42;case 22:return 43;case 23:return 44;case 24:return 38;case 25:return 29;case 26:return 30;case 27:return 35;case 28:return 32;case 29:return 27;case 30:case 31:return 10;case 32:return 9;case 33:return"CARET";case 34:this.begin("options");break;case 36:return 13;case 37:this.begin("string");break;case 39:return 34;case 40:return 31;case 41:return 28;case 42:return 8}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch\b)/i,/^(?:order:)/i,/^(?:merge\b)/i,/^(?:cherry-pick\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+)/i,/^(?:[a-zA-Z][-_\./a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},options:{rules:[35,36],inclusive:!1},string:{rules:[38,39],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,37,40,41,42],inclusive:!0}}};function _(){this.yy={}}return b.lexer=v,_.prototype=b,b.Parser=_,new _}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8183).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},6765:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,r,i,a,o){switch(a.length,i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(e,[2,3]),t(e,[2,4]),t(e,[2,5]),t(e,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=0,h=2,d=1,f=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var b=p.options&&p.options.ranges;function v(){var t;return"number"!=typeof(t=r.pop()||p.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=v()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==d?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(l=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,u>0&&u--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},b&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,l,c,g.yy,w[1],i,a].concat(f))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function i(){this.yy={}}return n.lexer=r,i.prototype=n,n.Parser=i,new i}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(1428).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},7062:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,5],r=[1,6],i=[1,7],a=[1,9],o=[1,11,13,15,17,19,20,26,27,28,29],s=[2,5],c=[1,6,11,13,15,17,19,20,26,27,28,29],l=[26,27,28],u=[2,8],h=[1,18],d=[1,19],f=[1,20],p=[1,21],g=[1,22],y=[1,23],m=[1,28],b=[6,26,27,28,29],v={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,openDirective:21,typeDirective:22,closeDirective:23,":":24,argDirective:25,NEWLINE:26,";":27,EOF:28,open_directive:29,type_directive:30,arg_directive:31,close_directive:32,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",24:":",26:"NEWLINE",27:";",28:"EOF",29:"open_directive",30:"type_directive",31:"arg_directive",32:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[21,1],[22,1],[25,1],[23,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:r.setShowData(!0);break;case 7:this.$=a[s-1];break;case 9:r.addSection(a[s-1],r.cleanupValue(a[s]));break;case 10:this.$=a[s].trim(),r.setDiagramTitle(this.$);break;case 11:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 12:case 13:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 14:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 21:r.parseDirective("%%{","open_directive");break;case 22:r.parseDirective(a[s],"type_directive");break;case 23:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 24:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,21:8,26:n,27:r,28:i,29:a},{1:[3]},{3:10,4:2,5:3,6:e,21:8,26:n,27:r,28:i,29:a},{3:11,4:2,5:3,6:e,21:8,26:n,27:r,28:i,29:a},t(o,s,{7:12,8:[1,13]}),t(c,[2,18]),t(c,[2,19]),t(c,[2,20]),{22:14,30:[1,15]},{30:[2,21]},{1:[2,1]},{1:[2,2]},t(l,u,{21:8,9:16,10:17,5:24,1:[2,3],11:h,13:d,15:f,17:p,19:g,20:y,29:a}),t(o,s,{7:25}),{23:26,24:[1,27],32:m},t([24,32],[2,22]),t(o,[2,6]),{4:29,26:n,27:r,28:i},{12:[1,30]},{14:[1,31]},{16:[1,32]},{18:[1,33]},t(l,[2,13]),t(l,[2,14]),t(l,[2,15]),t(l,u,{21:8,9:16,10:17,5:24,1:[2,4],11:h,13:d,15:f,17:p,19:g,20:y,29:a}),t(b,[2,16]),{25:34,31:[1,35]},t(b,[2,24]),t(o,[2,7]),t(l,[2,9]),t(l,[2,10]),t(l,[2,11]),t(l,[2,12]),{23:36,32:m},{32:[2,23]},t(b,[2,17])],defaultActions:{9:[2,21],10:[2,1],11:[2,2],35:[2,23]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=0,h=2,d=1,f=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var b=p.options&&p.options.ranges;function v(){var t;return"number"!=typeof(t=r.pop()||p.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=v()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==d?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(l=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,u>0&&u--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},b&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,l,c,g.yy,w[1],i,a].concat(f))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},_={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),29;case 1:return this.begin("type_directive"),30;case 2:return this.popState(),this.begin("arg_directive"),24;case 3:return this.popState(),this.popState(),32;case 4:return 31;case 5:case 6:case 8:case 9:break;case 7:return 26;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:return this.begin("acc_title"),15;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),17;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:case 20:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:this.begin("string");break;case 21:return"txt";case 22:return 6;case 23:return 8;case 24:return"value";case 25:return 28}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[20,21],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,14,16,19,22,23,24,25],inclusive:!0}}};function x(){this.yy={}}return v.lexer=_,x.prototype=v,v.Parser=x,new x}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(4551).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},3176:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[1,6],i=[1,7],a=[1,8],o=[5,6,8,14,16,18,19,40,41,42,43,44,45,53,71,72],s=[1,22],c=[2,13],l=[1,26],u=[1,27],h=[1,28],d=[1,29],f=[1,30],p=[1,31],g=[1,24],y=[1,32],m=[1,33],b=[1,36],v=[71,72],_=[5,8,14,16,18,19,40,41,42,43,44,45,53,60,62,71,72],x=[1,56],k=[1,57],w=[1,58],E=[1,59],T=[1,60],C=[1,61],S=[1,62],A=[62,63],M=[1,74],O=[1,70],N=[1,71],D=[1,72],B=[1,73],L=[1,75],I=[1,79],F=[1,80],R=[1,77],P=[1,78],j=[5,8,14,16,18,19,40,41,42,43,44,45,53,71,72],z={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,requirementDef:23,elementDef:24,relationshipDef:25,requirementType:26,requirementName:27,STRUCT_START:28,requirementBody:29,ID:30,COLONSEP:31,id:32,TEXT:33,text:34,RISK:35,riskLevel:36,VERIFYMTHD:37,verifyType:38,STRUCT_STOP:39,REQUIREMENT:40,FUNCTIONAL_REQUIREMENT:41,INTERFACE_REQUIREMENT:42,PERFORMANCE_REQUIREMENT:43,PHYSICAL_REQUIREMENT:44,DESIGN_CONSTRAINT:45,LOW_RISK:46,MED_RISK:47,HIGH_RISK:48,VERIFY_ANALYSIS:49,VERIFY_DEMONSTRATION:50,VERIFY_INSPECTION:51,VERIFY_TEST:52,ELEMENT:53,elementName:54,elementBody:55,TYPE:56,type:57,DOCREF:58,ref:59,END_ARROW_L:60,relationship:61,LINE:62,END_ARROW_R:63,CONTAINS:64,COPIES:65,DERIVES:66,SATISFIES:67,VERIFIES:68,REFINES:69,TRACES:70,unqString:71,qString:72,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",28:"STRUCT_START",30:"ID",31:"COLONSEP",33:"TEXT",35:"RISK",37:"VERIFYMTHD",39:"STRUCT_STOP",40:"REQUIREMENT",41:"FUNCTIONAL_REQUIREMENT",42:"INTERFACE_REQUIREMENT",43:"PERFORMANCE_REQUIREMENT",44:"PHYSICAL_REQUIREMENT",45:"DESIGN_CONSTRAINT",46:"LOW_RISK",47:"MED_RISK",48:"HIGH_RISK",49:"VERIFY_ANALYSIS",50:"VERIFY_DEMONSTRATION",51:"VERIFY_INSPECTION",52:"VERIFY_TEST",53:"ELEMENT",56:"TYPE",58:"DOCREF",60:"END_ARROW_L",62:"LINE",63:"END_ARROW_R",64:"CONTAINS",65:"COPIES",66:"DERIVES",67:"SATISFIES",68:"VERIFIES",69:"REFINES",70:"TRACES",71:"unqString",72:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[4,2],[4,2],[4,1],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[23,5],[29,5],[29,5],[29,5],[29,5],[29,2],[29,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[36,1],[36,1],[36,1],[38,1],[38,1],[38,1],[38,1],[24,5],[55,5],[55,5],[55,2],[55,1],[25,5],[25,5],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[27,1],[27,1],[32,1],[32,1],[34,1],[34,1],[54,1],[54,1],[57,1],[57,1],[59,1],[59,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 7:case 8:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 9:r.parseDirective("%%{","open_directive");break;case 10:r.parseDirective(a[s],"type_directive");break;case 11:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 12:r.parseDirective("}%%","close_directive","pie");break;case 13:this.$=[];break;case 19:r.addRequirement(a[s-3],a[s-4]);break;case 20:r.setNewReqId(a[s-2]);break;case 21:r.setNewReqText(a[s-2]);break;case 22:r.setNewReqRisk(a[s-2]);break;case 23:r.setNewReqVerifyMethod(a[s-2]);break;case 26:this.$=r.RequirementType.REQUIREMENT;break;case 27:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 28:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 29:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 30:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 31:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 32:this.$=r.RiskLevel.LOW_RISK;break;case 33:this.$=r.RiskLevel.MED_RISK;break;case 34:this.$=r.RiskLevel.HIGH_RISK;break;case 35:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 36:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 37:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 38:this.$=r.VerifyType.VERIFY_TEST;break;case 39:r.addElement(a[s-3]);break;case 40:r.setNewElementType(a[s-2]);break;case 41:r.setNewElementDocRef(a[s-2]);break;case 44:r.addRelationship(a[s-2],a[s],a[s-4]);break;case 45:r.addRelationship(a[s-2],a[s-4],a[s]);break;case 46:this.$=r.Relationships.CONTAINS;break;case 47:this.$=r.Relationships.COPIES;break;case 48:this.$=r.Relationships.DERIVES;break;case 49:this.$=r.Relationships.SATISFIES;break;case 50:this.$=r.Relationships.VERIFIES;break;case 51:this.$=r.Relationships.REFINES;break;case 52:this.$=r.Relationships.TRACES}},table:[{3:1,4:2,6:e,9:4,14:n,16:r,18:i,19:a},{1:[3]},{3:10,4:2,5:[1,9],6:e,9:4,14:n,16:r,18:i,19:a},{5:[1,11]},{10:12,20:[1,13]},{15:[1,14]},{17:[1,15]},t(o,[2,8]),{20:[2,9]},{3:16,4:2,6:e,9:4,14:n,16:r,18:i,19:a},{1:[2,2]},{4:21,5:s,7:17,8:c,9:4,14:n,16:r,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:l,41:u,42:h,43:d,44:f,45:p,53:g,71:y,72:m},{11:34,12:[1,35],22:b},t([12,22],[2,10]),t(o,[2,6]),t(o,[2,7]),{1:[2,1]},{8:[1,37]},{4:21,5:s,7:38,8:c,9:4,14:n,16:r,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:l,41:u,42:h,43:d,44:f,45:p,53:g,71:y,72:m},{4:21,5:s,7:39,8:c,9:4,14:n,16:r,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:l,41:u,42:h,43:d,44:f,45:p,53:g,71:y,72:m},{4:21,5:s,7:40,8:c,9:4,14:n,16:r,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:l,41:u,42:h,43:d,44:f,45:p,53:g,71:y,72:m},{4:21,5:s,7:41,8:c,9:4,14:n,16:r,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:l,41:u,42:h,43:d,44:f,45:p,53:g,71:y,72:m},{4:21,5:s,7:42,8:c,9:4,14:n,16:r,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:l,41:u,42:h,43:d,44:f,45:p,53:g,71:y,72:m},{27:43,71:[1,44],72:[1,45]},{54:46,71:[1,47],72:[1,48]},{60:[1,49],62:[1,50]},t(v,[2,26]),t(v,[2,27]),t(v,[2,28]),t(v,[2,29]),t(v,[2,30]),t(v,[2,31]),t(_,[2,55]),t(_,[2,56]),t(o,[2,4]),{13:51,21:[1,52]},t(o,[2,12]),{1:[2,3]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{8:[2,17]},{8:[2,18]},{28:[1,53]},{28:[2,53]},{28:[2,54]},{28:[1,54]},{28:[2,59]},{28:[2,60]},{61:55,64:x,65:k,66:w,67:E,68:T,69:C,70:S},{61:63,64:x,65:k,66:w,67:E,68:T,69:C,70:S},{11:64,22:b},{22:[2,11]},{5:[1,65]},{5:[1,66]},{62:[1,67]},t(A,[2,46]),t(A,[2,47]),t(A,[2,48]),t(A,[2,49]),t(A,[2,50]),t(A,[2,51]),t(A,[2,52]),{63:[1,68]},t(o,[2,5]),{5:M,29:69,30:O,33:N,35:D,37:B,39:L},{5:I,39:F,55:76,56:R,58:P},{32:81,71:y,72:m},{32:82,71:y,72:m},t(j,[2,19]),{31:[1,83]},{31:[1,84]},{31:[1,85]},{31:[1,86]},{5:M,29:87,30:O,33:N,35:D,37:B,39:L},t(j,[2,25]),t(j,[2,39]),{31:[1,88]},{31:[1,89]},{5:I,39:F,55:90,56:R,58:P},t(j,[2,43]),t(j,[2,44]),t(j,[2,45]),{32:91,71:y,72:m},{34:92,71:[1,93],72:[1,94]},{36:95,46:[1,96],47:[1,97],48:[1,98]},{38:99,49:[1,100],50:[1,101],51:[1,102],52:[1,103]},t(j,[2,24]),{57:104,71:[1,105],72:[1,106]},{59:107,71:[1,108],72:[1,109]},t(j,[2,42]),{5:[1,110]},{5:[1,111]},{5:[2,57]},{5:[2,58]},{5:[1,112]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[1,113]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[2,38]},{5:[1,114]},{5:[2,61]},{5:[2,62]},{5:[1,115]},{5:[2,63]},{5:[2,64]},{5:M,29:116,30:O,33:N,35:D,37:B,39:L},{5:M,29:117,30:O,33:N,35:D,37:B,39:L},{5:M,29:118,30:O,33:N,35:D,37:B,39:L},{5:M,29:119,30:O,33:N,35:D,37:B,39:L},{5:I,39:F,55:120,56:R,58:P},{5:I,39:F,55:121,56:R,58:P},t(j,[2,20]),t(j,[2,21]),t(j,[2,22]),t(j,[2,23]),t(j,[2,40]),t(j,[2,41])],defaultActions:{8:[2,9],10:[2,2],16:[2,1],37:[2,3],38:[2,14],39:[2,15],40:[2,16],41:[2,17],42:[2,18],44:[2,53],45:[2,54],47:[2,59],48:[2,60],52:[2,11],93:[2,57],94:[2,58],96:[2,32],97:[2,33],98:[2,34],100:[2,35],101:[2,36],102:[2,37],103:[2,38],105:[2,61],106:[2,62],108:[2,63],109:[2,64]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=0,h=2,d=1,f=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var b=p.options&&p.options.ranges;function v(){var t;return"number"!=typeof(t=r.pop()||p.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=v()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==d?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(l=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,u>0&&u--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},b&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,l,c,g.yy,w[1],i,a].concat(f))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},Y={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),19;case 1:return this.begin("type_directive"),20;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),22;case 4:return 21;case 5:return"title";case 6:return this.begin("acc_title"),14;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),16;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 53:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 5;case 14:case 15:case 16:break;case 17:return 8;case 18:return 6;case 19:return 28;case 20:return 39;case 21:return 31;case 22:return 30;case 23:return 33;case 24:return 35;case 25:return 37;case 26:return 40;case 27:return 41;case 28:return 42;case 29:return 43;case 30:return 44;case 31:return 45;case 32:return 46;case 33:return 47;case 34:return 48;case 35:return 49;case 36:return 50;case 37:return 51;case 38:return 52;case 39:return 53;case 40:return 64;case 41:return 65;case 42:return 66;case 43:return 67;case 44:return 68;case 45:return 69;case 46:return 70;case 47:return 56;case 48:return 58;case 49:return 60;case 50:return 63;case 51:return 62;case 52:this.begin("string");break;case 54:return"qString";case 55:return e.yytext=e.yytext.trim(),71}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[53,54],inclusive:!1},INITIAL:{rules:[0,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,55],inclusive:!0}}};function U(){this.yy={}}return z.lexer=Y,U.prototype=z,z.Parser=U,new U}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8800).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},6876:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,18],l=[1,19],u=[1,21],h=[1,22],d=[1,23],f=[1,29],p=[1,30],g=[1,31],y=[1,32],m=[1,33],b=[1,34],v=[1,35],_=[1,36],x=[1,37],k=[1,38],w=[1,39],E=[1,40],T=[1,43],C=[1,44],S=[1,45],A=[1,46],M=[1,47],O=[1,48],N=[1,51],D=[1,4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,50,51,52,53,58,59,60,61,69,79],B=[4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,53,58,59,60,61,69,79],L=[4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,52,53,58,59,60,61,69,79],I=[4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,51,53,58,59,60,61,69,79],F=[4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,50,53,58,59,60,61,69,79],R=[67,68,69],P=[1,121],j=[1,4,5,7,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,50,51,52,53,58,59,60,61,69,79],z={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,openDirective:11,typeDirective:12,closeDirective:13,":":14,argDirective:15,participant:16,actor:17,AS:18,restOfLine:19,participant_actor:20,signal:21,autonumber:22,NUM:23,off:24,activate:25,deactivate:26,note_statement:27,links_statement:28,link_statement:29,properties_statement:30,details_statement:31,title:32,legacy_title:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,loop:39,end:40,rect:41,opt:42,alt:43,else_sections:44,par:45,par_sections:46,critical:47,option_sections:48,break:49,option:50,and:51,else:52,note:53,placement:54,text2:55,over:56,actor_pair:57,links:58,link:59,properties:60,details:61,spaceList:62,",":63,left_of:64,right_of:65,signaltype:66,"+":67,"-":68,ACTOR:69,SOLID_OPEN_ARROW:70,DOTTED_OPEN_ARROW:71,SOLID_ARROW:72,DOTTED_ARROW:73,SOLID_CROSS:74,DOTTED_CROSS:75,SOLID_POINT:76,DOTTED_POINT:77,TXT:78,open_directive:79,type_directive:80,arg_directive:81,close_directive:82,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",14:":",16:"participant",18:"AS",19:"restOfLine",20:"participant_actor",22:"autonumber",23:"NUM",24:"off",25:"activate",26:"deactivate",32:"title",33:"legacy_title",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",39:"loop",40:"end",41:"rect",42:"opt",43:"alt",45:"par",47:"critical",49:"break",50:"option",51:"and",52:"else",53:"note",56:"over",58:"links",59:"link",60:"properties",61:"details",63:",",64:"left_of",65:"right_of",67:"+",68:"-",69:"ACTOR",70:"SOLID_OPEN_ARROW",71:"DOTTED_OPEN_ARROW",72:"SOLID_ARROW",73:"DOTTED_ARROW",74:"SOLID_CROSS",75:"DOTTED_CROSS",76:"SOLID_POINT",77:"DOTTED_POINT",78:"TXT",79:"open_directive",80:"type_directive",81:"arg_directive",82:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[6,4],[6,6],[10,5],[10,3],[10,5],[10,3],[10,2],[10,4],[10,3],[10,3],[10,2],[10,3],[10,3],[10,2],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,2],[10,2],[10,1],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[48,1],[48,4],[46,1],[46,4],[44,1],[44,4],[27,4],[27,4],[28,3],[29,3],[30,3],[31,3],[62,2],[62,1],[57,3],[57,1],[54,1],[54,1],[21,5],[21,5],[21,4],[17,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[55,1],[11,1],[12,1],[15,1],[13,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.apply(a[s]),a[s];case 5:case 9:this.$=[];break;case 6:a[s-1].push(a[s]),this.$=a[s-1];break;case 7:case 8:case 56:this.$=a[s];break;case 12:a[s-3].type="addParticipant",a[s-3].description=r.parseMessage(a[s-1]),this.$=a[s-3];break;case 13:a[s-1].type="addParticipant",this.$=a[s-1];break;case 14:a[s-3].type="addActor",a[s-3].description=r.parseMessage(a[s-1]),this.$=a[s-3];break;case 15:a[s-1].type="addActor",this.$=a[s-1];break;case 17:this.$={type:"sequenceIndex",sequenceIndex:Number(a[s-2]),sequenceIndexStep:Number(a[s-1]),sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(a[s-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:r.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[s-1]};break;case 22:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[s-1]};break;case 28:r.setDiagramTitle(a[s].substring(6)),this.$=a[s].substring(6);break;case 29:r.setDiagramTitle(a[s].substring(7)),this.$=a[s].substring(7);break;case 30:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 31:case 32:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 33:a[s-1].unshift({type:"loopStart",loopText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.LOOP_START}),a[s-1].push({type:"loopEnd",loopText:a[s-2],signalType:r.LINETYPE.LOOP_END}),this.$=a[s-1];break;case 34:a[s-1].unshift({type:"rectStart",color:r.parseMessage(a[s-2]),signalType:r.LINETYPE.RECT_START}),a[s-1].push({type:"rectEnd",color:r.parseMessage(a[s-2]),signalType:r.LINETYPE.RECT_END}),this.$=a[s-1];break;case 35:a[s-1].unshift({type:"optStart",optText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.OPT_START}),a[s-1].push({type:"optEnd",optText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.OPT_END}),this.$=a[s-1];break;case 36:a[s-1].unshift({type:"altStart",altText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.ALT_START}),a[s-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=a[s-1];break;case 37:a[s-1].unshift({type:"parStart",parText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.PAR_START}),a[s-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=a[s-1];break;case 38:a[s-1].unshift({type:"criticalStart",criticalText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.CRITICAL_START}),a[s-1].push({type:"criticalEnd",signalType:r.LINETYPE.CRITICAL_END}),this.$=a[s-1];break;case 39:a[s-1].unshift({type:"breakStart",breakText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.BREAK_START}),a[s-1].push({type:"breakEnd",optText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.BREAK_END}),this.$=a[s-1];break;case 42:this.$=a[s-3].concat([{type:"option",optionText:r.parseMessage(a[s-1]),signalType:r.LINETYPE.CRITICAL_OPTION},a[s]]);break;case 44:this.$=a[s-3].concat([{type:"and",parText:r.parseMessage(a[s-1]),signalType:r.LINETYPE.PAR_AND},a[s]]);break;case 46:this.$=a[s-3].concat([{type:"else",altText:r.parseMessage(a[s-1]),signalType:r.LINETYPE.ALT_ELSE},a[s]]);break;case 47:this.$=[a[s-1],{type:"addNote",placement:a[s-2],actor:a[s-1].actor,text:a[s]}];break;case 48:a[s-2]=[].concat(a[s-1],a[s-1]).slice(0,2),a[s-2][0]=a[s-2][0].actor,a[s-2][1]=a[s-2][1].actor,this.$=[a[s-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:a[s-2].slice(0,2),text:a[s]}];break;case 49:this.$=[a[s-1],{type:"addLinks",actor:a[s-1].actor,text:a[s]}];break;case 50:this.$=[a[s-1],{type:"addALink",actor:a[s-1].actor,text:a[s]}];break;case 51:this.$=[a[s-1],{type:"addProperties",actor:a[s-1].actor,text:a[s]}];break;case 52:this.$=[a[s-1],{type:"addDetails",actor:a[s-1].actor,text:a[s]}];break;case 55:this.$=[a[s-2],a[s]];break;case 57:this.$=r.PLACEMENT.LEFTOF;break;case 58:this.$=r.PLACEMENT.RIGHTOF;break;case 59:this.$=[a[s-4],a[s-1],{type:"addMessage",from:a[s-4].actor,to:a[s-1].actor,signalType:a[s-3],msg:a[s]},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[s-1]}];break;case 60:this.$=[a[s-4],a[s-1],{type:"addMessage",from:a[s-4].actor,to:a[s-1].actor,signalType:a[s-3],msg:a[s]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[s-4]}];break;case 61:this.$=[a[s-3],a[s-1],{type:"addMessage",from:a[s-3].actor,to:a[s-1].actor,signalType:a[s-2],msg:a[s]}];break;case 62:this.$={type:"addParticipant",actor:a[s]};break;case 63:this.$=r.LINETYPE.SOLID_OPEN;break;case 64:this.$=r.LINETYPE.DOTTED_OPEN;break;case 65:this.$=r.LINETYPE.SOLID;break;case 66:this.$=r.LINETYPE.DOTTED;break;case 67:this.$=r.LINETYPE.SOLID_CROSS;break;case 68:this.$=r.LINETYPE.DOTTED_CROSS;break;case 69:this.$=r.LINETYPE.SOLID_POINT;break;case 70:this.$=r.LINETYPE.DOTTED_POINT;break;case 71:this.$=r.parseMessage(a[s].trim().substring(1));break;case 72:r.parseDirective("%%{","open_directive");break;case 73:r.parseDirective(a[s],"type_directive");break;case 74:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 75:r.parseDirective("}%%","close_directive","sequence")}},table:[{3:1,4:e,5:n,6:4,7:r,11:6,79:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,11:6,79:i},{3:9,4:e,5:n,6:4,7:r,11:6,79:i},{3:10,4:e,5:n,6:4,7:r,11:6,79:i},t([1,4,5,16,20,22,25,26,32,33,34,36,38,39,41,42,43,45,47,49,53,58,59,60,61,69,79],a,{8:11}),{12:12,80:[1,13]},{80:[2,72]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,41:v,42:_,43:x,45:k,47:w,49:E,53:T,58:C,59:S,60:A,61:M,69:O,79:i},{13:49,14:[1,50],82:N},t([14,82],[2,73]),t(D,[2,6]),{6:41,10:52,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,41:v,42:_,43:x,45:k,47:w,49:E,53:T,58:C,59:S,60:A,61:M,69:O,79:i},t(D,[2,8]),t(D,[2,9]),{17:53,69:O},{17:54,69:O},{5:[1,55]},{5:[1,58],23:[1,56],24:[1,57]},{17:59,69:O},{17:60,69:O},{5:[1,61]},{5:[1,62]},{5:[1,63]},{5:[1,64]},{5:[1,65]},t(D,[2,28]),t(D,[2,29]),{35:[1,66]},{37:[1,67]},t(D,[2,32]),{19:[1,68]},{19:[1,69]},{19:[1,70]},{19:[1,71]},{19:[1,72]},{19:[1,73]},{19:[1,74]},t(D,[2,40]),{66:75,70:[1,76],71:[1,77],72:[1,78],73:[1,79],74:[1,80],75:[1,81],76:[1,82],77:[1,83]},{54:84,56:[1,85],64:[1,86],65:[1,87]},{17:88,69:O},{17:89,69:O},{17:90,69:O},{17:91,69:O},t([5,18,63,70,71,72,73,74,75,76,77,78],[2,62]),{5:[1,92]},{15:93,81:[1,94]},{5:[2,75]},t(D,[2,7]),{5:[1,96],18:[1,95]},{5:[1,98],18:[1,97]},t(D,[2,16]),{5:[1,100],23:[1,99]},{5:[1,101]},t(D,[2,20]),{5:[1,102]},{5:[1,103]},t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,30]),t(D,[2,31]),t(B,a,{8:104}),t(B,a,{8:105}),t(B,a,{8:106}),t(L,a,{44:107,8:108}),t(I,a,{46:109,8:110}),t(F,a,{48:111,8:112}),t(B,a,{8:113}),{17:116,67:[1,114],68:[1,115],69:O},t(R,[2,63]),t(R,[2,64]),t(R,[2,65]),t(R,[2,66]),t(R,[2,67]),t(R,[2,68]),t(R,[2,69]),t(R,[2,70]),{17:117,69:O},{17:119,57:118,69:O},{69:[2,57]},{69:[2,58]},{55:120,78:P},{55:122,78:P},{55:123,78:P},{55:124,78:P},t(j,[2,10]),{13:125,82:N},{82:[2,74]},{19:[1,126]},t(D,[2,13]),{19:[1,127]},t(D,[2,15]),{5:[1,128]},t(D,[2,18]),t(D,[2,19]),t(D,[2,21]),t(D,[2,22]),{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[1,129],41:v,42:_,43:x,45:k,47:w,49:E,53:T,58:C,59:S,60:A,61:M,69:O,79:i},{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[1,130],41:v,42:_,43:x,45:k,47:w,49:E,53:T,58:C,59:S,60:A,61:M,69:O,79:i},{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[1,131],41:v,42:_,43:x,45:k,47:w,49:E,53:T,58:C,59:S,60:A,61:M,69:O,79:i},{40:[1,132]},{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[2,45],41:v,42:_,43:x,45:k,47:w,49:E,52:[1,133],53:T,58:C,59:S,60:A,61:M,69:O,79:i},{40:[1,134]},{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[2,43],41:v,42:_,43:x,45:k,47:w,49:E,51:[1,135],53:T,58:C,59:S,60:A,61:M,69:O,79:i},{40:[1,136]},{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[2,41],41:v,42:_,43:x,45:k,47:w,49:E,50:[1,137],53:T,58:C,59:S,60:A,61:M,69:O,79:i},{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[1,138],41:v,42:_,43:x,45:k,47:w,49:E,53:T,58:C,59:S,60:A,61:M,69:O,79:i},{17:139,69:O},{17:140,69:O},{55:141,78:P},{55:142,78:P},{55:143,78:P},{63:[1,144],78:[2,56]},{5:[2,49]},{5:[2,71]},{5:[2,50]},{5:[2,51]},{5:[2,52]},{5:[1,145]},{5:[1,146]},{5:[1,147]},t(D,[2,17]),t(D,[2,33]),t(D,[2,34]),t(D,[2,35]),t(D,[2,36]),{19:[1,148]},t(D,[2,37]),{19:[1,149]},t(D,[2,38]),{19:[1,150]},t(D,[2,39]),{55:151,78:P},{55:152,78:P},{5:[2,61]},{5:[2,47]},{5:[2,48]},{17:153,69:O},t(j,[2,11]),t(D,[2,12]),t(D,[2,14]),t(L,a,{8:108,44:154}),t(I,a,{8:110,46:155}),t(F,a,{8:112,48:156}),{5:[2,59]},{5:[2,60]},{78:[2,55]},{40:[2,46]},{40:[2,44]},{40:[2,42]}],defaultActions:{7:[2,72],8:[2,1],9:[2,2],10:[2,3],51:[2,75],86:[2,57],87:[2,58],94:[2,74],120:[2,49],121:[2,71],122:[2,50],123:[2,51],124:[2,52],141:[2,61],142:[2,47],143:[2,48],151:[2,59],152:[2,60],153:[2,55],154:[2,46],155:[2,44],156:[2,42]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=0,h=2,d=1,f=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var b=p.options&&p.options.ranges;function v(){var t;return"number"!=typeof(t=r.pop()||p.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=v()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==d?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(l=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,u>0&&u--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},b&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,l,c,g.yy,w[1],i,a].concat(f))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},Y={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),79;case 1:return this.begin("type_directive"),80;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),82;case 4:return 81;case 5:case 52:case 65:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return 23;case 12:return this.begin("ID"),16;case 13:return this.begin("ID"),20;case 14:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),69;case 15:return this.popState(),this.popState(),this.begin("LINE"),18;case 16:return this.popState(),this.popState(),5;case 17:return this.begin("LINE"),39;case 18:return this.begin("LINE"),41;case 19:return this.begin("LINE"),42;case 20:return this.begin("LINE"),43;case 21:return this.begin("LINE"),52;case 22:return this.begin("LINE"),45;case 23:return this.begin("LINE"),51;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),50;case 26:return this.begin("LINE"),49;case 27:return this.popState(),19;case 28:return 40;case 29:return 64;case 30:return 65;case 31:return 58;case 32:return 59;case 33:return 60;case 34:return 61;case 35:return 56;case 36:return 53;case 37:return this.begin("ID"),25;case 38:return this.begin("ID"),26;case 39:return 32;case 40:return 33;case 41:return this.begin("acc_title"),34;case 42:return this.popState(),"acc_title_value";case 43:return this.begin("acc_descr"),36;case 44:return this.popState(),"acc_descr_value";case 45:this.begin("acc_descr_multiline");break;case 46:this.popState();break;case 47:return"acc_descr_multiline_value";case 48:return 7;case 49:return 22;case 50:return 24;case 51:return 63;case 53:return e.yytext=e.yytext.trim(),69;case 54:return 72;case 55:return 73;case 56:return 70;case 57:return 71;case 58:return 74;case 59:return 75;case 60:return 76;case 61:return 77;case 62:return 78;case 63:return 67;case 64:return 68;case 66:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[46,47],inclusive:!1},acc_descr:{rules:[44],inclusive:!1},acc_title:{rules:[42],inclusive:!1},open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,14],inclusive:!1},ALIAS:{rules:[7,8,15,16],inclusive:!1},LINE:{rules:[7,8,27],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,12,13,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,45,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66],inclusive:!0}}};function U(){this.yy={}}return z.lexer=Y,U.prototype=z,z.Parser=U,new U}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(1993).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},3584:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,19],l=[1,20],u=[1,21],h=[1,22],d=[1,33],f=[1,23],p=[1,24],g=[1,25],y=[1,26],m=[1,27],b=[1,30],v=[1,31],_=[1,32],x=[1,35],k=[1,36],w=[1,37],E=[1,38],T=[1,34],C=[1,41],S=[1,4,5,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],A=[1,4,5,12,13,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],M=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],O=[4,5,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],N={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,idStatement:11,DESCR:12,"--\x3e":13,HIDE_EMPTY:14,scale:15,WIDTH:16,COMPOSIT_STATE:17,STRUCT_START:18,STRUCT_STOP:19,STATE_DESCR:20,AS:21,ID:22,FORK:23,JOIN:24,CHOICE:25,CONCURRENT:26,note:27,notePosition:28,NOTE_TEXT:29,direction:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,openDirective:36,typeDirective:37,closeDirective:38,":":39,argDirective:40,direction_tb:41,direction_bt:42,direction_rl:43,direction_lr:44,eol:45,";":46,EDGE_STATE:47,left_of:48,right_of:49,open_directive:50,type_directive:51,arg_directive:52,close_directive:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",12:"DESCR",13:"--\x3e",14:"HIDE_EMPTY",15:"scale",16:"WIDTH",17:"COMPOSIT_STATE",18:"STRUCT_START",19:"STRUCT_STOP",20:"STATE_DESCR",21:"AS",22:"ID",23:"FORK",24:"JOIN",25:"CHOICE",26:"CONCURRENT",27:"note",29:"NOTE_TEXT",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",39:":",41:"direction_tb",42:"direction_bt",43:"direction_rl",44:"direction_lr",46:";",47:"EDGE_STATE",48:"left_of",49:"right_of",50:"open_directive",51:"type_directive",52:"arg_directive",53:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[10,2],[10,2],[10,1],[6,3],[6,5],[30,1],[30,1],[30,1],[30,1],[45,1],[45,1],[11,1],[11,1],[28,1],[28,1],[36,1],[37,1],[40,1],[38,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.setRootDoc(a[s]),a[s];case 5:this.$=[];break;case 6:"nl"!=a[s]&&(a[s-1].push(a[s]),this.$=a[s-1]);break;case 7:case 8:case 39:case 40:this.$=a[s];break;case 9:this.$="nl";break;case 10:this.$={stmt:"state",id:a[s],type:"default",description:""};break;case 11:this.$={stmt:"state",id:a[s-1],type:"default",description:r.trimColon(a[s])};break;case 12:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-2],type:"default",description:""},state2:{stmt:"state",id:a[s],type:"default",description:""}};break;case 13:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-3],type:"default",description:""},state2:{stmt:"state",id:a[s-1],type:"default",description:""},description:a[s].substr(1).trim()};break;case 17:this.$={stmt:"state",id:a[s-3],type:"default",description:"",doc:a[s-1]};break;case 18:var c=a[s],l=a[s-2].trim();if(a[s].match(":")){var u=a[s].split(":");c=u[0],l=[l,u[1]]}this.$={stmt:"state",id:c,type:"default",description:l};break;case 19:this.$={stmt:"state",id:a[s-3],type:"default",description:a[s-5],doc:a[s-1]};break;case 20:this.$={stmt:"state",id:a[s],type:"fork"};break;case 21:this.$={stmt:"state",id:a[s],type:"join"};break;case 22:this.$={stmt:"state",id:a[s],type:"choice"};break;case 23:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 24:this.$={stmt:"state",id:a[s-1].trim(),note:{position:a[s-2].trim(),text:a[s].trim()}};break;case 28:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 29:case 30:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 33:r.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 34:r.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 35:r.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 36:r.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 43:r.parseDirective("%%{","open_directive");break;case 44:r.parseDirective(a[s],"type_directive");break;case 45:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 46:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:n,6:4,7:r,36:6,50:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,36:6,50:i},{3:9,4:e,5:n,6:4,7:r,36:6,50:i},{3:10,4:e,5:n,6:4,7:r,36:6,50:i},t([1,4,5,14,15,17,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],a,{8:11}),{37:12,51:[1,13]},{51:[2,43]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:l,17:u,20:h,22:d,23:f,24:p,25:g,26:y,27:m,30:29,31:b,33:v,35:_,36:6,41:x,42:k,43:w,44:E,47:T,50:i},{38:39,39:[1,40],53:C},t([39,53],[2,44]),t(S,[2,6]),{6:28,10:42,11:18,14:c,15:l,17:u,20:h,22:d,23:f,24:p,25:g,26:y,27:m,30:29,31:b,33:v,35:_,36:6,41:x,42:k,43:w,44:E,47:T,50:i},t(S,[2,8]),t(S,[2,9]),t(S,[2,10],{12:[1,43],13:[1,44]}),t(S,[2,14]),{16:[1,45]},t(S,[2,16],{18:[1,46]}),{21:[1,47]},t(S,[2,20]),t(S,[2,21]),t(S,[2,22]),t(S,[2,23]),{28:48,29:[1,49],48:[1,50],49:[1,51]},t(S,[2,26]),t(S,[2,27]),{32:[1,52]},{34:[1,53]},t(S,[2,30]),t(A,[2,39]),t(A,[2,40]),t(S,[2,33]),t(S,[2,34]),t(S,[2,35]),t(S,[2,36]),t(M,[2,31]),{40:54,52:[1,55]},t(M,[2,46]),t(S,[2,7]),t(S,[2,11]),{11:56,22:d,47:T},t(S,[2,15]),t(O,a,{8:57}),{22:[1,58]},{22:[1,59]},{21:[1,60]},{22:[2,41]},{22:[2,42]},t(S,[2,28]),t(S,[2,29]),{38:61,53:C},{53:[2,45]},t(S,[2,12],{12:[1,62]}),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:l,17:u,19:[1,63],20:h,22:d,23:f,24:p,25:g,26:y,27:m,30:29,31:b,33:v,35:_,36:6,41:x,42:k,43:w,44:E,47:T,50:i},t(S,[2,18],{18:[1,64]}),{29:[1,65]},{22:[1,66]},t(M,[2,32]),t(S,[2,13]),t(S,[2,17]),t(O,a,{8:67}),t(S,[2,24]),t(S,[2,25]),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:l,17:u,19:[1,68],20:h,22:d,23:f,24:p,25:g,26:y,27:m,30:29,31:b,33:v,35:_,36:6,41:x,42:k,43:w,44:E,47:T,50:i},t(S,[2,19])],defaultActions:{7:[2,43],8:[2,1],9:[2,2],10:[2,3],50:[2,41],51:[2,42],55:[2,45]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=0,h=2,d=1,f=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var b=p.options&&p.options.ranges;function v(){var t;return"number"!=typeof(t=r.pop()||p.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=v()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==d?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(l=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,u>0&&u--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},b&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,l,c,g.yy,w[1],i,a].concat(f))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},D={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:case 33:return 41;case 1:case 34:return 42;case 2:case 35:return 43;case 3:case 36:return 44;case 4:return this.begin("open_directive"),50;case 5:return this.begin("type_directive"),51;case 6:return this.popState(),this.begin("arg_directive"),39;case 7:return this.popState(),this.popState(),53;case 8:return 52;case 9:case 10:case 12:case 13:case 14:case 15:case 46:case 52:break;case 11:case 66:return 5;case 16:return this.pushState("SCALE"),15;case 17:return 16;case 18:case 24:case 40:case 43:this.popState();break;case 19:return this.begin("acc_title"),31;case 20:return this.popState(),"acc_title_value";case 21:return this.begin("acc_descr"),33;case 22:return this.popState(),"acc_descr_value";case 23:this.begin("acc_descr_multiline");break;case 25:return"acc_descr_multiline_value";case 26:this.pushState("STATE");break;case 27:case 30:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 28:case 31:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 29:case 32:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),25;case 37:this.begin("STATE_STRING");break;case 38:return this.popState(),this.pushState("STATE_ID"),"AS";case 39:case 54:return this.popState(),"ID";case 41:return"STATE_DESCR";case 42:return 17;case 44:return this.popState(),this.pushState("struct"),18;case 45:return this.popState(),19;case 47:return this.begin("NOTE"),27;case 48:return this.popState(),this.pushState("NOTE_ID"),48;case 49:return this.popState(),this.pushState("NOTE_ID"),49;case 50:this.popState(),this.pushState("FLOATING_NOTE");break;case 51:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 53:return"NOTE_TEXT";case 55:return this.popState(),this.pushState("NOTE_TEXT"),22;case 56:return this.popState(),e.yytext=e.yytext.substr(2).trim(),29;case 57:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),29;case 58:case 59:return 7;case 60:return 14;case 61:return 47;case 62:return 22;case 63:return e.yytext=e.yytext.trim(),12;case 64:return 13;case 65:return 26;case 67:return"INVALID"}},rules:[/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:state\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[13,14],inclusive:!1},close_directive:{rules:[13,14],inclusive:!1},arg_directive:{rules:[7,8,13,14],inclusive:!1},type_directive:{rules:[6,7,13,14],inclusive:!1},open_directive:{rules:[5,13,14],inclusive:!1},struct:{rules:[13,14,26,33,34,35,36,45,46,47,61,62,63,64,65],inclusive:!1},FLOATING_NOTE_ID:{rules:[54],inclusive:!1},FLOATING_NOTE:{rules:[51,52,53],inclusive:!1},NOTE_TEXT:{rules:[56,57],inclusive:!1},NOTE_ID:{rules:[55],inclusive:!1},NOTE:{rules:[48,49,50],inclusive:!1},acc_descr_multiline:{rules:[24,25],inclusive:!1},acc_descr:{rules:[22],inclusive:!1},acc_title:{rules:[20],inclusive:!1},SCALE:{rules:[17,18],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[39],inclusive:!1},STATE_STRING:{rules:[40,41],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[13,14,27,28,29,30,31,32,37,38,42,43,44],inclusive:!1},ID:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,12,14,15,16,19,21,23,26,44,47,58,59,60,61,62,63,64,66,67],inclusive:!0}}};function B(){this.yy={}}return N.lexer=D,B.prototype=N,N.Parser=B,new B}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(3069).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},9763:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,17,18,20,22,23,24,26],i=[1,15],a=[1,16],o=[1,17],s=[1,18],c=[1,19],l=[1,20],u=[1,24],h=[4,6,9,11,17,18,20,22,23,24,26],d={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,taskName:24,taskData:25,open_directive:26,type_directive:27,arg_directive:28,close_directive:29,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",24:"taskName",25:"taskData",26:"open_directive",27:"type_directive",28:"arg_directive",29:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 3:case 7:case 8:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 11:r.setDiagramTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 12:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 13:case 14:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 15:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 16:r.addTask(a[s-1],a[s]),this.$="task";break;case 18:r.parseDirective("%%{","open_directive");break;case 19:r.parseDirective(a[s],"type_directive");break;case 20:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 21:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,26:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,26:n},{13:8,27:[1,9]},{27:[2,18]},{6:[1,10],7:21,8:11,9:[1,12],10:13,11:[1,14],12:4,17:i,18:a,20:o,22:s,23:c,24:l,26:n},{1:[2,2]},{14:22,15:[1,23],29:u},t([15,29],[2,19]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:21,10:25,12:4,17:i,18:a,20:o,22:s,23:c,24:l,26:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),{19:[1,26]},{21:[1,27]},t(r,[2,14]),t(r,[2,15]),{25:[1,28]},t(r,[2,17]),{11:[1,29]},{16:30,28:[1,31]},{11:[2,21]},t(r,[2,5]),t(r,[2,12]),t(r,[2,13]),t(r,[2,16]),t(h,[2,9]),{14:32,29:u},{29:[2,20]},{11:[1,33]},t(h,[2,10])],defaultActions:{5:[2,18],7:[2,2],24:[2,21],31:[2,20]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=0,h=2,d=1,f=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var b=p.options&&p.options.ranges;function v(){var t;return"number"!=typeof(t=r.pop()||p.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=v()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==d?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(l=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,u>0&&u--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},b&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,l,c,g.yy,w[1],i,a].concat(f))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},f={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),26;case 1:return this.begin("type_directive"),27;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),29;case 4:return 28;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 24;case 21:return 25;case 22:return 15;case 23:return 6;case 24:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23,24],inclusive:!0}}};function p(){this.yy={}}return d.lexer=f,p.prototype=d,d.Parser=p,new p}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(9143).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},7967:(t,e)=>{e.N=void 0;var n=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,i=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^([^:]+):/gm,o=[".","/"];e.N=function(t){var e,s=(e=t||"",e.replace(r,(function(t,e){return String.fromCharCode(e)}))).replace(i,"").trim();if(!s)return"about:blank";if(function(t){return o.indexOf(t[0])>-1}(s))return s;var c=s.match(a);if(!c)return s;var l=c[0];return n.test(l)?"about:blank":s}},3841:t=>{t.exports=function(t,e){return t.intersect(e)}},6187:(t,e,n)=>{n.d(e,{Z:()=>Il});var r=n(1941),i=n.n(r),a={debug:1,info:2,warn:3,error:4,fatal:5},o={debug:function(){},info:function(){},warn:function(){},error:function(){},fatal:function(){}},s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"fatal";isNaN(t)&&(t=t.toLowerCase(),void 0!==a[t]&&(t=a[t])),o.trace=function(){},o.debug=function(){},o.info=function(){},o.warn=function(){},o.error=function(){},o.fatal=function(){},t<=a.fatal&&(o.fatal=console.error?console.error.bind(console,c("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",c("FATAL"))),t<=a.error&&(o.error=console.error?console.error.bind(console,c("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",c("ERROR"))),t<=a.warn&&(o.warn=console.warn?console.warn.bind(console,c("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",c("WARN"))),t<=a.info&&(o.info=console.info?console.info.bind(console,c("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",c("INFO"))),t<=a.debug&&(o.debug=console.debug?console.debug.bind(console,c("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",c("DEBUG")))},c=function(t){var e=i()().format("ss.SSS");return"%c".concat(e," : ").concat(t," : ")},l=n(7543),u="comm",h="rule",d="decl",f=Math.abs,p=String.fromCharCode;function g(t){return t.trim()}function y(t,e,n){return t.replace(e,n)}function m(t,e){return t.indexOf(e)}function b(t,e){return 0|t.charCodeAt(e)}function v(t,e,n){return t.slice(e,n)}function _(t){return t.length}function x(t){return t.length}function k(t,e){return e.push(t),t}function w(t,e){for(var n="",r=x(t),i=0;i<r;i++)n+=e(t[i],i,t,e)||"";return n}function E(t,e,n,r){switch(t.type){case"@import":case d:return t.return=t.return||t.value;case u:return"";case"@keyframes":return t.return=t.value+"{"+w(t.children,r)+"}";case h:t.value=t.props.join(",")}return _(n=w(t.children,r))?t.return=t.value+"{"+n+"}":""}Object.assign;var T=1,C=1,S=0,A=0,M=0,O="";function N(t,e,n,r,i,a,o){return{value:t,root:e,parent:n,type:r,props:i,children:a,line:T,column:C,length:o,return:""}}function D(){return M=A>0?b(O,--A):0,C--,10===M&&(C=1,T--),M}function B(){return M=A<S?b(O,A++):0,C++,10===M&&(C=1,T++),M}function L(){return b(O,A)}function I(){return A}function F(t,e){return v(O,t,e)}function R(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function P(t){return g(F(A-1,Y(91===t?t+2:40===t?t+1:t)))}function j(t){for(;(M=L())&&M<33;)B();return R(t)>2||R(M)>3?"":" "}function z(t,e){for(;--e&&B()&&!(M<48||M>102||M>57&&M<65||M>70&&M<97););return F(t,I()+(e<6&&32==L()&&32==B()))}function Y(t){for(;B();)switch(M){case t:return A;case 34:case 39:34!==t&&39!==t&&Y(M);break;case 40:41===t&&Y(t);break;case 92:B()}return A}function U(t,e){for(;B()&&t+M!==57&&(t+M!==84||47!==L()););return"/*"+F(e,A-1)+"*"+p(47===t?t:B())}function $(t){for(;!R(L());)B();return F(t,A)}function W(t){return function(t){return O="",t}(q("",null,null,null,[""],t=function(t){return T=C=1,S=_(O=t),A=0,[]}(t),0,[0],t))}function q(t,e,n,r,i,a,o,s,c){for(var l=0,u=0,h=o,d=0,f=0,g=0,b=1,v=1,x=1,w=0,E="",T=i,C=a,S=r,A=E;v;)switch(g=w,w=B()){case 40:if(108!=g&&58==A.charCodeAt(h-1)){-1!=m(A+=y(P(w),"&","&\f"),"&\f")&&(x=-1);break}case 34:case 39:case 91:A+=P(w);break;case 9:case 10:case 13:case 32:A+=j(g);break;case 92:A+=z(I()-1,7);continue;case 47:switch(L()){case 42:case 47:k(V(U(B(),I()),e,n),c);break;default:A+="/"}break;case 123*b:s[l++]=_(A)*x;case 125*b:case 59:case 0:switch(w){case 0:case 125:v=0;case 59+u:f>0&&_(A)-h&&k(f>32?G(A+";",r,n,h-1):G(y(A," ","")+";",r,n,h-2),c);break;case 59:A+=";";default:if(k(S=H(A,e,n,l,u,i,s,E,T=[],C=[],h),a),123===w)if(0===u)q(A,e,S,S,T,a,h,s,C);else switch(d){case 100:case 109:case 115:q(t,S,S,r&&k(H(t,S,S,0,0,i,s,E,i,T=[],h),C),i,C,h,s,r?T:C);break;default:q(A,S,S,S,[""],C,0,s,C)}}l=u=f=0,b=x=1,E=A="",h=o;break;case 58:h=1+_(A),f=g;default:if(b<1)if(123==w)--b;else if(125==w&&0==b++&&125==D())continue;switch(A+=p(w),w*b){case 38:x=u>0?1:(A+="\f",-1);break;case 44:s[l++]=(_(A)-1)*x,x=1;break;case 64:45===L()&&(A+=P(B())),d=L(),u=h=_(E=A+=$(I())),w++;break;case 45:45===g&&2==_(A)&&(b=0)}}return a}function H(t,e,n,r,i,a,o,s,c,l,u){for(var d=i-1,p=0===i?a:[""],m=x(p),b=0,_=0,k=0;b<r;++b)for(var w=0,E=v(t,d+1,d=f(_=o[b])),T=t;w<m;++w)(T=g(_>0?p[w]+" "+E:y(E,/&\f/g,p[w])))&&(c[k++]=T);return N(t,e,n,0===i?h:s,c,l,u)}function V(t,e,n){return N(t,e,n,u,p(M),v(t,2,-2),0)}function G(t,e,n,r){return N(t,e,n,d,v(t,0,r),v(t,r+1,-1),r)}const X="9.1.7";function Z(t){return Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Z(t)}const Q=function t(e,n,r){var i=Object.assign({depth:2,clobber:!1},r),a=i.depth,o=i.clobber;return Array.isArray(n)&&!Array.isArray(e)?(n.forEach((function(n){return t(e,n,r)})),e):Array.isArray(n)&&Array.isArray(e)?(n.forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),e):void 0===e||a<=0?null!=e&&"object"===Z(e)&&"object"===Z(n)?Object.assign(e,n):n:(void 0!==n&&"object"===Z(e)&&"object"===Z(n)&&Object.keys(n).forEach((function(r){"object"!==Z(n[r])||void 0!==e[r]&&"object"!==Z(e[r])?(o||"object"!==Z(e[r])&&"object"!==Z(n[r]))&&(e[r]=n[r]):(void 0===e[r]&&(e[r]=Array.isArray(n[r])?[]:{}),e[r]=t(e[r],n[r],{depth:a-1,clobber:o}))})),e)},K={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,n)=>(n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t),hsl2rgb:({h:t,s:e,l:n},r)=>{if(!e)return 2.55*n;t/=360,e/=100;const i=(n/=100)<.5?n*(1+e):n+e-n*e,a=2*n-i;switch(r){case"r":return 255*K.hue2rgb(a,i,t+1/3);case"g":return 255*K.hue2rgb(a,i,t);case"b":return 255*K.hue2rgb(a,i,t-1/3)}},rgb2hsl:({r:t,g:e,b:n},r)=>{t/=255,e/=255,n/=255;const i=Math.max(t,e,n),a=Math.min(t,e,n),o=(i+a)/2;if("l"===r)return 100*o;if(i===a)return 0;const s=i-a;if("s"===r)return 100*(o>.5?s/(2-i-a):s/(i+a));switch(i){case t:return 60*((e-n)/s+(e<n?6:0));case e:return 60*((n-t)/s+2);case n:return 60*((t-e)/s+4);default:return-1}}},J={channel:K,lang:{clamp:(t,e,n)=>e>n?Math.min(e,Math.max(n,t)):Math.min(n,Math.max(e,t)),round:t=>Math.round(1e10*t)/1e10},unit:{dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}}},tt={};for(let Fl=0;Fl<=255;Fl++)tt[Fl]=J.unit.dec2hex(Fl);const et=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new class{constructor(){this.type=0}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=0}is(t){return this.type===t}}}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=0,this}_ensureHSL(){const t=this.data,{h:e,s:n,l:r}=t;void 0===e&&(t.h=J.channel.rgb2hsl(t,"h")),void 0===n&&(t.s=J.channel.rgb2hsl(t,"s")),void 0===r&&(t.l=J.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:n,b:r}=t;void 0===e&&(t.r=J.channel.hsl2rgb(t,"r")),void 0===n&&(t.g=J.channel.hsl2rgb(t,"g")),void 0===r&&(t.b=J.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(2)||void 0===e?(this._ensureHSL(),J.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(2)||void 0===e?(this._ensureHSL(),J.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(2)||void 0===e?(this._ensureHSL(),J.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(1)||void 0===e?(this._ensureRGB(),J.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(1)||void 0===e?(this._ensureRGB(),J.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(1)||void 0===e?(this._ensureRGB(),J.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(1),this.changed=!0,this.data.r=t}set g(t){this.type.set(1),this.changed=!0,this.data.g=t}set b(t){this.type.set(1),this.changed=!0,this.data.b=t}set h(t){this.type.set(2),this.changed=!0,this.data.h=t}set s(t){this.type.set(2),this.changed=!0,this.data.s=t}set l(t){this.type.set(2),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}({r:0,g:0,b:0,a:0},"transparent"),nt={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(nt.re);if(!e)return;const n=e[1],r=parseInt(n,16),i=n.length,a=i%4==0,o=i>4,s=o?1:17,c=o?8:4,l=a?0:-1,u=o?255:15;return et.set({r:(r>>c*(l+3)&u)*s,g:(r>>c*(l+2)&u)*s,b:(r>>c*(l+1)&u)*s,a:a?(r&u)*s/255:1},t)},stringify:t=>{const{r:e,g:n,b:r,a:i}=t;return i<1?`#${tt[Math.round(e)]}${tt[Math.round(n)]}${tt[Math.round(r)]}${tt[Math.round(255*i)]}`:`#${tt[Math.round(e)]}${tt[Math.round(n)]}${tt[Math.round(r)]}`}},rt=nt,it={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(it.hueRe);if(e){const[,t,n]=e;switch(n){case"grad":return J.channel.clamp.h(.9*parseFloat(t));case"rad":return J.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return J.channel.clamp.h(360*parseFloat(t))}}return J.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const n=t.match(it.re);if(!n)return;const[,r,i,a,o,s]=n;return et.set({h:it._hue2deg(r),s:J.channel.clamp.s(parseFloat(i)),l:J.channel.clamp.l(parseFloat(a)),a:o?J.channel.clamp.a(s?parseFloat(o)/100:parseFloat(o)):1},t)},stringify:t=>{const{h:e,s:n,l:r,a:i}=t;return i<1?`hsla(${J.lang.round(e)}, ${J.lang.round(n)}%, ${J.lang.round(r)}%, ${i})`:`hsl(${J.lang.round(e)}, ${J.lang.round(n)}%, ${J.lang.round(r)}%)`}},at=it,ot={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=ot.colors[t];if(e)return rt.parse(e)},stringify:t=>{const e=rt.stringify(t);for(const n in ot.colors)if(ot.colors[n]===e)return n}},st=ot,ct={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(114!==e&&82!==e)return;const n=t.match(ct.re);if(!n)return;const[,r,i,a,o,s,c,l,u]=n;return et.set({r:J.channel.clamp.r(i?2.55*parseFloat(r):parseFloat(r)),g:J.channel.clamp.g(o?2.55*parseFloat(a):parseFloat(a)),b:J.channel.clamp.b(c?2.55*parseFloat(s):parseFloat(s)),a:l?J.channel.clamp.a(u?parseFloat(l)/100:parseFloat(l)):1},t)},stringify:t=>{const{r:e,g:n,b:r,a:i}=t;return i<1?`rgba(${J.lang.round(e)}, ${J.lang.round(n)}, ${J.lang.round(r)}, ${J.lang.round(i)})`:`rgb(${J.lang.round(e)}, ${J.lang.round(n)}, ${J.lang.round(r)})`}},lt=ct,ut=t=>{if("string"!=typeof t)return t;const e=rt.parse(t)||lt.parse(t)||at.parse(t)||st.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},ht=t=>!t.changed&&t.color?t.color:t.type.is(2)||void 0===t.data.r?at.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?lt.stringify(t):rt.stringify(t),dt=(t,e)=>{const n=ut(t);for(const r in e)n[r]=J.channel.clamp[r](e[r]);return ht(n)},ft=(t,e)=>{const n=ut(t),r={};for(const i in e)e[i]&&(r[i]=n[i]+e[i]);return dt(t,r)},pt=(t,e,n=0,r=1)=>{if("number"!=typeof t)return dt(t,{a:e});const i=et.set({r:J.channel.clamp.r(t),g:J.channel.clamp.g(e),b:J.channel.clamp.b(n),a:J.channel.clamp.a(r)});return ht(i)},gt=(t,e=100)=>{const n=ut(t);return n.r=255-n.r,n.g=255-n.g,n.b=255-n.b,((t,e,n=50)=>{const{r:r,g:i,b:a,a:o}=ut(t),{r:s,g:c,b:l,a:u}=ut(e),h=n/100,d=2*h-1,f=o-u,p=((d*f==-1?d:(d+f)/(1+d*f))+1)/2,g=1-p;return pt(r*p+s*g,i*p+c*g,a*p+l*g,o*h+u*(1-h))})(n,t,e)},yt=(t,e,n)=>{const r=ut(t),i=r[e],a=J.channel.clamp[e](i+n);return i!==a&&(r[e]=a),ht(r)},mt=(t,e)=>yt(t,"l",-e),bt=(t,e)=>yt(t,"l",e);var vt=function(t,e){return ft(t,e?{s:-40,l:10}:{s:-40,l:-10})};function _t(t){return _t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_t(t)}var xt=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.background="#f4f4f4",this.darkMode=!1,this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}var e,n;return e=t,n=[{key:"updateColors",value:function(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||ft(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ft(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||vt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||vt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||gt(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||gt(this.tertiaryColor),this.lineColor=this.lineColor||gt(this.background),this.textColor=this.textColor||this.primaryTextColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?mt(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||mt(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||gt(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||bt(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||ft(this.primaryColor,{h:64}),this.fillType3=this.fillType3||ft(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||ft(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||ft(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||ft(this.primaryColor,{h:128}),this.fillType7=this.fillType7||ft(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||ft(this.primaryColor,{l:-10}),this.pie5=this.pie5||ft(this.secondaryColor,{l:-10}),this.pie6=this.pie6||ft(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||ft(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||ft(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||ft(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||ft(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||ft(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||ft(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?mt(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||ft(this.primaryColor,{h:-30}),this.git4=this.git4||ft(this.primaryColor,{h:-60}),this.git5=this.git5||ft(this.primaryColor,{h:-90}),this.git6=this.git6||ft(this.primaryColor,{h:60}),this.git7=this.git7||ft(this.primaryColor,{h:120}),this.darkMode?(this.git0=bt(this.git0,25),this.git1=bt(this.git1,25),this.git2=bt(this.git2,25),this.git3=bt(this.git3,25),this.git4=bt(this.git4,25),this.git5=bt(this.git5,25),this.git6=bt(this.git6,25),this.git7=bt(this.git7,25)):(this.git0=mt(this.git0,25),this.git1=mt(this.git1,25),this.git2=mt(this.git2,25),this.git3=mt(this.git3,25),this.git4=mt(this.git4,25),this.git5=mt(this.git5,25),this.git6=mt(this.git6,25),this.git7=mt(this.git7,25)),this.gitInv0=this.gitInv0||gt(this.git0),this.gitInv1=this.gitInv1||gt(this.git1),this.gitInv2=this.gitInv2||gt(this.git2),this.gitInv3=this.gitInv3||gt(this.git3),this.gitInv4=this.gitInv4||gt(this.git4),this.gitInv5=this.gitInv5||gt(this.git5),this.gitInv6=this.gitInv6||gt(this.git6),this.gitInv7=this.gitInv7||gt(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px"}},{key:"calculate",value:function(t){var e=this;if("object"===_t(t)){var n=Object.keys(t);n.forEach((function(n){e[n]=t[n]})),this.updateColors(),n.forEach((function(n){e[n]=t[n]}))}else this.updateColors()}}],n&&function(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();function kt(t){return kt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},kt(t)}var wt=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=bt(this.primaryColor,16),this.tertiaryColor=ft(this.primaryColor,{h:-160}),this.primaryBorderColor=gt(this.background),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(this.tertiaryColor,this.darkMode),this.primaryTextColor=gt(this.primaryColor),this.secondaryTextColor=gt(this.secondaryColor),this.tertiaryTextColor=gt(this.tertiaryColor),this.lineColor=gt(this.background),this.textColor=gt(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=bt(gt("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=pt(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=mt("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.taskBorderColor=pt(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=pt(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}var e,n;return e=t,n=[{key:"updateColors",value:function(){this.secondBkg=bt(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=bt(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=bt(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=ft(this.primaryColor,{h:64}),this.fillType3=ft(this.secondaryColor,{h:64}),this.fillType4=ft(this.primaryColor,{h:-64}),this.fillType5=ft(this.secondaryColor,{h:-64}),this.fillType6=ft(this.primaryColor,{h:128}),this.fillType7=ft(this.secondaryColor,{h:128}),this.pie1=this.pie1||"#0b0000",this.pie2=this.pie2||"#4d1037",this.pie3=this.pie3||"#3f5258",this.pie4=this.pie4||"#4f2f1b",this.pie5=this.pie5||"#6e0a0a",this.pie6=this.pie6||"#3b0048",this.pie7=this.pie7||"#995a01",this.pie8=this.pie8||"#154706",this.pie9=this.pie9||"#161722",this.pie10=this.pie10||"#00296f",this.pie11=this.pie11||"#01629c",this.pie12=this.pie12||"#010029",this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?mt(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=bt(this.secondaryColor,20),this.git1=bt(this.pie2||this.secondaryColor,20),this.git2=bt(this.pie3||this.tertiaryColor,20),this.git3=bt(this.pie4||ft(this.primaryColor,{h:-30}),20),this.git4=bt(this.pie5||ft(this.primaryColor,{h:-60}),20),this.git5=bt(this.pie6||ft(this.primaryColor,{h:-90}),10),this.git6=bt(this.pie7||ft(this.primaryColor,{h:60}),10),this.git7=bt(this.pie8||ft(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||gt(this.git0),this.gitInv1=this.gitInv1||gt(this.git1),this.gitInv2=this.gitInv2||gt(this.git2),this.gitInv3=this.gitInv3||gt(this.git3),this.gitInv4=this.gitInv4||gt(this.git4),this.gitInv5=this.gitInv5||gt(this.git5),this.gitInv6=this.gitInv6||gt(this.git6),this.gitInv7=this.gitInv7||gt(this.git7),this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px"}},{key:"calculate",value:function(t){var e=this;if("object"===kt(t)){var n=Object.keys(t);n.forEach((function(n){e[n]=t[n]})),this.updateColors(),n.forEach((function(n){e[n]=t[n]}))}else this.updateColors()}}],n&&function(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();function Et(t){return Et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Et(t)}var Tt=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=ft(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=ft(this.primaryColor,{h:-160}),this.primaryBorderColor=vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(this.tertiaryColor,this.darkMode),this.primaryTextColor=gt(this.primaryColor),this.secondaryTextColor=gt(this.secondaryColor),this.tertiaryTextColor=gt(this.tertiaryColor),this.lineColor=gt(this.background),this.textColor=gt(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=pt(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}var e,n;return e=t,n=[{key:"updateColors",value:function(){this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=bt(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=ft(this.primaryColor,{h:64}),this.fillType3=ft(this.secondaryColor,{h:64}),this.fillType4=ft(this.primaryColor,{h:-64}),this.fillType5=ft(this.secondaryColor,{h:-64}),this.fillType6=ft(this.primaryColor,{h:128}),this.fillType7=ft(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||ft(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||ft(this.primaryColor,{l:-10}),this.pie5=this.pie5||ft(this.secondaryColor,{l:-30}),this.pie6=this.pie6||ft(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||ft(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||ft(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||ft(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||ft(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||ft(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||ft(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||ft(this.primaryColor,{h:-30}),this.git4=this.git4||ft(this.primaryColor,{h:-60}),this.git5=this.git5||ft(this.primaryColor,{h:-90}),this.git6=this.git6||ft(this.primaryColor,{h:60}),this.git7=this.git7||ft(this.primaryColor,{h:120}),this.darkMode?(this.git0=bt(this.git0,25),this.git1=bt(this.git1,25),this.git2=bt(this.git2,25),this.git3=bt(this.git3,25),this.git4=bt(this.git4,25),this.git5=bt(this.git5,25),this.git6=bt(this.git6,25),this.git7=bt(this.git7,25)):(this.git0=mt(this.git0,25),this.git1=mt(this.git1,25),this.git2=mt(this.git2,25),this.git3=mt(this.git3,25),this.git4=mt(this.git4,25),this.git5=mt(this.git5,25),this.git6=mt(this.git6,25),this.git7=mt(this.git7,25)),this.gitInv0=this.gitInv0||mt(gt(this.git0),25),this.gitInv1=this.gitInv1||gt(this.git1),this.gitInv2=this.gitInv2||gt(this.git2),this.gitInv3=this.gitInv3||gt(this.git3),this.gitInv4=this.gitInv4||gt(this.git4),this.gitInv5=this.gitInv5||gt(this.git5),this.gitInv6=this.gitInv6||gt(this.git6),this.gitInv7=this.gitInv7||gt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||gt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||gt(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px"}},{key:"calculate",value:function(t){var e=this;if("object"===Et(t)){var n=Object.keys(t);n.forEach((function(n){e[n]=t[n]})),this.updateColors(),n.forEach((function(n){e[n]=t[n]}))}else this.updateColors()}}],n&&function(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();function Ct(t){return Ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ct(t)}var St=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=bt("#cde498",10),this.primaryBorderColor=vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(this.tertiaryColor,this.darkMode),this.primaryTextColor=gt(this.primaryColor),this.secondaryTextColor=gt(this.secondaryColor),this.tertiaryTextColor=gt(this.primaryColor),this.lineColor=gt(this.background),this.textColor=gt(this.background),this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}var e,n;return e=t,n=[{key:"updateColors",value:function(){this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.actorBorder=mt(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=ft(this.primaryColor,{h:64}),this.fillType3=ft(this.secondaryColor,{h:64}),this.fillType4=ft(this.primaryColor,{h:-64}),this.fillType5=ft(this.secondaryColor,{h:-64}),this.fillType6=ft(this.primaryColor,{h:128}),this.fillType7=ft(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||ft(this.primaryColor,{l:-30}),this.pie5=this.pie5||ft(this.secondaryColor,{l:-30}),this.pie6=this.pie6||ft(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||ft(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||ft(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||ft(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||ft(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||ft(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||ft(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||ft(this.primaryColor,{h:-30}),this.git4=this.git4||ft(this.primaryColor,{h:-60}),this.git5=this.git5||ft(this.primaryColor,{h:-90}),this.git6=this.git6||ft(this.primaryColor,{h:60}),this.git7=this.git7||ft(this.primaryColor,{h:120}),this.darkMode?(this.git0=bt(this.git0,25),this.git1=bt(this.git1,25),this.git2=bt(this.git2,25),this.git3=bt(this.git3,25),this.git4=bt(this.git4,25),this.git5=bt(this.git5,25),this.git6=bt(this.git6,25),this.git7=bt(this.git7,25)):(this.git0=mt(this.git0,25),this.git1=mt(this.git1,25),this.git2=mt(this.git2,25),this.git3=mt(this.git3,25),this.git4=mt(this.git4,25),this.git5=mt(this.git5,25),this.git6=mt(this.git6,25),this.git7=mt(this.git7,25)),this.gitInv0=this.gitInv0||gt(this.git0),this.gitInv1=this.gitInv1||gt(this.git1),this.gitInv2=this.gitInv2||gt(this.git2),this.gitInv3=this.gitInv3||gt(this.git3),this.gitInv4=this.gitInv4||gt(this.git4),this.gitInv5=this.gitInv5||gt(this.git5),this.gitInv6=this.gitInv6||gt(this.git6),this.gitInv7=this.gitInv7||gt(this.git7),this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px"}},{key:"calculate",value:function(t){var e=this;if("object"===Ct(t)){var n=Object.keys(t);n.forEach((function(n){e[n]=t[n]})),this.updateColors(),n.forEach((function(n){e[n]=t[n]}))}else this.updateColors()}}],n&&function(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();function At(t){return At="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},At(t)}var Mt=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=bt(this.contrast,55),this.background="#ffffff",this.tertiaryColor=ft(this.primaryColor,{h:-160}),this.primaryBorderColor=vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(this.tertiaryColor,this.darkMode),this.primaryTextColor=gt(this.primaryColor),this.secondaryTextColor=gt(this.secondaryColor),this.tertiaryTextColor=gt(this.tertiaryColor),this.lineColor=gt(this.background),this.textColor=gt(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}var e,n;return e=t,n=[{key:"updateColors",value:function(){this.secondBkg=bt(this.contrast,55),this.border2=this.contrast,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.actorBorder=bt(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.sectionBkgColor=bt(this.contrast,30),this.sectionBkgColor2=bt(this.contrast,30),this.taskBorderColor=mt(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=bt(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=mt(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=ft(this.primaryColor,{h:64}),this.fillType3=ft(this.secondaryColor,{h:64}),this.fillType4=ft(this.primaryColor,{h:-64}),this.fillType5=ft(this.secondaryColor,{h:-64}),this.fillType6=ft(this.primaryColor,{h:128}),this.fillType7=ft(this.secondaryColor,{h:128}),this.pie1=this.pie1||"#F4F4F4",this.pie2=this.pie2||"#555",this.pie3=this.pie3||"#BBB",this.pie4=this.pie4||"#777",this.pie5=this.pie5||"#999",this.pie6=this.pie6||"#DDD",this.pie7=this.pie7||"#FFF",this.pie8=this.pie8||"#DDD",this.pie9=this.pie9||"#BBB",this.pie10=this.pie10||"#999",this.pie11=this.pie11||"#777",this.pie12=this.pie12||"#555",this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=mt(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||ft(this.primaryColor,{h:-30}),this.git4=this.pie5||ft(this.primaryColor,{h:-60}),this.git5=this.pie6||ft(this.primaryColor,{h:-90}),this.git6=this.pie7||ft(this.primaryColor,{h:60}),this.git7=this.pie8||ft(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||gt(this.git0),this.gitInv1=this.gitInv1||gt(this.git1),this.gitInv2=this.gitInv2||gt(this.git2),this.gitInv3=this.gitInv3||gt(this.git3),this.gitInv4=this.gitInv4||gt(this.git4),this.gitInv5=this.gitInv5||gt(this.git5),this.gitInv6=this.gitInv6||gt(this.git6),this.gitInv7=this.gitInv7||gt(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px"}},{key:"calculate",value:function(t){var e=this;if("object"===At(t)){var n=Object.keys(t);n.forEach((function(n){e[n]=t[n]})),this.updateColors(),n.forEach((function(n){e[n]=t[n]}))}else this.updateColors()}}],n&&function(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();const Ot={base:{getThemeVariables:function(t){var e=new xt;return e.calculate(t),e}},dark:{getThemeVariables:function(t){var e=new wt;return e.calculate(t),e}},default:{getThemeVariables:function(t){var e=new Tt;return e.calculate(t),e}},forest:{getThemeVariables:function(t){var e=new St;return e.calculate(t),e}},neutral:{getThemeVariables:function(t){var e=new Mt;return e.calculate(t),e}}};function Nt(t){return function(t){if(Array.isArray(t))return Dt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Dt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Dt(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Dt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function Bt(t){return Bt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Bt(t)}var Lt={theme:"default",themeVariables:Ot.default.getThemeVariables(),themeCSS:void 0,maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,deterministicIDSeed:void 0,flowchart:{diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,useMaxWidth:!0,defaultRenderer:"dagre-d3"},sequence:{hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",useMaxWidth:!0,topAxis:!1,useWidth:void 0},journey:{diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},state:{dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},er:{diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12,useMaxWidth:!0},pie:{useWidth:void 0,useMaxWidth:!0},requirement:{useWidth:void 0,useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},gitGraph:{diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0},c4:{useWidth:void 0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,useMaxWidth:!0,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"}};Lt.class.arrowMarkerAbsolute=Lt.arrowMarkerAbsolute,Lt.gitGraph.arrowMarkerAbsolute=Lt.arrowMarkerAbsolute;var It=function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return Object.keys(e).reduce((function(r,i){return Array.isArray(e[i])?r:"object"===Bt(e[i])&&null!==e[i]?[].concat(Nt(r),[n+i],Nt(t(e[i],""))):[].concat(Nt(r),[n+i])}),[])}(Lt,"");const Ft=Lt;function Rt(t){return Rt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Rt(t)}var Pt,jt=Object.freeze(Ft),zt=Q({},jt),Yt=[],Ut=Q({},jt),$t=function(t,e){for(var n=Q({},t),r={},i=0;i<e.length;i++){var a=e[i];Ht(a),r=Q(r,a)}if(n=Q(n,r),r.theme&&Ot[r.theme]){var o=Q({},Pt),s=Q(o.themeVariables||{},r.themeVariables);n.themeVariables=Ot[n.theme].getThemeVariables(s)}return Ut=n,n},Wt=function(){return Q({},zt)},qt=function(){return Q({},Ut)},Ht=function t(e){Object.keys(zt.secure).forEach((function(t){void 0!==e[zt.secure[t]]&&(o.debug("Denied attempt to modify a secure key ".concat(zt.secure[t]),e[zt.secure[t]]),delete e[zt.secure[t]])})),Object.keys(e).forEach((function(t){0===t.indexOf("__")&&delete e[t]})),Object.keys(e).forEach((function(n){"string"==typeof e[n]&&(e[n].indexOf("<")>-1||e[n].indexOf(">")>-1||e[n].indexOf("url(data:")>-1)&&delete e[n],"object"===Rt(e[n])&&t(e[n])}))},Vt=function(t){t.fontFamily&&(t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),Yt.push(t),$t(zt,Yt)},Gt=function(){$t(zt,Yt=[])},Xt=n(7856),Zt=n.n(Xt),Qt=function(t){var e=t.replace(/\\u[\dA-F]{4}/gi,(function(t){return String.fromCharCode(parseInt(t.replace(/\\u/g,""),16))}));return(e=(e=e.replace(/\\x([0-9a-f]{2})/gi,(function(t,e){return String.fromCharCode(parseInt(e,16))}))).replace(/\\[\d\d\d]{3}/gi,(function(t){return String.fromCharCode(parseInt(t.replace(/\\/g,""),8))}))).replace(/\\[\d\d\d]{2}/gi,(function(t){return String.fromCharCode(parseInt(t.replace(/\\/g,""),8))}))},Kt=function(t){for(var e="",n=0;n>=0;){if(!((n=t.indexOf("<script"))>=0)){e+=t,n=-1;break}e+=t.substr(0,n),(n=(t=t.substr(n+1)).indexOf("<\/script>"))>=0&&(n+=9,t=t.substr(n))}var r=Qt(e);return(r=(r=(r=(r=r.replace(/script>/gi,"#")).replace(/javascript:/gi,"#")).replace(/javascript&colon/gi,"#")).replace(/onerror=/gi,"onerror:")).replace(/<iframe/gi,"")},Jt=function(t,e){var n=t,r=!0;if(!e.flowchart||!1!==e.flowchart.htmlLabels&&"false"!==e.flowchart.htmlLabels||(r=!1),r){var i=e.securityLevel;"antiscript"===i||"strict"===i?n=Kt(n):"loose"!==i&&(n=(n=(n=re(n)).replace(/</g,"<").replace(/>/g,">")).replace(/=/g,"="),n=ne(n))}return n},te=function(t,e){return t?e.dompurifyConfig?Zt().sanitize(Jt(t,e),e.dompurifyConfig):Zt().sanitize(Jt(t,e)):t},ee=/<br\s*\/?>/gi,ne=function(t){return t.replace(/#br#/g,"<br/>")},re=function(t){return t.replace(ee,"#br#")},ie=function(t){return"false"!==t&&!1!==t},ae=function t(e){var n=e;return-1!=e.indexOf("~")?t(n=(n=n.replace("~","<")).replace("~",">")):n};const oe={getRows:function(t){if(!t)return 1;var e=re(t);return(e=e.replace(/\\n/g,"#br#")).split("#br#")},sanitizeText:te,sanitizeTextOrArray:function(t,e){return"string"==typeof t?te(t,e):t.flat().map((function(t){return te(t,e)}))},hasBreaks:function(t){return ee.test(t)},splitBreaks:function(t){return t.split(ee)},lineBreakRegex:ee,removeScript:Kt,getUrl:function(t){var e="";return t&&(e=(e=(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),e},evaluate:ie,removeEscapes:Qt};var se="",ce="",le="",ue=function(t){return te(t,qt())},he=function(){se="",le="",ce=""},de=function(t){se=ue(t).replace(/^\s+/g,"")},fe=function(){return se||ce},pe=function(t){le=ue(t).replace(/\n\s+/g,"\n")},ge=function(){return le},ye=function(t){ce=ue(t)},me=function(){return ce};function be(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,i,a=[],o=!0,s=!1;try{for(n=n.call(t);!(o=(r=n.next()).done)&&(a.push(r.value),!e||a.length!==e);o=!0);}catch(t){s=!0,i=t}finally{try{o||null==n.return||n.return()}finally{if(s)throw i}}return a}}(t,e)||function(t,e){if(t){if("string"==typeof t)return ve(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ve(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ve(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function _e(t){return _e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_e(t)}var xe,ke=[],we=[""],Ee="global",Te="",Ce=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Se=[],Ae="",Me=!1,Oe=4,Ne=2,De=function(t){return null==t?ke:ke.filter((function(e){return e.parentBoundary===t}))},Be=function(){return Me};const Le={addPersonOrSystem:function(t,e,n,r,i,a,o){if(null!==e&&null!==n){var s={},c=ke.find((function(t){return t.alias===e}));if(c&&e===c.alias?s=c:(s.alias=e,ke.push(s)),s.label=null==n?{text:""}:{text:n},null==r)s.descr={text:""};else if("object"===_e(r)){var l=be(Object.entries(r)[0],2),u=l[0],h=l[1];s[u]={text:h}}else s.descr={text:r};if("object"===_e(i)){var d=be(Object.entries(i)[0],2),f=d[0],p=d[1];s[f]=p}else s.sprite=i;if("object"===_e(a)){var g=be(Object.entries(a)[0],2),y=g[0],m=g[1];s[y]=m}else s.tags=a;if("object"===_e(o)){var b=be(Object.entries(o)[0],2),v=b[0],_=b[1];s[v]=_}else s.link=o;s.typeC4Shape={text:t},s.parentBoundary=Ee,s.wrap=Be()}},addPersonOrSystemBoundary:function(t,e,n,r,i){if(null!==t&&null!==e){var a={},o=Ce.find((function(e){return e.alias===t}));if(o&&t===o.alias?a=o:(a.alias=t,Ce.push(a)),a.label=null==e?{text:""}:{text:e},null==n)a.type={text:"system"};else if("object"===_e(n)){var s=be(Object.entries(n)[0],2),c=s[0],l=s[1];a[c]={text:l}}else a.type={text:n};if("object"===_e(r)){var u=be(Object.entries(r)[0],2),h=u[0],d=u[1];a[h]=d}else a.tags=r;if("object"===_e(i)){var f=be(Object.entries(i)[0],2),p=f[0],g=f[1];a[p]=g}else a.link=i;a.parentBoundary=Ee,a.wrap=Be(),Te=Ee,Ee=t,we.push(Te)}},addContainer:function(t,e,n,r,i,a,o,s){if(null!==e&&null!==n){var c={},l=ke.find((function(t){return t.alias===e}));if(l&&e===l.alias?c=l:(c.alias=e,ke.push(c)),c.label=null==n?{text:""}:{text:n},null==r)c.techn={text:""};else if("object"===_e(r)){var u=be(Object.entries(r)[0],2),h=u[0],d=u[1];c[h]={text:d}}else c.techn={text:r};if(null==i)c.descr={text:""};else if("object"===_e(i)){var f=be(Object.entries(i)[0],2),p=f[0],g=f[1];c[p]={text:g}}else c.descr={text:i};if("object"===_e(a)){var y=be(Object.entries(a)[0],2),m=y[0],b=y[1];c[m]=b}else c.sprite=a;if("object"===_e(o)){var v=be(Object.entries(o)[0],2),_=v[0],x=v[1];c[_]=x}else c.tags=o;if("object"===_e(s)){var k=be(Object.entries(s)[0],2),w=k[0],E=k[1];c[w]=E}else c.link=s;c.wrap=Be(),c.typeC4Shape={text:t},c.parentBoundary=Ee}},addContainerBoundary:function(t,e,n,r,i){if(null!==t&&null!==e){var a={},o=Ce.find((function(e){return e.alias===t}));if(o&&t===o.alias?a=o:(a.alias=t,Ce.push(a)),a.label=null==e?{text:""}:{text:e},null==n)a.type={text:"container"};else if("object"===_e(n)){var s=be(Object.entries(n)[0],2),c=s[0],l=s[1];a[c]={text:l}}else a.type={text:n};if("object"===_e(r)){var u=be(Object.entries(r)[0],2),h=u[0],d=u[1];a[h]=d}else a.tags=r;if("object"===_e(i)){var f=be(Object.entries(i)[0],2),p=f[0],g=f[1];a[p]=g}else a.link=i;a.parentBoundary=Ee,a.wrap=Be(),Te=Ee,Ee=t,we.push(Te)}},addComponent:function(t,e,n,r,i,a,o,s){if(null!==e&&null!==n){var c={},l=ke.find((function(t){return t.alias===e}));if(l&&e===l.alias?c=l:(c.alias=e,ke.push(c)),c.label=null==n?{text:""}:{text:n},null==r)c.techn={text:""};else if("object"===_e(r)){var u=be(Object.entries(r)[0],2),h=u[0],d=u[1];c[h]={text:d}}else c.techn={text:r};if(null==i)c.descr={text:""};else if("object"===_e(i)){var f=be(Object.entries(i)[0],2),p=f[0],g=f[1];c[p]={text:g}}else c.descr={text:i};if("object"===_e(a)){var y=be(Object.entries(a)[0],2),m=y[0],b=y[1];c[m]=b}else c.sprite=a;if("object"===_e(o)){var v=be(Object.entries(o)[0],2),_=v[0],x=v[1];c[_]=x}else c.tags=o;if("object"===_e(s)){var k=be(Object.entries(s)[0],2),w=k[0],E=k[1];c[w]=E}else c.link=s;c.wrap=Be(),c.typeC4Shape={text:t},c.parentBoundary=Ee}},addDeploymentNode:function(t,e,n,r,i,a,o,s){if(null!==e&&null!==n){var c={},l=Ce.find((function(t){return t.alias===e}));if(l&&e===l.alias?c=l:(c.alias=e,Ce.push(c)),c.label=null==n?{text:""}:{text:n},null==r)c.type={text:"node"};else if("object"===_e(r)){var u=be(Object.entries(r)[0],2),h=u[0],d=u[1];c[h]={text:d}}else c.type={text:r};if(null==i)c.descr={text:""};else if("object"===_e(i)){var f=be(Object.entries(i)[0],2),p=f[0],g=f[1];c[p]={text:g}}else c.descr={text:i};if("object"===_e(o)){var y=be(Object.entries(o)[0],2),m=y[0],b=y[1];c[m]=b}else c.tags=o;if("object"===_e(s)){var v=be(Object.entries(s)[0],2),_=v[0],x=v[1];c[_]=x}else c.link=s;c.nodeType=t,c.parentBoundary=Ee,c.wrap=Be(),Te=Ee,Ee=e,we.push(Te)}},popBoundaryParseStack:function(){Ee=Te,we.pop(),Te=we.pop(),we.push(Te)},addRel:function(t,e,n,r,i,a,o,s,c){if(null!=t&&null!=e&&null!=n&&null!=r){var l={},u=Se.find((function(t){return t.from===e&&t.to===n}));if(u?l=u:Se.push(l),l.type=t,l.from=e,l.to=n,l.label={text:r},null==i)l.techn={text:""};else if("object"===_e(i)){var h=be(Object.entries(i)[0],2),d=h[0],f=h[1];l[d]={text:f}}else l.techn={text:i};if(null==a)l.descr={text:""};else if("object"===_e(a)){var p=be(Object.entries(a)[0],2),g=p[0],y=p[1];l[g]={text:y}}else l.descr={text:a};if("object"===_e(o)){var m=be(Object.entries(o)[0],2),b=m[0],v=m[1];l[b]=v}else l.sprite=o;if("object"===_e(s)){var _=be(Object.entries(s)[0],2),x=_[0],k=_[1];l[x]=k}else l.tags=s;if("object"===_e(c)){var w=be(Object.entries(c)[0],2),E=w[0],T=w[1];l[E]=T}else l.link=c;l.wrap=Be()}},updateElStyle:function(t,e,n,r,i,a,o,s,c,l,u){var h=ke.find((function(t){return t.alias===e}));if(void 0!==h||void 0!==(h=Ce.find((function(t){return t.alias===e})))){if(null!=n)if("object"===_e(n)){var d=be(Object.entries(n)[0],2),f=d[0],p=d[1];h[f]=p}else h.bgColor=n;if(null!=r)if("object"===_e(r)){var g=be(Object.entries(r)[0],2),y=g[0],m=g[1];h[y]=m}else h.fontColor=r;if(null!=i)if("object"===_e(i)){var b=be(Object.entries(i)[0],2),v=b[0],_=b[1];h[v]=_}else h.borderColor=i;if(null!=a)if("object"===_e(a)){var x=be(Object.entries(a)[0],2),k=x[0],w=x[1];h[k]=w}else h.shadowing=a;if(null!=o)if("object"===_e(o)){var E=be(Object.entries(o)[0],2),T=E[0],C=E[1];h[T]=C}else h.shape=o;if(null!=s)if("object"===_e(s)){var S=be(Object.entries(s)[0],2),A=S[0],M=S[1];h[A]=M}else h.sprite=s;if(null!=c)if("object"===_e(c)){var O=be(Object.entries(c)[0],2),N=O[0],D=O[1];h[N]=D}else h.techn=c;if(null!=l)if("object"===_e(l)){var B=be(Object.entries(l)[0],2),L=B[0],I=B[1];h[L]=I}else h.legendText=l;if(null!=u)if("object"===_e(u)){var F=be(Object.entries(u)[0],2),R=F[0],P=F[1];h[R]=P}else h.legendSprite=u}},updateRelStyle:function(t,e,n,r,i,a,o){var s=Se.find((function(t){return t.from===e&&t.to===n}));if(void 0!==s){if(null!=r)if("object"===_e(r)){var c=be(Object.entries(r)[0],2),l=c[0],u=c[1];s[l]=u}else s.textColor=r;if(null!=i)if("object"===_e(i)){var h=be(Object.entries(i)[0],2),d=h[0],f=h[1];s[d]=f}else s.lineColor=i;if(null!=a)if("object"===_e(a)){var p=be(Object.entries(a)[0],2),g=p[0],y=p[1];s[g]=parseInt(y)}else s.offsetX=parseInt(a);if(null!=o)if("object"===_e(o)){var m=be(Object.entries(o)[0],2),b=m[0],v=m[1];s[b]=parseInt(v)}else s.offsetY=parseInt(o)}},updateLayoutConfig:function(t,e,n){var r=Oe,i=Ne;if("object"===_e(e)){var a=be(Object.entries(e)[0],2),o=(a[0],a[1]);r=parseInt(o)}else r=parseInt(e);if("object"===_e(n)){var s=be(Object.entries(n)[0],2),c=(s[0],s[1]);i=parseInt(c)}else i=parseInt(n);r>=1&&(Oe=r),i>=1&&(Ne=i)},autoWrap:Be,setWrap:function(t){Me=t},getC4ShapeArray:De,getC4Shape:function(t){return ke.find((function(e){return e.alias===t}))},getC4ShapeKeys:function(t){return Object.keys(De(t))},getBoundarys:function(t){return null==t?Ce:Ce.filter((function(e){return e.parentBoundary===t}))},getCurrentBoundaryParse:function(){return Ee},getParentBoundaryParse:function(){return Te},getRels:function(){return Se},getTitle:function(){return Ae},getC4Type:function(){return xe},getC4ShapeInRow:function(){return Oe},getC4BoundaryInRow:function(){return Ne},setAccTitle:de,getAccTitle:fe,getAccDescription:ge,setAccDescription:pe,parseDirective:function(t,e,n){Nl.parseDirective(this,t,e,n)},getConfig:function(){return qt().c4},clear:function(){ke=[],Ce=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Te="",Ee="global",we=[""],Se=[],we=[""],Ae="",Me=!1,Oe=4,Ne=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(t){var e=te(t,qt());Ae=e},setC4Type:function(t){var e=te(t,qt());xe=e}};var Ie=n(7967);function Fe(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var Re=function(t,e){var n=t.append("rect");if(n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),"undefined"!==e.attrs&&null!==e.attrs)for(var r in e.attrs)n.attr(r,e.attrs[r]);return"undefined"!==e.class&&n.attr("class",e.class),n},Pe=function(){function t(t,e,n,i,a,o,s){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("text-anchor","middle").text(t),s)}function e(t,e,n,i,a,o,s,c){for(var l=c.fontSize,u=c.fontFamily,h=c.fontWeight,d=t.split(oe.lineBreakRegex),f=0;f<d.length;f++){var p=f*l-l*(d.length-1)/2,g=e.append("text").attr("x",n+a/2).attr("y",i).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",l).style("font-weight",h).style("font-family",u);g.append("tspan").attr("dy",p).text(d[f]).attr("alignment-baseline","mathematical"),r(g,s)}}function n(t,n,i,a,o,s,c,l){var u=n.append("switch"),h=u.append("foreignObject").attr("x",i).attr("y",a).attr("width",o).attr("height",s).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,u,i,a,o,0,c,l),r(h,c)}function r(t,e){for(var n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}();const je=function(t,e,n){var r=e.bgColor?e.bgColor:n[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:n[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="}var s=t.append("g");s.attr("class","person-man");var c={x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0};switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":c.x=e.x,c.y=e.y,c.fill=r,c.width=e.width,c.height=e.height,c.style="stroke:"+i+";stroke-width:0.5;",c.rx=2.5,c.ry=2.5,Re(s,c);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":s.append("path").attr("fill",r).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),s.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":s.append("path").attr("fill",r).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),s.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2))}var l,u,h={fontFamily:(l=n)[(u=e.typeC4Shape.text)+"FontFamily"],fontSize:l[u+"FontSize"],fontWeight:l[u+"FontWeight"]};switch(s.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":!function(t,e,n,r,i,a){var o=t.append("image");o.attr("width",48),o.attr("height",48),o.attr("x",r),o.attr("y",i);var s=a.startsWith("data:image/png;base64")?a:(0,Ie.N)(a);o.attr("xlink:href",s)}(s,0,0,e.x+e.width/2-24,e.y+e.image.Y,o)}var d=n[e.typeC4Shape.text+"Font"]();return d.fontWeight="bold",d.fontSize=d.fontSize+2,d.fontColor=a,Pe(n)(e.label.text,s,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},d),(d=n[e.typeC4Shape.text+"Font"]()).fontColor=a,e.thchn&&""!==e.thchn.text?Pe(n)(e.thchn.text,s,e.x,e.y+e.thchn.Y,e.width,e.height,{fill:a,"font-style":"italic"},d):e.type&&""!==e.type.text&&Pe(n)(e.type.text,s,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},d),e.descr&&""!==e.descr.text&&((d=n.personFont()).fontColor=a,Pe(n)(e.descr.text,s,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},d)),e.height};Ie.N;var ze=n(2536),Ye=n.n(ze),Ue=/[%]{2}[{]\s*(?:(?:(\w+)\s*:|(\w+))\s*(?:(?:(\w+))|((?:(?![}][%]{2}).|\r?\n)*))?\s*)(?:[}][%]{2})?/gi,$e=/\s*%%.*\n/gm,We={};const qe=function(t,e){if((t=t.replace(Ue,"").replace($e,"\n")).match(/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/))return"c4";if("error"===t)return"error";if(t.match(/^\s*sequenceDiagram/))return"sequence";if(t.match(/^\s*gantt/))return"gantt";if(t.match(/^\s*classDiagram-v2/))return"classDiagram";if(t.match(/^\s*classDiagram/))return e&&e.class&&"dagre-wrapper"===e.class.defaultRenderer?"classDiagram":"class";if(t.match(/^\s*stateDiagram-v2/))return"stateDiagram";if(t.match(/^\s*stateDiagram/))return e&&e.class&&"dagre-wrapper"===e.state.defaultRenderer?"stateDiagram":"state";if(t.match(/^\s*flowchart/))return"flowchart-v2";if(t.match(/^\s*info/))return"info";if(t.match(/^\s*pie/))return"pie";if(t.match(/^\s*erDiagram/))return"er";if(t.match(/^\s*journey/))return"journey";if(t.match(/^\s*requirement/)||t.match(/^\s*requirementDiagram/))return"requirement";if(e&&e.flowchart&&"dagre-wrapper"===e.flowchart.defaultRenderer)return"flowchart-v2";for(var n=Object.keys(We),r=0;r<n.length;r++){var i=n[r],a=We[i];if(a&&a.detector(t))return i}return"flowchart"};var He=void 0;function Ve(t){return Ve="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ve(t)}function Ge(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=Ze(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function Xe(t){return function(t){if(Array.isArray(t))return Qe(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Ze(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ze(t,e){if(t){if("string"==typeof t)return Qe(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Qe(t,e):void 0}}function Qe(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var Ke,Je={curveBasis:l.curveBasis,curveBasisClosed:l.curveBasisClosed,curveBasisOpen:l.curveBasisOpen,curveLinear:l.curveLinear,curveLinearClosed:l.curveLinearClosed,curveMonotoneX:l.curveMonotoneX,curveMonotoneY:l.curveMonotoneY,curveNatural:l.curveNatural,curveStep:l.curveStep,curveStepAfter:l.curveStepAfter,curveStepBefore:l.curveStepBefore},tn=/[%]{2}[{]\s*(?:(?:(\w+)\s*:|(\w+))\s*(?:(?:(\w+))|((?:(?![}][%]{2}).|\r?\n)*))?\s*)(?:[}][%]{2})?/gi,en=/\s*(?:(?:(\w+)(?=:):|(\w+))\s*(?:(?:(\w+))|((?:(?![}][%]{2}).|\r?\n)*))?\s*)(?:[}][%]{2})?/gi,nn=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;try{var n=new RegExp("[%]{2}(?![{]".concat(en.source,")(?=[}][%]{2}).*\n"),"ig");t=t.trim().replace(n,"").replace(/'/gm,'"'),o.debug("Detecting diagram directive".concat(null!==e?" type:"+e:""," based on the text:").concat(t));for(var r,i=[];null!==(r=tn.exec(t));)if(r.index===tn.lastIndex&&tn.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){var a=r[1]?r[1]:r[2],s=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;i.push({type:a,args:s})}return 0===i.length&&i.push({type:t,args:null}),1===i.length?i[0]:i}catch(n){return o.error("ERROR: ".concat(n.message," - Unable to parse directive\n ").concat(null!==e?" type:"+e:""," based on the text:").concat(t)),{type:null,args:null}}},rn=function(t,e){var n={};return function(){for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];var o=e?e.apply(He,i):i[0];if(o in n)return n[o];var s=t.apply(void 0,i);return n[o]=s,s}},an=function(t,e){if(!t)return e;var n="curve".concat(t.charAt(0).toUpperCase()+t.slice(1));return Je[n]||e},on=function(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0},sn=function(t){for(var e="",n="",r=0;r<t.length;r++)void 0!==t[r]&&(t[r].startsWith("color:")||t[r].startsWith("text-align:")?n=n+t[r]+";":e=e+t[r]+";");return{style:e,labelStyle:n}},cn=0,ln=function(){return cn++,"id-"+Math.random().toString(36).substr(2,12)+"-"+cn},un=function(t){return function(t){for(var e="",n="0123456789abcdef",r=n.length,i=0;i<t;i++)e+=n.charAt(Math.floor(Math.random()*r));return e}(t.length)},hn=function(t,e){var n=e.text.replace(oe.lineBreakRegex," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.style("text-anchor",e.anchor),r.style("font-family",e.fontFamily),r.style("font-size",e.fontSize),r.style("font-weight",e.fontWeight),r.attr("fill",e.fill),void 0!==e.class&&r.attr("class",e.class);var i=r.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.attr("fill",e.fill),i.text(n),r},dn=rn((function(t,e,n){if(!t)return t;if(n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},n),oe.lineBreakRegex.test(t))return t;var r=t.split(" "),i=[],a="";return r.forEach((function(t,o){var s=gn("".concat(t," "),n),c=gn(a,n);if(s>e){var l=fn(t,e,"-",n),u=l.hyphenatedStrings,h=l.remainingWord;i.push.apply(i,[a].concat(Xe(u))),a=h}else c+s>=e?(i.push(a),a=t):a=[a,t].filter(Boolean).join(" ");o+1===r.length&&i.push(a)})),i.filter((function(t){return""!==t})).join(n.joinWith)}),(function(t,e,n){return"".concat(t,"-").concat(e,"-").concat(n.fontSize,"-").concat(n.fontWeight,"-").concat(n.fontFamily,"-").concat(n.joinWith)})),fn=rn((function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);var i=t.split(""),a=[],o="";return i.forEach((function(t,s){var c="".concat(o).concat(t);if(gn(c,r)>=e){var l=s+1,u=i.length===l,h="".concat(c).concat(n);a.push(u?c:h),o=""}else o=c})),{hyphenatedStrings:a,remainingWord:o}}),(function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;return"".concat(t,"-").concat(e,"-").concat(n,"-").concat(r.fontSize,"-").concat(r.fontWeight,"-").concat(r.fontFamily)})),pn=function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},e),yn(t,e).height},gn=function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),yn(t,e).width},yn=rn((function(t,e){var n=e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),r=n.fontSize,i=n.fontFamily,a=n.fontWeight;if(!t)return{width:0,height:0};var o=["sans-serif",i],s=t.split(oe.lineBreakRegex),c=[],u=(0,l.select)("body");if(!u.remove)return{width:0,height:0,lineHeight:0};for(var h=u.append("svg"),d=0,f=o;d<f.length;d++){var p,g=f[d],y=0,m={width:0,height:0,lineHeight:0},b=Ge(s);try{for(b.s();!(p=b.n()).done;){var v=p.value,_={x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0};_.text=v;var x=hn(h,_).style("font-size",r).style("font-weight",a).style("font-family",g),k=(x._groups||x)[0][0].getBBox();m.width=Math.round(Math.max(m.width,k.width)),y=Math.round(k.height),m.height+=y,m.lineHeight=Math.round(Math.max(m.lineHeight,y))}}catch(t){b.e(t)}finally{b.f()}c.push(m)}return h.remove(),c[isNaN(c[1].height)||isNaN(c[1].width)||isNaN(c[1].lineHeight)||c[0].height>c[1].height&&c[0].width>c[1].width&&c[0].lineHeight>c[1].lineHeight?0:1]}),(function(t,e){return"".concat(t,"-").concat(e.fontSize,"-").concat(e.fontWeight,"-").concat(e.fontFamily)})),mn=function(t,e,n){var r=new Map;return n?(r.set("width","100%"),r.set("style","max-width: ".concat(e,"px;"))):r.set("width",e),r},bn=function(t,e,n,r){!function(t,e){var n,r=Ge(e);try{for(r.s();!(n=r.n()).done;){var i=n.value;t.attr(i[0],i[1])}}catch(t){r.e(t)}finally{r.f()}}(t,mn(0,1*n,r))},vn=function(t,e,n,r){var i=e.node().getBBox(),a=i.width,s=i.height;o.info("SVG bounds: ".concat(a,"x").concat(s),i);var c=t._label.width,l=t._label.height;o.info("Graph bounds: ".concat(c,"x").concat(l),t),c=a+2*n,l=s+2*n,o.info("Calculated bounds: ".concat(c,"x").concat(l)),bn(e,0,c,r);var u="".concat(i.x-n," ").concat(i.y-n," ").concat(i.width+2*n," ").concat(i.height+2*n);o.info("Graph.label",t._label,"swidth",a,"sheight",s,"width",c,"height",l,"vBox",u),e.attr("viewBox",u)},_n=function t(e){if(o.debug("directiveSanitizer called with",e),"object"===Ve(e)&&(e.length?e.forEach((function(e){return t(e)})):Object.keys(e).forEach((function(n){o.debug("Checking key",n),0===n.indexOf("__")&&(o.debug("sanitize deleting __ option",n),delete e[n]),n.indexOf("proto")>=0&&(o.debug("sanitize deleting proto option",n),delete e[n]),n.indexOf("constr")>=0&&(o.debug("sanitize deleting constr option",n),delete e[n]),n.indexOf("themeCSS")>=0&&(o.debug("sanitizing themeCss option"),e[n]=xn(e[n])),n.indexOf("fontFamily")>=0&&(o.debug("sanitizing fontFamily option"),e[n]=xn(e[n])),n.indexOf("altFontFamily")>=0&&(o.debug("sanitizing altFontFamily option"),e[n]=xn(e[n])),It.indexOf(n)<0?(o.debug("sanitize deleting option",n),delete e[n]):"object"===Ve(e[n])&&(o.debug("sanitize deleting object",n),t(e[n]))}))),e.themeVariables)for(var n=Object.keys(e.themeVariables),r=0;r<n.length;r++){var i=n[r],a=e.themeVariables[i];a&&a.match&&!a.match(/^[a-zA-Z0-9#,";()%. ]+$/)&&(e.themeVariables[i]="")}o.debug("After sanitization",e)},xn=function(t){for(var e=0,n=0,r=0;r<t.length;r++){if(e<n)return"{ /* ERROR: Unbalanced CSS */ }";"{"===t[r]?e++:"}"===t[r]&&n++}return e!==n?"{ /* ERROR: Unbalanced CSS */ }":t};const kn={assignWithDepth:Q,wrapLabel:dn,calculateTextHeight:pn,calculateTextWidth:gn,calculateTextDimensions:yn,calculateSvgSizeAttrs:mn,configureSvgSize:bn,setupGraphViewbox:vn,detectInit:function(t,e){var n=nn(t,/(?:init\b)|(?:initialize\b)/),r={};if(Array.isArray(n)){var i=n.map((function(t){return t.args}));_n(i),r=Q(r,Xe(i))}else r=n.args;if(r){var a=qe(t,e);["config"].forEach((function(t){void 0!==r[t]&&("flowchart-v2"===a&&(a="flowchart"),r[a]=r[t],delete r[t])}))}return r},detectDirective:nn,isSubstringInArray:function(t,e){for(var n=0;n<e.length;n++)if(e[n].match(t))return n;return-1},interpolateToCurve:an,calcLabelPosition:function(t){return 1===t.length?t[0]:function(t){var e,n=0;t.forEach((function(t){n+=on(t,e),e=t}));var r=n/2,i=void 0;return e=void 0,t.forEach((function(t){if(e&&!i){var n=on(t,e);if(n<r)r-=n;else{var a=r/n;a<=0&&(i=e),a>=1&&(i={x:t.x,y:t.y}),a>0&&a<1&&(i={x:(1-a)*e.x+a*t.x,y:(1-a)*e.y+a*t.y})}}e=t})),i}(t)},calcCardinalityPosition:function(t,e,n){var r;o.info("our points",e),e[0]!==n&&(e=e.reverse()),e.forEach((function(t){on(t,r),r=t}));var i,a=25;r=void 0,e.forEach((function(t){if(r&&!i){var e=on(t,r);if(e<a)a-=e;else{var n=a/e;n<=0&&(i=r),n>=1&&(i={x:t.x,y:t.y}),n>0&&n<1&&(i={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));var s=t?10:5,c=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(c)*s+(e[0].x+i.x)/2,l.y=-Math.cos(c)*s+(e[0].y+i.y)/2,l},calcTerminalLabelPosition:function(t,e,n){var r,i=JSON.parse(JSON.stringify(n));o.info("our points",i),"start_left"!==e&&"start_right"!==e&&(i=i.reverse()),i.forEach((function(t){on(t,r),r=t}));var a,s=25+t;r=void 0,i.forEach((function(t){if(r&&!a){var e=on(t,r);if(e<s)s-=e;else{var n=s/e;n<=0&&(a=r),n>=1&&(a={x:t.x,y:t.y}),n>0&&n<1&&(a={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));var c=10+.5*t,l=Math.atan2(i[0].y-a.y,i[0].x-a.x),u={x:0,y:0};return u.x=Math.sin(l)*c+(i[0].x+a.x)/2,u.y=-Math.cos(l)*c+(i[0].y+a.y)/2,"start_left"===e&&(u.x=Math.sin(l+Math.PI)*c+(i[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*c+(i[0].y+a.y)/2),"end_right"===e&&(u.x=Math.sin(l-Math.PI)*c+(i[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*c+(i[0].y+a.y)/2-5),"end_left"===e&&(u.x=Math.sin(l)*c+(i[0].x+a.x)/2-5,u.y=-Math.cos(l)*c+(i[0].y+a.y)/2-5),u},formatUrl:function(t,e){var n=t.trim();if(n)return"loose"!==e.securityLevel?(0,Ie.N)(n):n},getStylesFromArray:sn,generateId:ln,random:un,memoize:rn,runFunc:function(t){for(var e,n=t.split("."),r=n.length-1,i=n[r],a=window,o=0;o<r;o++)if(!(a=a[n[o]]))return;for(var s=arguments.length,c=new Array(s>1?s-1:0),l=1;l<s;l++)c[l-1]=arguments[l];(e=a)[i].apply(e,c)},entityDecode:function(t){return Ke=Ke||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),Ke.innerHTML=t,unescape(Ke.textContent)},initIdGenerator:function(){function t(e,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.deterministic=e,this.seed=n,this.count=n?n.length:0}var e,n;return e=t,(n=[{key:"next",value:function(){return this.deterministic?this.count++:Date.now()}}])&&function(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),directiveSanitizer:_n,sanitizeCss:xn};function wn(t,e,n){if(void 0!==e.insert){var r=t.getAccTitle(),i=t.getAccDescription();e.attr("role","img").attr("aria-labelledby","chart-title-"+n+" chart-desc-"+n),e.insert("desc",":first-child").attr("id","chart-desc-"+n).text(i),e.insert("title",":first-child").attr("id","chart-title-"+n).text(r)}}function En(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function Tn(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Cn(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function Sn(t,e,n){return e&&Cn(t.prototype,e),n&&Cn(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}var An=0,Mn=0,On=4,Nn=2;ze.parser.yy=Le;var Dn={},Bn=function(){function t(e){Tn(this,t),this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,Ln(e.db.getConfig())}return Sn(t,[{key:"setData",value:function(t,e,n,r){this.nextData.startx=this.data.startx=t,this.nextData.stopx=this.data.stopx=e,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=r}},{key:"updateVal",value:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])}},{key:"insert",value:function(t){this.nextData.cnt=this.nextData.cnt+1;var e=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+t.margin:this.nextData.stopx+2*t.margin,n=e+t.width,r=this.nextData.starty+2*t.margin,i=r+t.height;(e>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>On)&&(e=this.nextData.startx+t.margin+Dn.nextLinePaddingX,r=this.nextData.stopy+2*t.margin,this.nextData.stopx=n=e+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=i=r+t.height,this.nextData.cnt=1),t.x=e,t.y=r,this.updateVal(this.data,"startx",e,Math.min),this.updateVal(this.data,"starty",r,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",i,Math.max),this.updateVal(this.nextData,"startx",e,Math.min),this.updateVal(this.nextData,"starty",r,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",i,Math.max)}},{key:"init",value:function(t){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},Ln(t.db.getConfig())}},{key:"bumpLastMargin",value:function(t){this.data.stopx+=t,this.data.stopy+=t}}]),t}(),Ln=function(t){Q(Dn,t),t.fontFamily&&(Dn.personFontFamily=Dn.systemFontFamily=Dn.messageFontFamily=t.fontFamily),t.fontSize&&(Dn.personFontSize=Dn.systemFontSize=Dn.messageFontSize=t.fontSize),t.fontWeight&&(Dn.personFontWeight=Dn.systemFontWeight=Dn.messageFontWeight=t.fontWeight)},In=function(t,e){return{fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}},Fn=function(t){return{fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}};function Rn(t,e,n,r,i){if(!e[t].width)if(n)e[t].text=dn(e[t].text,i,r),e[t].textLines=e[t].text.split(oe.lineBreakRegex).length,e[t].width=i,e[t].height=pn(e[t].text,r);else{var a=e[t].text.split(oe.lineBreakRegex);e[t].textLines=a.length;var o=0;e[t].height=0,e[t].width=0;for(var s=0;s<a.length;s++)e[t].width=Math.max(gn(a[s],r),e[t].width),o=pn(a[s],r),e[t].height=e[t].height+o}}var Pn=function(t,e,n){e.x=n.data.startx,e.y=n.data.starty,e.width=n.data.stopx-n.data.startx,e.height=n.data.stopy-n.data.starty,e.label.y=Dn.c4ShapeMargin-35;var r=e.wrap&&Dn.wrap,i=Fn(Dn);i.fontSize=i.fontSize+2,i.fontWeight="bold",Rn("label",e,r,i,gn(e.label.text,i)),function(t,e,n){var r=t.append("g"),i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",o=e.fontColor?e.fontColor:"black",s={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(s={"stroke-width":1});var c={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:s};Re(r,c);var l=n.boundaryFont();l.fontWeight="bold",l.fontSize=l.fontSize+2,l.fontColor=o,Pe(n)(e.label.text,r,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},l),e.type&&""!==e.type.text&&((l=n.boundaryFont()).fontColor=o,Pe(n)(e.type.text,r,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},l)),e.descr&&""!==e.descr.text&&((l=n.boundaryFont()).fontSize=l.fontSize-2,l.fontColor=o,Pe(n)(e.descr.text,r,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},l))}(t,e,Dn)},jn=function(t,e,n,r){for(var i=0,a=0;a<r.length;a++){i=0;var o=n[r[a]],s=In(Dn,o.typeC4Shape.text);switch(s.fontSize=s.fontSize-2,o.typeC4Shape.width=gn("<<"+o.typeC4Shape.text+">>",s),o.typeC4Shape.height=s.fontSize+2,o.typeC4Shape.Y=Dn.c4ShapePadding,i=o.typeC4Shape.Y+o.typeC4Shape.height-4,o.image={width:0,height:0,Y:0},o.typeC4Shape.text){case"person":case"external_person":o.image.width=48,o.image.height=48,o.image.Y=i,i=o.image.Y+o.image.height}o.sprite&&(o.image.width=48,o.image.height=48,o.image.Y=i,i=o.image.Y+o.image.height);var c=o.wrap&&Dn.wrap,l=Dn.width-2*Dn.c4ShapePadding,u=In(Dn,o.typeC4Shape.text);u.fontSize=u.fontSize+2,u.fontWeight="bold",Rn("label",o,c,u,l),o.label.Y=i+8,i=o.label.Y+o.label.height,o.type&&""!==o.type.text?(o.type.text="["+o.type.text+"]",Rn("type",o,c,In(Dn,o.typeC4Shape.text),l),o.type.Y=i+5,i=o.type.Y+o.type.height):o.techn&&""!==o.techn.text&&(o.techn.text="["+o.techn.text+"]",Rn("techn",o,c,In(Dn,o.techn.text),l),o.techn.Y=i+5,i=o.techn.Y+o.techn.height);var h=i,d=o.label.width;o.descr&&""!==o.descr.text&&(Rn("descr",o,c,In(Dn,o.typeC4Shape.text),l),o.descr.Y=i+20,i=o.descr.Y+o.descr.height,d=Math.max(o.label.width,o.descr.width),h=i-5*o.descr.textLines),d+=Dn.c4ShapePadding,o.width=Math.max(o.width||Dn.width,d,Dn.width),o.height=Math.max(o.height||Dn.height,h,Dn.height),o.margin=o.margin||Dn.c4ShapeMargin,t.insert(o),je(e,o,Dn)}t.bumpLastMargin(Dn.c4ShapeMargin)},zn=Sn((function t(e,n){Tn(this,t),this.x=e,this.y=n})),Yn=function(t,e){var n=t.x,r=t.y,i=e.x,a=e.y,o=n+t.width/2,s=r+t.height/2,c=Math.abs(n-i),l=Math.abs(r-a),u=l/c,h=t.height/t.width,d=null;return r==a&&n<i?d=new zn(n+t.width,s):r==a&&n>i?d=new zn(n,s):n==i&&r<a?d=new zn(o,r+t.height):n==i&&r>a&&(d=new zn(o,r)),n>i&&r<a?d=h>=u?new zn(n,s+u*t.width/2):new zn(o-c/l*t.height/2,r+t.height):n<i&&r<a?d=h>=u?new zn(n+t.width,s+u*t.width/2):new zn(o+c/l*t.height/2,r+t.height):n<i&&r>a?d=h>=u?new zn(n+t.width,s-u*t.width/2):new zn(o+t.height/2*c/l,r):n>i&&r>a&&(d=h>=u?new zn(n,s-t.width/2*u):new zn(o-t.height/2*c/l,r)),d},Un=function(t,e){var n={x:0,y:0};n.x=e.x+e.width/2,n.y=e.y+e.height/2;var r=Yn(t,n);return n.x=t.x+t.width/2,n.y=t.y+t.height/2,{startPoint:r,endPoint:Yn(e,n)}};function $n(t,e,n,r,i){var a=new Bn(i);a.data.widthLimit=n.data.widthLimit/Math.min(Nn,r.length);for(var o=0;o<r.length;o++){var s=r[o],c=0;s.image={width:0,height:0,Y:0},s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=c,c=s.image.Y+s.image.height);var l=s.wrap&&Dn.wrap,u=Fn(Dn);if(u.fontSize=u.fontSize+2,u.fontWeight="bold",Rn("label",s,l,u,a.data.widthLimit),s.label.Y=c+8,c=s.label.Y+s.label.height,s.type&&""!==s.type.text&&(s.type.text="["+s.type.text+"]",Rn("type",s,l,Fn(Dn),a.data.widthLimit),s.type.Y=c+5,c=s.type.Y+s.type.height),s.descr&&""!==s.descr.text){var h=Fn(Dn);h.fontSize=h.fontSize-2,Rn("descr",s,l,h,a.data.widthLimit),s.descr.Y=c+20,c=s.descr.Y+s.descr.height}if(0==o||o%Nn==0){var d=n.data.startx+Dn.diagramMarginX,f=n.data.stopy+Dn.diagramMarginY+c;a.setData(d,d,f,f)}else{var p=a.data.stopx!==a.data.startx?a.data.stopx+Dn.diagramMarginX:a.data.startx,g=a.data.starty;a.setData(p,p,g,g)}a.name=s.alias;var y=i.db.getC4ShapeArray(s.alias),m=i.db.getC4ShapeKeys(s.alias);m.length>0&&jn(a,t,y,m),e=s.alias;var b=i.db.getBoundarys(e);b.length>0&&$n(t,e,a,b,i),"global"!==s.alias&&Pn(t,s,a),n.data.stopy=Math.max(a.data.stopy+Dn.c4ShapeMargin,n.data.stopy),n.data.stopx=Math.max(a.data.stopx+Dn.c4ShapeMargin,n.data.stopx),An=Math.max(An,n.data.stopx),Mn=Math.max(Mn,n.data.stopy)}}const Wn={drawPersonOrSystemArray:jn,drawBoundary:Pn,setConf:Ln,draw:function(t,e,n,r){Dn=qt().c4;var i,a=qt().securityLevel;"sandbox"===a&&(i=(0,l.select)("#i"+e));var s="sandbox"===a?(0,l.select)(i.nodes()[0].contentDocument.body):(0,l.select)("body"),c=r.db;r.db.setWrap(Dn.wrap),On=c.getC4ShapeInRow(),Nn=c.getC4BoundaryInRow(),o.debug("C:".concat(JSON.stringify(Dn,null,2)));var u="sandbox"===a?s.select('[id="'.concat(e,'"]')):(0,l.select)('[id="'.concat(e,'"]'));u.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"),function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")}(u),function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")}(u);var h=new Bn(r);h.setData(Dn.diagramMarginX,Dn.diagramMarginX,Dn.diagramMarginY,Dn.diagramMarginY),h.data.widthLimit=screen.availWidth,An=Dn.diagramMarginX,Mn=Dn.diagramMarginY;var d=r.db.getTitle();r.db.getC4Type(),$n(u,"",h,r.db.getBoundarys(""),r),function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")}(u),function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")}(u),function(t){var e=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);e.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),e.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")}(u),function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")}(u),function(t,e,n,r){var i,a,o=0,s=function(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return En(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?En(t,e):void 0}}(t))){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}(e);try{for(s.s();!(i=s.n()).done;){var c=i.value;o+=1;var l=c.wrap&&Dn.wrap,u={fontFamily:(a=Dn).messageFontFamily,fontSize:a.messageFontSize,fontWeight:a.messageFontWeight};"C4Dynamic"===r.db.getC4Type()&&(c.label.text=o+": "+c.label.text);var h=gn(c.label.text,u);Rn("label",c,l,u,h),c.techn&&""!==c.techn.text&&Rn("techn",c,l,u,h=gn(c.techn.text,u)),c.descr&&""!==c.descr.text&&Rn("descr",c,l,u,h=gn(c.descr.text,u));var d=n(c.from),f=n(c.to),p=Un(d,f);c.startPoint=p.startPoint,c.endPoint=p.endPoint}}catch(t){s.e(t)}finally{s.f()}!function(t,e,n){var r,i=t.append("g"),a=0,o=function(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return Fe(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Fe(t,e):void 0}}(t))){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}(e);try{for(o.s();!(r=o.n()).done;){var s=r.value,c=s.textColor?s.textColor:"#444444",l=s.lineColor?s.lineColor:"#444444",u=s.offsetX?parseInt(s.offsetX):0,h=s.offsetY?parseInt(s.offsetY):0;if(0===a){var d=i.append("line");d.attr("x1",s.startPoint.x),d.attr("y1",s.startPoint.y),d.attr("x2",s.endPoint.x),d.attr("y2",s.endPoint.y),d.attr("stroke-width","1"),d.attr("stroke",l),d.style("fill","none"),"rel_b"!==s.type&&d.attr("marker-end","url(#arrowhead)"),"birel"!==s.type&&"rel_b"!==s.type||d.attr("marker-start","url(#arrowend)"),a=-1}else{var f=i.append("path");f.attr("fill","none").attr("stroke-width","1").attr("stroke",l).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",s.startPoint.x).replaceAll("starty",s.startPoint.y).replaceAll("controlx",s.startPoint.x+(s.endPoint.x-s.startPoint.x)/2-(s.endPoint.x-s.startPoint.x)/4).replaceAll("controly",s.startPoint.y+(s.endPoint.y-s.startPoint.y)/2).replaceAll("stopx",s.endPoint.x).replaceAll("stopy",s.endPoint.y)),"rel_b"!==s.type&&f.attr("marker-end","url(#arrowhead)"),"birel"!==s.type&&"rel_b"!==s.type||f.attr("marker-start","url(#arrowend)")}var p=n.messageFont();Pe(n)(s.label.text,i,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+u,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+h,s.label.width,s.label.height,{fill:c},p),s.techn&&""!==s.techn.text&&(p=n.messageFont(),Pe(n)("["+s.techn.text+"]",i,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+u,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+n.messageFontSize+5+h,Math.max(s.label.width,s.techn.width),s.techn.height,{fill:c,"font-style":"italic"},p))}}catch(t){o.e(t)}finally{o.f()}}(t,e,Dn)}(u,r.db.getRels(),r.db.getC4Shape,r),h.data.stopx=An,h.data.stopy=Mn;var f=h.data,p=f.stopy-f.starty+2*Dn.diagramMarginY,g=f.stopx-f.startx+2*Dn.diagramMarginX;d&&u.append("text").text(d).attr("x",(f.stopx-f.startx)/2-4*Dn.diagramMarginX).attr("y",f.starty+Dn.diagramMarginY),bn(u,0,g,Dn.useMaxWidth);var y=d?60:0;u.attr("viewBox",f.startx-Dn.diagramMarginX+" -"+(Dn.diagramMarginY+y)+" "+g+" "+(p+y)),wn(ze.parser.yy,u,e),o.debug("models:",f)}};function qn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var Hn="classid-",Vn=[],Gn={},Xn=0,Zn=[],Qn=function(t){return oe.sanitizeText(t,qt())},Kn=function(t){var e="",n=t;if(t.indexOf("~")>0){var r=t.split("~");n=r[0],e=oe.sanitizeText(r[1],qt())}return{className:n,type:e}},Jn=function(t){var e=Kn(t);void 0===Gn[e.className]&&(Gn[e.className]={id:e.className,type:e.type,cssClasses:[],methods:[],members:[],annotations:[],domId:Hn+e.className+"-"+Xn},Xn++)},tr=function(t){for(var e=Object.keys(Gn),n=0;n<e.length;n++)if(Gn[e[n]].id===t)return Gn[e[n]].domId},er=function(t,e){var n=Kn(t).className,r=Gn[n];if("string"==typeof e){var i=e.trim();i.startsWith("<<")&&i.endsWith(">>")?r.annotations.push(Qn(i.substring(2,i.length-2))):i.indexOf(")")>0?r.methods.push(Qn(i)):i&&r.members.push(Qn(i))}},nr=function(t,e){t.split(",").forEach((function(t){var n=t;t[0].match(/\d/)&&(n=Hn+n),void 0!==Gn[n]&&Gn[n].cssClasses.push(e)}))},rr=function(t){var e=(0,l.select)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,l.select)("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),(0,l.select)(t).select("svg").selectAll("g.node").on("mouseover",(function(){var t=(0,l.select)(this);if(null!==t.attr("title")){var n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)}})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0),(0,l.select)(this).classed("hover",!1)}))};Zn.push(rr);var ir="TB";const ar={parseDirective:function(t,e,n){Nl.parseDirective(this,t,e,n)},setAccTitle:de,getAccTitle:fe,getAccDescription:ge,setAccDescription:pe,getConfig:function(){return qt().class},addClass:Jn,bindFunctions:function(t){Zn.forEach((function(e){e(t)}))},clear:function(){Vn=[],Gn={},(Zn=[]).push(rr),he()},getClass:function(t){return Gn[t]},getClasses:function(){return Gn},addAnnotation:function(t,e){var n=Kn(t).className;Gn[n].annotations.push(e)},getRelations:function(){return Vn},addRelation:function(t){o.debug("Adding relation: "+JSON.stringify(t)),Jn(t.id1),Jn(t.id2),t.id1=Kn(t.id1).className,t.id2=Kn(t.id2).className,t.relationTitle1=oe.sanitizeText(t.relationTitle1.trim(),qt()),t.relationTitle2=oe.sanitizeText(t.relationTitle2.trim(),qt()),Vn.push(t)},getDirection:function(){return ir},setDirection:function(t){ir=t},addMember:er,addMembers:function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach((function(e){return er(t,e)})))},cleanupLabel:function(t){return":"===t.substring(0,1)?oe.sanitizeText(t.substr(1).trim(),qt()):Qn(t.trim())},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){(function(t,e,n){var r=qt(),i=t,a=tr(i);if("loose"===r.securityLevel&&void 0!==e&&void 0!==Gn[i]){var o=[];if("string"==typeof n){o=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var s=0;s<o.length;s++){var c=o[s].trim();'"'===c.charAt(0)&&'"'===c.charAt(c.length-1)&&(c=c.substr(1,c.length-2)),o[s]=c}}0===o.length&&o.push(a),Zn.push((function(){var t=document.querySelector('[id="'.concat(a,'"]'));null!==t&&t.addEventListener("click",(function(){var t;kn.runFunc.apply(kn,[e].concat(function(t){if(Array.isArray(t))return qn(t)}(t=o)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return qn(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?qn(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))}),!1)}))}})(t,e,n),Gn[t].haveCallback=!0})),nr(t,"clickable")},setCssClass:nr,setLink:function(t,e,n){var r=qt();t.split(",").forEach((function(t){var i=t;t[0].match(/\d/)&&(i=Hn+i),void 0!==Gn[i]&&(Gn[i].link=kn.formatUrl(e,r),"sandbox"===r.securityLevel?Gn[i].linkTarget="_top":Gn[i].linkTarget="string"==typeof n?Qn(n):"_blank")})),nr(t,"clickable")},getTooltip:function(t){return Gn[t].tooltip},setTooltip:function(t,e){var n=qt();t.split(",").forEach((function(t){void 0!==e&&(Gn[t].tooltip=oe.sanitizeText(e,n))}))},lookUpDomId:tr};var or=n(681),sr=n.n(or),cr=n(8282),lr=n.n(cr),ur=0,hr=function(t){var e=t.match(/^(\+|-|~|#)?(\w+)(~\w+~|\[\])?\s+(\w+) *(\*|\$)?$/),n=t.match(/^([+|\-|~|#])?(\w+) *\( *(.*)\) *(\*|\$)? *(\w*[~|[\]]*\s*\w*~?)$/);return e&&!n?dr(e):n?fr(n):pr(t)},dr=function(t){var e="",n="";try{var r=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",a=t[3]?ae(t[3].trim()):"",o=t[4]?t[4].trim():"",s=t[5]?t[5].trim():"";n=r+i+a+" "+o,e=yr(s)}catch(e){n=t}return{displayText:n,cssStyle:e}},fr=function(t){var e="",n="";try{var r=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",a=t[3]?ae(t[3].trim()):"",o=t[4]?t[4].trim():"";n=r+i+"("+a+")"+(t[5]?" : "+ae(t[5]).trim():""),e=yr(o)}catch(e){n=t}return{displayText:n,cssStyle:e}},pr=function(t){var e="",n="",r="",i=t.indexOf("("),a=t.indexOf(")");if(i>1&&a>i&&a<=t.length){var o="",s="",c=t.substring(0,1);c.match(/\w/)?s=t.substring(0,i).trim():(c.match(/\+|-|~|#/)&&(o=c),s=t.substring(1,i).trim());var l=t.substring(i+1,a),u=t.substring(a+1,1);n=yr(u),e=o+s+"("+ae(l.trim())+")",a<"".length&&""!==(r=t.substring(a+2).trim())&&(r=" : "+ae(r))}else e=ae(t);return{displayText:e,cssStyle:n}},gr=function(t,e,n,r){var i=hr(e),a=t.append("tspan").attr("x",r.padding).text(i.displayText);""!==i.cssStyle&&a.attr("style",i.cssStyle),n||a.attr("dy",r.textHeight)},yr=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}};const mr=function(t,e,n,r){o.debug("Rendering class ",e,n);var i,a=e.id,s={id:a,label:e.id,width:0,height:0},c=t.append("g").attr("id",r.db.lookUpDomId(a)).attr("class","classGroup");i=e.link?c.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",n.textHeight+n.padding).attr("x",0):c.append("text").attr("y",n.textHeight+n.padding).attr("x",0);var l=!0;e.annotations.forEach((function(t){var e=i.append("tspan").text("\xab"+t+"\xbb");l||e.attr("dy",n.textHeight),l=!1}));var u=e.id;void 0!==e.type&&""!==e.type&&(u+="<"+e.type+">");var h=i.append("tspan").text(u).attr("class","title");l||h.attr("dy",n.textHeight);var d=i.node().getBBox().height,f=c.append("line").attr("x1",0).attr("y1",n.padding+d+n.dividerMargin/2).attr("y2",n.padding+d+n.dividerMargin/2),p=c.append("text").attr("x",n.padding).attr("y",d+n.dividerMargin+n.textHeight).attr("fill","white").attr("class","classText");l=!0,e.members.forEach((function(t){gr(p,t,l,n),l=!1}));var g=p.node().getBBox(),y=c.append("line").attr("x1",0).attr("y1",n.padding+d+n.dividerMargin+g.height).attr("y2",n.padding+d+n.dividerMargin+g.height),m=c.append("text").attr("x",n.padding).attr("y",d+2*n.dividerMargin+g.height+n.textHeight).attr("fill","white").attr("class","classText");l=!0,e.methods.forEach((function(t){gr(m,t,l,n),l=!1}));var b=c.node().getBBox(),v=" ";e.cssClasses.length>0&&(v+=e.cssClasses.join(" "));var _=c.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",b.width+2*n.padding).attr("height",b.height+n.padding+.5*n.dividerMargin).attr("class",v).node().getBBox().width;return i.node().childNodes.forEach((function(t){t.setAttribute("x",(_-t.getBBox().width)/2)})),e.tooltip&&i.insert("title").text(e.tooltip),f.attr("x2",_),y.attr("x2",_),s.width=_,s.height=b.height+n.padding+.5*n.dividerMargin,s};var br={},vr=function(t){var e=Object.entries(br).find((function(e){return e[1].label===t}));if(e)return e[0]};const _r={draw:function(t,e,n,r){var i=qt().class;br={},o.info("Rendering diagram "+t);var a,s=qt().securityLevel;"sandbox"===s&&(a=(0,l.select)("#i"+e));var c,u="sandbox"===s?(0,l.select)(a.nodes()[0].contentDocument.body):(0,l.select)("body"),h=("sandbox"===s?a.nodes()[0].contentDocument:document,u.select("[id='".concat(e,"']")));(c=h).append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),c.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),c.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),c.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),c.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),c.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),c.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),c.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z");var d=new(lr().Graph)({multigraph:!0});d.setGraph({isMultiGraph:!0}),d.setDefaultEdgeLabel((function(){return{}}));for(var f=r.db.getClasses(),p=Object.keys(f),g=0;g<p.length;g++){var y=f[p[g]],m=mr(h,y,i,r);br[m.id]=m,d.setNode(m.id,m),o.info("Org height: "+m.height)}r.db.getRelations().forEach((function(t){o.info("tjoho"+vr(t.id1)+vr(t.id2)+JSON.stringify(t)),d.setEdge(vr(t.id1),vr(t.id2),{relation:t},t.title||"DEFAULT")})),sr().layout(d),d.nodes().forEach((function(t){void 0!==t&&void 0!==d.node(t)&&(o.debug("Node "+t+": "+JSON.stringify(d.node(t))),u.select("#"+r.db.lookUpDomId(t)).attr("transform","translate("+(d.node(t).x-d.node(t).width/2)+","+(d.node(t).y-d.node(t).height/2)+" )"))})),d.edges().forEach((function(t){void 0!==t&&void 0!==d.edge(t)&&(o.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(d.edge(t))),function(t,e,n,r,i){var a=function(t){switch(t){case i.db.relationType.AGGREGATION:return"aggregation";case i.db.EXTENSION:return"extension";case i.db.COMPOSITION:return"composition";case i.db.DEPENDENCY:return"dependency";case i.db.LOLLIPOP:return"lollipop"}};e.points=e.points.filter((function(t){return!Number.isNaN(t.y)}));var s,c,u=e.points,h=(0,l.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(l.curveBasis),d=t.append("path").attr("d",h(u)).attr("id","edge"+ur).attr("class","relation"),f="";r.arrowMarkerAbsolute&&(f=(f=(f=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),1==n.relation.lineType&&d.attr("class","relation dashed-line"),"none"!==n.relation.type1&&d.attr("marker-start","url("+f+"#"+a(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&d.attr("marker-end","url("+f+"#"+a(n.relation.type2)+"End)");var p,g,y,m,b=e.points.length,v=kn.calcLabelPosition(e.points);if(s=v.x,c=v.y,b%2!=0&&b>1){var _=kn.calcCardinalityPosition("none"!==n.relation.type1,e.points,e.points[0]),x=kn.calcCardinalityPosition("none"!==n.relation.type2,e.points,e.points[b-1]);o.debug("cardinality_1_point "+JSON.stringify(_)),o.debug("cardinality_2_point "+JSON.stringify(x)),p=_.x,g=_.y,y=x.x,m=x.y}if(void 0!==n.title){var k=t.append("g").attr("class","classLabel"),w=k.append("text").attr("class","label").attr("x",s).attr("y",c).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=w;var E=w.node().getBBox();k.insert("rect",":first-child").attr("class","box").attr("x",E.x-r.padding/2).attr("y",E.y-r.padding/2).attr("width",E.width+r.padding).attr("height",E.height+r.padding)}o.info("Rendering relation "+JSON.stringify(n)),void 0!==n.relationTitle1&&"none"!==n.relationTitle1&&t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",p).attr("y",g).attr("fill","black").attr("font-size","6").text(n.relationTitle1),void 0!==n.relationTitle2&&"none"!==n.relationTitle2&&t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",y).attr("y",m).attr("fill","black").attr("font-size","6").text(n.relationTitle2),ur++}(h,d.edge(t),d.edge(t).relation,i,r))}));var b=h.node().getBBox(),v=b.width+40,_=b.height+40;bn(h,0,v,i.useMaxWidth);var x="".concat(b.x-20," ").concat(b.y-20," ").concat(v," ").concat(_);o.debug("viewBox ".concat(x)),h.attr("viewBox",x),wn(r.db,h,e)}};var xr={extension:function(t,e,n){o.trace("Making markers for ",n),t.append("defs").append("marker").attr("id",e+"-extensionStart").attr("class","marker extension "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:function(t,e){t.append("defs").append("marker").attr("id",e+"-compositionStart").attr("class","marker composition "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:function(t,e){t.append("defs").append("marker").attr("id",e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:function(t,e){t.append("defs").append("marker").attr("id",e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:function(t,e,n){t.append("defs").append("marker").attr("id",e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","white").attr("cx",6).attr("cy",7).attr("r",6)},point:function(t,e){t.append("marker").attr("id",e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:function(t,e){t.append("marker").attr("id",e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:function(t,e){t.append("marker").attr("id",e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:function(t,e){t.append("defs").append("marker").attr("id",e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}};function kr(t){return kr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},kr(t)}const wr=function(t,e,n,r){var i=t||"";if("object"===kr(i)&&(i=i[0]),ie(qt().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"<br />"),o.info("vertexText"+i);var a=function(t){var e,n=(0,l.select)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=n.append("xhtml:div"),i=t.label,a=t.isNode?"nodeLabel":"edgeLabel";return r.html('<span class="'+a+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+i+"</span>"),(e=t.labelStyle)&&r.attr("style",e),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),n.node()}({isNode:r,label:Sl(i).replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"<i class='".concat(t.replace(":"," "),"'></i>")})),labelStyle:e.replace("fill:","color:")});return a}var s=document.createElementNS("http://www.w3.org/2000/svg","text");s.setAttribute("style",e.replace("color:","fill:"));var c=[];c="string"==typeof i?i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?i:[];for(var u=0;u<c.length;u++){var h=document.createElementNS("http://www.w3.org/2000/svg","tspan");h.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),h.setAttribute("dy","1em"),h.setAttribute("x","0"),n?h.setAttribute("class","title-row"):h.setAttribute("class","row"),h.textContent=c[u].trim(),s.appendChild(h)}return s};var Er=function(t,e,n,r){var i;i=n||"node default";var a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),o=a.insert("g").attr("class","label").attr("style",e.labelStyle),s="string"==typeof e.labelText?e.labelText:e.labelText[0],c=o.node().appendChild(wr(te(Sl(s),qt()),e.labelStyle,!1,r)),u=c.getBBox();if(ie(qt().flowchart.htmlLabels)){var h=c.children[0],d=(0,l.select)(c);u=h.getBoundingClientRect(),d.attr("width",u.width),d.attr("height",u.height)}var f=e.padding/2;return o.attr("transform","translate("+-u.width/2+", "+-u.height/2+")"),{shapeSvg:a,bbox:u,halfPadding:f,label:o}},Tr=function(t,e){var n=e.node().getBBox();t.width=n.width,t.height=n.height};function Cr(t,e,n,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+n/2+")")}var Sr={},Ar={},Mr={},Or=function(t,e){return o.trace("In isDecendant",e," ",t," = ",Ar[e].indexOf(t)>=0),Ar[e].indexOf(t)>=0},Nr=function t(e,n,r,i){o.warn("Copying children of ",e,"root",i,"data",n.node(e),i);var a=n.children(e)||[];e!==i&&a.push(e),o.warn("Copying (nodes) clusterId",e,"nodes",a),a.forEach((function(a){if(n.children(a).length>0)t(a,n,r,i);else{var s=n.node(a);o.info("cp ",a," to ",i," with parent ",e),r.setNode(a,s),i!==n.parent(a)&&(o.warn("Setting parent",a,n.parent(a)),r.setParent(a,n.parent(a))),e!==i&&a!==e?(o.debug("Setting parent",a,e),r.setParent(a,e)):(o.info("In copy ",e,"root",i,"data",n.node(e),i),o.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==i,"node!==clusterId",a!==e));var c=n.edges(a);o.debug("Copying Edges",c),c.forEach((function(t){o.info("Edge",t);var a=n.edge(t.v,t.w,t.name);o.info("Edge data",a,i);try{!function(t,e){return o.info("Decendants of ",e," is ",Ar[e]),o.info("Edge is ",t),t.v!==e&&t.w!==e&&(Ar[e]?(o.info("Here "),Ar[e].indexOf(t.v)>=0||!!Or(t.v,e)||!!Or(t.w,e)||Ar[e].indexOf(t.w)>=0):(o.debug("Tilt, ",e,",not in decendants"),!1))}(t,i)?o.info("Skipping copy of edge ",t.v,"--\x3e",t.w," rootId: ",i," clusterId:",e):(o.info("Copying as ",t.v,t.w,a,t.name),r.setEdge(t.v,t.w,a,t.name),o.info("newGraph edges ",r.edges(),r.edge(r.edges()[0])))}catch(t){o.error(t)}}))}o.debug("Removing node",a),n.removeNode(a)}))},Dr=function t(e,n){for(var r=n.children(e),i=[].concat(r),a=0;a<r.length;a++)Mr[r[a]]=e,i=i.concat(t(r[a],n));return i},Br=function t(e,n){o.trace("Searching",e);var r=n.children(e);if(o.trace("Searching children of id ",e,r),r.length<1)return o.trace("This is a valid node",e),e;for(var i=0;i<r.length;i++){var a=t(r[i],n);if(a)return o.trace("Found replacement for",e," => ",a),a}},Lr=function(t){return Sr[t]&&Sr[t].externalConnections&&Sr[t]?Sr[t].id:t},Ir=function(t,e){!t||e>10?o.debug("Opting out, no graph "):(o.debug("Opting in, graph "),t.nodes().forEach((function(e){t.children(e).length>0&&(o.warn("Cluster identified",e," Replacement id in edges: ",Br(e,t)),Ar[e]=Dr(e,t),Sr[e]={id:Br(e,t),clusterData:t.node(e)})})),t.nodes().forEach((function(e){var n=t.children(e),r=t.edges();n.length>0?(o.debug("Cluster identified",e,Ar),r.forEach((function(t){t.v!==e&&t.w!==e&&Or(t.v,e)^Or(t.w,e)&&(o.warn("Edge: ",t," leaves cluster ",e),o.warn("Decendants of XXX ",e,": ",Ar[e]),Sr[e].externalConnections=!0)}))):o.debug("Not a cluster ",e,Ar)})),t.edges().forEach((function(e){var n=t.edge(e);o.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),o.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(t.edge(e)));var r=e.v,i=e.w;if(o.warn("Fix XXX",Sr,"ids:",e.v,e.w,"Translateing: ",Sr[e.v]," --- ",Sr[e.w]),Sr[e.v]&&Sr[e.w]&&Sr[e.v]===Sr[e.w]){o.warn("Fixing and trixing link to self - removing XXX",e.v,e.w,e.name),o.warn("Fixing and trixing - removing XXX",e.v,e.w,e.name),r=Lr(e.v),i=Lr(e.w),t.removeEdge(e.v,e.w,e.name);var a=e.w+"---"+e.v;t.setNode(a,{domId:a,id:a,labelStyle:"",labelText:n.label,padding:0,shape:"labelRect",style:""});var s=JSON.parse(JSON.stringify(n)),c=JSON.parse(JSON.stringify(n));s.label="",s.arrowTypeEnd="none",c.label="",s.fromCluster=e.v,c.toCluster=e.v,t.setEdge(r,a,s,e.name+"-cyclic-special"),t.setEdge(a,i,c,e.name+"-cyclic-special")}else(Sr[e.v]||Sr[e.w])&&(o.warn("Fixing and trixing - removing XXX",e.v,e.w,e.name),r=Lr(e.v),i=Lr(e.w),t.removeEdge(e.v,e.w,e.name),r!==e.v&&(n.fromCluster=e.v),i!==e.w&&(n.toCluster=e.w),o.warn("Fix Replacing with XXX",r,i,e.name),t.setEdge(r,i,n,e.name))})),o.warn("Adjusted Graph",lr().json.write(t)),Fr(t,0),o.trace(Sr))},Fr=function t(e,n){if(o.warn("extractor - ",n,lr().json.write(e),e.children("D")),n>10)o.error("Bailing out");else{for(var r=e.nodes(),i=!1,a=0;a<r.length;a++){var s=r[a],c=e.children(s);i=i||c.length>0}if(i){o.debug("Nodes = ",r,n);for(var l=0;l<r.length;l++){var u=r[l];if(o.debug("Extracting node",u,Sr,Sr[u]&&!Sr[u].externalConnections,!e.parent(u),e.node(u),e.children("D")," Depth ",n),Sr[u])if(!Sr[u].externalConnections&&e.children(u)&&e.children(u).length>0){o.warn("Cluster without external connections, without a parent and with children",u,n);var h="TB"===e.graph().rankdir?"LR":"TB";Sr[u]&&Sr[u].clusterData&&Sr[u].clusterData.dir&&(h=Sr[u].clusterData.dir,o.warn("Fixing dir",Sr[u].clusterData.dir,h));var d=new(lr().Graph)({multigraph:!0,compound:!0}).setGraph({rankdir:h,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));o.warn("Old graph before copy",lr().json.write(e)),Nr(u,e,d,u),e.setNode(u,{clusterNode:!0,id:u,clusterData:Sr[u].clusterData,labelText:Sr[u].labelText,graph:d}),o.warn("New graph after copy node: (",u,")",lr().json.write(d)),o.debug("Old graph after copy",lr().json.write(e))}else o.warn("Cluster ** ",u," **not meeting the criteria !externalConnections:",!Sr[u].externalConnections," no parent: ",!e.parent(u)," children ",e.children(u)&&e.children(u).length>0,e.children("D"),n),o.debug(Sr);else o.debug("Not a cluster",u,n)}r=e.nodes(),o.warn("New list of nodes",r);for(var f=0;f<r.length;f++){var p=r[f],g=e.node(p);o.warn(" Now next level",p,g),g.clusterNode&&t(g.graph,n+1)}}else o.debug("Done, no node has children",e.nodes())}},Rr=function t(e,n){if(0===n.length)return[];var r=Object.assign(n);return n.forEach((function(n){var i=e.children(n),a=t(e,i);r=r.concat(a)})),r},Pr=function(t){return Rr(t,t.children())},jr=n(3841);function zr(t,e){return t*e>0}const Yr=function(t,e,n,r){var i,a,o,s,c,l,u,h,d,f,p,g,y;if(i=e.y-t.y,o=t.x-e.x,c=e.x*t.y-t.x*e.y,d=i*n.x+o*n.y+c,f=i*r.x+o*r.y+c,!(0!==d&&0!==f&&zr(d,f)||(a=r.y-n.y,s=n.x-r.x,l=r.x*n.y-n.x*r.y,u=a*t.x+s*t.y+l,h=a*e.x+s*e.y+l,0!==u&&0!==h&&zr(u,h)||0==(p=i*s-a*o))))return g=Math.abs(p/2),{x:(y=o*l-s*c)<0?(y-g)/p:(y+g)/p,y:(y=a*c-i*l)<0?(y-g)/p:(y+g)/p}},Ur=function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,l=t.height/2;return Math.abs(s)*c>Math.abs(o)*l?(s<0&&(l=-l),n=0===s?0:l*o/s,r=l):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o),{x:i+n,y:a+r}},$r=(n.n(jr)(),function(t,e,n){return function(t,e,n,r){var i=t.x,a=t.y,o=i-r.x,s=a-r.y,c=Math.sqrt(e*e*s*s+n*n*o*o),l=Math.abs(e*n*o/c);r.x<i&&(l=-l);var u=Math.abs(e*n*s/c);return r.y<a&&(u=-u),{x:i+l,y:a+u}}(t,e,e,n)}),Wr=function(t,e,n){var r=t.x,i=t.y,a=[],o=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){o=Math.min(o,t.x),s=Math.min(s,t.y)})):(o=Math.min(o,e.x),s=Math.min(s,e.y));for(var c=r-t.width/2-o,l=i-t.height/2-s,u=0;u<e.length;u++){var h=e[u],d=e[u<e.length-1?u+1:0],f=Yr(t,n,{x:c+h.x,y:l+h.y},{x:c+d.x,y:l+d.y});f&&a.push(f)}return a.length?(a.length>1&&a.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return a<c?-1:a===c?0:1})),a[0]):t},qr=Ur;function Hr(t){return Hr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Hr(t)}function Vr(t,e,n,r){var i=[],a=function(t){i.push(t),i.push(0)},s=function(t){i.push(0),i.push(t)};e.includes("t")?(o.debug("add top border"),a(n)):s(n),e.includes("r")?(o.debug("add right border"),a(r)):s(r),e.includes("b")?(o.debug("add bottom border"),a(n)):s(n),e.includes("l")?(o.debug("add left border"),a(r)):s(r),t.attr("stroke-dasharray",i.join(" "))}var Gr=function(t,e,n){var r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;"LR"===n&&(i=10,a=70);var o=r.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return Tr(e,o),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return qr(e,t)},r},Xr={question:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding+(i.height+e.padding),s=[{x:a/2,y:0},{x:a,y:-a/2},{x:a/2,y:-a},{x:0,y:-a/2}];o.info("Question main (Circle)");var c=Cr(r,a,a,s);return c.attr("style",e.style),Tr(e,c),e.intersect=function(t){return o.warn("Intersect called"),Wr(e,s,t)},r},rect:function(t,e){var n=Er(t,e,"node "+e.classes,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding;o.trace("Classes = ",e.classes);var s=r.insert("rect",":first-child"),c=i.width+e.padding,l=i.height+e.padding;if(s.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",c).attr("height",l),e.props){var u=new Set(Object.keys(e.props));e.props.borders&&(Vr(s,e.props.borders,c,l),u.delete("borders")),u.forEach((function(t){o.warn("Unknown node property ".concat(t))}))}return Tr(e,s),e.intersect=function(t){return qr(e,t)},r},labelRect:function(t,e){var n=Er(t,e,"label",!0),r=n.shapeSvg;n.bbox,n.halfPadding,o.trace("Classes = ",e.classes);var i=r.insert("rect",":first-child");if(i.attr("width",0).attr("height",0),r.attr("class","label edgeLabel"),e.props){var a=new Set(Object.keys(e.props));e.props.borders&&(Vr(i,e.props.borders,0,0),a.delete("borders")),a.forEach((function(t){o.warn("Unknown node property ".concat(t))}))}return Tr(e,i),e.intersect=function(t){return qr(e,t)},r},rectWithTitle:function(t,e){var n;n=e.classes?"node "+e.classes:"node default";var r,i=t.insert("g").attr("class",n).attr("id",e.domId||e.id),a=i.insert("rect",":first-child"),s=i.insert("line"),c=i.insert("g").attr("class","label"),u=e.labelText.flat?e.labelText.flat():e.labelText;r="object"===Hr(u)?u[0]:u,o.info("Label text abc79",r,u,"object"===Hr(u));var h=c.node().appendChild(wr(r,e.labelStyle,!0,!0)),d={width:0,height:0};if(ie(qt().flowchart.htmlLabels)){var f=h.children[0],p=(0,l.select)(h);d=f.getBoundingClientRect(),p.attr("width",d.width),p.attr("height",d.height)}o.info("Text 2",u);var g=u.slice(1,u.length),y=h.getBBox(),m=c.node().appendChild(wr(g.join?g.join("<br/>"):g,e.labelStyle,!0,!0));if(ie(qt().flowchart.htmlLabels)){var b=m.children[0],v=(0,l.select)(m);d=b.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height)}var _=e.padding/2;return(0,l.select)(m).attr("transform","translate( "+(d.width>y.width?0:(y.width-d.width)/2)+", "+(y.height+_+5)+")"),(0,l.select)(h).attr("transform","translate( "+(d.width<y.width?0:-(y.width-d.width)/2)+", 0)"),d=c.node().getBBox(),c.attr("transform","translate("+-d.width/2+", "+(-d.height/2-_+3)+")"),a.attr("class","outer title-state").attr("x",-d.width/2-_).attr("y",-d.height/2-_).attr("width",d.width+e.padding).attr("height",d.height+e.padding),s.attr("class","divider").attr("x1",-d.width/2-_).attr("x2",d.width/2+_).attr("y1",-d.height/2-_+y.height+_).attr("y2",-d.height/2-_+y.height+_),Tr(e,a),e.intersect=function(t){return qr(e,t)},i},choice:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);return n.insert("polygon",":first-child").attr("points",[{x:0,y:14},{x:14,y:0},{x:0,y:-14},{x:-14,y:0}].map((function(t){return t.x+","+t.y})).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(t){return $r(e,14,t)},n},circle:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding,s=r.insert("circle",":first-child");return s.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),o.info("Circle main"),Tr(e,s),e.intersect=function(t){return o.info("Circle intersect",e,i.width/2+a,t),$r(e,i.width/2+a,t)},r},doublecircle:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding,s=r.insert("g",":first-child"),c=s.insert("circle"),l=s.insert("circle");return c.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+a+5).attr("width",i.width+e.padding+10).attr("height",i.height+e.padding+10),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),o.info("DoubleCircle main"),Tr(e,c),e.intersect=function(t){return o.info("DoubleCircle intersect",e,i.width/2+a+5,t),$r(e,i.width/2+a+5,t)},r},stadium:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.height+e.padding,o=i.width+a/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",a/2).attr("ry",a/2).attr("x",-o/2).attr("y",-a/2).attr("width",o).attr("height",a);return Tr(e,s),e.intersect=function(t){return qr(e,t)},r},hexagon:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.height+e.padding,o=a/4,s=i.width+2*o+e.padding,c=[{x:o,y:0},{x:s-o,y:0},{x:s,y:-a/2},{x:s-o,y:-a},{x:o,y:-a},{x:0,y:-a/2}],l=Cr(r,s,a,c);return l.attr("style",e.style),Tr(e,l),e.intersect=function(t){return Wr(e,c,t)},r},rect_left_inv_arrow:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:-o/2,y:0},{x:a,y:0},{x:a,y:-o},{x:-o/2,y:-o},{x:0,y:-o/2}];return Cr(r,a,o,s).attr("style",e.style),e.width=a+o,e.height=o,e.intersect=function(t){return Wr(e,s,t)},r},lean_right:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:-2*o/6,y:0},{x:a-o/6,y:0},{x:a+2*o/6,y:-o},{x:o/6,y:-o}],c=Cr(r,a,o,s);return c.attr("style",e.style),Tr(e,c),e.intersect=function(t){return Wr(e,s,t)},r},lean_left:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:2*o/6,y:0},{x:a+o/6,y:0},{x:a-2*o/6,y:-o},{x:-o/6,y:-o}],c=Cr(r,a,o,s);return c.attr("style",e.style),Tr(e,c),e.intersect=function(t){return Wr(e,s,t)},r},trapezoid:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:-2*o/6,y:0},{x:a+2*o/6,y:0},{x:a-o/6,y:-o},{x:o/6,y:-o}],c=Cr(r,a,o,s);return c.attr("style",e.style),Tr(e,c),e.intersect=function(t){return Wr(e,s,t)},r},inv_trapezoid:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:o/6,y:0},{x:a-o/6,y:0},{x:a+2*o/6,y:-o},{x:-2*o/6,y:-o}],c=Cr(r,a,o,s);return c.attr("style",e.style),Tr(e,c),e.intersect=function(t){return Wr(e,s,t)},r},rect_right_inv_arrow:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:0,y:0},{x:a+o/2,y:0},{x:a,y:-o/2},{x:a+o/2,y:-o},{x:0,y:-o}],c=Cr(r,a,o,s);return c.attr("style",e.style),Tr(e,c),e.intersect=function(t){return Wr(e,s,t)},r},cylinder:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=a/2,s=o/(2.5+a/50),c=i.height+s+e.padding,l="M 0,"+s+" a "+o+","+s+" 0,0,0 "+a+" 0 a "+o+","+s+" 0,0,0 "+-a+" 0 l 0,"+c+" a "+o+","+s+" 0,0,0 "+a+" 0 l 0,"+-c,u=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",l).attr("transform","translate("+-a/2+","+-(c/2+s)+")");return Tr(e,u),e.intersect=function(t){var n=qr(e,t),r=n.x-e.x;if(0!=o&&(Math.abs(r)<e.width/2||Math.abs(r)==e.width/2&&Math.abs(n.y-e.y)>e.height/2-s)){var i=s*s*(1-r*r/(o*o));0!=i&&(i=Math.sqrt(i)),i=s-i,t.y-e.y>0&&(i=-i),n.y+=i}return n},r},start:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Tr(e,r),e.intersect=function(t){return $r(e,7,t)},n},end:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child"),i=n.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Tr(e,i),e.intersect=function(t){return $r(e,7,t)},n},note:function(t,e){var n=Er(t,e,"node "+e.classes,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding;o.info("Classes = ",e.classes);var s=r.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Tr(e,s),e.intersect=function(t){return qr(e,t)},r},subroutine:function(t,e){var n=Er(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:0,y:0},{x:a,y:0},{x:a,y:-o},{x:0,y:-o},{x:0,y:0},{x:-8,y:0},{x:a+8,y:0},{x:a+8,y:-o},{x:-8,y:-o},{x:-8,y:0}],c=Cr(r,a,o,s);return c.attr("style",e.style),Tr(e,c),e.intersect=function(t){return Wr(e,s,t)},r},fork:Gr,join:Gr,class_box:function(t,e){var n,r=e.padding/2;n=e.classes?"node "+e.classes:"node default";var i=t.insert("g").attr("class",n).attr("id",e.domId||e.id),a=i.insert("rect",":first-child"),o=i.insert("line"),s=i.insert("line"),c=0,u=4,h=i.insert("g").attr("class","label"),d=0,f=e.classData.annotations&&e.classData.annotations[0],p=e.classData.annotations[0]?"\xab"+e.classData.annotations[0]+"\xbb":"",g=h.node().appendChild(wr(p,e.labelStyle,!0,!0)),y=g.getBBox();if(ie(qt().flowchart.htmlLabels)){var m=g.children[0],b=(0,l.select)(g);y=m.getBoundingClientRect(),b.attr("width",y.width),b.attr("height",y.height)}e.classData.annotations[0]&&(u+=y.height+4,c+=y.width);var v=e.classData.id;void 0!==e.classData.type&&""!==e.classData.type&&(qt().flowchart.htmlLabels?v+="<"+e.classData.type+">":v+="<"+e.classData.type+">");var _=h.node().appendChild(wr(v,e.labelStyle,!0,!0));(0,l.select)(_).attr("class","classTitle");var x=_.getBBox();if(ie(qt().flowchart.htmlLabels)){var k=_.children[0],w=(0,l.select)(_);x=k.getBoundingClientRect(),w.attr("width",x.width),w.attr("height",x.height)}u+=x.height+4,x.width>c&&(c=x.width);var E=[];e.classData.members.forEach((function(t){var n=hr(t),r=n.displayText;qt().flowchart.htmlLabels&&(r=r.replace(/</g,"<").replace(/>/g,">"));var i=h.node().appendChild(wr(r,n.cssStyle?n.cssStyle:e.labelStyle,!0,!0)),a=i.getBBox();if(ie(qt().flowchart.htmlLabels)){var o=i.children[0],s=(0,l.select)(i);a=o.getBoundingClientRect(),s.attr("width",a.width),s.attr("height",a.height)}a.width>c&&(c=a.width),u+=a.height+4,E.push(i)})),u+=8;var T=[];if(e.classData.methods.forEach((function(t){var n=hr(t),r=n.displayText;qt().flowchart.htmlLabels&&(r=r.replace(/</g,"<").replace(/>/g,">"));var i=h.node().appendChild(wr(r,n.cssStyle?n.cssStyle:e.labelStyle,!0,!0)),a=i.getBBox();if(ie(qt().flowchart.htmlLabels)){var o=i.children[0],s=(0,l.select)(i);a=o.getBoundingClientRect(),s.attr("width",a.width),s.attr("height",a.height)}a.width>c&&(c=a.width),u+=a.height+4,T.push(i)})),u+=8,f){var C=(c-y.width)/2;(0,l.select)(g).attr("transform","translate( "+(-1*c/2+C)+", "+-1*u/2+")"),d=y.height+4}var S=(c-x.width)/2;return(0,l.select)(_).attr("transform","translate( "+(-1*c/2+S)+", "+(-1*u/2+d)+")"),d+=x.height+4,o.attr("class","divider").attr("x1",-c/2-r).attr("x2",c/2+r).attr("y1",-u/2-r+8+d).attr("y2",-u/2-r+8+d),d+=8,E.forEach((function(t){(0,l.select)(t).attr("transform","translate( "+-c/2+", "+(-1*u/2+d+4)+")"),d+=x.height+4})),d+=8,s.attr("class","divider").attr("x1",-c/2-r).attr("x2",c/2+r).attr("y1",-u/2-r+8+d).attr("y2",-u/2-r+8+d),d+=8,T.forEach((function(t){(0,l.select)(t).attr("transform","translate( "+-c/2+", "+(-1*u/2+d)+")"),d+=x.height+4})),a.attr("class","outer title-state").attr("x",-c/2-r).attr("y",-u/2-r).attr("width",c+e.padding).attr("height",u+e.padding),Tr(e,a),e.intersect=function(t){return qr(e,t)},i}},Zr={},Qr=function(t){var e=Zr[t.id];o.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");var n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},Kr={rect:function(t,e){o.trace("Creating subgraph rect for ",e.id,e);var n=t.insert("g").attr("class","cluster"+(e.class?" "+e.class:"")).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=i.node().appendChild(wr(e.labelText,e.labelStyle,void 0,!0)),s=a.getBBox();if(ie(qt().flowchart.htmlLabels)){var c=a.children[0],u=(0,l.select)(a);s=c.getBoundingClientRect(),u.attr("width",s.width),u.attr("height",s.height)}var h=0*e.padding,d=h/2,f=e.width<=s.width+h?s.width+h:e.width;e.width<=s.width+h?e.diff=(s.width-e.width)/2-e.padding/2:e.diff=-e.padding/2,o.trace("Data ",e,JSON.stringify(e)),r.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-f/2).attr("y",e.y-e.height/2-d).attr("width",f).attr("height",e.height+h),i.attr("transform","translate("+(e.x-s.width/2)+", "+(e.y-e.height/2+e.padding/3)+")");var p=r.node().getBBox();return e.width=p.width,e.height=p.height,e.intersect=function(t){return Ur(e,t)},n},roundedWithTitle:function(t,e){var n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=n.append("rect"),o=i.node().appendChild(wr(e.labelText,e.labelStyle,void 0,!0)),s=o.getBBox();if(ie(qt().flowchart.htmlLabels)){var c=o.children[0],u=(0,l.select)(o);s=c.getBoundingClientRect(),u.attr("width",s.width),u.attr("height",s.height)}s=o.getBBox();var h=0*e.padding,d=h/2,f=e.width<=s.width+e.padding?s.width+e.padding:e.width;e.width<=s.width+e.padding?e.diff=(s.width+0*e.padding-e.width)/2:e.diff=-e.padding/2,r.attr("class","outer").attr("x",e.x-f/2-d).attr("y",e.y-e.height/2-d).attr("width",f+h).attr("height",e.height+h),a.attr("class","inner").attr("x",e.x-f/2-d).attr("y",e.y-e.height/2-d+s.height-1).attr("width",f+h).attr("height",e.height+h-s.height-3),i.attr("transform","translate("+(e.x-s.width/2)+", "+(e.y-e.height/2-e.padding/3+(ie(qt().flowchart.htmlLabels)?5:3))+")");var p=r.node().getBBox();return e.height=p.height,e.intersect=function(t){return Ur(e,t)},n},noteGroup:function(t,e){var n=t.insert("g").attr("class","note-cluster").attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");var o=r.node().getBBox();return e.width=o.width,e.height=o.height,e.intersect=function(t){return Ur(e,t)},n},divider:function(t,e){var n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("class","divider").attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2).attr("width",e.width+i).attr("height",e.height+i);var o=r.node().getBBox();return e.width=o.width,e.height=o.height,e.diff=-e.padding/2,e.intersect=function(t){return Ur(e,t)},n}},Jr={},ti={},ei={};function ni(t,e){qt().flowchart.htmlLabels&&t&&(t.style.width=9*e.length+"px",t.style.height="12px")}var ri=function(t,e){o.warn("abc88 cutPathAtIntersect",t,e);var n=[],r=t[0],i=!1;return t.forEach((function(t){if(o.info("abc88 checking point",t,e),function(t,e){var n=t.x,r=t.y,i=Math.abs(e.x-n),a=Math.abs(e.y-r),o=t.width/2,s=t.height/2;return i>=o||a>=s}(e,t)||i)o.warn("abc88 outside",t,r),r=t,i||n.push(t);else{var a=function(t,e,n){o.warn("intersection calc abc89:\n outsidePoint: ".concat(JSON.stringify(e),"\n insidePoint : ").concat(JSON.stringify(n),"\n node : x:").concat(t.x," y:").concat(t.y," w:").concat(t.width," h:").concat(t.height));var r=t.x,i=t.y,a=Math.abs(r-n.x),s=t.width/2,c=n.x<e.x?s-a:s+a,l=t.height/2,u=Math.abs(e.y-n.y),h=Math.abs(e.x-n.x);if(Math.abs(i-e.y)*s>Math.abs(r-e.x)*l){var d=n.y<e.y?e.y-l-i:i-l-e.y;c=h*d/u;var f={x:n.x<e.x?n.x+c:n.x-h+c,y:n.y<e.y?n.y+u-d:n.y-u+d};return 0===c&&(f.x=e.x,f.y=e.y),0===h&&(f.x=e.x),0===u&&(f.y=e.y),o.warn("abc89 topp/bott calc, Q ".concat(u,", q ").concat(d,", R ").concat(h,", r ").concat(c),f),f}var p=u*(c=n.x<e.x?e.x-s-r:r-s-e.x)/h,g=n.x<e.x?n.x+h-c:n.x-h+c,y=n.y<e.y?n.y+p:n.y-p;return o.warn("sides calc abc89, Q ".concat(u,", q ").concat(p,", R ").concat(h,", r ").concat(c),{_x:g,_y:y}),0===c&&(g=e.x,y=e.y),0===h&&(g=e.x),0===u&&(y=e.y),{x:g,y:y}}(e,r,t);o.warn("abc88 inside",t,r,a),o.warn("abc88 intersection",a);var s=!1;n.forEach((function(t){s=s||t.x===a.x&&t.y===a.y})),n.find((function(t){return t.x===a.x&&t.y===a.y}))?o.warn("abc88 no intersect",a,n):n.push(a),i=!0}})),o.warn("abc88 returning points",n),n},ii=function t(e,n,r,i){o.info("Graph in recursive render: XXX",lr().json.write(n),i);var a=n.graph().rankdir;o.trace("Dir in recursive render - dir:",a);var s=e.insert("g").attr("class","root");n.nodes()?o.info("Recursive render XXX",n.nodes()):o.info("No nodes found for",n),n.edges().length>0&&o.trace("Recursive edges",n.edge(n.edges()[0]));var c=s.insert("g").attr("class","clusters"),u=s.insert("g").attr("class","edgePaths"),h=s.insert("g").attr("class","edgeLabels"),d=s.insert("g").attr("class","nodes");n.nodes().forEach((function(e){var s=n.node(e);if(void 0!==i){var c=JSON.parse(JSON.stringify(i.clusterData));o.info("Setting data for cluster XXX (",e,") ",c,i),n.setNode(i.id,c),n.parent(e)||(o.trace("Setting parent",e,i.id),n.setParent(e,i.id,c))}if(o.info("(Insert) Node XXX"+e+": "+JSON.stringify(n.node(e))),s&&s.clusterNode){o.info("Cluster identified",e,s.width,n.node(e));var l=t(d,s.graph,r,n.node(e)),u=l.elem;Tr(s,u),s.diff=l.diff||0,o.info("Node bounds (abc123)",e,s,s.width,s.x,s.y),function(t,e){Zr[e.id]=t}(u,s),o.warn("Recursive render complete ",u,s)}else n.children(e).length>0?(o.info("Cluster - the non recursive path XXX",e,s.id,s,n),o.info(Br(s.id,n)),Sr[s.id]={id:Br(s.id,n),node:s}):(o.info("Node - the non recursive path",e,s.id,s),function(t,e,n){var r,i,a;e.link?("sandbox"===qt().securityLevel?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),r=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=Xr[e.shape](r,e,n)):r=i=Xr[e.shape](t,e,n),e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),Zr[e.id]=r,e.haveCallback&&Zr[e.id].attr("class",Zr[e.id].attr("class")+" clickable")}(d,n.node(e),a))})),n.edges().forEach((function(t){var e=n.edge(t.v,t.w,t.name);o.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),o.info("Edge "+t.v+" -> "+t.w+": ",t," ",JSON.stringify(n.edge(t))),o.info("Fix",Sr,"ids:",t.v,t.w,"Translateing: ",Sr[t.v],Sr[t.w]),function(t,e){var n=wr(e.label,e.labelStyle),r=t.insert("g").attr("class","edgeLabel"),i=r.insert("g").attr("class","label");i.node().appendChild(n);var a,o=n.getBBox();if(ie(qt().flowchart.htmlLabels)){var s=n.children[0],c=(0,l.select)(n);o=s.getBoundingClientRect(),c.attr("width",o.width),c.attr("height",o.height)}if(i.attr("transform","translate("+-o.width/2+", "+-o.height/2+")"),ti[e.id]=r,e.width=o.width,e.height=o.height,e.startLabelLeft){var u=wr(e.startLabelLeft,e.labelStyle),h=t.insert("g").attr("class","edgeTerminals"),d=h.insert("g").attr("class","inner");a=d.node().appendChild(u);var f=u.getBBox();d.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),ei[e.id]||(ei[e.id]={}),ei[e.id].startLeft=h,ni(a,e.startLabelLeft)}if(e.startLabelRight){var p=wr(e.startLabelRight,e.labelStyle),g=t.insert("g").attr("class","edgeTerminals"),y=g.insert("g").attr("class","inner");a=g.node().appendChild(p),y.node().appendChild(p);var m=p.getBBox();y.attr("transform","translate("+-m.width/2+", "+-m.height/2+")"),ei[e.id]||(ei[e.id]={}),ei[e.id].startRight=g,ni(a,e.startLabelRight)}if(e.endLabelLeft){var b=wr(e.endLabelLeft,e.labelStyle),v=t.insert("g").attr("class","edgeTerminals"),_=v.insert("g").attr("class","inner");a=_.node().appendChild(b);var x=b.getBBox();_.attr("transform","translate("+-x.width/2+", "+-x.height/2+")"),v.node().appendChild(b),ei[e.id]||(ei[e.id]={}),ei[e.id].endLeft=v,ni(a,e.endLabelLeft)}if(e.endLabelRight){var k=wr(e.endLabelRight,e.labelStyle),w=t.insert("g").attr("class","edgeTerminals"),E=w.insert("g").attr("class","inner");a=E.node().appendChild(k);var T=k.getBBox();E.attr("transform","translate("+-T.width/2+", "+-T.height/2+")"),w.node().appendChild(k),ei[e.id]||(ei[e.id]={}),ei[e.id].endRight=w,ni(a,e.endLabelRight)}}(h,e)})),n.edges().forEach((function(t){o.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t))})),o.info("#############################################"),o.info("### Layout ###"),o.info("#############################################"),o.info(n),sr().layout(n),o.info("Graph after layout:",lr().json.write(n));var f=0;return Pr(n).forEach((function(t){var e=n.node(t);o.info("Position "+t+": "+JSON.stringify(n.node(t))),o.info("Position "+t+": ("+e.x,","+e.y,") width: ",e.width," height: ",e.height),e&&e.clusterNode?Qr(e):n.children(t).length>0?(function(t,e){o.trace("Inserting cluster");var n=e.shape||"rect";Jr[e.id]=Kr[n](t,e)}(c,e),Sr[e.id].node=e):Qr(e)})),n.edges().forEach((function(t){var e=n.edge(t);o.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e),e);var i=function(t,e,n,r,i,a){var s=n.points,c=!1,u=a.node(e.v),h=a.node(e.w);o.info("abc88 InsertEdge: ",n),h.intersect&&u.intersect&&((s=s.slice(1,n.points.length-1)).unshift(u.intersect(s[0])),o.info("Last point",s[s.length-1],h,h.intersect(s[s.length-1])),s.push(h.intersect(s[s.length-1]))),n.toCluster&&(o.info("to cluster abc88",r[n.toCluster]),s=ri(n.points,r[n.toCluster].node),c=!0),n.fromCluster&&(o.info("from cluster abc88",r[n.fromCluster]),s=ri(s.reverse(),r[n.fromCluster].node).reverse(),c=!0);var d,f=s.filter((function(t){return!Number.isNaN(t.y)}));d=("graph"===i||"flowchart"===i)&&n.curve||l.curveBasis;var p,g=(0,l.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(d);switch(n.thickness){case"normal":p="edge-thickness-normal";break;case"thick":p="edge-thickness-thick";break;default:p=""}switch(n.pattern){case"solid":p+=" edge-pattern-solid";break;case"dotted":p+=" edge-pattern-dotted";break;case"dashed":p+=" edge-pattern-dashed"}var y=t.append("path").attr("d",g(f)).attr("id",n.id).attr("class"," "+p+(n.classes?" "+n.classes:"")).attr("style",n.style),m="";switch(qt().state.arrowMarkerAbsolute&&(m=(m=(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),o.info("arrowTypeStart",n.arrowTypeStart),o.info("arrowTypeEnd",n.arrowTypeEnd),n.arrowTypeStart){case"arrow_cross":y.attr("marker-start","url("+m+"#"+i+"-crossStart)");break;case"arrow_point":y.attr("marker-start","url("+m+"#"+i+"-pointStart)");break;case"arrow_barb":y.attr("marker-start","url("+m+"#"+i+"-barbStart)");break;case"arrow_circle":y.attr("marker-start","url("+m+"#"+i+"-circleStart)");break;case"aggregation":y.attr("marker-start","url("+m+"#"+i+"-aggregationStart)");break;case"extension":y.attr("marker-start","url("+m+"#"+i+"-extensionStart)");break;case"composition":y.attr("marker-start","url("+m+"#"+i+"-compositionStart)");break;case"dependency":y.attr("marker-start","url("+m+"#"+i+"-dependencyStart)");break;case"lollipop":y.attr("marker-start","url("+m+"#"+i+"-lollipopStart)")}switch(n.arrowTypeEnd){case"arrow_cross":y.attr("marker-end","url("+m+"#"+i+"-crossEnd)");break;case"arrow_point":y.attr("marker-end","url("+m+"#"+i+"-pointEnd)");break;case"arrow_barb":y.attr("marker-end","url("+m+"#"+i+"-barbEnd)");break;case"arrow_circle":y.attr("marker-end","url("+m+"#"+i+"-circleEnd)");break;case"aggregation":y.attr("marker-end","url("+m+"#"+i+"-aggregationEnd)");break;case"extension":y.attr("marker-end","url("+m+"#"+i+"-extensionEnd)");break;case"composition":y.attr("marker-end","url("+m+"#"+i+"-compositionEnd)");break;case"dependency":y.attr("marker-end","url("+m+"#"+i+"-dependencyEnd)");break;case"lollipop":y.attr("marker-end","url("+m+"#"+i+"-lollipopEnd)")}var b={};return c&&(b.updatedPath=s),b.originalPath=n.points,b}(u,t,e,Sr,r,n);!function(t,e){o.info("Moving label abc78 ",t.id,t.label,ti[t.id]);var n=e.updatedPath?e.updatedPath:e.originalPath;if(t.label){var r=ti[t.id],i=t.x,a=t.y;if(n){var s=kn.calcLabelPosition(n);o.info("Moving label from (",i,",",a,") to (",s.x,",",s.y,") abc78")}r.attr("transform","translate("+i+", "+a+")")}if(t.startLabelLeft){var c=ei[t.id].startLeft,l=t.x,u=t.y;if(n){var h=kn.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",n);l=h.x,u=h.y}c.attr("transform","translate("+l+", "+u+")")}if(t.startLabelRight){var d=ei[t.id].startRight,f=t.x,p=t.y;if(n){var g=kn.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",n);f=g.x,p=g.y}d.attr("transform","translate("+f+", "+p+")")}if(t.endLabelLeft){var y=ei[t.id].endLeft,m=t.x,b=t.y;if(n){var v=kn.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",n);m=v.x,b=v.y}y.attr("transform","translate("+m+", "+b+")")}if(t.endLabelRight){var _=ei[t.id].endRight,x=t.x,k=t.y;if(n){var w=kn.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",n);x=w.x,k=w.y}_.attr("transform","translate("+x+", "+k+")")}}(e,i)})),n.nodes().forEach((function(t){var e=n.node(t);o.info(t,e.type,e.diff),"group"===e.type&&(f=e.diff)})),{elem:s,diff:f}},ai=function(t,e,n,r,i){(function(t,e,n,r){e.forEach((function(e){xr[e](t,n,r)}))})(t,n,r,i),Zr={},ti={},ei={},Jr={},Ar={},Mr={},Sr={},o.warn("Graph at first:",lr().json.write(e)),Ir(e),o.warn("Graph after:",lr().json.write(e)),ii(t,e,r)},oi={dividerMargin:10,padding:5,textHeight:10};function si(t){var e;switch(t){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}const ci={setConf:function(t){Object.keys(t).forEach((function(e){oi[e]=t[e]}))},draw:function(t,e,n,r){o.info("Drawing class - ",e);var i=qt().flowchart,a=qt().securityLevel;o.info("config:",i);var s,c=i.nodeSpacing||50,u=i.rankSpacing||50,h=new(lr().Graph)({multigraph:!0,compound:!0}).setGraph({rankdir:r.db.getDirection(),nodesep:c,ranksep:u,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),d=r.db.getClasses(),f=r.db.getRelations();o.info(f),function(t,e,n,r){var i=Object.keys(t);o.info("keys:",i),o.info(t),i.forEach((function(n){var i=t[n],a="";i.cssClasses.length>0&&(a=a+" "+i.cssClasses.join(" "));var s,c,l={labelStyle:""},u=void 0!==i.text?i.text:i.id;i.type,c="class_box",e.setNode(i.id,{labelStyle:l.labelStyle,shape:c,labelText:(s=u,oe.sanitizeText(s,qt())),classData:i,rx:0,ry:0,class:a,style:l.style,id:i.id,domId:i.domId,tooltip:r.db.getTooltip(i.id)||"",haveCallback:i.haveCallback,link:i.link,width:"group"===i.type?500:void 0,type:i.type,padding:qt().flowchart.padding}),o.info("setNode",{labelStyle:l.labelStyle,shape:c,labelText:u,rx:0,ry:0,class:a,style:l.style,id:i.id,width:"group"===i.type?500:void 0,type:i.type,padding:qt().flowchart.padding})}))}(d,h,0,r),function(t,e){var n=qt().flowchart,r=0;t.forEach((function(i){r++;var a={classes:"relation"};a.pattern=1==i.relation.lineType?"dashed":"solid",a.id="id"+r,"arrow_open"===i.type?a.arrowhead="none":a.arrowhead="normal",o.info(a,i),a.startLabelRight="none"===i.relationTitle1?"":i.relationTitle1,a.endLabelLeft="none"===i.relationTitle2?"":i.relationTitle2,a.arrowTypeStart=si(i.relation.type1),a.arrowTypeEnd=si(i.relation.type2);var s="",c="";if(void 0!==i.style){var u=sn(i.style);s=u.style,c=u.labelStyle}else s="fill:none";a.style=s,a.labelStyle=c,void 0!==i.interpolate?a.curve=an(i.interpolate,l.curveLinear):void 0!==t.defaultInterpolate?a.curve=an(t.defaultInterpolate,l.curveLinear):a.curve=an(n.curve,l.curveLinear),i.text=i.title,void 0===i.text?void 0!==i.style&&(a.arrowheadStyle="fill: #333"):(a.arrowheadStyle="fill: #333",a.labelpos="c",qt().flowchart.htmlLabels?(a.labelType="html",a.label='<span class="edgeLabel">'+i.text+"</span>"):(a.labelType="text",a.label=i.text.replace(oe.lineBreakRegex,"\n"),void 0===i.style&&(a.style=a.style||"stroke: #333; stroke-width: 1.5px;fill:none"),a.labelStyle=a.labelStyle.replace("color:","fill:"))),e.setEdge(i.id1,i.id2,a,r)}))}(f,h),"sandbox"===a&&(s=(0,l.select)("#i"+e));var p="sandbox"===a?(0,l.select)(s.nodes()[0].contentDocument.body):(0,l.select)("body"),g=p.select('[id="'.concat(e,'"]')),y=p.select("#"+e+" g");if(ai(y,h,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",e),vn(h,g,i.diagramPadding,i.useMaxWidth),!i.htmlLabels)for(var m="sandbox"===a?s.nodes()[0].contentDocument:document,b=m.querySelectorAll('[id="'+e+'"] .edgeLabel .label'),v=0;v<b.length;v++){var _=b[v],x=_.getBBox(),k=m.createElementNS("http://www.w3.org/2000/svg","rect");k.setAttribute("rx",0),k.setAttribute("ry",0),k.setAttribute("width",x.width),k.setAttribute("height",x.height),_.insertBefore(k,_.firstChild)}wn(r.db,g,e)}};var li=n(1362),ui=n.n(li),hi={},di=[],fi=function(t){return void 0===hi[t]&&(hi[t]={attributes:[]},o.info("Added new entity :",t)),hi[t]};const pi={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},parseDirective:function(t,e,n){Nl.parseDirective(this,t,e,n)},getConfig:function(){return qt().er},addEntity:fi,addAttributes:function(t,e){var n,r=fi(t);for(n=e.length-1;n>=0;n--)r.attributes.push(e[n]),o.debug("Added attribute ",e[n].attributeName)},getEntities:function(){return hi},addRelationship:function(t,e,n,r){var i={entityA:t,roleA:e,entityB:n,relSpec:r};di.push(i),o.debug("Added new relationship :",i)},getRelationships:function(){return di},clear:function(){hi={},di=[],he()},setAccTitle:de,getAccTitle:fe,setAccDescription:pe,getAccDescription:ge};var gi={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END"};const yi=gi;var mi={},bi=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},vi=0;const _i={setConf:function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)mi[e[n]]=t[e[n]]},draw:function(t,e,n,r){mi=qt().er,o.info("Drawing ER diagram");var i,a=qt().securityLevel;"sandbox"===a&&(i=(0,l.select)("#i"+e));var s,c=("sandbox"===a?(0,l.select)(i.nodes()[0].contentDocument.body):(0,l.select)("body")).select("[id='".concat(e,"']"));(function(t,e){var n;t.append("defs").append("marker").attr("id",gi.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",gi.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),(n=t.append("defs").append("marker").attr("id",gi.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),(n=t.append("defs").append("marker").attr("id",gi.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",gi.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",gi.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),(n=t.append("defs").append("marker").attr("id",gi.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),(n=t.append("defs").append("marker").attr("id",gi.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")})(c,mi),s=new(lr().Graph)({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:mi.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));var u,h,d=function(t,e,n){var r;return Object.keys(e).forEach((function(i){var a=t.append("g").attr("id",i);r=void 0===r?i:r;var o="entity-"+i,s=a.append("text").attr("class","er entityLabel").attr("id",o).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("style","font-family: "+qt().fontFamily+"; font-size: "+mi.fontSize+"px").text(i),c=function(t,e,n){var r=mi.entityPadding/3,i=mi.entityPadding/3,a=.85*mi.fontSize,o=e.node().getBBox(),s=[],c=!1,l=!1,u=0,h=0,d=0,f=0,p=o.height+2*r,g=1;n.forEach((function(t){void 0!==t.attributeKeyType&&(c=!0),void 0!==t.attributeComment&&(l=!0)})),n.forEach((function(n){var i="".concat(e.node().id,"-attr-").concat(g),o=0,y=ae(n.attributeType),m=t.append("text").attr("class","er entityLabel").attr("id","".concat(i,"-type")).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+qt().fontFamily+"; font-size: "+a+"px").text(y),b=t.append("text").attr("class","er entityLabel").attr("id","".concat(i,"-name")).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+qt().fontFamily+"; font-size: "+a+"px").text(n.attributeName),v={};v.tn=m,v.nn=b;var _=m.node().getBBox(),x=b.node().getBBox();if(u=Math.max(u,_.width),h=Math.max(h,x.width),o=Math.max(_.height,x.height),c){var k=t.append("text").attr("class","er entityLabel").attr("id","".concat(i,"-key")).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+qt().fontFamily+"; font-size: "+a+"px").text(n.attributeKeyType||"");v.kn=k;var w=k.node().getBBox();d=Math.max(d,w.width),o=Math.max(o,w.height)}if(l){var E=t.append("text").attr("class","er entityLabel").attr("id","".concat(i,"-comment")).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+qt().fontFamily+"; font-size: "+a+"px").text(n.attributeComment||"");v.cn=E;var T=E.node().getBBox();f=Math.max(f,T.width),o=Math.max(o,T.height)}v.height=o,s.push(v),p+=o+2*r,g+=1}));var y=4;c&&(y+=2),l&&(y+=2);var m=u+h+d+f,b={width:Math.max(mi.minEntityWidth,Math.max(o.width+2*mi.entityPadding,m+i*y)),height:n.length>0?p:Math.max(mi.minEntityHeight,o.height+2*mi.entityPadding)};if(n.length>0){var v=Math.max(0,(b.width-m-i*y)/(y/2));e.attr("transform","translate("+b.width/2+","+(r+o.height/2)+")");var _=o.height+2*r,x="attributeBoxOdd";s.forEach((function(e){var n=_+r+e.height/2;e.tn.attr("transform","translate("+i+","+n+")");var a=t.insert("rect","#"+e.tn.node().id).attr("class","er ".concat(x)).attr("fill",mi.fill).attr("fill-opacity","100%").attr("stroke",mi.stroke).attr("x",0).attr("y",_).attr("width",u+2*i+v).attr("height",e.height+2*r),o=parseFloat(a.attr("x"))+parseFloat(a.attr("width"));e.nn.attr("transform","translate("+(o+i)+","+n+")");var s=t.insert("rect","#"+e.nn.node().id).attr("class","er ".concat(x)).attr("fill",mi.fill).attr("fill-opacity","100%").attr("stroke",mi.stroke).attr("x",o).attr("y",_).attr("width",h+2*i+v).attr("height",e.height+2*r),p=parseFloat(s.attr("x"))+parseFloat(s.attr("width"));if(c){e.kn.attr("transform","translate("+(p+i)+","+n+")");var g=t.insert("rect","#"+e.kn.node().id).attr("class","er ".concat(x)).attr("fill",mi.fill).attr("fill-opacity","100%").attr("stroke",mi.stroke).attr("x",p).attr("y",_).attr("width",d+2*i+v).attr("height",e.height+2*r);p=parseFloat(g.attr("x"))+parseFloat(g.attr("width"))}l&&(e.cn.attr("transform","translate("+(p+i)+","+n+")"),t.insert("rect","#"+e.cn.node().id).attr("class","er ".concat(x)).attr("fill",mi.fill).attr("fill-opacity","100%").attr("stroke",mi.stroke).attr("x",p).attr("y",_).attr("width",f+2*i+v).attr("height",e.height+2*r)),_+=e.height+2*r,x="attributeBoxOdd"==x?"attributeBoxEven":"attributeBoxOdd"}))}else b.height=Math.max(mi.minEntityHeight,p),e.attr("transform","translate("+b.width/2+","+b.height/2+")");return b}(a,s,e[i].attributes),l=c.width,u=c.height,h=a.insert("rect","#"+o).attr("class","er entityBox").attr("fill",mi.fill).attr("fill-opacity","100%").attr("stroke",mi.stroke).attr("x",0).attr("y",0).attr("width",l).attr("height",u).node().getBBox();n.setNode(i,{width:h.width,height:h.height,shape:"rect",id:i})})),r}(c,r.db.getEntities(),s),f=function(t,e){return t.forEach((function(t){e.setEdge(t.entityA,t.entityB,{relationship:t},bi(t))})),t}(r.db.getRelationships(),s);sr().layout(s),u=c,(h=s).nodes().forEach((function(t){void 0!==t&&void 0!==h.node(t)&&u.select("#"+t).attr("transform","translate("+(h.node(t).x-h.node(t).width/2)+","+(h.node(t).y-h.node(t).height/2)+" )")})),f.forEach((function(t){!function(t,e,n,r,i){vi++;var a=n.edge(e.entityA,e.entityB,bi(e)),o=(0,l.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(l.curveBasis),s=t.insert("path","#"+r).attr("class","er relationshipLine").attr("d",o(a.points)).attr("stroke",mi.stroke).attr("fill","none");e.relSpec.relType===i.db.Identification.NON_IDENTIFYING&&s.attr("stroke-dasharray","8,8");var c="";switch(mi.arrowMarkerAbsolute&&(c=(c=(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),e.relSpec.cardA){case i.db.Cardinality.ZERO_OR_ONE:s.attr("marker-end","url("+c+"#"+yi.ZERO_OR_ONE_END+")");break;case i.db.Cardinality.ZERO_OR_MORE:s.attr("marker-end","url("+c+"#"+yi.ZERO_OR_MORE_END+")");break;case i.db.Cardinality.ONE_OR_MORE:s.attr("marker-end","url("+c+"#"+yi.ONE_OR_MORE_END+")");break;case i.db.Cardinality.ONLY_ONE:s.attr("marker-end","url("+c+"#"+yi.ONLY_ONE_END+")")}switch(e.relSpec.cardB){case i.db.Cardinality.ZERO_OR_ONE:s.attr("marker-start","url("+c+"#"+yi.ZERO_OR_ONE_START+")");break;case i.db.Cardinality.ZERO_OR_MORE:s.attr("marker-start","url("+c+"#"+yi.ZERO_OR_MORE_START+")");break;case i.db.Cardinality.ONE_OR_MORE:s.attr("marker-start","url("+c+"#"+yi.ONE_OR_MORE_START+")");break;case i.db.Cardinality.ONLY_ONE:s.attr("marker-start","url("+c+"#"+yi.ONLY_ONE_START+")")}var u=s.node().getTotalLength(),h=s.node().getPointAtLength(.5*u),d="rel"+vi,f=t.append("text").attr("class","er relationshipLabel").attr("id",d).attr("x",h.x).attr("y",h.y).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("style","font-family: "+qt().fontFamily+"; font-size: "+mi.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+d).attr("class","er relationshipLabelBox").attr("x",h.x-f.width/2).attr("y",h.y-f.height/2).attr("width",f.width).attr("height",f.height).attr("fill","white").attr("fill-opacity","85%")}(c,t,s,d,r)}));var p=mi.diagramPadding,g=c.node().getBBox(),y=g.width+2*p,m=g.height+2*p;bn(c,0,y,mi.useMaxWidth),c.attr("viewBox","".concat(g.x-p," ").concat(g.y-p," ").concat(y," ").concat(m)),wn(r.db,c,e)}};var xi={};const ki={setConf:function(t){Object.keys(t).forEach((function(e){xi[e]=t[e]}))},draw:function(t,e,n){try{o.debug("Renering svg for syntax error\n");var r=(0,l.select)("#"+e),i=r.append("g");i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in graph"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text("mermaid version "+n),r.attr("height",100),r.attr("width",500),r.attr("viewBox","768 0 912 512")}catch(t){o.error("Error while rendering info diagram"),o.error(t.message)}}};var wi=n(5890),Ei=n.n(wi);function Ti(t){return Ti="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ti(t)}function Ci(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var Si,Ai,Mi="flowchart-",Oi=0,Ni=qt(),Di={},Bi=[],Li=[],Ii=[],Fi={},Ri={},Pi=0,ji=!0,zi=[],Yi=function(t){return oe.sanitizeText(t,Ni)},Ui=function(t){for(var e=Object.keys(Di),n=0;n<e.length;n++)if(Di[e[n]].id===t)return Di[e[n]].domId;return t},$i=function(t,e,n,r){var i={start:t,end:e,type:void 0,text:""};void 0!==(r=n.text)&&(i.text=Yi(r.trim()),'"'===i.text[0]&&'"'===i.text[i.text.length-1]&&(i.text=i.text.substring(1,i.text.length-1))),void 0!==n&&(i.type=n.type,i.stroke=n.stroke,i.length=n.length),Bi.push(i)},Wi=function(t,e){t.split(",").forEach((function(t){var n=t;void 0!==Di[n]&&Di[n].classes.push(e),void 0!==Fi[n]&&Fi[n].classes.push(e)}))},qi=function(t){var e=(0,l.select)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,l.select)("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),(0,l.select)(t).select("svg").selectAll("g.node").on("mouseover",(function(){var t=(0,l.select)(this);if(null!==t.attr("title")){var n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)}})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0),(0,l.select)(this).classed("hover",!1)}))};zi.push(qi);var Hi=function(t){for(var e=0;e<Ii.length;e++)if(Ii[e].id===t)return e;return-1},Vi=-1,Gi=[],Xi=function t(e,n){var r=Ii[n].nodes;if(!((Vi+=1)>2e3)){if(Gi[Vi]=n,Ii[n].id===e)return{result:!0,count:0};for(var i=0,a=1;i<r.length;){var o=Hi(r[i]);if(o>=0){var s=t(e,o);if(s.result)return{result:!0,count:a+s.count};a+=s.count}i+=1}return{result:!1,count:a}}},Zi=function(t,e){var n=!1;return t.forEach((function(t){t.nodes.indexOf(e)>=0&&(n=!0)})),n},Qi=function(t,e){var n=[];return t.nodes.forEach((function(r,i){Zi(e,r)||n.push(t.nodes[i])})),{nodes:n}};const Ki={parseDirective:function(t,e,n){Nl.parseDirective(this,t,e,n)},defaultConfig:function(){return jt.flowchart},setAccTitle:de,getAccTitle:fe,getAccDescription:ge,setAccDescription:pe,addVertex:function(t,e,n,r,i,a){var o,s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},c=t;void 0!==c&&0!==c.trim().length&&(void 0===Di[c]&&(Di[c]={id:c,domId:Mi+c+"-"+Oi,styles:[],classes:[]}),Oi++,void 0!==e?(Ni=qt(),'"'===(o=Yi(e.trim()))[0]&&'"'===o[o.length-1]&&(o=o.substring(1,o.length-1)),Di[c].text=o):void 0===Di[c].text&&(Di[c].text=t),void 0!==n&&(Di[c].type=n),null!=r&&r.forEach((function(t){Di[c].styles.push(t)})),null!=i&&i.forEach((function(t){Di[c].classes.push(t)})),void 0!==a&&(Di[c].dir=a),Di[c].props=s)},lookUpDomId:Ui,addLink:function(t,e,n,r){var i,a;for(i=0;i<t.length;i++)for(a=0;a<e.length;a++)$i(t[i],e[a],n,r)},updateLinkInterpolate:function(t,e){t.forEach((function(t){"default"===t?Bi.defaultInterpolate=e:Bi[t].interpolate=e}))},updateLink:function(t,e){t.forEach((function(t){"default"===t?Bi.defaultStyle=e:(-1===kn.isSubstringInArray("fill",e)&&e.push("fill:none"),Bi[t].style=e)}))},addClass:function(t,e){void 0===Li[t]&&(Li[t]={id:t,styles:[],textStyles:[]}),null!=e&&e.forEach((function(e){if(e.match("color")){var n=e.replace("fill","bgFill").replace("color","fill");Li[t].textStyles.push(n)}Li[t].styles.push(e)}))},setDirection:function(t){(Si=t).match(/.*</)&&(Si="RL"),Si.match(/.*\^/)&&(Si="BT"),Si.match(/.*>/)&&(Si="LR"),Si.match(/.*v/)&&(Si="TB")},setClass:Wi,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(Ri["gen-1"===Ai?Ui(t):t]=Yi(e))}))},getTooltip:function(t){return Ri[t]},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){var r=Ui(t);if("loose"===qt().securityLevel&&void 0!==e){var i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var a=0;a<i.length;a++){var o=i[a].trim();'"'===o.charAt(0)&&'"'===o.charAt(o.length-1)&&(o=o.substr(1,o.length-2)),i[a]=o}}0===i.length&&i.push(t),void 0!==Di[t]&&(Di[t].haveCallback=!0,zi.push((function(){var t=document.querySelector('[id="'.concat(r,'"]'));null!==t&&t.addEventListener("click",(function(){var t;kn.runFunc.apply(kn,[e].concat(function(t){if(Array.isArray(t))return Ci(t)}(t=i)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Ci(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ci(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))}),!1)})))}}(t,e,n)})),Wi(t,"clickable")},setLink:function(t,e,n){t.split(",").forEach((function(t){void 0!==Di[t]&&(Di[t].link=kn.formatUrl(e,Ni),Di[t].linkTarget=n)})),Wi(t,"clickable")},bindFunctions:function(t){zi.forEach((function(e){e(t)}))},getDirection:function(){return Si.trim()},getVertices:function(){return Di},getEdges:function(){return Bi},getClasses:function(){return Li},clear:function(t){Di={},Li={},Bi=[],(zi=[]).push(qi),Ii=[],Fi={},Pi=0,Ri=[],ji=!0,Ai=t||"gen-1",he()},setGen:function(t){Ai=t||"gen-1"},defaultStyle:function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},addSubGraph:function(t,e,n){var r=t.trim(),i=n;t===n&&n.match(/\s/)&&(r=void 0);var a=[],s=function(t){var e,n={boolean:{},number:{},string:{}},r=[],i=t.filter((function(t){var i=Ti(t);return t.stmt&&"dir"===t.stmt?(e=t.value,!1):""!==t.trim()&&(i in n?!n[i].hasOwnProperty(t)&&(n[i][t]=!0):!(r.indexOf(t)>=0)&&r.push(t))}));return{nodeList:i,dir:e}}(a.concat.apply(a,e)),c=s.nodeList,l=s.dir;if(a=c,"gen-1"===Ai)for(var u=0;u<a.length;u++)a[u]=Ui(a[u]);r=r||"subGraph"+Pi,i=Yi(i=i||""),Pi+=1;var h={id:r,nodes:a,title:i.trim(),classes:[],dir:l};return o.info("Adding",h.id,h.nodes,h.dir),h.nodes=Qi(h,Ii).nodes,Ii.push(h),Fi[r]=h,r},getDepthFirstPos:function(t){return Gi[t]},indexNodes:function(){Vi=-1,Ii.length>0&&Xi("none",Ii.length-1)},getSubGraphs:function(){return Ii},destructLink:function(t,e){var n,r=function(t){var e=t.trim(),n=e.slice(0,-1),r="arrow_open";switch(e.slice(-1)){case"x":r="arrow_cross","x"===e[0]&&(r="double_"+r,n=n.slice(1));break;case">":r="arrow_point","<"===e[0]&&(r="double_"+r,n=n.slice(1));break;case"o":r="arrow_circle","o"===e[0]&&(r="double_"+r,n=n.slice(1))}var i="normal",a=n.length-1;"="===n[0]&&(i="thick");var o=function(t,e){for(var n=e.length,r=0,i=0;i<n;++i)"."===e[i]&&++r;return r}(0,n);return o&&(i="dotted",a=o),{type:r,stroke:i,length:a}}(t);if(e){if(n=function(t){var e=t.trim(),n="arrow_open";switch(e[0]){case"<":n="arrow_point",e=e.slice(1);break;case"x":n="arrow_cross",e=e.slice(1);break;case"o":n="arrow_circle",e=e.slice(1)}var r="normal";return-1!==e.indexOf("=")&&(r="thick"),-1!==e.indexOf(".")&&(r="dotted"),{type:n,stroke:r}}(e),n.stroke!==r.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===n.type)n.type=r.type;else{if(n.type!==r.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return"double_arrow"===n.type&&(n.type="double_arrow_point"),n.length=r.length,n}return r},lex:{firstGraph:function(){return!!ji&&(ji=!1,!0)}},exists:Zi,makeUniq:Qi};var Ji=n(4949),ta=n.n(Ji),ea=n(8284),na=n.n(ea);function ra(t,e,n){var r=.9*(e.width+e.height),i=[{x:r/2,y:0},{x:r,y:-r/2},{x:r/2,y:-r},{x:0,y:-r/2}],a=pa(t,r,r,i);return n.intersect=function(t){return ta().intersect.polygon(n,i,t)},a}function ia(t,e,n){var r=e.height,i=r/4,a=e.width+2*i,o=[{x:i,y:0},{x:a-i,y:0},{x:a,y:-r/2},{x:a-i,y:-r},{x:i,y:-r},{x:0,y:-r/2}],s=pa(t,a,r,o);return n.intersect=function(t){return ta().intersect.polygon(n,o,t)},s}function aa(t,e,n){var r=e.width,i=e.height,a=[{x:-i/2,y:0},{x:r,y:0},{x:r,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}],o=pa(t,r,i,a);return n.intersect=function(t){return ta().intersect.polygon(n,a,t)},o}function oa(t,e,n){var r=e.width,i=e.height,a=[{x:-2*i/6,y:0},{x:r-i/6,y:0},{x:r+2*i/6,y:-i},{x:i/6,y:-i}],o=pa(t,r,i,a);return n.intersect=function(t){return ta().intersect.polygon(n,a,t)},o}function sa(t,e,n){var r=e.width,i=e.height,a=[{x:2*i/6,y:0},{x:r+i/6,y:0},{x:r-2*i/6,y:-i},{x:-i/6,y:-i}],o=pa(t,r,i,a);return n.intersect=function(t){return ta().intersect.polygon(n,a,t)},o}function ca(t,e,n){var r=e.width,i=e.height,a=[{x:-2*i/6,y:0},{x:r+2*i/6,y:0},{x:r-i/6,y:-i},{x:i/6,y:-i}],o=pa(t,r,i,a);return n.intersect=function(t){return ta().intersect.polygon(n,a,t)},o}function la(t,e,n){var r=e.width,i=e.height,a=[{x:i/6,y:0},{x:r-i/6,y:0},{x:r+2*i/6,y:-i},{x:-2*i/6,y:-i}],o=pa(t,r,i,a);return n.intersect=function(t){return ta().intersect.polygon(n,a,t)},o}function ua(t,e,n){var r=e.width,i=e.height,a=[{x:0,y:0},{x:r+i/2,y:0},{x:r,y:-i/2},{x:r+i/2,y:-i},{x:0,y:-i}],o=pa(t,r,i,a);return n.intersect=function(t){return ta().intersect.polygon(n,a,t)},o}function ha(t,e,n){var r=e.height,i=e.width+r/4,a=t.insert("rect",":first-child").attr("rx",r/2).attr("ry",r/2).attr("x",-i/2).attr("y",-r/2).attr("width",i).attr("height",r);return n.intersect=function(t){return ta().intersect.rect(n,t)},a}function da(t,e,n){var r=e.width,i=e.height,a=[{x:0,y:0},{x:r,y:0},{x:r,y:-i},{x:0,y:-i},{x:0,y:0},{x:-8,y:0},{x:r+8,y:0},{x:r+8,y:-i},{x:-8,y:-i},{x:-8,y:0}],o=pa(t,r,i,a);return n.intersect=function(t){return ta().intersect.polygon(n,a,t)},o}function fa(t,e,n){var r=e.width,i=r/2,a=i/(2.5+r/50),o=e.height+a,s="M 0,"+a+" a "+i+","+a+" 0,0,0 "+r+" 0 a "+i+","+a+" 0,0,0 "+-r+" 0 l 0,"+o+" a "+i+","+a+" 0,0,0 "+r+" 0 l 0,"+-o,c=t.attr("label-offset-y",a).insert("path",":first-child").attr("d",s).attr("transform","translate("+-r/2+","+-(o/2+a)+")");return n.intersect=function(t){var e=ta().intersect.rect(n,t),r=e.x-n.x;if(0!=i&&(Math.abs(r)<n.width/2||Math.abs(r)==n.width/2&&Math.abs(e.y-n.y)>n.height/2-a)){var o=a*a*(1-r*r/(i*i));0!=o&&(o=Math.sqrt(o)),o=a-o,t.y-n.y>0&&(o=-o),e.y+=o}return e},c}function pa(t,e,n,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("transform","translate("+-e/2+","+n/2+")")}var ga={},ya=function(t,e,n,r,i,a){qt().securityLevel;var s=r?r.select('[id="'.concat(n,'"]')):(0,l.select)('[id="'.concat(n,'"]')),c=i||document;Object.keys(t).forEach((function(n){var r=t[n],i="default";r.classes.length>0&&(i=r.classes.join(" "));var l,u=sn(r.styles),h=void 0!==r.text?r.text:r.id;if(ie(qt().flowchart.htmlLabels)){var d={label:h.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"<i class='".concat(t.replace(":"," "),"'></i>")}))};(l=na()(s,d).node()).parentNode.removeChild(l)}else{var f=c.createElementNS("http://www.w3.org/2000/svg","text");f.setAttribute("style",u.labelStyle.replace("color:","fill:"));for(var p=h.split(oe.lineBreakRegex),g=0;g<p.length;g++){var y=c.createElementNS("http://www.w3.org/2000/svg","tspan");y.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),y.setAttribute("dy","1em"),y.setAttribute("x","1"),y.textContent=p[g],f.appendChild(y)}l=f}var m=0,b="";switch(r.type){case"round":m=5,b="rect";break;case"square":case"group":default:b="rect";break;case"diamond":b="question";break;case"hexagon":b="hexagon";break;case"odd":case"odd_right":b="rect_left_inv_arrow";break;case"lean_right":b="lean_right";break;case"lean_left":b="lean_left";break;case"trapezoid":b="trapezoid";break;case"inv_trapezoid":b="inv_trapezoid";break;case"circle":b="circle";break;case"ellipse":b="ellipse";break;case"stadium":b="stadium";break;case"subroutine":b="subroutine";break;case"cylinder":b="cylinder"}o.warn("Adding node",r.id,r.domId),e.setNode(a.db.lookUpDomId(r.id),{labelType:"svg",labelStyle:u.labelStyle,shape:b,label:l,rx:m,ry:m,class:i,style:u.style,id:a.db.lookUpDomId(r.id)})}))},ma=function(t,e,n){var r,i,a=0;if(void 0!==t.defaultStyle){var o=sn(t.defaultStyle);r=o.style,i=o.labelStyle}t.forEach((function(o){a++;var s="L-"+o.start+"-"+o.end,c="LS-"+o.start,u="LE-"+o.end,h={};"arrow_open"===o.type?h.arrowhead="none":h.arrowhead="normal";var d="",f="";if(void 0!==o.style){var p=sn(o.style);d=p.style,f=p.labelStyle}else switch(o.stroke){case"normal":d="fill:none",void 0!==r&&(d=r),void 0!==i&&(f=i);break;case"dotted":d="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":d=" stroke-width: 3.5px;fill:none"}h.style=d,h.labelStyle=f,void 0!==o.interpolate?h.curve=an(o.interpolate,l.curveLinear):void 0!==t.defaultInterpolate?h.curve=an(t.defaultInterpolate,l.curveLinear):h.curve=an(ga.curve,l.curveLinear),void 0===o.text?void 0!==o.style&&(h.arrowheadStyle="fill: #333"):(h.arrowheadStyle="fill: #333",h.labelpos="c",ie(qt().flowchart.htmlLabels)?(h.labelType="html",h.label='<span id="L-'.concat(s,'" class="edgeLabel L-').concat(c,"' L-").concat(u,'" style="').concat(h.labelStyle,'">').concat(o.text.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"<i class='".concat(t.replace(":"," "),"'></i>")})),"</span>")):(h.labelType="text",h.label=o.text.replace(oe.lineBreakRegex,"\n"),void 0===o.style&&(h.style=h.style||"stroke: #333; stroke-width: 1.5px;fill:none"),h.labelStyle=h.labelStyle.replace("color:","fill:"))),h.id=s,h.class=c+" "+u,h.minlen=o.length||1,e.setEdge(n.db.lookUpDomId(o.start),n.db.lookUpDomId(o.end),h,a)}))};const ba={setConf:function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)ga[e[n]]=t[e[n]]},addVertices:ya,addEdges:ma,getClasses:function(t,e){o.info("Extracting classes"),e.db.clear();try{return e.parse(t),e.db.getClasses()}catch(t){return}},draw:function(t,e,n,r){o.info("Drawing flowchart"),r.db.clear();var i,a=qt().securityLevel;"sandbox"===a&&(i=(0,l.select)("#i"+e));var s="sandbox"===a?(0,l.select)(i.nodes()[0].contentDocument.body):(0,l.select)("body"),c="sandbox"===a?i.nodes()[0].contentDocument:document;try{r.parser.parse(t)}catch(t){o.debug("Parsing failed")}var u=r.db.getDirection();void 0===u&&(u="TD");for(var h,d=qt().flowchart,f=d.nodeSpacing||50,p=d.rankSpacing||50,g=new(lr().Graph)({multigraph:!0,compound:!0}).setGraph({rankdir:u,nodesep:f,ranksep:p,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),y=r.db.getSubGraphs(),m=y.length-1;m>=0;m--)h=y[m],r.db.addVertex(h.id,h.title,"group",void 0,h.classes);var b=r.db.getVertices();o.warn("Get vertices",b);var v=r.db.getEdges(),_=0;for(_=y.length-1;_>=0;_--){h=y[_],(0,l.selectAll)("cluster").append("text");for(var x=0;x<h.nodes.length;x++)o.warn("Setting subgraph",h.nodes[x],r.db.lookUpDomId(h.nodes[x]),r.db.lookUpDomId(h.id)),g.setParent(r.db.lookUpDomId(h.nodes[x]),r.db.lookUpDomId(h.id))}ya(b,g,e,s,c,r),ma(v,g,r);var k=new(0,ta().render);(function(t){t.shapes().question=ra,t.shapes().hexagon=ia,t.shapes().stadium=ha,t.shapes().subroutine=da,t.shapes().cylinder=fa,t.shapes().rect_left_inv_arrow=aa,t.shapes().lean_right=oa,t.shapes().lean_left=sa,t.shapes().trapezoid=ca,t.shapes().inv_trapezoid=la,t.shapes().rect_right_inv_arrow=ua})(k),k.arrows().none=function(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 0 0 L 0 0 z");ta().util.applyStyle(i,n[r+"Style"])},k.arrows().normal=function(t,e){t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowheadPath").style("stroke-width",1).style("stroke-dasharray","1,0")};var w=s.select('[id="'.concat(e,'"]'));wn(r.db,w,e);var E=s.select("#"+e+" g");for(k(E,g),E.selectAll("g.node").attr("title",(function(){return r.db.getTooltip(this.id)})),r.db.indexNodes("subGraph"+_),_=0;_<y.length;_++)if("undefined"!==(h=y[_]).title){var T=c.querySelectorAll("#"+e+' [id="'+r.db.lookUpDomId(h.id)+'"] rect'),C=c.querySelectorAll("#"+e+' [id="'+r.db.lookUpDomId(h.id)+'"]'),S=T[0].x.baseVal.value,A=T[0].y.baseVal.value,M=T[0].width.baseVal.value,O=(0,l.select)(C[0]).select(".label");O.attr("transform","translate(".concat(S+M/2,", ").concat(A+14,")")),O.attr("id",e+"Text");for(var N=0;N<h.classes.length;N++)C[0].classList.add(h.classes[N])}ie(d.htmlLabels);for(var D=c.querySelectorAll('[id="'+e+'"] .edgeLabel .label'),B=0;B<D.length;B++){var L=D[B],I=L.getBBox(),F=c.createElementNS("http://www.w3.org/2000/svg","rect");F.setAttribute("rx",0),F.setAttribute("ry",0),F.setAttribute("width",I.width),F.setAttribute("height",I.height),L.insertBefore(F,L.firstChild)}vn(g,w,d.diagramPadding,d.useMaxWidth),Object.keys(b).forEach((function(t){var n=b[t];if(n.link){var i=s.select("#"+e+' [id="'+r.db.lookUpDomId(t)+'"]');if(i){var o=c.createElementNS("http://www.w3.org/2000/svg","a");o.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),o.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),o.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===a?o.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):n.linkTarget&&o.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);var l=i.insert((function(){return o}),":first-child"),u=i.select(".label-container");u&&l.append((function(){return u.node()}));var h=i.select(".label");h&&l.append((function(){return h.node()}))}}}))}};var va={},_a=function(t,e,n,r,i,a){var s=r.select('[id="'.concat(n,'"]'));Object.keys(t).forEach((function(n){var r=t[n],c="default";r.classes.length>0&&(c=r.classes.join(" "));var l,u=sn(r.styles),h=void 0!==r.text?r.text:r.id;if(ie(qt().flowchart.htmlLabels)){var d={label:h.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"<i class='".concat(t.replace(":"," "),"'></i>")}))};(l=na()(s,d).node()).parentNode.removeChild(l)}else{var f=i.createElementNS("http://www.w3.org/2000/svg","text");f.setAttribute("style",u.labelStyle.replace("color:","fill:"));for(var p=h.split(oe.lineBreakRegex),g=0;g<p.length;g++){var y=i.createElementNS("http://www.w3.org/2000/svg","tspan");y.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),y.setAttribute("dy","1em"),y.setAttribute("x","1"),y.textContent=p[g],f.appendChild(y)}l=f}var m=0,b="";switch(r.type){case"round":m=5,b="rect";break;case"square":case"group":default:b="rect";break;case"diamond":b="question";break;case"hexagon":b="hexagon";break;case"odd":case"odd_right":b="rect_left_inv_arrow";break;case"lean_right":b="lean_right";break;case"lean_left":b="lean_left";break;case"trapezoid":b="trapezoid";break;case"inv_trapezoid":b="inv_trapezoid";break;case"circle":b="circle";break;case"ellipse":b="ellipse";break;case"stadium":b="stadium";break;case"subroutine":b="subroutine";break;case"cylinder":b="cylinder";break;case"doublecircle":b="doublecircle"}e.setNode(r.id,{labelStyle:u.labelStyle,shape:b,labelText:h,rx:m,ry:m,class:c,style:u.style,id:r.id,link:r.link,linkTarget:r.linkTarget,tooltip:a.db.getTooltip(r.id)||"",domId:a.db.lookUpDomId(r.id),haveCallback:r.haveCallback,width:"group"===r.type?500:void 0,dir:r.dir,type:r.type,props:r.props,padding:qt().flowchart.padding}),o.info("setNode",{labelStyle:u.labelStyle,shape:b,labelText:h,rx:m,ry:m,class:c,style:u.style,id:r.id,domId:a.db.lookUpDomId(r.id),width:"group"===r.type?500:void 0,type:r.type,dir:r.dir,props:r.props,padding:qt().flowchart.padding})}))},xa=function(t,e,n){o.info("abc78 edges = ",t);var r,i,a=0,s={};if(void 0!==t.defaultStyle){var c=sn(t.defaultStyle);r=c.style,i=c.labelStyle}t.forEach((function(n){a++;var c="L-"+n.start+"-"+n.end;void 0===s[c]?(s[c]=0,o.info("abc78 new entry",c,s[c])):(s[c]++,o.info("abc78 new entry",c,s[c]));var u=c+"-"+s[c];o.info("abc78 new link id to be used is",c,u,s[c]);var h="LS-"+n.start,d="LE-"+n.end,f={style:"",labelStyle:""};switch(f.minlen=n.length||1,"arrow_open"===n.type?f.arrowhead="none":f.arrowhead="normal",f.arrowTypeStart="arrow_open",f.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":f.arrowTypeStart="arrow_cross";case"arrow_cross":f.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":f.arrowTypeStart="arrow_point";case"arrow_point":f.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":f.arrowTypeStart="arrow_circle";case"arrow_circle":f.arrowTypeEnd="arrow_circle"}var p="",g="";switch(n.stroke){case"normal":p="fill:none;",void 0!==r&&(p=r),void 0!==i&&(g=i),f.thickness="normal",f.pattern="solid";break;case"dotted":f.thickness="normal",f.pattern="dotted",f.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":f.thickness="thick",f.pattern="solid",f.style="stroke-width: 3.5px;fill:none;"}if(void 0!==n.style){var y=sn(n.style);p=y.style,g=y.labelStyle}f.style=f.style+=p,f.labelStyle=f.labelStyle+=g,void 0!==n.interpolate?f.curve=an(n.interpolate,l.curveLinear):void 0!==t.defaultInterpolate?f.curve=an(t.defaultInterpolate,l.curveLinear):f.curve=an(va.curve,l.curveLinear),void 0===n.text?void 0!==n.style&&(f.arrowheadStyle="fill: #333"):(f.arrowheadStyle="fill: #333",f.labelpos="c"),f.labelType="text",f.label=n.text.replace(oe.lineBreakRegex,"\n"),void 0===n.style&&(f.style=f.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),f.labelStyle=f.labelStyle.replace("color:","fill:"),f.id=u,f.classes="flowchart-link "+h+" "+d,e.setEdge(n.start,n.end,f,a)}))};const ka={setConf:function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)va[e[n]]=t[e[n]]},addVertices:_a,addEdges:xa,getClasses:function(t,e){o.info("Extracting classes"),e.db.clear();try{return e.parse(t),e.db.getClasses()}catch(t){return}},draw:function(t,e,n,r){o.info("Drawing flowchart"),r.db.clear(),Ki.setGen("gen-2"),r.parser.parse(t);var i=r.db.getDirection();void 0===i&&(i="TD");var a,s=qt().flowchart,c=s.nodeSpacing||50,u=s.rankSpacing||50,h=qt().securityLevel;"sandbox"===h&&(a=(0,l.select)("#i"+e));var d,f="sandbox"===h?(0,l.select)(a.nodes()[0].contentDocument.body):(0,l.select)("body"),p="sandbox"===h?a.nodes()[0].contentDocument:document,g=new(lr().Graph)({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:c,ranksep:u,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}})),y=r.db.getSubGraphs();o.info("Subgraphs - ",y);for(var m=y.length-1;m>=0;m--)d=y[m],o.info("Subgraph - ",d),r.db.addVertex(d.id,d.title,"group",void 0,d.classes,d.dir);var b=r.db.getVertices(),v=r.db.getEdges();o.info(v);var _=0;for(_=y.length-1;_>=0;_--){d=y[_],(0,l.selectAll)("cluster").append("text");for(var x=0;x<d.nodes.length;x++)o.info("Setting up subgraphs",d.nodes[x],d.id),g.setParent(d.nodes[x],d.id)}_a(b,g,e,f,p,r),xa(v,g);var k=f.select('[id="'.concat(e,'"]'));wn(r.db,k,e);var w=f.select("#"+e+" g");if(ai(w,g,["point","circle","cross"],"flowchart",e),vn(g,k,s.diagramPadding,s.useMaxWidth),r.db.indexNodes("subGraph"+_),!s.htmlLabels)for(var E=p.querySelectorAll('[id="'+e+'"] .edgeLabel .label'),T=0;T<E.length;T++){var C=E[T],S=C.getBBox(),A=p.createElementNS("http://www.w3.org/2000/svg","rect");A.setAttribute("rx",0),A.setAttribute("ry",0),A.setAttribute("width",S.width),A.setAttribute("height",S.height),C.insertBefore(A,C.firstChild)}Object.keys(b).forEach((function(t){var n=b[t];if(n.link){var r=(0,l.select)("#"+e+' [id="'+t+'"]');if(r){var i=p.createElementNS("http://www.w3.org/2000/svg","a");i.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),i.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),i.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===h?i.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):n.linkTarget&&i.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);var a=r.insert((function(){return i}),":first-child"),o=r.select(".label-container");o&&a.append((function(){return o.node()}));var s=r.select(".label");s&&a.append((function(){return s.node()}))}}}))}};var wa=n(3602),Ea=n.n(wa);function Ta(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var Ca,Sa,Aa="",Ma="",Oa="",Na=[],Da=[],Ba={},La=[],Ia=[],Fa="",Ra=["active","done","crit","milestone"],Pa=[],ja=!1,za=!1,Ya=0,Ua=function(t,e,n,r){return!(r.indexOf(t.format(e.trim()))>=0)&&(t.isoWeekday()>=6&&n.indexOf("weekends")>=0||n.indexOf(t.format("dddd").toLowerCase())>=0||n.indexOf(t.format(e.trim()))>=0)},$a=function(t,e,n,r){if(n.length&&!t.manualEndTime){var a=i()(t.startTime,e,!0);a.add(1,"d");var o=i()(t.endTime,e,!0),s=Wa(a,o,e,n,r);t.endTime=o.toDate(),t.renderEndTime=s}},Wa=function(t,e,n,r,i){for(var a=!1,o=null;t<=e;)a||(o=e.toDate()),(a=Ua(t,n,r,i))&&e.add(1,"d"),t.add(1,"d");return o},qa=function(t,e,n){n=n.trim();var r=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==r){var a=null;if(r[1].split(" ").forEach((function(t){var e=Ka(t);void 0!==e&&(a?e.endTime>a.endTime&&(a=e):a=e)})),a)return a.endTime;var s=new Date;return s.setHours(0,0,0,0),s}var c=i()(n,e.trim(),!0);return c.isValid()?c.toDate():(o.debug("Invalid date:"+n),o.debug("With date format:"+e.trim()),new Date)},Ha=function(t,e){if(null!==t)switch(t[2]){case"ms":e.add(t[1],"milliseconds");break;case"s":e.add(t[1],"seconds");break;case"m":e.add(t[1],"minutes");break;case"h":e.add(t[1],"hours");break;case"d":e.add(t[1],"days");break;case"w":e.add(t[1],"weeks")}return e.toDate()},Va=function(t,e,n,r){r=r||!1,n=n.trim();var a=i()(n,e.trim(),!0);return a.isValid()?(r&&a.add(1,"d"),a.toDate()):Ha(/^([\d]+)([wdhms]|ms)$/.exec(n.trim()),i()(t))},Ga=0,Xa=function(t){return void 0===t?"task"+(Ga+=1):t},Za=[],Qa={},Ka=function(t){var e=Qa[t];return Za[e]},Ja=function(){for(var t=function(t){var e=Za[t],n="";switch(Za[t].raw.startTime.type){case"prevTaskEnd":var r=Ka(e.prevTaskId);e.startTime=r.endTime;break;case"getStartDate":(n=qa(0,Aa,Za[t].raw.startTime.startData))&&(Za[t].startTime=n)}return Za[t].startTime&&(Za[t].endTime=Va(Za[t].startTime,Aa,Za[t].raw.endTime.data,ja),Za[t].endTime&&(Za[t].processed=!0,Za[t].manualEndTime=i()(Za[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),$a(Za[t],Aa,Da,Na))),Za[t].processed},e=!0,n=0;n<Za.length;n++)t(n),e=e&&Za[n].processed;return e},to=function(t,e){t.split(",").forEach((function(t){var n=Ka(t);void 0!==n&&n.classes.push(e)}))},eo=function(t,e){Pa.push((function(){var n=document.querySelector('[id="'.concat(t,'"]'));null!==n&&n.addEventListener("click",(function(){e()}))})),Pa.push((function(){var n=document.querySelector('[id="'.concat(t,'-text"]'));null!==n&&n.addEventListener("click",(function(){e()}))}))};const no={parseDirective:function(t,e,n){Nl.parseDirective(this,t,e,n)},getConfig:function(){return qt().gantt},clear:function(){La=[],Ia=[],Fa="",Pa=[],Ga=0,Ca=void 0,Sa=void 0,Za=[],Aa="",Ma="",Oa="",Na=[],Da=[],ja=!1,za=!1,Ya=0,Ba={},he()},setDateFormat:function(t){Aa=t},getDateFormat:function(){return Aa},enableInclusiveEndDates:function(){ja=!0},endDatesAreInclusive:function(){return ja},enableTopAxis:function(){za=!0},topAxisEnabled:function(){return za},setAxisFormat:function(t){Ma=t},getAxisFormat:function(){return Ma},setTodayMarker:function(t){Oa=t},getTodayMarker:function(){return Oa},setAccTitle:de,getAccTitle:fe,setDiagramTitle:ye,getDiagramTitle:me,setAccDescription:pe,getAccDescription:ge,addSection:function(t){Fa=t,La.push(t)},getSections:function(){return La},getTasks:function(){for(var t=Ja(),e=0;!t&&e<10;)t=Ja(),e++;return Ia=Za},addTask:function(t,e){var n={section:Fa,type:Fa,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},r=function(t,e){var n=(":"===e.substr(0,1)?e.substr(1,e.length):e).split(","),r={};ro(n,r,Ra);for(var i=0;i<n.length;i++)n[i]=n[i].trim();switch(n.length){case 1:r.id=Xa(),r.startTime={type:"prevTaskEnd",id:t},r.endTime={data:n[0]};break;case 2:r.id=Xa(),r.startTime={type:"getStartDate",startData:n[0]},r.endTime={data:n[1]};break;case 3:r.id=Xa(n[0]),r.startTime={type:"getStartDate",startData:n[1]},r.endTime={data:n[2]}}return r}(Sa,e);n.raw.startTime=r.startTime,n.raw.endTime=r.endTime,n.id=r.id,n.prevTaskId=Sa,n.active=r.active,n.done=r.done,n.crit=r.crit,n.milestone=r.milestone,n.order=Ya,Ya++;var i=Za.push(n);Sa=n.id,Qa[n.id]=i-1},findTaskById:Ka,addTaskOrg:function(t,e){var n={section:Fa,type:Fa,description:t,task:t,classes:[]},r=function(t,e){var n=(":"===e.substr(0,1)?e.substr(1,e.length):e).split(","),r={};ro(n,r,Ra);for(var a=0;a<n.length;a++)n[a]=n[a].trim();var o="";switch(n.length){case 1:r.id=Xa(),r.startTime=t.endTime,o=n[0];break;case 2:r.id=Xa(),r.startTime=qa(0,Aa,n[0]),o=n[1];break;case 3:r.id=Xa(n[0]),r.startTime=qa(0,Aa,n[1]),o=n[2]}return o&&(r.endTime=Va(r.startTime,Aa,o,ja),r.manualEndTime=i()(o,"YYYY-MM-DD",!0).isValid(),$a(r,Aa,Da,Na)),r}(Ca,e);n.startTime=r.startTime,n.endTime=r.endTime,n.id=r.id,n.active=r.active,n.done=r.done,n.crit=r.crit,n.milestone=r.milestone,Ca=n,Ia.push(n)},setIncludes:function(t){Na=t.toLowerCase().split(/[\s,]+/)},getIncludes:function(){return Na},setExcludes:function(t){Da=t.toLowerCase().split(/[\s,]+/)},getExcludes:function(){return Da},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){if("loose"===qt().securityLevel&&void 0!==e){var r=[];if("string"==typeof n){r=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var i=0;i<r.length;i++){var a=r[i].trim();'"'===a.charAt(0)&&'"'===a.charAt(a.length-1)&&(a=a.substr(1,a.length-2)),r[i]=a}}0===r.length&&r.push(t),void 0!==Ka(t)&&eo(t,(function(){var t;kn.runFunc.apply(kn,[e].concat(function(t){if(Array.isArray(t))return Ta(t)}(t=r)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Ta(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ta(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))}))}}(t,e,n)})),to(t,"clickable")},setLink:function(t,e){var n=e;"loose"!==qt().securityLevel&&(n=(0,Ie.N)(e)),t.split(",").forEach((function(t){void 0!==Ka(t)&&(eo(t,(function(){window.open(n,"_self")})),Ba[t]=n)})),to(t,"clickable")},getLinks:function(){return Ba},bindFunctions:function(t){Pa.forEach((function(e){e(t)}))},durationToDate:Ha,isInvalidDate:Ua};function ro(t,e,n){for(var r=!0;r;)r=!1,n.forEach((function(n){var i=new RegExp("^\\s*"+n+"\\s*$");t[0].match(i)&&(e[n]=!0,t.shift(1),r=!0)}))}var io;const ao={setConf:function(){o.debug("Something is calling, setConf, remove the call")},draw:function(t,e,n,r){var a,o=qt().gantt,s=qt().securityLevel;"sandbox"===s&&(a=(0,l.select)("#i"+e));var c="sandbox"===s?(0,l.select)(a.nodes()[0].contentDocument.body):(0,l.select)("body"),u="sandbox"===s?a.nodes()[0].contentDocument:document,h=u.getElementById(e);void 0===(io=h.parentElement.offsetWidth)&&(io=1200),void 0!==o.useWidth&&(io=o.useWidth);var d=r.db.getTasks(),f=d.length*(o.barHeight+o.barGap)+2*o.topPadding;h.setAttribute("viewBox","0 0 "+io+" "+f);for(var p=c.select('[id="'.concat(e,'"]')),g=(0,l.scaleTime)().domain([(0,l.min)(d,(function(t){return t.startTime})),(0,l.max)(d,(function(t){return t.endTime}))]).rangeRound([0,io-o.leftPadding-o.rightPadding]),y=[],m=0;m<d.length;m++)y.push(d[m].type);var b=y;y=function(t){for(var e={},n=[],r=0,i=t.length;r<i;++r)Object.prototype.hasOwnProperty.call(e,t[r])||(e[t[r]]=!0,n.push(t[r]));return n}(y),d.sort((function(t,e){var n=t.startTime,r=e.startTime,i=0;return n>r?i=1:n<r&&(i=-1),i})),function(t,n,a){var s=o.barHeight,c=s+o.barGap,h=o.topPadding,d=o.leftPadding;(0,l.scaleLinear)().domain([0,y.length]).range(["#00B9FA","#F95002"]).interpolate(l.interpolateHcl),function(t,e,n,a,s,c,l,u){var h=c.reduce((function(t,e){var n=e.startTime;return t?Math.min(t,n):n}),0),d=c.reduce((function(t,e){var n=e.endTime;return t?Math.max(t,n):n}),0),f=r.db.getDateFormat();if(h&&d){for(var y=[],m=null,b=i()(h);b.valueOf()<=d;)r.db.isInvalidDate(b,f,l,u)?m?m.end=b.clone():m={start:b.clone(),end:b.clone()}:m&&(y.push(m),m=null),b.add(1,"d");p.append("g").selectAll("rect").data(y).enter().append("rect").attr("id",(function(t){return"exclude-"+t.start.format("YYYY-MM-DD")})).attr("x",(function(t){return g(t.start)+n})).attr("y",o.gridLineStartPadding).attr("width",(function(t){var e=t.end.clone().add(1,"day");return g(e)-g(t.start)})).attr("height",s-e-o.gridLineStartPadding).attr("transform-origin",(function(e,r){return(g(e.start)+n+.5*(g(e.end)-g(e.start))).toString()+"px "+(r*t+.5*s).toString()+"px"})).attr("class","exclude-range")}}(c,h,d,0,a,t,r.db.getExcludes(),r.db.getIncludes()),function(t,e,n,i){var a=(0,l.axisBottom)(g).tickSize(-i+e+o.gridLineStartPadding).tickFormat((0,l.timeFormat)(r.db.getAxisFormat()||o.axisFormat||"%Y-%m-%d"));if(p.append("g").attr("class","grid").attr("transform","translate("+t+", "+(i-50)+")").call(a).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),r.db.topAxisEnabled()||o.topAxis){var s=(0,l.axisTop)(g).tickSize(-i+e+o.gridLineStartPadding).tickFormat((0,l.timeFormat)(r.db.getAxisFormat()||o.axisFormat||"%Y-%m-%d"));p.append("g").attr("class","grid").attr("transform","translate("+t+", "+e+")").call(s).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}(d,h,0,a),function(t,n,i,a,s,c,u){p.append("g").selectAll("rect").data(t).enter().append("rect").attr("x",0).attr("y",(function(t,e){return t.order*n+i-2})).attr("width",(function(){return u-o.rightPadding/2})).attr("height",n).attr("class",(function(t){for(var e=0;e<y.length;e++)if(t.type===y[e])return"section section"+e%o.numberSectionStyles;return"section section0"}));var h=p.append("g").selectAll("rect").data(t).enter(),d=r.db.getLinks();if(h.append("rect").attr("id",(function(t){return t.id})).attr("rx",3).attr("ry",3).attr("x",(function(t){return t.milestone?g(t.startTime)+a+.5*(g(t.endTime)-g(t.startTime))-.5*s:g(t.startTime)+a})).attr("y",(function(t,e){return t.order*n+i})).attr("width",(function(t){return t.milestone?s:g(t.renderEndTime||t.endTime)-g(t.startTime)})).attr("height",s).attr("transform-origin",(function(t,e){return e=t.order,(g(t.startTime)+a+.5*(g(t.endTime)-g(t.startTime))).toString()+"px "+(e*n+i+.5*s).toString()+"px"})).attr("class",(function(t){var e="";t.classes.length>0&&(e=t.classes.join(" "));for(var n=0,r=0;r<y.length;r++)t.type===y[r]&&(n=r%o.numberSectionStyles);var i="";return t.active?t.crit?i+=" activeCrit":i=" active":t.done?i=t.crit?" doneCrit":" done":t.crit&&(i+=" crit"),0===i.length&&(i=" task"),t.milestone&&(i=" milestone "+i),"task"+(i+=n)+" "+e})),h.append("text").attr("id",(function(t){return t.id+"-text"})).text((function(t){return t.task})).attr("font-size",o.fontSize).attr("x",(function(t){var e=g(t.startTime),n=g(t.renderEndTime||t.endTime);t.milestone&&(e+=.5*(g(t.endTime)-g(t.startTime))-.5*s),t.milestone&&(n=e+s);var r=this.getBBox().width;return r>n-e?n+r+1.5*o.leftPadding>u?e+a-5:n+a+5:(n-e)/2+e+a})).attr("y",(function(t,e){return t.order*n+o.barHeight/2+(o.fontSize/2-2)+i})).attr("text-height",s).attr("class",(function(t){var e=g(t.startTime),n=g(t.endTime);t.milestone&&(n=e+s);var r=this.getBBox().width,i="";t.classes.length>0&&(i=t.classes.join(" "));for(var a=0,c=0;c<y.length;c++)t.type===y[c]&&(a=c%o.numberSectionStyles);var l="";return t.active&&(l=t.crit?"activeCritText"+a:"activeText"+a),t.done?l=t.crit?l+" doneCritText"+a:l+" doneText"+a:t.crit&&(l=l+" critText"+a),t.milestone&&(l+=" milestoneText"),r>n-e?n+r+1.5*o.leftPadding>u?i+" taskTextOutsideLeft taskTextOutside"+a+" "+l:i+" taskTextOutsideRight taskTextOutside"+a+" "+l+" width-"+r:i+" taskText taskText"+a+" "+l+" width-"+r})),"sandbox"===qt().securityLevel){var f;f=(0,l.select)("#i"+e),(0,l.select)(f.nodes()[0].contentDocument.body);var m=f.nodes()[0].contentDocument;h.filter((function(t){return void 0!==d[t.id]})).each((function(t){var e=m.querySelector("#"+t.id),n=m.querySelector("#"+t.id+"-text"),r=e.parentNode,i=m.createElement("a");i.setAttribute("xlink:href",d[t.id]),i.setAttribute("target","_top"),r.appendChild(i),i.appendChild(e),i.appendChild(n)}))}}(t,c,h,d,s,0,n),function(t,e){for(var n=[],r=0,i=0;i<y.length;i++)n[i]=[y[i],(a=y[i],s=b,function(t){for(var e=t.length,n={};e;)n[t[--e]]=(n[t[e]]||0)+1;return n}(s)[a]||0)];var a,s;p.append("g").selectAll("text").data(n).enter().append((function(t){var e=t[0].split(oe.lineBreakRegex),n=-(e.length-1)/2,r=u.createElementNS("http://www.w3.org/2000/svg","text");r.setAttribute("dy",n+"em");for(var i=0;i<e.length;i++){var a=u.createElementNS("http://www.w3.org/2000/svg","tspan");a.setAttribute("alignment-baseline","central"),a.setAttribute("x","10"),i>0&&a.setAttribute("dy","1em"),a.textContent=e[i],r.appendChild(a)}return r})).attr("x",10).attr("y",(function(i,a){if(!(a>0))return i[1]*t/2+e;for(var o=0;o<a;o++)return r+=n[a-1][1],i[1]*t/2+r*t+e})).attr("font-size",o.sectionFontSize).attr("font-size",o.sectionFontSize).attr("class",(function(t){for(var e=0;e<y.length;e++)if(t[0]===y[e])return"sectionTitle sectionTitle"+e%o.numberSectionStyles;return"sectionTitle"}))}(c,h),function(t,e,n,i){var a=r.db.getTodayMarker();if("off"!==a){var s=p.append("g").attr("class","today"),c=new Date,l=s.append("line");l.attr("x1",g(c)+t).attr("x2",g(c)+t).attr("y1",o.titleTopMargin).attr("y2",i-o.titleTopMargin).attr("class","today"),""!==a&&l.attr("style",a.replace(/,/g,";"))}}(d,0,0,a)}(d,io,f),bn(p,0,io,o.useMaxWidth),p.append("text").text(r.db.getDiagramTitle()).attr("x",io/2).attr("y",o.titleTopMargin).attr("class","titleText"),wn(r.db,p,e)}};var oo=n(9959),so=n.n(oo),co="",lo=!1;const uo={setMessage:function(t){o.debug("Setting message to: "+t),co=t},getMessage:function(){return co},setInfo:function(t){lo=t},getInfo:function(){return lo}},ho={draw:function(t,e,n,r){try{o.debug("Renering info diagram\n"+t);var i,a=qt().securityLevel;"sandbox"===a&&(i=(0,l.select)("#i"+e));var s="sandbox"===a?(0,l.select)(i.nodes()[0].contentDocument.body):(0,l.select)("body"),c=("sandbox"===a?i.nodes()[0].contentDocument:document,s.select("#"+e));c.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("v "+n),c.attr("height",100),c.attr("width",400)}catch(t){o.error("Error while rendering info diagram"),o.error(t.message)}}};var fo=n(6765),po=n.n(fo),go=n(7062),yo=n.n(go),mo={},bo=!1;const vo={parseDirective:function(t,e,n){Nl.parseDirective(this,t,e,n)},getConfig:function(){return qt().pie},addSection:function(t,e){t=oe.sanitizeText(t,qt()),void 0===mo[t]&&(mo[t]=e,o.debug("Added new section :",t))},getSections:function(){return mo},cleanupValue:function(t){return":"===t.substring(0,1)?(t=t.substring(1).trim(),Number(t.trim())):Number(t.trim())},clear:function(){mo={},bo=!1,he()},setAccTitle:de,getAccTitle:fe,setDiagramTitle:ye,getDiagramTitle:me,setShowData:function(t){bo=t},getShowData:function(){return bo},getAccDescription:ge,setAccDescription:pe};var _o,xo=qt();const ko={draw:function(t,e,n,r){try{xo=qt(),o.debug("Rendering info diagram\n"+t);var i,a=qt().securityLevel;"sandbox"===a&&(i=(0,l.select)("#i"+e));var s="sandbox"===a?(0,l.select)(i.nodes()[0].contentDocument.body):(0,l.select)("body"),c="sandbox"===a?i.nodes()[0].contentDocument:document;r.db.clear(),r.parser.parse(t),o.debug("Parsed info diagram");var u=c.getElementById(e);void 0===(_o=u.parentElement.offsetWidth)&&(_o=1200),void 0!==xo.useWidth&&(_o=xo.useWidth),void 0!==xo.pie.useWidth&&(_o=xo.pie.useWidth);var h=s.select("#"+e);bn(h,0,_o,xo.pie.useMaxWidth),wn(r.db,h,e),u.setAttribute("viewBox","0 0 "+_o+" 450");var d=Math.min(_o,450)/2-40,f=h.append("g").attr("transform","translate("+_o/2+",225)"),p=r.db.getSections(),g=0;Object.keys(p).forEach((function(t){g+=p[t]}));var y=xo.themeVariables,m=[y.pie1,y.pie2,y.pie3,y.pie4,y.pie5,y.pie6,y.pie7,y.pie8,y.pie9,y.pie10,y.pie11,y.pie12],b=(0,l.scaleOrdinal)().range(m),v=(0,l.pie)().value((function(t){return t[1]}))(Object.entries(p)),_=(0,l.arc)().innerRadius(0).outerRadius(d);f.selectAll("mySlices").data(v).enter().append("path").attr("d",_).attr("fill",(function(t){return b(t.data[0])})).attr("class","pieCircle"),f.selectAll("mySlices").data(v).enter().append("text").text((function(t){return(t.data[1]/g*100).toFixed(0)+"%"})).attr("transform",(function(t){return"translate("+_.centroid(t)+")"})).style("text-anchor","middle").attr("class","slice"),f.append("text").text(r.db.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");var x=f.selectAll(".legend").data(b.domain()).enter().append("g").attr("class","legend").attr("transform",(function(t,e){return"translate(216,"+(22*e-22*b.domain().length/2)+")"}));x.append("rect").attr("width",18).attr("height",18).style("fill",b).style("stroke",b),x.data(v).append("text").attr("x",22).attr("y",14).text((function(t){return r.db.getShowData()||xo.showData||xo.pie.showData?t.data[0]+" ["+t.data[1]+"]":t.data[0]}))}catch(t){o.error("Error while rendering info diagram"),o.error(t)}}};var wo=n(3176),Eo=n.n(wo),To=[],Co={},So={},Ao={},Mo={};const Oo={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},parseDirective:function(t,e,n){Nl.parseDirective(this,t,e,n)},getConfig:function(){return qt().req},addRequirement:function(t,e){return void 0===So[t]&&(So[t]={name:t,type:e,id:Co.id,text:Co.text,risk:Co.risk,verifyMethod:Co.verifyMethod}),Co={},So[t]},getRequirements:function(){return So},setNewReqId:function(t){void 0!==Co&&(Co.id=t)},setNewReqText:function(t){void 0!==Co&&(Co.text=t)},setNewReqRisk:function(t){void 0!==Co&&(Co.risk=t)},setNewReqVerifyMethod:function(t){void 0!==Co&&(Co.verifyMethod=t)},setAccTitle:de,getAccTitle:fe,setAccDescription:pe,getAccDescription:ge,addElement:function(t){return void 0===Mo[t]&&(Mo[t]={name:t,type:Ao.type,docRef:Ao.docRef},o.info("Added new requirement: ",t)),Ao={},Mo[t]},getElements:function(){return Mo},setNewElementType:function(t){void 0!==Ao&&(Ao.type=t)},setNewElementDocRef:function(t){void 0!==Ao&&(Ao.docRef=t)},addRelationship:function(t,e,n){To.push({type:t,src:e,dst:n})},getRelationships:function(){return To},clear:function(){To=[],Co={},So={},Ao={},Mo={},he()}};var No={CONTAINS:"contains",ARROW:"arrow"};const Do=No;var Bo={},Lo=0,Io=function(t,e){return t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",Bo.rect_min_width+"px").attr("height",Bo.rect_min_height+"px")},Fo=function(t,e,n){var r=Bo.rect_min_width/2,i=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",r).attr("y",Bo.rect_padding).attr("dominant-baseline","hanging"),a=0;n.forEach((function(t){0==a?i.append("tspan").attr("text-anchor","middle").attr("x",Bo.rect_min_width/2).attr("dy",0).text(t):i.append("tspan").attr("text-anchor","middle").attr("x",Bo.rect_min_width/2).attr("dy",.75*Bo.line_height).text(t),a++}));var o=1.5*Bo.rect_padding+a*Bo.line_height*.75;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",Bo.rect_min_width).attr("y1",o).attr("y2",o),{titleNode:i,y:o}},Ro=function(t,e,n,r){var i=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",Bo.rect_padding).attr("y",r).attr("dominant-baseline","hanging"),a=0,o=[];return n.forEach((function(t){for(var e=t.length;e>30&&a<3;){var n=t.substring(0,30);e=(t=t.substring(30,t.length)).length,o[o.length]=n,a++}if(3==a){var r=o[o.length-1];o[o.length-1]=r.substring(0,r.length-4)+"..."}else o[o.length]=t;a=0})),o.forEach((function(t){i.append("tspan").attr("x",Bo.rect_padding).attr("dy",Bo.line_height).text(t)})),i},Po=function(t){return t.replace(/\s/g,"").replace(/\./g,"_")};const jo={draw:function(t,e,n,r){Bo=qt().requirement,r.db.clear(),r.parser.parse(t);var i,a=Bo.securityLevel;"sandbox"===a&&(i=(0,l.select)("#i"+e));var s="sandbox"===a?(0,l.select)(i.nodes()[0].contentDocument.body):(0,l.select)("body"),c=("sandbox"===a?i.nodes()[0].contentDocument:document,s.select("[id='".concat(e,"']")));!function(t,e){var n=t.append("defs").append("marker").attr("id",No.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");n.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),n.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),n.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",No.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d","M0,0\n L".concat(e.line_height,",").concat(e.line_height/2,"\n M").concat(e.line_height,",").concat(e.line_height/2,"\n L0,").concat(e.line_height)).attr("stroke-width",1)}(c,Bo);var u,h,d,f=new(lr().Graph)({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:Bo.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}})),p=r.db.getRequirements(),g=r.db.getElements(),y=r.db.getRelationships();u=p,h=f,d=c,Object.keys(u).forEach((function(t){var e=u[t];t=Po(t),o.info("Added new requirement: ",t);var n=d.append("g").attr("id",t),r=Io(n,"req-"+t),i=[],a=Fo(n,t+"_title",["<<".concat(e.type,">>"),"".concat(e.name)]);i.push(a.titleNode);var s=Ro(n,t+"_body",["Id: ".concat(e.id),"Text: ".concat(e.text),"Risk: ".concat(e.risk),"Verification: ".concat(e.verifyMethod)],a.y);i.push(s);var c=r.node().getBBox();h.setNode(t,{width:c.width,height:c.height,shape:"rect",id:t})})),function(t,e,n){Object.keys(t).forEach((function(r){var i=t[r],a=Po(r),o=n.append("g").attr("id",a),s="element-"+a,c=Io(o,s),l=[],u=Fo(o,s+"_title",["<<Element>>","".concat(r)]);l.push(u.titleNode);var h=Ro(o,s+"_body",["Type: ".concat(i.type||"Not Specified"),"Doc Ref: ".concat(i.docRef||"None")],u.y);l.push(h);var d=c.node().getBBox();e.setNode(a,{width:d.width,height:d.height,shape:"rect",id:a})}))}(g,f,c),function(t,e){t.forEach((function(t){var n=Po(t.src),r=Po(t.dst);e.setEdge(n,r,{relationship:t})}))}(y,f),sr().layout(f),function(t,e){e.nodes().forEach((function(n){void 0!==n&&void 0!==e.node(n)&&(t.select("#"+n),t.select("#"+n).attr("transform","translate("+(e.node(n).x-e.node(n).width/2)+","+(e.node(n).y-e.node(n).height/2)+" )"))}))}(c,f),y.forEach((function(t){!function(t,e,n,r,i){var a=n.edge(Po(e.src),Po(e.dst)),o=(0,l.line)().x((function(t){return t.x})).y((function(t){return t.y})),s=t.insert("path","#"+r).attr("class","er relationshipLine").attr("d",o(a.points)).attr("fill","none");e.type==i.db.Relationships.CONTAINS?s.attr("marker-start","url("+oe.getUrl(Bo.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(s.attr("stroke-dasharray","10,7"),s.attr("marker-end","url("+oe.getUrl(Bo.arrowMarkerAbsolute)+"#"+Do.ARROW+"_line_ending)")),function(t,e,n,r){var i=e.node().getTotalLength(),a=e.node().getPointAtLength(.5*i),o="rel"+Lo;Lo++;var s=t.append("text").attr("class","req relationshipLabel").attr("id",o).attr("x",a.x).attr("y",a.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(r).node().getBBox();t.insert("rect","#"+o).attr("class","req reqLabelBox").attr("x",a.x-s.width/2).attr("y",a.y-s.height/2).attr("width",s.width).attr("height",s.height).attr("fill","white").attr("fill-opacity","85%")}(t,s,0,"<<".concat(e.type,">>"))}(c,t,f,e,r)}));var m=Bo.rect_padding,b=c.node().getBBox(),v=b.width+2*m,_=b.height+2*m;bn(c,0,v,Bo.useMaxWidth),c.attr("viewBox","".concat(b.x-m," ").concat(b.y-m," ").concat(v," ").concat(_)),wn(r.db,c,e)}};var zo,Yo=n(6876),Uo=n.n(Yo),$o=void 0,Wo={},qo=[],Ho=[],Vo=!1,Go=function(t,e,n,r){var i=Wo[t];i&&e===i.name&&null==n||(null!=n&&null!=n.text||(n={text:e,wrap:null,type:r}),null!=r&&null!=n.text||(n={text:e,wrap:null,type:r}),Wo[t]={name:e,description:n.text,wrap:void 0===n.wrap&&Ko()||!!n.wrap,prevActor:$o,links:{},properties:{},actorCnt:null,rectData:null,type:r||"participant"},$o&&Wo[$o]&&(Wo[$o].nextActor=t),$o=t)},Xo=function(t){var e,n=0;for(e=0;e<qo.length;e++)qo[e].type===Jo.ACTIVE_START&&qo[e].from.actor===t&&n++,qo[e].type===Jo.ACTIVE_END&&qo[e].from.actor===t&&n--;return n},Zo=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{text:void 0,wrap:void 0},r=arguments.length>3?arguments[3]:void 0;if(r===Jo.ACTIVE_END){var i=Xo(t.actor);if(i<1){var a=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw a.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},a}}return qo.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&Ko()||!!n.wrap,type:r}),!0},Qo=function(t){return Wo[t]},Ko=function(){return void 0!==zo?zo:qt().sequence.wrap},Jo={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31},ts=function(t,e,n){var r={actor:t,placement:e,message:n.text,wrap:void 0===n.wrap&&Ko()||!!n.wrap},i=[].concat(t,t);Ho.push(r),qo.push({from:i[0],to:i[1],message:n.text,wrap:void 0===n.wrap&&Ko()||!!n.wrap,type:Jo.NOTE,placement:e})},es=function(t,e){var n=Qo(t);try{var r=te(e.text,qt());r=(r=r.replace(/&/g,"&")).replace(/=/g,"="),ns(n,JSON.parse(r))}catch(t){o.error("error while parsing actor link text",t)}};function ns(t,e){if(null==t.links)t.links=e;else for(var n in e)t.links[n]=e[n]}var rs=function(t,e){var n=Qo(t);try{var r=te(e.text,qt());is(n,JSON.parse(r))}catch(t){o.error("error while parsing actor properties text",t)}};function is(t,e){if(null==t.properties)t.properties=e;else for(var n in e)t.properties[n]=e[n]}var as=function(t,e){var n=Qo(t),r=document.getElementById(e.text);try{var i=r.innerHTML,a=JSON.parse(i);a.properties&&is(n,a.properties),a.links&&ns(n,a.links)}catch(t){o.error("error while parsing actor details text",t)}};const os={addActor:Go,addMessage:function(t,e,n,r){qo.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&Ko()||!!n.wrap,answer:r})},addSignal:Zo,addLinks:es,addDetails:as,addProperties:rs,autoWrap:Ko,setWrap:function(t){zo=t},enableSequenceNumbers:function(){Vo=!0},disableSequenceNumbers:function(){Vo=!1},showSequenceNumbers:function(){return Vo},getMessages:function(){return qo},getActors:function(){return Wo},getActor:Qo,getActorKeys:function(){return Object.keys(Wo)},getActorProperty:function(t,e){if(void 0!==t&&void 0!==t.properties)return t.properties[e]},getAccTitle:fe,getDiagramTitle:me,setDiagramTitle:ye,parseDirective:function(t,e,n){Nl.parseDirective(this,t,e,n)},getConfig:function(){return qt().sequence},clear:function(){Wo={},qo=[],Vo=!1,he()},parseMessage:function(t){var e=t.trim(),n={text:e.replace(/^[:]?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^[:]?wrap:/)||null===e.match(/^[:]?nowrap:/)&&void 0};return o.debug("parseMessage:",n),n},LINETYPE:Jo,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:ts,setAccTitle:de,apply:function t(e){if(e instanceof Array)e.forEach((function(e){t(e)}));else switch(e.type){case"sequenceIndex":qo.push({from:void 0,to:void 0,message:{start:e.sequenceIndex,step:e.sequenceIndexStep,visible:e.sequenceVisible},wrap:!1,type:e.signalType});break;case"addParticipant":Go(e.actor,e.actor,e.description,"participant");break;case"addActor":Go(e.actor,e.actor,e.description,"actor");break;case"activeStart":case"activeEnd":Zo(e.actor,void 0,void 0,e.signalType);break;case"addNote":ts(e.actor,e.placement,e.text);break;case"addLinks":es(e.actor,e.text);break;case"addALink":!function(t,e){var n=Qo(t);try{var r={},i=te(e.text,qt()),a=i.indexOf("@"),s=(i=(i=i.replace(/&/g,"&")).replace(/=/g,"=")).slice(0,a-1).trim(),c=i.slice(a+1).trim();r[s]=c,ns(n,r)}catch(t){o.error("error while parsing actor link text",t)}}(e.actor,e.text);break;case"addProperties":rs(e.actor,e.text);break;case"addDetails":as(e.actor,e.text);break;case"addMessage":Zo(e.from,e.to,e.msg,e.signalType);break;case"loopStart":Zo(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":case"rectEnd":case"optEnd":case"altEnd":case"parEnd":case"criticalEnd":case"breakEnd":Zo(void 0,void 0,void 0,e.signalType);break;case"rectStart":Zo(void 0,void 0,e.color,e.signalType);break;case"optStart":Zo(void 0,void 0,e.optText,e.signalType);break;case"altStart":case"else":Zo(void 0,void 0,e.altText,e.signalType);break;case"setAccTitle":de(e.text);break;case"parStart":case"and":Zo(void 0,void 0,e.parText,e.signalType);break;case"criticalStart":Zo(void 0,void 0,e.criticalText,e.signalType);break;case"option":Zo(void 0,void 0,e.optionText,e.signalType);break;case"breakStart":Zo(void 0,void 0,e.breakText,e.signalType)}},setAccDescription:pe,getAccDescription:ge};var ss=[],cs=function(t,e){var n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},ls=function(t,e){var n;n=function(){var n=document.querySelectorAll(t);0!==n.length&&(n[0].addEventListener("mouseover",(function(){us("actor"+e+"_popup")})),n[0].addEventListener("mouseout",(function(){hs("actor"+e+"_popup")})))},ss.push(n)},us=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="block")},hs=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="none")},ds=function(t,e){var n=0,r=0,i=e.text.split(oe.lineBreakRegex),a=[],o=0,s=function(){return e.y};if(void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0)switch(e.valign){case"top":case"start":s=function(){return Math.round(e.y+e.textMargin)};break;case"middle":case"center":s=function(){return Math.round(e.y+(n+r+e.textMargin)/2)};break;case"bottom":case"end":s=function(){return Math.round(e.y+(n+r+2*e.textMargin)-e.textMargin)}}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle"}for(var c=0;c<i.length;c++){var l=i[c];void 0!==e.textMargin&&0===e.textMargin&&void 0!==e.fontSize&&(o=c*e.fontSize);var u=t.append("text");if(u.attr("x",e.x),u.attr("y",s()),void 0!==e.anchor&&u.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),void 0!==e.fontFamily&&u.style("font-family",e.fontFamily),void 0!==e.fontSize&&u.style("font-size",e.fontSize),void 0!==e.fontWeight&&u.style("font-weight",e.fontWeight),void 0!==e.fill&&u.attr("fill",e.fill),void 0!==e.class&&u.attr("class",e.class),void 0!==e.dy?u.attr("dy",e.dy):0!==o&&u.attr("dy",o),e.tspan){var h=u.append("tspan");h.attr("x",e.x),void 0!==e.fill&&h.attr("fill",e.fill),h.text(l)}else u.text(l);void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0&&(r+=(u._groups||u)[0][0].getBBox().height,n=r),a.push(u)}return a},fs=-1,ps=function(){function t(t,e,n,i,a,o,s){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("text-anchor","middle").text(t),s)}function e(t,e,n,i,a,o,s,c){for(var l=c.actorFontSize,u=c.actorFontFamily,h=c.actorFontWeight,d=l&&l.replace?l.replace("px",""):l,f=t.split(oe.lineBreakRegex),p=0;p<f.length;p++){var g=p*d-d*(f.length-1)/2,y=e.append("text").attr("x",n+a/2).attr("y",i).style("text-anchor","middle").style("font-size",l).style("font-weight",h).style("font-family",u);y.append("tspan").attr("x",n+a/2).attr("dy",g).text(f[p]),y.attr("y",i+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),r(y,s)}}function n(t,n,i,a,o,s,c,l){var u=n.append("switch"),h=u.append("foreignObject").attr("x",i).attr("y",a).attr("width",o).attr("height",s).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,u,i,a,o,s,c,l),r(h,c)}function r(t,e){for(var n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}(),gs=function(){function t(t,e,n,i,a,o,s){r(e.append("text").attr("x",n).attr("y",i).style("text-anchor","start").text(t),s)}function e(t,e,n,i,a,o,s,c){for(var l=c.actorFontSize,u=c.actorFontFamily,h=c.actorFontWeight,d=t.split(oe.lineBreakRegex),f=0;f<d.length;f++){var p=f*l-l*(d.length-1)/2,g=e.append("text").attr("x",n).attr("y",i).style("text-anchor","start").style("font-size",l).style("font-weight",h).style("font-family",u);g.append("tspan").attr("x",n).attr("dy",p).text(d[f]),g.attr("y",i+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),r(g,s)}}function n(t,n,i,a,o,s,c,l){var u=n.append("switch"),h=u.append("foreignObject").attr("x",i).attr("y",a).attr("width",o).attr("height",s).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,u,i,a,0,s,c,l),r(h,c)}function r(t,e){for(var n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}();const ys=cs,ms=function(t,e,n){switch(e.type){case"actor":return function(t,e,n){var r=e.x+e.width/2;0===e.y&&(fs++,t.append("line").attr("id","actor"+fs).attr("x1",r).attr("y1",80).attr("x2",r).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));var i=t.append("g");i.attr("class","actor-man");var a={x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0};a.x=e.x,a.y=e.y,a.fill="#eaeaea",a.width=e.width,a.height=e.height,a.class="actor",a.rx=3,a.ry=3,i.append("line").attr("id","actor-man-torso"+fs).attr("x1",r).attr("y1",e.y+25).attr("x2",r).attr("y2",e.y+45),i.append("line").attr("id","actor-man-arms"+fs).attr("x1",r-18).attr("y1",e.y+33).attr("x2",r+18).attr("y2",e.y+33),i.append("line").attr("x1",r-18).attr("y1",e.y+60).attr("x2",r).attr("y2",e.y+45),i.append("line").attr("x1",r).attr("y1",e.y+45).attr("x2",r+16).attr("y2",e.y+60);var o=i.append("circle");o.attr("cx",e.x+e.width/2),o.attr("cy",e.y+10),o.attr("r",15),o.attr("width",e.width),o.attr("height",e.height);var s=i.node().getBBox();return e.height=s.height,ps(n)(e.description,i,a.x,a.y+35,a.width,a.height,{class:"actor"},n),e.height}(t,e,n);case"participant":return function(t,e,n){var r=e.x+e.width/2,i=t.append("g"),a=i;0===e.y&&(fs++,a.append("line").attr("id","actor"+fs).attr("x1",r).attr("y1",5).attr("x2",r).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"),a=i.append("g"),e.actorCnt=fs,null!=e.links&&(a.attr("id","root-"+fs),ls("#root-"+fs,fs)));var o={x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0},s="actor";null!=e.properties&&e.properties.class?s=e.properties.class:o.fill="#eaeaea",o.x=e.x,o.y=e.y,o.width=e.width,o.height=e.height,o.class=s,o.rx=3,o.ry=3;var c=cs(a,o);if(e.rectData=o,null!=e.properties&&e.properties.icon){var l=e.properties.icon.trim();"@"===l.charAt(0)?function(t,e,n,r){var i=t.append("use");i.attr("x",e),i.attr("y",n);var a=(0,Ie.N)(r);i.attr("xlink:href","#"+a)}(a,o.x+o.width-20,o.y+10,l.substr(1)):function(t,e,n,r){var i=t.append("image");i.attr("x",e),i.attr("y",n);var a=(0,Ie.N)(r);i.attr("xlink:href",a)}(a,o.x+o.width-20,o.y+10,l)}ps(n)(e.description,a,o.x,o.y,o.width,o.height,{class:"actor"},n);var u=e.height;if(c.node){var h=c.node().getBBox();e.height=h.height,u=h.height}return u}(t,e,n)}},bs=function(t,e,n,r,i){if(void 0===e.links||null===e.links||0===Object.keys(e.links).length)return{height:0,width:0};var a=e.links,o=e.actorCnt,s=e.rectData,c="none";i&&(c="block !important");var l=t.append("g");l.attr("id","actor"+o+"_popup"),l.attr("class","actorPopupMenu"),l.attr("display",c),ls("#actor"+o+"_popup",o);var u="";void 0!==s.class&&(u=" "+s.class);var h=s.width>n?s.width:n,d=l.append("rect");if(d.attr("class","actorPopupMenuPanel"+u),d.attr("x",s.x),d.attr("y",s.height),d.attr("fill",s.fill),d.attr("stroke",s.stroke),d.attr("width",h),d.attr("height",s.height),d.attr("rx",s.rx),d.attr("ry",s.ry),null!=a){var f=20;for(var p in a){var g=l.append("a"),y=(0,Ie.N)(a[p]);g.attr("xlink:href",y),g.attr("target","_blank"),gs(r)(p,g,s.x+10,s.height+f,h,20,{class:"actor"},r),f+=30}}return d.attr("height",f),{height:s.height+f,width:h}},vs=function(t){return t.append("g")},_s=function(t,e,n,r){var i=r.boxMargin,a=r.boxTextMargin,o=r.labelBoxHeight,s=r.labelBoxWidth,c=r.messageFontFamily,l=r.messageFontSize,u=r.messageFontWeight,h=t.append("g"),d=function(t,e,n,r){return h.append("line").attr("x1",t).attr("y1",e).attr("x2",n).attr("y2",r).attr("class","loopLine")};d(e.startx,e.starty,e.stopx,e.starty),d(e.stopx,e.starty,e.stopx,e.stopy),d(e.startx,e.stopy,e.stopx,e.stopy),d(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach((function(t){d(e.startx,t.y,e.stopx,t.y).style("stroke-dasharray","3, 3")}));var f={x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0};f.text=n,f.x=e.startx,f.y=e.starty,f.fontFamily=c,f.fontSize=l,f.fontWeight=u,f.anchor="middle",f.valign="middle",f.tspan=!1,f.width=s||50,f.height=o||20,f.textMargin=a,f.class="labelText",function(t,e){var n=t.append("polygon");n.attr("points",function(t,e,n,r,i){return t+","+e+" "+(t+n)+","+e+" "+(t+n)+","+(e+r-7)+" "+(t+n-8.4)+","+(e+r)+" "+t+","+(e+r)}(e.x,e.y,e.width,e.height)),n.attr("class","labelBox"),e.y=e.y+e.height/2,ds(t,e)}(h,f),(f={x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}).text=e.title,f.x=e.startx+s/2+(e.stopx-e.startx)/2,f.y=e.starty+i+a,f.anchor="middle",f.valign="middle",f.textMargin=a,f.class="loopText",f.fontFamily=c,f.fontSize=l,f.fontWeight=u,f.wrap=!0;var p=ds(h,f);return void 0!==e.sectionTitles&&e.sectionTitles.forEach((function(t,n){if(t.message){f.text=t.message,f.x=e.startx+(e.stopx-e.startx)/2,f.y=e.sections[n].y+i+a,f.class="loopText",f.anchor="middle",f.valign="middle",f.tspan=!1,f.fontFamily=c,f.fontSize=l,f.fontWeight=u,f.wrap=e.wrap,p=ds(h,f);var r=Math.round(p.map((function(t){return(t._groups||t)[0][0].getBBox().height})).reduce((function(t,e){return t+e})));e.sections[n].height+=r-(i+a)}})),e.height=Math.round(e.stopy-e.starty),h},xs=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},ks=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}};Ie.N;var ws={},Es={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((function(t){return t.height||0})))+(0===this.loops.length?0:this.loops.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))+(0===this.messages.length?0:this.messages.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))+(0===this.notes.length?0:this.notes.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))},clear:function(){this.actors=[],this.loops=[],this.messages=[],this.notes=[]},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,Os(qt())},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){var i=this,a=0;function o(o){return function(s){a++;var c=i.sequenceItems.length-a+1;i.updateVal(s,"starty",e-c*ws.boxMargin,Math.min),i.updateVal(s,"stopy",r+c*ws.boxMargin,Math.max),i.updateVal(Es.data,"startx",t-c*ws.boxMargin,Math.min),i.updateVal(Es.data,"stopx",n+c*ws.boxMargin,Math.max),"activation"!==o&&(i.updateVal(s,"startx",t-c*ws.boxMargin,Math.min),i.updateVal(s,"stopx",n+c*ws.boxMargin,Math.max),i.updateVal(Es.data,"starty",e-c*ws.boxMargin,Math.min),i.updateVal(Es.data,"stopy",r+c*ws.boxMargin,Math.max))}}this.sequenceItems.forEach(o()),this.activations.forEach(o("activation"))},insert:function(t,e,n,r){var i=Math.min(t,n),a=Math.max(t,n),o=Math.min(e,r),s=Math.max(e,r);this.updateVal(Es.data,"startx",i,Math.min),this.updateVal(Es.data,"starty",o,Math.min),this.updateVal(Es.data,"stopx",a,Math.max),this.updateVal(Es.data,"stopy",s,Math.max),this.updateBounds(i,o,a,s)},newActivation:function(t,e,n){var r=n[t.from.actor],i=Ns(t.from.actor).length||0,a=r.x+r.width/2+(i-1)*ws.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+ws.activationWidth,stopy:void 0,actor:t.from.actor,anchored:vs(e)})},endActivation:function(t){var e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},e=arguments.length>1?arguments[1]:void 0;return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},e=arguments.length>1?arguments[1]:void 0;this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){var e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:Es.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},Ts=function(t){return{fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}},Cs=function(t){return{fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}},Ss=function(t){return{fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}},As=function(t,e,n,r,i,a){if(!0===i.hideUnusedParticipants){var o=new Set;a.forEach((function(t){o.add(t.from),o.add(t.to)})),n=n.filter((function(t){return o.has(t)}))}for(var s=0,c=0,l=0,u=0;u<n.length;u++){var h=e[n[u]];h.width=h.width||ws.width,h.height=Math.max(h.height||ws.height,ws.height),h.margin=h.margin||ws.actorMargin,h.x=s+c,h.y=r;var d=ms(t,h,ws);l=Math.max(l,d),Es.insert(h.x,r,h.x+h.width,h.height),s+=h.width,c+=h.margin,Es.models.addActor(h)}Es.bumpVerticalPos(l)},Ms=function(t,e,n,r){for(var i=0,a=0,o=0;o<n.length;o++){var s=e[n[o]],c=Ls(s),l=bs(t,s,c,ws,ws.forceMenus);l.height>i&&(i=l.height),l.width+s.x>a&&(a=l.width+s.x)}return{maxHeight:i,maxWidth:a}},Os=function(t){Q(ws,t),t.fontFamily&&(ws.actorFontFamily=ws.noteFontFamily=ws.messageFontFamily=t.fontFamily),t.fontSize&&(ws.actorFontSize=ws.noteFontSize=ws.messageFontSize=t.fontSize),t.fontWeight&&(ws.actorFontWeight=ws.noteFontWeight=ws.messageFontWeight=t.fontWeight)},Ns=function(t){return Es.activations.filter((function(e){return e.actor===t}))},Ds=function(t,e){var n=e[t],r=Ns(t);return[r.reduce((function(t,e){return Math.min(t,e.startx)}),n.x+n.width/2),r.reduce((function(t,e){return Math.max(t,e.stopx)}),n.x+n.width/2)]};function Bs(t,e,n,r,i){Es.bumpVerticalPos(n);var a=r;if(e.id&&e.message&&t[e.id]){var s=t[e.id].width,c=Ts(ws);e.message=kn.wrapLabel("[".concat(e.message,"]"),s-2*ws.wrapPadding,c),e.width=s,e.wrap=!0;var l=kn.calculateTextDimensions(e.message,c),u=Math.max(l.height,ws.labelBoxHeight);a=r+u,o.debug("".concat(u," - ").concat(e.message))}i(e),Es.bumpVerticalPos(a)}var Ls=function(t){var e=0,n=Ss(ws);for(var r in t.links){var i=kn.calculateTextDimensions(r,n).width+2*ws.wrapPadding+2*ws.boxMargin;e<i&&(e=i)}return e};const Is={bounds:Es,drawActors:As,drawActorsPopup:Ms,setConf:Os,draw:function(t,e,n,r){ws=qt().sequence;var i,a=qt().securityLevel;"sandbox"===a&&(i=(0,l.select)("#i"+e));var s="sandbox"===a?(0,l.select)(i.nodes()[0].contentDocument.body):(0,l.select)("body");"sandbox"===a?i.nodes()[0].contentDocument:document;Es.init(),o.debug(r.db);var c="sandbox"===a?s.select('[id="'.concat(e,'"]')):(0,l.select)('[id="'.concat(e,'"]')),u=r.db.getActors(),h=r.db.getActorKeys(),d=r.db.getMessages(),f=r.db.getDiagramTitle(),p=function(t,e,n){var r={};return e.forEach((function(e){if(t[e.to]&&t[e.from]){var i=t[e.to];if(e.placement===n.db.PLACEMENT.LEFTOF&&!i.prevActor)return;if(e.placement===n.db.PLACEMENT.RIGHTOF&&!i.nextActor)return;var a=void 0!==e.placement,o=!a,s=a?Cs(ws):Ts(ws),c=e.wrap?kn.wrapLabel(e.message,ws.width-2*ws.wrapPadding,s):e.message,l=kn.calculateTextDimensions(c,s).width+2*ws.wrapPadding;o&&e.from===i.nextActor?r[e.to]=Math.max(r[e.to]||0,l):o&&e.from===i.prevActor?r[e.from]=Math.max(r[e.from]||0,l):o&&e.from===e.to?(r[e.from]=Math.max(r[e.from]||0,l/2),r[e.to]=Math.max(r[e.to]||0,l/2)):e.placement===n.db.PLACEMENT.RIGHTOF?r[e.from]=Math.max(r[e.from]||0,l):e.placement===n.db.PLACEMENT.LEFTOF?r[i.prevActor]=Math.max(r[i.prevActor]||0,l):e.placement===n.db.PLACEMENT.OVER&&(i.prevActor&&(r[i.prevActor]=Math.max(r[i.prevActor]||0,l/2)),i.nextActor&&(r[e.from]=Math.max(r[e.from]||0,l/2)))}})),o.debug("maxMessageWidthPerActor:",r),r}(u,d,r);ws.height=function(t,e){var n=0;for(var r in Object.keys(t).forEach((function(e){var r=t[e];r.wrap&&(r.description=kn.wrapLabel(r.description,ws.width-2*ws.wrapPadding,Ss(ws)));var i=kn.calculateTextDimensions(r.description,Ss(ws));r.width=r.wrap?ws.width:Math.max(ws.width,i.width+2*ws.wrapPadding),r.height=r.wrap?Math.max(i.height,ws.height):ws.height,n=Math.max(n,r.height)})),e){var i=t[r];if(i){var a=t[i.nextActor];if(a){var o=e[r]+ws.actorMargin-i.width/2-a.width/2;i.margin=Math.max(o,ws.actorMargin)}}}return Math.max(n,ws.height)}(u,p),function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")}(c),function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")}(c),function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")}(c),As(c,u,h,0,ws,d);var g=function(t,e,n,r){var i,a,s,c={},l=[];return t.forEach((function(t){switch(t.id=kn.random({length:10}),t.type){case r.db.LINETYPE.LOOP_START:case r.db.LINETYPE.ALT_START:case r.db.LINETYPE.OPT_START:case r.db.LINETYPE.PAR_START:case r.db.LINETYPE.CRITICAL_START:case r.db.LINETYPE.BREAK_START:l.push({id:t.id,msg:t.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case r.db.LINETYPE.ALT_ELSE:case r.db.LINETYPE.PAR_AND:case r.db.LINETYPE.CRITICAL_OPTION:t.message&&(i=l.pop(),c[i.id]=i,c[t.id]=i,l.push(i));break;case r.db.LINETYPE.LOOP_END:case r.db.LINETYPE.ALT_END:case r.db.LINETYPE.OPT_END:case r.db.LINETYPE.PAR_END:case r.db.LINETYPE.CRITICAL_END:case r.db.LINETYPE.BREAK_END:i=l.pop(),c[i.id]=i;break;case r.db.LINETYPE.ACTIVE_START:var n=e[t.from?t.from.actor:t.to.actor],u=Ns(t.from?t.from.actor:t.to.actor).length,h=n.x+n.width/2+(u-1)*ws.activationWidth/2,d={startx:h,stopx:h+ws.activationWidth,actor:t.from.actor,enabled:!0};Es.activations.push(d);break;case r.db.LINETYPE.ACTIVE_END:var f=Es.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);delete Es.activations.splice(f,1)[0]}void 0!==t.placement?(a=function(t,e,n){var r=e[t.from].x,i=e[t.to].x,a=t.wrap&&t.message,s=kn.calculateTextDimensions(a?kn.wrapLabel(t.message,ws.width,Cs(ws)):t.message,Cs(ws)),c={width:a?ws.width:Math.max(ws.width,s.width+2*ws.noteMargin),height:0,startx:e[t.from].x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===n.db.PLACEMENT.RIGHTOF?(c.width=a?Math.max(ws.width,s.width):Math.max(e[t.from].width/2+e[t.to].width/2,s.width+2*ws.noteMargin),c.startx=r+(e[t.from].width+ws.actorMargin)/2):t.placement===n.db.PLACEMENT.LEFTOF?(c.width=a?Math.max(ws.width,s.width+2*ws.noteMargin):Math.max(e[t.from].width/2+e[t.to].width/2,s.width+2*ws.noteMargin),c.startx=r-c.width+(e[t.from].width-ws.actorMargin)/2):t.to===t.from?(s=kn.calculateTextDimensions(a?kn.wrapLabel(t.message,Math.max(ws.width,e[t.from].width),Cs(ws)):t.message,Cs(ws)),c.width=a?Math.max(ws.width,e[t.from].width):Math.max(e[t.from].width,ws.width,s.width+2*ws.noteMargin),c.startx=r+(e[t.from].width-c.width)/2):(c.width=Math.abs(r+e[t.from].width/2-(i+e[t.to].width/2))+ws.actorMargin,c.startx=r<i?r+e[t.from].width/2-ws.actorMargin/2:i+e[t.to].width/2-ws.actorMargin/2),a&&(c.message=kn.wrapLabel(t.message,c.width-2*ws.wrapPadding,Cs(ws))),o.debug("NM:[".concat(c.startx,",").concat(c.stopx,",").concat(c.starty,",").concat(c.stopy,":").concat(c.width,",").concat(c.height,"=").concat(t.message,"]")),c}(t,e,r),t.noteModel=a,l.forEach((function(t){(i=t).from=Math.min(i.from,a.startx),i.to=Math.max(i.to,a.startx+a.width),i.width=Math.max(i.width,Math.abs(i.from-i.to))-ws.labelBoxWidth}))):(s=function(t,e,n){var r=!1;if([n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(r=!0),!r)return{};var i=Ds(t.from,e),a=Ds(t.to,e),o=i[0]<=a[0]?1:0,s=i[0]<a[0]?0:1,c=i.concat(a),l=Math.abs(a[s]-i[o]);t.wrap&&t.message&&(t.message=kn.wrapLabel(t.message,Math.max(l+2*ws.wrapPadding,ws.width),Ts(ws)));var u=kn.calculateTextDimensions(t.message,Ts(ws));return{width:Math.max(t.wrap?0:u.width+2*ws.wrapPadding,l+2*ws.wrapPadding,ws.width),height:0,startx:i[o],stopx:a[s],starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,c),toBounds:Math.max.apply(null,c)}}(t,e,r),t.msgModel=s,s.startx&&s.stopx&&l.length>0&&l.forEach((function(n){if(i=n,s.startx===s.stopx){var r=e[t.from],a=e[t.to];i.from=Math.min(r.x-s.width/2,r.x-r.width/2,i.from),i.to=Math.max(a.x+s.width/2,a.x+r.width/2,i.to),i.width=Math.max(i.width,Math.abs(i.to-i.from))-ws.labelBoxWidth}else i.from=Math.min(s.startx,i.from),i.to=Math.max(s.stopx,i.to),i.width=Math.max(i.width,s.width)-ws.labelBoxWidth})))})),Es.activations=[],o.debug("Loop type widths:",c),c}(d,u,0,r);(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")})(c),function(t){var e=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);e.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),e.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")}(c),function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")}(c),function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)}(c);var y=1,m=1,b=Array();d.forEach((function(t){var e,n,i;switch(t.type){case r.db.LINETYPE.NOTE:n=t.noteModel,function(t,e){Es.bumpVerticalPos(ws.boxMargin),e.height=ws.boxMargin,e.starty=Es.getVerticalPos();var n=ks();n.x=e.startx,n.y=e.starty,n.width=e.width||ws.width,n.class="note";var r=t.append("g"),i=ys(r,n),a=xs();a.x=e.startx,a.y=e.starty,a.width=n.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=ws.noteFontFamily,a.fontSize=ws.noteFontSize,a.fontWeight=ws.noteFontWeight,a.anchor=ws.noteAlign,a.textMargin=ws.noteMargin,a.valign="center";var o=ds(r,a),s=Math.round(o.map((function(t){return(t._groups||t)[0][0].getBBox().height})).reduce((function(t,e){return t+e})));i.attr("height",s+2*ws.noteMargin),e.height+=s+2*ws.noteMargin,Es.bumpVerticalPos(s+2*ws.noteMargin),e.stopy=e.starty+s+2*ws.noteMargin,e.stopx=e.startx+n.width,Es.insert(e.startx,e.starty,e.stopx,e.stopy),Es.models.addNote(e)}(c,n);break;case r.db.LINETYPE.ACTIVE_START:Es.newActivation(t,c,u);break;case r.db.LINETYPE.ACTIVE_END:!function(t,e){var n=Es.endActivation(t);n.starty+18>e&&(n.starty=e-6,e+=12),function(t,e,n,r,i){var a={x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0},o=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=n-e.starty,cs(o,a)}(0,n,e,0,Ns(t.from.actor).length),Es.insert(n.startx,e-10,n.stopx,e)}(t,Es.getVerticalPos());break;case r.db.LINETYPE.LOOP_START:Bs(g,t,ws.boxMargin,ws.boxMargin+ws.boxTextMargin,(function(t){return Es.newLoop(t)}));break;case r.db.LINETYPE.LOOP_END:e=Es.endLoop(),_s(c,e,"loop",ws),Es.bumpVerticalPos(e.stopy-Es.getVerticalPos()),Es.models.addLoop(e);break;case r.db.LINETYPE.RECT_START:Bs(g,t,ws.boxMargin,ws.boxMargin,(function(t){return Es.newLoop(void 0,t.message)}));break;case r.db.LINETYPE.RECT_END:e=Es.endLoop(),function(t,e){cs(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()}(c,e),Es.models.addLoop(e),Es.bumpVerticalPos(e.stopy-Es.getVerticalPos());break;case r.db.LINETYPE.OPT_START:Bs(g,t,ws.boxMargin,ws.boxMargin+ws.boxTextMargin,(function(t){return Es.newLoop(t)}));break;case r.db.LINETYPE.OPT_END:e=Es.endLoop(),_s(c,e,"opt",ws),Es.bumpVerticalPos(e.stopy-Es.getVerticalPos()),Es.models.addLoop(e);break;case r.db.LINETYPE.ALT_START:Bs(g,t,ws.boxMargin,ws.boxMargin+ws.boxTextMargin,(function(t){return Es.newLoop(t)}));break;case r.db.LINETYPE.ALT_ELSE:Bs(g,t,ws.boxMargin+ws.boxTextMargin,ws.boxMargin,(function(t){return Es.addSectionToLoop(t)}));break;case r.db.LINETYPE.ALT_END:e=Es.endLoop(),_s(c,e,"alt",ws),Es.bumpVerticalPos(e.stopy-Es.getVerticalPos()),Es.models.addLoop(e);break;case r.db.LINETYPE.PAR_START:Bs(g,t,ws.boxMargin,ws.boxMargin+ws.boxTextMargin,(function(t){return Es.newLoop(t)}));break;case r.db.LINETYPE.PAR_AND:Bs(g,t,ws.boxMargin+ws.boxTextMargin,ws.boxMargin,(function(t){return Es.addSectionToLoop(t)}));break;case r.db.LINETYPE.PAR_END:e=Es.endLoop(),_s(c,e,"par",ws),Es.bumpVerticalPos(e.stopy-Es.getVerticalPos()),Es.models.addLoop(e);break;case r.db.LINETYPE.AUTONUMBER:y=t.message.start||y,m=t.message.step||m,t.message.visible?r.db.enableSequenceNumbers():r.db.disableSequenceNumbers();break;case r.db.LINETYPE.CRITICAL_START:Bs(g,t,ws.boxMargin,ws.boxMargin+ws.boxTextMargin,(function(t){return Es.newLoop(t)}));break;case r.db.LINETYPE.CRITICAL_OPTION:Bs(g,t,ws.boxMargin+ws.boxTextMargin,ws.boxMargin,(function(t){return Es.addSectionToLoop(t)}));break;case r.db.LINETYPE.CRITICAL_END:e=Es.endLoop(),_s(c,e,"critical",ws),Es.bumpVerticalPos(e.stopy-Es.getVerticalPos()),Es.models.addLoop(e);break;case r.db.LINETYPE.BREAK_START:Bs(g,t,ws.boxMargin,ws.boxMargin+ws.boxTextMargin,(function(t){return Es.newLoop(t)}));break;case r.db.LINETYPE.BREAK_END:e=Es.endLoop(),_s(c,e,"break",ws),Es.bumpVerticalPos(e.stopy-Es.getVerticalPos()),Es.models.addLoop(e);break;default:try{(i=t.msgModel).starty=Es.getVerticalPos(),i.sequenceIndex=y,i.sequenceVisible=r.db.showSequenceNumbers();var a=function(t,e){Es.bumpVerticalPos(10);var n,r=e.startx,i=e.stopx,a=e.message,o=oe.splitBreaks(a).length,s=kn.calculateTextDimensions(a,Ts(ws)),c=s.height/o;e.height+=c,Es.bumpVerticalPos(c);var l=s.height-10,u=s.width;if(r===i){n=Es.getVerticalPos()+l,ws.rightAngles||(l+=ws.boxMargin,n=Es.getVerticalPos()+l),l+=30;var h=Math.max(u/2,ws.width/2);Es.insert(r-h,Es.getVerticalPos()-10+l,i+h,Es.getVerticalPos()+30+l)}else l+=ws.boxMargin,n=Es.getVerticalPos()+l,Es.insert(r,n-10,i,n);return Es.bumpVerticalPos(l),e.height+=l,e.stopy=e.starty+e.height,Es.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),n}(0,i);b.push({messageModel:i,lineStarty:a}),Es.models.addMessage(i)}catch(t){o.error("error while drawing message",t)}}[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN,r.db.LINETYPE.SOLID,r.db.LINETYPE.DOTTED,r.db.LINETYPE.SOLID_CROSS,r.db.LINETYPE.DOTTED_CROSS,r.db.LINETYPE.SOLID_POINT,r.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(y+=m)})),b.forEach((function(t){return function(t,e,n,r){var i=e.startx,a=e.stopx,o=e.starty,s=e.message,c=e.type,l=e.sequenceIndex,u=e.sequenceVisible,h=kn.calculateTextDimensions(s,Ts(ws)),d=xs();d.x=i,d.y=o+10,d.width=a-i,d.class="messageText",d.dy="1em",d.text=s,d.fontFamily=ws.messageFontFamily,d.fontSize=ws.messageFontSize,d.fontWeight=ws.messageFontWeight,d.anchor=ws.messageAlign,d.valign="center",d.textMargin=ws.wrapPadding,d.tspan=!1,ds(t,d);var f,p=h.width;i===a?f=ws.rightAngles?t.append("path").attr("d","M ".concat(i,",").concat(n," H ").concat(i+Math.max(ws.width/2,p/2)," V ").concat(n+25," H ").concat(i)):t.append("path").attr("d","M "+i+","+n+" C "+(i+60)+","+(n-10)+" "+(i+60)+","+(n+30)+" "+i+","+(n+20)):((f=t.append("line")).attr("x1",i),f.attr("y1",n),f.attr("x2",a),f.attr("y2",n)),c===r.db.LINETYPE.DOTTED||c===r.db.LINETYPE.DOTTED_CROSS||c===r.db.LINETYPE.DOTTED_POINT||c===r.db.LINETYPE.DOTTED_OPEN?(f.style("stroke-dasharray","3, 3"),f.attr("class","messageLine1")):f.attr("class","messageLine0");var g="";ws.arrowMarkerAbsolute&&(g=(g=(g=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),f.attr("stroke-width",2),f.attr("stroke","none"),f.style("fill","none"),c!==r.db.LINETYPE.SOLID&&c!==r.db.LINETYPE.DOTTED||f.attr("marker-end","url("+g+"#arrowhead)"),c!==r.db.LINETYPE.SOLID_POINT&&c!==r.db.LINETYPE.DOTTED_POINT||f.attr("marker-end","url("+g+"#filled-head)"),c!==r.db.LINETYPE.SOLID_CROSS&&c!==r.db.LINETYPE.DOTTED_CROSS||f.attr("marker-end","url("+g+"#crosshead)"),(u||ws.showSequenceNumbers)&&(f.attr("marker-start","url("+g+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",n+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(l))}(c,t.messageModel,t.lineStarty,r)})),ws.mirrorActors&&(Es.bumpVerticalPos(2*ws.boxMargin),As(c,u,h,Es.getVerticalPos(),ws,d),Es.bumpVerticalPos(ws.boxMargin),function(t,e){t.selectAll&&t.selectAll(".actor-line").attr("class","200").attr("y2",e-55)}(c,Es.getVerticalPos()));var v=Ms(c,u,h),_=Es.getBounds().bounds;o.debug("For line height fix Querying: #"+e+" .actor-line"),(0,l.selectAll)("#"+e+" .actor-line").attr("y2",_.stopy);var x=_.stopy-_.starty;x<v.maxHeight&&(x=v.maxHeight);var k=x+2*ws.diagramMarginY;ws.mirrorActors&&(k=k-ws.boxMargin+ws.bottomMarginAdj);var w=_.stopx-_.startx;w<v.maxWidth&&(w=v.maxWidth);var E=w+2*ws.diagramMarginX;f&&c.append("text").text(f).attr("x",(_.stopx-_.startx)/2-2*ws.diagramMarginX).attr("y",-25),bn(c,0,E,ws.useMaxWidth);var T=f?40:0;c.attr("viewBox",_.startx-ws.diagramMarginX+" -"+(ws.diagramMarginY+T)+" "+E+" "+(k+T)),wn(r.db,c,e),o.debug("models:",Es.models)}};var Fs=n(3584),Rs=n.n(Fs);function Ps(t){return Ps="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ps(t)}var js=function(t){return JSON.parse(JSON.stringify(t))},zs=[],Ys=function t(e,n,r){if("relation"===n.stmt)t(e,n.state1,!0),t(e,n.state2,!1);else if("state"===n.stmt&&"[*]"===n.id&&(n.id=r?e.id+"_start":e.id+"_end",n.start=r),n.doc){var i=[],a=0,o=[];for(a=0;a<n.doc.length;a++)if("divider"===n.doc[a].type){var s=js(n.doc[a]);s.doc=js(o),i.push(s),o=[]}else o.push(n.doc[a]);if(i.length>0&&o.length>0){var c={stmt:"state",id:ln(),type:"divider",doc:js(o)};i.push(js(c)),n.doc=i}n.doc.forEach((function(e){return t(n,e,!0)}))}},Us={root:{relations:[],states:{},documents:{}}},$s=Us.root,Ws=0,qs=function(t,e,n,r,i){void 0===$s.states[t]?$s.states[t]={id:t,descriptions:[],type:e,doc:n,note:i}:($s.states[t].doc||($s.states[t].doc=n),$s.states[t].type||($s.states[t].type=e)),r&&(o.info("Adding state ",t,r),"string"==typeof r&&Gs(t,r.trim()),"object"===Ps(r)&&r.forEach((function(e){return Gs(t,e.trim())}))),i&&($s.states[t].note=i,$s.states[t].note.text=oe.sanitizeText($s.states[t].note.text,qt()))},Hs=function(t){$s=(Us={root:{relations:[],states:{},documents:{}}}).root,$s=Us.root,Ws=0,Zs=[],t||he()},Vs=function(t,e,n){var r=t,i=e,a="default",o="default";"[*]"===t&&(r="start"+ ++Ws,a="start"),"[*]"===e&&(i="end"+Ws,o="end"),qs(r,a),qs(i,o),$s.relations.push({id1:r,id2:i,title:oe.sanitizeText(n,qt())})},Gs=function(t,e){var n=$s.states[t],r=e;":"===r[0]&&(r=r.substr(1).trim()),n.descriptions.push(oe.sanitizeText(r,qt()))},Xs=0,Zs=[],Qs="TB";const Ks={parseDirective:function(t,e,n){Nl.parseDirective(this,t,e,n)},getConfig:function(){return qt().state},addState:qs,clear:Hs,getState:function(t){return $s.states[t]},getStates:function(){return $s.states},getRelations:function(){return $s.relations},getClasses:function(){return Zs},getDirection:function(){return Qs},addRelation:Vs,getDividerId:function(){return"divider-id-"+ ++Xs},setDirection:function(t){Qs=t},cleanupLabel:function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},logDocuments:function(){o.info("Documents = ",Us)},getRootDoc:function(){return zs},setRootDoc:function(t){o.info("Setting root doc",t),zs=t},getRootDocV2:function(){return Ys({id:"root"},{id:"root",doc:zs},!0),{id:"root",doc:zs}},extract:function(t){var e;e=t.doc?t.doc:t,o.info(e),Hs(!0),o.info("Extract",e),e.forEach((function(t){"state"===t.stmt&&qs(t.id,t.type,t.doc,t.description,t.note),"relation"===t.stmt&&Vs(t.state1.id,t.state2.id,t.description)}))},trimColon:function(t){return t&&":"===t[0]?t.substr(1).trim():t.trim()},getAccTitle:fe,setAccTitle:de,getAccDescription:ge,setAccDescription:pe};var Js={};function tc(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var ec,nc=function(t,e,n){var r,i=qt().state.padding,a=2*qt().state.padding,o=t.node().getBBox(),s=o.width,c=o.x,l=t.append("text").attr("x",0).attr("y",qt().state.titleShift).attr("font-size",qt().state.fontSize).attr("class","state-title").text(e.id),u=l.node().getBBox().width+a,h=Math.max(u,s);h===s&&(h+=a);var d=t.node().getBBox();e.doc,r=c-i,u>s&&(r=(s-h)/2+i),Math.abs(c-d.x)<i&&u>s&&(r=c-(u-s)/2);var f=1-qt().state.textHeight;return t.insert("rect",":first-child").attr("x",r).attr("y",f).attr("class",n?"alt-composit":"composit").attr("width",h).attr("height",d.height+qt().state.textHeight+qt().state.titleShift+1).attr("rx","0"),l.attr("x",r+i),u<=s&&l.attr("x",c+(h-a)/2-u/2+i),t.insert("rect",":first-child").attr("x",r).attr("y",qt().state.titleShift-qt().state.textHeight-qt().state.padding).attr("width",h).attr("height",3*qt().state.textHeight).attr("rx",qt().state.radius),t.insert("rect",":first-child").attr("x",r).attr("y",qt().state.titleShift-qt().state.textHeight-qt().state.padding).attr("width",h).attr("height",d.height+3+2*qt().state.textHeight).attr("rx",qt().state.radius),t},rc=function(t,e){var n=e.id,r={id:n,label:e.id,width:0,height:0},i=t.append("g").attr("id",n).attr("class","stateGroup");"start"===e.type&&function(t){t.append("circle").attr("class","start-state").attr("r",qt().state.sizeUnit).attr("cx",qt().state.padding+qt().state.sizeUnit).attr("cy",qt().state.padding+qt().state.sizeUnit)}(i),"end"===e.type&&function(t){t.append("circle").attr("class","end-state-outer").attr("r",qt().state.sizeUnit+qt().state.miniPadding).attr("cx",qt().state.padding+qt().state.sizeUnit+qt().state.miniPadding).attr("cy",qt().state.padding+qt().state.sizeUnit+qt().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",qt().state.sizeUnit).attr("cx",qt().state.padding+qt().state.sizeUnit+2).attr("cy",qt().state.padding+qt().state.sizeUnit+2)}(i),"fork"!==e.type&&"join"!==e.type||function(t,e){var n=qt().state.forkWidth,r=qt().state.forkHeight;if(e.parentId){var i=n;n=r,r=i}t.append("rect").style("stroke","black").style("fill","black").attr("width",n).attr("height",r).attr("x",qt().state.padding).attr("y",qt().state.padding)}(i,e),"note"===e.type&&function(t,e){e.attr("class","state-note");var n=e.append("rect").attr("x",0).attr("y",qt().state.padding),r=function(t,e,n,r){var i=0,a=r.append("text");a.style("text-anchor","start"),a.attr("class","noteText");var o,s=t.replace(/\r\n/g,"<br/>"),c=(s=s.replace(/\n/g,"<br/>")).split(oe.lineBreakRegex),l=1.25*qt().state.noteMargin,u=function(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return tc(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?tc(t,e):void 0}}(t))){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}(c);try{for(u.s();!(o=u.n()).done;){var h=o.value.trim();if(h.length>0){var d=a.append("tspan");d.text(h),0===l&&(l+=d.node().getBBox().height),i+=l,d.attr("x",0+qt().state.noteMargin),d.attr("y",0+i+1.25*qt().state.noteMargin)}}}catch(t){u.e(t)}finally{u.f()}return{textWidth:a.node().getBBox().width,textHeight:i}}(t,0,0,e.append("g")),i=r.textWidth,a=r.textHeight;n.attr("height",a+2*qt().state.noteMargin),n.attr("width",i+2*qt().state.noteMargin)}(e.note.text,i),"divider"===e.type&&function(t){t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",qt().state.textHeight).attr("class","divider").attr("x2",2*qt().state.textHeight).attr("y1",0).attr("y2",0)}(i),"default"===e.type&&0===e.descriptions.length&&function(t,e){var n=t.append("text").attr("x",2*qt().state.padding).attr("y",qt().state.textHeight+2*qt().state.padding).attr("font-size",qt().state.fontSize).attr("class","state-title").text(e.id).node().getBBox();t.insert("rect",":first-child").attr("x",qt().state.padding).attr("y",qt().state.padding).attr("width",n.width+2*qt().state.padding).attr("height",n.height+2*qt().state.padding).attr("rx",qt().state.radius)}(i,e),"default"===e.type&&e.descriptions.length>0&&function(t,e){var n=t.append("text").attr("x",2*qt().state.padding).attr("y",qt().state.textHeight+1.3*qt().state.padding).attr("font-size",qt().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),r=n.height,i=t.append("text").attr("x",qt().state.padding).attr("y",r+.4*qt().state.padding+qt().state.dividerMargin+qt().state.textHeight).attr("class","state-description"),a=!0,o=!0;e.descriptions.forEach((function(t){a||(function(t,e,n){var r=t.append("tspan").attr("x",2*qt().state.padding).text(e);n||r.attr("dy",qt().state.textHeight)}(i,t,o),o=!1),a=!1}));var s=t.append("line").attr("x1",qt().state.padding).attr("y1",qt().state.padding+r+qt().state.dividerMargin/2).attr("y2",qt().state.padding+r+qt().state.dividerMargin/2).attr("class","descr-divider"),c=i.node().getBBox(),l=Math.max(c.width,n.width);s.attr("x2",l+3*qt().state.padding),t.insert("rect",":first-child").attr("x",qt().state.padding).attr("y",qt().state.padding).attr("width",l+2*qt().state.padding).attr("height",c.height+r+2*qt().state.padding).attr("rx",qt().state.radius)}(i,e);var a,o=i.node().getBBox();return r.width=o.width+2*qt().state.padding,r.height=o.height+2*qt().state.padding,a=r,Js[n]=a,r},ic=0,ac={},oc=function t(e,n,r,i,a,s,c){var u,h=new(lr().Graph)({compound:!0,multigraph:!0}),d=!0;for(u=0;u<e.length;u++)if("relation"===e[u].stmt){d=!1;break}r?h.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:d?1:ec.edgeLengthFactor,nodeSep:d?1:50,isMultiGraph:!0}):h.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:d?1:ec.edgeLengthFactor,nodeSep:d?1:50,ranker:"tight-tree",isMultiGraph:!0}),h.setDefaultEdgeLabel((function(){return{}})),c.db.extract(e);for(var f=c.db.getStates(),p=c.db.getRelations(),g=Object.keys(f),y=0;y<g.length;y++){var m=f[g[y]];r&&(m.parentId=r);var b=void 0;if(m.doc){var v=n.append("g").attr("id",m.id).attr("class","stateGroup");b=t(m.doc,v,m.id,!i,a,s,c);var _=(v=nc(v,m,i)).node().getBBox();b.width=_.width,b.height=_.height+ec.padding/2,ac[m.id]={y:ec.compositTitleSize}}else b=rc(n,m);if(m.note){var x={descriptions:[],id:m.id+"-note",note:m.note,type:"note"},k=rc(n,x);"left of"===m.note.position?(h.setNode(b.id+"-note",k),h.setNode(b.id,b)):(h.setNode(b.id,b),h.setNode(b.id+"-note",k)),h.setParent(b.id,b.id+"-group"),h.setParent(b.id+"-note",b.id+"-group")}else h.setNode(b.id,b)}o.debug("Count=",h.nodeCount(),h);var w=0;p.forEach((function(t){var e;w++,o.debug("Setting edge",t),h.setEdge(t.id1,t.id2,{relation:t,width:(e=t.title,e?e.length*ec.fontSizeFactor:1),height:ec.labelHeight*oe.getRows(t.title).length,labelpos:"c"},"id"+w)})),sr().layout(h),o.debug("Graph after layout",h.nodes());var E=n.node();h.nodes().forEach((function(t){void 0!==t&&void 0!==h.node(t)?(o.warn("Node "+t+": "+JSON.stringify(h.node(t))),a.select("#"+E.id+" #"+t).attr("transform","translate("+(h.node(t).x-h.node(t).width/2)+","+(h.node(t).y+(ac[t]?ac[t].y:0)-h.node(t).height/2)+" )"),a.select("#"+E.id+" #"+t).attr("data-x-shift",h.node(t).x-h.node(t).width/2),s.querySelectorAll("#"+E.id+" #"+t+" .divider").forEach((function(t){var e=t.parentElement,n=0,r=0;e&&(e.parentElement&&(n=e.parentElement.getBBox().width),r=parseInt(e.getAttribute("data-x-shift"),10),Number.isNaN(r)&&(r=0)),t.setAttribute("x1",0-r+8),t.setAttribute("x2",n-r-8)}))):o.debug("No Node "+t+": "+JSON.stringify(h.node(t)))}));var T=E.getBBox();h.edges().forEach((function(t){void 0!==t&&void 0!==h.edge(t)&&(o.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(h.edge(t))),function(t,e,n){e.points=e.points.filter((function(t){return!Number.isNaN(t.y)}));var r=e.points,i=(0,l.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(l.curveBasis),a=t.append("path").attr("d",i(r)).attr("id","edge"+ic).attr("class","transition"),s="";if(qt().state.arrowMarkerAbsolute&&(s=(s=(s=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),a.attr("marker-end","url("+s+"#"+function(t){switch(t){case Ks.relationType.AGGREGATION:return"aggregation";case Ks.relationType.EXTENSION:return"extension";case Ks.relationType.COMPOSITION:return"composition";case Ks.relationType.DEPENDENCY:return"dependency"}}(Ks.relationType.DEPENDENCY)+"End)"),void 0!==n.title){for(var c=t.append("g").attr("class","stateLabel"),u=kn.calcLabelPosition(e.points),h=u.x,d=u.y,f=oe.getRows(n.title),p=0,g=[],y=0,m=0,b=0;b<=f.length;b++){var v=c.append("text").attr("text-anchor","middle").text(f[b]).attr("x",h).attr("y",d+p),_=v.node().getBBox();if(y=Math.max(y,_.width),m=Math.min(m,_.x),o.info(_.x,h,d+p),0===p){var x=v.node().getBBox();p=x.height,o.info("Title height",p,d)}g.push(v)}var k=p*f.length;if(f.length>1){var w=(f.length-1)*p*.5;g.forEach((function(t,e){return t.attr("y",d+e*p-w)})),k=p*f.length}var E=c.node().getBBox();c.insert("rect",":first-child").attr("class","box").attr("x",h-y/2-qt().state.padding/2).attr("y",d-k/2-qt().state.padding/2-3.5).attr("width",y+qt().state.padding).attr("height",k+qt().state.padding),o.info(E)}ic++}(n,h.edge(t),h.edge(t).relation))})),T=E.getBBox();var C={id:r||"root",label:r||"root",width:0,height:0};return C.width=T.width+2*ec.padding,C.height=T.height+2*ec.padding,o.debug("Doc rendered",C,h),C};const sc={setConf:function(){},draw:function(t,e,n,r){ec=qt().state;var i,a=qt().securityLevel;"sandbox"===a&&(i=(0,l.select)("#i"+e));var s="sandbox"===a?(0,l.select)(i.nodes()[0].contentDocument.body):(0,l.select)("body"),c="sandbox"===a?i.nodes()[0].contentDocument:document;o.debug("Rendering diagram "+t);var u=s.select("[id='".concat(e,"']"));u.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z"),new(lr().Graph)({multigraph:!0,compound:!0,rankdir:"RL"}).setDefaultEdgeLabel((function(){return{}}));var h=r.db.getRootDoc();oc(h,u,void 0,!1,s,c,r);var d=ec.padding,f=u.node().getBBox(),p=f.width+2*d,g=f.height+2*d;bn(u,0,1.75*p,ec.useMaxWidth),u.attr("viewBox","".concat(f.x-ec.padding," ").concat(f.y-ec.padding," ")+p+" "+g),wn(r.db,u,e)}};var cc={},lc={},uc=function(t,e,n,r){if("root"!==n.id){var i="rect";!0===n.start&&(i="start"),!1===n.start&&(i="end"),"default"!==n.type&&(i=n.type),lc[n.id]||(lc[n.id]={id:n.id,shape:i,description:oe.sanitizeText(n.id,qt()),classes:"statediagram-state"}),n.description&&(Array.isArray(lc[n.id].description)?(lc[n.id].shape="rectWithTitle",lc[n.id].description.push(n.description)):lc[n.id].description.length>0?(lc[n.id].shape="rectWithTitle",lc[n.id].description===n.id?lc[n.id].description=[n.description]:lc[n.id].description=[lc[n.id].description,n.description]):(lc[n.id].shape="rect",lc[n.id].description=n.description),lc[n.id].description=oe.sanitizeTextOrArray(lc[n.id].description,qt())),1===lc[n.id].description.length&&"rectWithTitle"===lc[n.id].shape&&(lc[n.id].shape="rect"),!lc[n.id].type&&n.doc&&(o.info("Setting cluster for ",n.id,fc(n)),lc[n.id].type="group",lc[n.id].dir=fc(n),lc[n.id].shape="divider"===n.type?"divider":"roundedWithTitle",lc[n.id].classes=lc[n.id].classes+" "+(r?"statediagram-cluster statediagram-cluster-alt":"statediagram-cluster"));var a={labelStyle:"",shape:lc[n.id].shape,labelText:lc[n.id].description,classes:lc[n.id].classes,style:"",id:n.id,dir:lc[n.id].dir,domId:"state-"+n.id+"-"+hc,type:lc[n.id].type,padding:15};if(n.note){var s={labelStyle:"",shape:"note",labelText:n.note.text,classes:"statediagram-note",style:"",id:n.id+"----note-"+hc,domId:"state-"+n.id+"----note-"+hc,type:lc[n.id].type,padding:15},c={labelStyle:"",shape:"noteGroup",labelText:n.note.text,classes:lc[n.id].classes,style:"",id:n.id+"----parent",domId:"state-"+n.id+"----parent-"+hc,type:"group",padding:0};hc++,t.setNode(n.id+"----parent",c),t.setNode(s.id,s),t.setNode(n.id,a),t.setParent(n.id,n.id+"----parent"),t.setParent(s.id,n.id+"----parent");var l=n.id,u=s.id;"left of"===n.note.position&&(l=s.id,u=n.id),t.setEdge(l,u,{arrowhead:"none",arrowType:"",style:"fill:none",labelStyle:"",classes:"transition note-edge",arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal"})}else t.setNode(n.id,a)}e&&"root"!==e.id&&(o.trace("Setting node ",n.id," to be child of its parent ",e.id),t.setParent(n.id,e.id)),n.doc&&(o.trace("Adding nodes children "),dc(t,n,n.doc,!r))},hc=0,dc=function(t,e,n,r){o.trace("items",n),n.forEach((function(n){if("state"===n.stmt||"default"===n.stmt)uc(t,e,n,r);else if("relation"===n.stmt){uc(t,e,n.state1,r),uc(t,e,n.state2,r);var i={id:"edge"+hc,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:"fill:none",labelStyle:"",label:oe.sanitizeText(n.description,qt()),arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal",classes:"transition"},a=n.state1.id,o=n.state2.id;t.setEdge(a,o,i,hc),hc++}}))},fc=function(t,e){var n=e||"TB";if(t.doc)for(var r=0;r<t.doc.length;r++){var i=t.doc[r];"dir"===i.stmt&&(n=i.value)}return n};const pc={setConf:function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)cc[e[n]]=t[e[n]]},getClasses:function(t,e){return o.trace("Extracting classes"),e.sb.clear(),e.parser.parse(t),e.sb.getClasses()},draw:function(t,e,n,r){o.info("Drawing state diagram (v2)",e),lc={};var i=r.db.getDirection();void 0===i&&(i="LR");var a=qt().state,s=a.nodeSpacing||50,c=a.rankSpacing||50,u=qt().securityLevel;o.info(r.db.getRootDocV2()),r.db.extract(r.db.getRootDocV2()),o.info(r.db.getRootDocV2());var h,d=new(lr().Graph)({multigraph:!0,compound:!0}).setGraph({rankdir:fc(r.db.getRootDocV2()),nodesep:s,ranksep:c,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));uc(d,void 0,r.db.getRootDocV2(),!0),"sandbox"===u&&(h=(0,l.select)("#i"+e));var f="sandbox"===u?(0,l.select)(h.nodes()[0].contentDocument.body):(0,l.select)("body"),p=("sandbox"===u?h.nodes()[0].contentDocument:document,f.select('[id="'.concat(e,'"]'))),g=f.select("#"+e+" g");ai(g,d,["barb"],"statediagram",e);var y=p.node().getBBox(),m=y.width+16,b=y.height+16;p.attr("class","statediagram");var v=p.node().getBBox();bn(p,0,m,a.useMaxWidth);var _="".concat(v.x-8," ").concat(v.y-8," ").concat(m," ").concat(b);o.debug("viewBox ".concat(_)),p.attr("viewBox",_);for(var x=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label'),k=0;k<x.length;k++){var w=x[k],E=w.getBBox(),T=document.createElementNS("http://www.w3.org/2000/svg","rect");T.setAttribute("rx",0),T.setAttribute("ry",0),T.setAttribute("width",E.width),T.setAttribute("height",E.height),w.insertBefore(T,w.firstChild)}wn(r.db,p,e)}};function gc(t){return function(t){if(Array.isArray(t))return yc(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return yc(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?yc(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function yc(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var mc="",bc=[],vc=[],_c=[],xc=function(){for(var t=!0,e=0;e<_c.length;e++)_c[e].processed,t=t&&_c[e].processed;return t};const kc={parseDirective:function(t,e,n){Nl.parseDirective(this,t,e,n)},getConfig:function(){return qt().journey},clear:function(){bc.length=0,vc.length=0,mc="",_c.length=0,he()},setDiagramTitle:ye,getDiagramTitle:me,setAccTitle:de,getAccTitle:fe,setAccDescription:pe,getAccDescription:ge,addSection:function(t){mc=t,bc.push(t)},getSections:function(){return bc},getTasks:function(){for(var t=xc(),e=0;!t&&e<100;)t=xc(),e++;return vc.push.apply(vc,_c),vc},addTask:function(t,e){var n=e.substr(1).split(":"),r=0,i=[];1===n.length?(r=Number(n[0]),i=[]):(r=Number(n[0]),i=n[1].split(","));var a=i.map((function(t){return t.trim()})),o={section:mc,type:mc,people:a,task:t,score:r};_c.push(o)},addTaskOrg:function(t){var e={section:mc,type:mc,description:t,task:t,classes:[]};vc.push(e)},getActors:function(){return t=[],vc.forEach((function(e){e.people&&t.push.apply(t,gc(e.people))})),gc(new Set(t)).sort();var t}};var wc=function(t,e){var n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},Ec=function(t,e){var n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),void 0!==n.class&&n.attr("class",n.class),void 0!==e.title&&n.append("title").text(e.title),n},Tc=-1,Cc=function(){function t(t,e,n,i,a,o,s,c){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("font-color",c).style("text-anchor","middle").text(t),s)}function e(t,e,n,i,a,o,s,c,l){for(var u=c.taskFontSize,h=c.taskFontFamily,d=t.split(/<br\s*\/?>/gi),f=0;f<d.length;f++){var p=f*u-u*(d.length-1)/2,g=e.append("text").attr("x",n+a/2).attr("y",i).attr("fill",l).style("text-anchor","middle").style("font-size",u).style("font-family",h);g.append("tspan").attr("x",n+a/2).attr("dy",p).text(d[f]),g.attr("y",i+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),r(g,s)}}function n(t,n,i,a,o,s,c,l){var u=n.append("switch"),h=u.append("foreignObject").attr("x",i).attr("y",a).attr("width",o).attr("height",s).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,u,i,a,o,s,c,l),r(h,c)}function r(t,e){for(var n in e)n in e&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}();const Sc=Ec,Ac=function(t,e,n){var r=t.append("g"),i={x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0};i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=n.width,i.height=n.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,wc(r,i),Cc(n)(e.text,r,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},n,e.colour)},Mc=function(t,e,n){var r,i,a,o=e.x+n.width/2,s=t.append("g");Tc++,s.append("line").attr("id","task"+Tc).attr("x1",o).attr("y1",e.y).attr("x2",o).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),r=s,i={cx:o,cy:300+30*(5-e.score),score:e.score},r.append("circle").attr("cx",i.cx).attr("cy",i.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),(a=r.append("g")).append("circle").attr("cx",i.cx-5).attr("cy",i.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),a.append("circle").attr("cx",i.cx+5).attr("cy",i.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.score>3?function(t){var e=(0,l.arc)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",e).attr("transform","translate("+i.cx+","+(i.cy+2)+")")}(a):i.score<3?function(t){var e=(0,l.arc)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",e).attr("transform","translate("+i.cx+","+(i.cy+7)+")")}(a):function(t){t.append("line").attr("class","mouth").attr("stroke",2).attr("x1",i.cx-5).attr("y1",i.cy+7).attr("x2",i.cx+5).attr("y2",i.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(a);var c={x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0};c.x=e.x,c.y=e.y,c.fill=e.fill,c.width=n.width,c.height=n.height,c.class="task task-type-"+e.num,c.rx=3,c.ry=3,wc(s,c);var u=e.x+14;e.people.forEach((function(t){var n=e.actors[t].color,r={cx:u,cy:e.y,r:7,fill:n,stroke:"#000",title:t,pos:e.actors[t].position};Ec(s,r),u+=10})),Cc(n)(e.task,s,c.x,c.y,c.width,c.height,{class:"task"},n,e.colour)};var Oc={},Nc=qt().journey,Dc=qt().journey.leftMargin,Bc={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){var i=qt().journey,a=this,o=0;this.sequenceItems.forEach((function(s){o++;var c=a.sequenceItems.length-o+1;a.updateVal(s,"starty",e-c*i.boxMargin,Math.min),a.updateVal(s,"stopy",r+c*i.boxMargin,Math.max),a.updateVal(Bc.data,"startx",t-c*i.boxMargin,Math.min),a.updateVal(Bc.data,"stopx",n+c*i.boxMargin,Math.max),a.updateVal(s,"startx",t-c*i.boxMargin,Math.min),a.updateVal(s,"stopx",n+c*i.boxMargin,Math.max),a.updateVal(Bc.data,"starty",e-c*i.boxMargin,Math.min),a.updateVal(Bc.data,"stopy",r+c*i.boxMargin,Math.max)}))},insert:function(t,e,n,r){var i=Math.min(t,n),a=Math.max(t,n),o=Math.min(e,r),s=Math.max(e,r);this.updateVal(Bc.data,"startx",i,Math.min),this.updateVal(Bc.data,"starty",o,Math.min),this.updateVal(Bc.data,"stopx",a,Math.max),this.updateVal(Bc.data,"stopy",s,Math.max),this.updateBounds(i,o,a,s)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},Lc=Nc.sectionFills,Ic=Nc.sectionColours;const Fc={setConf:function(t){Object.keys(t).forEach((function(e){Nc[e]=t[e]}))},draw:function(t,e,n,r){var i=qt().journey;r.db.clear(),r.parser.parse(t+"\n");var a,o=qt().securityLevel;"sandbox"===o&&(a=(0,l.select)("#i"+e));var s="sandbox"===o?(0,l.select)(a.nodes()[0].contentDocument.body):(0,l.select)("body");Bc.init();var c=s.select("#"+e);c.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z");var u=r.db.getTasks(),h=r.db.getDiagramTitle(),d=r.db.getActors();for(var f in Oc)delete Oc[f];var p=0;d.forEach((function(t){Oc[t]={color:i.actorColours[p%i.actorColours.length],position:p},p++})),function(t){var e=qt().journey,n=60;Object.keys(Oc).forEach((function(r){var i=Oc[r].color,a={cx:20,cy:n,r:7,fill:i,stroke:"#000",pos:Oc[r].position};Sc(t,a);var o={x:40,y:n+7,fill:"#666",text:r,textMargin:5|e.boxTextMargin};(function(t,e){var n=e.text.replace(/<br\s*\/?>/gi," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.attr("class","legend"),r.style("text-anchor",e.anchor),void 0!==e.class&&r.attr("class",e.class);var i=r.append("tspan");i.attr("x",e.x+2*e.textMargin),i.text(n)})(t,o),n+=20}))}(c),Bc.insert(0,0,Dc,50*Object.keys(Oc).length),function(t,e,n){for(var r=qt().journey,i="",a=0+(2*r.height+r.diagramMarginY),o=0,s="#CCC",c="black",l=0,u=0;u<e.length;u++){var h=e[u];if(i!==h.section){s=Lc[o%Lc.length],l=o%Lc.length,c=Ic[o%Ic.length];var d={x:u*r.taskMargin+u*r.width+Dc,y:50,text:h.section,fill:s,num:l,colour:c};Ac(t,d,r),i=h.section,o++}var f=h.people.reduce((function(t,e){return Oc[e]&&(t[e]=Oc[e]),t}),{});h.x=u*r.taskMargin+u*r.width+Dc,h.y=a,h.width=r.diagramMarginX,h.height=r.diagramMarginY,h.colour=c,h.fill=s,h.num=l,h.actors=f,Mc(t,h,r),Bc.insert(h.x,h.y,h.x+h.width+r.taskMargin,450)}}(c,u);var g=Bc.getBounds();h&&c.append("text").text(h).attr("x",Dc).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);var y=g.stopy-g.starty+2*i.diagramMarginY,m=Dc+g.stopx+2*i.diagramMarginX;bn(c,0,m,i.useMaxWidth),c.append("line").attr("x1",Dc).attr("y1",4*i.height).attr("x2",m-Dc-4).attr("y2",4*i.height).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");var b=h?70:0;c.attr("viewBox","".concat(g.startx," -25 ").concat(m," ").concat(y+b)),c.attr("preserveAspectRatio","xMinYMin meet"),c.attr("height",y+b+25),wn(r.db,c,e)}};var Rc=n(9763),Pc=n.n(Rc),jc={c4:{db:Le,renderer:Wn,parser:Ye(),init:function(t){Wn.setConf(t.c4)}},class:{db:ar,renderer:_r,parser:ui(),init:function(t){t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,ar.clear()}},error:{db:{},renderer:ki,parser:{parser:{yy:{}},parse:function(){}},init:function(){}},classDiagram:{db:ar,renderer:ci,parser:ui(),init:function(t){t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,ar.clear()}},er:{db:pi,renderer:_i,parser:Ei()},flowchart:{db:Ki,renderer:ba,parser:Ea(),init:function(t){ba.setConf(t.flowchart),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Ki.clear(),Ki.setGen("gen-1")}},"flowchart-v2":{db:Ki,renderer:ka,parser:Ea(),init:function(t){ka.setConf(t.flowchart),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Ki.clear(),Ki.setGen("gen-2")}},gantt:{db:no,renderer:ao,parser:so(),init:function(t){ao.setConf(t.gantt)}},info:{db:uo,renderer:ho,parser:po()},pie:{db:vo,renderer:ko,parser:yo()},requirement:{db:Oo,renderer:jo,parser:Eo()},sequence:{db:os,renderer:Is,parser:Uo(),init:function(t){t.sequence.arrowMarkerAbsolute=t.arrowMarkerAbsolute,t.sequenceDiagram&&(Is.setConf(Object.assign(t.sequence,t.sequenceDiagram)),console.error("`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.")),os.setWrap(t.wrap),Is.setConf(t.sequence)}},state:{db:Ks,renderer:sc,parser:Rs(),init:function(t){t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Ks.clear()}},stateDiagram:{db:Ks,renderer:pc,parser:Rs(),init:function(t){t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Ks.clear()}},journey:{db:kc,renderer:Fc,parser:Pc(),init:function(t){Fc.setConf(t.journey),kc.clear()}}};function zc(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Yc(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?zc(Object(n),!0).forEach((function(e){Uc(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):zc(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Uc(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var $c=qt().gitGraph.mainBranchName,Wc=qt().gitGraph.mainBranchOrder,qc={},Hc=null,Vc={};Vc[$c]={name:$c,order:Wc};var Gc={};Gc[$c]=Hc;var Xc=$c,Zc="LR",Qc=0;function Kc(){return un({length:7})}var Jc={},tl=function(t){if(t=oe.sanitizeText(t,qt()),void 0===Gc[t]){var e=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+t+'")');throw e.hash={text:"checkout "+t,token:"checkout "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+t+'"']},e}var n=Gc[Xc=t];Hc=qc[n]};function el(t,e,n){var r=t.indexOf(e);-1===r?t.push(n):t.splice(r,1,n)}function nl(t){var e=t.reduce((function(t,e){return t.seq>e.seq?t:e}),t[0]),n="";t.forEach((function(t){n+=t===e?"\t*":"\t|"}));var r,i,a,s=[n,e.id,e.seq];for(var c in Gc)Gc[c]===e.id&&s.push(c);if(o.debug(s.join(" ")),e.parents&&2==e.parents.length){var l=qc[e.parents[0]];el(t,e,l),t.push(qc[e.parents[1]])}else{if(0==e.parents.length)return;var u=qc[e.parents];el(t,e,u)}r=t,i=function(t){return t.id},a=Object.create(null),nl(t=r.reduce((function(t,e){var n=i(e);return a[n]||(a[n]=!0,t.push(e)),t}),[]))}var rl=function(){var t=Object.keys(qc).map((function(t){return qc[t]}));return t.forEach((function(t){o.debug(t.id)})),t.sort((function(t,e){return t.seq-e.seq})),t},il={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4};const al={parseDirective:function(t,e,n){Nl.parseDirective(this,t,e,n)},getConfig:function(){return qt().gitGraph},setDirection:function(t){Zc=t},setOptions:function(t){o.debug("options str",t),t=(t=t&&t.trim())||"{}";try{Jc=JSON.parse(t)}catch(t){o.error("error while parsing gitGraph options",t.message)}},getOptions:function(){return Jc},commit:function(t,e,n,r){o.debug("Entering commit:",t,e,n,r),e=oe.sanitizeText(e,qt()),t=oe.sanitizeText(t,qt()),r=oe.sanitizeText(r,qt());var i={id:e||Qc+"-"+Kc(),message:t,seq:Qc++,type:n||il.NORMAL,tag:r||"",parents:null==Hc?[]:[Hc.id],branch:Xc};Hc=i,qc[i.id]=i,Gc[Xc]=i.id,o.debug("in pushCommit "+i.id)},branch:function(t,e){if(t=oe.sanitizeText(t,qt()),void 0!==Gc[t]){var n=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+t+'")');throw n.hash={text:"branch "+t,token:"branch "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+t+'"']},n}Gc[t]=null!=Hc?Hc.id:null,Vc[t]={name:t,order:e?parseInt(e,10):null},tl(t),o.debug("in createBranch")},merge:function(t,e,n,r){t=oe.sanitizeText(t,qt()),e=oe.sanitizeText(e,qt());var i=qc[Gc[Xc]],a=qc[Gc[t]];if(Xc===t){var s=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw s.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},s}if(void 0===i||!i){var c=new Error('Incorrect usage of "merge". Current branch ('+Xc+")has no commits");throw c.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},c}if(void 0===Gc[t]){var l=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") does not exist");throw l.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+t]},l}if(void 0===a||!a){var u=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") has no commits");throw u.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},u}if(i===a){var h=new Error('Incorrect usage of "merge". Both branches have same head');throw h.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},h}if(e&&void 0!==qc[e]){var d=new Error('Incorrect usage of "merge". Commit with id:'+e+" already exists, use different custom Id");throw d.hash={text:"merge "+t+e+n+r,token:"merge "+t+e+n+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+t+" "+e+"_UNIQUE "+n+" "+r]},d}var f={id:e||Qc+"-"+Kc(),message:"merged branch "+t+" into "+Xc,seq:Qc++,parents:[null==Hc?null:Hc.id,Gc[t]],branch:Xc,type:il.MERGE,customType:n,customId:!!e,tag:r||""};Hc=f,qc[f.id]=f,Gc[Xc]=f.id,o.debug(Gc),o.debug("in mergeBranch")},cherryPick:function(t,e){if(t=oe.sanitizeText(t,qt()),e=oe.sanitizeText(e,qt()),!t||void 0===qc[t]){var n=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw n.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},n}var r=qc[t],i=r.branch;if(r.type===il.MERGE){var a=new Error('Incorrect usage of "cherryPick". Source commit should not be a merge commit');throw a.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},a}if(!e||void 0===qc[e]){if(i===Xc){var s=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw s.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},s}var c=qc[Gc[Xc]];if(void 0===c||!c){var l=new Error('Incorrect usage of "cherry-pick". Current branch ('+Xc+")has no commits");throw l.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},l}var u={id:Qc+"-"+Kc(),message:"cherry-picked "+r+" into "+Xc,seq:Qc++,parents:[null==Hc?null:Hc.id,r.id],branch:Xc,type:il.CHERRY_PICK,tag:"cherry-pick:"+r.id};Hc=u,qc[u.id]=u,Gc[Xc]=u.id,o.debug(Gc),o.debug("in cheeryPick")}},checkout:tl,prettyPrint:function(){o.debug(qc),nl([rl()[0]])},clear:function(){qc={},Hc=null;var t=qt().gitGraph.mainBranchName,e=qt().gitGraph.mainBranchOrder;(Gc={})[t]=null,(Vc={})[t]={name:t,order:e},Xc=t,Qc=0,he()},getBranchesAsObjArray:function(){return Object.values(Vc).map((function(t,e){return null!==t.order?t:Yc(Yc({},t),{},{order:parseFloat("0.".concat(e),10)})})).sort((function(t,e){return t.order-e.order})).map((function(t){return{name:t.name}}))},getBranches:function(){return Gc},getCommits:function(){return qc},getCommitsArray:rl,getCurrentBranch:function(){return Xc},getDirection:function(){return Zc},getHead:function(){return Hc},setAccTitle:de,getAccTitle:fe,getAccDescription:ge,setAccDescription:pe,commitType:il};var ol={},sl={},cl={},ll=[],ul=0,hl=function(t,e,n){var r=qt().gitGraph,i=t.append("g").attr("class","commit-bullets"),a=t.append("g").attr("class","commit-labels"),o=0;Object.keys(e).sort((function(t,n){return e[t].seq-e[n].seq})).forEach((function(t,s){var c=e[t],l=sl[c.branch].pos,u=o+10;if(n){var h,d=void 0!==c.customType&&""!==c.customType?c.customType:c.type;switch(d){case 0:default:h="commit-normal";break;case 1:h="commit-reverse";break;case 2:h="commit-highlight";break;case 3:h="commit-merge";break;case 4:h="commit-cherry-pick"}if(2===d){var f=i.append("rect");f.attr("x",u-10),f.attr("y",l-10),f.attr("height",20),f.attr("width",20),f.attr("class","commit ".concat(c.id," commit-highlight").concat(sl[c.branch].index%8," ").concat(h,"-outer")),i.append("rect").attr("x",u-6).attr("y",l-6).attr("height",12).attr("width",12).attr("class","commit ".concat(c.id," commit").concat(sl[c.branch].index%8," ").concat(h,"-inner"))}else if(4===d)i.append("circle").attr("cx",u).attr("cy",l).attr("r",10).attr("class","commit ".concat(c.id," ").concat(h)),i.append("circle").attr("cx",u-3).attr("cy",l+2).attr("r",2.75).attr("fill","#fff").attr("class","commit ".concat(c.id," ").concat(h)),i.append("circle").attr("cx",u+3).attr("cy",l+2).attr("r",2.75).attr("fill","#fff").attr("class","commit ".concat(c.id," ").concat(h)),i.append("line").attr("x1",u+3).attr("y1",l+1).attr("x2",u).attr("y2",l-5).attr("stroke","#fff").attr("class","commit ".concat(c.id," ").concat(h)),i.append("line").attr("x1",u-3).attr("y1",l+1).attr("x2",u).attr("y2",l-5).attr("stroke","#fff").attr("class","commit ".concat(c.id," ").concat(h));else{var p=i.append("circle");if(p.attr("cx",u),p.attr("cy",l),p.attr("r",3===c.type?9:10),p.attr("class","commit ".concat(c.id," commit").concat(sl[c.branch].index%8)),3===d){var g=i.append("circle");g.attr("cx",u),g.attr("cy",l),g.attr("r",6),g.attr("class","commit ".concat(h," ").concat(c.id," commit").concat(sl[c.branch].index%8))}1===d&&i.append("path").attr("d","M ".concat(u-5,",").concat(l-5,"L").concat(u+5,",").concat(l+5,"M").concat(u-5,",").concat(l+5,"L").concat(u+5,",").concat(l-5)).attr("class","commit ".concat(h," ").concat(c.id," commit").concat(sl[c.branch].index%8))}}if(cl[c.id]={x:o+10,y:l},n){if(4!==c.type&&(c.customId&&3===c.type||3!==c.type)&&r.showCommitLabel){var y=a.append("g"),m=y.insert("rect").attr("class","commit-label-bkg"),b=y.append("text").attr("x",o).attr("y",l+25).attr("class","commit-label").text(c.id),v=b.node().getBBox();if(m.attr("x",o+10-v.width/2-2).attr("y",l+13.5).attr("width",v.width+4).attr("height",v.height+4),b.attr("x",o+10-v.width/2),r.rotateCommitLabel){var _=-7.5-(v.width+10)/25*9.5,x=10+v.width/25*8.5;y.attr("transform","translate("+_+", "+x+") rotate(-45, "+o+", "+l+")")}}if(c.tag){var k=a.insert("polygon"),w=a.append("circle"),E=a.append("text").attr("y",l-16).attr("class","tag-label").text(c.tag),T=E.node().getBBox();E.attr("x",o+10-T.width/2);var C=T.height/2,S=l-19.2;k.attr("class","tag-label-bkg").attr("points","\n ".concat(o-T.width/2-2,",").concat(S+2,"\n ").concat(o-T.width/2-2,",").concat(S-2,"\n ").concat(o+10-T.width/2-4,",").concat(S-C-2,"\n ").concat(o+10+T.width/2+4,",").concat(S-C-2,"\n ").concat(o+10+T.width/2+4,",").concat(S+C+2,"\n ").concat(o+10-T.width/2-4,",").concat(S+C+2)),w.attr("cx",o-T.width/2+2).attr("cy",S).attr("r",1.5).attr("class","tag-hole")}}(o+=50)>ul&&(ul=o)}))},dl=function t(e,n,r){var i=r||0,a=e+Math.abs(e-n)/2;if(i>5)return a;for(var o=!0,s=0;s<ll.length;s++)Math.abs(ll[s]-a)<10&&(o=!1);return o?(ll.push(a),a):t(e,n-Math.abs(e-n)/5,i+1)};const fl={draw:function(t,e,n,r){sl={},cl={},ol={},ul=0,ll=[];var i=qt(),a=qt().gitGraph;o.debug("in gitgraph renderer",t+"\n","id:",e,n),ol=r.db.getCommits();var s=r.db.getBranchesAsObjArray(),c=0;s.forEach((function(t,e){sl[t.name]={pos:c,index:e},c+=50+(a.rotateCommitLabel?40:0)}));var u=(0,l.select)('[id="'.concat(e,'"]'));wn(r.db,u,e),hl(u,ol,!1),a.showBranches&&function(t,e){var n=qt().gitGraph,r=t.append("g");e.forEach((function(t,e){var i=e%8,a=sl[t.name].pos,o=r.append("line");o.attr("x1",0),o.attr("y1",a),o.attr("x2",ul),o.attr("y2",a),o.attr("class","branch branch"+i),ll.push(a);var s=function(t){var e=document.createElementNS("http://www.w3.org/2000/svg","text"),n=[];n="string"==typeof t?t.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(t)?t:[];for(var r=0;r<n.length;r++){var i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=n[r].trim(),e.appendChild(i)}return e}(t.name),c=r.insert("rect"),l=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+i);l.node().appendChild(s);var u=s.getBBox();c.attr("class","branchLabelBkg label"+i).attr("rx",4).attr("ry",4).attr("x",-u.width-4-(!0===n.rotateCommitLabel?30:0)).attr("y",-u.height/2+8).attr("width",u.width+18).attr("height",u.height+4),l.attr("transform","translate("+(-u.width-14-(!0===n.rotateCommitLabel?30:0))+", "+(a-u.height/2-1)+")"),c.attr("transform","translate(-19, "+(a-u.height/2)+")")}))}(u,s),function(t,e){var n=t.append("g").attr("class","commit-arrows");Object.keys(e).forEach((function(t,r){var i=e[t];i.parents&&i.parents.length>0&&i.parents.forEach((function(t){!function(t,e,n,r){var i=qt(),a=cl[e.id],o=cl[n.id],s=function(t,e,n){return cl[e.id],cl[t.id],Object.keys(n).filter((function(r){return n[r].branch===e.branch&&n[r].seq>t.seq&&n[r].seq<e.seq})).length>0}(e,n,r);i.arrowMarkerAbsolute&&(window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(").replace(/\)/g,"\\)");var c,l="",u="",h=0,d=0,f=sl[n.branch].index;if(s){l="A 10 10, 0, 0, 0,",u="A 10 10, 0, 0, 1,",h=10,d=10,f=sl[n.branch].index;var p=a.y<o.y?dl(a.y,o.y):dl(o.y,a.y);c=a.y<o.y?"M ".concat(a.x," ").concat(a.y," L ").concat(a.x," ").concat(p-h," ").concat(l," ").concat(a.x+d," ").concat(p," L ").concat(o.x-h," ").concat(p," ").concat(u," ").concat(o.x," ").concat(p+d," L ").concat(o.x," ").concat(o.y):"M ".concat(a.x," ").concat(a.y," L ").concat(a.x," ").concat(p+h," ").concat(u," ").concat(a.x+d," ").concat(p," L ").concat(o.x-h," ").concat(p," ").concat(l," ").concat(o.x," ").concat(p-d," L ").concat(o.x," ").concat(o.y)}else a.y<o.y&&(l="A 20 20, 0, 0, 0,",h=20,d=20,f=sl[n.branch].index,c="M ".concat(a.x," ").concat(a.y," L ").concat(a.x," ").concat(o.y-h," ").concat(l," ").concat(a.x+d," ").concat(o.y," L ").concat(o.x," ").concat(o.y)),a.y>o.y&&(l="A 20 20, 0, 0, 0,",h=20,d=20,f=sl[e.branch].index,c="M ".concat(a.x," ").concat(a.y," L ").concat(o.x-h," ").concat(a.y," ").concat(l," ").concat(o.x," ").concat(a.y-d," L ").concat(o.x," ").concat(o.y)),a.y===o.y&&(f=sl[e.branch].index,c="M ".concat(a.x," ").concat(a.y," L ").concat(a.x," ").concat(o.y-h," ").concat(l," ").concat(a.x+d," ").concat(o.y," L ").concat(o.x," ").concat(o.y));t.append("path").attr("d",c).attr("class","arrow arrow"+f%8)}(n,e[t],i,e)}))}))}(u,ol),hl(u,ol,!0);var h=a.diagramPadding,d=u.node().getBBox(),f=d.width+2*h,p=d.height+2*h;bn(u,0,f,i.useMaxWidth);var g="".concat(d.x-h-(a.showBranches&&!0===a.rotateCommitLabel?30:0)," ").concat(d.y-h," ").concat(f," ").concat(p);u.attr("viewBox",g)}};var pl=n(2553),gl=n.n(pl);const yl=function(t){return t.match(/^\s*gitGraph/)?"gitGraph":null},ml=function(){var t,e,n,r,i;t="gitGraph",e=gl(),n=al,r=fl,i=yl,jc[t]={parser:e,db:n,renderer:r,init:undefined},function(t,e){We.gitGraph={detector:e}}(0,i)};function bl(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var vl=function(){function t(e){var n,r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),bl(this,"type","graph"),bl(this,"parser",void 0),bl(this,"renderer",void 0),bl(this,"db",void 0);var i=jc,a=qt();this.txt=e,this.type=qe(e,a),o.debug("Type "+this.type),this.db=i[this.type].db,null===(n=(r=this.db).clear)||void 0===n||n.call(r),this.renderer=i[this.type].renderer,this.parser=i[this.type].parser,this.parser.parser.yy=this.db,"function"==typeof i[this.type].init&&(i[this.type].init(a),o.debug("Initialized diagram "+this.type,a)),this.txt=this.txt+"\n",this.parser.parser.yy.graphType=this.type,this.parser.parser.yy.parseError=function(t,e){throw{str:t,hash:e}},this.parser.parse(this.txt)}var e,r;return e=t,(r=[{key:"parse",value:function(t){var e=!1;try{t+="\n",this.db.clear(),this.parser.parse(t)}catch(t){if(e=!0,!n.g.mermaid.parseError)throw t;null!=t.str?n.g.mermaid.parseError(t.str,t.hash):n.g.mermaid.parseError(t)}return!e}},{key:"getParser",value:function(){return this.parser}},{key:"getType",value:function(){return this.type}}])&&function(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();const _l=vl,xl=function(t){return"g.classGroup text {\n fill: ".concat(t.nodeBorder,";\n fill: ").concat(t.classText,";\n stroke: none;\n font-family: ").concat(t.fontFamily,";\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ").concat(t.classText,";\n}\n.edgeLabel .label rect {\n fill: ").concat(t.mainBkg,";\n}\n.label text {\n fill: ").concat(t.classText,";\n}\n.edgeLabel .label span {\n background: ").concat(t.mainBkg,";\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ").concat(t.nodeBorder,";\n stroke: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n}\n\ng.classGroup line {\n stroke: ").concat(t.nodeBorder,";\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ").concat(t.mainBkg,";\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ").concat(t.nodeBorder,";\n font-size: 10px;\n}\n\n.relation {\n stroke: ").concat(t.lineColor,";\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n#compositionStart, .composition {\n fill: ").concat(t.lineColor," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ").concat(t.lineColor," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ").concat(t.lineColor," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ").concat(t.lineColor," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: ").concat(t.lineColor," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: ").concat(t.lineColor," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: ").concat(t.mainBkg," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: ").concat(t.mainBkg," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ").concat(t.mainBkg," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ").concat(t.mainBkg," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n}\n\n")},kl=function(t){return".label {\n font-family: ".concat(t.fontFamily,";\n color: ").concat(t.nodeTextColor||t.textColor,";\n }\n .cluster-label text {\n fill: ").concat(t.titleColor,";\n }\n .cluster-label span {\n color: ").concat(t.titleColor,";\n }\n\n .label text,span {\n fill: ").concat(t.nodeTextColor||t.textColor,";\n color: ").concat(t.nodeTextColor||t.textColor,";\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ").concat(t.arrowheadColor,";\n }\n\n .edgePath .path {\n stroke: ").concat(t.lineColor,";\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ").concat(t.lineColor,";\n fill: none;\n }\n\n .edgeLabel {\n background-color: ").concat(t.edgeLabelBackground,";\n rect {\n opacity: 0.5;\n background-color: ").concat(t.edgeLabelBackground,";\n fill: ").concat(t.edgeLabelBackground,";\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ").concat(t.clusterBkg,";\n stroke: ").concat(t.clusterBorder,";\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ").concat(t.titleColor,";\n }\n\n .cluster span {\n color: ").concat(t.titleColor,";\n }\n /* .cluster div {\n color: ").concat(t.titleColor,";\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ").concat(t.fontFamily,";\n font-size: 12px;\n background: ").concat(t.tertiaryColor,";\n border: 1px solid ").concat(t.border2,";\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n")},wl=function(t){return"\ndefs #statediagram-barbEnd {\n fill: ".concat(t.transitionColor,";\n stroke: ").concat(t.transitionColor,";\n }\ng.stateGroup text {\n fill: ").concat(t.nodeBorder,";\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ").concat(t.textColor,";\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ").concat(t.stateLabelColor,";\n}\n\ng.stateGroup rect {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n}\n\ng.stateGroup line {\n stroke: ").concat(t.lineColor,";\n stroke-width: 1;\n}\n\n.transition {\n stroke: ").concat(t.transitionColor,";\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ").concat(t.background,";\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ").concat(t.noteBorderColor,";\n fill: ").concat(t.noteBkgColor,";\n\n text {\n fill: ").concat(t.noteTextColor,";\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ").concat(t.mainBkg,";\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ").concat(t.labelBackgroundColor,";\n opacity: 0.5;\n}\n.edgeLabel .label text {\n fill: ").concat(t.transitionLabelColor||t.tertiaryTextColor,";\n}\n.label div .edgeLabel {\n color: ").concat(t.transitionLabelColor||t.tertiaryTextColor,";\n}\n\n.stateLabel text {\n fill: ").concat(t.stateLabelColor,";\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ").concat(t.specialStateColor,";\n stroke: ").concat(t.specialStateColor,";\n}\n\n.node .fork-join {\n fill: ").concat(t.specialStateColor,";\n stroke: ").concat(t.specialStateColor,";\n}\n\n.node circle.state-end {\n fill: ").concat(t.innerEndBackground,";\n stroke: ").concat(t.background,";\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ").concat(t.compositeBackground||t.background,";\n // stroke: ").concat(t.background,";\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ").concat(t.stateBkg||t.mainBkg,";\n stroke: ").concat(t.stateBorder||t.nodeBorder,";\n stroke-width: 1px;\n}\n.node polygon {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.stateBorder||t.nodeBorder,";;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ").concat(t.lineColor,";\n}\n\n.statediagram-cluster rect {\n fill: ").concat(t.compositeTitleBackground,";\n stroke: ").concat(t.stateBorder||t.nodeBorder,";\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ").concat(t.stateLabelColor,";\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ").concat(t.stateBorder||t.nodeBorder,";\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ").concat(t.compositeBackground||t.background,";\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ").concat(t.altBackground?t.altBackground:"#efefef",";\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ").concat(t.altBackground?t.altBackground:"#efefef",";\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ").concat(t.noteBkgColor,";\n stroke: ").concat(t.noteBorderColor,";\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ").concat(t.noteBkgColor,";\n stroke: ").concat(t.noteBorderColor,";\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ").concat(t.noteTextColor,";\n}\n\n.statediagram-note .nodeLabel {\n color: ").concat(t.noteTextColor,";\n}\n.statediagram .edgeLabel {\n color: red; // ").concat(t.noteTextColor,";\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ").concat(t.lineColor,";\n stroke: ").concat(t.lineColor,";\n stroke-width: 1;\n}\n")};var El={flowchart:kl,"flowchart-v2":kl,sequence:function(t){return".actor {\n stroke: ".concat(t.actorBorder,";\n fill: ").concat(t.actorBkg,";\n }\n\n text.actor > tspan {\n fill: ").concat(t.actorTextColor,";\n stroke: none;\n }\n\n .actor-line {\n stroke: ").concat(t.actorLineColor,";\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ").concat(t.signalColor,";\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ").concat(t.signalColor,";\n }\n\n #arrowhead path {\n fill: ").concat(t.signalColor,";\n stroke: ").concat(t.signalColor,";\n }\n\n .sequenceNumber {\n fill: ").concat(t.sequenceNumberColor,";\n }\n\n #sequencenumber {\n fill: ").concat(t.signalColor,";\n }\n\n #crosshead path {\n fill: ").concat(t.signalColor,";\n stroke: ").concat(t.signalColor,";\n }\n\n .messageText {\n fill: ").concat(t.signalTextColor,";\n stroke: none;\n }\n\n .labelBox {\n stroke: ").concat(t.labelBoxBorderColor,";\n fill: ").concat(t.labelBoxBkgColor,";\n }\n\n .labelText, .labelText > tspan {\n fill: ").concat(t.labelTextColor,";\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ").concat(t.loopTextColor,";\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ").concat(t.labelBoxBorderColor,";\n fill: ").concat(t.labelBoxBorderColor,";\n }\n\n .note {\n //stroke: #decc93;\n stroke: ").concat(t.noteBorderColor,";\n fill: ").concat(t.noteBkgColor,";\n }\n\n .noteText, .noteText > tspan {\n fill: ").concat(t.noteTextColor,";\n stroke: none;\n }\n\n .activation0 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .activation1 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .activation2 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .actorPopupMenu {\n position: absolute;\n }\n\n .actorPopupMenuPanel {\n position: absolute;\n fill: ").concat(t.actorBkg,";\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));\n}\n .actor-man line {\n stroke: ").concat(t.actorBorder,";\n fill: ").concat(t.actorBkg,";\n }\n .actor-man circle, line {\n stroke: ").concat(t.actorBorder,";\n fill: ").concat(t.actorBkg,";\n stroke-width: 2px;\n }\n")},gantt:function(t){return'\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n .exclude-range {\n fill: '.concat(t.excludeBkgColor,";\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ").concat(t.sectionBkgColor,";\n }\n\n .section2 {\n fill: ").concat(t.sectionBkgColor2,";\n }\n\n .section1,\n .section3 {\n fill: ").concat(t.altSectionBkgColor,";\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle1 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle2 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle3 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle {\n text-anchor: start;\n // font-size: ").concat(t.ganttFontSize,";\n // text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ").concat(t.gridColor,";\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ").concat(t.fontFamily,";\n fill: ").concat(t.textColor,";\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ").concat(t.todayLineColor,";\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n // .taskText:not([font-size]) {\n // font-size: ").concat(t.ganttFontSize,";\n // }\n\n .taskTextOutsideRight {\n fill: ").concat(t.taskTextDarkColor,";\n text-anchor: start;\n // font-size: ").concat(t.ganttFontSize,";\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ").concat(t.taskTextDarkColor,";\n text-anchor: end;\n // font-size: ").concat(t.ganttFontSize,";\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ").concat(t.taskTextColor,";\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ").concat(t.taskBkgColor,";\n stroke: ").concat(t.taskBorderColor,";\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ").concat(t.taskTextOutsideColor,";\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ").concat(t.taskTextOutsideColor,";\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ").concat(t.activeTaskBkgColor,";\n stroke: ").concat(t.activeTaskBorderColor,";\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ").concat(t.doneTaskBorderColor,";\n fill: ").concat(t.doneTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.critBkgColor,";\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.activeTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.doneTaskBkgColor,";\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ").concat(t.textColor," ;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n")},classDiagram:xl,"classDiagram-v2":xl,class:xl,stateDiagram:wl,state:wl,gitGraph:function(t){return"\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ".concat([0,1,2,3,4,5,6,7].map((function(e){return"\n .branch-label".concat(e," { fill: ").concat(t["gitBranchLabel"+e],"; }\n .commit").concat(e," { stroke: ").concat(t["git"+e],"; fill: ").concat(t["git"+e],"; }\n .commit-highlight").concat(e," { stroke: ").concat(t["gitInv"+e],"; fill: ").concat(t["gitInv"+e],"; }\n .label").concat(e," { fill: ").concat(t["git"+e],"; }\n .arrow").concat(e," { stroke: ").concat(t["git"+e],"; }\n ")})).join("\n"),"\n\n .branch {\n stroke-width: 1;\n stroke: ").concat(t.lineColor,";\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ").concat(t.commitLabelFontSize,"; fill: ").concat(t.commitLabelColor,";}\n .commit-label-bkg { font-size: ").concat(t.commitLabelFontSize,"; fill: ").concat(t.commitLabelBackground,"; opacity: 0.5; }\n .tag-label { font-size: ").concat(t.tagLabelFontSize,"; fill: ").concat(t.tagLabelColor,";}\n .tag-label-bkg { fill: ").concat(t.tagLabelBackground,"; stroke: ").concat(t.tagLabelBorder,"; }\n .tag-hole { fill: ").concat(t.textColor,"; }\n\n .commit-merge {\n stroke: ").concat(t.primaryColor,";\n fill: ").concat(t.primaryColor,";\n }\n .commit-reverse {\n stroke: ").concat(t.primaryColor,";\n fill: ").concat(t.primaryColor,";\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ").concat(t.primaryColor,";\n fill: ").concat(t.primaryColor,";\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n }\n")},info:function(){return""},pie:function(t){return"\n .pieCircle{\n stroke: ".concat(t.pieStrokeColor,";\n stroke-width : ").concat(t.pieStrokeWidth,";\n opacity : ").concat(t.pieOpacity,";\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ").concat(t.pieTitleTextSize,";\n fill: ").concat(t.pieTitleTextColor,";\n font-family: ").concat(t.fontFamily,";\n }\n .slice {\n font-family: ").concat(t.fontFamily,";\n fill: ").concat(t.pieSectionTextColor,";\n font-size:").concat(t.pieSectionTextSize,";\n // fill: white;\n }\n .legend text {\n fill: ").concat(t.pieLegendTextColor,";\n font-family: ").concat(t.fontFamily,";\n font-size: ").concat(t.pieLegendTextSize,";\n }\n")},er:function(t){return"\n .entityBox {\n fill: ".concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n }\n\n .attributeBoxOdd {\n fill: #ffffff;\n stroke: ").concat(t.nodeBorder,";\n }\n\n .attributeBoxEven {\n fill: #f2f2f2;\n stroke: ").concat(t.nodeBorder,";\n }\n\n .relationshipLabelBox {\n fill: ").concat(t.tertiaryColor,";\n opacity: 0.7;\n background-color: ").concat(t.tertiaryColor,";\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ").concat(t.lineColor,";\n }\n")},error:function(){return""},journey:function(t){return".label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ".concat(t.textColor,";\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ").concat(t.textColor,"\n }\n\n .legend {\n fill: ").concat(t.textColor,";\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ").concat(t.textColor,"\n }\n\n .face {\n ").concat(t.faceColor?"fill: ".concat(t.faceColor):"fill: #FFF8DC",";\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ").concat(t.arrowheadColor,";\n }\n\n .edgePath .path {\n stroke: ").concat(t.lineColor,";\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ").concat(t.lineColor,";\n fill: none;\n }\n\n .edgeLabel {\n background-color: ").concat(t.edgeLabelBackground,";\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ").concat(t.titleColor,";\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ").concat(t.tertiaryColor,";\n border: 1px solid ").concat(t.border2,";\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType0):"",";\n }\n .task-type-1, .section-type-1 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType1):"",";\n }\n .task-type-2, .section-type-2 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType2):"",";\n }\n .task-type-3, .section-type-3 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType3):"",";\n }\n .task-type-4, .section-type-4 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType4):"",";\n }\n .task-type-5, .section-type-5 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType5):"",";\n }\n .task-type-6, .section-type-6 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType6):"",";\n }\n .task-type-7, .section-type-7 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType7):"",";\n }\n\n .actor-0 {\n ").concat(t.actor0?"fill: ".concat(t.actor0):"",";\n }\n .actor-1 {\n ").concat(t.actor1?"fill: ".concat(t.actor1):"",";\n }\n .actor-2 {\n ").concat(t.actor2?"fill: ".concat(t.actor2):"",";\n }\n .actor-3 {\n ").concat(t.actor3?"fill: ".concat(t.actor3):"",";\n }\n .actor-4 {\n ").concat(t.actor4?"fill: ".concat(t.actor4):"",";\n }\n .actor-5 {\n ").concat(t.actor5?"fill: ".concat(t.actor5):"",";\n }\n\n }\n")},requirement:function(t){return"\n\n marker {\n fill: ".concat(t.relationColor,";\n stroke: ").concat(t.relationColor,";\n }\n\n marker.cross {\n stroke: ").concat(t.lineColor,";\n }\n\n svg {\n font-family: ").concat(t.fontFamily,";\n font-size: ").concat(t.fontSize,";\n }\n\n .reqBox {\n fill: ").concat(t.requirementBackground,";\n fill-opacity: 100%;\n stroke: ").concat(t.requirementBorderColor,";\n stroke-width: ").concat(t.requirementBorderSize,";\n }\n \n .reqTitle, .reqLabel{\n fill: ").concat(t.requirementTextColor,";\n }\n .reqLabelBox {\n fill: ").concat(t.relationLabelBackground,";\n fill-opacity: 100%;\n }\n\n .req-title-line {\n stroke: ").concat(t.requirementBorderColor,";\n stroke-width: ").concat(t.requirementBorderSize,";\n }\n .relationshipLine {\n stroke: ").concat(t.relationColor,";\n stroke-width: 1;\n }\n .relationshipLabel {\n fill: ").concat(t.relationLabelColor,";\n }\n\n")},c4:function(t){return".person {\n stroke: ".concat(t.personBorder,";\n fill: ").concat(t.personBkg,";\n }\n")}};function Tl(t){return Tl="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Tl(t)}var Cl=!1,Sl=function(t){return t.replace(/\ufb02\xb0\xb0/g,(function(){return"&#"})).replace(/\ufb02\xb0/g,(function(){return"&"})).replace(/\xb6\xdf/g,(function(){return";"}))},Al={};function Ml(t){ba.setConf(t.flowchart),ka.setConf(t.flowchart),void 0!==t.sequenceDiagram&&Is.setConf(Q(t.sequence,t.sequenceDiagram)),Is.setConf(t.sequence),ao.setConf(t.gantt),sc.setConf(t.state),pc.setConf(t.state),Fc.setConf(t.journey),ki.setConf(t.class)}var Ol=Object.freeze({render:function(t,e,n,r){Cl||(ml(),Cl=!0),Gt();var i=e.replace(/\r\n?/g,"\n"),a=kn.detectInit(i);a&&(_n(a),Vt(a));var s=qt();o.debug(s),e.length>s.maxTextSize&&(i="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa");var c,u,h=(0,l.select)("body");if(void 0!==r){if("sandbox"===s.securityLevel){var d=(0,l.select)("body").append("iframe").attr("id","i"+t).attr("style","width: 100%; height: 100%;").attr("sandbox","");(h=(0,l.select)(d.nodes()[0].contentDocument.body)).node().style.margin=0}if(r.innerHTML="","sandbox"===s.securityLevel){var f=(0,l.select)(r).append("iframe").attr("id","i"+t).attr("style","width: 100%; height: 100%;").attr("sandbox","");(h=(0,l.select)(f.nodes()[0].contentDocument.body)).node().style.margin=0}else h=(0,l.select)(r);h.append("div").attr("id","d"+t).attr("style","font-family: "+s.fontFamily).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").attr("xmlns:xlink","http://www.w3.org/1999/xlink").append("g")}else{var p,g=document.getElementById(t);if(g&&g.remove(),(p="sandbox"!==s.securityLevel?document.querySelector("#d"+t):document.querySelector("#i"+t))&&p.remove(),"sandbox"===s.securityLevel){var y=(0,l.select)("body").append("iframe").attr("id","i"+t).attr("style","width: 100%; height: 100%;").attr("sandbox","");(h=(0,l.select)(y.nodes()[0].contentDocument.body)).node().style.margin=0}else h=(0,l.select)("body");h.append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g")}i=i.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})).replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})).replace(/#\w+;/g,(function(t){var e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"\ufb02\xb0\xb0"+e+"\xb6\xdf":"\ufb02\xb0"+e+"\xb6\xdf"}));try{c=new _l(i)}catch(t){c=new _l("error"),u=t}var m=h.select("#d"+t).node(),b=c.type,v=m.firstChild,_=v.firstChild,x="";if(void 0!==s.themeCSS&&(x+="\n".concat(s.themeCSS)),void 0!==s.fontFamily&&(x+="\n:root { --mermaid-font-family: ".concat(s.fontFamily,"}")),void 0!==s.altFontFamily&&(x+="\n:root { --mermaid-alt-font-family: ".concat(s.altFontFamily,"}")),"flowchart"===b||"flowchart-v2"===b||"graph"===b){var k=ba.getClasses(i,c),T=s.htmlLabels||s.flowchart.htmlLabels;for(var C in k)T?(x+="\n.".concat(C," > * { ").concat(k[C].styles.join(" !important; ")," !important; }"),x+="\n.".concat(C," span { ").concat(k[C].styles.join(" !important; ")," !important; }")):(x+="\n.".concat(C," path { ").concat(k[C].styles.join(" !important; ")," !important; }"),x+="\n.".concat(C," rect { ").concat(k[C].styles.join(" !important; ")," !important; }"),x+="\n.".concat(C," polygon { ").concat(k[C].styles.join(" !important; ")," !important; }"),x+="\n.".concat(C," ellipse { ").concat(k[C].styles.join(" !important; ")," !important; }"),x+="\n.".concat(C," circle { ").concat(k[C].styles.join(" !important; ")," !important; }"),k[C].textStyles&&(x+="\n.".concat(C," tspan { ").concat(k[C].textStyles.join(" !important; ")," !important; }")))}var S=function(t,e){return w(W("".concat(t,"{").concat(e,"}")),E)}("#".concat(t),function(t,e,n){return" {\n font-family: ".concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n fill: ").concat(n.textColor,"\n }\n\n /* Classes common for multiple diagrams */\n\n .error-icon {\n fill: ").concat(n.errorBkgColor,";\n }\n .error-text {\n fill: ").concat(n.errorTextColor,";\n stroke: ").concat(n.errorTextColor,";\n }\n\n .edge-thickness-normal {\n stroke-width: 2px;\n }\n .edge-thickness-thick {\n stroke-width: 3.5px\n }\n .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n .marker {\n fill: ").concat(n.lineColor,";\n stroke: ").concat(n.lineColor,";\n }\n .marker.cross {\n stroke: ").concat(n.lineColor,";\n }\n\n svg {\n font-family: ").concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n }\n\n ").concat(El[t](n),"\n\n ").concat(e,"\n")}(b,x,s.themeVariables)),A=document.createElement("style");A.innerHTML="#".concat(t," ")+S,v.insertBefore(A,_);try{c.renderer.draw(i,t,X,c)}catch(e){throw ki.draw(t,X),e}h.select('[id="'.concat(t,'"]')).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");var M=h.select("#d"+t).node().innerHTML;if(o.debug("cnf.arrowMarkerAbsolute",s.arrowMarkerAbsolute),s.arrowMarkerAbsolute&&"false"!==s.arrowMarkerAbsolute||"sandbox"===s.arrowMarkerAbsolute||(M=M.replace(/marker-end="url\(.*?#/g,'marker-end="url(#',"g")),M=(M=Sl(M)).replace(/<br>/g,"<br/>"),"sandbox"===s.securityLevel){var O=h.select("#d"+t+" svg").node(),N="100%";O&&(N=O.viewBox.baseVal.height+"px"),M='<iframe style="width:'.concat("100%",";height:").concat(N,';border:0;margin:0;" src="data:text/html;base64,').concat(btoa('<body style="margin:0">'+M+"</body>"),'" sandbox="allow-top-navigation-by-user-activation allow-popups">\n The \u201ciframe\u201d tag is not supported by your browser.\n</iframe>')}else"loose"!==s.securityLevel&&(M=Zt().sanitize(M,{ADD_TAGS:["foreignobject"],ADD_ATTR:["dominant-baseline"]}));if(void 0!==n)switch(b){case"flowchart":case"flowchart-v2":n(M,Ki.bindFunctions);break;case"gantt":n(M,no.bindFunctions);break;case"class":case"classDiagram":n(M,ar.bindFunctions);break;default:n(M)}else o.debug("CB = undefined!");ss.forEach((function(t){t()})),ss=[];var D="sandbox"===s.securityLevel?"#i"+t:"#d"+t,B=(0,l.select)(D).node();if(null!==B&&"function"==typeof B.remove&&(0,l.select)(D).node().remove(),u)throw u;return M},parse:function(t,e){Cl||(ml(),Cl=!0);var n=!1;try{var r=e||new _l(t);return r.db.clear(),r.parse(t)}catch(t){if(n=!0,!Il.parseError)throw t;null!=t.str?Il.parseError(t.str,t.hash):Il.parseError(t)}return!n},parseDirective:function(t,e,n,r){try{if(void 0!==e)switch(e=e.trim(),n){case"open_directive":Al={};break;case"type_directive":Al.type=e.toLowerCase();break;case"arg_directive":Al.args=JSON.parse(e);break;case"close_directive":(function(t,e,n){switch(o.debug("Directive type=".concat(e.type," with args:"),e.args),e.type){case"init":case"initialize":["config"].forEach((function(t){void 0!==e.args[t]&&("flowchart-v2"===n&&(n="flowchart"),e.args[n]=e.args[t],delete e.args[t])})),o.debug("sanitize in handleDirective",e.args),_n(e.args),o.debug("sanitize in handleDirective (done)",e.args),Vt(e.args);break;case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap("wrap"===e.type);break;case"themeCss":o.warn("themeCss encountered");break;default:o.warn("Unhandled directive: source: '%%{".concat(e.type,": ").concat(JSON.stringify(e.args?e.args:{}),"}%%"),e)}})(t,Al,r),Al=null}}catch(t){o.error("Error while rendering sequenceDiagram directive: ".concat(e," jison context: ").concat(n)),o.error(t.message)}},initialize:function(t){var e;null!=t&&t.fontFamily&&(null!==(e=t.themeVariables)&&void 0!==e&&e.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),function(t){Pt=Q({},t)}(t),null!=t&&t.theme&&Ot[t.theme]?t.themeVariables=Ot[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Ot.default.getThemeVariables(t.themeVariables));var n="object"===Tl(t)?function(t){return zt=Q({},jt),zt=Q(zt,t),t.theme&&Ot[t.theme]&&(zt.themeVariables=Ot[t.theme].getThemeVariables(t.themeVariables)),Ut=$t(zt,Yt),zt}(t):Wt();Ml(n),s(n.logLevel),Cl||(ml(),Cl=!0)},getConfig:qt,setConfig:function(t){return Q(Ut,t),qt()},getSiteConfig:Wt,updateSiteConfig:function(t){return zt=Q(zt,t),$t(zt,Yt),zt},reset:function(){Gt()},globalReset:function(){Gt(),Ml(qt())},defaultConfig:jt});s(qt().logLevel),Gt(qt());const Nl=Ol;var Dl=function(){var t,e,n=Nl.getConfig();arguments.length>=2?(void 0!==arguments[0]&&(Ll.sequenceConfig=arguments[0]),t=arguments[1]):t=arguments[0],"function"==typeof arguments[arguments.length-1]?(e=arguments[arguments.length-1],o.debug("Callback function found")):void 0!==n.mermaid&&("function"==typeof n.mermaid.callback?(e=n.mermaid.callback,o.debug("Callback function found")):o.debug("No Callback function found")),t=void 0===t?document.querySelectorAll(".mermaid"):"string"==typeof t?document.querySelectorAll(t):t instanceof window.Node?[t]:t,o.debug("Start On Load before: "+Ll.startOnLoad),void 0!==Ll.startOnLoad&&(o.debug("Start On Load inner: "+Ll.startOnLoad),Nl.updateSiteConfig({startOnLoad:Ll.startOnLoad})),void 0!==Ll.ganttConfig&&Nl.updateSiteConfig({gantt:Ll.ganttConfig});for(var r,i=new kn.initIdGenerator(n.deterministicIds,n.deterministicIDSeed),a=[],s=function(n){o.info("Rendering diagram: "+t[n].id,n);var s=t[n];if(s.getAttribute("data-processed"))return"continue";s.setAttribute("data-processed",!0);var c="mermaid-".concat(i.next());r=s.innerHTML,r=kn.entityDecode(r).trim().replace(/<br\s*\/?>/gi,"<br/>");var l=kn.detectInit(r);l&&o.debug("Detected early reinit: ",l);try{Nl.render(c,r,(function(t,n){s.innerHTML=t,void 0!==e&&e(c),n&&n(s)}),s)}catch(t){o.warn("Catching Error (bootstrap)",t),"function"==typeof Ll.parseError&&Ll.parseError({error:t,str:t.str,hash:t.hash,message:t.str}),a.push({error:t,str:t.str,hash:t.hash,message:t.str})}},c=0;c<t.length;c++)s(c);if(a.length>0)throw a[0]},Bl=function(){Ll.startOnLoad?Nl.getConfig().startOnLoad&&Ll.init():void 0===Ll.startOnLoad&&(o.debug("In start, no config"),Nl.getConfig().startOnLoad&&Ll.init())};"undefined"!=typeof document&&window.addEventListener("load",(function(){Bl()}),!1);var Ll={startOnLoad:!0,htmlLabels:!0,diagrams:{},mermaidAPI:Nl,parse:null!=Nl?Nl.parse:null,render:null!=Nl?Nl.render:null,init:function(){try{Dl.apply(void 0,arguments)}catch(t){o.warn("Syntax Error rendering"),o.warn(t.str)}},initThrowsErrors:Dl,initialize:function(t){void 0!==t.mermaid&&(void 0!==t.mermaid.startOnLoad&&(Ll.startOnLoad=t.mermaid.startOnLoad),void 0!==t.mermaid.htmlLabels&&(Ll.htmlLabels="false"!==t.mermaid.htmlLabels&&!1!==t.mermaid.htmlLabels)),Nl.initialize(t)},contentLoaded:Bl,setParseErrorHandler:function(t){Ll.parseError=t}};const Il=Ll},4949:(t,e,n)=>{t.exports={graphlib:n(6614),dagre:n(6478),intersect:n(8114),render:n(5787),util:n(8355),version:n(5689)}},9144:(t,e,n)=>{var r=n(8355);function i(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])}t.exports={default:i,normal:i,vee:function(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])},undirected:function(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])}}},5632:(t,e,n)=>{var r=n(8355),i=n(4322),a=n(1322);t.exports=function(t,e){var n,o=e.nodes().filter((function(t){return r.isSubgraph(e,t)})),s=t.selectAll("g.cluster").data(o,(function(t){return t}));return s.selectAll("*").remove(),s.enter().append("g").attr("class","cluster").attr("id",(function(t){return e.node(t).id})).style("opacity",0),s=t.selectAll("g.cluster"),r.applyTransition(s,e).style("opacity",1),s.each((function(t){var n=e.node(t),r=i.select(this);i.select(this).append("rect");var o=r.append("g").attr("class","label");a(o,n,n.clusterLabelPos)})),s.selectAll("rect").each((function(t){var n=e.node(t),a=i.select(this);r.applyStyle(a,n.style)})),n=s.exit?s.exit():s.selectAll(null),r.applyTransition(n,e).style("opacity",0).remove(),s}},6315:(t,e,n)=>{var r=n(1034),i=n(1322),a=n(8355),o=n(4322);t.exports=function(t,e){var n,s=t.selectAll("g.edgeLabel").data(e.edges(),(function(t){return a.edgeToId(t)})).classed("update",!0);return s.exit().remove(),s.enter().append("g").classed("edgeLabel",!0).style("opacity",0),(s=t.selectAll("g.edgeLabel")).each((function(t){var n=o.select(this);n.select(".label").remove();var a=e.edge(t),s=i(n,e.edge(t),0,0).classed("label",!0),c=s.node().getBBox();a.labelId&&s.attr("id",a.labelId),r.has(a,"width")||(a.width=c.width),r.has(a,"height")||(a.height=c.height)})),n=s.exit?s.exit():s.selectAll(null),a.applyTransition(n,e).style("opacity",0).remove(),s}},940:(t,e,n)=>{var r=n(1034),i=n(3042),a=n(8355),o=n(4322);function s(t,e){var n=(o.line||o.svg.line)().x((function(t){return t.x})).y((function(t){return t.y}));return(n.curve||n.interpolate)(t.curve),n(e)}t.exports=function(t,e,n){var c=t.selectAll("g.edgePath").data(e.edges(),(function(t){return a.edgeToId(t)})).classed("update",!0),l=function(t,e){var n=t.enter().append("g").attr("class","edgePath").style("opacity",0);return n.append("path").attr("class","path").attr("d",(function(t){var n=e.edge(t),i=e.node(t.v).elem;return s(n,r.range(n.points.length).map((function(){return e=(t=i).getBBox(),{x:(n=t.ownerSVGElement.getScreenCTM().inverse().multiply(t.getScreenCTM()).translate(e.width/2,e.height/2)).e,y:n.f};var t,e,n})))})),n.append("defs"),n}(c,e);!function(t,e){var n=t.exit();a.applyTransition(n,e).style("opacity",0).remove()}(c,e);var u=void 0!==c.merge?c.merge(l):c;return a.applyTransition(u,e).style("opacity",1),u.each((function(t){var n=o.select(this),r=e.edge(t);r.elem=this,r.id&&n.attr("id",r.id),a.applyClass(n,r.class,(n.classed("update")?"update ":"")+"edgePath")})),u.selectAll("path.path").each((function(t){var n=e.edge(t);n.arrowheadId=r.uniqueId("arrowhead");var c=o.select(this).attr("marker-end",(function(){return"url("+(t=location.href,e=n.arrowheadId,t.split("#")[0]+"#"+e+")");var t,e})).style("fill","none");a.applyTransition(c,e).attr("d",(function(t){return function(t,e){var n=t.edge(e),r=t.node(e.v),a=t.node(e.w),o=n.points.slice(1,n.points.length-1);return o.unshift(i(r,o[0])),o.push(i(a,o[o.length-1])),s(n,o)}(e,t)})),a.applyStyle(c,n.style)})),u.selectAll("defs *").remove(),u.selectAll("defs").each((function(t){var r=e.edge(t);(0,n[r.arrowhead])(o.select(this),r.arrowheadId,r,"arrowhead")})),u}},607:(t,e,n)=>{var r=n(1034),i=n(1322),a=n(8355),o=n(4322);t.exports=function(t,e,n){var s,c=e.nodes().filter((function(t){return!a.isSubgraph(e,t)})),l=t.selectAll("g.node").data(c,(function(t){return t})).classed("update",!0);return l.exit().remove(),l.enter().append("g").attr("class","node").style("opacity",0),(l=t.selectAll("g.node")).each((function(t){var s=e.node(t),c=o.select(this);a.applyClass(c,s.class,(c.classed("update")?"update ":"")+"node"),c.select("g.label").remove();var l=c.append("g").attr("class","label"),u=i(l,s),h=n[s.shape],d=r.pick(u.node().getBBox(),"width","height");s.elem=this,s.id&&c.attr("id",s.id),s.labelId&&l.attr("id",s.labelId),r.has(s,"width")&&(d.width=s.width),r.has(s,"height")&&(d.height=s.height),d.width+=s.paddingLeft+s.paddingRight,d.height+=s.paddingTop+s.paddingBottom,l.attr("transform","translate("+(s.paddingLeft-s.paddingRight)/2+","+(s.paddingTop-s.paddingBottom)/2+")");var f=o.select(this);f.select(".label-container").remove();var p=h(f,d,s).classed("label-container",!0);a.applyStyle(p,s.style);var g=p.node().getBBox();s.width=g.width,s.height=g.height})),s=l.exit?l.exit():l.selectAll(null),a.applyTransition(s,e).style("opacity",0).remove(),l}},4322:(t,e,n)=>{var r;if(!r)try{r=n(7543)}catch(t){}r||(r=window.d3),t.exports=r},6478:(t,e,n)=>{var r;try{r=n(681)}catch(t){}r||(r=window.dagre),t.exports=r},6614:(t,e,n)=>{var r;try{r=n(8282)}catch(t){}r||(r=window.graphlib),t.exports=r},8114:(t,e,n)=>{t.exports={node:n(3042),circle:n(6587),ellipse:n(3260),polygon:n(5337),rect:n(8049)}},6587:(t,e,n)=>{var r=n(3260);t.exports=function(t,e,n){return r(t,e,e,n)}},3260:t=>{t.exports=function(t,e,n,r){var i=t.x,a=t.y,o=i-r.x,s=a-r.y,c=Math.sqrt(e*e*s*s+n*n*o*o),l=Math.abs(e*n*o/c);r.x<i&&(l=-l);var u=Math.abs(e*n*s/c);return r.y<a&&(u=-u),{x:i+l,y:a+u}}},6808:t=>{function e(t,e){return t*e>0}t.exports=function(t,n,r,i){var a,o,s,c,l,u,h,d,f,p,g,y,m;if(a=n.y-t.y,s=t.x-n.x,l=n.x*t.y-t.x*n.y,f=a*r.x+s*r.y+l,p=a*i.x+s*i.y+l,!(0!==f&&0!==p&&e(f,p)||(o=i.y-r.y,c=r.x-i.x,u=i.x*r.y-r.x*i.y,h=o*t.x+c*t.y+u,d=o*n.x+c*n.y+u,0!==h&&0!==d&&e(h,d)||0==(g=a*c-o*s))))return y=Math.abs(g/2),{x:(m=s*u-c*l)<0?(m-y)/g:(m+y)/g,y:(m=o*l-a*u)<0?(m-y)/g:(m+y)/g}}},3042:t=>{t.exports=function(t,e){return t.intersect(e)}},5337:(t,e,n)=>{var r=n(6808);t.exports=function(t,e,n){var i=t.x,a=t.y,o=[],s=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY;e.forEach((function(t){s=Math.min(s,t.x),c=Math.min(c,t.y)}));for(var l=i-t.width/2-s,u=a-t.height/2-c,h=0;h<e.length;h++){var d=e[h],f=e[h<e.length-1?h+1:0],p=r(t,n,{x:l+d.x,y:u+d.y},{x:l+f.x,y:u+f.y});p&&o.push(p)}return o.length?(o.length>1&&o.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return a<c?-1:a===c?0:1})),o[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",t),t)}},8049:t=>{t.exports=function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,l=t.height/2;return Math.abs(s)*c>Math.abs(o)*l?(s<0&&(l=-l),n=0===s?0:l*o/s,r=l):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o),{x:i+n,y:a+r}}},8284:(t,e,n)=>{var r=n(8355);t.exports=function(t,e){var n=t.append("foreignObject").attr("width","100000"),i=n.append("xhtml:div");i.attr("xmlns","http://www.w3.org/1999/xhtml");var a=e.label;switch(typeof a){case"function":i.insert(a);break;case"object":i.insert((function(){return a}));break;default:i.html(a)}r.applyStyle(i,e.labelStyle),i.style("display","inline-block"),i.style("white-space","nowrap");var o=i.node().getBoundingClientRect();return n.attr("width",o.width).attr("height",o.height),n}},1322:(t,e,n)=>{var r=n(7318),i=n(8284),a=n(8287);t.exports=function(t,e,n){var o=e.label,s=t.append("g");"svg"===e.labelType?a(s,e):"string"!=typeof o||"html"===e.labelType?i(s,e):r(s,e);var c,l=s.node().getBBox();switch(n){case"top":c=-e.height/2;break;case"bottom":c=e.height/2-l.height;break;default:c=-l.height/2}return s.attr("transform","translate("+-l.width/2+","+c+")"),s}},8287:(t,e,n)=>{var r=n(8355);t.exports=function(t,e){var n=t;return n.node().appendChild(e.label),r.applyStyle(n,e.labelStyle),n}},7318:(t,e,n)=>{var r=n(8355);t.exports=function(t,e){for(var n=t.append("text"),i=function(t){for(var e,n="",r=!1,i=0;i<t.length;++i)e=t[i],r?(n+="n"===e?"\n":e,r=!1):"\\"===e?r=!0:n+=e;return n}(e.label).split("\n"),a=0;a<i.length;a++)n.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(i[a]);return r.applyStyle(n,e.labelStyle),n}},1034:(t,e,n)=>{var r;try{r={defaults:n(1747),each:n(6073),isFunction:n(3560),isPlainObject:n(8630),pick:n(9722),has:n(8721),range:n(6026),uniqueId:n(3955)}}catch(t){}r||(r=window._),t.exports=r},6381:(t,e,n)=>{var r=n(8355),i=n(4322);t.exports=function(t,e){var n=t.filter((function(){return!i.select(this).classed("update")}));function a(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}n.attr("transform",a),r.applyTransition(t,e).style("opacity",1).attr("transform",a),r.applyTransition(n.selectAll("rect"),e).attr("width",(function(t){return e.node(t).width})).attr("height",(function(t){return e.node(t).height})).attr("x",(function(t){return-e.node(t).width/2})).attr("y",(function(t){return-e.node(t).height/2}))}},4577:(t,e,n)=>{var r=n(8355),i=n(4322),a=n(1034);t.exports=function(t,e){function n(t){var n=e.edge(t);return a.has(n,"x")?"translate("+n.x+","+n.y+")":""}t.filter((function(){return!i.select(this).classed("update")})).attr("transform",n),r.applyTransition(t,e).style("opacity",1).attr("transform",n)}},4849:(t,e,n)=>{var r=n(8355),i=n(4322);t.exports=function(t,e){function n(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}t.filter((function(){return!i.select(this).classed("update")})).attr("transform",n),r.applyTransition(t,e).style("opacity",1).attr("transform",n)}},5787:(t,e,n)=>{var r=n(1034),i=n(4322),a=n(6478).layout;t.exports=function(){var t=n(607),e=n(5632),i=n(6315),l=n(940),u=n(4849),h=n(4577),d=n(6381),f=n(4418),p=n(9144),g=function(n,g){!function(t){t.nodes().forEach((function(e){var n=t.node(e);r.has(n,"label")||t.children(e).length||(n.label=e),r.has(n,"paddingX")&&r.defaults(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),r.has(n,"paddingY")&&r.defaults(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),r.has(n,"padding")&&r.defaults(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),r.defaults(n,o),r.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],(function(t){n[t]=Number(n[t])})),r.has(n,"width")&&(n._prevWidth=n.width),r.has(n,"height")&&(n._prevHeight=n.height)})),t.edges().forEach((function(e){var n=t.edge(e);r.has(n,"label")||(n.label=""),r.defaults(n,s)}))}(g);var y=c(n,"output"),m=c(y,"clusters"),b=c(y,"edgePaths"),v=i(c(y,"edgeLabels"),g),_=t(c(y,"nodes"),g,f);a(g),u(_,g),h(v,g),l(b,g,p);var x=e(m,g);d(x,g),function(t){r.each(t.nodes(),(function(e){var n=t.node(e);r.has(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,r.has(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight}))}(g)};return g.createNodes=function(e){return arguments.length?(t=e,g):t},g.createClusters=function(t){return arguments.length?(e=t,g):e},g.createEdgeLabels=function(t){return arguments.length?(i=t,g):i},g.createEdgePaths=function(t){return arguments.length?(l=t,g):l},g.shapes=function(t){return arguments.length?(f=t,g):f},g.arrows=function(t){return arguments.length?(p=t,g):p},g};var o={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},s={arrowhead:"normal",curve:i.curveLinear};function c(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}},4418:(t,e,n)=>{var r=n(8049),i=n(3260),a=n(6587),o=n(5337);t.exports={rect:function(t,e,n){var i=t.insert("rect",":first-child").attr("rx",n.rx).attr("ry",n.ry).attr("x",-e.width/2).attr("y",-e.height/2).attr("width",e.width).attr("height",e.height);return n.intersect=function(t){return r(n,t)},i},ellipse:function(t,e,n){var r=e.width/2,a=e.height/2,o=t.insert("ellipse",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("rx",r).attr("ry",a);return n.intersect=function(t){return i(n,r,a,t)},o},circle:function(t,e,n){var r=Math.max(e.width,e.height)/2,i=t.insert("circle",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("r",r);return n.intersect=function(t){return a(n,r,t)},i},diamond:function(t,e,n){var r=e.width*Math.SQRT2/2,i=e.height*Math.SQRT2/2,a=[{x:0,y:-i},{x:-r,y:0},{x:0,y:i},{x:r,y:0}],s=t.insert("polygon",":first-child").attr("points",a.map((function(t){return t.x+","+t.y})).join(" "));return n.intersect=function(t){return o(n,a,t)},s}}},8355:(t,e,n)=>{var r=n(1034);t.exports={isSubgraph:function(t,e){return!!t.children(e).length},edgeToId:function(t){return a(t.v)+":"+a(t.w)+":"+a(t.name)},applyStyle:function(t,e){e&&t.attr("style",e)},applyClass:function(t,e,n){e&&t.attr("class",e).attr("class",n+" "+t.attr("class"))},applyTransition:function(t,e){var n=e.graph();if(r.isPlainObject(n)){var i=n.transition;if(r.isFunction(i))return i(t)}return t}};var i=/:/g;function a(t){return t?String(t).replace(i,"\\:"):""}},5689:t=>{t.exports="0.6.4"},681:(t,e,n)=>{t.exports={graphlib:n(574),layout:n(8123),debug:n(7570),util:{time:n(1138).time,notime:n(1138).notime},version:n(8177)}},2188:(t,e,n)=>{var r=n(8436),i=n(4079);t.exports={run:function(t){var e="greedy"===t.graph().acyclicer?i(t,function(t){return function(e){return t.edge(e).weight}}(t)):function(t){var e=[],n={},i={};return r.forEach(t.nodes(),(function a(o){r.has(i,o)||(i[o]=!0,n[o]=!0,r.forEach(t.outEdges(o),(function(t){r.has(n,t.w)?e.push(t):a(t.w)})),delete n[o])})),e}(t);r.forEach(e,(function(e){var n=t.edge(e);t.removeEdge(e),n.forwardName=e.name,n.reversed=!0,t.setEdge(e.w,e.v,n,r.uniqueId("rev"))}))},undo:function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(n.reversed){t.removeEdge(e);var r=n.forwardName;delete n.reversed,delete n.forwardName,t.setEdge(e.w,e.v,n,r)}}))}}},1133:(t,e,n)=>{var r=n(8436),i=n(1138);function a(t,e,n,r,a,o){var s={width:0,height:0,rank:o,borderType:e},c=a[e][o-1],l=i.addDummyNode(t,"border",s,n);a[e][o]=l,t.setParent(l,r),c&&t.setEdge(c,l,{weight:1})}t.exports=function(t){r.forEach(t.children(),(function e(n){var i=t.children(n),o=t.node(n);if(i.length&&r.forEach(i,e),r.has(o,"minRank")){o.borderLeft=[],o.borderRight=[];for(var s=o.minRank,c=o.maxRank+1;s<c;++s)a(t,"borderLeft","_bl",n,o,s),a(t,"borderRight","_br",n,o,s)}}))}},3258:(t,e,n)=>{var r=n(8436);function i(t){r.forEach(t.nodes(),(function(e){a(t.node(e))})),r.forEach(t.edges(),(function(e){a(t.edge(e))}))}function a(t){var e=t.width;t.width=t.height,t.height=e}function o(t){t.y=-t.y}function s(t){var e=t.x;t.x=t.y,t.y=e}t.exports={adjust:function(t){var e=t.graph().rankdir.toLowerCase();"lr"!==e&&"rl"!==e||i(t)},undo:function(t){var e=t.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(t){r.forEach(t.nodes(),(function(e){o(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.forEach(n.points,o),r.has(n,"y")&&o(n)}))}(t),"lr"!==e&&"rl"!==e||(function(t){r.forEach(t.nodes(),(function(e){s(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.forEach(n.points,s),r.has(n,"x")&&s(n)}))}(t),i(t))}}},7822:t=>{function e(){var t={};t._next=t._prev=t,this._sentinel=t}function n(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function r(t,e){if("_next"!==t&&"_prev"!==t)return e}t.exports=e,e.prototype.dequeue=function(){var t=this._sentinel,e=t._prev;if(e!==t)return n(e),e},e.prototype.enqueue=function(t){var e=this._sentinel;t._prev&&t._next&&n(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e},e.prototype.toString=function(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,r)),n=n._prev;return"["+t.join(", ")+"]"}},7570:(t,e,n)=>{var r=n(8436),i=n(1138),a=n(574).Graph;t.exports={debugOrdering:function(t){var e=i.buildLayerMatrix(t),n=new a({compound:!0,multigraph:!0}).setGraph({});return r.forEach(t.nodes(),(function(e){n.setNode(e,{label:e}),n.setParent(e,"layer"+t.node(e).rank)})),r.forEach(t.edges(),(function(t){n.setEdge(t.v,t.w,{},t.name)})),r.forEach(e,(function(t,e){var i="layer"+e;n.setNode(i,{rank:"same"}),r.reduce(t,(function(t,e){return n.setEdge(t,e,{style:"invis"}),e}))})),n}}},574:(t,e,n)=>{var r;try{r=n(8282)}catch(t){}r||(r=window.graphlib),t.exports=r},4079:(t,e,n)=>{var r=n(8436),i=n(574).Graph,a=n(7822);t.exports=function(t,e){if(t.nodeCount()<=1)return[];var n=function(t,e){var n=new i,o=0,s=0;r.forEach(t.nodes(),(function(t){n.setNode(t,{v:t,in:0,out:0})})),r.forEach(t.edges(),(function(t){var r=n.edge(t.v,t.w)||0,i=e(t),a=r+i;n.setEdge(t.v,t.w,a),s=Math.max(s,n.node(t.v).out+=i),o=Math.max(o,n.node(t.w).in+=i)}));var l=r.range(s+o+3).map((function(){return new a})),u=o+1;return r.forEach(n.nodes(),(function(t){c(l,u,n.node(t))})),{graph:n,buckets:l,zeroIdx:u}}(t,e||o),l=function(t,e,n){for(var r,i=[],a=e[e.length-1],o=e[0];t.nodeCount();){for(;r=o.dequeue();)s(t,e,n,r);for(;r=a.dequeue();)s(t,e,n,r);if(t.nodeCount())for(var c=e.length-2;c>0;--c)if(r=e[c].dequeue()){i=i.concat(s(t,e,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(l,(function(e){return t.outEdges(e.v,e.w)})),!0)};var o=r.constant(1);function s(t,e,n,i,a){var o=a?[]:void 0;return r.forEach(t.inEdges(i.v),(function(r){var i=t.edge(r),s=t.node(r.v);a&&o.push({v:r.v,w:r.w}),s.out-=i,c(e,n,s)})),r.forEach(t.outEdges(i.v),(function(r){var i=t.edge(r),a=r.w,o=t.node(a);o.in-=i,c(e,n,o)})),t.removeNode(i.v),o}function c(t,e,n){n.out?n.in?t[n.out-n.in+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}},8123:(t,e,n)=>{var r=n(8436),i=n(2188),a=n(5995),o=n(8093),s=n(1138).normalizeRanks,c=n(4219),l=n(1138).removeEmptyRanks,u=n(2981),h=n(1133),d=n(3258),f=n(3408),p=n(7873),g=n(1138),y=n(574).Graph;t.exports=function(t,e){var n=e&&e.debugTiming?g.time:g.notime;n("layout",(function(){var e=n(" buildLayoutGraph",(function(){return function(t){var e=new y({multigraph:!0,compound:!0}),n=C(t.graph());return e.setGraph(r.merge({},b,T(n,m),r.pick(n,v))),r.forEach(t.nodes(),(function(n){var i=C(t.node(n));e.setNode(n,r.defaults(T(i,_),x)),e.setParent(n,t.parent(n))})),r.forEach(t.edges(),(function(n){var i=C(t.edge(n));e.setEdge(n,r.merge({},w,T(i,k),r.pick(i,E)))})),e}(t)}));n(" runLayout",(function(){!function(t,e){e(" makeSpaceForEdgeLabels",(function(){!function(t){var e=t.graph();e.ranksep/=2,r.forEach(t.edges(),(function(n){var r=t.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(t)})),e(" removeSelfEdges",(function(){!function(t){r.forEach(t.edges(),(function(e){if(e.v===e.w){var n=t.node(e.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:e,label:t.edge(e)}),t.removeEdge(e)}}))}(t)})),e(" acyclic",(function(){i.run(t)})),e(" nestingGraph.run",(function(){u.run(t)})),e(" rank",(function(){o(g.asNonCompoundGraph(t))})),e(" injectEdgeLabelProxies",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(n.width&&n.height){var r=t.node(e.v),i={rank:(t.node(e.w).rank-r.rank)/2+r.rank,e:e};g.addDummyNode(t,"edge-proxy",i,"_ep")}}))}(t)})),e(" removeEmptyRanks",(function(){l(t)})),e(" nestingGraph.cleanup",(function(){u.cleanup(t)})),e(" normalizeRanks",(function(){s(t)})),e(" assignRankMinMax",(function(){!function(t){var e=0;r.forEach(t.nodes(),(function(n){var i=t.node(n);i.borderTop&&(i.minRank=t.node(i.borderTop).rank,i.maxRank=t.node(i.borderBottom).rank,e=r.max(e,i.maxRank))})),t.graph().maxRank=e}(t)})),e(" removeEdgeLabelProxies",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))}))}(t)})),e(" normalize.run",(function(){a.run(t)})),e(" parentDummyChains",(function(){c(t)})),e(" addBorderSegments",(function(){h(t)})),e(" order",(function(){f(t)})),e(" insertSelfEdges",(function(){!function(t){var e=g.buildLayerMatrix(t);r.forEach(e,(function(e){var n=0;r.forEach(e,(function(e,i){var a=t.node(e);a.order=i+n,r.forEach(a.selfEdges,(function(e){g.addDummyNode(t,"selfedge",{width:e.label.width,height:e.label.height,rank:a.rank,order:i+ ++n,e:e.e,label:e.label},"_se")})),delete a.selfEdges}))}))}(t)})),e(" adjustCoordinateSystem",(function(){d.adjust(t)})),e(" position",(function(){p(t)})),e(" positionSelfEdges",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);if("selfedge"===n.dummy){var r=t.node(n.e.v),i=r.x+r.width/2,a=r.y,o=n.x-i,s=r.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:i+2*o/3,y:a-s},{x:i+5*o/6,y:a-s},{x:i+o,y:a},{x:i+5*o/6,y:a+s},{x:i+2*o/3,y:a+s}],n.label.x=n.x,n.label.y=n.y}}))}(t)})),e(" removeBorderNodes",(function(){!function(t){r.forEach(t.nodes(),(function(e){if(t.children(e).length){var n=t.node(e),i=t.node(n.borderTop),a=t.node(n.borderBottom),o=t.node(r.last(n.borderLeft)),s=t.node(r.last(n.borderRight));n.width=Math.abs(s.x-o.x),n.height=Math.abs(a.y-i.y),n.x=o.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(t.nodes(),(function(e){"border"===t.node(e).dummy&&t.removeNode(e)}))}(t)})),e(" normalize.undo",(function(){a.undo(t)})),e(" fixupEdgeLabelCoords",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(t)})),e(" undoCoordinateSystem",(function(){d.undo(t)})),e(" translateGraph",(function(){!function(t){var e=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,a=0,o=t.graph(),s=o.marginx||0,c=o.marginy||0;function l(t){var r=t.x,o=t.y,s=t.width,c=t.height;e=Math.min(e,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,o-c/2),a=Math.max(a,o+c/2)}r.forEach(t.nodes(),(function(e){l(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.has(n,"x")&&l(n)})),e-=s,i-=c,r.forEach(t.nodes(),(function(n){var r=t.node(n);r.x-=e,r.y-=i})),r.forEach(t.edges(),(function(n){var a=t.edge(n);r.forEach(a.points,(function(t){t.x-=e,t.y-=i})),r.has(a,"x")&&(a.x-=e),r.has(a,"y")&&(a.y-=i)})),o.width=n-e+s,o.height=a-i+c}(t)})),e(" assignNodeIntersects",(function(){!function(t){r.forEach(t.edges(),(function(e){var n,r,i=t.edge(e),a=t.node(e.v),o=t.node(e.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=o,r=a),i.points.unshift(g.intersectRect(a,n)),i.points.push(g.intersectRect(o,r))}))}(t)})),e(" reversePoints",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);n.reversed&&n.points.reverse()}))}(t)})),e(" acyclic.undo",(function(){i.undo(t)}))}(e,n)})),n(" updateInputGraph",(function(){!function(t,e){r.forEach(t.nodes(),(function(n){var r=t.node(n),i=e.node(n);r&&(r.x=i.x,r.y=i.y,e.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(t.edges(),(function(n){var i=t.edge(n),a=e.edge(n);i.points=a.points,r.has(a,"x")&&(i.x=a.x,i.y=a.y)})),t.graph().width=e.graph().width,t.graph().height=e.graph().height}(t,e)}))}))};var m=["nodesep","edgesep","ranksep","marginx","marginy"],b={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},v=["acyclicer","ranker","rankdir","align"],_=["width","height"],x={width:0,height:0},k=["minlen","weight","width","height","labeloffset"],w={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},E=["labelpos"];function T(t,e){return r.mapValues(r.pick(t,e),Number)}function C(t){var e={};return r.forEach(t,(function(t,n){e[n.toLowerCase()]=t})),e}},8436:(t,e,n)=>{var r;try{r={cloneDeep:n(361),constant:n(5703),defaults:n(1747),each:n(6073),filter:n(3105),find:n(3311),flatten:n(5564),forEach:n(4486),forIn:n(2620),has:n(8721),isUndefined:n(2353),last:n(928),map:n(5161),mapValues:n(6604),max:n(6162),merge:n(3857),min:n(3632),minBy:n(2762),now:n(7771),pick:n(9722),range:n(6026),reduce:n(4061),sortBy:n(9734),uniqueId:n(3955),values:n(2628),zipObject:n(7287)}}catch(t){}r||(r=window._),t.exports=r},2981:(t,e,n)=>{var r=n(8436),i=n(1138);function a(t,e,n,o,s,c,l){var u=t.children(l);if(u.length){var h=i.addBorderNode(t,"_bt"),d=i.addBorderNode(t,"_bb"),f=t.node(l);t.setParent(h,l),f.borderTop=h,t.setParent(d,l),f.borderBottom=d,r.forEach(u,(function(r){a(t,e,n,o,s,c,r);var i=t.node(r),u=i.borderTop?i.borderTop:r,f=i.borderBottom?i.borderBottom:r,p=i.borderTop?o:2*o,g=u!==f?1:s-c[l]+1;t.setEdge(h,u,{weight:p,minlen:g,nestingEdge:!0}),t.setEdge(f,d,{weight:p,minlen:g,nestingEdge:!0})})),t.parent(l)||t.setEdge(e,h,{weight:0,minlen:s+c[l]})}else l!==e&&t.setEdge(e,l,{weight:0,minlen:n})}t.exports={run:function(t){var e=i.addDummyNode(t,"root",{},"_root"),n=function(t){var e={};function n(i,a){var o=t.children(i);o&&o.length&&r.forEach(o,(function(t){n(t,a+1)})),e[i]=a}return r.forEach(t.children(),(function(t){n(t,1)})),e}(t),o=r.max(r.values(n))-1,s=2*o+1;t.graph().nestingRoot=e,r.forEach(t.edges(),(function(e){t.edge(e).minlen*=s}));var c=function(t){return r.reduce(t.edges(),(function(e,n){return e+t.edge(n).weight}),0)}(t)+1;r.forEach(t.children(),(function(r){a(t,e,s,c,o,n,r)})),t.graph().nodeRankFactor=s},cleanup:function(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,r.forEach(t.edges(),(function(e){t.edge(e).nestingEdge&&t.removeEdge(e)}))}}},5995:(t,e,n)=>{var r=n(8436),i=n(1138);t.exports={run:function(t){t.graph().dummyChains=[],r.forEach(t.edges(),(function(e){!function(t,e){var n,r,a,o=e.v,s=t.node(o).rank,c=e.w,l=t.node(c).rank,u=e.name,h=t.edge(e),d=h.labelRank;if(l!==s+1){for(t.removeEdge(e),a=0,++s;s<l;++a,++s)h.points=[],r={width:0,height:0,edgeLabel:h,edgeObj:e,rank:s},n=i.addDummyNode(t,"edge",r,"_d"),s===d&&(r.width=h.width,r.height=h.height,r.dummy="edge-label",r.labelpos=h.labelpos),t.setEdge(o,n,{weight:h.weight},u),0===a&&t.graph().dummyChains.push(n),o=n;t.setEdge(o,c,{weight:h.weight},u)}}(t,e)}))},undo:function(t){r.forEach(t.graph().dummyChains,(function(e){var n,r=t.node(e),i=r.edgeLabel;for(t.setEdge(r.edgeObj,i);r.dummy;)n=t.successors(e)[0],t.removeNode(e),i.points.push({x:r.x,y:r.y}),"edge-label"===r.dummy&&(i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height),e=n,r=t.node(e)}))}}},5093:(t,e,n)=>{var r=n(8436);t.exports=function(t,e,n){var i,a={};r.forEach(n,(function(n){for(var r,o,s=t.parent(n);s;){if((r=t.parent(s))?(o=a[r],a[r]=s):(o=i,i=s),o&&o!==s)return void e.setEdge(o,s);s=r}}))}},5439:(t,e,n)=>{var r=n(8436);t.exports=function(t,e){return r.map(e,(function(e){var n=t.inEdges(e);if(n.length){var i=r.reduce(n,(function(e,n){var r=t.edge(n),i=t.node(n.v);return{sum:e.sum+r.weight*i.order,weight:e.weight+r.weight}}),{sum:0,weight:0});return{v:e,barycenter:i.sum/i.weight,weight:i.weight}}return{v:e}}))}},3128:(t,e,n)=>{var r=n(8436),i=n(574).Graph;t.exports=function(t,e,n){var a=function(t){for(var e;t.hasNode(e=r.uniqueId("_root")););return e}(t),o=new i({compound:!0}).setGraph({root:a}).setDefaultNodeLabel((function(e){return t.node(e)}));return r.forEach(t.nodes(),(function(i){var s=t.node(i),c=t.parent(i);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(o.setNode(i),o.setParent(i,c||a),r.forEach(t[n](i),(function(e){var n=e.v===i?e.w:e.v,a=o.edge(n,i),s=r.isUndefined(a)?0:a.weight;o.setEdge(n,i,{weight:t.edge(e).weight+s})})),r.has(s,"minRank")&&o.setNode(i,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))})),o}},6630:(t,e,n)=>{var r=n(8436);function i(t,e,n){for(var i=r.zipObject(n,r.map(n,(function(t,e){return e}))),a=r.flatten(r.map(e,(function(e){return r.sortBy(r.map(t.outEdges(e),(function(e){return{pos:i[e.w],weight:t.edge(e).weight}})),"pos")})),!0),o=1;o<n.length;)o<<=1;var s=2*o-1;o-=1;var c=r.map(new Array(s),(function(){return 0})),l=0;return r.forEach(a.forEach((function(t){var e=t.pos+o;c[e]+=t.weight;for(var n=0;e>0;)e%2&&(n+=c[e+1]),c[e=e-1>>1]+=t.weight;l+=t.weight*n}))),l}t.exports=function(t,e){for(var n=0,r=1;r<e.length;++r)n+=i(t,e[r-1],e[r]);return n}},3408:(t,e,n)=>{var r=n(8436),i=n(2588),a=n(6630),o=n(1026),s=n(3128),c=n(5093),l=n(574).Graph,u=n(1138);function h(t,e,n){return r.map(e,(function(e){return s(t,e,n)}))}function d(t,e){var n=new l;r.forEach(t,(function(t){var i=t.graph().root,a=o(t,i,n,e);r.forEach(a.vs,(function(e,n){t.node(e).order=n})),c(t,n,a.vs)}))}function f(t,e){r.forEach(e,(function(e){r.forEach(e,(function(e,n){t.node(e).order=n}))}))}t.exports=function(t){var e=u.maxRank(t),n=h(t,r.range(1,e+1),"inEdges"),o=h(t,r.range(e-1,-1,-1),"outEdges"),s=i(t);f(t,s);for(var c,l=Number.POSITIVE_INFINITY,p=0,g=0;g<4;++p,++g){d(p%2?n:o,p%4>=2),s=u.buildLayerMatrix(t);var y=a(t,s);y<l&&(g=0,c=r.cloneDeep(s),l=y)}f(t,c)}},2588:(t,e,n)=>{var r=n(8436);t.exports=function(t){var e={},n=r.filter(t.nodes(),(function(e){return!t.children(e).length})),i=r.max(r.map(n,(function(e){return t.node(e).rank}))),a=r.map(r.range(i+1),(function(){return[]})),o=r.sortBy(n,(function(e){return t.node(e).rank}));return r.forEach(o,(function n(i){if(!r.has(e,i)){e[i]=!0;var o=t.node(i);a[o.rank].push(i),r.forEach(t.successors(i),n)}})),a}},9567:(t,e,n)=>{var r=n(8436);t.exports=function(t,e){var n={};return r.forEach(t,(function(t,e){var i=n[t.v]={indegree:0,in:[],out:[],vs:[t.v],i:e};r.isUndefined(t.barycenter)||(i.barycenter=t.barycenter,i.weight=t.weight)})),r.forEach(e.edges(),(function(t){var e=n[t.v],i=n[t.w];r.isUndefined(e)||r.isUndefined(i)||(i.indegree++,e.out.push(n[t.w]))})),function(t){var e=[];function n(t){return function(e){var n,i,a,o;e.merged||(r.isUndefined(e.barycenter)||r.isUndefined(t.barycenter)||e.barycenter>=t.barycenter)&&(i=e,a=0,o=0,(n=t).weight&&(a+=n.barycenter*n.weight,o+=n.weight),i.weight&&(a+=i.barycenter*i.weight,o+=i.weight),n.vs=i.vs.concat(n.vs),n.barycenter=a/o,n.weight=o,n.i=Math.min(i.i,n.i),i.merged=!0)}}function i(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}for(;t.length;){var a=t.pop();e.push(a),r.forEach(a.in.reverse(),n(a)),r.forEach(a.out,i(a))}return r.map(r.filter(e,(function(t){return!t.merged})),(function(t){return r.pick(t,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(t){return!t.indegree})))}},1026:(t,e,n)=>{var r=n(8436),i=n(5439),a=n(9567),o=n(7304);t.exports=function t(e,n,s,c){var l=e.children(n),u=e.node(n),h=u?u.borderLeft:void 0,d=u?u.borderRight:void 0,f={};h&&(l=r.filter(l,(function(t){return t!==h&&t!==d})));var p=i(e,l);r.forEach(p,(function(n){if(e.children(n.v).length){var i=t(e,n.v,s,c);f[n.v]=i,r.has(i,"barycenter")&&(a=n,o=i,r.isUndefined(a.barycenter)?(a.barycenter=o.barycenter,a.weight=o.weight):(a.barycenter=(a.barycenter*a.weight+o.barycenter*o.weight)/(a.weight+o.weight),a.weight+=o.weight))}var a,o}));var g=a(p,s);!function(t,e){r.forEach(t,(function(t){t.vs=r.flatten(t.vs.map((function(t){return e[t]?e[t].vs:t})),!0)}))}(g,f);var y=o(g,c);if(h&&(y.vs=r.flatten([h,y.vs,d],!0),e.predecessors(h).length)){var m=e.node(e.predecessors(h)[0]),b=e.node(e.predecessors(d)[0]);r.has(y,"barycenter")||(y.barycenter=0,y.weight=0),y.barycenter=(y.barycenter*y.weight+m.order+b.order)/(y.weight+2),y.weight+=2}return y}},7304:(t,e,n)=>{var r=n(8436),i=n(1138);function a(t,e,n){for(var i;e.length&&(i=r.last(e)).i<=n;)e.pop(),t.push(i.vs),n++;return n}t.exports=function(t,e){var n,o=i.partition(t,(function(t){return r.has(t,"barycenter")})),s=o.lhs,c=r.sortBy(o.rhs,(function(t){return-t.i})),l=[],u=0,h=0,d=0;s.sort((n=!!e,function(t,e){return t.barycenter<e.barycenter?-1:t.barycenter>e.barycenter?1:n?e.i-t.i:t.i-e.i})),d=a(l,c,d),r.forEach(s,(function(t){d+=t.vs.length,l.push(t.vs),u+=t.barycenter*t.weight,h+=t.weight,d=a(l,c,d)}));var f={vs:r.flatten(l,!0)};return h&&(f.barycenter=u/h,f.weight=h),f}},4219:(t,e,n)=>{var r=n(8436);t.exports=function(t){var e=function(t){var e={},n=0;return r.forEach(t.children(),(function i(a){var o=n;r.forEach(t.children(a),i),e[a]={low:o,lim:n++}})),e}(t);r.forEach(t.graph().dummyChains,(function(n){for(var r=t.node(n),i=r.edgeObj,a=function(t,e,n,r){var i,a,o=[],s=[],c=Math.min(e[n].low,e[r].low),l=Math.max(e[n].lim,e[r].lim);i=n;do{i=t.parent(i),o.push(i)}while(i&&(e[i].low>c||l>e[i].lim));for(a=i,i=r;(i=t.parent(i))!==a;)s.push(i);return{path:o.concat(s.reverse()),lca:a}}(t,e,i.v,i.w),o=a.path,s=a.lca,c=0,l=o[c],u=!0;n!==i.w;){if(r=t.node(n),u){for(;(l=o[c])!==s&&t.node(l).maxRank<r.rank;)c++;l===s&&(u=!1)}if(!u){for(;c<o.length-1&&t.node(l=o[c+1]).minRank<=r.rank;)c++;l=o[c]}t.setParent(n,l),n=t.successors(n)[0]}}))}},3573:(t,e,n)=>{var r=n(8436),i=n(574).Graph,a=n(1138);function o(t,e){var n={};return r.reduce(e,(function(e,i){var a=0,o=0,s=e.length,l=r.last(i);return r.forEach(i,(function(e,u){var h=function(t,e){if(t.node(e).dummy)return r.find(t.predecessors(e),(function(e){return t.node(e).dummy}))}(t,e),d=h?t.node(h).order:s;(h||e===l)&&(r.forEach(i.slice(o,u+1),(function(e){r.forEach(t.predecessors(e),(function(r){var i=t.node(r),o=i.order;!(o<a||d<o)||i.dummy&&t.node(e).dummy||c(n,r,e)}))})),o=u+1,a=d)})),i})),n}function s(t,e){var n={};function i(e,i,a,o,s){var l;r.forEach(r.range(i,a),(function(i){l=e[i],t.node(l).dummy&&r.forEach(t.predecessors(l),(function(e){var r=t.node(e);r.dummy&&(r.order<o||r.order>s)&&c(n,e,l)}))}))}return r.reduce(e,(function(e,n){var a,o=-1,s=0;return r.forEach(n,(function(r,c){if("border"===t.node(r).dummy){var l=t.predecessors(r);l.length&&(a=t.node(l[0]).order,i(n,s,c,o,a),s=c,o=a)}i(n,s,n.length,a,e.length)})),n})),n}function c(t,e,n){if(e>n){var r=e;e=n,n=r}var i=t[e];i||(t[e]=i={}),i[n]=!0}function l(t,e,n){if(e>n){var i=e;e=n,n=i}return r.has(t[e],n)}function u(t,e,n,i){var a={},o={},s={};return r.forEach(e,(function(t){r.forEach(t,(function(t,e){a[t]=t,o[t]=t,s[t]=e}))})),r.forEach(e,(function(t){var e=-1;r.forEach(t,(function(t){var c=i(t);if(c.length){c=r.sortBy(c,(function(t){return s[t]}));for(var u=(c.length-1)/2,h=Math.floor(u),d=Math.ceil(u);h<=d;++h){var f=c[h];o[t]===t&&e<s[f]&&!l(n,t,f)&&(o[f]=t,o[t]=a[t]=a[f],e=s[f])}}}))})),{root:a,align:o}}function h(t,e,n,a,o){var s={},c=function(t,e,n,a){var o=new i,s=t.graph(),c=function(t,e,n){return function(i,a,o){var s,c=i.node(a),l=i.node(o),u=0;if(u+=c.width/2,r.has(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":s=-c.width/2;break;case"r":s=c.width/2}if(s&&(u+=n?s:-s),s=0,u+=(c.dummy?e:t)/2,u+=(l.dummy?e:t)/2,u+=l.width/2,r.has(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":s=l.width/2;break;case"r":s=-l.width/2}return s&&(u+=n?s:-s),s=0,u}}(s.nodesep,s.edgesep,a);return r.forEach(e,(function(e){var i;r.forEach(e,(function(e){var r=n[e];if(o.setNode(r),i){var a=n[i],s=o.edge(a,r);o.setEdge(a,r,Math.max(c(t,e,i),s||0))}i=e}))})),o}(t,e,n,o),l=o?"borderLeft":"borderRight";function u(t,e){for(var n=c.nodes(),r=n.pop(),i={};r;)i[r]?t(r):(i[r]=!0,n.push(r),n=n.concat(e(r))),r=n.pop()}return u((function(t){s[t]=c.inEdges(t).reduce((function(t,e){return Math.max(t,s[e.v]+c.edge(e))}),0)}),c.predecessors.bind(c)),u((function(e){var n=c.outEdges(e).reduce((function(t,e){return Math.min(t,s[e.w]-c.edge(e))}),Number.POSITIVE_INFINITY),r=t.node(e);n!==Number.POSITIVE_INFINITY&&r.borderType!==l&&(s[e]=Math.max(s[e],n))}),c.successors.bind(c)),r.forEach(a,(function(t){s[t]=s[n[t]]})),s}function d(t,e){return r.minBy(r.values(e),(function(e){var n=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;return r.forIn(e,(function(e,r){var a=function(t,e){return t.node(e).width}(t,r)/2;n=Math.max(e+a,n),i=Math.min(e-a,i)})),n-i}))}function f(t,e){var n=r.values(e),i=r.min(n),a=r.max(n);r.forEach(["u","d"],(function(n){r.forEach(["l","r"],(function(o){var s,c=n+o,l=t[c];if(l!==e){var u=r.values(l);(s="l"===o?i-r.min(u):a-r.max(u))&&(t[c]=r.mapValues(l,(function(t){return t+s})))}}))}))}function p(t,e){return r.mapValues(t.ul,(function(n,i){if(e)return t[e.toLowerCase()][i];var a=r.sortBy(r.map(t,i));return(a[1]+a[2])/2}))}t.exports={positionX:function(t){var e,n=a.buildLayerMatrix(t),i=r.merge(o(t,n),s(t,n)),c={};r.forEach(["u","d"],(function(a){e="u"===a?n:r.values(n).reverse(),r.forEach(["l","r"],(function(n){"r"===n&&(e=r.map(e,(function(t){return r.values(t).reverse()})));var o=("u"===a?t.predecessors:t.successors).bind(t),s=u(0,e,i,o),l=h(t,e,s.root,s.align,"r"===n);"r"===n&&(l=r.mapValues(l,(function(t){return-t}))),c[a+n]=l}))}));var l=d(t,c);return f(c,l),p(c,t.graph().align)},findType1Conflicts:o,findType2Conflicts:s,addConflict:c,hasConflict:l,verticalAlignment:u,horizontalCompaction:h,alignCoordinates:f,findSmallestWidthAlignment:d,balance:p}},7873:(t,e,n)=>{var r=n(8436),i=n(1138),a=n(3573).positionX;t.exports=function(t){(function(t){var e=i.buildLayerMatrix(t),n=t.graph().ranksep,a=0;r.forEach(e,(function(e){var i=r.max(r.map(e,(function(e){return t.node(e).height})));r.forEach(e,(function(e){t.node(e).y=a+i/2})),a+=i+n}))})(t=i.asNonCompoundGraph(t)),r.forEach(a(t),(function(e,n){t.node(n).x=e}))}},300:(t,e,n)=>{var r=n(8436),i=n(574).Graph,a=n(6681).slack;function o(t,e){return r.forEach(t.nodes(),(function n(i){r.forEach(e.nodeEdges(i),(function(r){var o=r.v,s=i===o?r.w:o;t.hasNode(s)||a(e,r)||(t.setNode(s,{}),t.setEdge(i,s,{}),n(s))}))})),t.nodeCount()}function s(t,e){return r.minBy(e.edges(),(function(n){if(t.hasNode(n.v)!==t.hasNode(n.w))return a(e,n)}))}function c(t,e,n){r.forEach(t.nodes(),(function(t){e.node(t).rank+=n}))}t.exports=function(t){var e,n,r=new i({directed:!1}),l=t.nodes()[0],u=t.nodeCount();for(r.setNode(l,{});o(r,t)<u;)e=s(r,t),n=r.hasNode(e.v)?a(t,e):-a(t,e),c(r,t,n);return r}},8093:(t,e,n)=>{var r=n(6681).longestPath,i=n(300),a=n(2472);t.exports=function(t){switch(t.graph().ranker){case"network-simplex":default:!function(t){a(t)}(t);break;case"tight-tree":!function(t){r(t),i(t)}(t);break;case"longest-path":o(t)}};var o=r},2472:(t,e,n)=>{var r=n(8436),i=n(300),a=n(6681).slack,o=n(6681).longestPath,s=n(574).alg.preorder,c=n(574).alg.postorder,l=n(1138).simplify;function u(t){t=l(t),o(t);var e,n=i(t);for(f(n),h(n,t);e=g(n);)m(n,t,e,y(n,t,e))}function h(t,e){var n=c(t,t.nodes());n=n.slice(0,n.length-1),r.forEach(n,(function(n){!function(t,e,n){var r=t.node(n).parent;t.edge(n,r).cutvalue=d(t,e,n)}(t,e,n)}))}function d(t,e,n){var i=t.node(n).parent,a=!0,o=e.edge(n,i),s=0;return o||(a=!1,o=e.edge(i,n)),s=o.weight,r.forEach(e.nodeEdges(n),(function(r){var o,c,l=r.v===n,u=l?r.w:r.v;if(u!==i){var h=l===a,d=e.edge(r).weight;if(s+=h?d:-d,o=n,c=u,t.hasEdge(o,c)){var f=t.edge(n,u).cutvalue;s+=h?-f:f}}})),s}function f(t,e){arguments.length<2&&(e=t.nodes()[0]),p(t,{},1,e)}function p(t,e,n,i,a){var o=n,s=t.node(i);return e[i]=!0,r.forEach(t.neighbors(i),(function(a){r.has(e,a)||(n=p(t,e,n,a,i))})),s.low=o,s.lim=n++,a?s.parent=a:delete s.parent,n}function g(t){return r.find(t.edges(),(function(e){return t.edge(e).cutvalue<0}))}function y(t,e,n){var i=n.v,o=n.w;e.hasEdge(i,o)||(i=n.w,o=n.v);var s=t.node(i),c=t.node(o),l=s,u=!1;s.lim>c.lim&&(l=c,u=!0);var h=r.filter(e.edges(),(function(e){return u===b(0,t.node(e.v),l)&&u!==b(0,t.node(e.w),l)}));return r.minBy(h,(function(t){return a(e,t)}))}function m(t,e,n,i){var a=n.v,o=n.w;t.removeEdge(a,o),t.setEdge(i.v,i.w,{}),f(t),h(t,e),function(t,e){var n=r.find(t.nodes(),(function(t){return!e.node(t).parent})),i=s(t,n);i=i.slice(1),r.forEach(i,(function(n){var r=t.node(n).parent,i=e.edge(n,r),a=!1;i||(i=e.edge(r,n),a=!0),e.node(n).rank=e.node(r).rank+(a?i.minlen:-i.minlen)}))}(t,e)}function b(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}t.exports=u,u.initLowLimValues=f,u.initCutValues=h,u.calcCutValue=d,u.leaveEdge=g,u.enterEdge=y,u.exchangeEdges=m},6681:(t,e,n)=>{var r=n(8436);t.exports={longestPath:function(t){var e={};r.forEach(t.sources(),(function n(i){var a=t.node(i);if(r.has(e,i))return a.rank;e[i]=!0;var o=r.min(r.map(t.outEdges(i),(function(e){return n(e.w)-t.edge(e).minlen})));return o!==Number.POSITIVE_INFINITY&&null!=o||(o=0),a.rank=o}))},slack:function(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}}},1138:(t,e,n)=>{var r=n(8436),i=n(574).Graph;function a(t,e,n,i){var a;do{a=r.uniqueId(i)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function o(t){return r.max(r.map(t.nodes(),(function(e){var n=t.node(e).rank;if(!r.isUndefined(n))return n})))}t.exports={addDummyNode:a,simplify:function(t){var e=(new i).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),e},asNonCompoundGraph:function(t){var e=new i({multigraph:t.isMultigraph()}).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e},successorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.outEdges(e),(function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},predecessorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.inEdges(e),(function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},intersectRect:function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,l=t.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");return Math.abs(s)*c>Math.abs(o)*l?(s<0&&(l=-l),n=l*o/s,r=l):(o<0&&(c=-c),n=c,r=c*s/o),{x:i+n,y:a+r}},buildLayerMatrix:function(t){var e=r.map(r.range(o(t)+1),(function(){return[]}));return r.forEach(t.nodes(),(function(n){var i=t.node(n),a=i.rank;r.isUndefined(a)||(e[a][i.order]=n)})),e},normalizeRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank})));r.forEach(t.nodes(),(function(n){var i=t.node(n);r.has(i,"rank")&&(i.rank-=e)}))},removeEmptyRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank}))),n=[];r.forEach(t.nodes(),(function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=t.graph().nodeRankFactor;r.forEach(n,(function(e,n){r.isUndefined(e)&&n%a!=0?--i:i&&r.forEach(e,(function(e){t.node(e).rank+=i}))}))},addBorderNode:function(t,e,n,r){var i={width:0,height:0};return arguments.length>=4&&(i.rank=n,i.order=r),a(t,"border",i,e)},maxRank:o,partition:function(t,e){var n={lhs:[],rhs:[]};return r.forEach(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n},time:function(t,e){var n=r.now();try{return e()}finally{console.log(t+" time: "+(r.now()-n)+"ms")}},notime:function(t,e){return e()}}},8177:t=>{t.exports="0.8.5"},7856:function(t){t.exports=function(){function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,n){return e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},e(t,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function r(t,i,a){return r=n()?Reflect.construct:function(t,n,r){var i=[null];i.push.apply(i,n);var a=new(Function.bind.apply(t,i));return r&&e(a,r.prototype),a},r.apply(null,arguments)}function i(t){return function(t){if(Array.isArray(t))return a(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return a(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var o=Object.hasOwnProperty,s=Object.setPrototypeOf,c=Object.isFrozen,l=Object.getPrototypeOf,u=Object.getOwnPropertyDescriptor,h=Object.freeze,d=Object.seal,f=Object.create,p="undefined"!=typeof Reflect&&Reflect,g=p.apply,y=p.construct;g||(g=function(t,e,n){return t.apply(e,n)}),h||(h=function(t){return t}),d||(d=function(t){return t}),y||(y=function(t,e){return r(t,i(e))});var m,b=A(Array.prototype.forEach),v=A(Array.prototype.pop),_=A(Array.prototype.push),x=A(String.prototype.toLowerCase),k=A(String.prototype.match),w=A(String.prototype.replace),E=A(String.prototype.indexOf),T=A(String.prototype.trim),C=A(RegExp.prototype.test),S=(m=TypeError,function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return y(m,e)});function A(t){return function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];return g(t,e,r)}}function M(t,e,n){n=n||x,s&&s(t,null);for(var r=e.length;r--;){var i=e[r];if("string"==typeof i){var a=n(i);a!==i&&(c(e)||(e[r]=a),i=a)}t[i]=!0}return t}function O(t){var e,n=f(null);for(e in t)g(o,t,[e])&&(n[e]=t[e]);return n}function N(t,e){for(;null!==t;){var n=u(t,e);if(n){if(n.get)return A(n.get);if("function"==typeof n.value)return A(n.value)}t=l(t)}return function(t){return console.warn("fallback value for",t),null}}var D=h(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),B=h(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),L=h(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),I=h(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),F=h(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),R=h(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),P=h(["#text"]),j=h(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),z=h(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Y=h(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),U=h(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),$=d(/\{\{[\w\W]*|[\w\W]*\}\}/gm),W=d(/<%[\w\W]*|[\w\W]*%>/gm),q=d(/^data-[\-\w.\u00B7-\uFFFF]/),H=d(/^aria-[\-\w]+$/),V=d(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),G=d(/^(?:\w+script|data):/i),X=d(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Z=d(/^html$/i),Q=function(){return"undefined"==typeof window?null:window},K=function(e,n){if("object"!==t(e)||"function"!=typeof e.createPolicy)return null;var r=null,i="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(i)&&(r=n.currentScript.getAttribute(i));var a="dompurify"+(r?"#"+r:"");try{return e.createPolicy(a,{createHTML:function(t){return t},createScriptURL:function(t){return t}})}catch(t){return console.warn("TrustedTypes policy "+a+" could not be created."),null}};return function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Q(),r=function(t){return e(t)};if(r.version="2.4.0",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;var a=n.document,o=n.document,s=n.DocumentFragment,c=n.HTMLTemplateElement,l=n.Node,u=n.Element,d=n.NodeFilter,f=n.NamedNodeMap,p=void 0===f?n.NamedNodeMap||n.MozNamedAttrMap:f,g=n.HTMLFormElement,y=n.DOMParser,m=n.trustedTypes,A=u.prototype,J=N(A,"cloneNode"),tt=N(A,"nextSibling"),et=N(A,"childNodes"),nt=N(A,"parentNode");if("function"==typeof c){var rt=o.createElement("template");rt.content&&rt.content.ownerDocument&&(o=rt.content.ownerDocument)}var it=K(m,a),at=it?it.createHTML(""):"",ot=o,st=ot.implementation,ct=ot.createNodeIterator,lt=ot.createDocumentFragment,ut=ot.getElementsByTagName,ht=a.importNode,dt={};try{dt=O(o).documentMode?o.documentMode:{}}catch(t){}var ft={};r.isSupported="function"==typeof nt&&st&&void 0!==st.createHTMLDocument&&9!==dt;var pt,gt,yt=$,mt=W,bt=q,vt=H,_t=G,xt=X,kt=V,wt=null,Et=M({},[].concat(i(D),i(B),i(L),i(F),i(P))),Tt=null,Ct=M({},[].concat(i(j),i(z),i(Y),i(U))),St=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),At=null,Mt=null,Ot=!0,Nt=!0,Dt=!1,Bt=!1,Lt=!1,It=!1,Ft=!1,Rt=!1,Pt=!1,jt=!1,zt=!0,Yt=!1,Ut="user-content-",$t=!0,Wt=!1,qt={},Ht=null,Vt=M({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Gt=null,Xt=M({},["audio","video","img","source","image","track"]),Zt=null,Qt=M({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Kt="http://www.w3.org/1998/Math/MathML",Jt="http://www.w3.org/2000/svg",te="http://www.w3.org/1999/xhtml",ee=te,ne=!1,re=["application/xhtml+xml","text/html"],ie="text/html",ae=null,oe=o.createElement("form"),se=function(t){return t instanceof RegExp||t instanceof Function},ce=function(e){ae&&ae===e||(e&&"object"===t(e)||(e={}),e=O(e),pt=pt=-1===re.indexOf(e.PARSER_MEDIA_TYPE)?ie:e.PARSER_MEDIA_TYPE,gt="application/xhtml+xml"===pt?function(t){return t}:x,wt="ALLOWED_TAGS"in e?M({},e.ALLOWED_TAGS,gt):Et,Tt="ALLOWED_ATTR"in e?M({},e.ALLOWED_ATTR,gt):Ct,Zt="ADD_URI_SAFE_ATTR"in e?M(O(Qt),e.ADD_URI_SAFE_ATTR,gt):Qt,Gt="ADD_DATA_URI_TAGS"in e?M(O(Xt),e.ADD_DATA_URI_TAGS,gt):Xt,Ht="FORBID_CONTENTS"in e?M({},e.FORBID_CONTENTS,gt):Vt,At="FORBID_TAGS"in e?M({},e.FORBID_TAGS,gt):{},Mt="FORBID_ATTR"in e?M({},e.FORBID_ATTR,gt):{},qt="USE_PROFILES"in e&&e.USE_PROFILES,Ot=!1!==e.ALLOW_ARIA_ATTR,Nt=!1!==e.ALLOW_DATA_ATTR,Dt=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Bt=e.SAFE_FOR_TEMPLATES||!1,Lt=e.WHOLE_DOCUMENT||!1,Rt=e.RETURN_DOM||!1,Pt=e.RETURN_DOM_FRAGMENT||!1,jt=e.RETURN_TRUSTED_TYPE||!1,Ft=e.FORCE_BODY||!1,zt=!1!==e.SANITIZE_DOM,Yt=e.SANITIZE_NAMED_PROPS||!1,$t=!1!==e.KEEP_CONTENT,Wt=e.IN_PLACE||!1,kt=e.ALLOWED_URI_REGEXP||kt,ee=e.NAMESPACE||te,e.CUSTOM_ELEMENT_HANDLING&&se(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(St.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&se(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(St.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(St.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Bt&&(Nt=!1),Pt&&(Rt=!0),qt&&(wt=M({},i(P)),Tt=[],!0===qt.html&&(M(wt,D),M(Tt,j)),!0===qt.svg&&(M(wt,B),M(Tt,z),M(Tt,U)),!0===qt.svgFilters&&(M(wt,L),M(Tt,z),M(Tt,U)),!0===qt.mathMl&&(M(wt,F),M(Tt,Y),M(Tt,U))),e.ADD_TAGS&&(wt===Et&&(wt=O(wt)),M(wt,e.ADD_TAGS,gt)),e.ADD_ATTR&&(Tt===Ct&&(Tt=O(Tt)),M(Tt,e.ADD_ATTR,gt)),e.ADD_URI_SAFE_ATTR&&M(Zt,e.ADD_URI_SAFE_ATTR,gt),e.FORBID_CONTENTS&&(Ht===Vt&&(Ht=O(Ht)),M(Ht,e.FORBID_CONTENTS,gt)),$t&&(wt["#text"]=!0),Lt&&M(wt,["html","head","body"]),wt.table&&(M(wt,["tbody"]),delete At.tbody),h&&h(e),ae=e)},le=M({},["mi","mo","mn","ms","mtext"]),ue=M({},["foreignobject","desc","title","annotation-xml"]),he=M({},["title","style","font","a","script"]),de=M({},B);M(de,L),M(de,I);var fe=M({},F);M(fe,R);var pe=function(t){var e=nt(t);e&&e.tagName||(e={namespaceURI:te,tagName:"template"});var n=x(t.tagName),r=x(e.tagName);return t.namespaceURI===Jt?e.namespaceURI===te?"svg"===n:e.namespaceURI===Kt?"svg"===n&&("annotation-xml"===r||le[r]):Boolean(de[n]):t.namespaceURI===Kt?e.namespaceURI===te?"math"===n:e.namespaceURI===Jt?"math"===n&&ue[r]:Boolean(fe[n]):t.namespaceURI===te&&!(e.namespaceURI===Jt&&!ue[r])&&!(e.namespaceURI===Kt&&!le[r])&&!fe[n]&&(he[n]||!de[n])},ge=function(t){_(r.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){try{t.outerHTML=at}catch(e){t.remove()}}},ye=function(t,e){try{_(r.removed,{attribute:e.getAttributeNode(t),from:e})}catch(t){_(r.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!Tt[t])if(Rt||Pt)try{ge(e)}catch(t){}else try{e.setAttribute(t,"")}catch(t){}},me=function(t){var e,n;if(Ft)t="<remove></remove>"+t;else{var r=k(t,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===pt&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");var i=it?it.createHTML(t):t;if(ee===te)try{e=(new y).parseFromString(i,pt)}catch(t){}if(!e||!e.documentElement){e=st.createDocument(ee,"template",null);try{e.documentElement.innerHTML=ne?"":i}catch(t){}}var a=e.body||e.documentElement;return t&&n&&a.insertBefore(o.createTextNode(n),a.childNodes[0]||null),ee===te?ut.call(e,Lt?"html":"body")[0]:Lt?e.documentElement:a},be=function(t){return ct.call(t.ownerDocument||t,t,d.SHOW_ELEMENT|d.SHOW_COMMENT|d.SHOW_TEXT,null,!1)},ve=function(t){return t instanceof g&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof p)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore)},_e=function(e){return"object"===t(l)?e instanceof l:e&&"object"===t(e)&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},xe=function(t,e,n){ft[t]&&b(ft[t],(function(t){t.call(r,e,n,ae)}))},ke=function(t){var e;if(xe("beforeSanitizeElements",t,null),ve(t))return ge(t),!0;if(C(/[\u0080-\uFFFF]/,t.nodeName))return ge(t),!0;var n=gt(t.nodeName);if(xe("uponSanitizeElement",t,{tagName:n,allowedTags:wt}),t.hasChildNodes()&&!_e(t.firstElementChild)&&(!_e(t.content)||!_e(t.content.firstElementChild))&&C(/<[/\w]/g,t.innerHTML)&&C(/<[/\w]/g,t.textContent))return ge(t),!0;if("select"===n&&C(/<template/i,t.innerHTML))return ge(t),!0;if(!wt[n]||At[n]){if(!At[n]&&Ee(n)){if(St.tagNameCheck instanceof RegExp&&C(St.tagNameCheck,n))return!1;if(St.tagNameCheck instanceof Function&&St.tagNameCheck(n))return!1}if($t&&!Ht[n]){var i=nt(t)||t.parentNode,a=et(t)||t.childNodes;if(a&&i)for(var o=a.length-1;o>=0;--o)i.insertBefore(J(a[o],!0),tt(t))}return ge(t),!0}return t instanceof u&&!pe(t)?(ge(t),!0):"noscript"!==n&&"noembed"!==n||!C(/<\/no(script|embed)/i,t.innerHTML)?(Bt&&3===t.nodeType&&(e=t.textContent,e=w(e,yt," "),e=w(e,mt," "),t.textContent!==e&&(_(r.removed,{element:t.cloneNode()}),t.textContent=e)),xe("afterSanitizeElements",t,null),!1):(ge(t),!0)},we=function(t,e,n){if(zt&&("id"===e||"name"===e)&&(n in o||n in oe))return!1;if(Nt&&!Mt[e]&&C(bt,e));else if(Ot&&C(vt,e));else if(!Tt[e]||Mt[e]){if(!(Ee(t)&&(St.tagNameCheck instanceof RegExp&&C(St.tagNameCheck,t)||St.tagNameCheck instanceof Function&&St.tagNameCheck(t))&&(St.attributeNameCheck instanceof RegExp&&C(St.attributeNameCheck,e)||St.attributeNameCheck instanceof Function&&St.attributeNameCheck(e))||"is"===e&&St.allowCustomizedBuiltInElements&&(St.tagNameCheck instanceof RegExp&&C(St.tagNameCheck,n)||St.tagNameCheck instanceof Function&&St.tagNameCheck(n))))return!1}else if(Zt[e]);else if(C(kt,w(n,xt,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==E(n,"data:")||!Gt[t])if(Dt&&!C(_t,w(n,xt,"")));else if(n)return!1;return!0},Ee=function(t){return t.indexOf("-")>0},Te=function(e){var n,i,a,o;xe("beforeSanitizeAttributes",e,null);var s=e.attributes;if(s){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Tt};for(o=s.length;o--;){var l=n=s[o],u=l.name,h=l.namespaceURI;if(i="value"===u?n.value:T(n.value),a=gt(u),c.attrName=a,c.attrValue=i,c.keepAttr=!0,c.forceKeepAttr=void 0,xe("uponSanitizeAttribute",e,c),i=c.attrValue,!c.forceKeepAttr&&(ye(u,e),c.keepAttr))if(C(/\/>/i,i))ye(u,e);else{Bt&&(i=w(i,yt," "),i=w(i,mt," "));var d=gt(e.nodeName);if(we(d,a,i)){if(!Yt||"id"!==a&&"name"!==a||(ye(u,e),i=Ut+i),it&&"object"===t(m)&&"function"==typeof m.getAttributeType)if(h);else switch(m.getAttributeType(d,a)){case"TrustedHTML":i=it.createHTML(i);break;case"TrustedScriptURL":i=it.createScriptURL(i)}try{h?e.setAttributeNS(h,u,i):e.setAttribute(u,i),v(r.removed)}catch(t){}}}}xe("afterSanitizeAttributes",e,null)}},Ce=function t(e){var n,r=be(e);for(xe("beforeSanitizeShadowDOM",e,null);n=r.nextNode();)xe("uponSanitizeShadowNode",n,null),ke(n)||(n.content instanceof s&&t(n.content),Te(n));xe("afterSanitizeShadowDOM",e,null)};return r.sanitize=function(e){var i,o,c,u,h,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((ne=!e)&&(e="\x3c!--\x3e"),"string"!=typeof e&&!_e(e)){if("function"!=typeof e.toString)throw S("toString is not a function");if("string"!=typeof(e=e.toString()))throw S("dirty is not a string, aborting")}if(!r.isSupported){if("object"===t(n.toStaticHTML)||"function"==typeof n.toStaticHTML){if("string"==typeof e)return n.toStaticHTML(e);if(_e(e))return n.toStaticHTML(e.outerHTML)}return e}if(It||ce(d),r.removed=[],"string"==typeof e&&(Wt=!1),Wt){if(e.nodeName){var f=gt(e.nodeName);if(!wt[f]||At[f])throw S("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof l)1===(o=(i=me("\x3c!----\x3e")).ownerDocument.importNode(e,!0)).nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?i=o:i.appendChild(o);else{if(!Rt&&!Bt&&!Lt&&-1===e.indexOf("<"))return it&&jt?it.createHTML(e):e;if(!(i=me(e)))return Rt?null:jt?at:""}i&&Ft&&ge(i.firstChild);for(var p=be(Wt?e:i);c=p.nextNode();)3===c.nodeType&&c===u||ke(c)||(c.content instanceof s&&Ce(c.content),Te(c),u=c);if(u=null,Wt)return e;if(Rt){if(Pt)for(h=lt.call(i.ownerDocument);i.firstChild;)h.appendChild(i.firstChild);else h=i;return Tt.shadowroot&&(h=ht.call(a,h,!0)),h}var g=Lt?i.outerHTML:i.innerHTML;return Lt&&wt["!doctype"]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&C(Z,i.ownerDocument.doctype.name)&&(g="<!DOCTYPE "+i.ownerDocument.doctype.name+">\n"+g),Bt&&(g=w(g,yt," "),g=w(g,mt," ")),it&&jt?it.createHTML(g):g},r.setConfig=function(t){ce(t),It=!0},r.clearConfig=function(){ae=null,It=!1},r.isValidAttribute=function(t,e,n){ae||ce({});var r=gt(t),i=gt(e);return we(r,i,n)},r.addHook=function(t,e){"function"==typeof e&&(ft[t]=ft[t]||[],_(ft[t],e))},r.removeHook=function(t){if(ft[t])return v(ft[t])},r.removeHooks=function(t){ft[t]&&(ft[t]=[])},r.removeAllHooks=function(){ft={}},r}()}()},8282:(t,e,n)=>{var r=n(2354);t.exports={Graph:r.Graph,json:n(8974),alg:n(2440),version:r.version}},2842:(t,e,n)=>{var r=n(9126);t.exports=function(t){var e,n={},i=[];function a(i){r.has(n,i)||(n[i]=!0,e.push(i),r.each(t.successors(i),a),r.each(t.predecessors(i),a))}return r.each(t.nodes(),(function(t){e=[],a(t),e.length&&i.push(e)})),i}},3984:(t,e,n)=>{var r=n(9126);function i(t,e,n,a,o,s){r.has(a,e)||(a[e]=!0,n||s.push(e),r.each(o(e),(function(e){i(t,e,n,a,o,s)})),n&&s.push(e))}t.exports=function(t,e,n){r.isArray(e)||(e=[e]);var a=(t.isDirected()?t.successors:t.neighbors).bind(t),o=[],s={};return r.each(e,(function(e){if(!t.hasNode(e))throw new Error("Graph does not have node: "+e);i(t,e,"post"===n,s,a,o)})),o}},4847:(t,e,n)=>{var r=n(3763),i=n(9126);t.exports=function(t,e,n){return i.transform(t.nodes(),(function(i,a){i[a]=r(t,a,e,n)}),{})}},3763:(t,e,n)=>{var r=n(9126),i=n(9675);t.exports=function(t,e,n,r){return function(t,e,n,r){var a,o,s={},c=new i,l=function(t){var e=t.v!==a?t.v:t.w,r=s[e],i=n(t),l=o.distance+i;if(i<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+t+" Weight: "+i);l<r.distance&&(r.distance=l,r.predecessor=a,c.decrease(e,l))};for(t.nodes().forEach((function(t){var n=t===e?0:Number.POSITIVE_INFINITY;s[t]={distance:n},c.add(t,n)}));c.size()>0&&(a=c.removeMin(),(o=s[a]).distance!==Number.POSITIVE_INFINITY);)r(a).forEach(l);return s}(t,String(e),n||a,r||function(e){return t.outEdges(e)})};var a=r.constant(1)},9096:(t,e,n)=>{var r=n(9126),i=n(5023);t.exports=function(t){return r.filter(i(t),(function(e){return e.length>1||1===e.length&&t.hasEdge(e[0],e[0])}))}},8924:(t,e,n)=>{var r=n(9126);t.exports=function(t,e,n){return function(t,e,n){var r={},i=t.nodes();return i.forEach((function(t){r[t]={},r[t][t]={distance:0},i.forEach((function(e){t!==e&&(r[t][e]={distance:Number.POSITIVE_INFINITY})})),n(t).forEach((function(n){var i=n.v===t?n.w:n.v,a=e(n);r[t][i]={distance:a,predecessor:t}}))})),i.forEach((function(t){var e=r[t];i.forEach((function(n){var a=r[n];i.forEach((function(n){var r=a[t],i=e[n],o=a[n],s=r.distance+i.distance;s<o.distance&&(o.distance=s,o.predecessor=i.predecessor)}))}))})),r}(t,e||i,n||function(e){return t.outEdges(e)})};var i=r.constant(1)},2440:(t,e,n)=>{t.exports={components:n(2842),dijkstra:n(3763),dijkstraAll:n(4847),findCycles:n(9096),floydWarshall:n(8924),isAcyclic:n(2707),postorder:n(8828),preorder:n(2648),prim:n(514),tarjan:n(5023),topsort:n(2166)}},2707:(t,e,n)=>{var r=n(2166);t.exports=function(t){try{r(t)}catch(t){if(t instanceof r.CycleException)return!1;throw t}return!0}},8828:(t,e,n)=>{var r=n(3984);t.exports=function(t,e){return r(t,e,"post")}},2648:(t,e,n)=>{var r=n(3984);t.exports=function(t,e){return r(t,e,"pre")}},514:(t,e,n)=>{var r=n(9126),i=n(771),a=n(9675);t.exports=function(t,e){var n,o=new i,s={},c=new a;function l(t){var r=t.v===n?t.w:t.v,i=c.priority(r);if(void 0!==i){var a=e(t);a<i&&(s[r]=n,c.decrease(r,a))}}if(0===t.nodeCount())return o;r.each(t.nodes(),(function(t){c.add(t,Number.POSITIVE_INFINITY),o.setNode(t)})),c.decrease(t.nodes()[0],0);for(var u=!1;c.size()>0;){if(n=c.removeMin(),r.has(s,n))o.setEdge(n,s[n]);else{if(u)throw new Error("Input graph is not connected: "+t);u=!0}t.nodeEdges(n).forEach(l)}return o}},5023:(t,e,n)=>{var r=n(9126);t.exports=function(t){var e=0,n=[],i={},a=[];function o(s){var c=i[s]={onStack:!0,lowlink:e,index:e++};if(n.push(s),t.successors(s).forEach((function(t){r.has(i,t)?i[t].onStack&&(c.lowlink=Math.min(c.lowlink,i[t].index)):(o(t),c.lowlink=Math.min(c.lowlink,i[t].lowlink))})),c.lowlink===c.index){var l,u=[];do{l=n.pop(),i[l].onStack=!1,u.push(l)}while(s!==l);a.push(u)}}return t.nodes().forEach((function(t){r.has(i,t)||o(t)})),a}},2166:(t,e,n)=>{var r=n(9126);function i(t){var e={},n={},i=[];if(r.each(t.sinks(),(function o(s){if(r.has(n,s))throw new a;r.has(e,s)||(n[s]=!0,e[s]=!0,r.each(t.predecessors(s),o),delete n[s],i.push(s))})),r.size(e)!==t.nodeCount())throw new a;return i}function a(){}t.exports=i,i.CycleException=a,a.prototype=new Error},9675:(t,e,n)=>{var r=n(9126);function i(){this._arr=[],this._keyIndices={}}t.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(t){return t.key}))},i.prototype.has=function(t){return r.has(this._keyIndices,t)},i.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!r.has(n,t)){var i=this._arr,a=i.length;return n[t]=a,i.push({key:t,priority:e}),this._decrease(a),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},i.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},i.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n<e.length&&(i=e[n].priority<e[i].priority?n:i,r<e.length&&(i=e[r].priority<e[i].priority?r:i),i!==t&&(this._swap(t,i),this._heapify(i)))},i.prototype._decrease=function(t){for(var e,n=this._arr,r=n[t].priority;0!==t&&!(n[e=t>>1].priority<r);)this._swap(t,e),t=e},i.prototype._swap=function(t,e){var n=this._arr,r=this._keyIndices,i=n[t],a=n[e];n[t]=a,n[e]=i,r[a.key]=t,r[i.key]=e}},771:(t,e,n)=>{var r=n(9126);t.exports=a;var i="\0";function a(t){this._isDirected=!r.has(t,"directed")||t.directed,this._isMultigraph=!!r.has(t,"multigraph")&&t.multigraph,this._isCompound=!!r.has(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children["\0"]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function o(t,e){t[e]?t[e]++:t[e]=1}function s(t,e){--t[e]||delete t[e]}function c(t,e,n,i){var a=""+e,o=""+n;if(!t&&a>o){var s=a;a=o,o=s}return a+"\x01"+o+"\x01"+(r.isUndefined(i)?"\0":i)}function l(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return r&&(s.name=r),s}function u(t,e){return c(t,e.v,e.w,e.name)}a.prototype._nodeCount=0,a.prototype._edgeCount=0,a.prototype.isDirected=function(){return this._isDirected},a.prototype.isMultigraph=function(){return this._isMultigraph},a.prototype.isCompound=function(){return this._isCompound},a.prototype.setGraph=function(t){return this._label=t,this},a.prototype.graph=function(){return this._label},a.prototype.setDefaultNodeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultNodeLabelFn=t,this},a.prototype.nodeCount=function(){return this._nodeCount},a.prototype.nodes=function(){return r.keys(this._nodes)},a.prototype.sources=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._in[e])}))},a.prototype.sinks=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._out[e])}))},a.prototype.setNodes=function(t,e){var n=arguments,i=this;return r.each(t,(function(t){n.length>1?i.setNode(t,e):i.setNode(t)})),this},a.prototype.setNode=function(t,e){return r.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=i,this._children[t]={},this._children["\0"][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},a.prototype.node=function(t){return this._nodes[t]},a.prototype.hasNode=function(t){return r.has(this._nodes,t)},a.prototype.removeNode=function(t){var e=this;if(r.has(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],r.each(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),r.each(r.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],r.each(r.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},a.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(e))e=i;else{for(var n=e+="";!r.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},a.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},a.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if(e!==i)return e}},a.prototype.children=function(t){if(r.isUndefined(t)&&(t=i),this._isCompound){var e=this._children[t];if(e)return r.keys(e)}else{if(t===i)return this.nodes();if(this.hasNode(t))return[]}},a.prototype.predecessors=function(t){var e=this._preds[t];if(e)return r.keys(e)},a.prototype.successors=function(t){var e=this._sucs[t];if(e)return r.keys(e)},a.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return r.union(e,this.successors(t))},a.prototype.isLeaf=function(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length},a.prototype.filterNodes=function(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),r.each(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var i={};function a(t){var r=n.parent(t);return void 0===r||e.hasNode(r)?(i[t]=r,r):r in i?i[r]:a(r)}return this._isCompound&&r.each(e.nodes(),(function(t){e.setParent(t,a(t))})),e},a.prototype.setDefaultEdgeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultEdgeLabelFn=t,this},a.prototype.edgeCount=function(){return this._edgeCount},a.prototype.edges=function(){return r.values(this._edgeObjs)},a.prototype.setPath=function(t,e){var n=this,i=arguments;return r.reduce(t,(function(t,r){return i.length>1?n.setEdge(t,r,e):n.setEdge(t,r),r})),this},a.prototype.setEdge=function(){var t,e,n,i,a=!1,s=arguments[0];"object"==typeof s&&null!==s&&"v"in s?(t=s.v,e=s.w,n=s.name,2===arguments.length&&(i=arguments[1],a=!0)):(t=s,e=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),t=""+t,e=""+e,r.isUndefined(n)||(n=""+n);var u=c(this._isDirected,t,e,n);if(r.has(this._edgeLabels,u))return a&&(this._edgeLabels[u]=i),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[u]=a?i:this._defaultEdgeLabelFn(t,e,n);var h=l(this._isDirected,t,e,n);return t=h.v,e=h.w,Object.freeze(h),this._edgeObjs[u]=h,o(this._preds[e],t),o(this._sucs[t],e),this._in[e][u]=h,this._out[t][u]=h,this._edgeCount++,this},a.prototype.edge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):c(this._isDirected,t,e,n);return this._edgeLabels[r]},a.prototype.hasEdge=function(t,e,n){var i=1===arguments.length?u(this._isDirected,arguments[0]):c(this._isDirected,t,e,n);return r.has(this._edgeLabels,i)},a.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):c(this._isDirected,t,e,n),i=this._edgeObjs[r];return i&&(t=i.v,e=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],s(this._preds[e],t),s(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},a.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.v===e})):i}},a.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.w===e})):i}},a.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},2354:(t,e,n)=>{t.exports={Graph:n(771),version:n(9631)}},8974:(t,e,n)=>{var r=n(9126),i=n(771);function a(t){return r.map(t.nodes(),(function(e){var n=t.node(e),i=t.parent(e),a={v:e};return r.isUndefined(n)||(a.value=n),r.isUndefined(i)||(a.parent=i),a}))}function o(t){return r.map(t.edges(),(function(e){var n=t.edge(e),i={v:e.v,w:e.w};return r.isUndefined(e.name)||(i.name=e.name),r.isUndefined(n)||(i.value=n),i}))}t.exports={write:function(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:a(t),edges:o(t)};return r.isUndefined(t.graph())||(e.value=r.clone(t.graph())),e},read:function(t){var e=new i(t.options).setGraph(t.value);return r.each(t.nodes,(function(t){e.setNode(t.v,t.value),t.parent&&e.setParent(t.v,t.parent)})),r.each(t.edges,(function(t){e.setEdge({v:t.v,w:t.w,name:t.name},t.value)})),e}}},9126:(t,e,n)=>{var r;try{r={clone:n(6678),constant:n(5703),each:n(6073),filter:n(3105),has:n(8721),isArray:n(1469),isEmpty:n(1609),isFunction:n(3560),isUndefined:n(2353),keys:n(3674),map:n(5161),reduce:n(4061),size:n(4238),transform:n(8718),union:n(3386),values:n(2628)}}catch(t){}r||(r=window._),t.exports=r},9631:t=>{t.exports="2.1.8"},8552:(t,e,n)=>{var r=n(852)(n(5639),"DataView");t.exports=r},1989:(t,e,n)=>{var r=n(1789),i=n(401),a=n(7667),o=n(1327),s=n(1866);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,t.exports=c},8407:(t,e,n)=>{var r=n(7040),i=n(4125),a=n(2117),o=n(7518),s=n(4705);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,t.exports=c},7071:(t,e,n)=>{var r=n(852)(n(5639),"Map");t.exports=r},3369:(t,e,n)=>{var r=n(4785),i=n(1285),a=n(6e3),o=n(9916),s=n(5265);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,t.exports=c},3818:(t,e,n)=>{var r=n(852)(n(5639),"Promise");t.exports=r},8525:(t,e,n)=>{var r=n(852)(n(5639),"Set");t.exports=r},8668:(t,e,n)=>{var r=n(3369),i=n(619),a=n(2385);function o(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e<n;)this.add(t[e])}o.prototype.add=o.prototype.push=i,o.prototype.has=a,t.exports=o},6384:(t,e,n)=>{var r=n(8407),i=n(7465),a=n(3779),o=n(7599),s=n(4758),c=n(4309);function l(t){var e=this.__data__=new r(t);this.size=e.size}l.prototype.clear=i,l.prototype.delete=a,l.prototype.get=o,l.prototype.has=s,l.prototype.set=c,t.exports=l},2705:(t,e,n)=>{var r=n(5639).Symbol;t.exports=r},1149:(t,e,n)=>{var r=n(5639).Uint8Array;t.exports=r},577:(t,e,n)=>{var r=n(852)(n(5639),"WeakMap");t.exports=r},6874:t=>{t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},7412:t=>{t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},4963:t=>{t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=0,a=[];++n<r;){var o=t[n];e(o,n,t)&&(a[i++]=o)}return a}},7443:(t,e,n)=>{var r=n(2118);t.exports=function(t,e){return!(null==t||!t.length)&&r(t,e,0)>-1}},1196:t=>{t.exports=function(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}},4636:(t,e,n)=>{var r=n(2545),i=n(5694),a=n(1469),o=n(4144),s=n(5776),c=n(6719),l=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=a(t),u=!n&&i(t),h=!n&&!u&&o(t),d=!n&&!u&&!h&&c(t),f=n||u||h||d,p=f?r(t.length,String):[],g=p.length;for(var y in t)!e&&!l.call(t,y)||f&&("length"==y||h&&("offset"==y||"parent"==y)||d&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||s(y,g))||p.push(y);return p}},9932:t=>{t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}},2488:t=>{t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}},2663:t=>{t.exports=function(t,e,n,r){var i=-1,a=null==t?0:t.length;for(r&&a&&(n=t[++i]);++i<a;)n=e(n,t[i],i,t);return n}},2908:t=>{t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}},8983:(t,e,n)=>{var r=n(371)("length");t.exports=r},6556:(t,e,n)=>{var r=n(9465),i=n(7813);t.exports=function(t,e,n){(void 0!==n&&!i(t[e],n)||void 0===n&&!(e in t))&&r(t,e,n)}},4865:(t,e,n)=>{var r=n(9465),i=n(7813),a=Object.prototype.hasOwnProperty;t.exports=function(t,e,n){var o=t[e];a.call(t,e)&&i(o,n)&&(void 0!==n||e in t)||r(t,e,n)}},8470:(t,e,n)=>{var r=n(7813);t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},4037:(t,e,n)=>{var r=n(8363),i=n(3674);t.exports=function(t,e){return t&&r(e,i(e),t)}},3886:(t,e,n)=>{var r=n(8363),i=n(1704);t.exports=function(t,e){return t&&r(e,i(e),t)}},9465:(t,e,n)=>{var r=n(8777);t.exports=function(t,e,n){"__proto__"==e&&r?r(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},5990:(t,e,n)=>{var r=n(6384),i=n(7412),a=n(4865),o=n(4037),s=n(3886),c=n(4626),l=n(278),u=n(8805),h=n(1911),d=n(8234),f=n(6904),p=n(4160),g=n(3824),y=n(9148),m=n(8517),b=n(1469),v=n(4144),_=n(6688),x=n(3218),k=n(2928),w=n(3674),E=n(1704),T="[object Arguments]",C="[object Function]",S="[object Object]",A={};A[T]=A["[object Array]"]=A["[object ArrayBuffer]"]=A["[object DataView]"]=A["[object Boolean]"]=A["[object Date]"]=A["[object Float32Array]"]=A["[object Float64Array]"]=A["[object Int8Array]"]=A["[object Int16Array]"]=A["[object Int32Array]"]=A["[object Map]"]=A["[object Number]"]=A[S]=A["[object RegExp]"]=A["[object Set]"]=A["[object String]"]=A["[object Symbol]"]=A["[object Uint8Array]"]=A["[object Uint8ClampedArray]"]=A["[object Uint16Array]"]=A["[object Uint32Array]"]=!0,A["[object Error]"]=A[C]=A["[object WeakMap]"]=!1,t.exports=function t(e,n,M,O,N,D){var B,L=1&n,I=2&n,F=4&n;if(M&&(B=N?M(e,O,N,D):M(e)),void 0!==B)return B;if(!x(e))return e;var R=b(e);if(R){if(B=g(e),!L)return l(e,B)}else{var P=p(e),j=P==C||"[object GeneratorFunction]"==P;if(v(e))return c(e,L);if(P==S||P==T||j&&!N){if(B=I||j?{}:m(e),!L)return I?h(e,s(B,e)):u(e,o(B,e))}else{if(!A[P])return N?e:{};B=y(e,P,L)}}D||(D=new r);var z=D.get(e);if(z)return z;D.set(e,B),k(e)?e.forEach((function(r){B.add(t(r,n,M,r,e,D))})):_(e)&&e.forEach((function(r,i){B.set(i,t(r,n,M,i,e,D))}));var Y=R?void 0:(F?I?f:d:I?E:w)(e);return i(Y||e,(function(r,i){Y&&(r=e[i=r]),a(B,i,t(r,n,M,i,e,D))})),B}},3118:(t,e,n)=>{var r=n(3218),i=Object.create,a=function(){function t(){}return function(e){if(!r(e))return{};if(i)return i(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=a},9881:(t,e,n)=>{var r=n(7816),i=n(9291)(r);t.exports=i},6029:(t,e,n)=>{var r=n(3448);t.exports=function(t,e,n){for(var i=-1,a=t.length;++i<a;){var o=t[i],s=e(o);if(null!=s&&(void 0===c?s==s&&!r(s):n(s,c)))var c=s,l=o}return l}},760:(t,e,n)=>{var r=n(9881);t.exports=function(t,e){var n=[];return r(t,(function(t,r,i){e(t,r,i)&&n.push(t)})),n}},1848:t=>{t.exports=function(t,e,n,r){for(var i=t.length,a=n+(r?1:-1);r?a--:++a<i;)if(e(t[a],a,t))return a;return-1}},1078:(t,e,n)=>{var r=n(2488),i=n(7285);t.exports=function t(e,n,a,o,s){var c=-1,l=e.length;for(a||(a=i),s||(s=[]);++c<l;){var u=e[c];n>0&&a(u)?n>1?t(u,n-1,a,o,s):r(s,u):o||(s[s.length]=u)}return s}},8483:(t,e,n)=>{var r=n(5063)();t.exports=r},7816:(t,e,n)=>{var r=n(8483),i=n(3674);t.exports=function(t,e){return t&&r(t,e,i)}},7786:(t,e,n)=>{var r=n(1811),i=n(327);t.exports=function(t,e){for(var n=0,a=(e=r(e,t)).length;null!=t&&n<a;)t=t[i(e[n++])];return n&&n==a?t:void 0}},8866:(t,e,n)=>{var r=n(2488),i=n(1469);t.exports=function(t,e,n){var a=e(t);return i(t)?a:r(a,n(t))}},4239:(t,e,n)=>{var r=n(2705),i=n(9607),a=n(2333),o=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":o&&o in Object(t)?i(t):a(t)}},3325:t=>{t.exports=function(t,e){return t>e}},8565:t=>{var e=Object.prototype.hasOwnProperty;t.exports=function(t,n){return null!=t&&e.call(t,n)}},13:t=>{t.exports=function(t,e){return null!=t&&e in Object(t)}},2118:(t,e,n)=>{var r=n(1848),i=n(2722),a=n(2351);t.exports=function(t,e,n){return e==e?a(t,e,n):r(t,i,n)}},9454:(t,e,n)=>{var r=n(4239),i=n(7005);t.exports=function(t){return i(t)&&"[object Arguments]"==r(t)}},939:(t,e,n)=>{var r=n(2492),i=n(7005);t.exports=function t(e,n,a,o,s){return e===n||(null==e||null==n||!i(e)&&!i(n)?e!=e&&n!=n:r(e,n,a,o,t,s))}},2492:(t,e,n)=>{var r=n(6384),i=n(7114),a=n(8351),o=n(6096),s=n(4160),c=n(1469),l=n(4144),u=n(6719),h="[object Arguments]",d="[object Array]",f="[object Object]",p=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,g,y,m){var b=c(t),v=c(e),_=b?d:s(t),x=v?d:s(e),k=(_=_==h?f:_)==f,w=(x=x==h?f:x)==f,E=_==x;if(E&&l(t)){if(!l(e))return!1;b=!0,k=!1}if(E&&!k)return m||(m=new r),b||u(t)?i(t,e,n,g,y,m):a(t,e,_,n,g,y,m);if(!(1&n)){var T=k&&p.call(t,"__wrapped__"),C=w&&p.call(e,"__wrapped__");if(T||C){var S=T?t.value():t,A=C?e.value():e;return m||(m=new r),y(S,A,n,g,m)}}return!!E&&(m||(m=new r),o(t,e,n,g,y,m))}},5588:(t,e,n)=>{var r=n(4160),i=n(7005);t.exports=function(t){return i(t)&&"[object Map]"==r(t)}},2958:(t,e,n)=>{var r=n(6384),i=n(939);t.exports=function(t,e,n,a){var o=n.length,s=o,c=!a;if(null==t)return!s;for(t=Object(t);o--;){var l=n[o];if(c&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++o<s;){var u=(l=n[o])[0],h=t[u],d=l[1];if(c&&l[2]){if(void 0===h&&!(u in t))return!1}else{var f=new r;if(a)var p=a(h,d,u,t,e,f);if(!(void 0===p?i(d,h,3,a,f):p))return!1}}return!0}},2722:t=>{t.exports=function(t){return t!=t}},8458:(t,e,n)=>{var r=n(3560),i=n(5346),a=n(3218),o=n(346),s=/^\[object .+?Constructor\]$/,c=Function.prototype,l=Object.prototype,u=c.toString,h=l.hasOwnProperty,d=RegExp("^"+u.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!a(t)||i(t))&&(r(t)?d:s).test(o(t))}},9221:(t,e,n)=>{var r=n(4160),i=n(7005);t.exports=function(t){return i(t)&&"[object Set]"==r(t)}},8749:(t,e,n)=>{var r=n(4239),i=n(1780),a=n(7005),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1,t.exports=function(t){return a(t)&&i(t.length)&&!!o[r(t)]}},7206:(t,e,n)=>{var r=n(1573),i=n(6432),a=n(6557),o=n(1469),s=n(9601);t.exports=function(t){return"function"==typeof t?t:null==t?a:"object"==typeof t?o(t)?i(t[0],t[1]):r(t):s(t)}},280:(t,e,n)=>{var r=n(5726),i=n(6916),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},313:(t,e,n)=>{var r=n(3218),i=n(5726),a=n(3498),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return a(t);var e=i(t),n=[];for(var s in t)("constructor"!=s||!e&&o.call(t,s))&&n.push(s);return n}},433:t=>{t.exports=function(t,e){return t<e}},9199:(t,e,n)=>{var r=n(9881),i=n(8612);t.exports=function(t,e){var n=-1,a=i(t)?Array(t.length):[];return r(t,(function(t,r,i){a[++n]=e(t,r,i)})),a}},1573:(t,e,n)=>{var r=n(2958),i=n(1499),a=n(2634);t.exports=function(t){var e=i(t);return 1==e.length&&e[0][2]?a(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},6432:(t,e,n)=>{var r=n(939),i=n(7361),a=n(9095),o=n(5403),s=n(9162),c=n(2634),l=n(327);t.exports=function(t,e){return o(t)&&s(e)?c(l(t),e):function(n){var o=i(n,t);return void 0===o&&o===e?a(n,t):r(e,o,3)}}},2980:(t,e,n)=>{var r=n(6384),i=n(6556),a=n(8483),o=n(9783),s=n(3218),c=n(1704),l=n(6390);t.exports=function t(e,n,u,h,d){e!==n&&a(n,(function(a,c){if(d||(d=new r),s(a))o(e,n,c,u,t,h,d);else{var f=h?h(l(e,c),a,c+"",e,n,d):void 0;void 0===f&&(f=a),i(e,c,f)}}),c)}},9783:(t,e,n)=>{var r=n(6556),i=n(4626),a=n(7133),o=n(278),s=n(8517),c=n(5694),l=n(1469),u=n(9246),h=n(4144),d=n(3560),f=n(3218),p=n(8630),g=n(6719),y=n(6390),m=n(3678);t.exports=function(t,e,n,b,v,_,x){var k=y(t,n),w=y(e,n),E=x.get(w);if(E)r(t,n,E);else{var T=_?_(k,w,n+"",t,e,x):void 0,C=void 0===T;if(C){var S=l(w),A=!S&&h(w),M=!S&&!A&&g(w);T=w,S||A||M?l(k)?T=k:u(k)?T=o(k):A?(C=!1,T=i(w,!0)):M?(C=!1,T=a(w,!0)):T=[]:p(w)||c(w)?(T=k,c(k)?T=m(k):f(k)&&!d(k)||(T=s(w))):C=!1}C&&(x.set(w,T),v(T,w,b,_,x),x.delete(w)),r(t,n,T)}}},9556:(t,e,n)=>{var r=n(9932),i=n(7786),a=n(7206),o=n(9199),s=n(1131),c=n(1717),l=n(5022),u=n(6557),h=n(1469);t.exports=function(t,e,n){e=e.length?r(e,(function(t){return h(t)?function(e){return i(e,1===t.length?t[0]:t)}:t})):[u];var d=-1;e=r(e,c(a));var f=o(t,(function(t,n,i){return{criteria:r(e,(function(e){return e(t)})),index:++d,value:t}}));return s(f,(function(t,e){return l(t,e,n)}))}},5970:(t,e,n)=>{var r=n(3012),i=n(9095);t.exports=function(t,e){return r(t,e,(function(e,n){return i(t,n)}))}},3012:(t,e,n)=>{var r=n(7786),i=n(611),a=n(1811);t.exports=function(t,e,n){for(var o=-1,s=e.length,c={};++o<s;){var l=e[o],u=r(t,l);n(u,l)&&i(c,a(l,t),u)}return c}},371:t=>{t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},9152:(t,e,n)=>{var r=n(7786);t.exports=function(t){return function(e){return r(e,t)}}},98:t=>{var e=Math.ceil,n=Math.max;t.exports=function(t,r,i,a){for(var o=-1,s=n(e((r-t)/(i||1)),0),c=Array(s);s--;)c[a?s:++o]=t,t+=i;return c}},107:t=>{t.exports=function(t,e,n,r,i){return i(t,(function(t,i,a){n=r?(r=!1,t):e(n,t,i,a)})),n}},5976:(t,e,n)=>{var r=n(6557),i=n(5357),a=n(61);t.exports=function(t,e){return a(i(t,e,r),t+"")}},611:(t,e,n)=>{var r=n(4865),i=n(1811),a=n(5776),o=n(3218),s=n(327);t.exports=function(t,e,n,c){if(!o(t))return t;for(var l=-1,u=(e=i(e,t)).length,h=u-1,d=t;null!=d&&++l<u;){var f=s(e[l]),p=n;if("__proto__"===f||"constructor"===f||"prototype"===f)return t;if(l!=h){var g=d[f];void 0===(p=c?c(g,f,d):void 0)&&(p=o(g)?g:a(e[l+1])?[]:{})}r(d,f,p),d=d[f]}return t}},6560:(t,e,n)=>{var r=n(5703),i=n(8777),a=n(6557),o=i?function(t,e){return i(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:a;t.exports=o},1131:t=>{t.exports=function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}},2545:t=>{t.exports=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},531:(t,e,n)=>{var r=n(2705),i=n(9932),a=n(1469),o=n(3448),s=r?r.prototype:void 0,c=s?s.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(a(e))return i(e,t)+"";if(o(e))return c?c.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},7561:(t,e,n)=>{var r=n(7990),i=/^\s+/;t.exports=function(t){return t?t.slice(0,r(t)+1).replace(i,""):t}},1717:t=>{t.exports=function(t){return function(e){return t(e)}}},5652:(t,e,n)=>{var r=n(8668),i=n(7443),a=n(1196),o=n(4757),s=n(3593),c=n(1814);t.exports=function(t,e,n){var l=-1,u=i,h=t.length,d=!0,f=[],p=f;if(n)d=!1,u=a;else if(h>=200){var g=e?null:s(t);if(g)return c(g);d=!1,u=o,p=new r}else p=e?[]:f;t:for(;++l<h;){var y=t[l],m=e?e(y):y;if(y=n||0!==y?y:0,d&&m==m){for(var b=p.length;b--;)if(p[b]===m)continue t;e&&p.push(m),f.push(y)}else u(p,m,n)||(p!==f&&p.push(m),f.push(y))}return f}},7415:(t,e,n)=>{var r=n(9932);t.exports=function(t,e){return r(e,(function(e){return t[e]}))}},1757:t=>{t.exports=function(t,e,n){for(var r=-1,i=t.length,a=e.length,o={};++r<i;){var s=r<a?e[r]:void 0;n(o,t[r],s)}return o}},4757:t=>{t.exports=function(t,e){return t.has(e)}},4290:(t,e,n)=>{var r=n(6557);t.exports=function(t){return"function"==typeof t?t:r}},1811:(t,e,n)=>{var r=n(1469),i=n(5403),a=n(5514),o=n(9833);t.exports=function(t,e){return r(t)?t:i(t,e)?[t]:a(o(t))}},4318:(t,e,n)=>{var r=n(1149);t.exports=function(t){var e=new t.constructor(t.byteLength);return new r(e).set(new r(t)),e}},4626:(t,e,n)=>{t=n.nmd(t);var r=n(5639),i=e&&!e.nodeType&&e,a=i&&t&&!t.nodeType&&t,o=a&&a.exports===i?r.Buffer:void 0,s=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}},7157:(t,e,n)=>{var r=n(4318);t.exports=function(t,e){var n=e?r(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}},3147:t=>{var e=/\w*$/;t.exports=function(t){var n=new t.constructor(t.source,e.exec(t));return n.lastIndex=t.lastIndex,n}},419:(t,e,n)=>{var r=n(2705),i=r?r.prototype:void 0,a=i?i.valueOf:void 0;t.exports=function(t){return a?Object(a.call(t)):{}}},7133:(t,e,n)=>{var r=n(4318);t.exports=function(t,e){var n=e?r(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}},6393:(t,e,n)=>{var r=n(3448);t.exports=function(t,e){if(t!==e){var n=void 0!==t,i=null===t,a=t==t,o=r(t),s=void 0!==e,c=null===e,l=e==e,u=r(e);if(!c&&!u&&!o&&t>e||o&&s&&l&&!c&&!u||i&&s&&l||!n&&l||!a)return 1;if(!i&&!o&&!u&&t<e||u&&n&&a&&!i&&!o||c&&n&&a||!s&&a||!l)return-1}return 0}},5022:(t,e,n)=>{var r=n(6393);t.exports=function(t,e,n){for(var i=-1,a=t.criteria,o=e.criteria,s=a.length,c=n.length;++i<s;){var l=r(a[i],o[i]);if(l)return i>=c?l:l*("desc"==n[i]?-1:1)}return t.index-e.index}},278:t=>{t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},8363:(t,e,n)=>{var r=n(4865),i=n(9465);t.exports=function(t,e,n,a){var o=!n;n||(n={});for(var s=-1,c=e.length;++s<c;){var l=e[s],u=a?a(n[l],t[l],l,n,t):void 0;void 0===u&&(u=t[l]),o?i(n,l,u):r(n,l,u)}return n}},8805:(t,e,n)=>{var r=n(8363),i=n(9551);t.exports=function(t,e){return r(t,i(t),e)}},1911:(t,e,n)=>{var r=n(8363),i=n(1442);t.exports=function(t,e){return r(t,i(t),e)}},4429:(t,e,n)=>{var r=n(5639)["__core-js_shared__"];t.exports=r},1463:(t,e,n)=>{var r=n(5976),i=n(6612);t.exports=function(t){return r((function(e,n){var r=-1,a=n.length,o=a>1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=t.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),e=Object(e);++r<a;){var c=n[r];c&&t(e,c,r,o)}return e}))}},9291:(t,e,n)=>{var r=n(8612);t.exports=function(t,e){return function(n,i){if(null==n)return n;if(!r(n))return t(n,i);for(var a=n.length,o=e?a:-1,s=Object(n);(e?o--:++o<a)&&!1!==i(s[o],o,s););return n}}},5063:t=>{t.exports=function(t){return function(e,n,r){for(var i=-1,a=Object(e),o=r(e),s=o.length;s--;){var c=o[t?s:++i];if(!1===n(a[c],c,a))break}return e}}},7740:(t,e,n)=>{var r=n(7206),i=n(8612),a=n(3674);t.exports=function(t){return function(e,n,o){var s=Object(e);if(!i(e)){var c=r(n,3);e=a(e),n=function(t){return c(s[t],t,s)}}var l=t(e,n,o);return l>-1?s[c?e[l]:l]:void 0}}},7445:(t,e,n)=>{var r=n(98),i=n(6612),a=n(8601);t.exports=function(t){return function(e,n,o){return o&&"number"!=typeof o&&i(e,n,o)&&(n=o=void 0),e=a(e),void 0===n?(n=e,e=0):n=a(n),o=void 0===o?e<n?1:-1:a(o),r(e,n,o,t)}}},3593:(t,e,n)=>{var r=n(8525),i=n(308),a=n(1814),o=r&&1/a(new r([,-0]))[1]==1/0?function(t){return new r(t)}:i;t.exports=o},8777:(t,e,n)=>{var r=n(852),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},7114:(t,e,n)=>{var r=n(8668),i=n(2908),a=n(4757);t.exports=function(t,e,n,o,s,c){var l=1&n,u=t.length,h=e.length;if(u!=h&&!(l&&h>u))return!1;var d=c.get(t),f=c.get(e);if(d&&f)return d==e&&f==t;var p=-1,g=!0,y=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++p<u;){var m=t[p],b=e[p];if(o)var v=l?o(b,m,p,e,t,c):o(m,b,p,t,e,c);if(void 0!==v){if(v)continue;g=!1;break}if(y){if(!i(e,(function(t,e){if(!a(y,e)&&(m===t||s(m,t,n,o,c)))return y.push(e)}))){g=!1;break}}else if(m!==b&&!s(m,b,n,o,c)){g=!1;break}}return c.delete(t),c.delete(e),g}},8351:(t,e,n)=>{var r=n(2705),i=n(1149),a=n(7813),o=n(7114),s=n(8776),c=n(1814),l=r?r.prototype:void 0,u=l?l.valueOf:void 0;t.exports=function(t,e,n,r,l,h,d){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!h(new i(t),new i(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return a(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var f=s;case"[object Set]":var p=1&r;if(f||(f=c),t.size!=e.size&&!p)return!1;var g=d.get(t);if(g)return g==e;r|=2,d.set(t,e);var y=o(f(t),f(e),r,l,h,d);return d.delete(t),y;case"[object Symbol]":if(u)return u.call(t)==u.call(e)}return!1}},6096:(t,e,n)=>{var r=n(8234),i=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,a,o,s){var c=1&n,l=r(t),u=l.length;if(u!=r(e).length&&!c)return!1;for(var h=u;h--;){var d=l[h];if(!(c?d in e:i.call(e,d)))return!1}var f=s.get(t),p=s.get(e);if(f&&p)return f==e&&p==t;var g=!0;s.set(t,e),s.set(e,t);for(var y=c;++h<u;){var m=t[d=l[h]],b=e[d];if(a)var v=c?a(b,m,d,e,t,s):a(m,b,d,t,e,s);if(!(void 0===v?m===b||o(m,b,n,a,s):v)){g=!1;break}y||(y="constructor"==d)}if(g&&!y){var _=t.constructor,x=e.constructor;_==x||!("constructor"in t)||!("constructor"in e)||"function"==typeof _&&_ instanceof _&&"function"==typeof x&&x instanceof x||(g=!1)}return s.delete(t),s.delete(e),g}},9021:(t,e,n)=>{var r=n(5564),i=n(5357),a=n(61);t.exports=function(t){return a(i(t,void 0,r),t+"")}},1957:(t,e,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;t.exports=r},8234:(t,e,n)=>{var r=n(8866),i=n(9551),a=n(3674);t.exports=function(t){return r(t,a,i)}},6904:(t,e,n)=>{var r=n(8866),i=n(1442),a=n(1704);t.exports=function(t){return r(t,a,i)}},5050:(t,e,n)=>{var r=n(7019);t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},1499:(t,e,n)=>{var r=n(9162),i=n(3674);t.exports=function(t){for(var e=i(t),n=e.length;n--;){var a=e[n],o=t[a];e[n]=[a,o,r(o)]}return e}},852:(t,e,n)=>{var r=n(8458),i=n(7801);t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},5924:(t,e,n)=>{var r=n(5569)(Object.getPrototypeOf,Object);t.exports=r},9607:(t,e,n)=>{var r=n(2705),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=a.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=o.call(t);return r&&(e?t[s]=n:delete t[s]),i}},9551:(t,e,n)=>{var r=n(4963),i=n(479),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(t){return null==t?[]:(t=Object(t),r(o(t),(function(e){return a.call(t,e)})))}:i;t.exports=s},1442:(t,e,n)=>{var r=n(2488),i=n(5924),a=n(9551),o=n(479),s=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)r(e,a(t)),t=i(t);return e}:o;t.exports=s},4160:(t,e,n)=>{var r=n(8552),i=n(7071),a=n(3818),o=n(8525),s=n(577),c=n(4239),l=n(346),u="[object Map]",h="[object Promise]",d="[object Set]",f="[object WeakMap]",p="[object DataView]",g=l(r),y=l(i),m=l(a),b=l(o),v=l(s),_=c;(r&&_(new r(new ArrayBuffer(1)))!=p||i&&_(new i)!=u||a&&_(a.resolve())!=h||o&&_(new o)!=d||s&&_(new s)!=f)&&(_=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?l(n):"";if(r)switch(r){case g:return p;case y:return u;case m:return h;case b:return d;case v:return f}return e}),t.exports=_},7801:t=>{t.exports=function(t,e){return null==t?void 0:t[e]}},222:(t,e,n)=>{var r=n(1811),i=n(5694),a=n(1469),o=n(5776),s=n(1780),c=n(327);t.exports=function(t,e,n){for(var l=-1,u=(e=r(e,t)).length,h=!1;++l<u;){var d=c(e[l]);if(!(h=null!=t&&n(t,d)))break;t=t[d]}return h||++l!=u?h:!!(u=null==t?0:t.length)&&s(u)&&o(d,u)&&(a(t)||i(t))}},2689:t=>{var e=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");t.exports=function(t){return e.test(t)}},1789:(t,e,n)=>{var r=n(4536);t.exports=function(){this.__data__=r?r(null):{},this.size=0}},401:t=>{t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},7667:(t,e,n)=>{var r=n(4536),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(e,t)?e[t]:void 0}},1327:(t,e,n)=>{var r=n(4536),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:i.call(e,t)}},1866:(t,e,n)=>{var r=n(4536);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this}},3824:t=>{var e=Object.prototype.hasOwnProperty;t.exports=function(t){var n=t.length,r=new t.constructor(n);return n&&"string"==typeof t[0]&&e.call(t,"index")&&(r.index=t.index,r.input=t.input),r}},9148:(t,e,n)=>{var r=n(4318),i=n(7157),a=n(3147),o=n(419),s=n(7133);t.exports=function(t,e,n){var c=t.constructor;switch(e){case"[object ArrayBuffer]":return r(t);case"[object Boolean]":case"[object Date]":return new c(+t);case"[object DataView]":return i(t,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return s(t,n);case"[object Map]":case"[object Set]":return new c;case"[object Number]":case"[object String]":return new c(t);case"[object RegExp]":return a(t);case"[object Symbol]":return o(t)}}},8517:(t,e,n)=>{var r=n(3118),i=n(5924),a=n(5726);t.exports=function(t){return"function"!=typeof t.constructor||a(t)?{}:r(i(t))}},7285:(t,e,n)=>{var r=n(2705),i=n(5694),a=n(1469),o=r?r.isConcatSpreadable:void 0;t.exports=function(t){return a(t)||i(t)||!!(o&&t&&t[o])}},5776:t=>{var e=/^(?:0|[1-9]\d*)$/;t.exports=function(t,n){var r=typeof t;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&e.test(t))&&t>-1&&t%1==0&&t<n}},6612:(t,e,n)=>{var r=n(7813),i=n(8612),a=n(5776),o=n(3218);t.exports=function(t,e,n){if(!o(n))return!1;var s=typeof e;return!!("number"==s?i(n)&&a(e,n.length):"string"==s&&e in n)&&r(n[e],t)}},5403:(t,e,n)=>{var r=n(1469),i=n(3448),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!i(t))||o.test(t)||!a.test(t)||null!=e&&t in Object(e)}},7019:t=>{t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},5346:(t,e,n)=>{var r,i=n(4429),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!a&&a in t}},5726:t=>{var e=Object.prototype;t.exports=function(t){var n=t&&t.constructor;return t===("function"==typeof n&&n.prototype||e)}},9162:(t,e,n)=>{var r=n(3218);t.exports=function(t){return t==t&&!r(t)}},7040:t=>{t.exports=function(){this.__data__=[],this.size=0}},4125:(t,e,n)=>{var r=n(8470),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0||(n==e.length-1?e.pop():i.call(e,n,1),--this.size,0))}},2117:(t,e,n)=>{var r=n(8470);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},7518:(t,e,n)=>{var r=n(8470);t.exports=function(t){return r(this.__data__,t)>-1}},4705:(t,e,n)=>{var r=n(8470);t.exports=function(t,e){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},4785:(t,e,n)=>{var r=n(1989),i=n(8407),a=n(7071);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},1285:(t,e,n)=>{var r=n(5050);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},6e3:(t,e,n)=>{var r=n(5050);t.exports=function(t){return r(this,t).get(t)}},9916:(t,e,n)=>{var r=n(5050);t.exports=function(t){return r(this,t).has(t)}},5265:(t,e,n)=>{var r=n(5050);t.exports=function(t,e){var n=r(this,t),i=n.size;return n.set(t,e),this.size+=n.size==i?0:1,this}},8776:t=>{t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}},2634:t=>{t.exports=function(t,e){return function(n){return null!=n&&n[t]===e&&(void 0!==e||t in Object(n))}}},4523:(t,e,n)=>{var r=n(8306);t.exports=function(t){var e=r(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},4536:(t,e,n)=>{var r=n(852)(Object,"create");t.exports=r},6916:(t,e,n)=>{var r=n(5569)(Object.keys,Object);t.exports=r},3498:t=>{t.exports=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}},1167:(t,e,n)=>{t=n.nmd(t);var r=n(1957),i=e&&!e.nodeType&&e,a=i&&t&&!t.nodeType&&t,o=a&&a.exports===i&&r.process,s=function(){try{return a&&a.require&&a.require("util").types||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=s},2333:t=>{var e=Object.prototype.toString;t.exports=function(t){return e.call(t)}},5569:t=>{t.exports=function(t,e){return function(n){return t(e(n))}}},5357:(t,e,n)=>{var r=n(6874),i=Math.max;t.exports=function(t,e,n){return e=i(void 0===e?t.length-1:e,0),function(){for(var a=arguments,o=-1,s=i(a.length-e,0),c=Array(s);++o<s;)c[o]=a[e+o];o=-1;for(var l=Array(e+1);++o<e;)l[o]=a[o];return l[e]=n(c),r(t,this,l)}}},5639:(t,e,n)=>{var r=n(1957),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();t.exports=a},6390:t=>{t.exports=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]}},619:t=>{t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},2385:t=>{t.exports=function(t){return this.__data__.has(t)}},1814:t=>{t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},61:(t,e,n)=>{var r=n(6560),i=n(1275)(r);t.exports=i},1275:t=>{var e=Date.now;t.exports=function(t){var n=0,r=0;return function(){var i=e(),a=16-(i-r);if(r=i,a>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(void 0,arguments)}}},7465:(t,e,n)=>{var r=n(8407);t.exports=function(){this.__data__=new r,this.size=0}},3779:t=>{t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},7599:t=>{t.exports=function(t){return this.__data__.get(t)}},4758:t=>{t.exports=function(t){return this.__data__.has(t)}},4309:(t,e,n)=>{var r=n(8407),i=n(7071),a=n(3369);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var o=n.__data__;if(!i||o.length<199)return o.push([t,e]),this.size=++n.size,this;n=this.__data__=new a(o)}return n.set(t,e),this.size=n.size,this}},2351:t=>{t.exports=function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}},8016:(t,e,n)=>{var r=n(8983),i=n(2689),a=n(1903);t.exports=function(t){return i(t)?a(t):r(t)}},5514:(t,e,n)=>{var r=n(4523),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,o=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(i,(function(t,n,r,i){e.push(r?i.replace(a,"$1"):n||t)})),e}));t.exports=o},327:(t,e,n)=>{var r=n(3448);t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},346:t=>{var e=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return e.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},7990:t=>{var e=/\s/;t.exports=function(t){for(var n=t.length;n--&&e.test(t.charAt(n)););return n}},1903:t=>{var e="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",n="\\ud83c[\\udffb-\\udfff]",r="[^\\ud800-\\udfff]",i="(?:\\ud83c[\\udde6-\\uddff]){2}",a="[\\ud800-\\udbff][\\udc00-\\udfff]",o="(?:"+e+"|"+n+")?",s="[\\ufe0e\\ufe0f]?",c=s+o+"(?:\\u200d(?:"+[r,i,a].join("|")+")"+s+o+")*",l="(?:"+[r+e+"?",e,i,a,"[\\ud800-\\udfff]"].join("|")+")",u=RegExp(n+"(?="+n+")|"+l+c,"g");t.exports=function(t){for(var e=u.lastIndex=0;u.test(t);)++e;return e}},6678:(t,e,n)=>{var r=n(5990);t.exports=function(t){return r(t,4)}},361:(t,e,n)=>{var r=n(5990);t.exports=function(t){return r(t,5)}},5703:t=>{t.exports=function(t){return function(){return t}}},1747:(t,e,n)=>{var r=n(5976),i=n(7813),a=n(6612),o=n(1704),s=Object.prototype,c=s.hasOwnProperty,l=r((function(t,e){t=Object(t);var n=-1,r=e.length,l=r>2?e[2]:void 0;for(l&&a(e[0],e[1],l)&&(r=1);++n<r;)for(var u=e[n],h=o(u),d=-1,f=h.length;++d<f;){var p=h[d],g=t[p];(void 0===g||i(g,s[p])&&!c.call(t,p))&&(t[p]=u[p])}return t}));t.exports=l},6073:(t,e,n)=>{t.exports=n(4486)},7813:t=>{t.exports=function(t,e){return t===e||t!=t&&e!=e}},3105:(t,e,n)=>{var r=n(4963),i=n(760),a=n(7206),o=n(1469);t.exports=function(t,e){return(o(t)?r:i)(t,a(e,3))}},3311:(t,e,n)=>{var r=n(7740)(n(998));t.exports=r},998:(t,e,n)=>{var r=n(1848),i=n(7206),a=n(554),o=Math.max;t.exports=function(t,e,n){var s=null==t?0:t.length;if(!s)return-1;var c=null==n?0:a(n);return c<0&&(c=o(s+c,0)),r(t,i(e,3),c)}},5564:(t,e,n)=>{var r=n(1078);t.exports=function(t){return null!=t&&t.length?r(t,1):[]}},4486:(t,e,n)=>{var r=n(7412),i=n(9881),a=n(4290),o=n(1469);t.exports=function(t,e){return(o(t)?r:i)(t,a(e))}},2620:(t,e,n)=>{var r=n(8483),i=n(4290),a=n(1704);t.exports=function(t,e){return null==t?t:r(t,i(e),a)}},7361:(t,e,n)=>{var r=n(7786);t.exports=function(t,e,n){var i=null==t?void 0:r(t,e);return void 0===i?n:i}},8721:(t,e,n)=>{var r=n(8565),i=n(222);t.exports=function(t,e){return null!=t&&i(t,e,r)}},9095:(t,e,n)=>{var r=n(13),i=n(222);t.exports=function(t,e){return null!=t&&i(t,e,r)}},6557:t=>{t.exports=function(t){return t}},5694:(t,e,n)=>{var r=n(9454),i=n(7005),a=Object.prototype,o=a.hasOwnProperty,s=a.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(t){return i(t)&&o.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},1469:t=>{var e=Array.isArray;t.exports=e},8612:(t,e,n)=>{var r=n(3560),i=n(1780);t.exports=function(t){return null!=t&&i(t.length)&&!r(t)}},9246:(t,e,n)=>{var r=n(8612),i=n(7005);t.exports=function(t){return i(t)&&r(t)}},4144:(t,e,n)=>{t=n.nmd(t);var r=n(5639),i=n(5062),a=e&&!e.nodeType&&e,o=a&&t&&!t.nodeType&&t,s=o&&o.exports===a?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c},1609:(t,e,n)=>{var r=n(280),i=n(4160),a=n(5694),o=n(1469),s=n(8612),c=n(4144),l=n(5726),u=n(6719),h=Object.prototype.hasOwnProperty;t.exports=function(t){if(null==t)return!0;if(s(t)&&(o(t)||"string"==typeof t||"function"==typeof t.splice||c(t)||u(t)||a(t)))return!t.length;var e=i(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if(l(t))return!r(t).length;for(var n in t)if(h.call(t,n))return!1;return!0}},3560:(t,e,n)=>{var r=n(4239),i=n(3218);t.exports=function(t){if(!i(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},1780:t=>{t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},6688:(t,e,n)=>{var r=n(5588),i=n(1717),a=n(1167),o=a&&a.isMap,s=o?i(o):r;t.exports=s},3218:t=>{t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},7005:t=>{t.exports=function(t){return null!=t&&"object"==typeof t}},8630:(t,e,n)=>{var r=n(4239),i=n(5924),a=n(7005),o=Function.prototype,s=Object.prototype,c=o.toString,l=s.hasOwnProperty,u=c.call(Object);t.exports=function(t){if(!a(t)||"[object Object]"!=r(t))return!1;var e=i(t);if(null===e)return!0;var n=l.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&c.call(n)==u}},2928:(t,e,n)=>{var r=n(9221),i=n(1717),a=n(1167),o=a&&a.isSet,s=o?i(o):r;t.exports=s},7037:(t,e,n)=>{var r=n(4239),i=n(1469),a=n(7005);t.exports=function(t){return"string"==typeof t||!i(t)&&a(t)&&"[object String]"==r(t)}},3448:(t,e,n)=>{var r=n(4239),i=n(7005);t.exports=function(t){return"symbol"==typeof t||i(t)&&"[object Symbol]"==r(t)}},6719:(t,e,n)=>{var r=n(8749),i=n(1717),a=n(1167),o=a&&a.isTypedArray,s=o?i(o):r;t.exports=s},2353:t=>{t.exports=function(t){return void 0===t}},3674:(t,e,n)=>{var r=n(4636),i=n(280),a=n(8612);t.exports=function(t){return a(t)?r(t):i(t)}},1704:(t,e,n)=>{var r=n(4636),i=n(313),a=n(8612);t.exports=function(t){return a(t)?r(t,!0):i(t)}},928:t=>{t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},5161:(t,e,n)=>{var r=n(9932),i=n(7206),a=n(9199),o=n(1469);t.exports=function(t,e){return(o(t)?r:a)(t,i(e,3))}},6604:(t,e,n)=>{var r=n(9465),i=n(7816),a=n(7206);t.exports=function(t,e){var n={};return e=a(e,3),i(t,(function(t,i,a){r(n,i,e(t,i,a))})),n}},6162:(t,e,n)=>{var r=n(6029),i=n(3325),a=n(6557);t.exports=function(t){return t&&t.length?r(t,a,i):void 0}},8306:(t,e,n)=>{var r=n(3369);function i(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=t.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(i.Cache||r),n}i.Cache=r,t.exports=i},3857:(t,e,n)=>{var r=n(2980),i=n(1463)((function(t,e,n){r(t,e,n)}));t.exports=i},3632:(t,e,n)=>{var r=n(6029),i=n(433),a=n(6557);t.exports=function(t){return t&&t.length?r(t,a,i):void 0}},2762:(t,e,n)=>{var r=n(6029),i=n(7206),a=n(433);t.exports=function(t,e){return t&&t.length?r(t,i(e,2),a):void 0}},308:t=>{t.exports=function(){}},7771:(t,e,n)=>{var r=n(5639);t.exports=function(){return r.Date.now()}},9722:(t,e,n)=>{var r=n(5970),i=n(9021)((function(t,e){return null==t?{}:r(t,e)}));t.exports=i},9601:(t,e,n)=>{var r=n(371),i=n(9152),a=n(5403),o=n(327);t.exports=function(t){return a(t)?r(o(t)):i(t)}},6026:(t,e,n)=>{var r=n(7445)();t.exports=r},4061:(t,e,n)=>{var r=n(2663),i=n(9881),a=n(7206),o=n(107),s=n(1469);t.exports=function(t,e,n){var c=s(t)?r:o,l=arguments.length<3;return c(t,a(e,4),n,l,i)}},4238:(t,e,n)=>{var r=n(280),i=n(4160),a=n(8612),o=n(7037),s=n(8016);t.exports=function(t){if(null==t)return 0;if(a(t))return o(t)?s(t):t.length;var e=i(t);return"[object Map]"==e||"[object Set]"==e?t.size:r(t).length}},9734:(t,e,n)=>{var r=n(1078),i=n(9556),a=n(5976),o=n(6612),s=a((function(t,e){if(null==t)return[];var n=e.length;return n>1&&o(t,e[0],e[1])?e=[]:n>2&&o(e[0],e[1],e[2])&&(e=[e[0]]),i(t,r(e,1),[])}));t.exports=s},479:t=>{t.exports=function(){return[]}},5062:t=>{t.exports=function(){return!1}},8601:(t,e,n)=>{var r=n(4841);t.exports=function(t){return t?1/0===(t=r(t))||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},554:(t,e,n)=>{var r=n(8601);t.exports=function(t){var e=r(t),n=e%1;return e==e?n?e-n:e:0}},4841:(t,e,n)=>{var r=n(7561),i=n(3218),a=n(3448),o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(a(t))return NaN;if(i(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=i(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=r(t);var n=s.test(t);return n||c.test(t)?l(t.slice(2),n?2:8):o.test(t)?NaN:+t}},3678:(t,e,n)=>{var r=n(8363),i=n(1704);t.exports=function(t){return r(t,i(t))}},9833:(t,e,n)=>{var r=n(531);t.exports=function(t){return null==t?"":r(t)}},8718:(t,e,n)=>{var r=n(7412),i=n(3118),a=n(7816),o=n(7206),s=n(5924),c=n(1469),l=n(4144),u=n(3560),h=n(3218),d=n(6719);t.exports=function(t,e,n){var f=c(t),p=f||l(t)||d(t);if(e=o(e,4),null==n){var g=t&&t.constructor;n=p?f?new g:[]:h(t)&&u(g)?i(s(t)):{}}return(p?r:a)(t,(function(t,r,i){return e(n,t,r,i)})),n}},3386:(t,e,n)=>{var r=n(1078),i=n(5976),a=n(5652),o=n(9246),s=i((function(t){return a(r(t,1,o,!0))}));t.exports=s},3955:(t,e,n)=>{var r=n(9833),i=0;t.exports=function(t){var e=++i;return r(t)+e}},2628:(t,e,n)=>{var r=n(7415),i=n(3674);t.exports=function(t){return null==t?[]:r(t,i(t))}},7287:(t,e,n)=>{var r=n(4865),i=n(1757);t.exports=function(t,e){return i(t||[],e||[],r)}},9234:()=>{},1748:(t,e,n)=>{var r={"./locale":9234,"./locale.js":9234};function i(t){var e=a(t);return n(e)}function a(t){if(!n.o(r,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return r[t]}i.keys=function(){return Object.keys(r)},i.resolve=a,t.exports=i,i.id=1748},1941:function(t,e,n){(t=n.nmd(t)).exports=function(){var e,r;function i(){return e.apply(null,arguments)}function a(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){return void 0===t}function c(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function l(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function u(t,e){var n,r=[];for(n=0;n<t.length;++n)r.push(e(t[n],n));return r}function h(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function d(t,e){for(var n in e)h(e,n)&&(t[n]=e[n]);return h(e,"toString")&&(t.toString=e.toString),h(e,"valueOf")&&(t.valueOf=e.valueOf),t}function f(t,e,n,r){return ve(t,e,n,r,!0).utc()}function p(t){return null==t._pf&&(t._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),t._pf}function g(t){if(null==t._isValid){var e=p(t),n=r.call(e.parsedDateParts,(function(t){return null!=t})),i=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(i=i&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return i;t._isValid=i}return t._isValid}function y(t){var e=f(NaN);return null!=t?d(p(e),t):p(e).userInvalidated=!0,e}r=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,r=0;r<n;r++)if(r in e&&t.call(this,e[r],r,e))return!0;return!1};var m=i.momentProperties=[];function b(t,e){var n,r,i;if(s(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),s(e._i)||(t._i=e._i),s(e._f)||(t._f=e._f),s(e._l)||(t._l=e._l),s(e._strict)||(t._strict=e._strict),s(e._tzm)||(t._tzm=e._tzm),s(e._isUTC)||(t._isUTC=e._isUTC),s(e._offset)||(t._offset=e._offset),s(e._pf)||(t._pf=p(e)),s(e._locale)||(t._locale=e._locale),0<m.length)for(n=0;n<m.length;n++)s(i=e[r=m[n]])||(t[r]=i);return t}var v=!1;function _(t){b(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===v&&(v=!0,i.updateOffset(this),v=!1)}function x(t){return t instanceof _||null!=t&&null!=t._isAMomentObject}function k(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function w(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=k(e)),n}function E(t,e,n){var r,i=Math.min(t.length,e.length),a=Math.abs(t.length-e.length),o=0;for(r=0;r<i;r++)(n&&t[r]!==e[r]||!n&&w(t[r])!==w(e[r]))&&o++;return o+a}function T(t){!1===i.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function C(t,e){var n=!0;return d((function(){if(null!=i.deprecationHandler&&i.deprecationHandler(null,t),n){for(var r,a=[],o=0;o<arguments.length;o++){if(r="","object"==typeof arguments[o]){for(var s in r+="\n["+o+"] ",arguments[0])r+=s+": "+arguments[0][s]+", ";r=r.slice(0,-2)}else r=arguments[o];a.push(r)}T(t+"\nArguments: "+Array.prototype.slice.call(a).join("")+"\n"+(new Error).stack),n=!1}return e.apply(this,arguments)}),e)}var S,A={};function M(t,e){null!=i.deprecationHandler&&i.deprecationHandler(t,e),A[t]||(T(e),A[t]=!0)}function O(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function N(t,e){var n,r=d({},t);for(n in e)h(e,n)&&(o(t[n])&&o(e[n])?(r[n]={},d(r[n],t[n]),d(r[n],e[n])):null!=e[n]?r[n]=e[n]:delete r[n]);for(n in t)h(t,n)&&!h(e,n)&&o(t[n])&&(r[n]=d({},r[n]));return r}function D(t){null!=t&&this.set(t)}i.suppressDeprecationWarnings=!1,i.deprecationHandler=null,S=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)h(t,e)&&n.push(e);return n};var B={};function L(t,e){var n=t.toLowerCase();B[n]=B[n+"s"]=B[e]=t}function I(t){return"string"==typeof t?B[t]||B[t.toLowerCase()]:void 0}function F(t){var e,n,r={};for(n in t)h(t,n)&&(e=I(n))&&(r[e]=t[n]);return r}var R={};function P(t,e){R[t]=e}function j(t,e,n){var r=""+Math.abs(t),i=e-r.length;return(0<=t?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}var z=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Y=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,U={},$={};function W(t,e,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),t&&($[t]=i),e&&($[e[0]]=function(){return j(i.apply(this,arguments),e[1],e[2])}),n&&($[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),t)})}function q(t,e){return t.isValid()?(e=H(e,t.localeData()),U[e]=U[e]||function(t){var e,n,r,i=t.match(z);for(e=0,n=i.length;e<n;e++)$[i[e]]?i[e]=$[i[e]]:i[e]=(r=i[e]).match(/\[[\s\S]/)?r.replace(/^\[|\]$/g,""):r.replace(/\\/g,"");return function(e){var r,a="";for(r=0;r<n;r++)a+=O(i[r])?i[r].call(e,t):i[r];return a}}(e),U[e](t)):t.localeData().invalidDate()}function H(t,e){var n=5;function r(t){return e.longDateFormat(t)||t}for(Y.lastIndex=0;0<=n&&Y.test(t);)t=t.replace(Y,r),Y.lastIndex=0,n-=1;return t}var V=/\d/,G=/\d\d/,X=/\d{3}/,Z=/\d{4}/,Q=/[+-]?\d{6}/,K=/\d\d?/,J=/\d\d\d\d?/,tt=/\d\d\d\d\d\d?/,et=/\d{1,3}/,nt=/\d{1,4}/,rt=/[+-]?\d{1,6}/,it=/\d+/,at=/[+-]?\d+/,ot=/Z|[+-]\d\d:?\d\d/gi,st=/Z|[+-]\d\d(?::?\d\d)?/gi,ct=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,lt={};function ut(t,e,n){lt[t]=O(e)?e:function(t,r){return t&&n?n:e}}function ht(t,e){return h(lt,t)?lt[t](e._strict,e._locale):new RegExp(dt(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(t,e,n,r,i){return e||n||r||i}))))}function dt(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var ft={};function pt(t,e){var n,r=e;for("string"==typeof t&&(t=[t]),c(e)&&(r=function(t,n){n[e]=w(t)}),n=0;n<t.length;n++)ft[t[n]]=r}function gt(t,e){pt(t,(function(t,n,r,i){r._w=r._w||{},e(t,r._w,r,i)}))}function yt(t){return mt(t)?366:365}function mt(t){return t%4==0&&t%100!=0||t%400==0}W("Y",0,0,(function(){var t=this.year();return t<=9999?""+t:"+"+t})),W(0,["YY",2],0,(function(){return this.year()%100})),W(0,["YYYY",4],0,"year"),W(0,["YYYYY",5],0,"year"),W(0,["YYYYYY",6,!0],0,"year"),L("year","y"),P("year",1),ut("Y",at),ut("YY",K,G),ut("YYYY",nt,Z),ut("YYYYY",rt,Q),ut("YYYYYY",rt,Q),pt(["YYYYY","YYYYYY"],0),pt("YYYY",(function(t,e){e[0]=2===t.length?i.parseTwoDigitYear(t):w(t)})),pt("YY",(function(t,e){e[0]=i.parseTwoDigitYear(t)})),pt("Y",(function(t,e){e[0]=parseInt(t,10)})),i.parseTwoDigitYear=function(t){return w(t)+(68<w(t)?1900:2e3)};var bt,vt=_t("FullYear",!0);function _t(t,e){return function(n){return null!=n?(kt(this,t,n),i.updateOffset(this,e),this):xt(this,t)}}function xt(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function kt(t,e,n){t.isValid()&&!isNaN(n)&&("FullYear"===e&&mt(t.year())&&1===t.month()&&29===t.date()?t._d["set"+(t._isUTC?"UTC":"")+e](n,t.month(),wt(n,t.month())):t._d["set"+(t._isUTC?"UTC":"")+e](n))}function wt(t,e){if(isNaN(t)||isNaN(e))return NaN;var n=(e%12+12)%12;return t+=(e-n)/12,1===n?mt(t)?29:28:31-n%7%2}bt=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},W("M",["MM",2],"Mo",(function(){return this.month()+1})),W("MMM",0,0,(function(t){return this.localeData().monthsShort(this,t)})),W("MMMM",0,0,(function(t){return this.localeData().months(this,t)})),L("month","M"),P("month",8),ut("M",K),ut("MM",K,G),ut("MMM",(function(t,e){return e.monthsShortRegex(t)})),ut("MMMM",(function(t,e){return e.monthsRegex(t)})),pt(["M","MM"],(function(t,e){e[1]=w(t)-1})),pt(["MMM","MMMM"],(function(t,e,n,r){var i=n._locale.monthsParse(t,r,n._strict);null!=i?e[1]=i:p(n).invalidMonth=t}));var Et=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Tt="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Ct="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function St(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=w(e);else if(!c(e=t.localeData().monthsParse(e)))return t;return n=Math.min(t.date(),wt(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function At(t){return null!=t?(St(this,t),i.updateOffset(this,!0),this):xt(this,"Month")}var Mt=ct,Ot=ct;function Nt(){function t(t,e){return e.length-t.length}var e,n,r=[],i=[],a=[];for(e=0;e<12;e++)n=f([2e3,e]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),a.push(this.months(n,"")),a.push(this.monthsShort(n,""));for(r.sort(t),i.sort(t),a.sort(t),e=0;e<12;e++)r[e]=dt(r[e]),i[e]=dt(i[e]);for(e=0;e<24;e++)a[e]=dt(a[e]);this._monthsRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Dt(t){var e;if(t<100&&0<=t){var n=Array.prototype.slice.call(arguments);n[0]=t+400,e=new Date(Date.UTC.apply(null,n)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t)}else e=new Date(Date.UTC.apply(null,arguments));return e}function Bt(t,e,n){var r=7+e-n;return-(7+Dt(t,0,r).getUTCDay()-e)%7+r-1}function Lt(t,e,n,r,i){var a,o,s=1+7*(e-1)+(7+n-r)%7+Bt(t,r,i);return o=s<=0?yt(a=t-1)+s:s>yt(t)?(a=t+1,s-yt(t)):(a=t,s),{year:a,dayOfYear:o}}function It(t,e,n){var r,i,a=Bt(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?r=o+Ft(i=t.year()-1,e,n):o>Ft(t.year(),e,n)?(r=o-Ft(t.year(),e,n),i=t.year()+1):(i=t.year(),r=o),{week:r,year:i}}function Ft(t,e,n){var r=Bt(t,e,n),i=Bt(t+1,e,n);return(yt(t)-r+i)/7}function Rt(t,e){return t.slice(e,7).concat(t.slice(0,e))}W("w",["ww",2],"wo","week"),W("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),P("week",5),P("isoWeek",5),ut("w",K),ut("ww",K,G),ut("W",K),ut("WW",K,G),gt(["w","ww","W","WW"],(function(t,e,n,r){e[r.substr(0,1)]=w(t)})),W("d",0,"do","day"),W("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),W("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),W("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),W("e",0,0,"weekday"),W("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),P("day",11),P("weekday",11),P("isoWeekday",11),ut("d",K),ut("e",K),ut("E",K),ut("dd",(function(t,e){return e.weekdaysMinRegex(t)})),ut("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),ut("dddd",(function(t,e){return e.weekdaysRegex(t)})),gt(["dd","ddd","dddd"],(function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:p(n).invalidWeekday=t})),gt(["d","e","E"],(function(t,e,n,r){e[r]=w(t)}));var Pt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),jt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),zt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Yt=ct,Ut=ct,$t=ct;function Wt(){function t(t,e){return e.length-t.length}var e,n,r,i,a,o=[],s=[],c=[],l=[];for(e=0;e<7;e++)n=f([2e3,1]).day(e),r=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),a=this.weekdays(n,""),o.push(r),s.push(i),c.push(a),l.push(r),l.push(i),l.push(a);for(o.sort(t),s.sort(t),c.sort(t),l.sort(t),e=0;e<7;e++)s[e]=dt(s[e]),c[e]=dt(c[e]),l[e]=dt(l[e]);this._weekdaysRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function qt(){return this.hours()%12||12}function Ht(t,e){W(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Vt(t,e){return e._meridiemParse}W("H",["HH",2],0,"hour"),W("h",["hh",2],0,qt),W("k",["kk",2],0,(function(){return this.hours()||24})),W("hmm",0,0,(function(){return""+qt.apply(this)+j(this.minutes(),2)})),W("hmmss",0,0,(function(){return""+qt.apply(this)+j(this.minutes(),2)+j(this.seconds(),2)})),W("Hmm",0,0,(function(){return""+this.hours()+j(this.minutes(),2)})),W("Hmmss",0,0,(function(){return""+this.hours()+j(this.minutes(),2)+j(this.seconds(),2)})),Ht("a",!0),Ht("A",!1),L("hour","h"),P("hour",13),ut("a",Vt),ut("A",Vt),ut("H",K),ut("h",K),ut("k",K),ut("HH",K,G),ut("hh",K,G),ut("kk",K,G),ut("hmm",J),ut("hmmss",tt),ut("Hmm",J),ut("Hmmss",tt),pt(["H","HH"],3),pt(["k","kk"],(function(t,e,n){var r=w(t);e[3]=24===r?0:r})),pt(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),pt(["h","hh"],(function(t,e,n){e[3]=w(t),p(n).bigHour=!0})),pt("hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r)),p(n).bigHour=!0})),pt("hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i)),p(n).bigHour=!0})),pt("Hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r))})),pt("Hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i))}));var Gt,Xt=_t("Hours",!0),Zt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Tt,monthsShort:Ct,week:{dow:0,doy:6},weekdays:Pt,weekdaysMin:zt,weekdaysShort:jt,meridiemParse:/[ap]\.?m?\.?/i},Qt={},Kt={};function Jt(t){return t?t.toLowerCase().replace("_","-"):t}function te(e){var r=null;if(!Qt[e]&&t&&t.exports)try{r=Gt._abbr,n(1748)("./"+e),ee(r)}catch(e){}return Qt[e]}function ee(t,e){var n;return t&&((n=s(e)?re(t):ne(t,e))?Gt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),Gt._abbr}function ne(t,e){if(null===e)return delete Qt[t],null;var n,r=Zt;if(e.abbr=t,null!=Qt[t])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=Qt[t]._config;else if(null!=e.parentLocale)if(null!=Qt[e.parentLocale])r=Qt[e.parentLocale]._config;else{if(null==(n=te(e.parentLocale)))return Kt[e.parentLocale]||(Kt[e.parentLocale]=[]),Kt[e.parentLocale].push({name:t,config:e}),null;r=n._config}return Qt[t]=new D(N(r,e)),Kt[t]&&Kt[t].forEach((function(t){ne(t.name,t.config)})),ee(t),Qt[t]}function re(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Gt;if(!a(t)){if(e=te(t))return e;t=[t]}return function(t){for(var e,n,r,i,a=0;a<t.length;){for(e=(i=Jt(t[a]).split("-")).length,n=(n=Jt(t[a+1]))?n.split("-"):null;0<e;){if(r=te(i.slice(0,e).join("-")))return r;if(n&&n.length>=e&&E(i,n,!0)>=e-1)break;e--}a++}return Gt}(t)}function ie(t){var e,n=t._a;return n&&-2===p(t).overflow&&(e=n[1]<0||11<n[1]?1:n[2]<1||n[2]>wt(n[0],n[1])?2:n[3]<0||24<n[3]||24===n[3]&&(0!==n[4]||0!==n[5]||0!==n[6])?3:n[4]<0||59<n[4]?4:n[5]<0||59<n[5]?5:n[6]<0||999<n[6]?6:-1,p(t)._overflowDayOfYear&&(e<0||2<e)&&(e=2),p(t)._overflowWeeks&&-1===e&&(e=7),p(t)._overflowWeekday&&-1===e&&(e=8),p(t).overflow=e),t}function ae(t,e,n){return null!=t?t:null!=e?e:n}function oe(t){var e,n,r,a,o,s=[];if(!t._d){var c,l;for(c=t,l=new Date(i.now()),r=c._useUTC?[l.getUTCFullYear(),l.getUTCMonth(),l.getUTCDate()]:[l.getFullYear(),l.getMonth(),l.getDate()],t._w&&null==t._a[2]&&null==t._a[1]&&function(t){var e,n,r,i,a,o,s,c;if(null!=(e=t._w).GG||null!=e.W||null!=e.E)a=1,o=4,n=ae(e.GG,t._a[0],It(_e(),1,4).year),r=ae(e.W,1),((i=ae(e.E,1))<1||7<i)&&(c=!0);else{a=t._locale._week.dow,o=t._locale._week.doy;var l=It(_e(),a,o);n=ae(e.gg,t._a[0],l.year),r=ae(e.w,l.week),null!=e.d?((i=e.d)<0||6<i)&&(c=!0):null!=e.e?(i=e.e+a,(e.e<0||6<e.e)&&(c=!0)):i=a}r<1||r>Ft(n,a,o)?p(t)._overflowWeeks=!0:null!=c?p(t)._overflowWeekday=!0:(s=Lt(n,r,i,a,o),t._a[0]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=ae(t._a[0],r[0]),(t._dayOfYear>yt(o)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),n=Dt(o,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=r[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Dt:function(t,e,n,r,i,a,o){var s;return t<100&&0<=t?(s=new Date(t+400,e,n,r,i,a,o),isFinite(s.getFullYear())&&s.setFullYear(t)):s=new Date(t,e,n,r,i,a,o),s}).apply(null,s),a=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==a&&(p(t).weekdayMismatch=!0)}}var se=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ce=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,le=/Z|[+-]\d\d(?::?\d\d)?/,ue=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],he=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],de=/^\/?Date\((\-?\d+)/i;function fe(t){var e,n,r,i,a,o,s=t._i,c=se.exec(s)||ce.exec(s);if(c){for(p(t).iso=!0,e=0,n=ue.length;e<n;e++)if(ue[e][1].exec(c[1])){i=ue[e][0],r=!1!==ue[e][2];break}if(null==i)return void(t._isValid=!1);if(c[3]){for(e=0,n=he.length;e<n;e++)if(he[e][1].exec(c[3])){a=(c[2]||" ")+he[e][0];break}if(null==a)return void(t._isValid=!1)}if(!r&&null!=a)return void(t._isValid=!1);if(c[4]){if(!le.exec(c[4]))return void(t._isValid=!1);o="Z"}t._f=i+(a||"")+(o||""),me(t)}else t._isValid=!1}var pe=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,ge={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function ye(t){var e,n,r,i=pe.exec(t._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(i){var a=function(t,e,n,r,i,a){var o=[function(t){var e=parseInt(t,10);return e<=49?2e3+e:e<=999?1900+e:e}(t),Ct.indexOf(e),parseInt(n,10),parseInt(r,10),parseInt(i,10)];return a&&o.push(parseInt(a,10)),o}(i[4],i[3],i[2],i[5],i[6],i[7]);if(n=a,r=t,(e=i[1])&&jt.indexOf(e)!==new Date(n[0],n[1],n[2]).getDay()&&(p(r).weekdayMismatch=!0,!(r._isValid=!1)))return;t._a=a,t._tzm=function(t,e,n){if(t)return ge[t];if(e)return 0;var r=parseInt(n,10),i=r%100;return(r-i)/100*60+i}(i[8],i[9],i[10]),t._d=Dt.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),p(t).rfc2822=!0}else t._isValid=!1}function me(t){if(t._f!==i.ISO_8601)if(t._f!==i.RFC_2822){t._a=[],p(t).empty=!0;var e,n,r,a,o,s,c,l,u=""+t._i,d=u.length,f=0;for(r=H(t._f,t._locale).match(z)||[],e=0;e<r.length;e++)a=r[e],(n=(u.match(ht(a,t))||[])[0])&&(0<(o=u.substr(0,u.indexOf(n))).length&&p(t).unusedInput.push(o),u=u.slice(u.indexOf(n)+n.length),f+=n.length),$[a]?(n?p(t).empty=!1:p(t).unusedTokens.push(a),s=a,l=t,null!=(c=n)&&h(ft,s)&&ft[s](c,l._a,l,s)):t._strict&&!n&&p(t).unusedTokens.push(a);p(t).charsLeftOver=d-f,0<u.length&&p(t).unusedInput.push(u),t._a[3]<=12&&!0===p(t).bigHour&&0<t._a[3]&&(p(t).bigHour=void 0),p(t).parsedDateParts=t._a.slice(0),p(t).meridiem=t._meridiem,t._a[3]=function(t,e,n){var r;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):(null!=t.isPM&&((r=t.isPM(n))&&e<12&&(e+=12),r||12!==e||(e=0)),e)}(t._locale,t._a[3],t._meridiem),oe(t),ie(t)}else ye(t);else fe(t)}function be(t){var e,n,r,h,f=t._i,m=t._f;return t._locale=t._locale||re(t._l),null===f||void 0===m&&""===f?y({nullInput:!0}):("string"==typeof f&&(t._i=f=t._locale.preparse(f)),x(f)?new _(ie(f)):(l(f)?t._d=f:a(m)?function(t){var e,n,r,i,a;if(0===t._f.length)return p(t).invalidFormat=!0,t._d=new Date(NaN);for(i=0;i<t._f.length;i++)a=0,e=b({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[i],me(e),g(e)&&(a+=p(e).charsLeftOver,a+=10*p(e).unusedTokens.length,p(e).score=a,(null==r||a<r)&&(r=a,n=e));d(t,n||e)}(t):m?me(t):s(n=(e=t)._i)?e._d=new Date(i.now()):l(n)?e._d=new Date(n.valueOf()):"string"==typeof n?(r=e,null===(h=de.exec(r._i))?(fe(r),!1===r._isValid&&(delete r._isValid,ye(r),!1===r._isValid&&(delete r._isValid,i.createFromInputFallback(r)))):r._d=new Date(+h[1])):a(n)?(e._a=u(n.slice(0),(function(t){return parseInt(t,10)})),oe(e)):o(n)?function(t){if(!t._d){var e=F(t._i);t._a=u([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],(function(t){return t&&parseInt(t,10)})),oe(t)}}(e):c(n)?e._d=new Date(n):i.createFromInputFallback(e),g(t)||(t._d=null),t))}function ve(t,e,n,r,i){var s,c={};return!0!==n&&!1!==n||(r=n,n=void 0),(o(t)&&function(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}(t)||a(t)&&0===t.length)&&(t=void 0),c._isAMomentObject=!0,c._useUTC=c._isUTC=i,c._l=n,c._i=t,c._f=e,c._strict=r,(s=new _(ie(be(c))))._nextDay&&(s.add(1,"d"),s._nextDay=void 0),s}function _e(t,e,n,r){return ve(t,e,n,r,!1)}i.createFromInputFallback=C("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))})),i.ISO_8601=function(){},i.RFC_2822=function(){};var xe=C("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=_e.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:y()})),ke=C("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=_e.apply(null,arguments);return this.isValid()&&t.isValid()?this<t?this:t:y()}));function we(t,e){var n,r;if(1===e.length&&a(e[0])&&(e=e[0]),!e.length)return _e();for(n=e[0],r=1;r<e.length;++r)e[r].isValid()&&!e[r][t](n)||(n=e[r]);return n}var Ee=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Te(t){var e=F(t),n=e.year||0,r=e.quarter||0,i=e.month||0,a=e.week||e.isoWeek||0,o=e.day||0,s=e.hour||0,c=e.minute||0,l=e.second||0,u=e.millisecond||0;this._isValid=function(t){for(var e in t)if(-1===bt.call(Ee,e)||null!=t[e]&&isNaN(t[e]))return!1;for(var n=!1,r=0;r<Ee.length;++r)if(t[Ee[r]]){if(n)return!1;parseFloat(t[Ee[r]])!==w(t[Ee[r]])&&(n=!0)}return!0}(e),this._milliseconds=+u+1e3*l+6e4*c+1e3*s*60*60,this._days=+o+7*a,this._months=+i+3*r+12*n,this._data={},this._locale=re(),this._bubble()}function Ce(t){return t instanceof Te}function Se(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ae(t,e){W(t,0,0,(function(){var t=this.utcOffset(),n="+";return t<0&&(t=-t,n="-"),n+j(~~(t/60),2)+e+j(~~t%60,2)}))}Ae("Z",":"),Ae("ZZ",""),ut("Z",st),ut("ZZ",st),pt(["Z","ZZ"],(function(t,e,n){n._useUTC=!0,n._tzm=Oe(st,t)}));var Me=/([\+\-]|\d\d)/gi;function Oe(t,e){var n=(e||"").match(t);if(null===n)return null;var r=((n[n.length-1]||[])+"").match(Me)||["-",0,0],i=60*r[1]+w(r[2]);return 0===i?0:"+"===r[0]?i:-i}function Ne(t,e){var n,r;return e._isUTC?(n=e.clone(),r=(x(t)||l(t)?t.valueOf():_e(t).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+r),i.updateOffset(n,!1),n):_e(t).local()}function De(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function Be(){return!!this.isValid()&&this._isUTC&&0===this._offset}i.updateOffset=function(){};var Le=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Ie=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Fe(t,e){var n,r,i,a=t,o=null;return Ce(t)?a={ms:t._milliseconds,d:t._days,M:t._months}:c(t)?(a={},e?a[e]=t:a.milliseconds=t):(o=Le.exec(t))?(n="-"===o[1]?-1:1,a={y:0,d:w(o[2])*n,h:w(o[3])*n,m:w(o[4])*n,s:w(o[5])*n,ms:w(Se(1e3*o[6]))*n}):(o=Ie.exec(t))?(n="-"===o[1]?-1:1,a={y:Re(o[2],n),M:Re(o[3],n),w:Re(o[4],n),d:Re(o[5],n),h:Re(o[6],n),m:Re(o[7],n),s:Re(o[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(i=function(t,e){var n;return t.isValid()&&e.isValid()?(e=Ne(e,t),t.isBefore(e)?n=Pe(t,e):((n=Pe(e,t)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}(_e(a.from),_e(a.to)),(a={}).ms=i.milliseconds,a.M=i.months),r=new Te(a),Ce(t)&&h(t,"_locale")&&(r._locale=t._locale),r}function Re(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function Pe(t,e){var n={};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function je(t,e){return function(n,r){var i;return null===r||isNaN(+r)||(M(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),i=n,n=r,r=i),ze(this,Fe(n="string"==typeof n?+n:n,r),t),this}}function ze(t,e,n,r){var a=e._milliseconds,o=Se(e._days),s=Se(e._months);t.isValid()&&(r=null==r||r,s&&St(t,xt(t,"Month")+s*n),o&&kt(t,"Date",xt(t,"Date")+o*n),a&&t._d.setTime(t._d.valueOf()+a*n),r&&i.updateOffset(t,o||s))}Fe.fn=Te.prototype,Fe.invalid=function(){return Fe(NaN)};var Ye=je(1,"add"),Ue=je(-1,"subtract");function $e(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,"months");return-(n+(e-r<0?(e-r)/(r-t.clone().add(n-1,"months")):(e-r)/(t.clone().add(n+1,"months")-r)))||0}function We(t){var e;return void 0===t?this._locale._abbr:(null!=(e=re(t))&&(this._locale=e),this)}i.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",i.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var qe=C("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(t){return void 0===t?this.localeData():this.locale(t)}));function He(){return this._locale}var Ve=126227808e5;function Ge(t,e){return(t%e+e)%e}function Xe(t,e,n){return t<100&&0<=t?new Date(t+400,e,n)-Ve:new Date(t,e,n).valueOf()}function Ze(t,e,n){return t<100&&0<=t?Date.UTC(t+400,e,n)-Ve:Date.UTC(t,e,n)}function Qe(t,e){W(0,[t,t.length],0,e)}function Ke(t,e,n,r,i){var a;return null==t?It(this,r,i).year:((a=Ft(t,r,i))<e&&(e=a),function(t,e,n,r,i){var a=Lt(t,e,n,r,i),o=Dt(a.year,0,a.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}.call(this,t,e,n,r,i))}W(0,["gg",2],0,(function(){return this.weekYear()%100})),W(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Qe("gggg","weekYear"),Qe("ggggg","weekYear"),Qe("GGGG","isoWeekYear"),Qe("GGGGG","isoWeekYear"),L("weekYear","gg"),L("isoWeekYear","GG"),P("weekYear",1),P("isoWeekYear",1),ut("G",at),ut("g",at),ut("GG",K,G),ut("gg",K,G),ut("GGGG",nt,Z),ut("gggg",nt,Z),ut("GGGGG",rt,Q),ut("ggggg",rt,Q),gt(["gggg","ggggg","GGGG","GGGGG"],(function(t,e,n,r){e[r.substr(0,2)]=w(t)})),gt(["gg","GG"],(function(t,e,n,r){e[r]=i.parseTwoDigitYear(t)})),W("Q",0,"Qo","quarter"),L("quarter","Q"),P("quarter",7),ut("Q",V),pt("Q",(function(t,e){e[1]=3*(w(t)-1)})),W("D",["DD",2],"Do","date"),L("date","D"),P("date",9),ut("D",K),ut("DD",K,G),ut("Do",(function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient})),pt(["D","DD"],2),pt("Do",(function(t,e){e[2]=w(t.match(K)[0])}));var Je=_t("Date",!0);W("DDD",["DDDD",3],"DDDo","dayOfYear"),L("dayOfYear","DDD"),P("dayOfYear",4),ut("DDD",et),ut("DDDD",X),pt(["DDD","DDDD"],(function(t,e,n){n._dayOfYear=w(t)})),W("m",["mm",2],0,"minute"),L("minute","m"),P("minute",14),ut("m",K),ut("mm",K,G),pt(["m","mm"],4);var tn=_t("Minutes",!1);W("s",["ss",2],0,"second"),L("second","s"),P("second",15),ut("s",K),ut("ss",K,G),pt(["s","ss"],5);var en,nn=_t("Seconds",!1);for(W("S",0,0,(function(){return~~(this.millisecond()/100)})),W(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),W(0,["SSS",3],0,"millisecond"),W(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),W(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),W(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),W(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),W(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),W(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),L("millisecond","ms"),P("millisecond",16),ut("S",et,V),ut("SS",et,G),ut("SSS",et,X),en="SSSS";en.length<=9;en+="S")ut(en,it);function rn(t,e){e[6]=w(1e3*("0."+t))}for(en="S";en.length<=9;en+="S")pt(en,rn);var an=_t("Milliseconds",!1);W("z",0,0,"zoneAbbr"),W("zz",0,0,"zoneName");var on=_.prototype;function sn(t){return t}on.add=Ye,on.calendar=function(t,e){var n=t||_e(),r=Ne(n,this).startOf("day"),a=i.calendarFormat(this,r)||"sameElse",o=e&&(O(e[a])?e[a].call(this,n):e[a]);return this.format(o||this.localeData().calendar(a,this,_e(n)))},on.clone=function(){return new _(this)},on.diff=function(t,e,n){var r,i,a;if(!this.isValid())return NaN;if(!(r=Ne(t,this)).isValid())return NaN;switch(i=6e4*(r.utcOffset()-this.utcOffset()),e=I(e)){case"year":a=$e(this,r)/12;break;case"month":a=$e(this,r);break;case"quarter":a=$e(this,r)/3;break;case"second":a=(this-r)/1e3;break;case"minute":a=(this-r)/6e4;break;case"hour":a=(this-r)/36e5;break;case"day":a=(this-r-i)/864e5;break;case"week":a=(this-r-i)/6048e5;break;default:a=this-r}return n?a:k(a)},on.endOf=function(t){var e;if(void 0===(t=I(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?Ze:Xe;switch(t){case"year":e=n(this.year()+1,0,1)-1;break;case"quarter":e=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":e=n(this.year(),this.month()+1,1)-1;break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":e=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":e=this._d.valueOf(),e+=36e5-Ge(e+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":e=this._d.valueOf(),e+=6e4-Ge(e,6e4)-1;break;case"second":e=this._d.valueOf(),e+=1e3-Ge(e,1e3)-1}return this._d.setTime(e),i.updateOffset(this,!0),this},on.format=function(t){t||(t=this.isUtc()?i.defaultFormatUtc:i.defaultFormat);var e=q(this,t);return this.localeData().postformat(e)},on.from=function(t,e){return this.isValid()&&(x(t)&&t.isValid()||_e(t).isValid())?Fe({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},on.fromNow=function(t){return this.from(_e(),t)},on.to=function(t,e){return this.isValid()&&(x(t)&&t.isValid()||_e(t).isValid())?Fe({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},on.toNow=function(t){return this.to(_e(),t)},on.get=function(t){return O(this[t=I(t)])?this[t]():this},on.invalidAt=function(){return p(this).overflow},on.isAfter=function(t,e){var n=x(t)?t:_e(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=I(e)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())},on.isBefore=function(t,e){var n=x(t)?t:_e(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=I(e)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())},on.isBetween=function(t,e,n,r){var i=x(t)?t:_e(t),a=x(e)?e:_e(e);return!!(this.isValid()&&i.isValid()&&a.isValid())&&("("===(r=r||"()")[0]?this.isAfter(i,n):!this.isBefore(i,n))&&(")"===r[1]?this.isBefore(a,n):!this.isAfter(a,n))},on.isSame=function(t,e){var n,r=x(t)?t:_e(t);return!(!this.isValid()||!r.isValid())&&("millisecond"===(e=I(e)||"millisecond")?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))},on.isSameOrAfter=function(t,e){return this.isSame(t,e)||this.isAfter(t,e)},on.isSameOrBefore=function(t,e){return this.isSame(t,e)||this.isBefore(t,e)},on.isValid=function(){return g(this)},on.lang=qe,on.locale=We,on.localeData=He,on.max=ke,on.min=xe,on.parsingFlags=function(){return d({},p(this))},on.set=function(t,e){if("object"==typeof t)for(var n=function(t){var e=[];for(var n in t)e.push({unit:n,priority:R[n]});return e.sort((function(t,e){return t.priority-e.priority})),e}(t=F(t)),r=0;r<n.length;r++)this[n[r].unit](t[n[r].unit]);else if(O(this[t=I(t)]))return this[t](e);return this},on.startOf=function(t){var e;if(void 0===(t=I(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?Ze:Xe;switch(t){case"year":e=n(this.year(),0,1);break;case"quarter":e=n(this.year(),this.month()-this.month()%3,1);break;case"month":e=n(this.year(),this.month(),1);break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":e=n(this.year(),this.month(),this.date());break;case"hour":e=this._d.valueOf(),e-=Ge(e+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":e=this._d.valueOf(),e-=Ge(e,6e4);break;case"second":e=this._d.valueOf(),e-=Ge(e,1e3)}return this._d.setTime(e),i.updateOffset(this,!0),this},on.subtract=Ue,on.toArray=function(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]},on.toObject=function(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}},on.toDate=function(){return new Date(this.valueOf())},on.toISOString=function(t){if(!this.isValid())return null;var e=!0!==t,n=e?this.clone().utc():this;return n.year()<0||9999<n.year()?q(n,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):O(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",q(n,"Z")):q(n,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},on.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',r=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i=e+'[")]';return this.format(n+r+"-MM-DD[T]HH:mm:ss.SSS"+i)},on.toJSON=function(){return this.isValid()?this.toISOString():null},on.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},on.unix=function(){return Math.floor(this.valueOf()/1e3)},on.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},on.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},on.year=vt,on.isLeapYear=function(){return mt(this.year())},on.weekYear=function(t){return Ke.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},on.isoWeekYear=function(t){return Ke.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)},on.quarter=on.quarters=function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},on.month=At,on.daysInMonth=function(){return wt(this.year(),this.month())},on.week=on.weeks=function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},on.isoWeek=on.isoWeeks=function(t){var e=It(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},on.weeksInYear=function(){var t=this.localeData()._week;return Ft(this.year(),t.dow,t.doy)},on.isoWeeksInYear=function(){return Ft(this.year(),1,4)},on.date=Je,on.day=on.days=function(t){if(!this.isValid())return null!=t?this:NaN;var e,n,r=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(e=t,n=this.localeData(),t="string"!=typeof e?e:isNaN(e)?"number"==typeof(e=n.weekdaysParse(e))?e:null:parseInt(e,10),this.add(t-r,"d")):r},on.weekday=function(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},on.isoWeekday=function(t){if(!this.isValid())return null!=t?this:NaN;if(null==t)return this.day()||7;var e,n,r=(e=t,n=this.localeData(),"string"==typeof e?n.weekdaysParse(e)%7||7:isNaN(e)?null:e);return this.day(this.day()%7?r:r-7)},on.dayOfYear=function(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},on.hour=on.hours=Xt,on.minute=on.minutes=tn,on.second=on.seconds=nn,on.millisecond=on.milliseconds=an,on.utcOffset=function(t,e,n){var r,a=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null==t)return this._isUTC?a:De(this);if("string"==typeof t){if(null===(t=Oe(st,t)))return this}else Math.abs(t)<16&&!n&&(t*=60);return!this._isUTC&&e&&(r=De(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),a!==t&&(!e||this._changeInProgress?ze(this,Fe(t-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,i.updateOffset(this,!0),this._changeInProgress=null)),this},on.utc=function(t){return this.utcOffset(0,t)},on.local=function(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(De(this),"m")),this},on.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=Oe(ot,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this},on.hasAlignedHourOffset=function(t){return!!this.isValid()&&(t=t?_e(t).utcOffset():0,(this.utcOffset()-t)%60==0)},on.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},on.isLocal=function(){return!!this.isValid()&&!this._isUTC},on.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},on.isUtc=Be,on.isUTC=Be,on.zoneAbbr=function(){return this._isUTC?"UTC":""},on.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},on.dates=C("dates accessor is deprecated. Use date instead.",Je),on.months=C("months accessor is deprecated. Use month instead",At),on.years=C("years accessor is deprecated. Use year instead",vt),on.zone=C("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),on.isDSTShifted=C("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(b(t,this),(t=be(t))._a){var e=t._isUTC?f(t._a):_e(t._a);this._isDSTShifted=this.isValid()&&0<E(t._a,e.toArray())}else this._isDSTShifted=!1;return this._isDSTShifted}));var cn=D.prototype;function ln(t,e,n,r){var i=re(),a=f().set(r,e);return i[n](a,t)}function un(t,e,n){if(c(t)&&(e=t,t=void 0),t=t||"",null!=e)return ln(t,e,n,"month");var r,i=[];for(r=0;r<12;r++)i[r]=ln(t,r,n,"month");return i}function hn(t,e,n,r){"boolean"==typeof t?c(e)&&(n=e,e=void 0):(e=t,t=!1,c(n=e)&&(n=e,e=void 0)),e=e||"";var i,a=re(),o=t?a._week.dow:0;if(null!=n)return ln(e,(n+o)%7,r,"day");var s=[];for(i=0;i<7;i++)s[i]=ln(e,(i+o)%7,r,"day");return s}cn.calendar=function(t,e,n){var r=this._calendar[t]||this._calendar.sameElse;return O(r)?r.call(e,n):r},cn.longDateFormat=function(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,(function(t){return t.slice(1)})),this._longDateFormat[t])},cn.invalidDate=function(){return this._invalidDate},cn.ordinal=function(t){return this._ordinal.replace("%d",t)},cn.preparse=sn,cn.postformat=sn,cn.relativeTime=function(t,e,n,r){var i=this._relativeTime[n];return O(i)?i(t,e,n,r):i.replace(/%d/i,t)},cn.pastFuture=function(t,e){var n=this._relativeTime[0<t?"future":"past"];return O(n)?n(e):n.replace(/%s/i,e)},cn.set=function(t){var e,n;for(n in t)O(e=t[n])?this[n]=e:this["_"+n]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},cn.months=function(t,e){return t?a(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||Et).test(e)?"format":"standalone"][t.month()]:a(this._months)?this._months:this._months.standalone},cn.monthsShort=function(t,e){return t?a(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[Et.test(e)?"format":"standalone"][t.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},cn.monthsParse=function(t,e,n){var r,i,a;if(this._monthsParseExact)return function(t,e,n){var r,i,a,o=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)a=f([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(a,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(a,"").toLocaleLowerCase();return n?"MMM"===e?-1!==(i=bt.call(this._shortMonthsParse,o))?i:null:-1!==(i=bt.call(this._longMonthsParse,o))?i:null:"MMM"===e?-1!==(i=bt.call(this._shortMonthsParse,o))||-1!==(i=bt.call(this._longMonthsParse,o))?i:null:-1!==(i=bt.call(this._longMonthsParse,o))||-1!==(i=bt.call(this._shortMonthsParse,o))?i:null}.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(i=f([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(a="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(a.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[r].test(t))return r;if(n&&"MMM"===e&&this._shortMonthsParse[r].test(t))return r;if(!n&&this._monthsParse[r].test(t))return r}},cn.monthsRegex=function(t){return this._monthsParseExact?(h(this,"_monthsRegex")||Nt.call(this),t?this._monthsStrictRegex:this._monthsRegex):(h(this,"_monthsRegex")||(this._monthsRegex=Ot),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)},cn.monthsShortRegex=function(t){return this._monthsParseExact?(h(this,"_monthsRegex")||Nt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(h(this,"_monthsShortRegex")||(this._monthsShortRegex=Mt),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)},cn.week=function(t){return It(t,this._week.dow,this._week.doy).week},cn.firstDayOfYear=function(){return this._week.doy},cn.firstDayOfWeek=function(){return this._week.dow},cn.weekdays=function(t,e){var n=a(this._weekdays)?this._weekdays:this._weekdays[t&&!0!==t&&this._weekdays.isFormat.test(e)?"format":"standalone"];return!0===t?Rt(n,this._week.dow):t?n[t.day()]:n},cn.weekdaysMin=function(t){return!0===t?Rt(this._weekdaysMin,this._week.dow):t?this._weekdaysMin[t.day()]:this._weekdaysMin},cn.weekdaysShort=function(t){return!0===t?Rt(this._weekdaysShort,this._week.dow):t?this._weekdaysShort[t.day()]:this._weekdaysShort},cn.weekdaysParse=function(t,e,n){var r,i,a;if(this._weekdaysParseExact)return function(t,e,n){var r,i,a,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)a=f([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(a,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(a,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(a,"").toLocaleLowerCase();return n?"dddd"===e?-1!==(i=bt.call(this._weekdaysParse,o))?i:null:"ddd"===e?-1!==(i=bt.call(this._shortWeekdaysParse,o))?i:null:-1!==(i=bt.call(this._minWeekdaysParse,o))?i:null:"dddd"===e?-1!==(i=bt.call(this._weekdaysParse,o))||-1!==(i=bt.call(this._shortWeekdaysParse,o))||-1!==(i=bt.call(this._minWeekdaysParse,o))?i:null:"ddd"===e?-1!==(i=bt.call(this._shortWeekdaysParse,o))||-1!==(i=bt.call(this._weekdaysParse,o))||-1!==(i=bt.call(this._minWeekdaysParse,o))?i:null:-1!==(i=bt.call(this._minWeekdaysParse,o))||-1!==(i=bt.call(this._weekdaysParse,o))||-1!==(i=bt.call(this._shortWeekdaysParse,o))?i:null}.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(i=f([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(a="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(a.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[r].test(t))return r;if(n&&"ddd"===e&&this._shortWeekdaysParse[r].test(t))return r;if(n&&"dd"===e&&this._minWeekdaysParse[r].test(t))return r;if(!n&&this._weekdaysParse[r].test(t))return r}},cn.weekdaysRegex=function(t){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(h(this,"_weekdaysRegex")||(this._weekdaysRegex=Yt),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)},cn.weekdaysShortRegex=function(t){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(h(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ut),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},cn.weekdaysMinRegex=function(t){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(h(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=$t),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},cn.isPM=function(t){return"p"===(t+"").toLowerCase().charAt(0)},cn.meridiem=function(t,e,n){return 11<t?n?"pm":"PM":n?"am":"AM"},ee("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===w(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),i.lang=C("moment.lang is deprecated. Use moment.locale instead.",ee),i.langData=C("moment.langData is deprecated. Use moment.localeData instead.",re);var dn=Math.abs;function fn(t,e,n,r){var i=Fe(e,n);return t._milliseconds+=r*i._milliseconds,t._days+=r*i._days,t._months+=r*i._months,t._bubble()}function pn(t){return t<0?Math.floor(t):Math.ceil(t)}function gn(t){return 4800*t/146097}function yn(t){return 146097*t/4800}function mn(t){return function(){return this.as(t)}}var bn=mn("ms"),vn=mn("s"),_n=mn("m"),xn=mn("h"),kn=mn("d"),wn=mn("w"),En=mn("M"),Tn=mn("Q"),Cn=mn("y");function Sn(t){return function(){return this.isValid()?this._data[t]:NaN}}var An=Sn("milliseconds"),Mn=Sn("seconds"),On=Sn("minutes"),Nn=Sn("hours"),Dn=Sn("days"),Bn=Sn("months"),Ln=Sn("years"),In=Math.round,Fn={ss:44,s:45,m:45,h:22,d:26,M:11},Rn=Math.abs;function Pn(t){return(0<t)-(t<0)||+t}function jn(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n=Rn(this._milliseconds)/1e3,r=Rn(this._days),i=Rn(this._months);e=k((t=k(n/60))/60),n%=60,t%=60;var a=k(i/12),o=i%=12,s=r,c=e,l=t,u=n?n.toFixed(3).replace(/\.?0+$/,""):"",h=this.asSeconds();if(!h)return"P0D";var d=h<0?"-":"",f=Pn(this._months)!==Pn(h)?"-":"",p=Pn(this._days)!==Pn(h)?"-":"",g=Pn(this._milliseconds)!==Pn(h)?"-":"";return d+"P"+(a?f+a+"Y":"")+(o?f+o+"M":"")+(s?p+s+"D":"")+(c||l||u?"T":"")+(c?g+c+"H":"")+(l?g+l+"M":"")+(u?g+u+"S":"")}var zn=Te.prototype;return zn.isValid=function(){return this._isValid},zn.abs=function(){var t=this._data;return this._milliseconds=dn(this._milliseconds),this._days=dn(this._days),this._months=dn(this._months),t.milliseconds=dn(t.milliseconds),t.seconds=dn(t.seconds),t.minutes=dn(t.minutes),t.hours=dn(t.hours),t.months=dn(t.months),t.years=dn(t.years),this},zn.add=function(t,e){return fn(this,t,e,1)},zn.subtract=function(t,e){return fn(this,t,e,-1)},zn.as=function(t){if(!this.isValid())return NaN;var e,n,r=this._milliseconds;if("month"===(t=I(t))||"quarter"===t||"year"===t)switch(e=this._days+r/864e5,n=this._months+gn(e),t){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(e=this._days+Math.round(yn(this._months)),t){case"week":return e/7+r/6048e5;case"day":return e+r/864e5;case"hour":return 24*e+r/36e5;case"minute":return 1440*e+r/6e4;case"second":return 86400*e+r/1e3;case"millisecond":return Math.floor(864e5*e)+r;default:throw new Error("Unknown unit "+t)}},zn.asMilliseconds=bn,zn.asSeconds=vn,zn.asMinutes=_n,zn.asHours=xn,zn.asDays=kn,zn.asWeeks=wn,zn.asMonths=En,zn.asQuarters=Tn,zn.asYears=Cn,zn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*w(this._months/12):NaN},zn._bubble=function(){var t,e,n,r,i,a=this._milliseconds,o=this._days,s=this._months,c=this._data;return 0<=a&&0<=o&&0<=s||a<=0&&o<=0&&s<=0||(a+=864e5*pn(yn(s)+o),s=o=0),c.milliseconds=a%1e3,t=k(a/1e3),c.seconds=t%60,e=k(t/60),c.minutes=e%60,n=k(e/60),c.hours=n%24,s+=i=k(gn(o+=k(n/24))),o-=pn(yn(i)),r=k(s/12),s%=12,c.days=o,c.months=s,c.years=r,this},zn.clone=function(){return Fe(this)},zn.get=function(t){return t=I(t),this.isValid()?this[t+"s"]():NaN},zn.milliseconds=An,zn.seconds=Mn,zn.minutes=On,zn.hours=Nn,zn.days=Dn,zn.weeks=function(){return k(this.days()/7)},zn.months=Bn,zn.years=Ln,zn.humanize=function(t){if(!this.isValid())return this.localeData().invalidDate();var e,n,r,i,a,o,s,c,l,u,h=this.localeData(),d=(e=!t,n=h,r=Fe(this).abs(),i=In(r.as("s")),a=In(r.as("m")),o=In(r.as("h")),s=In(r.as("d")),c=In(r.as("M")),l=In(r.as("y")),(u=i<=Fn.ss&&["s",i]||i<Fn.s&&["ss",i]||a<=1&&["m"]||a<Fn.m&&["mm",a]||o<=1&&["h"]||o<Fn.h&&["hh",o]||s<=1&&["d"]||s<Fn.d&&["dd",s]||c<=1&&["M"]||c<Fn.M&&["MM",c]||l<=1&&["y"]||["yy",l])[2]=e,u[3]=0<+this,u[4]=n,function(t,e,n,r,i){return i.relativeTime(e||1,!!n,t,r)}.apply(null,u));return t&&(d=h.pastFuture(+this,d)),h.postformat(d)},zn.toISOString=jn,zn.toString=jn,zn.toJSON=jn,zn.locale=We,zn.localeData=He,zn.toIsoString=C("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",jn),zn.lang=qe,W("X",0,0,"unix"),W("x",0,0,"valueOf"),ut("x",at),ut("X",/[+-]?\d+(\.\d{1,3})?/),pt("X",(function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))})),pt("x",(function(t,e,n){n._d=new Date(w(t))})),i.version="2.24.0",e=_e,i.fn=on,i.min=function(){return we("isBefore",[].slice.call(arguments,0))},i.max=function(){return we("isAfter",[].slice.call(arguments,0))},i.now=function(){return Date.now?Date.now():+new Date},i.utc=f,i.unix=function(t){return _e(1e3*t)},i.months=function(t,e){return un(t,e,"months")},i.isDate=l,i.locale=ee,i.invalid=y,i.duration=Fe,i.isMoment=x,i.weekdays=function(t,e,n){return hn(t,e,n,"weekdays")},i.parseZone=function(){return _e.apply(null,arguments).parseZone()},i.localeData=re,i.isDuration=Ce,i.monthsShort=function(t,e){return un(t,e,"monthsShort")},i.weekdaysMin=function(t,e,n){return hn(t,e,n,"weekdaysMin")},i.defineLocale=ne,i.updateLocale=function(t,e){if(null!=e){var n,r,i=Zt;null!=(r=te(t))&&(i=r._config),(n=new D(e=N(i,e))).parentLocale=Qt[t],Qt[t]=n,ee(t)}else null!=Qt[t]&&(null!=Qt[t].parentLocale?Qt[t]=Qt[t].parentLocale:null!=Qt[t]&&delete Qt[t]);return Qt[t]},i.locales=function(){return S(Qt)},i.weekdaysShort=function(t,e,n){return hn(t,e,n,"weekdaysShort")},i.normalizeUnits=I,i.relativeTimeRounding=function(t){return void 0===t?In:"function"==typeof t&&(In=t,!0)},i.relativeTimeThreshold=function(t,e){return void 0!==Fn[t]&&(void 0===e?Fn[t]:(Fn[t]=e,"s"===t&&(Fn.ss=e-1),!0))},i.calendarFormat=function(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},i.prototype=on,i.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},i}()},6470:t=>{function e(t){if("string"!=typeof t)throw new TypeError("Path must be a string. Received "+JSON.stringify(t))}function n(t,e){for(var n,r="",i=0,a=-1,o=0,s=0;s<=t.length;++s){if(s<t.length)n=t.charCodeAt(s);else{if(47===n)break;n=47}if(47===n){if(a===s-1||1===o);else if(a!==s-1&&2===o){if(r.length<2||2!==i||46!==r.charCodeAt(r.length-1)||46!==r.charCodeAt(r.length-2))if(r.length>2){var c=r.lastIndexOf("/");if(c!==r.length-1){-1===c?(r="",i=0):i=(r=r.slice(0,c)).length-1-r.lastIndexOf("/"),a=s,o=0;continue}}else if(2===r.length||1===r.length){r="",i=0,a=s,o=0;continue}e&&(r.length>0?r+="/..":r="..",i=2)}else r.length>0?r+="/"+t.slice(a+1,s):r=t.slice(a+1,s),i=s-a-1;a=s,o=0}else 46===n&&-1!==o?++o:o=-1}return r}var r={resolve:function(){for(var t,r="",i=!1,a=arguments.length-1;a>=-1&&!i;a--){var o;a>=0?o=arguments[a]:(void 0===t&&(t=process.cwd()),o=t),e(o),0!==o.length&&(r=o+"/"+r,i=47===o.charCodeAt(0))}return r=n(r,!i),i?r.length>0?"/"+r:"/":r.length>0?r:"."},normalize:function(t){if(e(t),0===t.length)return".";var r=47===t.charCodeAt(0),i=47===t.charCodeAt(t.length-1);return 0!==(t=n(t,!r)).length||r||(t="."),t.length>0&&i&&(t+="/"),r?"/"+t:t},isAbsolute:function(t){return e(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var t,n=0;n<arguments.length;++n){var i=arguments[n];e(i),i.length>0&&(void 0===t?t=i:t+="/"+i)}return void 0===t?".":r.normalize(t)},relative:function(t,n){if(e(t),e(n),t===n)return"";if((t=r.resolve(t))===(n=r.resolve(n)))return"";for(var i=1;i<t.length&&47===t.charCodeAt(i);++i);for(var a=t.length,o=a-i,s=1;s<n.length&&47===n.charCodeAt(s);++s);for(var c=n.length-s,l=o<c?o:c,u=-1,h=0;h<=l;++h){if(h===l){if(c>l){if(47===n.charCodeAt(s+h))return n.slice(s+h+1);if(0===h)return n.slice(s+h)}else o>l&&(47===t.charCodeAt(i+h)?u=h:0===h&&(u=0));break}var d=t.charCodeAt(i+h);if(d!==n.charCodeAt(s+h))break;47===d&&(u=h)}var f="";for(h=i+u+1;h<=a;++h)h!==a&&47!==t.charCodeAt(h)||(0===f.length?f+="..":f+="/..");return f.length>0?f+n.slice(s+u):(s+=u,47===n.charCodeAt(s)&&++s,n.slice(s))},_makeLong:function(t){return t},dirname:function(t){if(e(t),0===t.length)return".";for(var n=t.charCodeAt(0),r=47===n,i=-1,a=!0,o=t.length-1;o>=1;--o)if(47===(n=t.charCodeAt(o))){if(!a){i=o;break}}else a=!1;return-1===i?r?"/":".":r&&1===i?"//":t.slice(0,i)},basename:function(t,n){if(void 0!==n&&"string"!=typeof n)throw new TypeError('"ext" argument must be a string');e(t);var r,i=0,a=-1,o=!0;if(void 0!==n&&n.length>0&&n.length<=t.length){if(n.length===t.length&&n===t)return"";var s=n.length-1,c=-1;for(r=t.length-1;r>=0;--r){var l=t.charCodeAt(r);if(47===l){if(!o){i=r+1;break}}else-1===c&&(o=!1,c=r+1),s>=0&&(l===n.charCodeAt(s)?-1==--s&&(a=r):(s=-1,a=c))}return i===a?a=c:-1===a&&(a=t.length),t.slice(i,a)}for(r=t.length-1;r>=0;--r)if(47===t.charCodeAt(r)){if(!o){i=r+1;break}}else-1===a&&(o=!1,a=r+1);return-1===a?"":t.slice(i,a)},extname:function(t){e(t);for(var n=-1,r=0,i=-1,a=!0,o=0,s=t.length-1;s>=0;--s){var c=t.charCodeAt(s);if(47!==c)-1===i&&(a=!1,i=s+1),46===c?-1===n?n=s:1!==o&&(o=1):-1!==n&&(o=-1);else if(!a){r=s+1;break}}return-1===n||-1===i||0===o||1===o&&n===i-1&&n===r+1?"":t.slice(n,i)},format:function(t){if(null===t||"object"!=typeof t)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof t);return function(t,e){var n=e.dir||e.root,r=e.base||(e.name||"")+(e.ext||"");return n?n===e.root?n+r:n+"/"+r:r}(0,t)},parse:function(t){e(t);var n={root:"",dir:"",base:"",ext:"",name:""};if(0===t.length)return n;var r,i=t.charCodeAt(0),a=47===i;a?(n.root="/",r=1):r=0;for(var o=-1,s=0,c=-1,l=!0,u=t.length-1,h=0;u>=r;--u)if(47!==(i=t.charCodeAt(u)))-1===c&&(l=!1,c=u+1),46===i?-1===o?o=u:1!==h&&(h=1):-1!==o&&(h=-1);else if(!l){s=u+1;break}return-1===o||-1===c||0===h||1===h&&o===c-1&&o===s+1?-1!==c&&(n.base=n.name=0===s&&a?t.slice(1,c):t.slice(s,c)):(0===s&&a?(n.name=t.slice(1,o),n.base=t.slice(1,c)):(n.name=t.slice(s,o),n.base=t.slice(s,c)),n.ext=t.slice(o,c)),s>0?n.dir=t.slice(0,s-1):a&&(n.dir="/"),n},sep:"/",delimiter:":",win32:null,posix:null};r.posix=r,t.exports=r},555:()=>{},8218:()=>{},8009:()=>{},5354:()=>{},6878:()=>{},8183:()=>{},1428:()=>{},4551:()=>{},8800:()=>{},1993:()=>{},3069:()=>{},9143:()=>{},7543:(t,e,n)=>{function r(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function i(t){let e=t,n=t,i=t;function a(t,e,r=0,a=t.length){if(r<a){if(0!==n(e,e))return a;do{const n=r+a>>>1;i(t[n],e)<0?r=n+1:a=n}while(r<a)}return r}return 2!==t.length&&(e=(e,n)=>t(e)-n,n=r,i=(e,n)=>r(t(e),n)),{left:a,center:function(t,n,r=0,i=t.length){const o=a(t,n,r,i-1);return o>r&&e(t[o-1],n)>-e(t[o],n)?o-1:o},right:function(t,e,r=0,a=t.length){if(r<a){if(0!==n(e,e))return a;do{const n=r+a>>>1;i(t[n],e)<=0?r=n+1:a=n}while(r<a)}return r}}}function a(t){return null===t?NaN:+t}n.r(e),n.d(e,{Adder:()=>x,Delaunay:()=>Bs,FormatSpecifier:()=>Fl,InternMap:()=>E,InternSet:()=>T,Node:()=>ng,Voronoi:()=>Ss,ZoomTransform:()=>sT,active:()=>ta,arc:()=>Jk,area:()=>sw,areaRadial:()=>yw,ascending:()=>r,autoType:()=>lc,axisBottom:()=>ie,axisLeft:()=>ae,axisRight:()=>re,axisTop:()=>ne,bin:()=>it,bisect:()=>u,bisectCenter:()=>l,bisectLeft:()=>c,bisectRight:()=>s,bisector:()=>i,blob:()=>$c,brush:()=>Na,brushSelection:()=>Aa,brushX:()=>Ma,brushY:()=>Oa,buffer:()=>qc,chord:()=>$a,chordDirected:()=>qa,chordTranspose:()=>Wa,cluster:()=>Xp,color:()=>tr,contourDensity:()=>is,contours:()=>Ko,count:()=>h,create:()=>Ck,creator:()=>pn,cross:()=>g,csv:()=>Zc,csvFormat:()=>Zs,csvFormatBody:()=>Qs,csvFormatRow:()=>Js,csvFormatRows:()=>Ks,csvFormatValue:()=>tc,csvParse:()=>Gs,csvParseRows:()=>Xs,cubehelix:()=>Uo,cumsum:()=>y,curveBasis:()=>Xw,curveBasisClosed:()=>Qw,curveBasisOpen:()=>Jw,curveBumpX:()=>eE,curveBumpY:()=>nE,curveBundle:()=>iE,curveCardinal:()=>sE,curveCardinalClosed:()=>lE,curveCardinalOpen:()=>hE,curveCatmullRom:()=>pE,curveCatmullRomClosed:()=>yE,curveCatmullRomOpen:()=>bE,curveLinear:()=>rw,curveLinearClosed:()=>_E,curveMonotoneX:()=>AE,curveMonotoneY:()=>ME,curveNatural:()=>DE,curveStep:()=>LE,curveStepAfter:()=>FE,curveStepBefore:()=>IE,descending:()=>m,deviation:()=>v,difference:()=>zt,disjoint:()=>Yt,dispatch:()=>de,drag:()=>zs,dragDisable:()=>Ln,dragEnable:()=>In,dsv:()=>Xc,dsvFormat:()=>Hs,easeBack:()=>Rc,easeBackIn:()=>Ic,easeBackInOut:()=>Rc,easeBackOut:()=>Fc,easeBounce:()=>Dc,easeBounceIn:()=>Nc,easeBounceInOut:()=>Bc,easeBounceOut:()=>Dc,easeCircle:()=>Mc,easeCircleIn:()=>Sc,easeCircleInOut:()=>Mc,easeCircleOut:()=>Ac,easeCubic:()=>Zi,easeCubicIn:()=>Gi,easeCubicInOut:()=>Zi,easeCubicOut:()=>Xi,easeElastic:()=>zc,easeElasticIn:()=>jc,easeElasticInOut:()=>Yc,easeElasticOut:()=>zc,easeExp:()=>Cc,easeExpIn:()=>Ec,easeExpInOut:()=>Cc,easeExpOut:()=>Tc,easeLinear:()=>hc,easePoly:()=>mc,easePolyIn:()=>gc,easePolyInOut:()=>mc,easePolyOut:()=>yc,easeQuad:()=>pc,easeQuadIn:()=>dc,easeQuadInOut:()=>pc,easeQuadOut:()=>fc,easeSin:()=>kc,easeSinIn:()=>_c,easeSinInOut:()=>kc,easeSinOut:()=>xc,every:()=>Lt,extent:()=>_,fcumsum:()=>w,filter:()=>Ft,flatGroup:()=>L,flatRollup:()=>I,forceCenter:()=>al,forceCollide:()=>bl,forceLink:()=>xl,forceManyBody:()=>Sl,forceRadial:()=>Al,forceSimulation:()=>Cl,forceX:()=>Ml,forceY:()=>Ol,format:()=>Yl,formatDefaultLocale:()=>Hl,formatLocale:()=>ql,formatPrefix:()=>Ul,formatSpecifier:()=>Il,fsum:()=>k,geoAlbers:()=>up,geoAlbersUsa:()=>hp,geoArea:()=>Zu,geoAzimuthalEqualArea:()=>gp,geoAzimuthalEqualAreaRaw:()=>pp,geoAzimuthalEquidistant:()=>mp,geoAzimuthalEquidistantRaw:()=>yp,geoBounds:()=>Nh,geoCentroid:()=>$h,geoCircle:()=>td,geoClipAntimeridian:()=>hd,geoClipCircle:()=>dd,geoClipExtent:()=>_d,geoClipRectangle:()=>vd,geoConicConformal:()=>wp,geoConicConformalRaw:()=>kp,geoConicEqualArea:()=>lp,geoConicEqualAreaRaw:()=>cp,geoConicEquidistant:()=>Sp,geoConicEquidistantRaw:()=>Cp,geoContains:()=>Rd,geoDistance:()=>Ad,geoEqualEarth:()=>Lp,geoEqualEarthRaw:()=>Bp,geoEquirectangular:()=>Tp,geoEquirectangularRaw:()=>Ep,geoGnomonic:()=>Fp,geoGnomonicRaw:()=>Ip,geoGraticule:()=>zd,geoGraticule10:()=>Yd,geoIdentity:()=>Rp,geoInterpolate:()=>Ud,geoLength:()=>Td,geoMercator:()=>vp,geoMercatorRaw:()=>bp,geoNaturalEarth1:()=>jp,geoNaturalEarth1Raw:()=>Pp,geoOrthographic:()=>Yp,geoOrthographicRaw:()=>zp,geoPath:()=>Hf,geoProjection:()=>ap,geoProjectionMutator:()=>op,geoRotation:()=>Qh,geoStereographic:()=>$p,geoStereographicRaw:()=>Up,geoStream:()=>Cu,geoTransform:()=>Vf,geoTransverseMercator:()=>qp,geoTransverseMercatorRaw:()=>Wp,gray:()=>xo,greatest:()=>Tt,greatestIndex:()=>Ct,group:()=>N,groupSort:()=>H,groups:()=>D,hcl:()=>Oo,hierarchy:()=>Qp,histogram:()=>it,hsl:()=>hr,html:()=>rl,image:()=>Kc,index:()=>P,indexes:()=>j,interpolate:()=>Ir,interpolateArray:()=>Sr,interpolateBasis:()=>gr,interpolateBasisClosed:()=>yr,interpolateBlues:()=>Jx,interpolateBrBG:()=>hx,interpolateBuGn:()=>Mx,interpolateBuPu:()=>Nx,interpolateCividis:()=>uk,interpolateCool:()=>fk,interpolateCubehelix:()=>hy,interpolateCubehelixDefault:()=>hk,interpolateCubehelixLong:()=>dy,interpolateDate:()=>Mr,interpolateDiscrete:()=>Kg,interpolateGnBu:()=>Bx,interpolateGreens:()=>ek,interpolateGreys:()=>rk,interpolateHcl:()=>cy,interpolateHclLong:()=>ly,interpolateHsl:()=>iy,interpolateHslLong:()=>ay,interpolateHue:()=>Jg,interpolateInferno:()=>Ek,interpolateLab:()=>oy,interpolateMagma:()=>wk,interpolateNumber:()=>Or,interpolateNumberArray:()=>Tr,interpolateObject:()=>Nr,interpolateOrRd:()=>Ix,interpolateOranges:()=>lk,interpolatePRGn:()=>fx,interpolatePiYG:()=>gx,interpolatePlasma:()=>Tk,interpolatePuBu:()=>jx,interpolatePuBuGn:()=>Rx,interpolatePuOr:()=>mx,interpolatePuRd:()=>Yx,interpolatePurples:()=>ak,interpolateRainbow:()=>gk,interpolateRdBu:()=>vx,interpolateRdGy:()=>xx,interpolateRdPu:()=>$x,interpolateRdYlBu:()=>wx,interpolateRdYlGn:()=>Tx,interpolateReds:()=>sk,interpolateRgb:()=>xr,interpolateRgbBasis:()=>wr,interpolateRgbBasisClosed:()=>Er,interpolateRound:()=>ty,interpolateSinebow:()=>vk,interpolateSpectral:()=>Sx,interpolateString:()=>Lr,interpolateTransformCss:()=>gi,interpolateTransformSvg:()=>yi,interpolateTurbo:()=>_k,interpolateViridis:()=>kk,interpolateWarm:()=>dk,interpolateYlGn:()=>Vx,interpolateYlGnBu:()=>qx,interpolateYlOrBr:()=>Xx,interpolateYlOrRd:()=>Qx,interpolateZoom:()=>ny,interrupt:()=>li,intersection:()=>Ut,interval:()=>iT,isoFormat:()=>eT,isoParse:()=>rT,json:()=>tl,lab:()=>ko,lch:()=>Mo,least:()=>wt,leastIndex:()=>Et,line:()=>ow,lineRadial:()=>gw,linkHorizontal:()=>Ew,linkRadial:()=>Cw,linkVertical:()=>Tw,local:()=>Ak,map:()=>Rt,matcher:()=>be,max:()=>at,maxIndex:()=>ft,mean:()=>pt,median:()=>gt,merge:()=>yt,min:()=>ot,minIndex:()=>mt,mode:()=>bt,namespace:()=>Le,namespaces:()=>Be,nice:()=>nt,now:()=>Gr,pack:()=>kg,packEnclose:()=>rg,packSiblings:()=>yg,pairs:()=>vt,partition:()=>Ag,path:()=>Ja,permute:()=>U,pie:()=>uw,piecewise:()=>fy,pointRadial:()=>mw,pointer:()=>Rr,pointers:()=>Ok,polygonArea:()=>gy,polygonCentroid:()=>yy,polygonContains:()=>xy,polygonHull:()=>_y,polygonLength:()=>ky,precisionFixed:()=>Vl,precisionPrefix:()=>Gl,precisionRound:()=>Xl,quadtree:()=>ul,quantile:()=>lt,quantileSorted:()=>ut,quantize:()=>py,quickselect:()=>st,radialArea:()=>yw,radialLine:()=>gw,randomBates:()=>My,randomBernoulli:()=>Dy,randomBeta:()=>Iy,randomBinomial:()=>Fy,randomCauchy:()=>Py,randomExponential:()=>Oy,randomGamma:()=>Ly,randomGeometric:()=>By,randomInt:()=>Ty,randomIrwinHall:()=>Ay,randomLcg:()=>Uy,randomLogNormal:()=>Sy,randomLogistic:()=>jy,randomNormal:()=>Cy,randomPareto:()=>Ny,randomPoisson:()=>zy,randomUniform:()=>Ey,randomWeibull:()=>Ry,range:()=>xt,rank:()=>kt,reduce:()=>Pt,reverse:()=>jt,rgb:()=>ir,ribbon:()=>uo,ribbonArrow:()=>ho,rollup:()=>F,rollups:()=>R,scaleBand:()=>Vy,scaleDiverging:()=>V_,scaleDivergingLog:()=>G_,scaleDivergingPow:()=>Z_,scaleDivergingSqrt:()=>Q_,scaleDivergingSymlog:()=>X_,scaleIdentity:()=>cm,scaleImplicit:()=>qy,scaleLinear:()=>sm,scaleLog:()=>mm,scaleOrdinal:()=>Hy,scalePoint:()=>Xy,scalePow:()=>Cm,scaleQuantile:()=>Nm,scaleQuantize:()=>Dm,scaleRadial:()=>Om,scaleSequential:()=>z_,scaleSequentialLog:()=>Y_,scaleSequentialPow:()=>$_,scaleSequentialQuantile:()=>q_,scaleSequentialSqrt:()=>W_,scaleSequentialSymlog:()=>U_,scaleSqrt:()=>Sm,scaleSymlog:()=>xm,scaleThreshold:()=>Bm,scaleTime:()=>F_,scaleUtc:()=>R_,scan:()=>St,schemeAccent:()=>tx,schemeBlues:()=>Kx,schemeBrBG:()=>ux,schemeBuGn:()=>Ax,schemeBuPu:()=>Ox,schemeCategory10:()=>J_,schemeDark2:()=>ex,schemeGnBu:()=>Dx,schemeGreens:()=>tk,schemeGreys:()=>nk,schemeOrRd:()=>Lx,schemeOranges:()=>ck,schemePRGn:()=>dx,schemePaired:()=>nx,schemePastel1:()=>rx,schemePastel2:()=>ix,schemePiYG:()=>px,schemePuBu:()=>Px,schemePuBuGn:()=>Fx,schemePuOr:()=>yx,schemePuRd:()=>zx,schemePurples:()=>ik,schemeRdBu:()=>bx,schemeRdGy:()=>_x,schemeRdPu:()=>Ux,schemeRdYlBu:()=>kx,schemeRdYlGn:()=>Ex,schemeReds:()=>ok,schemeSet1:()=>ax,schemeSet2:()=>ox,schemeSet3:()=>sx,schemeSpectral:()=>Cx,schemeTableau10:()=>cx,schemeYlGn:()=>Hx,schemeYlGnBu:()=>Wx,schemeYlOrBr:()=>Gx,schemeYlOrRd:()=>Zx,select:()=>Mn,selectAll:()=>Nk,selection:()=>An,selector:()=>pe,selectorAll:()=>me,shuffle:()=>At,shuffler:()=>Mt,some:()=>It,sort:()=>$,stack:()=>YE,stackOffsetDiverging:()=>$E,stackOffsetExpand:()=>UE,stackOffsetNone:()=>RE,stackOffsetSilhouette:()=>WE,stackOffsetWiggle:()=>qE,stackOrderAppearance:()=>HE,stackOrderAscending:()=>GE,stackOrderDescending:()=>ZE,stackOrderInsideOut:()=>QE,stackOrderNone:()=>PE,stackOrderReverse:()=>KE,stratify:()=>Lg,style:()=>qe,subset:()=>Ht,sum:()=>Ot,superset:()=>Wt,svg:()=>il,symbol:()=>qw,symbolCircle:()=>Sw,symbolCross:()=>Aw,symbolDiamond:()=>Nw,symbolSquare:()=>Fw,symbolStar:()=>Iw,symbolTriangle:()=>Pw,symbolWye:()=>$w,symbols:()=>Ww,text:()=>Vc,thresholdFreedmanDiaconis:()=>ht,thresholdScott:()=>dt,thresholdSturges:()=>rt,tickFormat:()=>am,tickIncrement:()=>tt,tickStep:()=>et,ticks:()=>J,timeDay:()=>nb,timeDays:()=>rb,timeFormat:()=>hv,timeFormatDefaultLocale:()=>D_,timeFormatLocale:()=>lv,timeFriday:()=>ub,timeFridays:()=>mb,timeHour:()=>Jm,timeHours:()=>tb,timeInterval:()=>Um,timeMillisecond:()=>Wm,timeMilliseconds:()=>qm,timeMinute:()=>Zm,timeMinutes:()=>Qm,timeMonday:()=>ob,timeMondays:()=>fb,timeMonth:()=>_b,timeMonths:()=>xb,timeParse:()=>dv,timeSaturday:()=>hb,timeSaturdays:()=>bb,timeSecond:()=>Vm,timeSeconds:()=>Gm,timeSunday:()=>ab,timeSundays:()=>db,timeThursday:()=>lb,timeThursdays:()=>yb,timeTickInterval:()=>av,timeTicks:()=>iv,timeTuesday:()=>sb,timeTuesdays:()=>pb,timeWednesday:()=>cb,timeWednesdays:()=>gb,timeWeek:()=>ab,timeWeeks:()=>db,timeYear:()=>wb,timeYears:()=>Eb,timeout:()=>ni,timer:()=>Qr,timerFlush:()=>Kr,transition:()=>qi,transpose:()=>Nt,tree:()=>$g,treemap:()=>Gg,treemapBinary:()=>Xg,treemapDice:()=>Sg,treemapResquarify:()=>Qg,treemapSlice:()=>Wg,treemapSliceDice:()=>Zg,treemapSquarify:()=>Vg,tsv:()=>Qc,tsvFormat:()=>ic,tsvFormatBody:()=>ac,tsvFormatRow:()=>sc,tsvFormatRows:()=>oc,tsvFormatValue:()=>cc,tsvParse:()=>nc,tsvParseRows:()=>rc,union:()=>Vt,utcDay:()=>Db,utcDays:()=>Bb,utcFormat:()=>fv,utcFriday:()=>zb,utcFridays:()=>Vb,utcHour:()=>Mb,utcHours:()=>Ob,utcMillisecond:()=>Wm,utcMilliseconds:()=>qm,utcMinute:()=>Cb,utcMinutes:()=>Sb,utcMonday:()=>Fb,utcMondays:()=>$b,utcMonth:()=>Zb,utcMonths:()=>Qb,utcParse:()=>pv,utcSaturday:()=>Yb,utcSaturdays:()=>Gb,utcSecond:()=>Vm,utcSeconds:()=>Gm,utcSunday:()=>Ib,utcSundays:()=>Ub,utcThursday:()=>jb,utcThursdays:()=>Hb,utcTickInterval:()=>rv,utcTicks:()=>nv,utcTuesday:()=>Rb,utcTuesdays:()=>Wb,utcWednesday:()=>Pb,utcWednesdays:()=>qb,utcWeek:()=>Ib,utcWeeks:()=>Ub,utcYear:()=>Jb,utcYears:()=>tv,variance:()=>b,window:()=>Ye,xml:()=>nl,zip:()=>Bt,zoom:()=>bT,zoomIdentity:()=>cT,zoomTransform:()=>lT});const o=i(r),s=o.right,c=o.left,l=i(a).center,u=s;function h(t,e){let n=0;if(void 0===e)for(let r of t)null!=r&&(r=+r)>=r&&++n;else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(i=+i)>=i&&++n}return n}function d(t){return 0|t.length}function f(t){return!(t>0)}function p(t){return"object"!=typeof t||"length"in t?t:Array.from(t)}function g(...t){const e="function"==typeof t[t.length-1]&&function(t){return e=>t(...e)}(t.pop()),n=(t=t.map(p)).map(d),r=t.length-1,i=new Array(r+1).fill(0),a=[];if(r<0||n.some(f))return a;for(;;){a.push(i.map(((e,n)=>t[n][e])));let o=r;for(;++i[o]===n[o];){if(0===o)return e?a.map(e):a;i[o--]=0}}}function y(t,e){var n=0,r=0;return Float64Array.from(t,void 0===e?t=>n+=+t||0:i=>n+=+e(i,r++,t)||0)}function m(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function b(t,e){let n,r=0,i=0,a=0;if(void 0===e)for(let o of t)null!=o&&(o=+o)>=o&&(n=o-i,i+=n/++r,a+=n*(o-i));else{let o=-1;for(let s of t)null!=(s=e(s,++o,t))&&(s=+s)>=s&&(n=s-i,i+=n/++r,a+=n*(s-i))}if(r>1)return a/(r-1)}function v(t,e){const n=b(t,e);return n?Math.sqrt(n):n}function _(t,e){let n,r;if(void 0===e)for(const i of t)null!=i&&(void 0===n?i>=i&&(n=r=i):(n>i&&(n=i),r<i&&(r=i)));else{let i=-1;for(let a of t)null!=(a=e(a,++i,t))&&(void 0===n?a>=a&&(n=r=a):(n>a&&(n=a),r<a&&(r=a)))}return[n,r]}class x{constructor(){this._partials=new Float64Array(32),this._n=0}add(t){const e=this._partials;let n=0;for(let r=0;r<this._n&&r<32;r++){const i=e[r],a=t+i,o=Math.abs(t)<Math.abs(i)?t-(a-i):i-(a-t);o&&(e[n++]=o),t=a}return e[n]=t,this._n=n+1,this}valueOf(){const t=this._partials;let e,n,r,i=this._n,a=0;if(i>0){for(a=t[--i];i>0&&(e=a,n=t[--i],a=e+n,r=n-(a-e),!r););i>0&&(r<0&&t[i-1]<0||r>0&&t[i-1]>0)&&(n=2*r,e=a+n,n==e-a&&(a=e))}return a}}function k(t,e){const n=new x;if(void 0===e)for(let r of t)(r=+r)&&n.add(r);else{let r=-1;for(let i of t)(i=+e(i,++r,t))&&n.add(i)}return+n}function w(t,e){const n=new x;let r=-1;return Float64Array.from(t,void 0===e?t=>n.add(+t||0):i=>n.add(+e(i,++r,t)||0))}class E extends Map{constructor(t,e=M){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[n,r]of t)this.set(n,r)}get(t){return super.get(C(this,t))}has(t){return super.has(C(this,t))}set(t,e){return super.set(S(this,t),e)}delete(t){return super.delete(A(this,t))}}class T extends Set{constructor(t,e=M){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const n of t)this.add(n)}has(t){return super.has(C(this,t))}add(t){return super.add(S(this,t))}delete(t){return super.delete(A(this,t))}}function C({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function S({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}function A({_intern:t,_key:e},n){const r=e(n);return t.has(r)&&(n=t.get(r),t.delete(r)),n}function M(t){return null!==t&&"object"==typeof t?t.valueOf():t}function O(t){return t}function N(t,...e){return Y(t,O,O,e)}function D(t,...e){return Y(t,Array.from,O,e)}function B(t,e){for(let n=1,r=e.length;n<r;++n)t=t.flatMap((t=>t.pop().map((([e,n])=>[...t,e,n]))));return t}function L(t,...e){return B(D(t,...e),e)}function I(t,e,...n){return B(R(t,e,...n),n)}function F(t,e,...n){return Y(t,O,e,n)}function R(t,e,...n){return Y(t,Array.from,e,n)}function P(t,...e){return Y(t,O,z,e)}function j(t,...e){return Y(t,Array.from,z,e)}function z(t){if(1!==t.length)throw new Error("duplicate key");return t[0]}function Y(t,e,n,r){return function t(i,a){if(a>=r.length)return n(i);const o=new E,s=r[a++];let c=-1;for(const e of i){const t=s(e,++c,i),n=o.get(t);n?n.push(e):o.set(t,[e])}for(const[e,n]of o)o.set(e,t(n,a));return e(o)}(t,0)}function U(t,e){return Array.from(e,(e=>t[e]))}function $(t,...e){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");t=Array.from(t);let[n]=e;if(n&&2!==n.length||e.length>1){const r=Uint32Array.from(t,((t,e)=>e));return e.length>1?(e=e.map((e=>t.map(e))),r.sort(((t,n)=>{for(const r of e){const e=q(r[t],r[n]);if(e)return e}}))):(n=t.map(n),r.sort(((t,e)=>q(n[t],n[e])))),U(t,r)}return t.sort(W(n))}function W(t=r){if(t===r)return q;if("function"!=typeof t)throw new TypeError("compare is not a function");return(e,n)=>{const r=t(e,n);return r||0===r?r:(0===t(n,n))-(0===t(e,e))}}function q(t,e){return(null==t||!(t>=t))-(null==e||!(e>=e))||(t<e?-1:t>e?1:0)}function H(t,e,n){return(2!==e.length?$(F(t,e,n),(([t,e],[n,i])=>r(e,i)||r(t,n))):$(N(t,n),(([t,n],[i,a])=>e(n,a)||r(t,i)))).map((([t])=>t))}var V=Array.prototype,G=V.slice;function X(t){return()=>t}V.map;var Z=Math.sqrt(50),Q=Math.sqrt(10),K=Math.sqrt(2);function J(t,e,n){var r,i,a,o,s=-1;if(n=+n,(t=+t)==(e=+e)&&n>0)return[t];if((r=e<t)&&(i=t,t=e,e=i),0===(o=tt(t,e,n))||!isFinite(o))return[];if(o>0){let n=Math.round(t/o),r=Math.round(e/o);for(n*o<t&&++n,r*o>e&&--r,a=new Array(i=r-n+1);++s<i;)a[s]=(n+s)*o}else{o=-o;let n=Math.round(t*o),r=Math.round(e*o);for(n/o<t&&++n,r/o>e&&--r,a=new Array(i=r-n+1);++s<i;)a[s]=(n+s)/o}return r&&a.reverse(),a}function tt(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),a=r/Math.pow(10,i);return i>=0?(a>=Z?10:a>=Q?5:a>=K?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=Z?10:a>=Q?5:a>=K?2:1)}function et(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=Z?i*=10:a>=Q?i*=5:a>=K&&(i*=2),e<t?-i:i}function nt(t,e,n){let r;for(;;){const i=tt(t,e,n);if(i===r||0===i||!isFinite(i))return[t,e];i>0?(t=Math.floor(t/i)*i,e=Math.ceil(e/i)*i):i<0&&(t=Math.ceil(t*i)/i,e=Math.floor(e*i)/i),r=i}}function rt(t){return Math.ceil(Math.log(h(t))/Math.LN2)+1}function it(){var t=O,e=_,n=rt;function r(r){Array.isArray(r)||(r=Array.from(r));var i,a,o=r.length,s=new Array(o);for(i=0;i<o;++i)s[i]=t(r[i],i,r);var c=e(s),l=c[0],h=c[1],d=n(s,l,h);if(!Array.isArray(d)){const t=h,n=+d;if(e===_&&([l,h]=nt(l,h,n)),(d=J(l,h,n))[d.length-1]>=h)if(t>=h&&e===_){const t=tt(l,h,n);isFinite(t)&&(t>0?h=(Math.floor(h/t)+1)*t:t<0&&(h=(Math.ceil(h*-t)+1)/-t))}else d.pop()}for(var f=d.length;d[0]<=l;)d.shift(),--f;for(;d[f-1]>h;)d.pop(),--f;var p,g=new Array(f+1);for(i=0;i<=f;++i)(p=g[i]=[]).x0=i>0?d[i-1]:l,p.x1=i<f?d[i]:h;for(i=0;i<o;++i)null!=(a=s[i])&&l<=a&&a<=h&&g[u(d,a,0,f)].push(r[i]);return g}return r.value=function(e){return arguments.length?(t="function"==typeof e?e:X(e),r):t},r.domain=function(t){return arguments.length?(e="function"==typeof t?t:X([t[0],t[1]]),r):e},r.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?X(G.call(t)):X(t),r):n},r}function at(t,e){let n;if(void 0===e)for(const r of t)null!=r&&(n<r||void 0===n&&r>=r)&&(n=r);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n<i||void 0===n&&i>=i)&&(n=i)}return n}function ot(t,e){let n;if(void 0===e)for(const r of t)null!=r&&(n>r||void 0===n&&r>=r)&&(n=r);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function st(t,e,n=0,r=t.length-1,i){for(i=void 0===i?q:W(i);r>n;){if(r-n>600){const a=r-n+1,o=e-n+1,s=Math.log(a),c=.5*Math.exp(2*s/3),l=.5*Math.sqrt(s*c*(a-c)/a)*(o-a/2<0?-1:1);st(t,e,Math.max(n,Math.floor(e-o*c/a+l)),Math.min(r,Math.floor(e+(a-o)*c/a+l)),i)}const a=t[e];let o=n,s=r;for(ct(t,n,e),i(t[r],a)>0&&ct(t,n,r);o<s;){for(ct(t,o,s),++o,--s;i(t[o],a)<0;)++o;for(;i(t[s],a)>0;)--s}0===i(t[n],a)?ct(t,n,s):(++s,ct(t,s,r)),s<=e&&(n=s+1),e<=s&&(r=s-1)}return t}function ct(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function lt(t,e,n){if(t=Float64Array.from(function*(t,e){if(void 0===e)for(let n of t)null!=n&&(n=+n)>=n&&(yield n);else{let n=-1;for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}(t,n)),r=t.length){if((e=+e)<=0||r<2)return ot(t);if(e>=1)return at(t);var r,i=(r-1)*e,a=Math.floor(i),o=at(st(t,a).subarray(0,a+1));return o+(ot(t.subarray(a+1))-o)*(i-a)}}function ut(t,e,n=a){if(r=t.length){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,o=Math.floor(i),s=+n(t[o],o,t);return s+(+n(t[o+1],o+1,t)-s)*(i-o)}}function ht(t,e,n){return Math.ceil((n-e)/(2*(lt(t,.75)-lt(t,.25))*Math.pow(h(t),-1/3)))}function dt(t,e,n){return Math.ceil((n-e)/(3.5*v(t)*Math.pow(h(t),-1/3)))}function ft(t,e){let n,r=-1,i=-1;if(void 0===e)for(const a of t)++i,null!=a&&(n<a||void 0===n&&a>=a)&&(n=a,r=i);else for(let a of t)null!=(a=e(a,++i,t))&&(n<a||void 0===n&&a>=a)&&(n=a,r=i);return r}function pt(t,e){let n=0,r=0;if(void 0===e)for(let i of t)null!=i&&(i=+i)>=i&&(++n,r+=i);else{let i=-1;for(let a of t)null!=(a=e(a,++i,t))&&(a=+a)>=a&&(++n,r+=a)}if(n)return r/n}function gt(t,e){return lt(t,.5,e)}function yt(t){return Array.from(function*(t){for(const e of t)yield*e}(t))}function mt(t,e){let n,r=-1,i=-1;if(void 0===e)for(const a of t)++i,null!=a&&(n>a||void 0===n&&a>=a)&&(n=a,r=i);else for(let a of t)null!=(a=e(a,++i,t))&&(n>a||void 0===n&&a>=a)&&(n=a,r=i);return r}function bt(t,e){const n=new E;if(void 0===e)for(let a of t)null!=a&&a>=a&&n.set(a,(n.get(a)||0)+1);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&i>=i&&n.set(i,(n.get(i)||0)+1)}let r,i=0;for(const[a,o]of n)o>i&&(i=o,r=a);return r}function vt(t,e=_t){const n=[];let r,i=!1;for(const a of t)i&&n.push(e(r,a)),r=a,i=!0;return n}function _t(t,e){return[t,e]}function xt(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),a=new Array(i);++r<i;)a[r]=t+r*n;return a}function kt(t,e=r){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");let n=Array.from(t);const i=new Float64Array(n.length);2!==e.length&&(n=n.map(e),e=r);const a=(t,r)=>e(n[t],n[r]);let o,s;return Uint32Array.from(n,((t,e)=>e)).sort(e===r?(t,e)=>q(n[t],n[e]):W(a)).forEach(((t,e)=>{const n=a(t,void 0===o?t:o);n>=0?((void 0===o||n>0)&&(o=t,s=e),i[t]=s):i[t]=NaN})),i}function wt(t,e=r){let n,i=!1;if(1===e.length){let a;for(const o of t){const t=e(o);(i?r(t,a)<0:0===r(t,t))&&(n=o,a=t,i=!0)}}else for(const r of t)(i?e(r,n)<0:0===e(r,r))&&(n=r,i=!0);return n}function Et(t,e=r){if(1===e.length)return mt(t,e);let n,i=-1,a=-1;for(const r of t)++a,(i<0?0===e(r,r):e(r,n)<0)&&(n=r,i=a);return i}function Tt(t,e=r){let n,i=!1;if(1===e.length){let a;for(const o of t){const t=e(o);(i?r(t,a)>0:0===r(t,t))&&(n=o,a=t,i=!0)}}else for(const r of t)(i?e(r,n)>0:0===e(r,r))&&(n=r,i=!0);return n}function Ct(t,e=r){if(1===e.length)return ft(t,e);let n,i=-1,a=-1;for(const r of t)++a,(i<0?0===e(r,r):e(r,n)>0)&&(n=r,i=a);return i}function St(t,e){const n=Et(t,e);return n<0?void 0:n}const At=Mt(Math.random);function Mt(t){return function(e,n=0,r=e.length){let i=r-(n=+n);for(;i;){const r=t()*i--|0,a=e[i+n];e[i+n]=e[r+n],e[r+n]=a}return e}}function Ot(t,e){let n=0;if(void 0===e)for(let r of t)(r=+r)&&(n+=r);else{let r=-1;for(let i of t)(i=+e(i,++r,t))&&(n+=i)}return n}function Nt(t){if(!(i=t.length))return[];for(var e=-1,n=ot(t,Dt),r=new Array(n);++e<n;)for(var i,a=-1,o=r[e]=new Array(i);++a<i;)o[a]=t[a][e];return r}function Dt(t){return t.length}function Bt(){return Nt(arguments)}function Lt(t,e){if("function"!=typeof e)throw new TypeError("test is not a function");let n=-1;for(const r of t)if(!e(r,++n,t))return!1;return!0}function It(t,e){if("function"!=typeof e)throw new TypeError("test is not a function");let n=-1;for(const r of t)if(e(r,++n,t))return!0;return!1}function Ft(t,e){if("function"!=typeof e)throw new TypeError("test is not a function");const n=[];let r=-1;for(const i of t)e(i,++r,t)&&n.push(i);return n}function Rt(t,e){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");if("function"!=typeof e)throw new TypeError("mapper is not a function");return Array.from(t,((n,r)=>e(n,r,t)))}function Pt(t,e,n){if("function"!=typeof e)throw new TypeError("reducer is not a function");const r=t[Symbol.iterator]();let i,a,o=-1;if(arguments.length<3){if(({done:i,value:n}=r.next()),i)return;++o}for(;({done:i,value:a}=r.next()),!i;)n=e(n,a,++o,t);return n}function jt(t){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");return Array.from(t).reverse()}function zt(t,...e){t=new T(t);for(const n of e)for(const e of n)t.delete(e);return t}function Yt(t,e){const n=e[Symbol.iterator](),r=new T;for(const i of t){if(r.has(i))return!1;let t,e;for(;({value:t,done:e}=n.next())&&!e;){if(Object.is(i,t))return!1;r.add(t)}}return!0}function Ut(t,...e){t=new T(t),e=e.map($t);t:for(const n of t)for(const r of e)if(!r.has(n)){t.delete(n);continue t}return t}function $t(t){return t instanceof T?t:new T(t)}function Wt(t,e){const n=t[Symbol.iterator](),r=new Set;for(const i of e){const t=qt(i);if(r.has(t))continue;let e,a;for(;({value:e,done:a}=n.next());){if(a)return!1;const n=qt(e);if(r.add(n),Object.is(t,n))break}}return!0}function qt(t){return null!==t&&"object"==typeof t?t.valueOf():t}function Ht(t,e){return Wt(e,t)}function Vt(...t){const e=new T;for(const n of t)for(const t of n)e.add(t);return e}function Gt(t){return t}var Xt=1e-6;function Zt(t){return"translate("+t+",0)"}function Qt(t){return"translate(0,"+t+")"}function Kt(t){return e=>+t(e)}function Jt(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function te(){return!this.__axis}function ee(t,e){var n=[],r=null,i=null,a=6,o=6,s=3,c="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,l=1===t||4===t?-1:1,u=4===t||2===t?"x":"y",h=1===t||3===t?Zt:Qt;function d(d){var f=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,p=null==i?e.tickFormat?e.tickFormat.apply(e,n):Gt:i,g=Math.max(a,0)+s,y=e.range(),m=+y[0]+c,b=+y[y.length-1]+c,v=(e.bandwidth?Jt:Kt)(e.copy(),c),_=d.selection?d.selection():d,x=_.selectAll(".domain").data([null]),k=_.selectAll(".tick").data(f,e).order(),w=k.exit(),E=k.enter().append("g").attr("class","tick"),T=k.select("line"),C=k.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),k=k.merge(E),T=T.merge(E.append("line").attr("stroke","currentColor").attr(u+"2",l*a)),C=C.merge(E.append("text").attr("fill","currentColor").attr(u,l*g).attr("dy",1===t?"0em":3===t?"0.71em":"0.32em")),d!==_&&(x=x.transition(d),k=k.transition(d),T=T.transition(d),C=C.transition(d),w=w.transition(d).attr("opacity",Xt).attr("transform",(function(t){return isFinite(t=v(t))?h(t+c):this.getAttribute("transform")})),E.attr("opacity",Xt).attr("transform",(function(t){var e=this.parentNode.__axis;return h((e&&isFinite(e=e(t))?e:v(t))+c)}))),w.remove(),x.attr("d",4===t||2===t?o?"M"+l*o+","+m+"H"+c+"V"+b+"H"+l*o:"M"+c+","+m+"V"+b:o?"M"+m+","+l*o+"V"+c+"H"+b+"V"+l*o:"M"+m+","+c+"H"+b),k.attr("opacity",1).attr("transform",(function(t){return h(v(t)+c)})),T.attr(u+"2",l*a),C.attr(u,l*g).text(p),_.filter(te).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",2===t?"start":4===t?"end":"middle"),_.each((function(){this.__axis=v}))}return d.scale=function(t){return arguments.length?(e=t,d):e},d.ticks=function(){return n=Array.from(arguments),d},d.tickArguments=function(t){return arguments.length?(n=null==t?[]:Array.from(t),d):n.slice()},d.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),d):r&&r.slice()},d.tickFormat=function(t){return arguments.length?(i=t,d):i},d.tickSize=function(t){return arguments.length?(a=o=+t,d):a},d.tickSizeInner=function(t){return arguments.length?(a=+t,d):a},d.tickSizeOuter=function(t){return arguments.length?(o=+t,d):o},d.tickPadding=function(t){return arguments.length?(s=+t,d):s},d.offset=function(t){return arguments.length?(c=+t,d):c},d}function ne(t){return ee(1,t)}function re(t){return ee(2,t)}function ie(t){return ee(3,t)}function ae(t){return ee(4,t)}var oe={value:()=>{}};function se(){for(var t,e=0,n=arguments.length,r={};e<n;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new ce(r)}function ce(t){this._=t}function le(t,e){return t.trim().split(/^|\s+/).map((function(t){var n="",r=t.indexOf(".");if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function ue(t,e){for(var n,r=0,i=t.length;r<i;++r)if((n=t[r]).name===e)return n.value}function he(t,e,n){for(var r=0,i=t.length;r<i;++r)if(t[r].name===e){t[r]=oe,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=n&&t.push({name:e,value:n}),t}ce.prototype=se.prototype={constructor:ce,on:function(t,e){var n,r=this._,i=le(t+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++a<o;)if(n=(t=i[a]).type)r[n]=he(r[n],t.name,e);else if(null==e)for(n in r)r[n]=he(r[n],t.name,null);return this}for(;++a<o;)if((n=(t=i[a]).type)&&(n=ue(r[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new ce(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,r,i=new Array(n),a=0;a<n;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=0,n=(r=this._[t]).length;a<n;++a)r[a].value.apply(e,i)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,a=r.length;i<a;++i)r[i].value.apply(e,n)}};const de=se;function fe(){}function pe(t){return null==t?fe:function(){return this.querySelector(t)}}function ge(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function ye(){return[]}function me(t){return null==t?ye:function(){return this.querySelectorAll(t)}}function be(t){return function(){return this.matches(t)}}function ve(t){return function(e){return e.matches(t)}}var _e=Array.prototype.find;function xe(){return this.firstElementChild}var ke=Array.prototype.filter;function we(){return Array.from(this.children)}function Ee(t){return new Array(t.length)}function Te(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function Ce(t){return function(){return t}}function Se(t,e,n,r,i,a){for(var o,s=0,c=e.length,l=a.length;s<l;++s)(o=e[s])?(o.__data__=a[s],r[s]=o):n[s]=new Te(t,a[s]);for(;s<c;++s)(o=e[s])&&(i[s]=o)}function Ae(t,e,n,r,i,a,o){var s,c,l,u=new Map,h=e.length,d=a.length,f=new Array(h);for(s=0;s<h;++s)(c=e[s])&&(f[s]=l=o.call(c,c.__data__,s,e)+"",u.has(l)?i[s]=c:u.set(l,c));for(s=0;s<d;++s)l=o.call(t,a[s],s,a)+"",(c=u.get(l))?(r[s]=c,c.__data__=a[s],u.delete(l)):n[s]=new Te(t,a[s]);for(s=0;s<h;++s)(c=e[s])&&u.get(f[s])===c&&(i[s]=c)}function Me(t){return t.__data__}function Oe(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function Ne(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}Te.prototype={constructor:Te,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var De="http://www.w3.org/1999/xhtml";const Be={svg:"http://www.w3.org/2000/svg",xhtml:De,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Le(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),Be.hasOwnProperty(e)?{space:Be[e],local:t}:t}function Ie(t){return function(){this.removeAttribute(t)}}function Fe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Re(t,e){return function(){this.setAttribute(t,e)}}function Pe(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function je(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function ze(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function Ye(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function Ue(t){return function(){this.style.removeProperty(t)}}function $e(t,e,n){return function(){this.style.setProperty(t,e,n)}}function We(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function qe(t,e){return t.style.getPropertyValue(e)||Ye(t).getComputedStyle(t,null).getPropertyValue(e)}function He(t){return function(){delete this[t]}}function Ve(t,e){return function(){this[t]=e}}function Ge(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function Xe(t){return t.trim().split(/^|\s+/)}function Ze(t){return t.classList||new Qe(t)}function Qe(t){this._node=t,this._names=Xe(t.getAttribute("class")||"")}function Ke(t,e){for(var n=Ze(t),r=-1,i=e.length;++r<i;)n.add(e[r])}function Je(t,e){for(var n=Ze(t),r=-1,i=e.length;++r<i;)n.remove(e[r])}function tn(t){return function(){Ke(this,t)}}function en(t){return function(){Je(this,t)}}function nn(t,e){return function(){(e.apply(this,arguments)?Ke:Je)(this,t)}}function rn(){this.textContent=""}function an(t){return function(){this.textContent=t}}function on(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function sn(){this.innerHTML=""}function cn(t){return function(){this.innerHTML=t}}function ln(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function un(){this.nextSibling&&this.parentNode.appendChild(this)}function hn(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function dn(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===De&&e.documentElement.namespaceURI===De?e.createElement(t):e.createElementNS(n,t)}}function fn(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function pn(t){var e=Le(t);return(e.local?fn:dn)(e)}function gn(){return null}function yn(){var t=this.parentNode;t&&t.removeChild(this)}function mn(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function bn(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function vn(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function _n(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r<a;++r)n=e[r],t.type&&n.type!==t.type||n.name!==t.name?e[++i]=n:this.removeEventListener(n.type,n.listener,n.options);++i?e.length=i:delete this.__on}}}function xn(t,e,n){return function(){var r,i=this.__on,a=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(i)for(var o=0,s=i.length;o<s;++o)if((r=i[o]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=a,r.options=n),void(r.value=e);this.addEventListener(t.type,a,n),r={type:t.type,name:t.name,value:e,listener:a,options:n},i?i.push(r):this.__on=[r]}}function kn(t,e,n){var r=Ye(t),i=r.CustomEvent;"function"==typeof i?i=new i(e,n):(i=r.document.createEvent("Event"),n?(i.initEvent(e,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function wn(t,e){return function(){return kn(this,t,e)}}function En(t,e){return function(){return kn(this,t,e.apply(this,arguments))}}Qe.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Tn=[null];function Cn(t,e){this._groups=t,this._parents=e}function Sn(){return new Cn([[document.documentElement]],Tn)}Cn.prototype=Sn.prototype={constructor:Cn,select:function(t){"function"!=typeof t&&(t=pe(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,o,s=e[i],c=s.length,l=r[i]=new Array(c),u=0;u<c;++u)(a=s[u])&&(o=t.call(a,a.__data__,u,s))&&("__data__"in a&&(o.__data__=a.__data__),l[u]=o);return new Cn(r,this._parents)},selectAll:function(t){t="function"==typeof t?function(t){return function(){return ge(t.apply(this,arguments))}}(t):me(t);for(var e=this._groups,n=e.length,r=[],i=[],a=0;a<n;++a)for(var o,s=e[a],c=s.length,l=0;l<c;++l)(o=s[l])&&(r.push(t.call(o,o.__data__,l,s)),i.push(o));return new Cn(r,i)},selectChild:function(t){return this.select(null==t?xe:function(t){return function(){return _e.call(this.children,t)}}("function"==typeof t?t:ve(t)))},selectChildren:function(t){return this.selectAll(null==t?we:function(t){return function(){return ke.call(this.children,t)}}("function"==typeof t?t:ve(t)))},filter:function(t){"function"!=typeof t&&(t=be(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,o=e[i],s=o.length,c=r[i]=[],l=0;l<s;++l)(a=o[l])&&t.call(a,a.__data__,l,o)&&c.push(a);return new Cn(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,Me);var n=e?Ae:Se,r=this._parents,i=this._groups;"function"!=typeof t&&(t=Ce(t));for(var a=i.length,o=new Array(a),s=new Array(a),c=new Array(a),l=0;l<a;++l){var u=r[l],h=i[l],d=h.length,f=Oe(t.call(u,u&&u.__data__,l,r)),p=f.length,g=s[l]=new Array(p),y=o[l]=new Array(p),m=c[l]=new Array(d);n(u,h,g,y,m,f,e);for(var b,v,_=0,x=0;_<p;++_)if(b=g[_]){for(_>=x&&(x=_+1);!(v=y[x])&&++x<p;);b._next=v||null}}return(o=new Cn(o,r))._enter=s,o._exit=c,o},enter:function(){return new Cn(this._enter||this._groups.map(Ee),this._parents)},exit:function(){return new Cn(this._exit||this._groups.map(Ee),this._parents)},join:function(t,e,n){var r=this.enter(),i=this,a=this.exit();return"function"==typeof t?(r=t(r))&&(r=r.selection()):r=r.append(t+""),null!=e&&(i=e(i))&&(i=i.selection()),null==n?a.remove():n(a),r&&i?r.merge(i).order():i},merge:function(t){for(var e=t.selection?t.selection():t,n=this._groups,r=e._groups,i=n.length,a=r.length,o=Math.min(i,a),s=new Array(i),c=0;c<o;++c)for(var l,u=n[c],h=r[c],d=u.length,f=s[c]=new Array(d),p=0;p<d;++p)(l=u[p]||h[p])&&(f[p]=l);for(;c<i;++c)s[c]=n[c];return new Cn(s,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var r,i=t[e],a=i.length-1,o=i[a];--a>=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=Ne);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a<r;++a){for(var o,s=n[a],c=s.length,l=i[a]=new Array(c),u=0;u<c;++u)(o=s[u])&&(l[u]=o);l.sort(e)}return new Cn(i,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r=t[e],i=0,a=r.length;i<a;++i){var o=r[i];if(o)return o}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,n=0,r=e.length;n<r;++n)for(var i,a=e[n],o=0,s=a.length;o<s;++o)(i=a[o])&&t.call(i,i.__data__,o,a);return this},attr:function(t,e){var n=Le(t);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((null==e?n.local?Fe:Ie:"function"==typeof e?n.local?ze:je:n.local?Pe:Re)(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?Ue:"function"==typeof e?We:$e)(t,e,null==n?"":n)):qe(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?He:"function"==typeof e?Ge:Ve)(t,e)):this.node()[t]},classed:function(t,e){var n=Xe(t+"");if(arguments.length<2){for(var r=Ze(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each(("function"==typeof e?nn:e?tn:en)(n,e))},text:function(t){return arguments.length?this.each(null==t?rn:("function"==typeof t?on:an)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?sn:("function"==typeof t?ln:cn)(t)):this.node().innerHTML},raise:function(){return this.each(un)},lower:function(){return this.each(hn)},append:function(t){var e="function"==typeof t?t:pn(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var n="function"==typeof t?t:pn(t),r=null==e?gn:"function"==typeof e?e:pe(e);return this.select((function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(yn)},clone:function(t){return this.select(t?bn:mn)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var r,i,a=vn(t+""),o=a.length;if(!(arguments.length<2)){for(s=e?xn:_n,r=0;r<o;++r)this.each(s(a[r],e,n));return this}var s=this.node().__on;if(s)for(var c,l=0,u=s.length;l<u;++l)for(r=0,c=s[l];r<o;++r)if((i=a[r]).type===c.type&&i.name===c.name)return c.value},dispatch:function(t,e){return this.each(("function"==typeof e?En:wn)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r,i=t[e],a=0,o=i.length;a<o;++a)(r=i[a])&&(yield r)}};const An=Sn;function Mn(t){return"string"==typeof t?new Cn([[document.querySelector(t)]],[document.documentElement]):new Cn([[t]],Tn)}const On={passive:!1},Nn={capture:!0,passive:!1};function Dn(t){t.stopImmediatePropagation()}function Bn(t){t.preventDefault(),t.stopImmediatePropagation()}function Ln(t){var e=t.document.documentElement,n=Mn(t).on("dragstart.drag",Bn,Nn);"onselectstart"in e?n.on("selectstart.drag",Bn,Nn):(e.__noselect=e.style.MozUserSelect,e.style.MozUserSelect="none")}function In(t,e){var n=t.document.documentElement,r=Mn(t).on("dragstart.drag",null);e&&(r.on("click.drag",Bn,Nn),setTimeout((function(){r.on("click.drag",null)}),0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}function Fn(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function Rn(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Pn(){}var jn=.7,zn=1/jn,Yn="\\s*([+-]?\\d+)\\s*",Un="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",$n="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Wn=/^#([0-9a-f]{3,8})$/,qn=new RegExp("^rgb\\("+[Yn,Yn,Yn]+"\\)$"),Hn=new RegExp("^rgb\\("+[$n,$n,$n]+"\\)$"),Vn=new RegExp("^rgba\\("+[Yn,Yn,Yn,Un]+"\\)$"),Gn=new RegExp("^rgba\\("+[$n,$n,$n,Un]+"\\)$"),Xn=new RegExp("^hsl\\("+[Un,$n,$n]+"\\)$"),Zn=new RegExp("^hsla\\("+[Un,$n,$n,Un]+"\\)$"),Qn={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Kn(){return this.rgb().formatHex()}function Jn(){return this.rgb().formatRgb()}function tr(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=Wn.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?er(e):3===n?new ar(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?nr(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?nr(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=qn.exec(t))?new ar(e[1],e[2],e[3],1):(e=Hn.exec(t))?new ar(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Vn.exec(t))?nr(e[1],e[2],e[3],e[4]):(e=Gn.exec(t))?nr(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Xn.exec(t))?lr(e[1],e[2]/100,e[3]/100,1):(e=Zn.exec(t))?lr(e[1],e[2]/100,e[3]/100,e[4]):Qn.hasOwnProperty(t)?er(Qn[t]):"transparent"===t?new ar(NaN,NaN,NaN,0):null}function er(t){return new ar(t>>16&255,t>>8&255,255&t,1)}function nr(t,e,n,r){return r<=0&&(t=e=n=NaN),new ar(t,e,n,r)}function rr(t){return t instanceof Pn||(t=tr(t)),t?new ar((t=t.rgb()).r,t.g,t.b,t.opacity):new ar}function ir(t,e,n,r){return 1===arguments.length?rr(t):new ar(t,e,n,null==r?1:r)}function ar(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function or(){return"#"+cr(this.r)+cr(this.g)+cr(this.b)}function sr(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function cr(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function lr(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new dr(t,e,n,r)}function ur(t){if(t instanceof dr)return new dr(t.h,t.s,t.l,t.opacity);if(t instanceof Pn||(t=tr(t)),!t)return new dr;if(t instanceof dr)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n<r):n===a?(r-e)/s+2:(e-n)/s+4,s/=c<.5?a+i:2-a-i,o*=60):s=c>0&&c<1?0:o,new dr(o,s,c,t.opacity)}function hr(t,e,n,r){return 1===arguments.length?ur(t):new dr(t,e,n,null==r?1:r)}function dr(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function fr(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function pr(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}function gr(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=r<e-1?t[r+2]:2*a-i;return pr((n-r/e)*e,o,i,a,s)}}function yr(t){var e=t.length;return function(n){var r=Math.floor(((n%=1)<0?++n:n)*e),i=t[(r+e-1)%e],a=t[r%e],o=t[(r+1)%e],s=t[(r+2)%e];return pr((n-r/e)*e,i,a,o,s)}}Fn(Pn,tr,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:Kn,formatHex:Kn,formatHsl:function(){return ur(this).formatHsl()},formatRgb:Jn,toString:Jn}),Fn(ar,ir,Rn(Pn,{brighter:function(t){return t=null==t?zn:Math.pow(zn,t),new ar(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?jn:Math.pow(jn,t),new ar(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:or,formatHex:or,formatRgb:sr,toString:sr})),Fn(dr,hr,Rn(Pn,{brighter:function(t){return t=null==t?zn:Math.pow(zn,t),new dr(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?jn:Math.pow(jn,t),new dr(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new ar(fr(t>=240?t-240:t+120,i,r),fr(t,i,r),fr(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const mr=t=>()=>t;function br(t,e){return function(n){return t+n*e}}function vr(t,e){var n=e-t;return n?br(t,n>180||n<-180?n-360*Math.round(n/360):n):mr(isNaN(t)?e:t)}function _r(t,e){var n=e-t;return n?br(t,n):mr(isNaN(t)?e:t)}const xr=function t(e){var n=function(t){return 1==(t=+t)?_r:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):mr(isNaN(e)?n:e)}}(e);function r(t,e){var r=n((t=ir(t)).r,(e=ir(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=_r(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function kr(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;n<i;++n)r=ir(e[n]),a[n]=r.r||0,o[n]=r.g||0,s[n]=r.b||0;return a=t(a),o=t(o),s=t(s),r.opacity=1,function(t){return r.r=a(t),r.g=o(t),r.b=s(t),r+""}}}var wr=kr(gr),Er=kr(yr);function Tr(t,e){e||(e=[]);var n,r=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(n=0;n<r;++n)i[n]=t[n]*(1-a)+e[n]*a;return i}}function Cr(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function Sr(t,e){return(Cr(e)?Tr:Ar)(t,e)}function Ar(t,e){var n,r=e?e.length:0,i=t?Math.min(r,t.length):0,a=new Array(i),o=new Array(r);for(n=0;n<i;++n)a[n]=Ir(t[n],e[n]);for(;n<r;++n)o[n]=e[n];return function(t){for(n=0;n<i;++n)o[n]=a[n](t);return o}}function Mr(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function Or(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function Nr(t,e){var n,r={},i={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?r[n]=Ir(t[n],e[n]):i[n]=e[n];return function(t){for(n in r)i[n]=r[n](t);return i}}var Dr=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Br=new RegExp(Dr.source,"g");function Lr(t,e){var n,r,i,a=Dr.lastIndex=Br.lastIndex=0,o=-1,s=[],c=[];for(t+="",e+="";(n=Dr.exec(t))&&(r=Br.exec(e));)(i=r.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:Or(n,r)})),a=Br.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?c[0]?function(t){return function(e){return t(e)+""}}(c[0].x):function(t){return function(){return t}}(e):(e=c.length,function(t){for(var n,r=0;r<e;++r)s[(n=c[r]).i]=n.x(t);return s.join("")})}function Ir(t,e){var n,r=typeof e;return null==e||"boolean"===r?mr(e):("number"===r?Or:"string"===r?(n=tr(e))?(e=n,xr):Lr:e instanceof tr?xr:e instanceof Date?Mr:Cr(e)?Tr:Array.isArray(e)?Ar:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?Nr:Or)(t,e)}function Fr(t){let e;for(;e=t.sourceEvent;)t=e;return t}function Rr(t,e){if(t=Fr(t),void 0===e&&(e=t.currentTarget),e){var n=e.ownerSVGElement||e;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=t.clientX,r.y=t.clientY,[(r=r.matrixTransform(e.getScreenCTM().inverse())).x,r.y]}if(e.getBoundingClientRect){var i=e.getBoundingClientRect();return[t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop]}}return[t.pageX,t.pageY]}var Pr,jr,zr=0,Yr=0,Ur=0,$r=0,Wr=0,qr=0,Hr="object"==typeof performance&&performance.now?performance:Date,Vr="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Gr(){return Wr||(Vr(Xr),Wr=Hr.now()+qr)}function Xr(){Wr=0}function Zr(){this._call=this._time=this._next=null}function Qr(t,e,n){var r=new Zr;return r.restart(t,e,n),r}function Kr(){Gr(),++zr;for(var t,e=Pr;e;)(t=Wr-e._time)>=0&&e._call.call(void 0,t),e=e._next;--zr}function Jr(){Wr=($r=Hr.now())+qr,zr=Yr=0;try{Kr()}finally{zr=0,function(){for(var t,e,n=Pr,r=1/0;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Pr=e);jr=t,ei(r)}(),Wr=0}}function ti(){var t=Hr.now(),e=t-$r;e>1e3&&(qr-=e,$r=t)}function ei(t){zr||(Yr&&(Yr=clearTimeout(Yr)),t-Wr>24?(t<1/0&&(Yr=setTimeout(Jr,t-Hr.now()-qr)),Ur&&(Ur=clearInterval(Ur))):(Ur||($r=Hr.now(),Ur=setInterval(ti,1e3)),zr=1,Vr(Jr)))}function ni(t,e,n){var r=new Zr;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}Zr.prototype=Qr.prototype={constructor:Zr,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Gr():+n)+(null==e?0:+e),this._next||jr===this||(jr?jr._next=this:Pr=this,jr=this),this._call=t,this._time=n,ei()},stop:function(){this._call&&(this._call=null,this._time=1/0,ei())}};var ri=de("start","end","cancel","interrupt"),ii=[];function ai(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var l,u,h,d;if(1!==n.state)return s();for(l in i)if((d=i[l]).name===n.name){if(3===d.state)return ni(a);4===d.state?(d.state=6,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete i[l]):+l<e&&(d.state=6,d.timer.stop(),d.on.call("cancel",t,t.__data__,d.index,d.group),delete i[l])}if(ni((function(){3===n.state&&(n.state=4,n.timer.restart(o,n.delay,n.time),o(c))})),n.state=2,n.on.call("start",t,t.__data__,n.index,n.group),2===n.state){for(n.state=3,r=new Array(h=n.tween.length),l=0,u=-1;l<h;++l)(d=n.tween[l].value.call(t,t.__data__,n.index,n.group))&&(r[++u]=d);r.length=u+1}}function o(e){for(var i=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(s),n.state=5,1),a=-1,o=r.length;++a<o;)r[a].call(t,i);5===n.state&&(n.on.call("end",t,t.__data__,n.index,n.group),s())}function s(){for(var r in n.state=6,n.timer.stop(),delete i[e],i)return;delete t.__transition}i[e]=n,n.timer=Qr((function(t){n.state=1,n.timer.restart(a,n.delay,n.time),n.delay<=t&&a(t-n.delay)}),0,n.time)}(t,n,{name:e,index:r,group:i,on:ri,tween:ii,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:0})}function oi(t,e){var n=ci(t,e);if(n.state>0)throw new Error("too late; already scheduled");return n}function si(t,e){var n=ci(t,e);if(n.state>3)throw new Error("too late; already running");return n}function ci(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function li(t,e){var n,r,i,a=t.__transition,o=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}}var ui,hi=180/Math.PI,di={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function fi(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r<e*n&&(t=-t,e=-e,c=-c,o=-o),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*hi,skewX:Math.atan(c)*hi,scaleX:o,scaleY:s}}function pi(t,e,n,r){function i(t){return t.length?t.pop()+" ":""}return function(a,o){var s=[],c=[];return a=t(a),o=t(o),function(t,r,i,a,o,s){if(t!==i||r!==a){var c=o.push("translate(",null,e,null,n);s.push({i:c-4,x:Or(t,i)},{i:c-2,x:Or(r,a)})}else(i||a)&&o.push("translate("+i+e+a+n)}(a.translateX,a.translateY,o.translateX,o.translateY,s,c),function(t,e,n,a){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:Or(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:Or(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:Or(t,n)},{i:s-2,x:Or(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n<r;)s[(e=c[n]).i]=e.x(t);return s.join("")}}}var gi=pi((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?di:fi(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),yi=pi((function(t){return null==t?di:(ui||(ui=document.createElementNS("http://www.w3.org/2000/svg","g")),ui.setAttribute("transform",t),(t=ui.transform.baseVal.consolidate())?fi((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):di)}),", ",")",")");function mi(t,e){var n,r;return function(){var i=si(this,t),a=i.tween;if(a!==n)for(var o=0,s=(r=n=a).length;o<s;++o)if(r[o].name===e){(r=r.slice()).splice(o,1);break}i.tween=r}}function bi(t,e,n){var r,i;if("function"!=typeof n)throw new Error;return function(){var a=si(this,t),o=a.tween;if(o!==r){i=(r=o).slice();for(var s={name:e,value:n},c=0,l=i.length;c<l;++c)if(i[c].name===e){i[c]=s;break}c===l&&i.push(s)}a.tween=i}}function vi(t,e,n){var r=t._id;return t.each((function(){var t=si(this,r);(t.value||(t.value={}))[e]=n.apply(this,arguments)})),function(t){return ci(t,r).value[e]}}function _i(t,e){var n;return("number"==typeof e?Or:e instanceof tr?xr:(n=tr(e))?(e=n,xr):Lr)(t,e)}function xi(t){return function(){this.removeAttribute(t)}}function ki(t){return function(){this.removeAttributeNS(t.space,t.local)}}function wi(t,e,n){var r,i,a=n+"";return function(){var o=this.getAttribute(t);return o===a?null:o===r?i:i=e(r=o,n)}}function Ei(t,e,n){var r,i,a=n+"";return function(){var o=this.getAttributeNS(t.space,t.local);return o===a?null:o===r?i:i=e(r=o,n)}}function Ti(t,e,n){var r,i,a;return function(){var o,s,c=n(this);if(null!=c)return(o=this.getAttribute(t))===(s=c+"")?null:o===r&&s===i?a:(i=s,a=e(r=o,c));this.removeAttribute(t)}}function Ci(t,e,n){var r,i,a;return function(){var o,s,c=n(this);if(null!=c)return(o=this.getAttributeNS(t.space,t.local))===(s=c+"")?null:o===r&&s===i?a:(i=s,a=e(r=o,c));this.removeAttributeNS(t.space,t.local)}}function Si(t,e){return function(n){this.setAttribute(t,e.call(this,n))}}function Ai(t,e){return function(n){this.setAttributeNS(t.space,t.local,e.call(this,n))}}function Mi(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&Ai(t,i)),n}return i._value=e,i}function Oi(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&Si(t,i)),n}return i._value=e,i}function Ni(t,e){return function(){oi(this,t).delay=+e.apply(this,arguments)}}function Di(t,e){return e=+e,function(){oi(this,t).delay=e}}function Bi(t,e){return function(){si(this,t).duration=+e.apply(this,arguments)}}function Li(t,e){return e=+e,function(){si(this,t).duration=e}}function Ii(t,e){if("function"!=typeof e)throw new Error;return function(){si(this,t).ease=e}}function Fi(t,e,n){var r,i,a=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?oi:si;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var Ri=An.prototype.constructor;function Pi(t){return function(){this.style.removeProperty(t)}}function ji(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function zi(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&ji(t,a,n)),r}return a._value=e,a}function Yi(t){return function(e){this.textContent=t.call(this,e)}}function Ui(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Yi(r)),e}return r._value=t,r}var $i=0;function Wi(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function qi(t){return An().transition(t)}function Hi(){return++$i}var Vi=An.prototype;function Gi(t){return t*t*t}function Xi(t){return--t*t*t+1}function Zi(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}Wi.prototype=qi.prototype={constructor:Wi,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=pe(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o<i;++o)for(var s,c,l=r[o],u=l.length,h=a[o]=new Array(u),d=0;d<u;++d)(s=l[d])&&(c=t.call(s,s.__data__,d,l))&&("__data__"in s&&(c.__data__=s.__data__),h[d]=c,ai(h[d],e,n,d,h,ci(s,n)));return new Wi(a,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=me(t));for(var r=this._groups,i=r.length,a=[],o=[],s=0;s<i;++s)for(var c,l=r[s],u=l.length,h=0;h<u;++h)if(c=l[h]){for(var d,f=t.call(c,c.__data__,h,l),p=ci(c,n),g=0,y=f.length;g<y;++g)(d=f[g])&&ai(d,e,n,g,f,p);a.push(f),o.push(c)}return new Wi(a,o,e,n)},selectChild:Vi.selectChild,selectChildren:Vi.selectChildren,filter:function(t){"function"!=typeof t&&(t=be(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,o=e[i],s=o.length,c=r[i]=[],l=0;l<s;++l)(a=o[l])&&t.call(a,a.__data__,l,o)&&c.push(a);return new Wi(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,r=e.length,i=n.length,a=Math.min(r,i),o=new Array(r),s=0;s<a;++s)for(var c,l=e[s],u=n[s],h=l.length,d=o[s]=new Array(h),f=0;f<h;++f)(c=l[f]||u[f])&&(d[f]=c);for(;s<r;++s)o[s]=e[s];return new Wi(o,this._parents,this._name,this._id)},selection:function(){return new Ri(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=Hi(),r=this._groups,i=r.length,a=0;a<i;++a)for(var o,s=r[a],c=s.length,l=0;l<c;++l)if(o=s[l]){var u=ci(o,e);ai(o,t,n,l,s,{time:u.time+u.delay+u.duration,delay:0,duration:u.duration,ease:u.ease})}return new Wi(r,this._parents,t,n)},call:Vi.call,nodes:Vi.nodes,node:Vi.node,size:Vi.size,empty:Vi.empty,each:Vi.each,on:function(t,e){var n=this._id;return arguments.length<2?ci(this.node(),n).on.on(t):this.each(Fi(n,t,e))},attr:function(t,e){var n=Le(t),r="transform"===n?yi:_i;return this.attrTween(t,"function"==typeof e?(n.local?Ci:Ti)(n,r,vi(this,"attr."+t,e)):null==e?(n.local?ki:xi)(n):(n.local?Ei:wi)(n,r,e))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var r=Le(t);return this.tween(n,(r.local?Mi:Oi)(r,e))},style:function(t,e,n){var r="transform"==(t+="")?gi:_i;return null==e?this.styleTween(t,function(t,e){var n,r,i;return function(){var a=qe(this,t),o=(this.style.removeProperty(t),qe(this,t));return a===o?null:a===n&&o===r?i:i=e(n=a,r=o)}}(t,r)).on("end.style."+t,Pi(t)):"function"==typeof e?this.styleTween(t,function(t,e,n){var r,i,a;return function(){var o=qe(this,t),s=n(this),c=s+"";return null==s&&(this.style.removeProperty(t),c=s=qe(this,t)),o===c?null:o===r&&c===i?a:(i=c,a=e(r=o,s))}}(t,r,vi(this,"style."+t,e))).each(function(t,e){var n,r,i,a,o="style."+e,s="end."+o;return function(){var c=si(this,t),l=c.on,u=null==c.value[o]?a||(a=Pi(e)):void 0;l===n&&i===u||(r=(n=l).copy()).on(s,i=u),c.on=r}}(this._id,t)):this.styleTween(t,function(t,e,n){var r,i,a=n+"";return function(){var o=qe(this,t);return o===a?null:o===r?i:i=e(r=o,n)}}(t,r,e),n).on("end.style."+t,null)},styleTween:function(t,e,n){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,zi(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(vi(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,Ui(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,i=ci(this.node(),n).tween,a=0,o=i.length;a<o;++a)if((r=i[a]).name===t)return r.value;return null}return this.each((null==e?mi:bi)(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Ni:Di)(e,t)):ci(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Bi:Li)(e,t)):ci(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(Ii(e,t)):ci(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var n=e.apply(this,arguments);if("function"!=typeof n)throw new Error;si(this,t).ease=n}}(this._id,t))},end:function(){var t,e,n=this,r=n._id,i=n.size();return new Promise((function(a,o){var s={value:o},c={value:function(){0==--i&&a()}};n.each((function(){var n=si(this,r),i=n.on;i!==t&&((e=(t=i).copy())._.cancel.push(s),e._.interrupt.push(s),e._.end.push(c)),n.on=e})),0===i&&a()}))},[Symbol.iterator]:Vi[Symbol.iterator]};var Qi={time:null,delay:0,duration:250,ease:Zi};function Ki(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return n}An.prototype.interrupt=function(t){return this.each((function(){li(this,t)}))},An.prototype.transition=function(t){var e,n;t instanceof Wi?(e=t._id,t=t._name):(e=Hi(),(n=Qi).time=Gr(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var o,s=r[a],c=s.length,l=0;l<c;++l)(o=s[l])&&ai(o,t,e,l,s,n||Ki(o,e));return new Wi(r,this._parents,t,e)};var Ji=[null];function ta(t,e){var n,r,i=t.__transition;if(i)for(r in e=null==e?null:e+"",i)if((n=i[r]).state>1&&n.name===e)return new Wi([[t]],Ji,e,+r);return null}const ea=t=>()=>t;function na(t,{sourceEvent:e,target:n,selection:r,mode:i,dispatch:a}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},selection:{value:r,enumerable:!0,configurable:!0},mode:{value:i,enumerable:!0,configurable:!0},_:{value:a}})}function ra(t){t.stopImmediatePropagation()}function ia(t){t.preventDefault(),t.stopImmediatePropagation()}var aa={name:"drag"},oa={name:"space"},sa={name:"handle"},ca={name:"center"};const{abs:la,max:ua,min:ha}=Math;function da(t){return[+t[0],+t[1]]}function fa(t){return[da(t[0]),da(t[1])]}var pa={name:"x",handles:["w","e"].map(ka),input:function(t,e){return null==t?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},ga={name:"y",handles:["n","s"].map(ka),input:function(t,e){return null==t?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},ya={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(ka),input:function(t){return null==t?null:fa(t)},output:function(t){return t}},ma={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},ba={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},va={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},_a={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},xa={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function ka(t){return{type:t}}function wa(t){return!t.ctrlKey&&!t.button}function Ea(){var t=this.ownerSVGElement||this;return t.hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function Ta(){return navigator.maxTouchPoints||"ontouchstart"in this}function Ca(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function Sa(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function Aa(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function Ma(){return Da(pa)}function Oa(){return Da(ga)}function Na(){return Da(ya)}function Da(t){var e,n=Ea,r=wa,i=Ta,a=!0,o=de("start","brush","end"),s=6;function c(e){var n=e.property("__brush",g).selectAll(".overlay").data([ka("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",ma.overlay).merge(n).each((function(){var t=Ca(this).extent;Mn(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])})),e.selectAll(".selection").data([ka("selection")]).enter().append("rect").attr("class","selection").attr("cursor",ma.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=e.selectAll(".handle").data(t.handles,(function(t){return t.type}));r.exit().remove(),r.enter().append("rect").attr("class",(function(t){return"handle handle--"+t.type})).attr("cursor",(function(t){return ma[t.type]})),e.each(l).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",d).filter(i).on("touchstart.brush",d).on("touchmove.brush",f).on("touchend.brush touchcancel.brush",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function l(){var t=Mn(this),e=Ca(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",(function(t){return"e"===t.type[t.type.length-1]?e[1][0]-s/2:e[0][0]-s/2})).attr("y",(function(t){return"s"===t.type[0]?e[1][1]-s/2:e[0][1]-s/2})).attr("width",(function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+s:s})).attr("height",(function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+s:s}))):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function u(t,e,n){var r=t.__brush.emitter;return!r||n&&r.clean?new h(t,e,n):r}function h(t,e,n){this.that=t,this.args=e,this.state=t.__brush,this.active=0,this.clean=n}function d(n){if((!e||n.touches)&&r.apply(this,arguments)){var i,o,s,c,h,d,f,p,g,y,m,b=this,v=n.target.__data__.type,_="selection"===(a&&n.metaKey?v="overlay":v)?aa:a&&n.altKey?ca:sa,x=t===ga?null:_a[v],k=t===pa?null:xa[v],w=Ca(b),E=w.extent,T=w.selection,C=E[0][0],S=E[0][1],A=E[1][0],M=E[1][1],O=0,N=0,D=x&&k&&a&&n.shiftKey,B=Array.from(n.touches||[n],(t=>{const e=t.identifier;return(t=Rr(t,b)).point0=t.slice(),t.identifier=e,t}));li(b);var L=u(b,arguments,!0).beforestart();if("overlay"===v){T&&(g=!0);const e=[B[0],B[1]||B[0]];w.selection=T=[[i=t===ga?C:ha(e[0][0],e[1][0]),s=t===pa?S:ha(e[0][1],e[1][1])],[h=t===ga?A:ua(e[0][0],e[1][0]),f=t===pa?M:ua(e[0][1],e[1][1])]],B.length>1&&j(n)}else i=T[0][0],s=T[0][1],h=T[1][0],f=T[1][1];o=i,c=s,d=h,p=f;var I=Mn(b).attr("pointer-events","none"),F=I.selectAll(".overlay").attr("cursor",ma[v]);if(n.touches)L.moved=P,L.ended=z;else{var R=Mn(n.view).on("mousemove.brush",P,!0).on("mouseup.brush",z,!0);a&&R.on("keydown.brush",Y,!0).on("keyup.brush",U,!0),Ln(n.view)}l.call(b),L.start(n,_.name)}function P(t){for(const e of t.changedTouches||[t])for(const t of B)t.identifier===e.identifier&&(t.cur=Rr(e,b));if(D&&!y&&!m&&1===B.length){const t=B[0];la(t.cur[0]-t[0])>la(t.cur[1]-t[1])?m=!0:y=!0}for(const e of B)e.cur&&(e[0]=e.cur[0],e[1]=e.cur[1]);g=!0,ia(t),j(t)}function j(t){const e=B[0],n=e.point0;var r;switch(O=e[0]-n[0],N=e[1]-n[1],_){case oa:case aa:x&&(O=ua(C-i,ha(A-h,O)),o=i+O,d=h+O),k&&(N=ua(S-s,ha(M-f,N)),c=s+N,p=f+N);break;case sa:B[1]?(x&&(o=ua(C,ha(A,B[0][0])),d=ua(C,ha(A,B[1][0])),x=1),k&&(c=ua(S,ha(M,B[0][1])),p=ua(S,ha(M,B[1][1])),k=1)):(x<0?(O=ua(C-i,ha(A-i,O)),o=i+O,d=h):x>0&&(O=ua(C-h,ha(A-h,O)),o=i,d=h+O),k<0?(N=ua(S-s,ha(M-s,N)),c=s+N,p=f):k>0&&(N=ua(S-f,ha(M-f,N)),c=s,p=f+N));break;case ca:x&&(o=ua(C,ha(A,i-O*x)),d=ua(C,ha(A,h+O*x))),k&&(c=ua(S,ha(M,s-N*k)),p=ua(S,ha(M,f+N*k)))}d<o&&(x*=-1,r=i,i=h,h=r,r=o,o=d,d=r,v in ba&&F.attr("cursor",ma[v=ba[v]])),p<c&&(k*=-1,r=s,s=f,f=r,r=c,c=p,p=r,v in va&&F.attr("cursor",ma[v=va[v]])),w.selection&&(T=w.selection),y&&(o=T[0][0],d=T[1][0]),m&&(c=T[0][1],p=T[1][1]),T[0][0]===o&&T[0][1]===c&&T[1][0]===d&&T[1][1]===p||(w.selection=[[o,c],[d,p]],l.call(b),L.brush(t,_.name))}function z(t){if(ra(t),t.touches){if(t.touches.length)return;e&&clearTimeout(e),e=setTimeout((function(){e=null}),500)}else In(t.view,g),R.on("keydown.brush keyup.brush mousemove.brush mouseup.brush",null);I.attr("pointer-events","all"),F.attr("cursor",ma.overlay),w.selection&&(T=w.selection),Sa(T)&&(w.selection=null,l.call(b)),L.end(t,_.name)}function Y(t){switch(t.keyCode){case 16:D=x&&k;break;case 18:_===sa&&(x&&(h=d-O*x,i=o+O*x),k&&(f=p-N*k,s=c+N*k),_=ca,j(t));break;case 32:_!==sa&&_!==ca||(x<0?h=d-O:x>0&&(i=o-O),k<0?f=p-N:k>0&&(s=c-N),_=oa,F.attr("cursor",ma.selection),j(t));break;default:return}ia(t)}function U(t){switch(t.keyCode){case 16:D&&(y=m=D=!1,j(t));break;case 18:_===ca&&(x<0?h=d:x>0&&(i=o),k<0?f=p:k>0&&(s=c),_=sa,j(t));break;case 32:_===oa&&(t.altKey?(x&&(h=d-O*x,i=o+O*x),k&&(f=p-N*k,s=c+N*k),_=ca):(x<0?h=d:x>0&&(i=o),k<0?f=p:k>0&&(s=c),_=sa),F.attr("cursor",ma[v]),j(t));break;default:return}ia(t)}}function f(t){u(this,arguments).moved(t)}function p(t){u(this,arguments).ended(t)}function g(){var e=this.__brush||{selection:null};return e.extent=fa(n.apply(this,arguments)),e.dim=t,e}return c.move=function(e,n,r){e.tween?e.on("start.brush",(function(t){u(this,arguments).beforestart().start(t)})).on("interrupt.brush end.brush",(function(t){u(this,arguments).end(t)})).tween("brush",(function(){var e=this,r=e.__brush,i=u(e,arguments),a=r.selection,o=t.input("function"==typeof n?n.apply(this,arguments):n,r.extent),s=Ir(a,o);function c(t){r.selection=1===t&&null===o?null:s(t),l.call(e),i.brush()}return null!==a&&null!==o?c:c(1)})):e.each((function(){var e=this,i=arguments,a=e.__brush,o=t.input("function"==typeof n?n.apply(e,i):n,a.extent),s=u(e,i).beforestart();li(e),a.selection=null===o?null:o,l.call(e),s.start(r).brush(r).end(r)}))},c.clear=function(t,e){c.move(t,null,e)},h.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(t,e){return this.starting?(this.starting=!1,this.emit("start",t,e)):this.emit("brush",t),this},brush:function(t,e){return this.emit("brush",t,e),this},end:function(t,e){return 0==--this.active&&(delete this.state.emitter,this.emit("end",t,e)),this},emit:function(e,n,r){var i=Mn(this.that).datum();o.call(e,this.that,new na(e,{sourceEvent:n,target:c,selection:t.output(this.state.selection),mode:r,dispatch:o}),i)}},c.extent=function(t){return arguments.length?(n="function"==typeof t?t:ea(fa(t)),c):n},c.filter=function(t){return arguments.length?(r="function"==typeof t?t:ea(!!t),c):r},c.touchable=function(t){return arguments.length?(i="function"==typeof t?t:ea(!!t),c):i},c.handleSize=function(t){return arguments.length?(s=+t,c):s},c.keyModifiers=function(t){return arguments.length?(a=!!t,c):a},c.on=function(){var t=o.on.apply(o,arguments);return t===o?c:t},c}var Ba=Math.abs,La=Math.cos,Ia=Math.sin,Fa=Math.PI,Ra=Fa/2,Pa=2*Fa,ja=Math.max,za=1e-12;function Ya(t,e){return Array.from({length:e-t},((e,n)=>t+n))}function Ua(t){return function(e,n){return t(e.source.value+e.target.value,n.source.value+n.target.value)}}function $a(){return Ha(!1,!1)}function Wa(){return Ha(!1,!0)}function qa(){return Ha(!0,!1)}function Ha(t,e){var n=0,r=null,i=null,a=null;function o(o){var s,c=o.length,l=new Array(c),u=Ya(0,c),h=new Array(c*c),d=new Array(c),f=0;o=Float64Array.from({length:c*c},e?(t,e)=>o[e%c][e/c|0]:(t,e)=>o[e/c|0][e%c]);for(let e=0;e<c;++e){let n=0;for(let r=0;r<c;++r)n+=o[e*c+r]+t*o[r*c+e];f+=l[e]=n}s=(f=ja(0,Pa-n*c)/f)?n:Pa/c;{let e=0;r&&u.sort(((t,e)=>r(l[t],l[e])));for(const n of u){const r=e;if(t){const t=Ya(1+~c,c).filter((t=>t<0?o[~t*c+n]:o[n*c+t]));i&&t.sort(((t,e)=>i(t<0?-o[~t*c+n]:o[n*c+t],e<0?-o[~e*c+n]:o[n*c+e])));for(const r of t)r<0?(h[~r*c+n]||(h[~r*c+n]={source:null,target:null})).target={index:n,startAngle:e,endAngle:e+=o[~r*c+n]*f,value:o[~r*c+n]}:(h[n*c+r]||(h[n*c+r]={source:null,target:null})).source={index:n,startAngle:e,endAngle:e+=o[n*c+r]*f,value:o[n*c+r]};d[n]={index:n,startAngle:r,endAngle:e,value:l[n]}}else{const t=Ya(0,c).filter((t=>o[n*c+t]||o[t*c+n]));i&&t.sort(((t,e)=>i(o[n*c+t],o[n*c+e])));for(const r of t){let t;if(n<r?(t=h[n*c+r]||(h[n*c+r]={source:null,target:null}),t.source={index:n,startAngle:e,endAngle:e+=o[n*c+r]*f,value:o[n*c+r]}):(t=h[r*c+n]||(h[r*c+n]={source:null,target:null}),t.target={index:n,startAngle:e,endAngle:e+=o[n*c+r]*f,value:o[n*c+r]},n===r&&(t.source=t.target)),t.source&&t.target&&t.source.value<t.target.value){const e=t.source;t.source=t.target,t.target=e}}d[n]={index:n,startAngle:r,endAngle:e,value:l[n]}}e+=s}}return(h=Object.values(h)).groups=d,a?h.sort(a):h}return o.padAngle=function(t){return arguments.length?(n=ja(0,t),o):n},o.sortGroups=function(t){return arguments.length?(r=t,o):r},o.sortSubgroups=function(t){return arguments.length?(i=t,o):i},o.sortChords=function(t){return arguments.length?(null==t?a=null:(a=Ua(t))._=t,o):a&&a._},o}const Va=Math.PI,Ga=2*Va,Xa=1e-6,Za=Ga-Xa;function Qa(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function Ka(){return new Qa}Qa.prototype=Ka.prototype={constructor:Qa,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,n,r){this._+="Q"+ +t+","+ +e+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(t,e,n,r,i,a){this._+="C"+ +t+","+ +e+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function(t,e,n,r,i){t=+t,e=+e,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,s=n-t,c=r-e,l=a-t,u=o-e,h=l*l+u*u;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(h>Xa)if(Math.abs(u*s-c*l)>Xa&&i){var d=n-a,f=r-o,p=s*s+c*c,g=d*d+f*f,y=Math.sqrt(p),m=Math.sqrt(h),b=i*Math.tan((Va-Math.acos((p+h-g)/(2*y*m)))/2),v=b/m,_=b/y;Math.abs(v-1)>Xa&&(this._+="L"+(t+v*l)+","+(e+v*u)),this._+="A"+i+","+i+",0,0,"+ +(u*d>l*f)+","+(this._x1=t+_*s)+","+(this._y1=e+_*c)}else this._+="L"+(this._x1=t)+","+(this._y1=e)},arc:function(t,e,n,r,i,a){t=+t,e=+e,a=!!a;var o=(n=+n)*Math.cos(r),s=n*Math.sin(r),c=t+o,l=e+s,u=1^a,h=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+l:(Math.abs(this._x1-c)>Xa||Math.abs(this._y1-l)>Xa)&&(this._+="L"+c+","+l),n&&(h<0&&(h=h%Ga+Ga),h>Za?this._+="A"+n+","+n+",0,1,"+u+","+(t-o)+","+(e-s)+"A"+n+","+n+",0,1,"+u+","+(this._x1=c)+","+(this._y1=l):h>Xa&&(this._+="A"+n+","+n+",0,"+ +(h>=Va)+","+u+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};const Ja=Ka;var to=Array.prototype.slice;function eo(t){return function(){return t}}function no(t){return t.source}function ro(t){return t.target}function io(t){return t.radius}function ao(t){return t.startAngle}function oo(t){return t.endAngle}function so(){return 0}function co(){return 10}function lo(t){var e=no,n=ro,r=io,i=io,a=ao,o=oo,s=so,c=null;function l(){var l,u=e.apply(this,arguments),h=n.apply(this,arguments),d=s.apply(this,arguments)/2,f=to.call(arguments),p=+r.apply(this,(f[0]=u,f)),g=a.apply(this,f)-Ra,y=o.apply(this,f)-Ra,m=+i.apply(this,(f[0]=h,f)),b=a.apply(this,f)-Ra,v=o.apply(this,f)-Ra;if(c||(c=l=Ja()),d>za&&(Ba(y-g)>2*d+za?y>g?(g+=d,y-=d):(g-=d,y+=d):g=y=(g+y)/2,Ba(v-b)>2*d+za?v>b?(b+=d,v-=d):(b-=d,v+=d):b=v=(b+v)/2),c.moveTo(p*La(g),p*Ia(g)),c.arc(0,0,p,g,y),g!==b||y!==v)if(t){var _=+t.apply(this,arguments),x=m-_,k=(b+v)/2;c.quadraticCurveTo(0,0,x*La(b),x*Ia(b)),c.lineTo(m*La(k),m*Ia(k)),c.lineTo(x*La(v),x*Ia(v))}else c.quadraticCurveTo(0,0,m*La(b),m*Ia(b)),c.arc(0,0,m,b,v);if(c.quadraticCurveTo(0,0,p*La(g),p*Ia(g)),c.closePath(),l)return c=null,l+""||null}return t&&(l.headRadius=function(e){return arguments.length?(t="function"==typeof e?e:eo(+e),l):t}),l.radius=function(t){return arguments.length?(r=i="function"==typeof t?t:eo(+t),l):r},l.sourceRadius=function(t){return arguments.length?(r="function"==typeof t?t:eo(+t),l):r},l.targetRadius=function(t){return arguments.length?(i="function"==typeof t?t:eo(+t),l):i},l.startAngle=function(t){return arguments.length?(a="function"==typeof t?t:eo(+t),l):a},l.endAngle=function(t){return arguments.length?(o="function"==typeof t?t:eo(+t),l):o},l.padAngle=function(t){return arguments.length?(s="function"==typeof t?t:eo(+t),l):s},l.source=function(t){return arguments.length?(e=t,l):e},l.target=function(t){return arguments.length?(n=t,l):n},l.context=function(t){return arguments.length?(c=null==t?null:t,l):c},l}function uo(){return lo()}function ho(){return lo(co)}const fo=Math.PI/180,po=180/Math.PI,go=.96422,yo=.82521,mo=4/29,bo=6/29,vo=3*bo*bo;function _o(t){if(t instanceof wo)return new wo(t.l,t.a,t.b,t.opacity);if(t instanceof No)return Do(t);t instanceof ar||(t=rr(t));var e,n,r=So(t.r),i=So(t.g),a=So(t.b),o=Eo((.2225045*r+.7168786*i+.0606169*a)/1);return r===i&&i===a?e=n=o:(e=Eo((.4360747*r+.3850649*i+.1430804*a)/go),n=Eo((.0139322*r+.0971045*i+.7141733*a)/yo)),new wo(116*o-16,500*(e-o),200*(o-n),t.opacity)}function xo(t,e){return new wo(t,0,0,null==e?1:e)}function ko(t,e,n,r){return 1===arguments.length?_o(t):new wo(t,e,n,null==r?1:r)}function wo(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Eo(t){return t>.008856451679035631?Math.pow(t,1/3):t/vo+mo}function To(t){return t>bo?t*t*t:vo*(t-mo)}function Co(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function So(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Ao(t){if(t instanceof No)return new No(t.h,t.c,t.l,t.opacity);if(t instanceof wo||(t=_o(t)),0===t.a&&0===t.b)return new No(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*po;return new No(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Mo(t,e,n,r){return 1===arguments.length?Ao(t):new No(n,e,t,null==r?1:r)}function Oo(t,e,n,r){return 1===arguments.length?Ao(t):new No(t,e,n,null==r?1:r)}function No(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function Do(t){if(isNaN(t.h))return new wo(t.l,0,0,t.opacity);var e=t.h*fo;return new wo(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}Fn(wo,ko,Rn(Pn,{brighter:function(t){return new wo(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new wo(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new ar(Co(3.1338561*(e=go*To(e))-1.6168667*(t=1*To(t))-.4906146*(n=yo*To(n))),Co(-.9787684*e+1.9161415*t+.033454*n),Co(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),Fn(No,Oo,Rn(Pn,{brighter:function(t){return new No(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new No(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return Do(this).rgb()}}));var Bo=-.14861,Lo=1.78277,Io=-.29227,Fo=-.90649,Ro=1.97294,Po=Ro*Fo,jo=Ro*Lo,zo=Lo*Io-Fo*Bo;function Yo(t){if(t instanceof $o)return new $o(t.h,t.s,t.l,t.opacity);t instanceof ar||(t=rr(t));var e=t.r/255,n=t.g/255,r=t.b/255,i=(zo*r+Po*e-jo*n)/(zo+Po-jo),a=r-i,o=(Ro*(n-i)-Io*a)/Fo,s=Math.sqrt(o*o+a*a)/(Ro*i*(1-i)),c=s?Math.atan2(o,a)*po-120:NaN;return new $o(c<0?c+360:c,s,i,t.opacity)}function Uo(t,e,n,r){return 1===arguments.length?Yo(t):new $o(t,e,n,null==r?1:r)}function $o(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}Fn($o,Uo,Rn(Pn,{brighter:function(t){return t=null==t?zn:Math.pow(zn,t),new $o(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?jn:Math.pow(jn,t),new $o(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*fo,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),i=Math.sin(t);return new ar(255*(e+n*(Bo*r+Lo*i)),255*(e+n*(Io*r+Fo*i)),255*(e+n*(Ro*r)),this.opacity)}}));var Wo=Array.prototype.slice;function qo(t,e){return t-e}const Ho=t=>()=>t;function Vo(t,e){for(var n,r=-1,i=e.length;++r<i;)if(n=Go(t,e[r]))return n;return 0}function Go(t,e){for(var n=e[0],r=e[1],i=-1,a=0,o=t.length,s=o-1;a<o;s=a++){var c=t[a],l=c[0],u=c[1],h=t[s],d=h[0],f=h[1];if(Xo(c,h,e))return 0;u>r!=f>r&&n<(d-l)*(r-u)/(f-u)+l&&(i=-i)}return i}function Xo(t,e,n){var r,i,a,o;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],a=n[r],o=e[r],i<=a&&a<=o||o<=a&&a<=i)}function Zo(){}var Qo=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function Ko(){var t=1,e=1,n=rt,r=s;function i(t){var e=n(t);if(Array.isArray(e))e=e.slice().sort(qo);else{const n=_(t),r=et(n[0],n[1],e);e=J(Math.floor(n[0]/r)*r,Math.floor(n[1]/r-1)*r,e)}return e.map((e=>a(t,e)))}function a(n,i){var a=[],s=[];return function(n,r,i){var a,s,c,l,u,h,d=new Array,f=new Array;for(a=s=-1,l=n[0]>=r,Qo[l<<1].forEach(p);++a<t-1;)c=l,l=n[a+1]>=r,Qo[c|l<<1].forEach(p);for(Qo[l<<0].forEach(p);++s<e-1;){for(a=-1,l=n[s*t+t]>=r,u=n[s*t]>=r,Qo[l<<1|u<<2].forEach(p);++a<t-1;)c=l,l=n[s*t+t+a+1]>=r,h=u,u=n[s*t+a+1]>=r,Qo[c|l<<1|u<<2|h<<3].forEach(p);Qo[l|u<<3].forEach(p)}for(a=-1,u=n[s*t]>=r,Qo[u<<2].forEach(p);++a<t-1;)h=u,u=n[s*t+a+1]>=r,Qo[u<<2|h<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+s],c=[t[1][0]+a,t[1][1]+s],l=o(r),u=o(c);(e=f[l])?(n=d[u])?(delete f[e.end],delete d[n.start],e===n?(e.ring.push(c),i(e.ring)):d[e.start]=f[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete f[e.end],e.ring.push(c),f[e.end=u]=e):(e=d[u])?(n=f[l])?(delete d[e.start],delete f[n.end],e===n?(e.ring.push(c),i(e.ring)):d[n.start]=f[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete d[e.start],e.ring.unshift(r),d[e.start=l]=e):d[l]=f[u]={start:l,end:u,ring:[r,c]}}Qo[u<<3].forEach(p)}(n,i,(function(t){r(t,n,i),function(t){for(var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];++e<n;)r+=t[e-1][1]*t[e][0]-t[e-1][0]*t[e][1];return r}(t)>0?a.push([t]):s.push(t)})),s.forEach((function(t){for(var e,n=0,r=a.length;n<r;++n)if(-1!==Vo((e=a[n])[0],t))return void e.push(t)})),{type:"MultiPolygon",value:i,coordinates:a}}function o(e){return 2*e[0]+e[1]*(t+1)*4}function s(n,r,i){n.forEach((function(n){var a,o=n[0],s=n[1],c=0|o,l=0|s,u=r[l*t+c];o>0&&o<t&&c===o&&(a=r[l*t+c-1],n[0]=o+(i-a)/(u-a)-.5),s>0&&s<e&&l===s&&(a=r[(l-1)*t+c],n[1]=s+(i-a)/(u-a)-.5)}))}return i.contour=a,i.size=function(n){if(!arguments.length)return[t,e];var r=Math.floor(n[0]),a=Math.floor(n[1]);if(!(r>=0&&a>=0))throw new Error("invalid size");return t=r,e=a,i},i.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?Ho(Wo.call(t)):Ho(t),i):n},i.smooth=function(t){return arguments.length?(r=t?s:Zo,i):r===s},i}function Jo(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o<i;++o)for(var s=0,c=0;s<r+n;++s)s<r&&(c+=t.data[s+o*r]),s>=n&&(s>=a&&(c-=t.data[s-a+o*r]),e.data[s-n+o*r]=c/Math.min(s+1,r-1+a-s,a))}function ts(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o<r;++o)for(var s=0,c=0;s<i+n;++s)s<i&&(c+=t.data[o+s*r]),s>=n&&(s>=a&&(c-=t.data[o+(s-a)*r]),e.data[o+(s-n)*r]=c/Math.min(s+1,i-1+a-s,a))}function es(t){return t[0]}function ns(t){return t[1]}function rs(){return 1}function is(){var t=es,e=ns,n=rs,r=960,i=500,a=20,o=2,s=3*a,c=r+2*s>>o,l=i+2*s>>o,u=Ho(20);function h(r){var i=new Float32Array(c*l),h=new Float32Array(c*l),f=Math.pow(2,-o);r.forEach((function(r,a,o){var u=(t(r,a,o)+s)*f,h=(e(r,a,o)+s)*f,d=+n(r,a,o);if(u>=0&&u<c&&h>=0&&h<l){var p=Math.floor(u),g=Math.floor(h),y=u-p-.5,m=h-g-.5;i[p+g*c]+=(1-y)*(1-m)*d,i[p+1+g*c]+=y*(1-m)*d,i[p+1+(g+1)*c]+=y*m*d,i[p+(g+1)*c]+=(1-y)*m*d}})),Jo({width:c,height:l,data:i},{width:c,height:l,data:h},a>>o),ts({width:c,height:l,data:h},{width:c,height:l,data:i},a>>o),Jo({width:c,height:l,data:i},{width:c,height:l,data:h},a>>o),ts({width:c,height:l,data:h},{width:c,height:l,data:i},a>>o),Jo({width:c,height:l,data:i},{width:c,height:l,data:h},a>>o),ts({width:c,height:l,data:h},{width:c,height:l,data:i},a>>o);var p=u(i);if(!Array.isArray(p)){var g=at(i);p=et(0,g,p),(p=xt(0,Math.floor(g/p)*p,p)).shift()}return Ko().thresholds(p).size([c,l])(i).map(d)}function d(t){return t.value*=Math.pow(2,-2*o),t.coordinates.forEach(f),t}function f(t){t.forEach(p)}function p(t){t.forEach(g)}function g(t){t[0]=t[0]*Math.pow(2,o)-s,t[1]=t[1]*Math.pow(2,o)-s}function y(){return c=r+2*(s=3*a)>>o,l=i+2*s>>o,h}return h.x=function(e){return arguments.length?(t="function"==typeof e?e:Ho(+e),h):t},h.y=function(t){return arguments.length?(e="function"==typeof t?t:Ho(+t),h):e},h.weight=function(t){return arguments.length?(n="function"==typeof t?t:Ho(+t),h):n},h.size=function(t){if(!arguments.length)return[r,i];var e=+t[0],n=+t[1];if(!(e>=0&&n>=0))throw new Error("invalid size");return r=e,i=n,y()},h.cellSize=function(t){if(!arguments.length)return 1<<o;if(!((t=+t)>=1))throw new Error("invalid cell size");return o=Math.floor(Math.log(t)/Math.LN2),y()},h.thresholds=function(t){return arguments.length?(u="function"==typeof t?t:Array.isArray(t)?Ho(Wo.call(t)):Ho(t),h):u},h.bandwidth=function(t){if(!arguments.length)return Math.sqrt(a*(a+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return a=Math.round((Math.sqrt(4*t*t+1)-1)/2),y()},h}const as=134217729;function os(t,e,n,r,i){let a,o,s,c,l=e[0],u=r[0],h=0,d=0;u>l==u>-l?(a=l,l=e[++h]):(a=u,u=r[++d]);let f=0;if(h<t&&d<n)for(u>l==u>-l?(o=l+a,s=a-(o-l),l=e[++h]):(o=u+a,s=a-(o-u),u=r[++d]),a=o,0!==s&&(i[f++]=s);h<t&&d<n;)u>l==u>-l?(o=a+l,c=o-a,s=a-(o-c)+(l-c),l=e[++h]):(o=a+u,c=o-a,s=a-(o-c)+(u-c),u=r[++d]),a=o,0!==s&&(i[f++]=s);for(;h<t;)o=a+l,c=o-a,s=a-(o-c)+(l-c),l=e[++h],a=o,0!==s&&(i[f++]=s);for(;d<n;)o=a+u,c=o-a,s=a-(o-c)+(u-c),u=r[++d],a=o,0!==s&&(i[f++]=s);return 0===a&&0!==f||(i[f++]=a),f}function ss(t){return new Float64Array(t)}const cs=ss(4),ls=ss(8),us=ss(12),hs=ss(16),ds=ss(4);function fs(t,e,n,r,i,a){const o=(e-a)*(n-i),s=(t-i)*(r-a),c=o-s;if(0===o||0===s||o>0!=s>0)return c;const l=Math.abs(o+s);return Math.abs(c)>=33306690738754716e-32*l?c:-function(t,e,n,r,i,a,o){let s,c,l,u,h,d,f,p,g,y,m,b,v,_,x,k,w,E;const T=t-i,C=n-i,S=e-a,A=r-a;_=T*A,d=as*T,f=d-(d-T),p=T-f,d=as*A,g=d-(d-A),y=A-g,x=p*y-(_-f*g-p*g-f*y),k=S*C,d=as*S,f=d-(d-S),p=S-f,d=as*C,g=d-(d-C),y=C-g,w=p*y-(k-f*g-p*g-f*y),m=x-w,h=x-m,cs[0]=x-(m+h)+(h-w),b=_+m,h=b-_,v=_-(b-h)+(m-h),m=v-k,h=v-m,cs[1]=v-(m+h)+(h-k),E=b+m,h=E-b,cs[2]=b-(E-h)+(m-h),cs[3]=E;let M=function(t,e){let n=e[0];for(let r=1;r<4;r++)n+=e[r];return n}(0,cs),O=22204460492503146e-32*o;if(M>=O||-M>=O)return M;if(h=t-T,s=t-(T+h)+(h-i),h=n-C,l=n-(C+h)+(h-i),h=e-S,c=e-(S+h)+(h-a),h=r-A,u=r-(A+h)+(h-a),0===s&&0===c&&0===l&&0===u)return M;if(O=11093356479670487e-47*o+33306690738754706e-32*Math.abs(M),M+=T*u+A*s-(S*l+C*c),M>=O||-M>=O)return M;_=s*A,d=as*s,f=d-(d-s),p=s-f,d=as*A,g=d-(d-A),y=A-g,x=p*y-(_-f*g-p*g-f*y),k=c*C,d=as*c,f=d-(d-c),p=c-f,d=as*C,g=d-(d-C),y=C-g,w=p*y-(k-f*g-p*g-f*y),m=x-w,h=x-m,ds[0]=x-(m+h)+(h-w),b=_+m,h=b-_,v=_-(b-h)+(m-h),m=v-k,h=v-m,ds[1]=v-(m+h)+(h-k),E=b+m,h=E-b,ds[2]=b-(E-h)+(m-h),ds[3]=E;const N=os(4,cs,4,ds,ls);_=T*u,d=as*T,f=d-(d-T),p=T-f,d=as*u,g=d-(d-u),y=u-g,x=p*y-(_-f*g-p*g-f*y),k=S*l,d=as*S,f=d-(d-S),p=S-f,d=as*l,g=d-(d-l),y=l-g,w=p*y-(k-f*g-p*g-f*y),m=x-w,h=x-m,ds[0]=x-(m+h)+(h-w),b=_+m,h=b-_,v=_-(b-h)+(m-h),m=v-k,h=v-m,ds[1]=v-(m+h)+(h-k),E=b+m,h=E-b,ds[2]=b-(E-h)+(m-h),ds[3]=E;const D=os(N,ls,4,ds,us);_=s*u,d=as*s,f=d-(d-s),p=s-f,d=as*u,g=d-(d-u),y=u-g,x=p*y-(_-f*g-p*g-f*y),k=c*l,d=as*c,f=d-(d-c),p=c-f,d=as*l,g=d-(d-l),y=l-g,w=p*y-(k-f*g-p*g-f*y),m=x-w,h=x-m,ds[0]=x-(m+h)+(h-w),b=_+m,h=b-_,v=_-(b-h)+(m-h),m=v-k,h=v-m,ds[1]=v-(m+h)+(h-k),E=b+m,h=E-b,ds[2]=b-(E-h)+(m-h),ds[3]=E;const B=os(D,us,4,ds,hs);return hs[B-1]}(t,e,n,r,i,a,l)}ss(4),ss(4),ss(4),ss(4),ss(4),ss(4),ss(4),ss(4),ss(4),ss(8),ss(8),ss(8),ss(4),ss(8),ss(8),ss(8),ss(12),ss(192),ss(192),ss(4),ss(4),ss(4),ss(4),ss(4),ss(4),ss(4),ss(4),ss(8),ss(8),ss(8),ss(8),ss(8),ss(8),ss(8),ss(8),ss(8),ss(4),ss(4),ss(4),ss(8),ss(16),ss(16),ss(16),ss(32),ss(32),ss(48),ss(64),ss(1152),ss(1152),ss(4),ss(4),ss(4),ss(4),ss(4),ss(4),ss(4),ss(4),ss(4),ss(4),ss(24),ss(24),ss(24),ss(24),ss(24),ss(24),ss(24),ss(24),ss(24),ss(24),ss(1152),ss(1152),ss(1152),ss(1152),ss(1152),ss(2304),ss(2304),ss(3456),ss(5760),ss(8),ss(8),ss(8),ss(16),ss(24),ss(48),ss(48),ss(96),ss(192),ss(384),ss(384),ss(384),ss(768),ss(96),ss(96),ss(96),ss(1152);const ps=Math.pow(2,-52),gs=new Uint32Array(512);class ys{static from(t,e=ks,n=ws){const r=t.length,i=new Float64Array(2*r);for(let a=0;a<r;a++){const r=t[a];i[2*a]=e(r),i[2*a+1]=n(r)}return new ys(i)}constructor(t){const e=t.length>>1;if(e>0&&"number"!=typeof t[0])throw new Error("Expected coords to contain numbers.");this.coords=t;const n=Math.max(2*e-5,0);this._triangles=new Uint32Array(3*n),this._halfedges=new Int32Array(3*n),this._hashSize=Math.ceil(Math.sqrt(e)),this._hullPrev=new Uint32Array(e),this._hullNext=new Uint32Array(e),this._hullTri=new Uint32Array(e),this._hullHash=new Int32Array(this._hashSize).fill(-1),this._ids=new Uint32Array(e),this._dists=new Float64Array(e),this.update()}update(){const{coords:t,_hullPrev:e,_hullNext:n,_hullTri:r,_hullHash:i}=this,a=t.length>>1;let o=1/0,s=1/0,c=-1/0,l=-1/0;for(let T=0;T<a;T++){const e=t[2*T],n=t[2*T+1];e<o&&(o=e),n<s&&(s=n),e>c&&(c=e),n>l&&(l=n),this._ids[T]=T}const u=(o+c)/2,h=(s+l)/2;let d,f,p,g=1/0;for(let T=0;T<a;T++){const e=ms(u,h,t[2*T],t[2*T+1]);e<g&&(d=T,g=e)}const y=t[2*d],m=t[2*d+1];g=1/0;for(let T=0;T<a;T++){if(T===d)continue;const e=ms(y,m,t[2*T],t[2*T+1]);e<g&&e>0&&(f=T,g=e)}let b=t[2*f],v=t[2*f+1],_=1/0;for(let T=0;T<a;T++){if(T===d||T===f)continue;const e=vs(y,m,b,v,t[2*T],t[2*T+1]);e<_&&(p=T,_=e)}let x=t[2*p],k=t[2*p+1];if(_===1/0){for(let r=0;r<a;r++)this._dists[r]=t[2*r]-t[0]||t[2*r+1]-t[1];_s(this._ids,this._dists,0,a-1);const e=new Uint32Array(a);let n=0;for(let t=0,r=-1/0;t<a;t++){const i=this._ids[t];this._dists[i]>r&&(e[n++]=i,r=this._dists[i])}return this.hull=e.subarray(0,n),this.triangles=new Uint32Array(0),void(this.halfedges=new Uint32Array(0))}if(fs(y,m,b,v,x,k)<0){const t=f,e=b,n=v;f=p,b=x,v=k,p=t,x=e,k=n}const w=function(t,e,n,r,i,a){const o=n-t,s=r-e,c=i-t,l=a-e,u=o*o+s*s,h=c*c+l*l,d=.5/(o*l-s*c);return{x:t+(l*u-s*h)*d,y:e+(o*h-c*u)*d}}(y,m,b,v,x,k);this._cx=w.x,this._cy=w.y;for(let T=0;T<a;T++)this._dists[T]=ms(t[2*T],t[2*T+1],w.x,w.y);_s(this._ids,this._dists,0,a-1),this._hullStart=d;let E=3;n[d]=e[p]=f,n[f]=e[d]=p,n[p]=e[f]=d,r[d]=0,r[f]=1,r[p]=2,i.fill(-1),i[this._hashKey(y,m)]=d,i[this._hashKey(b,v)]=f,i[this._hashKey(x,k)]=p,this.trianglesLen=0,this._addTriangle(d,f,p,-1,-1,-1);for(let T,C,S=0;S<this._ids.length;S++){const a=this._ids[S],o=t[2*a],s=t[2*a+1];if(S>0&&Math.abs(o-T)<=ps&&Math.abs(s-C)<=ps)continue;if(T=o,C=s,a===d||a===f||a===p)continue;let c=0;for(let t=0,e=this._hashKey(o,s);t<this._hashSize&&(c=i[(e+t)%this._hashSize],-1===c||c===n[c]);t++);c=e[c];let l,u=c;for(;l=n[u],fs(o,s,t[2*u],t[2*u+1],t[2*l],t[2*l+1])>=0;)if(u=l,u===c){u=-1;break}if(-1===u)continue;let h=this._addTriangle(u,a,n[u],-1,-1,r[u]);r[a]=this._legalize(h+2),r[u]=h,E++;let g=n[u];for(;l=n[g],fs(o,s,t[2*g],t[2*g+1],t[2*l],t[2*l+1])<0;)h=this._addTriangle(g,a,l,r[a],-1,r[g]),r[a]=this._legalize(h+2),n[g]=g,E--,g=l;if(u===c)for(;l=e[u],fs(o,s,t[2*l],t[2*l+1],t[2*u],t[2*u+1])<0;)h=this._addTriangle(l,a,u,-1,r[u],r[l]),this._legalize(h+2),r[l]=h,n[u]=u,E--,u=l;this._hullStart=e[a]=u,n[u]=e[g]=a,n[a]=g,i[this._hashKey(o,s)]=a,i[this._hashKey(t[2*u],t[2*u+1])]=u}this.hull=new Uint32Array(E);for(let T=0,C=this._hullStart;T<E;T++)this.hull[T]=C,C=n[C];this.triangles=this._triangles.subarray(0,this.trianglesLen),this.halfedges=this._halfedges.subarray(0,this.trianglesLen)}_hashKey(t,e){return Math.floor(function(t,e){const n=t/(Math.abs(t)+Math.abs(e));return(e>0?3-n:1+n)/4}(t-this._cx,e-this._cy)*this._hashSize)%this._hashSize}_legalize(t){const{_triangles:e,_halfedges:n,coords:r}=this;let i=0,a=0;for(;;){const o=n[t],s=t-t%3;if(a=s+(t+2)%3,-1===o){if(0===i)break;t=gs[--i];continue}const c=o-o%3,l=s+(t+1)%3,u=c+(o+2)%3,h=e[a],d=e[t],f=e[l],p=e[u];if(bs(r[2*h],r[2*h+1],r[2*d],r[2*d+1],r[2*f],r[2*f+1],r[2*p],r[2*p+1])){e[t]=p,e[o]=h;const r=n[u];if(-1===r){let e=this._hullStart;do{if(this._hullTri[e]===u){this._hullTri[e]=t;break}e=this._hullPrev[e]}while(e!==this._hullStart)}this._link(t,r),this._link(o,n[a]),this._link(a,u);const s=c+(o+1)%3;i<gs.length&&(gs[i++]=s)}else{if(0===i)break;t=gs[--i]}}return a}_link(t,e){this._halfedges[t]=e,-1!==e&&(this._halfedges[e]=t)}_addTriangle(t,e,n,r,i,a){const o=this.trianglesLen;return this._triangles[o]=t,this._triangles[o+1]=e,this._triangles[o+2]=n,this._link(o,r),this._link(o+1,i),this._link(o+2,a),this.trianglesLen+=3,o}}function ms(t,e,n,r){const i=t-n,a=e-r;return i*i+a*a}function bs(t,e,n,r,i,a,o,s){const c=t-o,l=e-s,u=n-o,h=r-s,d=i-o,f=a-s,p=u*u+h*h,g=d*d+f*f;return c*(h*g-p*f)-l*(u*g-p*d)+(c*c+l*l)*(u*f-h*d)<0}function vs(t,e,n,r,i,a){const o=n-t,s=r-e,c=i-t,l=a-e,u=o*o+s*s,h=c*c+l*l,d=.5/(o*l-s*c),f=(l*u-s*h)*d,p=(o*h-c*u)*d;return f*f+p*p}function _s(t,e,n,r){if(r-n<=20)for(let i=n+1;i<=r;i++){const r=t[i],a=e[r];let o=i-1;for(;o>=n&&e[t[o]]>a;)t[o+1]=t[o--];t[o+1]=r}else{let i=n+1,a=r;xs(t,n+r>>1,i),e[t[n]]>e[t[r]]&&xs(t,n,r),e[t[i]]>e[t[r]]&&xs(t,i,r),e[t[n]]>e[t[i]]&&xs(t,n,i);const o=t[i],s=e[o];for(;;){do{i++}while(e[t[i]]<s);do{a--}while(e[t[a]]>s);if(a<i)break;xs(t,i,a)}t[n+1]=t[a],t[a]=o,r-i+1>=a-n?(_s(t,e,i,r),_s(t,e,n,a-1)):(_s(t,e,n,a-1),_s(t,e,i,r))}}function xs(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function ks(t){return t[0]}function ws(t){return t[1]}const Es=1e-6;class Ts{constructor(){this._x0=this._y0=this._x1=this._y1=null,this._=""}moveTo(t,e){this._+=`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")}lineTo(t,e){this._+=`L${this._x1=+t},${this._y1=+e}`}arc(t,e,n){const r=(t=+t)+(n=+n),i=e=+e;if(n<0)throw new Error("negative radius");null===this._x1?this._+=`M${r},${i}`:(Math.abs(this._x1-r)>Es||Math.abs(this._y1-i)>Es)&&(this._+="L"+r+","+i),n&&(this._+=`A${n},${n},0,1,1,${t-n},${e}A${n},${n},0,1,1,${this._x1=r},${this._y1=i}`)}rect(t,e,n,r){this._+=`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${+n}v${+r}h${-n}Z`}value(){return this._||null}}class Cs{constructor(){this._=[]}moveTo(t,e){this._.push([t,e])}closePath(){this._.push(this._[0].slice())}lineTo(t,e){this._.push([t,e])}value(){return this._.length?this._:null}}class Ss{constructor(t,[e,n,r,i]=[0,0,960,500]){if(!((r=+r)>=(e=+e)&&(i=+i)>=(n=+n)))throw new Error("invalid bounds");this.delaunay=t,this._circumcenters=new Float64Array(2*t.points.length),this.vectors=new Float64Array(2*t.points.length),this.xmax=r,this.xmin=e,this.ymax=i,this.ymin=n,this._init()}update(){return this.delaunay.update(),this._init(),this}_init(){const{delaunay:{points:t,hull:e,triangles:n},vectors:r}=this,i=this.circumcenters=this._circumcenters.subarray(0,n.length/3*2);for(let d,f,p=0,g=0,y=n.length;p<y;p+=3,g+=2){const e=2*n[p],r=2*n[p+1],a=2*n[p+2],o=t[e],s=t[e+1],c=t[r],l=t[r+1],u=t[a],h=t[a+1],y=c-o,m=l-s,b=u-o,v=h-s,_=2*(y*v-m*b);if(Math.abs(_)<1e-9){let e=1e9;const r=2*n[0];e*=Math.sign((t[r]-o)*v-(t[r+1]-s)*b),d=(o+u)/2-e*v,f=(s+h)/2+e*b}else{const t=1/_,e=y*y+m*m,n=b*b+v*v;d=o+(v*e-m*n)*t,f=s+(y*n-b*e)*t}i[g]=d,i[g+1]=f}let a,o,s,c=e[e.length-1],l=4*c,u=t[2*c],h=t[2*c+1];r.fill(0);for(let d=0;d<e.length;++d)c=e[d],a=l,o=u,s=h,l=4*c,u=t[2*c],h=t[2*c+1],r[a+2]=r[l]=s-h,r[a+3]=r[l+1]=u-o}render(t){const e=null==t?t=new Ts:void 0,{delaunay:{halfedges:n,inedges:r,hull:i},circumcenters:a,vectors:o}=this;if(i.length<=1)return null;for(let l=0,u=n.length;l<u;++l){const e=n[l];if(e<l)continue;const r=2*Math.floor(l/3),i=2*Math.floor(e/3),o=a[r],s=a[r+1],c=a[i],u=a[i+1];this._renderSegment(o,s,c,u,t)}let s,c=i[i.length-1];for(let l=0;l<i.length;++l){s=c,c=i[l];const e=2*Math.floor(r[c]/3),n=a[e],u=a[e+1],h=4*s,d=this._project(n,u,o[h+2],o[h+3]);d&&this._renderSegment(n,u,d[0],d[1],t)}return e&&e.value()}renderBounds(t){const e=null==t?t=new Ts:void 0;return t.rect(this.xmin,this.ymin,this.xmax-this.xmin,this.ymax-this.ymin),e&&e.value()}renderCell(t,e){const n=null==e?e=new Ts:void 0,r=this._clip(t);if(null===r||!r.length)return;e.moveTo(r[0],r[1]);let i=r.length;for(;r[0]===r[i-2]&&r[1]===r[i-1]&&i>1;)i-=2;for(let a=2;a<i;a+=2)r[a]===r[a-2]&&r[a+1]===r[a-1]||e.lineTo(r[a],r[a+1]);return e.closePath(),n&&n.value()}*cellPolygons(){const{delaunay:{points:t}}=this;for(let e=0,n=t.length/2;e<n;++e){const t=this.cellPolygon(e);t&&(t.index=e,yield t)}}cellPolygon(t){const e=new Cs;return this.renderCell(t,e),e.value()}_renderSegment(t,e,n,r,i){let a;const o=this._regioncode(t,e),s=this._regioncode(n,r);0===o&&0===s?(i.moveTo(t,e),i.lineTo(n,r)):(a=this._clipSegment(t,e,n,r,o,s))&&(i.moveTo(a[0],a[1]),i.lineTo(a[2],a[3]))}contains(t,e,n){return(e=+e)==e&&(n=+n)==n&&this.delaunay._step(t,e,n)===t}*neighbors(t){const e=this._clip(t);if(e)for(const n of this.delaunay.neighbors(t)){const t=this._clip(n);if(t)t:for(let r=0,i=e.length;r<i;r+=2)for(let a=0,o=t.length;a<o;a+=2)if(e[r]==t[a]&&e[r+1]==t[a+1]&&e[(r+2)%i]==t[(a+o-2)%o]&&e[(r+3)%i]==t[(a+o-1)%o]){yield n;break t}}}_cell(t){const{circumcenters:e,delaunay:{inedges:n,halfedges:r,triangles:i}}=this,a=n[t];if(-1===a)return null;const o=[];let s=a;do{const n=Math.floor(s/3);if(o.push(e[2*n],e[2*n+1]),s=s%3==2?s-2:s+1,i[s]!==t)break;s=r[s]}while(s!==a&&-1!==s);return o}_clip(t){if(0===t&&1===this.delaunay.hull.length)return[this.xmax,this.ymin,this.xmax,this.ymax,this.xmin,this.ymax,this.xmin,this.ymin];const e=this._cell(t);if(null===e)return null;const{vectors:n}=this,r=4*t;return n[r]||n[r+1]?this._clipInfinite(t,e,n[r],n[r+1],n[r+2],n[r+3]):this._clipFinite(t,e)}_clipFinite(t,e){const n=e.length;let r,i,a,o,s=null,c=e[n-2],l=e[n-1],u=this._regioncode(c,l),h=0;for(let d=0;d<n;d+=2)if(r=c,i=l,c=e[d],l=e[d+1],a=u,u=this._regioncode(c,l),0===a&&0===u)o=h,h=0,s?s.push(c,l):s=[c,l];else{let e,n,d,f,p;if(0===a){if(null===(e=this._clipSegment(r,i,c,l,a,u)))continue;[n,d,f,p]=e}else{if(null===(e=this._clipSegment(c,l,r,i,u,a)))continue;[f,p,n,d]=e,o=h,h=this._edgecode(n,d),o&&h&&this._edge(t,o,h,s,s.length),s?s.push(n,d):s=[n,d]}o=h,h=this._edgecode(f,p),o&&h&&this._edge(t,o,h,s,s.length),s?s.push(f,p):s=[f,p]}if(s)o=h,h=this._edgecode(s[0],s[1]),o&&h&&this._edge(t,o,h,s,s.length);else if(this.contains(t,(this.xmin+this.xmax)/2,(this.ymin+this.ymax)/2))return[this.xmax,this.ymin,this.xmax,this.ymax,this.xmin,this.ymax,this.xmin,this.ymin];return s}_clipSegment(t,e,n,r,i,a){for(;;){if(0===i&&0===a)return[t,e,n,r];if(i&a)return null;let o,s,c=i||a;8&c?(o=t+(n-t)*(this.ymax-e)/(r-e),s=this.ymax):4&c?(o=t+(n-t)*(this.ymin-e)/(r-e),s=this.ymin):2&c?(s=e+(r-e)*(this.xmax-t)/(n-t),o=this.xmax):(s=e+(r-e)*(this.xmin-t)/(n-t),o=this.xmin),i?(t=o,e=s,i=this._regioncode(t,e)):(n=o,r=s,a=this._regioncode(n,r))}}_clipInfinite(t,e,n,r,i,a){let o,s=Array.from(e);if((o=this._project(s[0],s[1],n,r))&&s.unshift(o[0],o[1]),(o=this._project(s[s.length-2],s[s.length-1],i,a))&&s.push(o[0],o[1]),s=this._clipFinite(t,s))for(let c,l=0,u=s.length,h=this._edgecode(s[u-2],s[u-1]);l<u;l+=2)c=h,h=this._edgecode(s[l],s[l+1]),c&&h&&(l=this._edge(t,c,h,s,l),u=s.length);else this.contains(t,(this.xmin+this.xmax)/2,(this.ymin+this.ymax)/2)&&(s=[this.xmin,this.ymin,this.xmax,this.ymin,this.xmax,this.ymax,this.xmin,this.ymax]);return s}_edge(t,e,n,r,i){for(;e!==n;){let n,a;switch(e){case 5:e=4;continue;case 4:e=6,n=this.xmax,a=this.ymin;break;case 6:e=2;continue;case 2:e=10,n=this.xmax,a=this.ymax;break;case 10:e=8;continue;case 8:e=9,n=this.xmin,a=this.ymax;break;case 9:e=1;continue;case 1:e=5,n=this.xmin,a=this.ymin}r[i]===n&&r[i+1]===a||!this.contains(t,n,a)||(r.splice(i,0,n,a),i+=2)}if(r.length>4)for(let a=0;a<r.length;a+=2){const t=(a+2)%r.length,e=(a+4)%r.length;(r[a]===r[t]&&r[t]===r[e]||r[a+1]===r[t+1]&&r[t+1]===r[e+1])&&(r.splice(t,2),a-=2)}return i}_project(t,e,n,r){let i,a,o,s=1/0;if(r<0){if(e<=this.ymin)return null;(i=(this.ymin-e)/r)<s&&(o=this.ymin,a=t+(s=i)*n)}else if(r>0){if(e>=this.ymax)return null;(i=(this.ymax-e)/r)<s&&(o=this.ymax,a=t+(s=i)*n)}if(n>0){if(t>=this.xmax)return null;(i=(this.xmax-t)/n)<s&&(a=this.xmax,o=e+(s=i)*r)}else if(n<0){if(t<=this.xmin)return null;(i=(this.xmin-t)/n)<s&&(a=this.xmin,o=e+(s=i)*r)}return[a,o]}_edgecode(t,e){return(t===this.xmin?1:t===this.xmax?2:0)|(e===this.ymin?4:e===this.ymax?8:0)}_regioncode(t,e){return(t<this.xmin?1:t>this.xmax?2:0)|(e<this.ymin?4:e>this.ymax?8:0)}}const As=2*Math.PI,Ms=Math.pow;function Os(t){return t[0]}function Ns(t){return t[1]}function Ds(t,e,n){return[t+Math.sin(t+e)*n,e+Math.cos(t-e)*n]}class Bs{static from(t,e=Os,n=Ns,r){return new Bs("length"in t?function(t,e,n,r){const i=t.length,a=new Float64Array(2*i);for(let o=0;o<i;++o){const i=t[o];a[2*o]=e.call(r,i,o,t),a[2*o+1]=n.call(r,i,o,t)}return a}(t,e,n,r):Float64Array.from(function*(t,e,n,r){let i=0;for(const a of t)yield e.call(r,a,i,t),yield n.call(r,a,i,t),++i}(t,e,n,r)))}constructor(t){this._delaunator=new ys(t),this.inedges=new Int32Array(t.length/2),this._hullIndex=new Int32Array(t.length/2),this.points=this._delaunator.coords,this._init()}update(){return this._delaunator.update(),this._init(),this}_init(){const t=this._delaunator,e=this.points;if(t.hull&&t.hull.length>2&&function(t){const{triangles:e,coords:n}=t;for(let r=0;r<e.length;r+=3){const t=2*e[r],i=2*e[r+1],a=2*e[r+2];if((n[a]-n[t])*(n[i+1]-n[t+1])-(n[i]-n[t])*(n[a+1]-n[t+1])>1e-10)return!1}return!0}(t)){this.collinear=Int32Array.from({length:e.length/2},((t,e)=>e)).sort(((t,n)=>e[2*t]-e[2*n]||e[2*t+1]-e[2*n+1]));const t=this.collinear[0],n=this.collinear[this.collinear.length-1],r=[e[2*t],e[2*t+1],e[2*n],e[2*n+1]],i=1e-8*Math.hypot(r[3]-r[1],r[2]-r[0]);for(let a=0,o=e.length/2;a<o;++a){const t=Ds(e[2*a],e[2*a+1],i);e[2*a]=t[0],e[2*a+1]=t[1]}this._delaunator=new ys(e)}else delete this.collinear;const n=this.halfedges=this._delaunator.halfedges,r=this.hull=this._delaunator.hull,i=this.triangles=this._delaunator.triangles,a=this.inedges.fill(-1),o=this._hullIndex.fill(-1);for(let s=0,c=n.length;s<c;++s){const t=i[s%3==2?s-2:s+1];-1!==n[s]&&-1!==a[t]||(a[t]=s)}for(let s=0,c=r.length;s<c;++s)o[r[s]]=s;r.length<=2&&r.length>0&&(this.triangles=new Int32Array(3).fill(-1),this.halfedges=new Int32Array(3).fill(-1),this.triangles[0]=r[0],a[r[0]]=1,2===r.length&&(a[r[1]]=0,this.triangles[1]=r[1],this.triangles[2]=r[1]))}voronoi(t){return new Ss(this,t)}*neighbors(t){const{inedges:e,hull:n,_hullIndex:r,halfedges:i,triangles:a,collinear:o}=this;if(o){const e=o.indexOf(t);return e>0&&(yield o[e-1]),void(e<o.length-1&&(yield o[e+1]))}const s=e[t];if(-1===s)return;let c=s,l=-1;do{if(yield l=a[c],c=c%3==2?c-2:c+1,a[c]!==t)return;if(c=i[c],-1===c){const e=n[(r[t]+1)%n.length];return void(e!==l&&(yield e))}}while(c!==s)}find(t,e,n=0){if((t=+t)!=t||(e=+e)!=e)return-1;const r=n;let i;for(;(i=this._step(n,t,e))>=0&&i!==n&&i!==r;)n=i;return i}_step(t,e,n){const{inedges:r,hull:i,_hullIndex:a,halfedges:o,triangles:s,points:c}=this;if(-1===r[t]||!c.length)return(t+1)%(c.length>>1);let l=t,u=Ms(e-c[2*t],2)+Ms(n-c[2*t+1],2);const h=r[t];let d=h;do{let r=s[d];const h=Ms(e-c[2*r],2)+Ms(n-c[2*r+1],2);if(h<u&&(u=h,l=r),d=d%3==2?d-2:d+1,s[d]!==t)break;if(d=o[d],-1===d){if(d=i[(a[t]+1)%i.length],d!==r&&Ms(e-c[2*d],2)+Ms(n-c[2*d+1],2)<u)return d;break}}while(d!==h);return l}render(t){const e=null==t?t=new Ts:void 0,{points:n,halfedges:r,triangles:i}=this;for(let a=0,o=r.length;a<o;++a){const e=r[a];if(e<a)continue;const o=2*i[a],s=2*i[e];t.moveTo(n[o],n[o+1]),t.lineTo(n[s],n[s+1])}return this.renderHull(t),e&&e.value()}renderPoints(t,e){void 0!==e||t&&"function"==typeof t.moveTo||(e=t,t=null),e=null==e?2:+e;const n=null==t?t=new Ts:void 0,{points:r}=this;for(let i=0,a=r.length;i<a;i+=2){const n=r[i],a=r[i+1];t.moveTo(n+e,a),t.arc(n,a,e,0,As)}return n&&n.value()}renderHull(t){const e=null==t?t=new Ts:void 0,{hull:n,points:r}=this,i=2*n[0],a=n.length;t.moveTo(r[i],r[i+1]);for(let o=1;o<a;++o){const e=2*n[o];t.lineTo(r[e],r[e+1])}return t.closePath(),e&&e.value()}hullPolygon(){const t=new Cs;return this.renderHull(t),t.value()}renderTriangle(t,e){const n=null==e?e=new Ts:void 0,{points:r,triangles:i}=this,a=2*i[t*=3],o=2*i[t+1],s=2*i[t+2];return e.moveTo(r[a],r[a+1]),e.lineTo(r[o],r[o+1]),e.lineTo(r[s],r[s+1]),e.closePath(),n&&n.value()}*trianglePolygons(){const{triangles:t}=this;for(let e=0,n=t.length/3;e<n;++e)yield this.trianglePolygon(e)}trianglePolygon(t){const e=new Cs;return this.renderTriangle(t,e),e.value()}}const Ls=t=>()=>t;function Is(t,{sourceEvent:e,subject:n,target:r,identifier:i,active:a,x:o,y:s,dx:c,dy:l,dispatch:u}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:o,enumerable:!0,configurable:!0},y:{value:s,enumerable:!0,configurable:!0},dx:{value:c,enumerable:!0,configurable:!0},dy:{value:l,enumerable:!0,configurable:!0},_:{value:u}})}function Fs(t){return!t.ctrlKey&&!t.button}function Rs(){return this.parentNode}function Ps(t,e){return null==e?{x:t.x,y:t.y}:e}function js(){return navigator.maxTouchPoints||"ontouchstart"in this}function zs(){var t,e,n,r,i=Fs,a=Rs,o=Ps,s=js,c={},l=de("start","drag","end"),u=0,h=0;function d(t){t.on("mousedown.drag",f).filter(s).on("touchstart.drag",y).on("touchmove.drag",m,On).on("touchend.drag touchcancel.drag",b).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function f(o,s){if(!r&&i.call(this,o,s)){var c=v(this,a.call(this,o,s),o,s,"mouse");c&&(Mn(o.view).on("mousemove.drag",p,Nn).on("mouseup.drag",g,Nn),Ln(o.view),Dn(o),n=!1,t=o.clientX,e=o.clientY,c("start",o))}}function p(r){if(Bn(r),!n){var i=r.clientX-t,a=r.clientY-e;n=i*i+a*a>h}c.mouse("drag",r)}function g(t){Mn(t.view).on("mousemove.drag mouseup.drag",null),In(t.view,n),Bn(t),c.mouse("end",t)}function y(t,e){if(i.call(this,t,e)){var n,r,o=t.changedTouches,s=a.call(this,t,e),c=o.length;for(n=0;n<c;++n)(r=v(this,s,t,e,o[n].identifier,o[n]))&&(Dn(t),r("start",t,o[n]))}}function m(t){var e,n,r=t.changedTouches,i=r.length;for(e=0;e<i;++e)(n=c[r[e].identifier])&&(Bn(t),n("drag",t,r[e]))}function b(t){var e,n,i=t.changedTouches,a=i.length;for(r&&clearTimeout(r),r=setTimeout((function(){r=null}),500),e=0;e<a;++e)(n=c[i[e].identifier])&&(Dn(t),n("end",t,i[e]))}function v(t,e,n,r,i,a){var s,h,f,p=l.copy(),g=Rr(a||n,e);if(null!=(f=o.call(t,new Is("beforestart",{sourceEvent:n,target:d,identifier:i,active:u,x:g[0],y:g[1],dx:0,dy:0,dispatch:p}),r)))return s=f.x-g[0]||0,h=f.y-g[1]||0,function n(a,o,l){var y,m=g;switch(a){case"start":c[i]=n,y=u++;break;case"end":delete c[i],--u;case"drag":g=Rr(l||o,e),y=u}p.call(a,t,new Is(a,{sourceEvent:o,subject:f,target:d,identifier:i,active:y,x:g[0]+s,y:g[1]+h,dx:g[0]-m[0],dy:g[1]-m[1],dispatch:p}),r)}}return d.filter=function(t){return arguments.length?(i="function"==typeof t?t:Ls(!!t),d):i},d.container=function(t){return arguments.length?(a="function"==typeof t?t:Ls(t),d):a},d.subject=function(t){return arguments.length?(o="function"==typeof t?t:Ls(t),d):o},d.touchable=function(t){return arguments.length?(s="function"==typeof t?t:Ls(!!t),d):s},d.on=function(){var t=l.on.apply(l,arguments);return t===l?d:t},d.clickDistance=function(t){return arguments.length?(h=(t=+t)*t,d):Math.sqrt(h)},d}Is.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var Ys={},Us={};function $s(t){return new Function("d","return {"+t.map((function(t,e){return JSON.stringify(t)+": d["+e+'] || ""'})).join(",")+"}")}function Ws(t){var e=Object.create(null),n=[];return t.forEach((function(t){for(var r in t)r in e||n.push(e[r]=r)})),n}function qs(t,e){var n=t+"",r=n.length;return r<e?new Array(e-r+1).join(0)+n:n}function Hs(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],a=t.length,o=0,s=0,c=a<=0,l=!1;function u(){if(c)return Us;if(l)return l=!1,Ys;var e,r,i=o;if(34===t.charCodeAt(i)){for(;o++<a&&34!==t.charCodeAt(o)||34===t.charCodeAt(++o););return(e=o)>=a?c=!0:10===(r=t.charCodeAt(o++))?l=!0:13===r&&(l=!0,10===t.charCodeAt(o)&&++o),t.slice(i+1,e-1).replace(/""/g,'"')}for(;o<a;){if(10===(r=t.charCodeAt(e=o++)))l=!0;else if(13===r)l=!0,10===t.charCodeAt(o)&&++o;else if(r!==n)continue;return t.slice(i,e)}return c=!0,t.slice(i,a)}for(10===t.charCodeAt(a-1)&&--a,13===t.charCodeAt(a-1)&&--a;(r=u())!==Us;){for(var h=[];r!==Ys&&r!==Us;)h.push(r),r=u();e&&null==(h=e(h,s++))||i.push(h)}return i}function i(e,n){return e.map((function(e){return n.map((function(t){return o(e[t])})).join(t)}))}function a(e){return e.map(o).join(t)}function o(t){return null==t?"":t instanceof Date?function(t){var e=t.getUTCHours(),n=t.getUTCMinutes(),r=t.getUTCSeconds(),i=t.getUTCMilliseconds();return isNaN(t)?"Invalid Date":function(t){return t<0?"-"+qs(-t,6):t>9999?"+"+qs(t,6):qs(t,4)}(t.getUTCFullYear())+"-"+qs(t.getUTCMonth()+1,2)+"-"+qs(t.getUTCDate(),2)+(i?"T"+qs(e,2)+":"+qs(n,2)+":"+qs(r,2)+"."+qs(i,3)+"Z":r?"T"+qs(e,2)+":"+qs(n,2)+":"+qs(r,2)+"Z":n||e?"T"+qs(e,2)+":"+qs(n,2)+"Z":"")}(t):e.test(t+="")?'"'+t.replace(/"/g,'""')+'"':t}return{parse:function(t,e){var n,i,a=r(t,(function(t,r){if(n)return n(t,r-1);i=t,n=e?function(t,e){var n=$s(t);return function(r,i){return e(n(r),i,t)}}(t,e):$s(t)}));return a.columns=i||[],a},parseRows:r,format:function(e,n){return null==n&&(n=Ws(e)),[n.map(o).join(t)].concat(i(e,n)).join("\n")},formatBody:function(t,e){return null==e&&(e=Ws(t)),i(t,e).join("\n")},formatRows:function(t){return t.map(a).join("\n")},formatRow:a,formatValue:o}}var Vs=Hs(","),Gs=Vs.parse,Xs=Vs.parseRows,Zs=Vs.format,Qs=Vs.formatBody,Ks=Vs.formatRows,Js=Vs.formatRow,tc=Vs.formatValue,ec=Hs("\t"),nc=ec.parse,rc=ec.parseRows,ic=ec.format,ac=ec.formatBody,oc=ec.formatRows,sc=ec.formatRow,cc=ec.formatValue;function lc(t){for(var e in t){var n,r,i=t[e].trim();if(i)if("true"===i)i=!0;else if("false"===i)i=!1;else if("NaN"===i)i=NaN;else if(isNaN(n=+i)){if(!(r=i.match(/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/)))continue;uc&&r[4]&&!r[7]&&(i=i.replace(/-/g,"/").replace(/T/," ")),i=new Date(i)}else i=n;else i=null;t[e]=i}return t}const uc=new Date("2019-01-01T00:00").getHours()||new Date("2019-07-01T00:00").getHours(),hc=t=>+t;function dc(t){return t*t}function fc(t){return t*(2-t)}function pc(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}var gc=function t(e){function n(t){return Math.pow(t,e)}return e=+e,n.exponent=t,n}(3),yc=function t(e){function n(t){return 1-Math.pow(1-t,e)}return e=+e,n.exponent=t,n}(3),mc=function t(e){function n(t){return((t*=2)<=1?Math.pow(t,e):2-Math.pow(2-t,e))/2}return e=+e,n.exponent=t,n}(3),bc=Math.PI,vc=bc/2;function _c(t){return 1==+t?1:1-Math.cos(t*vc)}function xc(t){return Math.sin(t*vc)}function kc(t){return(1-Math.cos(bc*t))/2}function wc(t){return 1.0009775171065494*(Math.pow(2,-10*t)-.0009765625)}function Ec(t){return wc(1-+t)}function Tc(t){return 1-wc(t)}function Cc(t){return((t*=2)<=1?wc(1-t):2-wc(t-1))/2}function Sc(t){return 1-Math.sqrt(1-t*t)}function Ac(t){return Math.sqrt(1- --t*t)}function Mc(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}var Oc=7.5625;function Nc(t){return 1-Dc(1-t)}function Dc(t){return(t=+t)<.36363636363636365?Oc*t*t:t<.7272727272727273?Oc*(t-=.5454545454545454)*t+.75:t<.9090909090909091?Oc*(t-=.8181818181818182)*t+.9375:Oc*(t-=.9545454545454546)*t+.984375}function Bc(t){return((t*=2)<=1?1-Dc(1-t):Dc(t-1)+1)/2}var Lc=1.70158,Ic=function t(e){function n(t){return(t=+t)*t*(e*(t-1)+t)}return e=+e,n.overshoot=t,n}(Lc),Fc=function t(e){function n(t){return--t*t*((t+1)*e+t)+1}return e=+e,n.overshoot=t,n}(Lc),Rc=function t(e){function n(t){return((t*=2)<1?t*t*((e+1)*t-e):(t-=2)*t*((e+1)*t+e)+2)/2}return e=+e,n.overshoot=t,n}(Lc),Pc=2*Math.PI,jc=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=Pc);function i(t){return e*wc(- --t)*Math.sin((r-t)/n)}return i.amplitude=function(e){return t(e,n*Pc)},i.period=function(n){return t(e,n)},i}(1,.3),zc=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=Pc);function i(t){return 1-e*wc(t=+t)*Math.sin((t+r)/n)}return i.amplitude=function(e){return t(e,n*Pc)},i.period=function(n){return t(e,n)},i}(1,.3),Yc=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=Pc);function i(t){return((t=2*t-1)<0?e*wc(-t)*Math.sin((r-t)/n):2-e*wc(t)*Math.sin((r+t)/n))/2}return i.amplitude=function(e){return t(e,n*Pc)},i.period=function(n){return t(e,n)},i}(1,.3);function Uc(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.blob()}function $c(t,e){return fetch(t,e).then(Uc)}function Wc(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.arrayBuffer()}function qc(t,e){return fetch(t,e).then(Wc)}function Hc(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function Vc(t,e){return fetch(t,e).then(Hc)}function Gc(t){return function(e,n,r){return 2===arguments.length&&"function"==typeof n&&(r=n,n=void 0),Vc(e,n).then((function(e){return t(e,r)}))}}function Xc(t,e,n,r){3===arguments.length&&"function"==typeof n&&(r=n,n=void 0);var i=Hs(t);return Vc(e,n).then((function(t){return i.parse(t,r)}))}var Zc=Gc(Gs),Qc=Gc(nc);function Kc(t,e){return new Promise((function(n,r){var i=new Image;for(var a in e)i[a]=e[a];i.onerror=r,i.onload=function(){n(i)},i.src=t}))}function Jc(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);if(204!==t.status&&205!==t.status)return t.json()}function tl(t,e){return fetch(t,e).then(Jc)}function el(t){return(e,n)=>Vc(e,n).then((e=>(new DOMParser).parseFromString(e,t)))}const nl=el("application/xml");var rl=el("text/html"),il=el("image/svg+xml");function al(t,e){var n,r=1;function i(){var i,a,o=n.length,s=0,c=0;for(i=0;i<o;++i)s+=(a=n[i]).x,c+=a.y;for(s=(s/o-t)*r,c=(c/o-e)*r,i=0;i<o;++i)(a=n[i]).x-=s,a.y-=c}return null==t&&(t=0),null==e&&(e=0),i.initialize=function(t){n=t},i.x=function(e){return arguments.length?(t=+e,i):t},i.y=function(t){return arguments.length?(e=+t,i):e},i.strength=function(t){return arguments.length?(r=+t,i):r},i}function ol(t,e,n,r){if(isNaN(e)||isNaN(n))return t;var i,a,o,s,c,l,u,h,d,f=t._root,p={data:r},g=t._x0,y=t._y0,m=t._x1,b=t._y1;if(!f)return t._root=p,t;for(;f.length;)if((l=e>=(a=(g+m)/2))?g=a:m=a,(u=n>=(o=(y+b)/2))?y=o:b=o,i=f,!(f=f[h=u<<1|l]))return i[h]=p,t;if(s=+t._x.call(null,f.data),c=+t._y.call(null,f.data),e===s&&n===c)return p.next=f,i?i[h]=p:t._root=p,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(l=e>=(a=(g+m)/2))?g=a:m=a,(u=n>=(o=(y+b)/2))?y=o:b=o}while((h=u<<1|l)==(d=(c>=o)<<1|s>=a));return i[d]=f,i[h]=p,t}function sl(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i}function cl(t){return t[0]}function ll(t){return t[1]}function ul(t,e,n){var r=new hl(null==e?cl:e,null==n?ll:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function hl(t,e,n,r,i,a){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=a,this._root=void 0}function dl(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var fl=ul.prototype=hl.prototype;function pl(t){return function(){return t}}function gl(t){return 1e-6*(t()-.5)}function yl(t){return t.x+t.vx}function ml(t){return t.y+t.vy}function bl(t){var e,n,r,i=1,a=1;function o(){for(var t,o,c,l,u,h,d,f=e.length,p=0;p<a;++p)for(o=ul(e,yl,ml).visitAfter(s),t=0;t<f;++t)c=e[t],h=n[c.index],d=h*h,l=c.x+c.vx,u=c.y+c.vy,o.visit(g);function g(t,e,n,a,o){var s=t.data,f=t.r,p=h+f;if(!s)return e>l+p||a<l-p||n>u+p||o<u-p;if(s.index>c.index){var g=l-s.x-s.vx,y=u-s.y-s.vy,m=g*g+y*y;m<p*p&&(0===g&&(m+=(g=gl(r))*g),0===y&&(m+=(y=gl(r))*y),m=(p-(m=Math.sqrt(m)))/m*i,c.vx+=(g*=m)*(p=(f*=f)/(d+f)),c.vy+=(y*=m)*p,s.vx-=g*(p=1-p),s.vy-=y*p)}}}function s(t){if(t.data)return t.r=n[t.data.index];for(var e=t.r=0;e<4;++e)t[e]&&t[e].r>t.r&&(t.r=t[e].r)}function c(){if(e){var r,i,a=e.length;for(n=new Array(a),r=0;r<a;++r)i=e[r],n[i.index]=+t(i,r,e)}}return"function"!=typeof t&&(t=pl(null==t?1:+t)),o.initialize=function(t,n){e=t,r=n,c()},o.iterations=function(t){return arguments.length?(a=+t,o):a},o.strength=function(t){return arguments.length?(i=+t,o):i},o.radius=function(e){return arguments.length?(t="function"==typeof e?e:pl(+e),c(),o):t},o}function vl(t){return t.index}function _l(t,e){var n=t.get(e);if(!n)throw new Error("node not found: "+e);return n}function xl(t){var e,n,r,i,a,o,s=vl,c=function(t){return 1/Math.min(i[t.source.index],i[t.target.index])},l=pl(30),u=1;function h(r){for(var i=0,s=t.length;i<u;++i)for(var c,l,h,d,f,p,g,y=0;y<s;++y)l=(c=t[y]).source,d=(h=c.target).x+h.vx-l.x-l.vx||gl(o),f=h.y+h.vy-l.y-l.vy||gl(o),d*=p=((p=Math.sqrt(d*d+f*f))-n[y])/p*r*e[y],f*=p,h.vx-=d*(g=a[y]),h.vy-=f*g,l.vx+=d*(g=1-g),l.vy+=f*g}function d(){if(r){var o,c,l=r.length,u=t.length,h=new Map(r.map(((t,e)=>[s(t,e,r),t])));for(o=0,i=new Array(l);o<u;++o)(c=t[o]).index=o,"object"!=typeof c.source&&(c.source=_l(h,c.source)),"object"!=typeof c.target&&(c.target=_l(h,c.target)),i[c.source.index]=(i[c.source.index]||0)+1,i[c.target.index]=(i[c.target.index]||0)+1;for(o=0,a=new Array(u);o<u;++o)c=t[o],a[o]=i[c.source.index]/(i[c.source.index]+i[c.target.index]);e=new Array(u),f(),n=new Array(u),p()}}function f(){if(r)for(var n=0,i=t.length;n<i;++n)e[n]=+c(t[n],n,t)}function p(){if(r)for(var e=0,i=t.length;e<i;++e)n[e]=+l(t[e],e,t)}return null==t&&(t=[]),h.initialize=function(t,e){r=t,o=e,d()},h.links=function(e){return arguments.length?(t=e,d(),h):t},h.id=function(t){return arguments.length?(s=t,h):s},h.iterations=function(t){return arguments.length?(u=+t,h):u},h.strength=function(t){return arguments.length?(c="function"==typeof t?t:pl(+t),f(),h):c},h.distance=function(t){return arguments.length?(l="function"==typeof t?t:pl(+t),p(),h):l},h}fl.copy=function(){var t,e,n=new hl(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=dl(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=dl(e));return n},fl.add=function(t){const e=+this._x.call(null,t),n=+this._y.call(null,t);return ol(this.cover(e,n),e,n,t)},fl.addAll=function(t){var e,n,r,i,a=t.length,o=new Array(a),s=new Array(a),c=1/0,l=1/0,u=-1/0,h=-1/0;for(n=0;n<a;++n)isNaN(r=+this._x.call(null,e=t[n]))||isNaN(i=+this._y.call(null,e))||(o[n]=r,s[n]=i,r<c&&(c=r),r>u&&(u=r),i<l&&(l=i),i>h&&(h=i));if(c>u||l>h)return this;for(this.cover(c,l).cover(u,h),n=0;n<a;++n)ol(this,o[n],s[n],t[n]);return this},fl.cover=function(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var n=this._x0,r=this._y0,i=this._x1,a=this._y1;if(isNaN(n))i=(n=Math.floor(t))+1,a=(r=Math.floor(e))+1;else{for(var o,s,c=i-n||1,l=this._root;n>t||t>=i||r>e||e>=a;)switch(s=(e<r)<<1|t<n,(o=new Array(4))[s]=l,l=o,c*=2,s){case 0:i=n+c,a=r+c;break;case 1:n=i-c,a=r+c;break;case 2:i=n+c,r=a-c;break;case 3:n=i-c,r=a-c}this._root&&this._root.length&&(this._root=l)}return this._x0=n,this._y0=r,this._x1=i,this._y1=a,this},fl.data=function(){var t=[];return this.visit((function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)})),t},fl.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},fl.find=function(t,e,n){var r,i,a,o,s,c,l,u=this._x0,h=this._y0,d=this._x1,f=this._y1,p=[],g=this._root;for(g&&p.push(new sl(g,u,h,d,f)),null==n?n=1/0:(u=t-n,h=e-n,d=t+n,f=e+n,n*=n);c=p.pop();)if(!(!(g=c.node)||(i=c.x0)>d||(a=c.y0)>f||(o=c.x1)<u||(s=c.y1)<h))if(g.length){var y=(i+o)/2,m=(a+s)/2;p.push(new sl(g[3],y,m,o,s),new sl(g[2],i,m,y,s),new sl(g[1],y,a,o,m),new sl(g[0],i,a,y,m)),(l=(e>=m)<<1|t>=y)&&(c=p[p.length-1],p[p.length-1]=p[p.length-1-l],p[p.length-1-l]=c)}else{var b=t-+this._x.call(null,g.data),v=e-+this._y.call(null,g.data),_=b*b+v*v;if(_<n){var x=Math.sqrt(n=_);u=t-x,h=e-x,d=t+x,f=e+x,r=g.data}}return r},fl.remove=function(t){if(isNaN(a=+this._x.call(null,t))||isNaN(o=+this._y.call(null,t)))return this;var e,n,r,i,a,o,s,c,l,u,h,d,f=this._root,p=this._x0,g=this._y0,y=this._x1,m=this._y1;if(!f)return this;if(f.length)for(;;){if((l=a>=(s=(p+y)/2))?p=s:y=s,(u=o>=(c=(g+m)/2))?g=c:m=c,e=f,!(f=f[h=u<<1|l]))return this;if(!f.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(n=e,d=h)}for(;f.data!==t;)if(r=f,!(f=f.next))return this;return(i=f.next)&&delete f.next,r?(i?r.next=i:delete r.next,this):e?(i?e[h]=i:delete e[h],(f=e[0]||e[1]||e[2]||e[3])&&f===(e[3]||e[2]||e[1]||e[0])&&!f.length&&(n?n[d]=f:this._root=f),this):(this._root=i,this)},fl.removeAll=function(t){for(var e=0,n=t.length;e<n;++e)this.remove(t[e]);return this},fl.root=function(){return this._root},fl.size=function(){var t=0;return this.visit((function(e){if(!e.length)do{++t}while(e=e.next)})),t},fl.visit=function(t){var e,n,r,i,a,o,s=[],c=this._root;for(c&&s.push(new sl(c,this._x0,this._y0,this._x1,this._y1));e=s.pop();)if(!t(c=e.node,r=e.x0,i=e.y0,a=e.x1,o=e.y1)&&c.length){var l=(r+a)/2,u=(i+o)/2;(n=c[3])&&s.push(new sl(n,l,u,a,o)),(n=c[2])&&s.push(new sl(n,r,u,l,o)),(n=c[1])&&s.push(new sl(n,l,i,a,u)),(n=c[0])&&s.push(new sl(n,r,i,l,u))}return this},fl.visitAfter=function(t){var e,n=[],r=[];for(this._root&&n.push(new sl(this._root,this._x0,this._y0,this._x1,this._y1));e=n.pop();){var i=e.node;if(i.length){var a,o=e.x0,s=e.y0,c=e.x1,l=e.y1,u=(o+c)/2,h=(s+l)/2;(a=i[0])&&n.push(new sl(a,o,s,u,h)),(a=i[1])&&n.push(new sl(a,u,s,c,h)),(a=i[2])&&n.push(new sl(a,o,h,u,l)),(a=i[3])&&n.push(new sl(a,u,h,c,l))}r.push(e)}for(;e=r.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},fl.x=function(t){return arguments.length?(this._x=t,this):this._x},fl.y=function(t){return arguments.length?(this._y=t,this):this._y};const kl=4294967296;function wl(t){return t.x}function El(t){return t.y}var Tl=Math.PI*(3-Math.sqrt(5));function Cl(t){var e,n=1,r=.001,i=1-Math.pow(r,1/300),a=0,o=.6,s=new Map,c=Qr(h),l=de("tick","end"),u=function(){let t=1;return()=>(t=(1664525*t+1013904223)%kl)/kl}();function h(){d(),l.call("tick",e),n<r&&(c.stop(),l.call("end",e))}function d(r){var c,l,u=t.length;void 0===r&&(r=1);for(var h=0;h<r;++h)for(n+=(a-n)*i,s.forEach((function(t){t(n)})),c=0;c<u;++c)null==(l=t[c]).fx?l.x+=l.vx*=o:(l.x=l.fx,l.vx=0),null==l.fy?l.y+=l.vy*=o:(l.y=l.fy,l.vy=0);return e}function f(){for(var e,n=0,r=t.length;n<r;++n){if((e=t[n]).index=n,null!=e.fx&&(e.x=e.fx),null!=e.fy&&(e.y=e.fy),isNaN(e.x)||isNaN(e.y)){var i=10*Math.sqrt(.5+n),a=n*Tl;e.x=i*Math.cos(a),e.y=i*Math.sin(a)}(isNaN(e.vx)||isNaN(e.vy))&&(e.vx=e.vy=0)}}function p(e){return e.initialize&&e.initialize(t,u),e}return null==t&&(t=[]),f(),e={tick:d,restart:function(){return c.restart(h),e},stop:function(){return c.stop(),e},nodes:function(n){return arguments.length?(t=n,f(),s.forEach(p),e):t},alpha:function(t){return arguments.length?(n=+t,e):n},alphaMin:function(t){return arguments.length?(r=+t,e):r},alphaDecay:function(t){return arguments.length?(i=+t,e):+i},alphaTarget:function(t){return arguments.length?(a=+t,e):a},velocityDecay:function(t){return arguments.length?(o=1-t,e):1-o},randomSource:function(t){return arguments.length?(u=t,s.forEach(p),e):u},force:function(t,n){return arguments.length>1?(null==n?s.delete(t):s.set(t,p(n)),e):s.get(t)},find:function(e,n,r){var i,a,o,s,c,l=0,u=t.length;for(null==r?r=1/0:r*=r,l=0;l<u;++l)(o=(i=e-(s=t[l]).x)*i+(a=n-s.y)*a)<r&&(c=s,r=o);return c},on:function(t,n){return arguments.length>1?(l.on(t,n),e):l.on(t)}}}function Sl(){var t,e,n,r,i,a=pl(-30),o=1,s=1/0,c=.81;function l(n){var i,a=t.length,o=ul(t,wl,El).visitAfter(h);for(r=n,i=0;i<a;++i)e=t[i],o.visit(d)}function u(){if(t){var e,n,r=t.length;for(i=new Array(r),e=0;e<r;++e)n=t[e],i[n.index]=+a(n,e,t)}}function h(t){var e,n,r,a,o,s=0,c=0;if(t.length){for(r=a=o=0;o<4;++o)(e=t[o])&&(n=Math.abs(e.value))&&(s+=e.value,c+=n,r+=n*e.x,a+=n*e.y);t.x=r/c,t.y=a/c}else{(e=t).x=e.data.x,e.y=e.data.y;do{s+=i[e.data.index]}while(e=e.next)}t.value=s}function d(t,a,l,u){if(!t.value)return!0;var h=t.x-e.x,d=t.y-e.y,f=u-a,p=h*h+d*d;if(f*f/c<p)return p<s&&(0===h&&(p+=(h=gl(n))*h),0===d&&(p+=(d=gl(n))*d),p<o&&(p=Math.sqrt(o*p)),e.vx+=h*t.value*r/p,e.vy+=d*t.value*r/p),!0;if(!(t.length||p>=s)){(t.data!==e||t.next)&&(0===h&&(p+=(h=gl(n))*h),0===d&&(p+=(d=gl(n))*d),p<o&&(p=Math.sqrt(o*p)));do{t.data!==e&&(f=i[t.data.index]*r/p,e.vx+=h*f,e.vy+=d*f)}while(t=t.next)}}return l.initialize=function(e,r){t=e,n=r,u()},l.strength=function(t){return arguments.length?(a="function"==typeof t?t:pl(+t),u(),l):a},l.distanceMin=function(t){return arguments.length?(o=t*t,l):Math.sqrt(o)},l.distanceMax=function(t){return arguments.length?(s=t*t,l):Math.sqrt(s)},l.theta=function(t){return arguments.length?(c=t*t,l):Math.sqrt(c)},l}function Al(t,e,n){var r,i,a,o=pl(.1);function s(t){for(var o=0,s=r.length;o<s;++o){var c=r[o],l=c.x-e||1e-6,u=c.y-n||1e-6,h=Math.sqrt(l*l+u*u),d=(a[o]-h)*i[o]*t/h;c.vx+=l*d,c.vy+=u*d}}function c(){if(r){var e,n=r.length;for(i=new Array(n),a=new Array(n),e=0;e<n;++e)a[e]=+t(r[e],e,r),i[e]=isNaN(a[e])?0:+o(r[e],e,r)}}return"function"!=typeof t&&(t=pl(+t)),null==e&&(e=0),null==n&&(n=0),s.initialize=function(t){r=t,c()},s.strength=function(t){return arguments.length?(o="function"==typeof t?t:pl(+t),c(),s):o},s.radius=function(e){return arguments.length?(t="function"==typeof e?e:pl(+e),c(),s):t},s.x=function(t){return arguments.length?(e=+t,s):e},s.y=function(t){return arguments.length?(n=+t,s):n},s}function Ml(t){var e,n,r,i=pl(.1);function a(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vx+=(r[a]-i.x)*n[a]*t}function o(){if(e){var a,o=e.length;for(n=new Array(o),r=new Array(o),a=0;a<o;++a)n[a]=isNaN(r[a]=+t(e[a],a,e))?0:+i(e[a],a,e)}}return"function"!=typeof t&&(t=pl(null==t?0:+t)),a.initialize=function(t){e=t,o()},a.strength=function(t){return arguments.length?(i="function"==typeof t?t:pl(+t),o(),a):i},a.x=function(e){return arguments.length?(t="function"==typeof e?e:pl(+e),o(),a):t},a}function Ol(t){var e,n,r,i=pl(.1);function a(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vy+=(r[a]-i.y)*n[a]*t}function o(){if(e){var a,o=e.length;for(n=new Array(o),r=new Array(o),a=0;a<o;++a)n[a]=isNaN(r[a]=+t(e[a],a,e))?0:+i(e[a],a,e)}}return"function"!=typeof t&&(t=pl(null==t?0:+t)),a.initialize=function(t){e=t,o()},a.strength=function(t){return arguments.length?(i="function"==typeof t?t:pl(+t),o(),a):i},a.y=function(e){return arguments.length?(t="function"==typeof e?e:pl(+e),o(),a):t},a}function Nl(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Dl(t){return(t=Nl(Math.abs(t)))?t[1]:NaN}var Bl,Ll=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Il(t){if(!(e=Ll.exec(t)))throw new Error("invalid format: "+t);var e;return new Fl({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Fl(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function Rl(t,e){var n=Nl(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Il.prototype=Fl.prototype,Fl.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const Pl={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Rl(100*t,e),r:Rl,s:function(t,e){var n=Nl(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Bl=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Nl(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function jl(t){return t}var zl,Yl,Ul,$l=Array.prototype.map,Wl=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function ql(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?jl:(e=$l.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(t.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?jl:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}($l.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",l=void 0===t.minus?"\u2212":t.minus+"",u=void 0===t.nan?"NaN":t.nan+"";function h(t){var e=(t=Il(t)).fill,n=t.align,h=t.sign,d=t.symbol,f=t.zero,p=t.width,g=t.comma,y=t.precision,m=t.trim,b=t.type;"n"===b?(g=!0,b="g"):Pl[b]||(void 0===y&&(y=12),m=!0,b="g"),(f||"0"===e&&"="===n)&&(f=!0,e="0",n="=");var v="$"===d?i:"#"===d&&/[boxX]/.test(b)?"0"+b.toLowerCase():"",_="$"===d?a:/[%p]/.test(b)?c:"",x=Pl[b],k=/[defgprs%]/.test(b);function w(t){var i,a,c,d=v,w=_;if("c"===b)w=x(t)+w,t="";else{var E=(t=+t)<0||1/t<0;if(t=isNaN(t)?u:x(Math.abs(t),y),m&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r<n;++r)switch(t[r]){case".":i=e=r;break;case"0":0===i&&(i=r),e=r;break;default:if(!+t[r])break t;i>0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),E&&0==+t&&"+"!==h&&(E=!1),d=(E?"("===h?h:l:"-"===h||"("===h?"":h)+d,w=("s"===b?Wl[8+Bl/3]:"")+w+(E&&"("===h?")":""),k)for(i=-1,a=t.length;++i<a;)if(48>(c=t.charCodeAt(i))||c>57){w=(46===c?o+t.slice(i+1):t.slice(i))+w,t=t.slice(0,i);break}}g&&!f&&(t=r(t,1/0));var T=d.length+t.length+w.length,C=T<p?new Array(p-T+1).join(e):"";switch(g&&f&&(t=r(C+t,C.length?p-w.length:1/0),C=""),n){case"<":t=d+t+w+C;break;case"=":t=d+C+t+w;break;case"^":t=C.slice(0,T=C.length>>1)+d+t+w+C.slice(T);break;default:t=C+d+t+w}return s(t)}return y=void 0===y?6:/[gprs]/.test(b)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),w.toString=function(){return t+""},w}return{format:h,formatPrefix:function(t,e){var n=h(((t=Il(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Dl(e)/3))),i=Math.pow(10,-r),a=Wl[8+r/3];return function(t){return n(i*t)+a}}}}function Hl(t){return zl=ql(t),Yl=zl.format,Ul=zl.formatPrefix,zl}function Vl(t){return Math.max(0,-Dl(Math.abs(t)))}function Gl(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Dl(e)/3)))-Dl(Math.abs(t)))}function Xl(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Dl(e)-Dl(t))+1}Hl({thousands:",",grouping:[3],currency:["$",""]});var Zl=1e-6,Ql=1e-12,Kl=Math.PI,Jl=Kl/2,tu=Kl/4,eu=2*Kl,nu=180/Kl,ru=Kl/180,iu=Math.abs,au=Math.atan,ou=Math.atan2,su=Math.cos,cu=Math.ceil,lu=Math.exp,uu=(Math.floor,Math.hypot),hu=Math.log,du=Math.pow,fu=Math.sin,pu=Math.sign||function(t){return t>0?1:t<0?-1:0},gu=Math.sqrt,yu=Math.tan;function mu(t){return t>1?0:t<-1?Kl:Math.acos(t)}function bu(t){return t>1?Jl:t<-1?-Jl:Math.asin(t)}function vu(t){return(t=fu(t/2))*t}function _u(){}function xu(t,e){t&&wu.hasOwnProperty(t.type)&&wu[t.type](t,e)}var ku={Feature:function(t,e){xu(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r<i;)xu(n[r].geometry,e)}},wu={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)t=n[r],e.point(t[0],t[1],t[2])},LineString:function(t,e){Eu(t.coordinates,e,0)},MultiLineString:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)Eu(n[r],e,0)},Polygon:function(t,e){Tu(t.coordinates,e)},MultiPolygon:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)Tu(n[r],e)},GeometryCollection:function(t,e){for(var n=t.geometries,r=-1,i=n.length;++r<i;)xu(n[r],e)}};function Eu(t,e,n){var r,i=-1,a=t.length-n;for(e.lineStart();++i<a;)r=t[i],e.point(r[0],r[1],r[2]);e.lineEnd()}function Tu(t,e){var n=-1,r=t.length;for(e.polygonStart();++n<r;)Eu(t[n],e,1);e.polygonEnd()}function Cu(t,e){t&&ku.hasOwnProperty(t.type)?ku[t.type](t,e):xu(t,e)}var Su,Au,Mu,Ou,Nu,Du,Bu,Lu,Iu,Fu,Ru,Pu,ju,zu,Yu,Uu,$u=new x,Wu=new x,qu={point:_u,lineStart:_u,lineEnd:_u,polygonStart:function(){$u=new x,qu.lineStart=Hu,qu.lineEnd=Vu},polygonEnd:function(){var t=+$u;Wu.add(t<0?eu+t:t),this.lineStart=this.lineEnd=this.point=_u},sphere:function(){Wu.add(eu)}};function Hu(){qu.point=Gu}function Vu(){Xu(Su,Au)}function Gu(t,e){qu.point=Xu,Su=t,Au=e,Mu=t*=ru,Ou=su(e=(e*=ru)/2+tu),Nu=fu(e)}function Xu(t,e){var n=(t*=ru)-Mu,r=n>=0?1:-1,i=r*n,a=su(e=(e*=ru)/2+tu),o=fu(e),s=Nu*o,c=Ou*a+s*su(i),l=s*r*fu(i);$u.add(ou(l,c)),Mu=t,Ou=a,Nu=o}function Zu(t){return Wu=new x,Cu(t,qu),2*Wu}function Qu(t){return[ou(t[1],t[0]),bu(t[2])]}function Ku(t){var e=t[0],n=t[1],r=su(n);return[r*su(e),r*fu(e),fu(n)]}function Ju(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function th(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function eh(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function nh(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function rh(t){var e=gu(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var ih,ah,oh,sh,ch,lh,uh,hh,dh,fh,ph,gh,yh,mh,bh,vh,_h={point:xh,lineStart:wh,lineEnd:Eh,polygonStart:function(){_h.point=Th,_h.lineStart=Ch,_h.lineEnd=Sh,zu=new x,qu.polygonStart()},polygonEnd:function(){qu.polygonEnd(),_h.point=xh,_h.lineStart=wh,_h.lineEnd=Eh,$u<0?(Du=-(Lu=180),Bu=-(Iu=90)):zu>Zl?Iu=90:zu<-1e-6&&(Bu=-90),Uu[0]=Du,Uu[1]=Lu},sphere:function(){Du=-(Lu=180),Bu=-(Iu=90)}};function xh(t,e){Yu.push(Uu=[Du=t,Lu=t]),e<Bu&&(Bu=e),e>Iu&&(Iu=e)}function kh(t,e){var n=Ku([t*ru,e*ru]);if(ju){var r=th(ju,n),i=th([r[1],-r[0],0],r);rh(i),i=Qu(i);var a,o=t-Fu,s=o>0?1:-1,c=i[0]*nu*s,l=iu(o)>180;l^(s*Fu<c&&c<s*t)?(a=i[1]*nu)>Iu&&(Iu=a):l^(s*Fu<(c=(c+360)%360-180)&&c<s*t)?(a=-i[1]*nu)<Bu&&(Bu=a):(e<Bu&&(Bu=e),e>Iu&&(Iu=e)),l?t<Fu?Ah(Du,t)>Ah(Du,Lu)&&(Lu=t):Ah(t,Lu)>Ah(Du,Lu)&&(Du=t):Lu>=Du?(t<Du&&(Du=t),t>Lu&&(Lu=t)):t>Fu?Ah(Du,t)>Ah(Du,Lu)&&(Lu=t):Ah(t,Lu)>Ah(Du,Lu)&&(Du=t)}else Yu.push(Uu=[Du=t,Lu=t]);e<Bu&&(Bu=e),e>Iu&&(Iu=e),ju=n,Fu=t}function wh(){_h.point=kh}function Eh(){Uu[0]=Du,Uu[1]=Lu,_h.point=xh,ju=null}function Th(t,e){if(ju){var n=t-Fu;zu.add(iu(n)>180?n+(n>0?360:-360):n)}else Ru=t,Pu=e;qu.point(t,e),kh(t,e)}function Ch(){qu.lineStart()}function Sh(){Th(Ru,Pu),qu.lineEnd(),iu(zu)>Zl&&(Du=-(Lu=180)),Uu[0]=Du,Uu[1]=Lu,ju=null}function Ah(t,e){return(e-=t)<0?e+360:e}function Mh(t,e){return t[0]-e[0]}function Oh(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:e<t[0]||t[1]<e}function Nh(t){var e,n,r,i,a,o,s;if(Iu=Lu=-(Du=Bu=1/0),Yu=[],Cu(t,_h),n=Yu.length){for(Yu.sort(Mh),e=1,a=[r=Yu[0]];e<n;++e)Oh(r,(i=Yu[e])[0])||Oh(r,i[1])?(Ah(r[0],i[1])>Ah(r[0],r[1])&&(r[1]=i[1]),Ah(i[0],r[1])>Ah(r[0],r[1])&&(r[0]=i[0])):a.push(r=i);for(o=-1/0,e=0,r=a[n=a.length-1];e<=n;r=i,++e)i=a[e],(s=Ah(r[1],i[0]))>o&&(o=s,Du=i[0],Lu=r[1])}return Yu=Uu=null,Du===1/0||Bu===1/0?[[NaN,NaN],[NaN,NaN]]:[[Du,Bu],[Lu,Iu]]}var Dh={sphere:_u,point:Bh,lineStart:Ih,lineEnd:Ph,polygonStart:function(){Dh.lineStart=jh,Dh.lineEnd=zh},polygonEnd:function(){Dh.lineStart=Ih,Dh.lineEnd=Ph}};function Bh(t,e){t*=ru;var n=su(e*=ru);Lh(n*su(t),n*fu(t),fu(e))}function Lh(t,e,n){++ih,oh+=(t-oh)/ih,sh+=(e-sh)/ih,ch+=(n-ch)/ih}function Ih(){Dh.point=Fh}function Fh(t,e){t*=ru;var n=su(e*=ru);mh=n*su(t),bh=n*fu(t),vh=fu(e),Dh.point=Rh,Lh(mh,bh,vh)}function Rh(t,e){t*=ru;var n=su(e*=ru),r=n*su(t),i=n*fu(t),a=fu(e),o=ou(gu((o=bh*a-vh*i)*o+(o=vh*r-mh*a)*o+(o=mh*i-bh*r)*o),mh*r+bh*i+vh*a);ah+=o,lh+=o*(mh+(mh=r)),uh+=o*(bh+(bh=i)),hh+=o*(vh+(vh=a)),Lh(mh,bh,vh)}function Ph(){Dh.point=Bh}function jh(){Dh.point=Yh}function zh(){Uh(gh,yh),Dh.point=Bh}function Yh(t,e){gh=t,yh=e,t*=ru,e*=ru,Dh.point=Uh;var n=su(e);mh=n*su(t),bh=n*fu(t),vh=fu(e),Lh(mh,bh,vh)}function Uh(t,e){t*=ru;var n=su(e*=ru),r=n*su(t),i=n*fu(t),a=fu(e),o=bh*a-vh*i,s=vh*r-mh*a,c=mh*i-bh*r,l=uu(o,s,c),u=bu(l),h=l&&-u/l;dh.add(h*o),fh.add(h*s),ph.add(h*c),ah+=u,lh+=u*(mh+(mh=r)),uh+=u*(bh+(bh=i)),hh+=u*(vh+(vh=a)),Lh(mh,bh,vh)}function $h(t){ih=ah=oh=sh=ch=lh=uh=hh=0,dh=new x,fh=new x,ph=new x,Cu(t,Dh);var e=+dh,n=+fh,r=+ph,i=uu(e,n,r);return i<Ql&&(e=lh,n=uh,r=hh,ah<Zl&&(e=oh,n=sh,r=ch),(i=uu(e,n,r))<Ql)?[NaN,NaN]:[ou(n,e)*nu,bu(r/i)*nu]}function Wh(t){return function(){return t}}function qh(t,e){function n(n,r){return n=t(n,r),e(n[0],n[1])}return t.invert&&e.invert&&(n.invert=function(n,r){return(n=e.invert(n,r))&&t.invert(n[0],n[1])}),n}function Hh(t,e){return[iu(t)>Kl?t+Math.round(-t/eu)*eu:t,e]}function Vh(t,e,n){return(t%=eu)?e||n?qh(Xh(t),Zh(e,n)):Xh(t):e||n?Zh(e,n):Hh}function Gh(t){return function(e,n){return[(e+=t)>Kl?e-eu:e<-Kl?e+eu:e,n]}}function Xh(t){var e=Gh(t);return e.invert=Gh(-t),e}function Zh(t,e){var n=su(t),r=fu(t),i=su(e),a=fu(e);function o(t,e){var o=su(e),s=su(t)*o,c=fu(t)*o,l=fu(e),u=l*n+s*r;return[ou(c*i-u*a,s*n-l*r),bu(u*i+c*a)]}return o.invert=function(t,e){var o=su(e),s=su(t)*o,c=fu(t)*o,l=fu(e),u=l*i-c*a;return[ou(c*i+l*a,s*n+u*r),bu(u*n-s*r)]},o}function Qh(t){function e(e){return(e=t(e[0]*ru,e[1]*ru))[0]*=nu,e[1]*=nu,e}return t=Vh(t[0]*ru,t[1]*ru,t.length>2?t[2]*ru:0),e.invert=function(e){return(e=t.invert(e[0]*ru,e[1]*ru))[0]*=nu,e[1]*=nu,e},e}function Kh(t,e,n,r,i,a){if(n){var o=su(e),s=fu(e),c=r*n;null==i?(i=e+r*eu,a=e-c/2):(i=Jh(o,i),a=Jh(o,a),(r>0?i<a:i>a)&&(i+=r*eu));for(var l,u=i;r>0?u>a:u<a;u-=c)l=Qu([o,-s*su(u),-s*fu(u)]),t.point(l[0],l[1])}}function Jh(t,e){(e=Ku(e))[0]-=t,rh(e);var n=mu(-e[1]);return((-e[2]<0?-n:n)+eu-Zl)%eu}function td(){var t,e,n=Wh([0,0]),r=Wh(90),i=Wh(6),a={point:function(n,r){t.push(n=e(n,r)),n[0]*=nu,n[1]*=nu}};function o(){var o=n.apply(this,arguments),s=r.apply(this,arguments)*ru,c=i.apply(this,arguments)*ru;return t=[],e=Vh(-o[0]*ru,-o[1]*ru,0).invert,Kh(a,s,c,1),o={type:"Polygon",coordinates:[t]},t=e=null,o}return o.center=function(t){return arguments.length?(n="function"==typeof t?t:Wh([+t[0],+t[1]]),o):n},o.radius=function(t){return arguments.length?(r="function"==typeof t?t:Wh(+t),o):r},o.precision=function(t){return arguments.length?(i="function"==typeof t?t:Wh(+t),o):i},o}function ed(){var t,e=[];return{point:function(e,n,r){t.push([e,n,r])},lineStart:function(){e.push(t=[])},lineEnd:_u,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}}function nd(t,e){return iu(t[0]-e[0])<Zl&&iu(t[1]-e[1])<Zl}function rd(t,e,n,r){this.x=t,this.z=e,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}function id(t,e,n,r,i){var a,o,s=[],c=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,n,r=t[0],o=t[e];if(nd(r,o)){if(!r[2]&&!o[2]){for(i.lineStart(),a=0;a<e;++a)i.point((r=t[a])[0],r[1]);return void i.lineEnd()}o[0]+=2e-6}s.push(n=new rd(r,t,null,!0)),c.push(n.o=new rd(r,null,n,!1)),s.push(n=new rd(o,t,null,!1)),c.push(n.o=new rd(o,null,n,!0))}})),s.length){for(c.sort(e),ad(s),ad(c),a=0,o=c.length;a<o;++a)c[a].e=n=!n;for(var l,u,h=s[0];;){for(var d=h,f=!0;d.v;)if((d=d.n)===h)return;l=d.z,i.lineStart();do{if(d.v=d.o.v=!0,d.e){if(f)for(a=0,o=l.length;a<o;++a)i.point((u=l[a])[0],u[1]);else r(d.x,d.n.x,1,i);d=d.n}else{if(f)for(l=d.p.z,a=l.length-1;a>=0;--a)i.point((u=l[a])[0],u[1]);else r(d.x,d.p.x,-1,i);d=d.p}l=(d=d.o).z,f=!f}while(!d.v);i.lineEnd()}}}function ad(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r<e;)i.n=n=t[r],n.p=i,i=n;i.n=n=t[0],n.p=i}}function od(t){return iu(t[0])<=Kl?t[0]:pu(t[0])*((iu(t[0])+Kl)%eu-Kl)}function sd(t,e){var n=od(e),r=e[1],i=fu(r),a=[fu(n),-su(n),0],o=0,s=0,c=new x;1===i?r=Jl+Zl:-1===i&&(r=-Jl-Zl);for(var l=0,u=t.length;l<u;++l)if(d=(h=t[l]).length)for(var h,d,f=h[d-1],p=od(f),g=f[1]/2+tu,y=fu(g),m=su(g),b=0;b<d;++b,p=_,y=w,m=E,f=v){var v=h[b],_=od(v),k=v[1]/2+tu,w=fu(k),E=su(k),T=_-p,C=T>=0?1:-1,S=C*T,A=S>Kl,M=y*w;if(c.add(ou(M*C*fu(S),m*E+M*su(S))),o+=A?T+C*eu:T,A^p>=n^_>=n){var O=th(Ku(f),Ku(v));rh(O);var N=th(a,O);rh(N);var D=(A^T>=0?-1:1)*bu(N[2]);(r>D||r===D&&(O[0]||O[1]))&&(s+=A^T>=0?1:-1)}}return(o<-1e-6||o<Zl&&c<-1e-12)^1&s}function cd(t,e,n,r){return function(i){var a,o,s,c=e(i),l=ed(),u=e(l),h=!1,d={point:f,lineStart:g,lineEnd:y,polygonStart:function(){d.point=m,d.lineStart=b,d.lineEnd=v,o=[],a=[]},polygonEnd:function(){d.point=f,d.lineStart=g,d.lineEnd=y,o=yt(o);var t=sd(a,r);o.length?(h||(i.polygonStart(),h=!0),id(o,ud,t,n,i)):t&&(h||(i.polygonStart(),h=!0),i.lineStart(),n(null,null,1,i),i.lineEnd()),h&&(i.polygonEnd(),h=!1),o=a=null},sphere:function(){i.polygonStart(),i.lineStart(),n(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function f(e,n){t(e,n)&&i.point(e,n)}function p(t,e){c.point(t,e)}function g(){d.point=p,c.lineStart()}function y(){d.point=f,c.lineEnd()}function m(t,e){s.push([t,e]),u.point(t,e)}function b(){u.lineStart(),s=[]}function v(){m(s[0][0],s[0][1]),u.lineEnd();var t,e,n,r,c=u.clean(),d=l.result(),f=d.length;if(s.pop(),a.push(s),s=null,f)if(1&c){if((e=(n=d[0]).length-1)>0){for(h||(i.polygonStart(),h=!0),i.lineStart(),t=0;t<e;++t)i.point((r=n[t])[0],r[1]);i.lineEnd()}}else f>1&&2&c&&d.push(d.pop().concat(d.shift())),o.push(d.filter(ld))}return d}}function ld(t){return t.length>1}function ud(t,e){return((t=t.x)[0]<0?t[1]-Jl-Zl:Jl-t[1])-((e=e.x)[0]<0?e[1]-Jl-Zl:Jl-e[1])}Hh.invert=Hh;const hd=cd((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?Kl:-Kl,c=iu(a-n);iu(c-Kl)<Zl?(t.point(n,r=(r+o)/2>0?Jl:-Jl),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),t.point(a,r),e=0):i!==s&&c>=Kl&&(iu(n-i)<Zl&&(n-=i*Zl),iu(a-s)<Zl&&(a-=s*Zl),r=function(t,e,n,r){var i,a,o=fu(t-n);return iu(o)>Zl?au((fu(e)*(a=su(r))*fu(n)-fu(r)*(i=su(e))*fu(t))/(i*a*o)):(e+r)/2}(n,r,a,o),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),e=0),t.point(n=a,r=o),i=s},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*Jl,r.point(-Kl,i),r.point(0,i),r.point(Kl,i),r.point(Kl,0),r.point(Kl,-i),r.point(0,-i),r.point(-Kl,-i),r.point(-Kl,0),r.point(-Kl,i);else if(iu(t[0]-e[0])>Zl){var a=t[0]<e[0]?Kl:-Kl;i=n*a/2,r.point(-a,i),r.point(0,i),r.point(a,i)}else r.point(e[0],e[1])}),[-Kl,-Jl]);function dd(t){var e=su(t),n=6*ru,r=e>0,i=iu(e)>Zl;function a(t,n){return su(t)*su(n)>e}function o(t,n,r){var i=[1,0,0],a=th(Ku(t),Ku(n)),o=Ju(a,a),s=a[0],c=o-s*s;if(!c)return!r&&t;var l=e*o/c,u=-e*s/c,h=th(i,a),d=nh(i,l);eh(d,nh(a,u));var f=h,p=Ju(d,f),g=Ju(f,f),y=p*p-g*(Ju(d,d)-1);if(!(y<0)){var m=gu(y),b=nh(f,(-p-m)/g);if(eh(b,d),b=Qu(b),!r)return b;var v,_=t[0],x=n[0],k=t[1],w=n[1];x<_&&(v=_,_=x,x=v);var E=x-_,T=iu(E-Kl)<Zl;if(!T&&w<k&&(v=k,k=w,w=v),T||E<Zl?T?k+w>0^b[1]<(iu(b[0]-_)<Zl?k:w):k<=b[1]&&b[1]<=w:E>Kl^(_<=b[0]&&b[0]<=x)){var C=nh(f,(-p+m)/g);return eh(C,d),[b,Qu(C)]}}}function s(e,n){var i=r?t:Kl-t,a=0;return e<-i?a|=1:e>i&&(a|=2),n<-i?a|=4:n>i&&(a|=8),a}return cd(a,(function(t){var e,n,c,l,u;return{lineStart:function(){l=c=!1,u=1},point:function(h,d){var f,p=[h,d],g=a(h,d),y=r?g?0:s(h,d):g?s(h+(h<0?Kl:-Kl),d):0;if(!e&&(l=c=g)&&t.lineStart(),g!==c&&(!(f=o(e,p))||nd(e,f)||nd(p,f))&&(p[2]=1),g!==c)u=0,g?(t.lineStart(),f=o(p,e),t.point(f[0],f[1])):(f=o(e,p),t.point(f[0],f[1],2),t.lineEnd()),e=f;else if(i&&e&&r^g){var m;y&n||!(m=o(p,e,!0))||(u=0,r?(t.lineStart(),t.point(m[0][0],m[0][1]),t.point(m[1][0],m[1][1]),t.lineEnd()):(t.point(m[1][0],m[1][1]),t.lineEnd(),t.lineStart(),t.point(m[0][0],m[0][1],3)))}!g||e&&nd(e,p)||t.point(p[0],p[1]),e=p,c=g,n=y},lineEnd:function(){c&&t.lineEnd(),e=null},clean:function(){return u|(l&&c)<<1}}}),(function(e,r,i,a){Kh(a,t,n,i,e,r)}),r?[0,-t]:[-Kl,t-Kl])}var fd,pd,gd,yd,md=1e9,bd=-md;function vd(t,e,n,r){function i(i,a){return t<=i&&i<=n&&e<=a&&a<=r}function a(i,a,s,l){var u=0,h=0;if(null==i||(u=o(i,s))!==(h=o(a,s))||c(i,a)<0^s>0)do{l.point(0===u||3===u?t:n,u>1?r:e)}while((u=(u+s+4)%4)!==h);else l.point(a[0],a[1])}function o(r,i){return iu(r[0]-t)<Zl?i>0?0:3:iu(r[0]-n)<Zl?i>0?2:1:iu(r[1]-e)<Zl?i>0?1:0:i>0?3:2}function s(t,e){return c(t.x,e.x)}function c(t,e){var n=o(t,1),r=o(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(o){var c,l,u,h,d,f,p,g,y,m,b,v=o,_=ed(),x={point:k,lineStart:function(){x.point=w,l&&l.push(u=[]),m=!0,y=!1,p=g=NaN},lineEnd:function(){c&&(w(h,d),f&&y&&_.rejoin(),c.push(_.result())),x.point=k,y&&v.lineEnd()},polygonStart:function(){v=_,c=[],l=[],b=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=l.length;n<i;++n)for(var a,o,s=l[n],c=1,u=s.length,h=s[0],d=h[0],f=h[1];c<u;++c)a=d,o=f,d=(h=s[c])[0],f=h[1],o<=r?f>r&&(d-a)*(r-o)>(f-o)*(t-a)&&++e:f<=r&&(d-a)*(r-o)<(f-o)*(t-a)&&--e;return e}(),n=b&&e,i=(c=yt(c)).length;(n||i)&&(o.polygonStart(),n&&(o.lineStart(),a(null,null,1,o),o.lineEnd()),i&&id(c,s,e,a,o),o.polygonEnd()),v=o,c=l=u=null}};function k(t,e){i(t,e)&&v.point(t,e)}function w(a,o){var s=i(a,o);if(l&&u.push([a,o]),m)h=a,d=o,f=s,m=!1,s&&(v.lineStart(),v.point(a,o));else if(s&&y)v.point(a,o);else{var c=[p=Math.max(bd,Math.min(md,p)),g=Math.max(bd,Math.min(md,g))],_=[a=Math.max(bd,Math.min(md,a)),o=Math.max(bd,Math.min(md,o))];!function(t,e,n,r,i,a){var o,s=t[0],c=t[1],l=0,u=1,h=e[0]-s,d=e[1]-c;if(o=n-s,h||!(o>0)){if(o/=h,h<0){if(o<l)return;o<u&&(u=o)}else if(h>0){if(o>u)return;o>l&&(l=o)}if(o=i-s,h||!(o<0)){if(o/=h,h<0){if(o>u)return;o>l&&(l=o)}else if(h>0){if(o<l)return;o<u&&(u=o)}if(o=r-c,d||!(o>0)){if(o/=d,d<0){if(o<l)return;o<u&&(u=o)}else if(d>0){if(o>u)return;o>l&&(l=o)}if(o=a-c,d||!(o<0)){if(o/=d,d<0){if(o>u)return;o>l&&(l=o)}else if(d>0){if(o<l)return;o<u&&(u=o)}return l>0&&(t[0]=s+l*h,t[1]=c+l*d),u<1&&(e[0]=s+u*h,e[1]=c+u*d),!0}}}}}(c,_,t,e,n,r)?s&&(v.lineStart(),v.point(a,o),b=!1):(y||(v.lineStart(),v.point(c[0],c[1])),v.point(_[0],_[1]),s||v.lineEnd(),b=!1)}p=a,g=o,y=s}return x}}function _d(){var t,e,n,r=0,i=0,a=960,o=500;return n={stream:function(n){return t&&e===n?t:t=vd(r,i,a,o)(e=n)},extent:function(s){return arguments.length?(r=+s[0][0],i=+s[0][1],a=+s[1][0],o=+s[1][1],t=e=null,n):[[r,i],[a,o]]}}}var xd={sphere:_u,point:_u,lineStart:function(){xd.point=wd,xd.lineEnd=kd},lineEnd:_u,polygonStart:_u,polygonEnd:_u};function kd(){xd.point=xd.lineEnd=_u}function wd(t,e){pd=t*=ru,gd=fu(e*=ru),yd=su(e),xd.point=Ed}function Ed(t,e){t*=ru;var n=fu(e*=ru),r=su(e),i=iu(t-pd),a=su(i),o=r*fu(i),s=yd*n-gd*r*a,c=gd*n+yd*r*a;fd.add(ou(gu(o*o+s*s),c)),pd=t,gd=n,yd=r}function Td(t){return fd=new x,Cu(t,xd),+fd}var Cd=[null,null],Sd={type:"LineString",coordinates:Cd};function Ad(t,e){return Cd[0]=t,Cd[1]=e,Td(Sd)}var Md={Feature:function(t,e){return Nd(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r<i;)if(Nd(n[r].geometry,e))return!0;return!1}},Od={Sphere:function(){return!0},Point:function(t,e){return Dd(t.coordinates,e)},MultiPoint:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)if(Dd(n[r],e))return!0;return!1},LineString:function(t,e){return Bd(t.coordinates,e)},MultiLineString:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)if(Bd(n[r],e))return!0;return!1},Polygon:function(t,e){return Ld(t.coordinates,e)},MultiPolygon:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)if(Ld(n[r],e))return!0;return!1},GeometryCollection:function(t,e){for(var n=t.geometries,r=-1,i=n.length;++r<i;)if(Nd(n[r],e))return!0;return!1}};function Nd(t,e){return!(!t||!Od.hasOwnProperty(t.type))&&Od[t.type](t,e)}function Dd(t,e){return 0===Ad(t,e)}function Bd(t,e){for(var n,r,i,a=0,o=t.length;a<o;a++){if(0===(r=Ad(t[a],e)))return!0;if(a>0&&(i=Ad(t[a],t[a-1]))>0&&n<=i&&r<=i&&(n+r-i)*(1-Math.pow((n-r)/i,2))<Ql*i)return!0;n=r}return!1}function Ld(t,e){return!!sd(t.map(Id),Fd(e))}function Id(t){return(t=t.map(Fd)).pop(),t}function Fd(t){return[t[0]*ru,t[1]*ru]}function Rd(t,e){return(t&&Md.hasOwnProperty(t.type)?Md[t.type]:Nd)(t,e)}function Pd(t,e,n){var r=xt(t,e-Zl,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function jd(t,e,n){var r=xt(t,e-Zl,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}function zd(){var t,e,n,r,i,a,o,s,c,l,u,h,d=10,f=d,p=90,g=360,y=2.5;function m(){return{type:"MultiLineString",coordinates:b()}}function b(){return xt(cu(r/p)*p,n,p).map(u).concat(xt(cu(s/g)*g,o,g).map(h)).concat(xt(cu(e/d)*d,t,d).filter((function(t){return iu(t%p)>Zl})).map(c)).concat(xt(cu(a/f)*f,i,f).filter((function(t){return iu(t%g)>Zl})).map(l))}return m.lines=function(){return b().map((function(t){return{type:"LineString",coordinates:t}}))},m.outline=function(){return{type:"Polygon",coordinates:[u(r).concat(h(o).slice(1),u(n).reverse().slice(1),h(s).reverse().slice(1))]}},m.extent=function(t){return arguments.length?m.extentMajor(t).extentMinor(t):m.extentMinor()},m.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],s=+t[0][1],o=+t[1][1],r>n&&(t=r,r=n,n=t),s>o&&(t=s,s=o,o=t),m.precision(y)):[[r,s],[n,o]]},m.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],a=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),a>i&&(n=a,a=i,i=n),m.precision(y)):[[e,a],[t,i]]},m.step=function(t){return arguments.length?m.stepMajor(t).stepMinor(t):m.stepMinor()},m.stepMajor=function(t){return arguments.length?(p=+t[0],g=+t[1],m):[p,g]},m.stepMinor=function(t){return arguments.length?(d=+t[0],f=+t[1],m):[d,f]},m.precision=function(d){return arguments.length?(y=+d,c=Pd(a,i,90),l=jd(e,t,y),u=Pd(s,o,90),h=jd(r,n,y),m):y},m.extentMajor([[-180,-89.999999],[180,89.999999]]).extentMinor([[-180,-80.000001],[180,80.000001]])}function Yd(){return zd()()}function Ud(t,e){var n=t[0]*ru,r=t[1]*ru,i=e[0]*ru,a=e[1]*ru,o=su(r),s=fu(r),c=su(a),l=fu(a),u=o*su(n),h=o*fu(n),d=c*su(i),f=c*fu(i),p=2*bu(gu(vu(a-r)+o*c*vu(i-n))),g=fu(p),y=p?function(t){var e=fu(t*=p)/g,n=fu(p-t)/g,r=n*u+e*d,i=n*h+e*f,a=n*s+e*l;return[ou(i,r)*nu,ou(a,gu(r*r+i*i))*nu]}:function(){return[n*nu,r*nu]};return y.distance=p,y}const $d=t=>t;var Wd,qd,Hd,Vd,Gd=new x,Xd=new x,Zd={point:_u,lineStart:_u,lineEnd:_u,polygonStart:function(){Zd.lineStart=Qd,Zd.lineEnd=tf},polygonEnd:function(){Zd.lineStart=Zd.lineEnd=Zd.point=_u,Gd.add(iu(Xd)),Xd=new x},result:function(){var t=Gd/2;return Gd=new x,t}};function Qd(){Zd.point=Kd}function Kd(t,e){Zd.point=Jd,Wd=Hd=t,qd=Vd=e}function Jd(t,e){Xd.add(Vd*t-Hd*e),Hd=t,Vd=e}function tf(){Jd(Wd,qd)}const ef=Zd;var nf=1/0,rf=nf,af=-nf,of=af,sf={point:function(t,e){t<nf&&(nf=t),t>af&&(af=t),e<rf&&(rf=e),e>of&&(of=e)},lineStart:_u,lineEnd:_u,polygonStart:_u,polygonEnd:_u,result:function(){var t=[[nf,rf],[af,of]];return af=of=-(rf=nf=1/0),t}};const cf=sf;var lf,uf,hf,df,ff=0,pf=0,gf=0,yf=0,mf=0,bf=0,vf=0,_f=0,xf=0,kf={point:wf,lineStart:Ef,lineEnd:Sf,polygonStart:function(){kf.lineStart=Af,kf.lineEnd=Mf},polygonEnd:function(){kf.point=wf,kf.lineStart=Ef,kf.lineEnd=Sf},result:function(){var t=xf?[vf/xf,_f/xf]:bf?[yf/bf,mf/bf]:gf?[ff/gf,pf/gf]:[NaN,NaN];return ff=pf=gf=yf=mf=bf=vf=_f=xf=0,t}};function wf(t,e){ff+=t,pf+=e,++gf}function Ef(){kf.point=Tf}function Tf(t,e){kf.point=Cf,wf(hf=t,df=e)}function Cf(t,e){var n=t-hf,r=e-df,i=gu(n*n+r*r);yf+=i*(hf+t)/2,mf+=i*(df+e)/2,bf+=i,wf(hf=t,df=e)}function Sf(){kf.point=wf}function Af(){kf.point=Of}function Mf(){Nf(lf,uf)}function Of(t,e){kf.point=Nf,wf(lf=hf=t,uf=df=e)}function Nf(t,e){var n=t-hf,r=e-df,i=gu(n*n+r*r);yf+=i*(hf+t)/2,mf+=i*(df+e)/2,bf+=i,vf+=(i=df*t-hf*e)*(hf+t),_f+=i*(df+e),xf+=3*i,wf(hf=t,df=e)}const Df=kf;function Bf(t){this._context=t}Bf.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,eu)}},result:_u};var Lf,If,Ff,Rf,Pf,jf=new x,zf={point:_u,lineStart:function(){zf.point=Yf},lineEnd:function(){Lf&&Uf(If,Ff),zf.point=_u},polygonStart:function(){Lf=!0},polygonEnd:function(){Lf=null},result:function(){var t=+jf;return jf=new x,t}};function Yf(t,e){zf.point=Uf,If=Rf=t,Ff=Pf=e}function Uf(t,e){Rf-=t,Pf-=e,jf.add(gu(Rf*Rf+Pf*Pf)),Rf=t,Pf=e}const $f=zf;function Wf(){this._string=[]}function qf(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Hf(t,e){var n,r,i=4.5;function a(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),Cu(t,n(r))),r.result()}return a.area=function(t){return Cu(t,n(ef)),ef.result()},a.measure=function(t){return Cu(t,n($f)),$f.result()},a.bounds=function(t){return Cu(t,n(cf)),cf.result()},a.centroid=function(t){return Cu(t,n(Df)),Df.result()},a.projection=function(e){return arguments.length?(n=null==e?(t=null,$d):(t=e).stream,a):t},a.context=function(t){return arguments.length?(r=null==t?(e=null,new Wf):new Bf(e=t),"function"!=typeof i&&r.pointRadius(i),a):e},a.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),a):i},a.projection(t).context(e)}function Vf(t){return{stream:Gf(t)}}function Gf(t){return function(e){var n=new Xf;for(var r in t)n[r]=t[r];return n.stream=e,n}}function Xf(){}function Zf(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),Cu(n,t.stream(cf)),e(cf.result()),null!=r&&t.clipExtent(r),t}function Qf(t,e,n){return Zf(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],a=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),o=+e[0][0]+(r-a*(n[1][0]+n[0][0]))/2,s=+e[0][1]+(i-a*(n[1][1]+n[0][1]))/2;t.scale(150*a).translate([o,s])}),n)}function Kf(t,e,n){return Qf(t,[[0,0],e],n)}function Jf(t,e,n){return Zf(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),a=(r-i*(n[1][0]+n[0][0]))/2,o=-i*n[0][1];t.scale(150*i).translate([a,o])}),n)}function tp(t,e,n){return Zf(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),a=-i*n[0][0],o=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([a,o])}),n)}Wf.prototype={_radius:4.5,_circle:qf(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=qf(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}},Xf.prototype={constructor:Xf,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var ep=su(30*ru);function np(t,e){return+e?function(t,e){function n(r,i,a,o,s,c,l,u,h,d,f,p,g,y){var m=l-r,b=u-i,v=m*m+b*b;if(v>4*e&&g--){var _=o+d,x=s+f,k=c+p,w=gu(_*_+x*x+k*k),E=bu(k/=w),T=iu(iu(k)-1)<Zl||iu(a-h)<Zl?(a+h)/2:ou(x,_),C=t(T,E),S=C[0],A=C[1],M=S-r,O=A-i,N=b*M-m*O;(N*N/v>e||iu((m*M+b*O)/v-.5)>.3||o*d+s*f+c*p<ep)&&(n(r,i,a,o,s,c,S,A,T,_/=w,x/=w,k,g,y),y.point(S,A),n(S,A,T,_,x,k,l,u,h,d,f,p,g,y))}}return function(e){var r,i,a,o,s,c,l,u,h,d,f,p,g={point:y,lineStart:m,lineEnd:v,polygonStart:function(){e.polygonStart(),g.lineStart=_},polygonEnd:function(){e.polygonEnd(),g.lineStart=m}};function y(n,r){n=t(n,r),e.point(n[0],n[1])}function m(){u=NaN,g.point=b,e.lineStart()}function b(r,i){var a=Ku([r,i]),o=t(r,i);n(u,h,l,d,f,p,u=o[0],h=o[1],l=r,d=a[0],f=a[1],p=a[2],16,e),e.point(u,h)}function v(){g.point=y,e.lineEnd()}function _(){m(),g.point=x,g.lineEnd=k}function x(t,e){b(r=t,e),i=u,a=h,o=d,s=f,c=p,g.point=b}function k(){n(u,h,l,d,f,p,i,a,r,o,s,c,16,e),g.lineEnd=v,v()}return g}}(t,e):function(t){return Gf({point:function(e,n){e=t(e,n),this.stream.point(e[0],e[1])}})}(t)}var rp=Gf({point:function(t,e){this.stream.point(t*ru,e*ru)}});function ip(t,e,n,r,i,a){if(!a)return function(t,e,n,r,i){function a(a,o){return[e+t*(a*=r),n-t*(o*=i)]}return a.invert=function(a,o){return[(a-e)/t*r,(n-o)/t*i]},a}(t,e,n,r,i);var o=su(a),s=fu(a),c=o*t,l=s*t,u=o/t,h=s/t,d=(s*n-o*e)/t,f=(s*e+o*n)/t;function p(t,a){return[c*(t*=r)-l*(a*=i)+e,n-l*t-c*a]}return p.invert=function(t,e){return[r*(u*t-h*e+d),i*(f-h*t-u*e)]},p}function ap(t){return op((function(){return t}))()}function op(t){var e,n,r,i,a,o,s,c,l,u,h=150,d=480,f=250,p=0,g=0,y=0,m=0,b=0,v=0,_=1,x=1,k=null,w=hd,E=null,T=$d,C=.5;function S(t){return c(t[0]*ru,t[1]*ru)}function A(t){return(t=c.invert(t[0],t[1]))&&[t[0]*nu,t[1]*nu]}function M(){var t=ip(h,0,0,_,x,v).apply(null,e(p,g)),r=ip(h,d-t[0],f-t[1],_,x,v);return n=Vh(y,m,b),s=qh(e,r),c=qh(n,s),o=np(s,C),O()}function O(){return l=u=null,S}return S.stream=function(t){return l&&u===t?l:l=rp(function(t){return Gf({point:function(e,n){var r=t(e,n);return this.stream.point(r[0],r[1])}})}(n)(w(o(T(u=t)))))},S.preclip=function(t){return arguments.length?(w=t,k=void 0,O()):w},S.postclip=function(t){return arguments.length?(T=t,E=r=i=a=null,O()):T},S.clipAngle=function(t){return arguments.length?(w=+t?dd(k=t*ru):(k=null,hd),O()):k*nu},S.clipExtent=function(t){return arguments.length?(T=null==t?(E=r=i=a=null,$d):vd(E=+t[0][0],r=+t[0][1],i=+t[1][0],a=+t[1][1]),O()):null==E?null:[[E,r],[i,a]]},S.scale=function(t){return arguments.length?(h=+t,M()):h},S.translate=function(t){return arguments.length?(d=+t[0],f=+t[1],M()):[d,f]},S.center=function(t){return arguments.length?(p=t[0]%360*ru,g=t[1]%360*ru,M()):[p*nu,g*nu]},S.rotate=function(t){return arguments.length?(y=t[0]%360*ru,m=t[1]%360*ru,b=t.length>2?t[2]%360*ru:0,M()):[y*nu,m*nu,b*nu]},S.angle=function(t){return arguments.length?(v=t%360*ru,M()):v*nu},S.reflectX=function(t){return arguments.length?(_=t?-1:1,M()):_<0},S.reflectY=function(t){return arguments.length?(x=t?-1:1,M()):x<0},S.precision=function(t){return arguments.length?(o=np(s,C=t*t),O()):gu(C)},S.fitExtent=function(t,e){return Qf(S,t,e)},S.fitSize=function(t,e){return Kf(S,t,e)},S.fitWidth=function(t,e){return Jf(S,t,e)},S.fitHeight=function(t,e){return tp(S,t,e)},function(){return e=t.apply(this,arguments),S.invert=e.invert&&A,M()}}function sp(t){var e=0,n=Kl/3,r=op(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*ru,n=t[1]*ru):[e*nu,n*nu]},i}function cp(t,e){var n=fu(t),r=(n+fu(e))/2;if(iu(r)<Zl)return function(t){var e=su(t);function n(t,n){return[t*e,fu(n)/e]}return n.invert=function(t,n){return[t/e,bu(n*e)]},n}(t);var i=1+n*(2*r-n),a=gu(i)/r;function o(t,e){var n=gu(i-2*r*fu(e))/r;return[n*fu(t*=r),a-n*su(t)]}return o.invert=function(t,e){var n=a-e,o=ou(t,iu(n))*pu(n);return n*r<0&&(o-=Kl*pu(t)*pu(n)),[o/r,bu((i-(t*t+n*n)*r*r)/(2*r))]},o}function lp(){return sp(cp).scale(155.424).center([0,33.6442])}function up(){return lp().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])}function hp(){var t,e,n,r,i,a,o=up(),s=lp().rotate([154,0]).center([-2,58.5]).parallels([55,65]),c=lp().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,e){a=[t,e]}};function u(t){var e=t[0],o=t[1];return a=null,n.point(e,o),a||(r.point(e,o),a)||(i.point(e,o),a)}function h(){return t=e=null,u}return u.invert=function(t){var e=o.scale(),n=o.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?c:o).invert(t)},u.stream=function(n){return t&&e===n?t:(r=[o.stream(e=n),s.stream(n),c.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n<i;)r[n].point(t,e)},sphere:function(){for(var t=-1;++t<i;)r[t].sphere()},lineStart:function(){for(var t=-1;++t<i;)r[t].lineStart()},lineEnd:function(){for(var t=-1;++t<i;)r[t].lineEnd()},polygonStart:function(){for(var t=-1;++t<i;)r[t].polygonStart()},polygonEnd:function(){for(var t=-1;++t<i;)r[t].polygonEnd()}});var r,i},u.precision=function(t){return arguments.length?(o.precision(t),s.precision(t),c.precision(t),h()):o.precision()},u.scale=function(t){return arguments.length?(o.scale(t),s.scale(.35*t),c.scale(t),u.translate(o.translate())):o.scale()},u.translate=function(t){if(!arguments.length)return o.translate();var e=o.scale(),a=+t[0],u=+t[1];return n=o.translate(t).clipExtent([[a-.455*e,u-.238*e],[a+.455*e,u+.238*e]]).stream(l),r=s.translate([a-.307*e,u+.201*e]).clipExtent([[a-.425*e+Zl,u+.12*e+Zl],[a-.214*e-Zl,u+.234*e-Zl]]).stream(l),i=c.translate([a-.205*e,u+.212*e]).clipExtent([[a-.214*e+Zl,u+.166*e+Zl],[a-.115*e-Zl,u+.234*e-Zl]]).stream(l),h()},u.fitExtent=function(t,e){return Qf(u,t,e)},u.fitSize=function(t,e){return Kf(u,t,e)},u.fitWidth=function(t,e){return Jf(u,t,e)},u.fitHeight=function(t,e){return tp(u,t,e)},u.scale(1070)}function dp(t){return function(e,n){var r=su(e),i=su(n),a=t(r*i);return a===1/0?[2,0]:[a*i*fu(e),a*fu(n)]}}function fp(t){return function(e,n){var r=gu(e*e+n*n),i=t(r),a=fu(i),o=su(i);return[ou(e*a,r*o),bu(r&&n*a/r)]}}var pp=dp((function(t){return gu(2/(1+t))}));function gp(){return ap(pp).scale(124.75).clipAngle(179.999)}pp.invert=fp((function(t){return 2*bu(t/2)}));var yp=dp((function(t){return(t=mu(t))&&t/fu(t)}));function mp(){return ap(yp).scale(79.4188).clipAngle(179.999)}function bp(t,e){return[t,hu(yu((Jl+e)/2))]}function vp(){return _p(bp).scale(961/eu)}function _p(t){var e,n,r,i=ap(t),a=i.center,o=i.scale,s=i.translate,c=i.clipExtent,l=null;function u(){var a=Kl*o(),s=i(Qh(i.rotate()).invert([0,0]));return c(null==l?[[s[0]-a,s[1]-a],[s[0]+a,s[1]+a]]:t===bp?[[Math.max(s[0]-a,l),e],[Math.min(s[0]+a,n),r]]:[[l,Math.max(s[1]-a,e)],[n,Math.min(s[1]+a,r)]])}return i.scale=function(t){return arguments.length?(o(t),u()):o()},i.translate=function(t){return arguments.length?(s(t),u()):s()},i.center=function(t){return arguments.length?(a(t),u()):a()},i.clipExtent=function(t){return arguments.length?(null==t?l=e=n=r=null:(l=+t[0][0],e=+t[0][1],n=+t[1][0],r=+t[1][1]),u()):null==l?null:[[l,e],[n,r]]},u()}function xp(t){return yu((Jl+t)/2)}function kp(t,e){var n=su(t),r=t===e?fu(t):hu(n/su(e))/hu(xp(e)/xp(t)),i=n*du(xp(t),r)/r;if(!r)return bp;function a(t,e){i>0?e<-Jl+Zl&&(e=-Jl+Zl):e>Jl-Zl&&(e=Jl-Zl);var n=i/du(xp(e),r);return[n*fu(r*t),i-n*su(r*t)]}return a.invert=function(t,e){var n=i-e,a=pu(r)*gu(t*t+n*n),o=ou(t,iu(n))*pu(n);return n*r<0&&(o-=Kl*pu(t)*pu(n)),[o/r,2*au(du(i/a,1/r))-Jl]},a}function wp(){return sp(kp).scale(109.5).parallels([30,30])}function Ep(t,e){return[t,e]}function Tp(){return ap(Ep).scale(152.63)}function Cp(t,e){var n=su(t),r=t===e?fu(t):(n-su(e))/(e-t),i=n/r+t;if(iu(r)<Zl)return Ep;function a(t,e){var n=i-e,a=r*t;return[n*fu(a),i-n*su(a)]}return a.invert=function(t,e){var n=i-e,a=ou(t,iu(n))*pu(n);return n*r<0&&(a-=Kl*pu(t)*pu(n)),[a/r,i-pu(r)*gu(t*t+n*n)]},a}function Sp(){return sp(Cp).scale(131.154).center([0,13.9389])}yp.invert=fp((function(t){return t})),bp.invert=function(t,e){return[t,2*au(lu(e))-Jl]},Ep.invert=Ep;var Ap=1.340264,Mp=-.081106,Op=893e-6,Np=.003796,Dp=gu(3)/2;function Bp(t,e){var n=bu(Dp*fu(e)),r=n*n,i=r*r*r;return[t*su(n)/(Dp*(Ap+3*Mp*r+i*(7*Op+9*Np*r))),n*(Ap+Mp*r+i*(Op+Np*r))]}function Lp(){return ap(Bp).scale(177.158)}function Ip(t,e){var n=su(e),r=su(t)*n;return[n*fu(t)/r,fu(e)/r]}function Fp(){return ap(Ip).scale(144.049).clipAngle(60)}function Rp(){var t,e,n,r,i,a,o,s=1,c=0,l=0,u=1,h=1,d=0,f=null,p=1,g=1,y=Gf({point:function(t,e){var n=v([t,e]);this.stream.point(n[0],n[1])}}),m=$d;function b(){return p=s*u,g=s*h,a=o=null,v}function v(n){var r=n[0]*p,i=n[1]*g;if(d){var a=i*t-r*e;r=r*t+i*e,i=a}return[r+c,i+l]}return v.invert=function(n){var r=n[0]-c,i=n[1]-l;if(d){var a=i*t+r*e;r=r*t-i*e,i=a}return[r/p,i/g]},v.stream=function(t){return a&&o===t?a:a=y(m(o=t))},v.postclip=function(t){return arguments.length?(m=t,f=n=r=i=null,b()):m},v.clipExtent=function(t){return arguments.length?(m=null==t?(f=n=r=i=null,$d):vd(f=+t[0][0],n=+t[0][1],r=+t[1][0],i=+t[1][1]),b()):null==f?null:[[f,n],[r,i]]},v.scale=function(t){return arguments.length?(s=+t,b()):s},v.translate=function(t){return arguments.length?(c=+t[0],l=+t[1],b()):[c,l]},v.angle=function(n){return arguments.length?(e=fu(d=n%360*ru),t=su(d),b()):d*nu},v.reflectX=function(t){return arguments.length?(u=t?-1:1,b()):u<0},v.reflectY=function(t){return arguments.length?(h=t?-1:1,b()):h<0},v.fitExtent=function(t,e){return Qf(v,t,e)},v.fitSize=function(t,e){return Kf(v,t,e)},v.fitWidth=function(t,e){return Jf(v,t,e)},v.fitHeight=function(t,e){return tp(v,t,e)},v}function Pp(t,e){var n=e*e,r=n*n;return[t*(.8707-.131979*n+r*(r*(.003971*n-.001529*r)-.013791)),e*(1.007226+n*(.015085+r*(.028874*n-.044475-.005916*r)))]}function jp(){return ap(Pp).scale(175.295)}function zp(t,e){return[su(e)*fu(t),fu(e)]}function Yp(){return ap(zp).scale(249.5).clipAngle(90.000001)}function Up(t,e){var n=su(e),r=1+su(t)*n;return[n*fu(t)/r,fu(e)/r]}function $p(){return ap(Up).scale(250).clipAngle(142)}function Wp(t,e){return[hu(yu((Jl+e)/2)),-t]}function qp(){var t=_p(Wp),e=t.center,n=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?n([t[0],t[1],t.length>2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)}function Hp(t,e){return t.parent===e.parent?1:2}function Vp(t,e){return t+e.x}function Gp(t,e){return Math.max(t,e.y)}function Xp(){var t=Hp,e=1,n=1,r=!1;function i(i){var a,o=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(Vp,0)/t.length}(n),e.y=function(t){return 1+t.reduce(Gp,0)}(n)):(e.x=a?o+=t(e,a):0,e.y=0,a=e)}));var s=function(t){for(var e;e=t.children;)t=e[0];return t}(i),c=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),l=s.x-t(s,c)/2,u=c.x+t(c,s)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-l)/(u-l)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i}function Zp(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function Qp(t,e){t instanceof Map?(t=[void 0,t],void 0===e&&(e=Jp)):void 0===e&&(e=Kp);for(var n,r,i,a,o,s=new ng(t),c=[s];n=c.pop();)if((i=e(n.data))&&(o=(i=Array.from(i)).length))for(n.children=i,a=o-1;a>=0;--a)c.push(r=i[a]=new ng(i[a])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(eg)}function Kp(t){return t.children}function Jp(t){return Array.isArray(t)?t[1]:null}function tg(t){void 0!==t.data.value&&(t.value=t.data.value),t.data=t.data.data}function eg(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function ng(t){this.data=t,this.depth=this.height=0,this.parent=null}function rg(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(Array.from(t))).length,a=[];r<i;)e=t[r],n&&og(n,e)?++r:(n=cg(a=ig(a,e)),r=0);return n}function ig(t,e){var n,r;if(sg(e,t))return[e];for(n=0;n<t.length;++n)if(ag(e,t[n])&&sg(lg(t[n],e),t))return[t[n],e];for(n=0;n<t.length-1;++n)for(r=n+1;r<t.length;++r)if(ag(lg(t[n],t[r]),e)&&ag(lg(t[n],e),t[r])&&ag(lg(t[r],e),t[n])&&sg(ug(t[n],t[r],e),t))return[t[n],t[r],e];throw new Error}function ag(t,e){var n=t.r-e.r,r=e.x-t.x,i=e.y-t.y;return n<0||n*n<r*r+i*i}function og(t,e){var n=t.r-e.r+1e-9*Math.max(t.r,e.r,1),r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function sg(t,e){for(var n=0;n<e.length;++n)if(!og(t,e[n]))return!1;return!0}function cg(t){switch(t.length){case 1:return{x:(e=t[0]).x,y:e.y,r:e.r};case 2:return lg(t[0],t[1]);case 3:return ug(t[0],t[1],t[2])}var e}function lg(t,e){var n=t.x,r=t.y,i=t.r,a=e.x,o=e.y,s=e.r,c=a-n,l=o-r,u=s-i,h=Math.sqrt(c*c+l*l);return{x:(n+a+c/h*u)/2,y:(r+o+l/h*u)/2,r:(h+i+s)/2}}function ug(t,e,n){var r=t.x,i=t.y,a=t.r,o=e.x,s=e.y,c=e.r,l=n.x,u=n.y,h=n.r,d=r-o,f=r-l,p=i-s,g=i-u,y=c-a,m=h-a,b=r*r+i*i-a*a,v=b-o*o-s*s+c*c,_=b-l*l-u*u+h*h,x=f*p-d*g,k=(p*_-g*v)/(2*x)-r,w=(g*y-p*m)/x,E=(f*v-d*_)/(2*x)-i,T=(d*m-f*y)/x,C=w*w+T*T-1,S=2*(a+k*w+E*T),A=k*k+E*E-a*a,M=-(C?(S+Math.sqrt(S*S-4*C*A))/(2*C):A/S);return{x:r+k+w*M,y:i+E+T*M,r:M}}function hg(t,e,n){var r,i,a,o,s=t.x-e.x,c=t.y-e.y,l=s*s+c*c;l?(i=e.r+n.r,i*=i,o=t.r+n.r,i>(o*=o)?(r=(l+o-i)/(2*l),a=Math.sqrt(Math.max(0,o/l-r*r)),n.x=t.x-r*s-a*c,n.y=t.y-r*c+a*s):(r=(l+i-o)/(2*l),a=Math.sqrt(Math.max(0,i/l-r*r)),n.x=e.x+r*s-a*c,n.y=e.y+r*c+a*s)):(n.x=e.x+n.r,n.y=e.y)}function dg(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function fg(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,a=(e.y*n.r+n.y*e.r)/r;return i*i+a*a}function pg(t){this._=t,this.next=null,this.previous=null}function gg(t){if(!(a=(e=t,t="object"==typeof e&&"length"in e?e:Array.from(e)).length))return 0;var e,n,r,i,a,o,s,c,l,u,h,d;if((n=t[0]).x=0,n.y=0,!(a>1))return n.r;if(r=t[1],n.x=-r.r,r.x=n.r,r.y=0,!(a>2))return n.r+r.r;hg(r,n,i=t[2]),n=new pg(n),r=new pg(r),i=new pg(i),n.next=i.previous=r,r.next=n.previous=i,i.next=r.previous=n;t:for(c=3;c<a;++c){hg(n._,r._,i=t[c]),i=new pg(i),l=r.next,u=n.previous,h=r._.r,d=n._.r;do{if(h<=d){if(dg(l._,i._)){r=l,n.next=r,r.previous=n,--c;continue t}h+=l._.r,l=l.next}else{if(dg(u._,i._)){(n=u).next=r,r.previous=n,--c;continue t}d+=u._.r,u=u.previous}}while(l!==u.next);for(i.previous=n,i.next=r,n.next=r.previous=r=i,o=fg(n);(i=i.next)!==r;)(s=fg(i))<o&&(n=i,o=s);r=n.next}for(n=[r._],i=r;(i=i.next)!==r;)n.push(i._);for(i=rg(n),c=0;c<a;++c)(n=t[c]).x-=i.x,n.y-=i.y;return i.r}function yg(t){return gg(t),t}function mg(t){return null==t?null:bg(t)}function bg(t){if("function"!=typeof t)throw new Error;return t}function vg(){return 0}function _g(t){return function(){return t}}function xg(t){return Math.sqrt(t.value)}function kg(){var t=null,e=1,n=1,r=vg;function i(i){return i.x=e/2,i.y=n/2,t?i.eachBefore(wg(t)).eachAfter(Eg(r,.5)).eachBefore(Tg(1)):i.eachBefore(wg(xg)).eachAfter(Eg(vg,1)).eachAfter(Eg(r,i.r/Math.min(e,n))).eachBefore(Tg(Math.min(e,n)/(2*i.r))),i}return i.radius=function(e){return arguments.length?(t=mg(e),i):t},i.size=function(t){return arguments.length?(e=+t[0],n=+t[1],i):[e,n]},i.padding=function(t){return arguments.length?(r="function"==typeof t?t:_g(+t),i):r},i}function wg(t){return function(e){e.children||(e.r=Math.max(0,+t(e)||0))}}function Eg(t,e){return function(n){if(r=n.children){var r,i,a,o=r.length,s=t(n)*e||0;if(s)for(i=0;i<o;++i)r[i].r+=s;if(a=gg(r),s)for(i=0;i<o;++i)r[i].r-=s;n.r=a+s}}}function Tg(t){return function(e){var n=e.parent;e.r*=t,n&&(e.x=n.x+t*e.x,e.y=n.y+t*e.y)}}function Cg(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function Sg(t,e,n,r,i){for(var a,o=t.children,s=-1,c=o.length,l=t.value&&(r-e)/t.value;++s<c;)(a=o[s]).y0=n,a.y1=i,a.x0=e,a.x1=e+=a.value*l}function Ag(){var t=1,e=1,n=0,r=!1;function i(i){var a=i.height+1;return i.x0=i.y0=n,i.x1=t,i.y1=e/a,i.eachBefore(function(t,e){return function(r){r.children&&Sg(r,r.x0,t*(r.depth+1)/e,r.x1,t*(r.depth+2)/e);var i=r.x0,a=r.y0,o=r.x1-n,s=r.y1-n;o<i&&(i=o=(i+o)/2),s<a&&(a=s=(a+s)/2),r.x0=i,r.y0=a,r.x1=o,r.y1=s}}(e,a)),r&&i.eachBefore(Cg),i}return i.round=function(t){return arguments.length?(r=!!t,i):r},i.size=function(n){return arguments.length?(t=+n[0],e=+n[1],i):[t,e]},i.padding=function(t){return arguments.length?(n=+t,i):n},i}Bp.invert=function(t,e){for(var n,r=e,i=r*r,a=i*i*i,o=0;o<12&&(a=(i=(r-=n=(r*(Ap+Mp*i+a*(Op+Np*i))-e)/(Ap+3*Mp*i+a*(7*Op+9*Np*i)))*r)*i*i,!(iu(n)<Ql));++o);return[Dp*t*(Ap+3*Mp*i+a*(7*Op+9*Np*i))/su(r),bu(fu(r)/Dp)]},Ip.invert=fp(au),Pp.invert=function(t,e){var n,r=e,i=25;do{var a=r*r,o=a*a;r-=n=(r*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(iu(n)>Zl&&--i>0);return[t/(.8707+(a=r*r)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),r]},zp.invert=fp(bu),Up.invert=fp((function(t){return 2*au(t)})),Wp.invert=function(t,e){return[-e,2*au(lu(t))-Jl]},ng.prototype=Qp.prototype={constructor:ng,count:function(){return this.eachAfter(Zp)},each:function(t,e){let n=-1;for(const r of this)t.call(e,r,++n,this);return this},eachAfter:function(t,e){for(var n,r,i,a=this,o=[a],s=[],c=-1;a=o.pop();)if(s.push(a),n=a.children)for(r=0,i=n.length;r<i;++r)o.push(n[r]);for(;a=s.pop();)t.call(e,a,++c,this);return this},eachBefore:function(t,e){for(var n,r,i=this,a=[i],o=-1;i=a.pop();)if(t.call(e,i,++o,this),n=i.children)for(r=n.length-1;r>=0;--r)a.push(n[r]);return this},find:function(t,e){let n=-1;for(const r of this)if(t.call(e,r,++n,this))return r},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;for(t=n.pop(),e=r.pop();t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){return Array.from(this)},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return Qp(this).eachBefore(tg)},[Symbol.iterator]:function*(){var t,e,n,r,i=this,a=[i];do{for(t=a.reverse(),a=[];i=t.pop();)if(yield i,e=i.children)for(n=0,r=e.length;n<r;++n)a.push(e[n])}while(a.length)}};var Mg={depth:-1},Og={},Ng={};function Dg(t){return t.id}function Bg(t){return t.parentId}function Lg(){var t,e=Dg,n=Bg;function r(r){var i,a,o,s,c,l,u,h,d=Array.from(r),f=e,p=n,g=new Map;if(null!=t){const e=d.map(((e,n)=>function(t){let e=(t=`${t}`).length;return Fg(t,e-1)&&!Fg(t,e-2)&&(t=t.slice(0,-1)),"/"===t[0]?t:`/${t}`}(t(e,n,r)))),n=e.map(Ig),i=new Set(e).add("");for(const t of n)i.has(t)||(i.add(t),e.push(t),n.push(Ig(t)),d.push(Ng));f=(t,n)=>e[n],p=(t,e)=>n[e]}for(o=0,i=d.length;o<i;++o)a=d[o],l=d[o]=new ng(a),null!=(u=f(a,o,r))&&(u+="")&&(h=l.id=u,g.set(h,g.has(h)?Og:l)),null!=(u=p(a,o,r))&&(u+="")&&(l.parent=u);for(o=0;o<i;++o)if(u=(l=d[o]).parent){if(!(c=g.get(u)))throw new Error("missing: "+u);if(c===Og)throw new Error("ambiguous: "+u);c.children?c.children.push(l):c.children=[l],l.parent=c}else{if(s)throw new Error("multiple roots");s=l}if(!s)throw new Error("no root");if(null!=t){for(;s.data===Ng&&1===s.children.length;)s=s.children[0],--i;for(let t=d.length-1;t>=0&&(l=d[t],l.data===Ng);--t)l.data=null}if(s.parent=Mg,s.eachBefore((function(t){t.depth=t.parent.depth+1,--i})).eachBefore(eg),s.parent=null,i>0)throw new Error("cycle");return s}return r.id=function(t){return arguments.length?(e=mg(t),r):e},r.parentId=function(t){return arguments.length?(n=mg(t),r):n},r.path=function(e){return arguments.length?(t=mg(e),r):t},r}function Ig(t){let e=t.length;if(e<2)return"";for(;--e>1&&!Fg(t,e););return t.slice(0,e)}function Fg(t,e){if("/"===t[e]){let n=0;for(;e>0&&"\\"===t[--e];)++n;if(0==(1&n))return!0}return!1}function Rg(t,e){return t.parent===e.parent?1:2}function Pg(t){var e=t.children;return e?e[0]:t.t}function jg(t){var e=t.children;return e?e[e.length-1]:t.t}function zg(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function Yg(t,e,n){return t.a.parent===e.parent?t.a:n}function Ug(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function $g(){var t=Rg,e=1,n=1,r=null;function i(i){var c=function(t){for(var e,n,r,i,a,o=new Ug(t,0),s=[o];e=s.pop();)if(r=e._.children)for(e.children=new Array(a=r.length),i=a-1;i>=0;--i)s.push(n=e.children[i]=new Ug(r[i],i)),n.parent=e;return(o.parent=new Ug(null,0)).children=[o],o}(i);if(c.eachAfter(a),c.parent.m=-c.z,c.eachBefore(o),r)i.eachBefore(s);else{var l=i,u=i,h=i;i.eachBefore((function(t){t.x<l.x&&(l=t),t.x>u.x&&(u=t),t.depth>h.depth&&(h=t)}));var d=l===u?1:t(l,u)/2,f=d-l.x,p=e/(u.x+d+f),g=n/(h.depth||1);i.eachBefore((function(t){t.x=(t.x+f)*p,t.y=t.depth*g}))}return i}function a(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var a=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,a=e,o=e,s=n,c=a.parent.children[0],l=a.m,u=o.m,h=s.m,d=c.m;s=jg(s),a=Pg(a),s&&a;)c=Pg(c),(o=jg(o)).a=e,(i=s.z+h-a.z-l+t(s._,a._))>0&&(zg(Yg(s,e,r),e,i),l+=i,u+=i),h+=s.m,l+=a.m,d+=c.m,u+=o.m;s&&!jg(o)&&(o.t=s,o.m+=h-u),a&&!Pg(c)&&(c.t=a,c.m+=l-d,r=e)}return r}(e,i,e.parent.A||r[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i}function Wg(t,e,n,r,i){for(var a,o=t.children,s=-1,c=o.length,l=t.value&&(i-n)/t.value;++s<c;)(a=o[s]).x0=e,a.x1=r,a.y0=n,a.y1=n+=a.value*l}Ug.prototype=Object.create(ng.prototype);var qg=(1+Math.sqrt(5))/2;function Hg(t,e,n,r,i,a){for(var o,s,c,l,u,h,d,f,p,g,y,m=[],b=e.children,v=0,_=0,x=b.length,k=e.value;v<x;){c=i-n,l=a-r;do{u=b[_++].value}while(!u&&_<x);for(h=d=u,y=u*u*(g=Math.max(l/c,c/l)/(k*t)),p=Math.max(d/y,y/h);_<x;++_){if(u+=s=b[_].value,s<h&&(h=s),s>d&&(d=s),y=u*u*g,(f=Math.max(d/y,y/h))>p){u-=s;break}p=f}m.push(o={value:u,dice:c<l,children:b.slice(v,_)}),o.dice?Sg(o,n,r,i,k?r+=l*u/k:a):Wg(o,n,r,k?n+=c*u/k:i,a),k-=u,v=_}return m}const Vg=function t(e){function n(t,n,r,i,a){Hg(e,t,n,r,i,a)}return n.ratio=function(e){return t((e=+e)>1?e:1)},n}(qg);function Gg(){var t=Vg,e=!1,n=1,r=1,i=[0],a=vg,o=vg,s=vg,c=vg,l=vg;function u(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(h),i=[0],e&&t.eachBefore(Cg),t}function h(e){var n=i[e.depth],r=e.x0+n,u=e.y0+n,h=e.x1-n,d=e.y1-n;h<r&&(r=h=(r+h)/2),d<u&&(u=d=(u+d)/2),e.x0=r,e.y0=u,e.x1=h,e.y1=d,e.children&&(n=i[e.depth+1]=a(e)/2,r+=l(e)-n,u+=o(e)-n,(h-=s(e)-n)<r&&(r=h=(r+h)/2),(d-=c(e)-n)<u&&(u=d=(u+d)/2),t(e,r,u,h,d))}return u.round=function(t){return arguments.length?(e=!!t,u):e},u.size=function(t){return arguments.length?(n=+t[0],r=+t[1],u):[n,r]},u.tile=function(e){return arguments.length?(t=bg(e),u):t},u.padding=function(t){return arguments.length?u.paddingInner(t).paddingOuter(t):u.paddingInner()},u.paddingInner=function(t){return arguments.length?(a="function"==typeof t?t:_g(+t),u):a},u.paddingOuter=function(t){return arguments.length?u.paddingTop(t).paddingRight(t).paddingBottom(t).paddingLeft(t):u.paddingTop()},u.paddingTop=function(t){return arguments.length?(o="function"==typeof t?t:_g(+t),u):o},u.paddingRight=function(t){return arguments.length?(s="function"==typeof t?t:_g(+t),u):s},u.paddingBottom=function(t){return arguments.length?(c="function"==typeof t?t:_g(+t),u):c},u.paddingLeft=function(t){return arguments.length?(l="function"==typeof t?t:_g(+t),u):l},u}function Xg(t,e,n,r,i){var a,o,s=t.children,c=s.length,l=new Array(c+1);for(l[0]=o=a=0;a<c;++a)l[a+1]=o+=s[a].value;!function t(e,n,r,i,a,o,c){if(e>=n-1){var u=s[e];return u.x0=i,u.y0=a,u.x1=o,void(u.y1=c)}for(var h=l[e],d=r/2+h,f=e+1,p=n-1;f<p;){var g=f+p>>>1;l[g]<d?f=g+1:p=g}d-l[f-1]<l[f]-d&&e+1<f&&--f;var y=l[f]-h,m=r-y;if(o-i>c-a){var b=r?(i*m+o*y)/r:o;t(e,f,y,i,a,b,c),t(f,n,m,b,a,o,c)}else{var v=r?(a*m+c*y)/r:c;t(e,f,y,i,a,o,v),t(f,n,m,i,v,o,c)}}(0,c,t.value,e,n,r,i)}function Zg(t,e,n,r,i){(1&t.depth?Wg:Sg)(t,e,n,r,i)}const Qg=function t(e){function n(t,n,r,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,c,l,u,h=-1,d=o.length,f=t.value;++h<d;){for(c=(s=o[h]).children,l=s.value=0,u=c.length;l<u;++l)s.value+=c[l].value;s.dice?Sg(s,n,r,i,f?r+=(a-r)*s.value/f:a):Wg(s,n,r,f?n+=(i-n)*s.value/f:i,a),f-=s.value}else t._squarify=o=Hg(e,t,n,r,i,a),o.ratio=e}return n.ratio=function(e){return t((e=+e)>1?e:1)},n}(qg);function Kg(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}function Jg(t,e){var n=vr(+t,+e);return function(t){var e=n(t);return e-360*Math.floor(e/360)}}function ty(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}function ey(t){return((t=Math.exp(t))+1/t)/2}const ny=function t(e,n,r){function i(t,i){var a,o,s=t[0],c=t[1],l=t[2],u=i[0],h=i[1],d=i[2],f=u-s,p=h-c,g=f*f+p*p;if(g<1e-12)o=Math.log(d/l)/e,a=function(t){return[s+t*f,c+t*p,l*Math.exp(e*t*o)]};else{var y=Math.sqrt(g),m=(d*d-l*l+r*g)/(2*l*n*y),b=(d*d-l*l-r*g)/(2*d*n*y),v=Math.log(Math.sqrt(m*m+1)-m),_=Math.log(Math.sqrt(b*b+1)-b);o=(_-v)/e,a=function(t){var r,i=t*o,a=ey(v),u=l/(n*y)*(a*(r=e*i+v,((r=Math.exp(2*r))-1)/(r+1))-function(t){return((t=Math.exp(t))-1/t)/2}(v));return[s+u*f,c+u*p,l*a/ey(e*i+v)]}}return a.duration=1e3*o*e/Math.SQRT2,a}return i.rho=function(e){var n=Math.max(.001,+e),r=n*n;return t(n,r,r*r)},i}(Math.SQRT2,2,4);function ry(t){return function(e,n){var r=t((e=hr(e)).h,(n=hr(n)).h),i=_r(e.s,n.s),a=_r(e.l,n.l),o=_r(e.opacity,n.opacity);return function(t){return e.h=r(t),e.s=i(t),e.l=a(t),e.opacity=o(t),e+""}}}const iy=ry(vr);var ay=ry(_r);function oy(t,e){var n=_r((t=ko(t)).l,(e=ko(e)).l),r=_r(t.a,e.a),i=_r(t.b,e.b),a=_r(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=i(e),t.opacity=a(e),t+""}}function sy(t){return function(e,n){var r=t((e=Oo(e)).h,(n=Oo(n)).h),i=_r(e.c,n.c),a=_r(e.l,n.l),o=_r(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=a(t),e.opacity=o(t),e+""}}}const cy=sy(vr);var ly=sy(_r);function uy(t){return function e(n){function r(e,r){var i=t((e=Uo(e)).h,(r=Uo(r)).h),a=_r(e.s,r.s),o=_r(e.l,r.l),s=_r(e.opacity,r.opacity);return function(t){return e.h=i(t),e.s=a(t),e.l=o(Math.pow(t,n)),e.opacity=s(t),e+""}}return n=+n,r.gamma=e,r}(1)}const hy=uy(vr);var dy=uy(_r);function fy(t,e){void 0===e&&(e=t,t=Ir);for(var n=0,r=e.length-1,i=e[0],a=new Array(r<0?0:r);n<r;)a[n]=t(i,i=e[++n]);return function(t){var e=Math.max(0,Math.min(r-1,Math.floor(t*=r)));return a[e](t-e)}}function py(t,e){for(var n=new Array(e),r=0;r<e;++r)n[r]=t(r/(e-1));return n}function gy(t){for(var e,n=-1,r=t.length,i=t[r-1],a=0;++n<r;)e=i,i=t[n],a+=e[1]*i[0]-e[0]*i[1];return a/2}function yy(t){for(var e,n,r=-1,i=t.length,a=0,o=0,s=t[i-1],c=0;++r<i;)e=s,s=t[r],c+=n=e[0]*s[1]-s[0]*e[1],a+=(e[0]+s[0])*n,o+=(e[1]+s[1])*n;return[a/(c*=3),o/c]}function my(t,e,n){return(e[0]-t[0])*(n[1]-t[1])-(e[1]-t[1])*(n[0]-t[0])}function by(t,e){return t[0]-e[0]||t[1]-e[1]}function vy(t){const e=t.length,n=[0,1];let r,i=2;for(r=2;r<e;++r){for(;i>1&&my(t[n[i-2]],t[n[i-1]],t[r])<=0;)--i;n[i++]=r}return n.slice(0,i)}function _y(t){if((n=t.length)<3)return null;var e,n,r=new Array(n),i=new Array(n);for(e=0;e<n;++e)r[e]=[+t[e][0],+t[e][1],e];for(r.sort(by),e=0;e<n;++e)i[e]=[r[e][0],-r[e][1]];var a=vy(r),o=vy(i),s=o[0]===a[0],c=o[o.length-1]===a[a.length-1],l=[];for(e=a.length-1;e>=0;--e)l.push(t[r[a[e]][2]]);for(e=+s;e<o.length-c;++e)l.push(t[r[o[e]][2]]);return l}function xy(t,e){for(var n,r,i=t.length,a=t[i-1],o=e[0],s=e[1],c=a[0],l=a[1],u=!1,h=0;h<i;++h)n=(a=t[h])[0],(r=a[1])>s!=l>s&&o<(c-n)*(s-r)/(l-r)+n&&(u=!u),c=n,l=r;return u}function ky(t){for(var e,n,r=-1,i=t.length,a=t[i-1],o=a[0],s=a[1],c=0;++r<i;)e=o,n=s,e-=o=(a=t[r])[0],n-=s=a[1],c+=Math.hypot(e,n);return c}const wy=Math.random,Ey=function t(e){function n(t,n){return t=null==t?0:+t,n=null==n?1:+n,1===arguments.length?(n=t,t=0):n-=t,function(){return e()*n+t}}return n.source=t,n}(wy),Ty=function t(e){function n(t,n){return arguments.length<2&&(n=t,t=0),t=Math.floor(t),n=Math.floor(n)-t,function(){return Math.floor(e()*n+t)}}return n.source=t,n}(wy),Cy=function t(e){function n(t,n){var r,i;return t=null==t?0:+t,n=null==n?1:+n,function(){var a;if(null!=r)a=r,r=null;else do{r=2*e()-1,a=2*e()-1,i=r*r+a*a}while(!i||i>1);return t+n*a*Math.sqrt(-2*Math.log(i)/i)}}return n.source=t,n}(wy),Sy=function t(e){var n=Cy.source(e);function r(){var t=n.apply(this,arguments);return function(){return Math.exp(t())}}return r.source=t,r}(wy),Ay=function t(e){function n(t){return(t=+t)<=0?()=>0:function(){for(var n=0,r=t;r>1;--r)n+=e();return n+r*e()}}return n.source=t,n}(wy),My=function t(e){var n=Ay.source(e);function r(t){if(0==(t=+t))return e;var r=n(t);return function(){return r()/t}}return r.source=t,r}(wy),Oy=function t(e){function n(t){return function(){return-Math.log1p(-e())/t}}return n.source=t,n}(wy),Ny=function t(e){function n(t){if((t=+t)<0)throw new RangeError("invalid alpha");return t=1/-t,function(){return Math.pow(1-e(),t)}}return n.source=t,n}(wy),Dy=function t(e){function n(t){if((t=+t)<0||t>1)throw new RangeError("invalid p");return function(){return Math.floor(e()+t)}}return n.source=t,n}(wy),By=function t(e){function n(t){if((t=+t)<0||t>1)throw new RangeError("invalid p");return 0===t?()=>1/0:1===t?()=>1:(t=Math.log1p(-t),function(){return 1+Math.floor(Math.log1p(-e())/t)})}return n.source=t,n}(wy),Ly=function t(e){var n=Cy.source(e)();function r(t,r){if((t=+t)<0)throw new RangeError("invalid k");if(0===t)return()=>0;if(r=null==r?1:+r,1===t)return()=>-Math.log1p(-e())*r;var i=(t<1?t+1:t)-1/3,a=1/(3*Math.sqrt(i)),o=t<1?()=>Math.pow(e(),1/t):()=>1;return function(){do{do{var t=n(),s=1+a*t}while(s<=0);s*=s*s;var c=1-e()}while(c>=1-.0331*t*t*t*t&&Math.log(c)>=.5*t*t+i*(1-s+Math.log(s)));return i*s*o()*r}}return r.source=t,r}(wy),Iy=function t(e){var n=Ly.source(e);function r(t,e){var r=n(t),i=n(e);return function(){var t=r();return 0===t?0:t/(t+i())}}return r.source=t,r}(wy),Fy=function t(e){var n=By.source(e),r=Iy.source(e);function i(t,e){return t=+t,(e=+e)>=1?()=>t:e<=0?()=>0:function(){for(var i=0,a=t,o=e;a*o>16&&a*(1-o)>16;){var s=Math.floor((a+1)*o),c=r(s,a-s+1)();c<=o?(i+=s,a-=s,o=(o-c)/(1-c)):(a=s-1,o/=c)}for(var l=o<.5,u=n(l?o:1-o),h=u(),d=0;h<=a;++d)h+=u();return i+(l?d:a-d)}}return i.source=t,i}(wy),Ry=function t(e){function n(t,n,r){var i;return 0==(t=+t)?i=t=>-Math.log(t):(t=1/t,i=e=>Math.pow(e,t)),n=null==n?0:+n,r=null==r?1:+r,function(){return n+r*i(-Math.log1p(-e()))}}return n.source=t,n}(wy),Py=function t(e){function n(t,n){return t=null==t?0:+t,n=null==n?1:+n,function(){return t+n*Math.tan(Math.PI*e())}}return n.source=t,n}(wy),jy=function t(e){function n(t,n){return t=null==t?0:+t,n=null==n?1:+n,function(){var r=e();return t+n*Math.log(r/(1-r))}}return n.source=t,n}(wy),zy=function t(e){var n=Ly.source(e),r=Fy.source(e);function i(t){return function(){for(var i=0,a=t;a>16;){var o=Math.floor(.875*a),s=n(o)();if(s>a)return i+r(o-1,a/s)();i+=o,a-=s}for(var c=-Math.log1p(-e()),l=0;c<=a;++l)c-=Math.log1p(-e());return i+l}}return i.source=t,i}(wy),Yy=1/4294967296;function Uy(t=Math.random()){let e=0|(0<=t&&t<1?t/Yy:Math.abs(t));return()=>(e=1664525*e+1013904223|0,Yy*(e>>>0))}function $y(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}function Wy(t,e){switch(arguments.length){case 0:break;case 1:"function"==typeof t?this.interpolator(t):this.range(t);break;default:this.domain(t),"function"==typeof e?this.interpolator(e):this.range(e)}return this}const qy=Symbol("implicit");function Hy(){var t=new E,e=[],n=[],r=qy;function i(i){let a=t.get(i);if(void 0===a){if(r!==qy)return r;t.set(i,a=e.push(i)-1)}return n[a%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new E;for(const r of n)t.has(r)||t.set(r,e.push(r)-1);return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return Hy(e,n).unknown(r)},$y.apply(i,arguments),i}function Vy(){var t,e,n=Hy().unknown(void 0),r=n.domain,i=n.range,a=0,o=1,s=!1,c=0,l=0,u=.5;function h(){var n=r().length,h=o<a,d=h?o:a,f=h?a:o;t=(f-d)/Math.max(1,n-c+2*l),s&&(t=Math.floor(t)),d+=(f-d-t*(n-c))*u,e=t*(1-c),s&&(d=Math.round(d),e=Math.round(e));var p=xt(n).map((function(e){return d+t*e}));return i(h?p.reverse():p)}return delete n.unknown,n.domain=function(t){return arguments.length?(r(t),h()):r()},n.range=function(t){return arguments.length?([a,o]=t,a=+a,o=+o,h()):[a,o]},n.rangeRound=function(t){return[a,o]=t,a=+a,o=+o,s=!0,h()},n.bandwidth=function(){return e},n.step=function(){return t},n.round=function(t){return arguments.length?(s=!!t,h()):s},n.padding=function(t){return arguments.length?(c=Math.min(1,l=+t),h()):c},n.paddingInner=function(t){return arguments.length?(c=Math.min(1,t),h()):c},n.paddingOuter=function(t){return arguments.length?(l=+t,h()):l},n.align=function(t){return arguments.length?(u=Math.max(0,Math.min(1,t)),h()):u},n.copy=function(){return Vy(r(),[a,o]).round(s).paddingInner(c).paddingOuter(l).align(u)},$y.apply(h(),arguments)}function Gy(t){var e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,delete t.paddingOuter,t.copy=function(){return Gy(e())},t}function Xy(){return Gy(Vy.apply(null,arguments).paddingInner(1))}function Zy(t){return+t}var Qy=[0,1];function Ky(t){return t}function Jy(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:(n=isNaN(e)?NaN:.5,function(){return n});var n}function tm(t,e,n){var r=t[0],i=t[1],a=e[0],o=e[1];return i<r?(r=Jy(i,r),a=n(o,a)):(r=Jy(r,i),a=n(a,o)),function(t){return a(r(t))}}function em(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),a=new Array(r),o=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++o<r;)i[o]=Jy(t[o],t[o+1]),a[o]=n(e[o],e[o+1]);return function(e){var n=u(t,e,1,r)-1;return a[n](i[n](e))}}function nm(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function rm(){var t,e,n,r,i,a,o=Qy,s=Qy,c=Ir,l=Ky;function u(){var t,e,n,c=Math.min(o.length,s.length);return l!==Ky&&(t=o[0],e=o[c-1],t>e&&(n=t,t=e,e=n),l=function(n){return Math.max(t,Math.min(e,n))}),r=c>2?em:tm,i=a=null,h}function h(e){return null==e||isNaN(e=+e)?n:(i||(i=r(o.map(t),s,c)))(t(l(e)))}return h.invert=function(n){return l(e((a||(a=r(s,o.map(t),Or)))(n)))},h.domain=function(t){return arguments.length?(o=Array.from(t,Zy),u()):o.slice()},h.range=function(t){return arguments.length?(s=Array.from(t),u()):s.slice()},h.rangeRound=function(t){return s=Array.from(t),c=ty,u()},h.clamp=function(t){return arguments.length?(l=!!t||Ky,u()):l!==Ky},h.interpolate=function(t){return arguments.length?(c=t,u()):c},h.unknown=function(t){return arguments.length?(n=t,h):n},function(n,r){return t=n,e=r,u()}}function im(){return rm()(Ky,Ky)}function am(t,e,n,r){var i,a=et(t,e,n);switch((r=Il(null==r?",f":r)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=Gl(a,o))||(r.precision=i),Ul(r,o);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=Xl(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=Vl(a))||(r.precision=i-2*("%"===r.type))}return Yl(r)}function om(t){var e=t.domain;return t.ticks=function(t){var n=e();return J(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return am(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i,a=e(),o=0,s=a.length-1,c=a[o],l=a[s],u=10;for(l<c&&(i=c,c=l,l=i,i=o,o=s,s=i);u-- >0;){if((i=tt(c,l,n))===r)return a[o]=c,a[s]=l,e(a);if(i>0)c=Math.floor(c/i)*i,l=Math.ceil(l/i)*i;else{if(!(i<0))break;c=Math.ceil(c*i)/i,l=Math.floor(l*i)/i}r=i}return t},t}function sm(){var t=im();return t.copy=function(){return nm(t,sm())},$y.apply(t,arguments),om(t)}function cm(t){var e;function n(t){return null==t||isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=Array.from(e,Zy),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return cm(t).unknown(e)},t=arguments.length?Array.from(t,Zy):[0,1],om(n)}function lm(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],o=t[i];return o<a&&(n=r,r=i,i=n,n=a,a=o,o=n),t[r]=e.floor(a),t[i]=e.ceil(o),t}function um(t){return Math.log(t)}function hm(t){return Math.exp(t)}function dm(t){return-Math.log(-t)}function fm(t){return-Math.exp(-t)}function pm(t){return isFinite(t)?+("1e"+t):t<0?0:t}function gm(t){return(e,n)=>-t(-e,n)}function ym(t){const e=t(um,hm),n=e.domain;let r,i,a=10;function o(){return r=function(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),e=>Math.log(e)/t)}(a),i=function(t){return 10===t?pm:t===Math.E?Math.exp:e=>Math.pow(t,e)}(a),n()[0]<0?(r=gm(r),i=gm(i),t(dm,fm)):t(um,hm),e}return e.base=function(t){return arguments.length?(a=+t,o()):a},e.domain=function(t){return arguments.length?(n(t),o()):n()},e.ticks=t=>{const e=n();let o=e[0],s=e[e.length-1];const c=s<o;c&&([o,s]=[s,o]);let l,u,h=r(o),d=r(s);const f=null==t?10:+t;let p=[];if(!(a%1)&&d-h<f){if(h=Math.floor(h),d=Math.ceil(d),o>0){for(;h<=d;++h)for(l=1;l<a;++l)if(u=h<0?l/i(-h):l*i(h),!(u<o)){if(u>s)break;p.push(u)}}else for(;h<=d;++h)for(l=a-1;l>=1;--l)if(u=h>0?l/i(-h):l*i(h),!(u<o)){if(u>s)break;p.push(u)}2*p.length<f&&(p=J(o,s,f))}else p=J(h,d,Math.min(d-h,f)).map(i);return c?p.reverse():p},e.tickFormat=(t,n)=>{if(null==t&&(t=10),null==n&&(n=10===a?"s":","),"function"!=typeof n&&(a%1||null!=(n=Il(n)).precision||(n.trim=!0),n=Yl(n)),t===1/0)return n;const o=Math.max(1,a*t/e.ticks().length);return t=>{let e=t/i(Math.round(r(t)));return e*a<a-.5&&(e*=a),e<=o?n(t):""}},e.nice=()=>n(lm(n(),{floor:t=>i(Math.floor(r(t))),ceil:t=>i(Math.ceil(r(t)))})),e}function mm(){const t=ym(rm()).domain([1,10]);return t.copy=()=>nm(t,mm()).base(t.base()),$y.apply(t,arguments),t}function bm(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function vm(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function _m(t){var e=1,n=t(bm(e),vm(e));return n.constant=function(n){return arguments.length?t(bm(e=+n),vm(e)):e},om(n)}function xm(){var t=_m(rm());return t.copy=function(){return nm(t,xm()).constant(t.constant())},$y.apply(t,arguments)}function km(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function wm(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function Em(t){return t<0?-t*t:t*t}function Tm(t){var e=t(Ky,Ky),n=1;function r(){return 1===n?t(Ky,Ky):.5===n?t(wm,Em):t(km(n),km(1/n))}return e.exponent=function(t){return arguments.length?(n=+t,r()):n},om(e)}function Cm(){var t=Tm(rm());return t.copy=function(){return nm(t,Cm()).exponent(t.exponent())},$y.apply(t,arguments),t}function Sm(){return Cm.apply(null,arguments).exponent(.5)}function Am(t){return Math.sign(t)*t*t}function Mm(t){return Math.sign(t)*Math.sqrt(Math.abs(t))}function Om(){var t,e=im(),n=[0,1],r=!1;function i(n){var i=Mm(e(n));return isNaN(i)?t:r?Math.round(i):i}return i.invert=function(t){return e.invert(Am(t))},i.domain=function(t){return arguments.length?(e.domain(t),i):e.domain()},i.range=function(t){return arguments.length?(e.range((n=Array.from(t,Zy)).map(Am)),i):n.slice()},i.rangeRound=function(t){return i.range(t).round(!0)},i.round=function(t){return arguments.length?(r=!!t,i):r},i.clamp=function(t){return arguments.length?(e.clamp(t),i):e.clamp()},i.unknown=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return Om(e.domain(),n).round(r).clamp(e.clamp()).unknown(t)},$y.apply(i,arguments),om(i)}function Nm(){var t,e=[],n=[],i=[];function a(){var t=0,r=Math.max(1,n.length);for(i=new Array(r-1);++t<r;)i[t-1]=ut(e,t/r);return o}function o(e){return null==e||isNaN(e=+e)?t:n[u(i,e)]}return o.invertExtent=function(t){var r=n.indexOf(t);return r<0?[NaN,NaN]:[r>0?i[r-1]:e[0],r<i.length?i[r]:e[e.length-1]]},o.domain=function(t){if(!arguments.length)return e.slice();e=[];for(let n of t)null==n||isNaN(n=+n)||e.push(n);return e.sort(r),a()},o.range=function(t){return arguments.length?(n=Array.from(t),a()):n.slice()},o.unknown=function(e){return arguments.length?(t=e,o):t},o.quantiles=function(){return i.slice()},o.copy=function(){return Nm().domain(e).range(n).unknown(t)},$y.apply(o,arguments)}function Dm(){var t,e=0,n=1,r=1,i=[.5],a=[0,1];function o(e){return null!=e&&e<=e?a[u(i,e,0,r)]:t}function s(){var t=-1;for(i=new Array(r);++t<r;)i[t]=((t+1)*n-(t-r)*e)/(r+1);return o}return o.domain=function(t){return arguments.length?([e,n]=t,e=+e,n=+n,s()):[e,n]},o.range=function(t){return arguments.length?(r=(a=Array.from(t)).length-1,s()):a.slice()},o.invertExtent=function(t){var o=a.indexOf(t);return o<0?[NaN,NaN]:o<1?[e,i[0]]:o>=r?[i[r-1],n]:[i[o-1],i[o]]},o.unknown=function(e){return arguments.length?(t=e,o):o},o.thresholds=function(){return i.slice()},o.copy=function(){return Dm().domain([e,n]).range(a).unknown(t)},$y.apply(om(o),arguments)}function Bm(){var t,e=[.5],n=[0,1],r=1;function i(i){return null!=i&&i<=i?n[u(e,i,0,r)]:t}return i.domain=function(t){return arguments.length?(e=Array.from(t),r=Math.min(e.length,n.length-1),i):e.slice()},i.range=function(t){return arguments.length?(n=Array.from(t),r=Math.min(e.length,n.length-1),i):n.slice()},i.invertExtent=function(t){var r=n.indexOf(t);return[e[r-1],e[r]]},i.unknown=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return Bm().domain(e).range(n).unknown(t)},$y.apply(i,arguments)}const Lm=1e3,Im=6e4,Fm=36e5,Rm=864e5,Pm=6048e5,jm=31536e6;var zm=new Date,Ym=new Date;function Um(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e<n-t?e:n},i.offset=function(t,n){return e(t=new Date(+t),null==n?1:Math.floor(n)),t},i.range=function(n,r,a){var o,s=[];if(n=i.ceil(n),a=null==a?1:Math.floor(a),!(n<r&&a>0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o<n&&n<r);return s},i.filter=function(n){return Um((function(e){if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return zm.setTime(+e),Ym.setTime(+r),t(zm),t(Ym),Math.floor(n(zm,Ym))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var $m=Um((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));$m.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Um((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):$m:null};const Wm=$m;var qm=$m.range,Hm=Um((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*Lm)}),(function(t,e){return(e-t)/Lm}),(function(t){return t.getUTCSeconds()}));const Vm=Hm;var Gm=Hm.range,Xm=Um((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*Lm)}),(function(t,e){t.setTime(+t+e*Im)}),(function(t,e){return(e-t)/Im}),(function(t){return t.getMinutes()}));const Zm=Xm;var Qm=Xm.range,Km=Um((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*Lm-t.getMinutes()*Im)}),(function(t,e){t.setTime(+t+e*Fm)}),(function(t,e){return(e-t)/Fm}),(function(t){return t.getHours()}));const Jm=Km;var tb=Km.range,eb=Um((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Im)/Rm),(t=>t.getDate()-1));const nb=eb;var rb=eb.range;function ib(t){return Um((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Im)/Pm}))}var ab=ib(0),ob=ib(1),sb=ib(2),cb=ib(3),lb=ib(4),ub=ib(5),hb=ib(6),db=ab.range,fb=ob.range,pb=sb.range,gb=cb.range,yb=lb.range,mb=ub.range,bb=hb.range,vb=Um((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()}));const _b=vb;var xb=vb.range,kb=Um((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));kb.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Um((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};const wb=kb;var Eb=kb.range,Tb=Um((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+e*Im)}),(function(t,e){return(e-t)/Im}),(function(t){return t.getUTCMinutes()}));const Cb=Tb;var Sb=Tb.range,Ab=Um((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+e*Fm)}),(function(t,e){return(e-t)/Fm}),(function(t){return t.getUTCHours()}));const Mb=Ab;var Ob=Ab.range,Nb=Um((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/Rm}),(function(t){return t.getUTCDate()-1}));const Db=Nb;var Bb=Nb.range;function Lb(t){return Um((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/Pm}))}var Ib=Lb(0),Fb=Lb(1),Rb=Lb(2),Pb=Lb(3),jb=Lb(4),zb=Lb(5),Yb=Lb(6),Ub=Ib.range,$b=Fb.range,Wb=Rb.range,qb=Pb.range,Hb=jb.range,Vb=zb.range,Gb=Yb.range,Xb=Um((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()}));const Zb=Xb;var Qb=Xb.range,Kb=Um((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));Kb.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Um((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};const Jb=Kb;var tv=Kb.range;function ev(t,e,n,r,a,o){const s=[[Vm,1,Lm],[Vm,5,5e3],[Vm,15,15e3],[Vm,30,3e4],[o,1,Im],[o,5,3e5],[o,15,9e5],[o,30,18e5],[a,1,Fm],[a,3,108e5],[a,6,216e5],[a,12,432e5],[r,1,Rm],[r,2,1728e5],[n,1,Pm],[e,1,2592e6],[e,3,7776e6],[t,1,jm]];function c(e,n,r){const a=Math.abs(n-e)/r,o=i((([,,t])=>t)).right(s,a);if(o===s.length)return t.every(et(e/jm,n/jm,r));if(0===o)return Wm.every(Math.max(et(e,n,r),1));const[c,l]=s[a/s[o-1][2]<s[o][2]/a?o-1:o];return c.every(l)}return[function(t,e,n){const r=e<t;r&&([t,e]=[e,t]);const i=n&&"function"==typeof n.range?n:c(t,e,n),a=i?i.range(t,+e+1):[];return r?a.reverse():a},c]}const[nv,rv]=ev(Jb,Zb,Ib,Db,Mb,Cb),[iv,av]=ev(wb,_b,ab,nb,Jm,Zm);function ov(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function sv(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function cv(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function lv(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,s=t.months,c=t.shortMonths,l=xv(i),u=kv(i),h=xv(a),d=kv(a),f=xv(o),p=kv(o),g=xv(s),y=kv(s),m=xv(c),b=kv(c),v={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:$v,e:$v,f:Gv,g:a_,G:s_,H:Wv,I:qv,j:Hv,L:Vv,m:Xv,M:Zv,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:O_,s:N_,S:Qv,u:Kv,U:Jv,V:e_,w:n_,W:r_,x:null,X:null,y:i_,Y:o_,Z:c_,"%":M_},_={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:l_,e:l_,f:p_,g:T_,G:S_,H:u_,I:h_,j:d_,L:f_,m:g_,M:y_,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:O_,s:N_,S:m_,u:b_,U:v_,V:x_,w:k_,W:w_,x:null,X:null,y:E_,Y:C_,Z:A_,"%":M_},x={a:function(t,e,n){var r=f.exec(e.slice(n));return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=d.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=b.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=g.exec(e.slice(n));return r?(t.m=y.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return E(t,e,n,r)},d:Bv,e:Bv,f:jv,g:Mv,G:Av,H:Iv,I:Iv,j:Lv,L:Pv,m:Dv,M:Fv,p:function(t,e,n){var r=l.exec(e.slice(n));return r?(t.p=u.get(r[0].toLowerCase()),n+r[0].length):-1},q:Nv,Q:Yv,s:Uv,S:Rv,u:Ev,U:Tv,V:Cv,w:wv,W:Sv,x:function(t,e,r){return E(t,n,e,r)},X:function(t,e,n){return E(t,r,e,n)},y:Mv,Y:Av,Z:Ov,"%":zv};function k(t,e){return function(n){var r,i,a,o=[],s=-1,c=0,l=t.length;for(n instanceof Date||(n=new Date(+n));++s<l;)37===t.charCodeAt(s)&&(o.push(t.slice(c,s)),null!=(i=gv[r=t.charAt(++s)])?r=t.charAt(++s):i="e"===r?" ":"0",(a=e[r])&&(r=a(n,i)),o.push(r),c=s+1);return o.push(t.slice(c,s)),o.join("")}}function w(t,e){return function(n){var r,i,a=cv(1900,void 0,1);if(E(a,t,n+="",0)!=n.length)return null;if("Q"in a)return new Date(a.Q);if("s"in a)return new Date(1e3*a.s+("L"in a?a.L:0));if(e&&!("Z"in a)&&(a.Z=0),"p"in a&&(a.H=a.H%12+12*a.p),void 0===a.m&&(a.m="q"in a?a.q:0),"V"in a){if(a.V<1||a.V>53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=sv(cv(a.y,0,1))).getUTCDay(),r=i>4||0===i?Fb.ceil(r):Fb(r),r=Db.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=ov(cv(a.y,0,1))).getDay(),r=i>4||0===i?ob.ceil(r):ob(r),r=nb.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?sv(cv(a.y,0,1)).getUTCDay():ov(cv(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,sv(a)):ov(a)}}function E(t,e,n,r){for(var i,a,o=0,s=e.length,c=n.length;o<s;){if(r>=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=x[i in gv?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return v.x=k(n,v),v.X=k(r,v),v.c=k(e,v),_.x=k(n,_),_.X=k(r,_),_.c=k(e,_),{format:function(t){var e=k(t+="",v);return e.toString=function(){return t},e},parse:function(t){var e=w(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=k(t+="",_);return e.toString=function(){return t},e},utcParse:function(t){var e=w(t+="",!0);return e.toString=function(){return t},e}}}var uv,hv,dv,fv,pv,gv={"-":"",_:" ",0:"0"},yv=/^\s*\d+/,mv=/^%/,bv=/[\\^$*+?|[\]().{}]/g;function vv(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a<n?new Array(n-a+1).join(e)+i:i)}function _v(t){return t.replace(bv,"\\$&")}function xv(t){return new RegExp("^(?:"+t.map(_v).join("|")+")","i")}function kv(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function wv(t,e,n){var r=yv.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Ev(t,e,n){var r=yv.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Tv(t,e,n){var r=yv.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Cv(t,e,n){var r=yv.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Sv(t,e,n){var r=yv.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Av(t,e,n){var r=yv.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Mv(t,e,n){var r=yv.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Ov(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Nv(t,e,n){var r=yv.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function Dv(t,e,n){var r=yv.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Bv(t,e,n){var r=yv.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Lv(t,e,n){var r=yv.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Iv(t,e,n){var r=yv.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Fv(t,e,n){var r=yv.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Rv(t,e,n){var r=yv.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Pv(t,e,n){var r=yv.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function jv(t,e,n){var r=yv.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function zv(t,e,n){var r=mv.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Yv(t,e,n){var r=yv.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Uv(t,e,n){var r=yv.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function $v(t,e){return vv(t.getDate(),e,2)}function Wv(t,e){return vv(t.getHours(),e,2)}function qv(t,e){return vv(t.getHours()%12||12,e,2)}function Hv(t,e){return vv(1+nb.count(wb(t),t),e,3)}function Vv(t,e){return vv(t.getMilliseconds(),e,3)}function Gv(t,e){return Vv(t,e)+"000"}function Xv(t,e){return vv(t.getMonth()+1,e,2)}function Zv(t,e){return vv(t.getMinutes(),e,2)}function Qv(t,e){return vv(t.getSeconds(),e,2)}function Kv(t){var e=t.getDay();return 0===e?7:e}function Jv(t,e){return vv(ab.count(wb(t)-1,t),e,2)}function t_(t){var e=t.getDay();return e>=4||0===e?lb(t):lb.ceil(t)}function e_(t,e){return t=t_(t),vv(lb.count(wb(t),t)+(4===wb(t).getDay()),e,2)}function n_(t){return t.getDay()}function r_(t,e){return vv(ob.count(wb(t)-1,t),e,2)}function i_(t,e){return vv(t.getFullYear()%100,e,2)}function a_(t,e){return vv((t=t_(t)).getFullYear()%100,e,2)}function o_(t,e){return vv(t.getFullYear()%1e4,e,4)}function s_(t,e){var n=t.getDay();return vv((t=n>=4||0===n?lb(t):lb.ceil(t)).getFullYear()%1e4,e,4)}function c_(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+vv(e/60|0,"0",2)+vv(e%60,"0",2)}function l_(t,e){return vv(t.getUTCDate(),e,2)}function u_(t,e){return vv(t.getUTCHours(),e,2)}function h_(t,e){return vv(t.getUTCHours()%12||12,e,2)}function d_(t,e){return vv(1+Db.count(Jb(t),t),e,3)}function f_(t,e){return vv(t.getUTCMilliseconds(),e,3)}function p_(t,e){return f_(t,e)+"000"}function g_(t,e){return vv(t.getUTCMonth()+1,e,2)}function y_(t,e){return vv(t.getUTCMinutes(),e,2)}function m_(t,e){return vv(t.getUTCSeconds(),e,2)}function b_(t){var e=t.getUTCDay();return 0===e?7:e}function v_(t,e){return vv(Ib.count(Jb(t)-1,t),e,2)}function __(t){var e=t.getUTCDay();return e>=4||0===e?jb(t):jb.ceil(t)}function x_(t,e){return t=__(t),vv(jb.count(Jb(t),t)+(4===Jb(t).getUTCDay()),e,2)}function k_(t){return t.getUTCDay()}function w_(t,e){return vv(Fb.count(Jb(t)-1,t),e,2)}function E_(t,e){return vv(t.getUTCFullYear()%100,e,2)}function T_(t,e){return vv((t=__(t)).getUTCFullYear()%100,e,2)}function C_(t,e){return vv(t.getUTCFullYear()%1e4,e,4)}function S_(t,e){var n=t.getUTCDay();return vv((t=n>=4||0===n?jb(t):jb.ceil(t)).getUTCFullYear()%1e4,e,4)}function A_(){return"+0000"}function M_(){return"%"}function O_(t){return+t}function N_(t){return Math.floor(+t/1e3)}function D_(t){return uv=lv(t),hv=uv.format,dv=uv.parse,fv=uv.utcFormat,pv=uv.utcParse,uv}function B_(t){return new Date(t)}function L_(t){return t instanceof Date?+t:+new Date(+t)}function I_(t,e,n,r,i,a,o,s,c,l){var u=im(),h=u.invert,d=u.domain,f=l(".%L"),p=l(":%S"),g=l("%I:%M"),y=l("%I %p"),m=l("%a %d"),b=l("%b %d"),v=l("%B"),_=l("%Y");function x(t){return(c(t)<t?f:s(t)<t?p:o(t)<t?g:a(t)<t?y:r(t)<t?i(t)<t?m:b:n(t)<t?v:_)(t)}return u.invert=function(t){return new Date(h(t))},u.domain=function(t){return arguments.length?d(Array.from(t,L_)):d().map(B_)},u.ticks=function(e){var n=d();return t(n[0],n[n.length-1],null==e?10:e)},u.tickFormat=function(t,e){return null==e?x:l(e)},u.nice=function(t){var n=d();return t&&"function"==typeof t.range||(t=e(n[0],n[n.length-1],null==t?10:t)),t?d(lm(n,t)):u},u.copy=function(){return nm(u,I_(t,e,n,r,i,a,o,s,c,l))},u}function F_(){return $y.apply(I_(iv,av,wb,_b,ab,nb,Jm,Zm,Vm,hv).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function R_(){return $y.apply(I_(nv,rv,Jb,Zb,Ib,Db,Mb,Cb,Vm,fv).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function P_(){var t,e,n,r,i,a=0,o=1,s=Ky,c=!1;function l(e){return null==e||isNaN(e=+e)?i:s(0===n?.5:(e=(r(e)-t)*n,c?Math.max(0,Math.min(1,e)):e))}function u(t){return function(e){var n,r;return arguments.length?([n,r]=e,s=t(n,r),l):[s(0),s(1)]}}return l.domain=function(i){return arguments.length?([a,o]=i,t=r(a=+a),e=r(o=+o),n=t===e?0:1/(e-t),l):[a,o]},l.clamp=function(t){return arguments.length?(c=!!t,l):c},l.interpolator=function(t){return arguments.length?(s=t,l):s},l.range=u(Ir),l.rangeRound=u(ty),l.unknown=function(t){return arguments.length?(i=t,l):i},function(i){return r=i,t=i(a),e=i(o),n=t===e?0:1/(e-t),l}}function j_(t,e){return e.domain(t.domain()).interpolator(t.interpolator()).clamp(t.clamp()).unknown(t.unknown())}function z_(){var t=om(P_()(Ky));return t.copy=function(){return j_(t,z_())},Wy.apply(t,arguments)}function Y_(){var t=ym(P_()).domain([1,10]);return t.copy=function(){return j_(t,Y_()).base(t.base())},Wy.apply(t,arguments)}function U_(){var t=_m(P_());return t.copy=function(){return j_(t,U_()).constant(t.constant())},Wy.apply(t,arguments)}function $_(){var t=Tm(P_());return t.copy=function(){return j_(t,$_()).exponent(t.exponent())},Wy.apply(t,arguments)}function W_(){return $_.apply(null,arguments).exponent(.5)}function q_(){var t=[],e=Ky;function n(n){if(null!=n&&!isNaN(n=+n))return e((u(t,n,1)-1)/(t.length-1))}return n.domain=function(e){if(!arguments.length)return t.slice();t=[];for(let n of e)null==n||isNaN(n=+n)||t.push(n);return t.sort(r),n},n.interpolator=function(t){return arguments.length?(e=t,n):e},n.range=function(){return t.map(((n,r)=>e(r/(t.length-1))))},n.quantiles=function(e){return Array.from({length:e+1},((n,r)=>lt(t,r/e)))},n.copy=function(){return q_(e).domain(t)},Wy.apply(n,arguments)}function H_(){var t,e,n,r,i,a,o,s=0,c=.5,l=1,u=1,h=Ky,d=!1;function f(t){return isNaN(t=+t)?o:(t=.5+((t=+a(t))-e)*(u*t<u*e?r:i),h(d?Math.max(0,Math.min(1,t)):t))}function p(t){return function(e){var n,r,i;return arguments.length?([n,r,i]=e,h=fy(t,[n,r,i]),f):[h(0),h(.5),h(1)]}}return f.domain=function(o){return arguments.length?([s,c,l]=o,t=a(s=+s),e=a(c=+c),n=a(l=+l),r=t===e?0:.5/(e-t),i=e===n?0:.5/(n-e),u=e<t?-1:1,f):[s,c,l]},f.clamp=function(t){return arguments.length?(d=!!t,f):d},f.interpolator=function(t){return arguments.length?(h=t,f):h},f.range=p(Ir),f.rangeRound=p(ty),f.unknown=function(t){return arguments.length?(o=t,f):o},function(o){return a=o,t=o(s),e=o(c),n=o(l),r=t===e?0:.5/(e-t),i=e===n?0:.5/(n-e),u=e<t?-1:1,f}}function V_(){var t=om(H_()(Ky));return t.copy=function(){return j_(t,V_())},Wy.apply(t,arguments)}function G_(){var t=ym(H_()).domain([.1,1,10]);return t.copy=function(){return j_(t,G_()).base(t.base())},Wy.apply(t,arguments)}function X_(){var t=_m(H_());return t.copy=function(){return j_(t,X_()).constant(t.constant())},Wy.apply(t,arguments)}function Z_(){var t=Tm(H_());return t.copy=function(){return j_(t,Z_()).exponent(t.exponent())},Wy.apply(t,arguments)}function Q_(){return Z_.apply(null,arguments).exponent(.5)}function K_(t){for(var e=t.length/6|0,n=new Array(e),r=0;r<e;)n[r]="#"+t.slice(6*r,6*++r);return n}D_({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});const J_=K_("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),tx=K_("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"),ex=K_("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"),nx=K_("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"),rx=K_("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"),ix=K_("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"),ax=K_("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"),ox=K_("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"),sx=K_("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"),cx=K_("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab"),lx=t=>wr(t[t.length-1]);var ux=new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(K_);const hx=lx(ux);var dx=new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(K_);const fx=lx(dx);var px=new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(K_);const gx=lx(px);var yx=new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(K_);const mx=lx(yx);var bx=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(K_);const vx=lx(bx);var _x=new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(K_);const xx=lx(_x);var kx=new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(K_);const wx=lx(kx);var Ex=new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(K_);const Tx=lx(Ex);var Cx=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(K_);const Sx=lx(Cx);var Ax=new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(K_);const Mx=lx(Ax);var Ox=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(K_);const Nx=lx(Ox);var Dx=new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(K_);const Bx=lx(Dx);var Lx=new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(K_);const Ix=lx(Lx);var Fx=new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(K_);const Rx=lx(Fx);var Px=new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(K_);const jx=lx(Px);var zx=new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(K_);const Yx=lx(zx);var Ux=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(K_);const $x=lx(Ux);var Wx=new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(K_);const qx=lx(Wx);var Hx=new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(K_);const Vx=lx(Hx);var Gx=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(K_);const Xx=lx(Gx);var Zx=new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(K_);const Qx=lx(Zx);var Kx=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(K_);const Jx=lx(Kx);var tk=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(K_);const ek=lx(tk);var nk=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(K_);const rk=lx(nk);var ik=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(K_);const ak=lx(ik);var ok=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(K_);const sk=lx(ok);var ck=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(K_);const lk=lx(ck);function uk(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(-4.54-t*(35.34-t*(2381.73-t*(6402.7-t*(7024.72-2710.57*t)))))))+", "+Math.max(0,Math.min(255,Math.round(32.49+t*(170.73+t*(52.82-t*(131.46-t*(176.58-67.37*t)))))))+", "+Math.max(0,Math.min(255,Math.round(81.24+t*(442.36-t*(2482.43-t*(6167.24-t*(6614.94-2475.67*t)))))))+")"}const hk=dy(Uo(300,.5,0),Uo(-240,.5,1));var dk=dy(Uo(-100,.75,.35),Uo(80,1.5,.8)),fk=dy(Uo(260,.75,.35),Uo(80,1.5,.8)),pk=Uo();function gk(t){(t<0||t>1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return pk.h=360*t-100,pk.s=1.5-1.5*e,pk.l=.8-.9*e,pk+""}var yk=ir(),mk=Math.PI/3,bk=2*Math.PI/3;function vk(t){var e;return t=(.5-t)*Math.PI,yk.r=255*(e=Math.sin(t))*e,yk.g=255*(e=Math.sin(t+mk))*e,yk.b=255*(e=Math.sin(t+bk))*e,yk+""}function _k(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-14825.05*t)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+707.56*t)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-6838.66*t)))))))+")"}function xk(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}const kk=xk(K_("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));var wk=xk(K_("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),Ek=xk(K_("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),Tk=xk(K_("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));function Ck(t){return Mn(pn(t).call(document.documentElement))}var Sk=0;function Ak(){return new Mk}function Mk(){this._="@"+(++Sk).toString(36)}function Ok(t,e){return t.target&&(t=Fr(t),void 0===e&&(e=t.currentTarget),t=t.touches||[t]),Array.from(t,(t=>Rr(t,e)))}function Nk(t){return"string"==typeof t?new Cn([document.querySelectorAll(t)],[document.documentElement]):new Cn([ge(t)],Tn)}function Dk(t){return function(){return t}}Mk.prototype=Ak.prototype={constructor:Mk,get:function(t){for(var e=this._;!(e in t);)if(!(t=t.parentNode))return;return t[e]},set:function(t,e){return t[this._]=e},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var Bk=Math.abs,Lk=Math.atan2,Ik=Math.cos,Fk=Math.max,Rk=Math.min,Pk=Math.sin,jk=Math.sqrt,zk=1e-12,Yk=Math.PI,Uk=Yk/2,$k=2*Yk;function Wk(t){return t>1?0:t<-1?Yk:Math.acos(t)}function qk(t){return t>=1?Uk:t<=-1?-Uk:Math.asin(t)}function Hk(t){return t.innerRadius}function Vk(t){return t.outerRadius}function Gk(t){return t.startAngle}function Xk(t){return t.endAngle}function Zk(t){return t&&t.padAngle}function Qk(t,e,n,r,i,a,o,s){var c=n-t,l=r-e,u=o-i,h=s-a,d=h*c-u*l;if(!(d*d<zk))return[t+(d=(u*(e-a)-h*(t-i))/d)*c,e+d*l]}function Kk(t,e,n,r,i,a,o){var s=t-n,c=e-r,l=(o?a:-a)/jk(s*s+c*c),u=l*c,h=-l*s,d=t+u,f=e+h,p=n+u,g=r+h,y=(d+p)/2,m=(f+g)/2,b=p-d,v=g-f,_=b*b+v*v,x=i-a,k=d*g-p*f,w=(v<0?-1:1)*jk(Fk(0,x*x*_-k*k)),E=(k*v-b*w)/_,T=(-k*b-v*w)/_,C=(k*v+b*w)/_,S=(-k*b+v*w)/_,A=E-y,M=T-m,O=C-y,N=S-m;return A*A+M*M>O*O+N*N&&(E=C,T=S),{cx:E,cy:T,x01:-u,y01:-h,x11:E*(i/x-1),y11:T*(i/x-1)}}function Jk(){var t=Hk,e=Vk,n=Dk(0),r=null,i=Gk,a=Xk,o=Zk,s=null;function c(){var c,l,u=+t.apply(this,arguments),h=+e.apply(this,arguments),d=i.apply(this,arguments)-Uk,f=a.apply(this,arguments)-Uk,p=Bk(f-d),g=f>d;if(s||(s=c=Ja()),h<u&&(l=h,h=u,u=l),h>zk)if(p>$k-zk)s.moveTo(h*Ik(d),h*Pk(d)),s.arc(0,0,h,d,f,!g),u>zk&&(s.moveTo(u*Ik(f),u*Pk(f)),s.arc(0,0,u,f,d,g));else{var y,m,b=d,v=f,_=d,x=f,k=p,w=p,E=o.apply(this,arguments)/2,T=E>zk&&(r?+r.apply(this,arguments):jk(u*u+h*h)),C=Rk(Bk(h-u)/2,+n.apply(this,arguments)),S=C,A=C;if(T>zk){var M=qk(T/u*Pk(E)),O=qk(T/h*Pk(E));(k-=2*M)>zk?(_+=M*=g?1:-1,x-=M):(k=0,_=x=(d+f)/2),(w-=2*O)>zk?(b+=O*=g?1:-1,v-=O):(w=0,b=v=(d+f)/2)}var N=h*Ik(b),D=h*Pk(b),B=u*Ik(x),L=u*Pk(x);if(C>zk){var I,F=h*Ik(v),R=h*Pk(v),P=u*Ik(_),j=u*Pk(_);if(p<Yk&&(I=Qk(N,D,P,j,F,R,B,L))){var z=N-I[0],Y=D-I[1],U=F-I[0],$=R-I[1],W=1/Pk(Wk((z*U+Y*$)/(jk(z*z+Y*Y)*jk(U*U+$*$)))/2),q=jk(I[0]*I[0]+I[1]*I[1]);S=Rk(C,(u-q)/(W-1)),A=Rk(C,(h-q)/(W+1))}}w>zk?A>zk?(y=Kk(P,j,N,D,h,A,g),m=Kk(F,R,B,L,h,A,g),s.moveTo(y.cx+y.x01,y.cy+y.y01),A<C?s.arc(y.cx,y.cy,A,Lk(y.y01,y.x01),Lk(m.y01,m.x01),!g):(s.arc(y.cx,y.cy,A,Lk(y.y01,y.x01),Lk(y.y11,y.x11),!g),s.arc(0,0,h,Lk(y.cy+y.y11,y.cx+y.x11),Lk(m.cy+m.y11,m.cx+m.x11),!g),s.arc(m.cx,m.cy,A,Lk(m.y11,m.x11),Lk(m.y01,m.x01),!g))):(s.moveTo(N,D),s.arc(0,0,h,b,v,!g)):s.moveTo(N,D),u>zk&&k>zk?S>zk?(y=Kk(B,L,F,R,u,-S,g),m=Kk(N,D,P,j,u,-S,g),s.lineTo(y.cx+y.x01,y.cy+y.y01),S<C?s.arc(y.cx,y.cy,S,Lk(y.y01,y.x01),Lk(m.y01,m.x01),!g):(s.arc(y.cx,y.cy,S,Lk(y.y01,y.x01),Lk(y.y11,y.x11),!g),s.arc(0,0,u,Lk(y.cy+y.y11,y.cx+y.x11),Lk(m.cy+m.y11,m.cx+m.x11),g),s.arc(m.cx,m.cy,S,Lk(m.y11,m.x11),Lk(m.y01,m.x01),!g))):s.arc(0,0,u,x,_,g):s.lineTo(B,L)}else s.moveTo(0,0);if(s.closePath(),c)return s=null,c+""||null}return c.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-Yk/2;return[Ik(r)*n,Pk(r)*n]},c.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Dk(+e),c):t},c.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Dk(+t),c):e},c.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:Dk(+t),c):n},c.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Dk(+t),c):r},c.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:Dk(+t),c):i},c.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:Dk(+t),c):a},c.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:Dk(+t),c):o},c.context=function(t){return arguments.length?(s=null==t?null:t,c):s},c}var tw=Array.prototype.slice;function ew(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function nw(t){this._context=t}function rw(t){return new nw(t)}function iw(t){return t[0]}function aw(t){return t[1]}function ow(t,e){var n=Dk(!0),r=null,i=rw,a=null;function o(o){var s,c,l,u=(o=ew(o)).length,h=!1;for(null==r&&(a=i(l=Ja())),s=0;s<=u;++s)!(s<u&&n(c=o[s],s,o))===h&&((h=!h)?a.lineStart():a.lineEnd()),h&&a.point(+t(c,s,o),+e(c,s,o));if(l)return a=null,l+""||null}return t="function"==typeof t?t:void 0===t?iw:Dk(t),e="function"==typeof e?e:void 0===e?aw:Dk(e),o.x=function(e){return arguments.length?(t="function"==typeof e?e:Dk(+e),o):t},o.y=function(t){return arguments.length?(e="function"==typeof t?t:Dk(+t),o):e},o.defined=function(t){return arguments.length?(n="function"==typeof t?t:Dk(!!t),o):n},o.curve=function(t){return arguments.length?(i=t,null!=r&&(a=i(r)),o):i},o.context=function(t){return arguments.length?(null==t?r=a=null:a=i(r=t),o):r},o}function sw(t,e,n){var r=null,i=Dk(!0),a=null,o=rw,s=null;function c(c){var l,u,h,d,f,p=(c=ew(c)).length,g=!1,y=new Array(p),m=new Array(p);for(null==a&&(s=o(f=Ja())),l=0;l<=p;++l){if(!(l<p&&i(d=c[l],l,c))===g)if(g=!g)u=l,s.areaStart(),s.lineStart();else{for(s.lineEnd(),s.lineStart(),h=l-1;h>=u;--h)s.point(y[h],m[h]);s.lineEnd(),s.areaEnd()}g&&(y[l]=+t(d,l,c),m[l]=+e(d,l,c),s.point(r?+r(d,l,c):y[l],n?+n(d,l,c):m[l]))}if(f)return s=null,f+""||null}function l(){return ow().defined(i).curve(o).context(a)}return t="function"==typeof t?t:void 0===t?iw:Dk(+t),e="function"==typeof e?e:Dk(void 0===e?0:+e),n="function"==typeof n?n:void 0===n?aw:Dk(+n),c.x=function(e){return arguments.length?(t="function"==typeof e?e:Dk(+e),r=null,c):t},c.x0=function(e){return arguments.length?(t="function"==typeof e?e:Dk(+e),c):t},c.x1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Dk(+t),c):r},c.y=function(t){return arguments.length?(e="function"==typeof t?t:Dk(+t),n=null,c):e},c.y0=function(t){return arguments.length?(e="function"==typeof t?t:Dk(+t),c):e},c.y1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:Dk(+t),c):n},c.lineX0=c.lineY0=function(){return l().x(t).y(e)},c.lineY1=function(){return l().x(t).y(n)},c.lineX1=function(){return l().x(r).y(e)},c.defined=function(t){return arguments.length?(i="function"==typeof t?t:Dk(!!t),c):i},c.curve=function(t){return arguments.length?(o=t,null!=a&&(s=o(a)),c):o},c.context=function(t){return arguments.length?(null==t?a=s=null:s=o(a=t),c):a},c}function cw(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function lw(t){return t}function uw(){var t=lw,e=cw,n=null,r=Dk(0),i=Dk($k),a=Dk(0);function o(o){var s,c,l,u,h,d=(o=ew(o)).length,f=0,p=new Array(d),g=new Array(d),y=+r.apply(this,arguments),m=Math.min($k,Math.max(-$k,i.apply(this,arguments)-y)),b=Math.min(Math.abs(m)/d,a.apply(this,arguments)),v=b*(m<0?-1:1);for(s=0;s<d;++s)(h=g[p[s]=s]=+t(o[s],s,o))>0&&(f+=h);for(null!=e?p.sort((function(t,n){return e(g[t],g[n])})):null!=n&&p.sort((function(t,e){return n(o[t],o[e])})),s=0,l=f?(m-d*v)/f:0;s<d;++s,y=u)c=p[s],u=y+((h=g[c])>0?h*l:0)+v,g[c]={data:o[c],index:s,value:h,startAngle:y,endAngle:u,padAngle:b};return g}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:Dk(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,n=null,o):e},o.sort=function(t){return arguments.length?(n=t,e=null,o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Dk(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Dk(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Dk(+t),o):a},o}nw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var hw=fw(rw);function dw(t){this._curve=t}function fw(t){function e(e){return new dw(t(e))}return e._curve=t,e}function pw(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(fw(t)):e()._curve},t}function gw(){return pw(ow().curve(hw))}function yw(){var t=sw().curve(hw),e=t.curve,n=t.lineX0,r=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return pw(n())},delete t.lineX0,t.lineEndAngle=function(){return pw(r())},delete t.lineX1,t.lineInnerRadius=function(){return pw(i())},delete t.lineY0,t.lineOuterRadius=function(){return pw(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(fw(t)):e()._curve},t}function mw(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]}function bw(t){return t.source}function vw(t){return t.target}function _w(t){var e=bw,n=vw,r=iw,i=aw,a=null;function o(){var o,s=tw.call(arguments),c=e.apply(this,s),l=n.apply(this,s);if(a||(a=o=Ja()),t(a,+r.apply(this,(s[0]=c,s)),+i.apply(this,s),+r.apply(this,(s[0]=l,s)),+i.apply(this,s)),o)return a=null,o+""||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(n=t,o):n},o.x=function(t){return arguments.length?(r="function"==typeof t?t:Dk(+t),o):r},o.y=function(t){return arguments.length?(i="function"==typeof t?t:Dk(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}function xw(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function kw(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function ww(t,e,n,r,i){var a=mw(e,n),o=mw(e,n=(n+i)/2),s=mw(r,n),c=mw(r,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],c[0],c[1])}function Ew(){return _w(xw)}function Tw(){return _w(kw)}function Cw(){var t=_w(ww);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}dw.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};const Sw={draw:function(t,e){var n=Math.sqrt(e/Yk);t.moveTo(n,0),t.arc(0,0,n,0,$k)}},Aw={draw:function(t,e){var n=Math.sqrt(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}};var Mw=Math.sqrt(1/3),Ow=2*Mw;const Nw={draw:function(t,e){var n=Math.sqrt(e/Ow),r=n*Mw;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}};var Dw=Math.sin(Yk/10)/Math.sin(7*Yk/10),Bw=Math.sin($k/10)*Dw,Lw=-Math.cos($k/10)*Dw;const Iw={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=Bw*n,i=Lw*n;t.moveTo(0,-n),t.lineTo(r,i);for(var a=1;a<5;++a){var o=$k*a/5,s=Math.cos(o),c=Math.sin(o);t.lineTo(c*n,-s*n),t.lineTo(s*r-c*i,c*r+s*i)}t.closePath()}},Fw={draw:function(t,e){var n=Math.sqrt(e),r=-n/2;t.rect(r,r,n,n)}};var Rw=Math.sqrt(3);const Pw={draw:function(t,e){var n=-Math.sqrt(e/(3*Rw));t.moveTo(0,2*n),t.lineTo(-Rw*n,-n),t.lineTo(Rw*n,-n),t.closePath()}};var jw=-.5,zw=Math.sqrt(3)/2,Yw=1/Math.sqrt(12),Uw=3*(Yw/2+1);const $w={draw:function(t,e){var n=Math.sqrt(e/Uw),r=n/2,i=n*Yw,a=r,o=n*Yw+n,s=-a,c=o;t.moveTo(r,i),t.lineTo(a,o),t.lineTo(s,c),t.lineTo(jw*r-zw*i,zw*r+jw*i),t.lineTo(jw*a-zw*o,zw*a+jw*o),t.lineTo(jw*s-zw*c,zw*s+jw*c),t.lineTo(jw*r+zw*i,jw*i-zw*r),t.lineTo(jw*a+zw*o,jw*o-zw*a),t.lineTo(jw*s+zw*c,jw*c-zw*s),t.closePath()}};var Ww=[Sw,Aw,Nw,Fw,Iw,Pw,$w];function qw(t,e){var n=null;function r(){var r;if(n||(n=r=Ja()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return t="function"==typeof t?t:Dk(t||Sw),e="function"==typeof e?e:Dk(void 0===e?64:+e),r.type=function(e){return arguments.length?(t="function"==typeof e?e:Dk(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:Dk(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r}function Hw(){}function Vw(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function Gw(t){this._context=t}function Xw(t){return new Gw(t)}function Zw(t){this._context=t}function Qw(t){return new Zw(t)}function Kw(t){this._context=t}function Jw(t){return new Kw(t)}Gw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Vw(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Vw(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},Zw.prototype={areaStart:Hw,areaEnd:Hw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:Vw(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},Kw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:Vw(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class tE{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function eE(t){return new tE(t,!0)}function nE(t){return new tE(t,!1)}function rE(t,e){this._basis=new Gw(t),this._beta=e}rE.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],a=e[0],o=t[n]-i,s=e[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*o),this._beta*e[c]+(1-this._beta)*(a+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const iE=function t(e){function n(t){return 1===e?new Gw(t):new rE(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function aE(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function oE(t,e){this._context=t,this._k=(1-e)/6}oE.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:aE(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:aE(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const sE=function t(e){function n(t){return new oE(t,e)}return n.tension=function(e){return t(+e)},n}(0);function cE(t,e){this._context=t,this._k=(1-e)/6}cE.prototype={areaStart:Hw,areaEnd:Hw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:aE(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const lE=function t(e){function n(t){return new cE(t,e)}return n.tension=function(e){return t(+e)},n}(0);function uE(t,e){this._context=t,this._k=(1-e)/6}uE.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:aE(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const hE=function t(e){function n(t){return new uE(t,e)}return n.tension=function(e){return t(+e)},n}(0);function dE(t,e,n){var r=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>zk){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>zk){var l=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,u=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*l+t._x1*t._l23_2a-e*t._l12_2a)/u,o=(o*l+t._y1*t._l23_2a-n*t._l12_2a)/u}t._context.bezierCurveTo(r,i,a,o,t._x2,t._y2)}function fE(t,e){this._context=t,this._alpha=e}fE.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:dE(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const pE=function t(e){function n(t){return e?new fE(t,e):new oE(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function gE(t,e){this._context=t,this._alpha=e}gE.prototype={areaStart:Hw,areaEnd:Hw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:dE(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const yE=function t(e){function n(t){return e?new gE(t,e):new cE(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function mE(t,e){this._context=t,this._alpha=e}mE.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:dE(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const bE=function t(e){function n(t){return e?new mE(t,e):new uE(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function vE(t){this._context=t}function _E(t){return new vE(t)}function xE(t){return t<0?-1:1}function kE(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(xE(a)+xE(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function wE(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function EE(t,e,n){var r=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-r)/3;t._context.bezierCurveTo(r+s,i+s*e,a-s,o-s*n,a,o)}function TE(t){this._context=t}function CE(t){this._context=new SE(t)}function SE(t){this._context=t}function AE(t){return new TE(t)}function ME(t){return new CE(t)}function OE(t){this._context=t}function NE(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e<r-1;++e)i[e]=1,a[e]=4,o[e]=4*t[e]+2*t[e+1];for(i[r-1]=2,a[r-1]=7,o[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)n=i[e]/a[e-1],a[e]-=n,o[e]-=n*o[e-1];for(i[r-1]=o[r-1]/a[r-1],e=r-2;e>=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e<r-1;++e)a[e]=2*t[e+1]-i[e+1];return[i,a]}function DE(t){return new OE(t)}function BE(t,e){this._context=t,this._t=e}function LE(t){return new BE(t,.5)}function IE(t){return new BE(t,0)}function FE(t){return new BE(t,1)}function RE(t,e){if((i=t.length)>1)for(var n,r,i,a=1,o=t[e[0]],s=o.length;a<i;++a)for(r=o,o=t[e[a]],n=0;n<s;++n)o[n][1]+=o[n][0]=isNaN(r[n][1])?r[n][0]:r[n][1]}function PE(t){for(var e=t.length,n=new Array(e);--e>=0;)n[e]=e;return n}function jE(t,e){return t[e]}function zE(t){const e=[];return e.key=t,e}function YE(){var t=Dk([]),e=PE,n=RE,r=jE;function i(i){var a,o,s=Array.from(t.apply(this,arguments),zE),c=s.length,l=-1;for(const t of i)for(a=0,++l;a<c;++a)(s[a][l]=[0,+r(t,s[a].key,l,i)]).data=t;for(a=0,o=ew(e(s));a<c;++a)s[o[a]].index=a;return n(s,o),s}return i.keys=function(e){return arguments.length?(t="function"==typeof e?e:Dk(Array.from(e)),i):t},i.value=function(t){return arguments.length?(r="function"==typeof t?t:Dk(+t),i):r},i.order=function(t){return arguments.length?(e=null==t?PE:"function"==typeof t?t:Dk(Array.from(t)),i):e},i.offset=function(t){return arguments.length?(n=null==t?RE:t,i):n},i}function UE(t,e){if((r=t.length)>0){for(var n,r,i,a=0,o=t[0].length;a<o;++a){for(i=n=0;n<r;++n)i+=t[n][a][1]||0;if(i)for(n=0;n<r;++n)t[n][a][1]/=i}RE(t,e)}}function $E(t,e){if((s=t.length)>0)for(var n,r,i,a,o,s,c=0,l=t[e[0]].length;c<l;++c)for(a=o=0,n=0;n<s;++n)(i=(r=t[e[n]][c])[1]-r[0])>0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):(r[0]=0,r[1]=i)}function WE(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],a=i.length;r<a;++r){for(var o=0,s=0;o<n;++o)s+=t[o][r][1]||0;i[r][1]+=i[r][0]=-s/2}RE(t,e)}}function qE(t,e){if((i=t.length)>0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,a=0,o=1;o<r;++o){for(var s=0,c=0,l=0;s<i;++s){for(var u=t[e[s]],h=u[o][1]||0,d=(h-(u[o-1][1]||0))/2,f=0;f<s;++f){var p=t[e[f]];d+=(p[o][1]||0)-(p[o-1][1]||0)}c+=h,l+=d*h}n[o-1][1]+=n[o-1][0]=a,c&&(a-=l/c)}n[o-1][1]+=n[o-1][0]=a,RE(t,e)}}function HE(t){var e=t.map(VE);return PE(t).sort((function(t,n){return e[t]-e[n]}))}function VE(t){for(var e,n=-1,r=0,i=t.length,a=-1/0;++n<i;)(e=+t[n][1])>a&&(a=e,r=n);return r}function GE(t){var e=t.map(XE);return PE(t).sort((function(t,n){return e[t]-e[n]}))}function XE(t){for(var e,n=0,r=-1,i=t.length;++r<i;)(e=+t[r][1])&&(n+=e);return n}function ZE(t){return GE(t).reverse()}function QE(t){var e,n,r=t.length,i=t.map(XE),a=HE(t),o=0,s=0,c=[],l=[];for(e=0;e<r;++e)n=a[e],o<s?(o+=i[n],c.push(n)):(s+=i[n],l.push(n));return l.reverse().concat(c)}function KE(t){return PE(t).reverse()}vE.prototype={areaStart:Hw,areaEnd:Hw,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},TE.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:EE(this,this._t0,wE(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,EE(this,wE(this,n=kE(this,t,e)),n);break;default:EE(this,this._t0,n=kE(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},(CE.prototype=Object.create(TE.prototype)).point=function(t,e){TE.prototype.point.call(this,e,t)},SE.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,n,r,i,a){this._context.bezierCurveTo(e,t,r,n,a,i)}},OE.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===n)this._context.lineTo(t[1],e[1]);else for(var r=NE(t),i=NE(e),a=0,o=1;o<n;++a,++o)this._context.bezierCurveTo(r[0][a],i[0][a],r[1][a],i[1][a],t[o],e[o]);(this._line||0!==this._line&&1===n)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},BE.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var JE="%Y-%m-%dT%H:%M:%S.%LZ",tT=Date.prototype.toISOString?function(t){return t.toISOString()}:fv(JE);const eT=tT;var nT=+new Date("2000-01-01T00:00:00.000Z")?function(t){var e=new Date(t);return isNaN(e)?null:e}:pv(JE);const rT=nT;function iT(t,e,n){var r=new Zr,i=e;return null==e?(r.restart(t,e,n),r):(r._restart=r.restart,r.restart=function(t,e,n){e=+e,n=null==n?Gr():+n,r._restart((function a(o){o+=i,r._restart(a,i+=e,n),t(o)}),e,n)},r.restart(t,e,n),r)}const aT=t=>()=>t;function oT(t,{sourceEvent:e,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function sT(t,e,n){this.k=t,this.x=e,this.y=n}sT.prototype={constructor:sT,scale:function(t){return 1===t?this:new sT(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new sT(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var cT=new sT(1,0,0);function lT(t){for(;!t.__zoom;)if(!(t=t.parentNode))return cT;return t.__zoom}function uT(t){t.stopImmediatePropagation()}function hT(t){t.preventDefault(),t.stopImmediatePropagation()}function dT(t){return!(t.ctrlKey&&"wheel"!==t.type||t.button)}function fT(){var t=this;return t instanceof SVGElement?(t=t.ownerSVGElement||t).hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]:[[0,0],[t.clientWidth,t.clientHeight]]}function pT(){return this.__zoom||cT}function gT(t){return-t.deltaY*(1===t.deltaMode?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function yT(){return navigator.maxTouchPoints||"ontouchstart"in this}function mT(t,e,n){var r=t.invertX(e[0][0])-n[0][0],i=t.invertX(e[1][0])-n[1][0],a=t.invertY(e[0][1])-n[0][1],o=t.invertY(e[1][1])-n[1][1];return t.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}function bT(){var t,e,n,r=dT,i=fT,a=mT,o=gT,s=yT,c=[0,1/0],l=[[-1/0,-1/0],[1/0,1/0]],u=250,h=ny,d=de("start","zoom","end"),f=500,p=0,g=10;function y(t){t.property("__zoom",pT).on("wheel.zoom",w,{passive:!1}).on("mousedown.zoom",E).on("dblclick.zoom",T).filter(s).on("touchstart.zoom",C).on("touchmove.zoom",S).on("touchend.zoom touchcancel.zoom",A).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function m(t,e){return(e=Math.max(c[0],Math.min(c[1],e)))===t.k?t:new sT(e,t.x,t.y)}function b(t,e,n){var r=e[0]-n[0]*t.k,i=e[1]-n[1]*t.k;return r===t.x&&i===t.y?t:new sT(t.k,r,i)}function v(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function _(t,e,n,r){t.on("start.zoom",(function(){x(this,arguments).event(r).start()})).on("interrupt.zoom end.zoom",(function(){x(this,arguments).event(r).end()})).tween("zoom",(function(){var t=this,a=arguments,o=x(t,a).event(r),s=i.apply(t,a),c=null==n?v(s):"function"==typeof n?n.apply(t,a):n,l=Math.max(s[1][0]-s[0][0],s[1][1]-s[0][1]),u=t.__zoom,d="function"==typeof e?e.apply(t,a):e,f=h(u.invert(c).concat(l/u.k),d.invert(c).concat(l/d.k));return function(t){if(1===t)t=d;else{var e=f(t),n=l/e[2];t=new sT(n,c[0]-e[0]*n,c[1]-e[1]*n)}o.zoom(null,t)}}))}function x(t,e,n){return!n&&t.__zooming||new k(t,e)}function k(t,e){this.that=t,this.args=e,this.active=0,this.sourceEvent=null,this.extent=i.apply(t,e),this.taps=0}function w(t,...e){if(r.apply(this,arguments)){var n=x(this,e).event(t),i=this.__zoom,s=Math.max(c[0],Math.min(c[1],i.k*Math.pow(2,o.apply(this,arguments)))),u=Rr(t);if(n.wheel)n.mouse[0][0]===u[0]&&n.mouse[0][1]===u[1]||(n.mouse[1]=i.invert(n.mouse[0]=u)),clearTimeout(n.wheel);else{if(i.k===s)return;n.mouse=[u,i.invert(u)],li(this),n.start()}hT(t),n.wheel=setTimeout(h,150),n.zoom("mouse",a(b(m(i,s),n.mouse[0],n.mouse[1]),n.extent,l))}function h(){n.wheel=null,n.end()}}function E(t,...e){if(!n&&r.apply(this,arguments)){var i=t.currentTarget,o=x(this,e,!0).event(t),s=Mn(t.view).on("mousemove.zoom",d,!0).on("mouseup.zoom",f,!0),c=Rr(t,i),u=t.clientX,h=t.clientY;Ln(t.view),uT(t),o.mouse=[c,this.__zoom.invert(c)],li(this),o.start()}function d(t){if(hT(t),!o.moved){var e=t.clientX-u,n=t.clientY-h;o.moved=e*e+n*n>p}o.event(t).zoom("mouse",a(b(o.that.__zoom,o.mouse[0]=Rr(t,i),o.mouse[1]),o.extent,l))}function f(t){s.on("mousemove.zoom mouseup.zoom",null),In(t.view,o.moved),hT(t),o.event(t).end()}}function T(t,...e){if(r.apply(this,arguments)){var n=this.__zoom,o=Rr(t.changedTouches?t.changedTouches[0]:t,this),s=n.invert(o),c=n.k*(t.shiftKey?.5:2),h=a(b(m(n,c),o,s),i.apply(this,e),l);hT(t),u>0?Mn(this).transition().duration(u).call(_,h,o,t):Mn(this).call(y.transform,h,o,t)}}function C(n,...i){if(r.apply(this,arguments)){var a,o,s,c,l=n.touches,u=l.length,h=x(this,i,n.changedTouches.length===u).event(n);for(uT(n),o=0;o<u;++o)c=[c=Rr(s=l[o],this),this.__zoom.invert(c),s.identifier],h.touch0?h.touch1||h.touch0[2]===c[2]||(h.touch1=c,h.taps=0):(h.touch0=c,a=!0,h.taps=1+!!t);t&&(t=clearTimeout(t)),a&&(h.taps<2&&(e=c[0],t=setTimeout((function(){t=null}),f)),li(this),h.start())}}function S(t,...e){if(this.__zooming){var n,r,i,o,s=x(this,e).event(t),c=t.changedTouches,u=c.length;for(hT(t),n=0;n<u;++n)i=Rr(r=c[n],this),s.touch0&&s.touch0[2]===r.identifier?s.touch0[0]=i:s.touch1&&s.touch1[2]===r.identifier&&(s.touch1[0]=i);if(r=s.that.__zoom,s.touch1){var h=s.touch0[0],d=s.touch0[1],f=s.touch1[0],p=s.touch1[1],g=(g=f[0]-h[0])*g+(g=f[1]-h[1])*g,y=(y=p[0]-d[0])*y+(y=p[1]-d[1])*y;r=m(r,Math.sqrt(g/y)),i=[(h[0]+f[0])/2,(h[1]+f[1])/2],o=[(d[0]+p[0])/2,(d[1]+p[1])/2]}else{if(!s.touch0)return;i=s.touch0[0],o=s.touch0[1]}s.zoom("touch",a(b(r,i,o),s.extent,l))}}function A(t,...r){if(this.__zooming){var i,a,o=x(this,r).event(t),s=t.changedTouches,c=s.length;for(uT(t),n&&clearTimeout(n),n=setTimeout((function(){n=null}),f),i=0;i<c;++i)a=s[i],o.touch0&&o.touch0[2]===a.identifier?delete o.touch0:o.touch1&&o.touch1[2]===a.identifier&&delete o.touch1;if(o.touch1&&!o.touch0&&(o.touch0=o.touch1,delete o.touch1),o.touch0)o.touch0[1]=this.__zoom.invert(o.touch0[0]);else if(o.end(),2===o.taps&&(a=Rr(a,this),Math.hypot(e[0]-a[0],e[1]-a[1])<g)){var l=Mn(this).on("dblclick.zoom");l&&l.apply(this,arguments)}}}return y.transform=function(t,e,n,r){var i=t.selection?t.selection():t;i.property("__zoom",pT),t!==i?_(t,e,n,r):i.interrupt().each((function(){x(this,arguments).event(r).start().zoom(null,"function"==typeof e?e.apply(this,arguments):e).end()}))},y.scaleBy=function(t,e,n,r){y.scaleTo(t,(function(){var t=this.__zoom.k,n="function"==typeof e?e.apply(this,arguments):e;return t*n}),n,r)},y.scaleTo=function(t,e,n,r){y.transform(t,(function(){var t=i.apply(this,arguments),r=this.__zoom,o=null==n?v(t):"function"==typeof n?n.apply(this,arguments):n,s=r.invert(o),c="function"==typeof e?e.apply(this,arguments):e;return a(b(m(r,c),o,s),t,l)}),n,r)},y.translateBy=function(t,e,n,r){y.transform(t,(function(){return a(this.__zoom.translate("function"==typeof e?e.apply(this,arguments):e,"function"==typeof n?n.apply(this,arguments):n),i.apply(this,arguments),l)}),null,r)},y.translateTo=function(t,e,n,r,o){y.transform(t,(function(){var t=i.apply(this,arguments),o=this.__zoom,s=null==r?v(t):"function"==typeof r?r.apply(this,arguments):r;return a(cT.translate(s[0],s[1]).scale(o.k).translate("function"==typeof e?-e.apply(this,arguments):-e,"function"==typeof n?-n.apply(this,arguments):-n),t,l)}),r,o)},k.prototype={event:function(t){return t&&(this.sourceEvent=t),this},start:function(){return 1==++this.active&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(t,e){return this.mouse&&"mouse"!==t&&(this.mouse[1]=e.invert(this.mouse[0])),this.touch0&&"touch"!==t&&(this.touch0[1]=e.invert(this.touch0[0])),this.touch1&&"touch"!==t&&(this.touch1[1]=e.invert(this.touch1[0])),this.that.__zoom=e,this.emit("zoom"),this},end:function(){return 0==--this.active&&(delete this.that.__zooming,this.emit("end")),this},emit:function(t){var e=Mn(this.that).datum();d.call(t,this.that,new oT(t,{sourceEvent:this.sourceEvent,target:y,type:t,transform:this.that.__zoom,dispatch:d}),e)}},y.wheelDelta=function(t){return arguments.length?(o="function"==typeof t?t:aT(+t),y):o},y.filter=function(t){return arguments.length?(r="function"==typeof t?t:aT(!!t),y):r},y.touchable=function(t){return arguments.length?(s="function"==typeof t?t:aT(!!t),y):s},y.extent=function(t){return arguments.length?(i="function"==typeof t?t:aT([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),y):i},y.scaleExtent=function(t){return arguments.length?(c[0]=+t[0],c[1]=+t[1],y):[c[0],c[1]]},y.translateExtent=function(t){return arguments.length?(l[0][0]=+t[0][0],l[1][0]=+t[1][0],l[0][1]=+t[0][1],l[1][1]=+t[1][1],y):[[l[0][0],l[0][1]],[l[1][0],l[1][1]]]},y.constrain=function(t){return arguments.length?(a=t,y):a},y.duration=function(t){return arguments.length?(u=+t,y):u},y.interpolate=function(t){return arguments.length?(h=t,y):h},y.on=function(){var t=d.on.apply(d,arguments);return t===d?y:t},y.clickDistance=function(t){return arguments.length?(p=(t=+t)*t,y):Math.sqrt(p)},y.tapDistance=function(t){return arguments.length?(g=+t,y):g},y}lT.prototype=sT.prototype}},a={};function o(t){var e=a[t];if(void 0!==e)return e.exports;var n=a[t]={id:t,loaded:!1,exports:{}};return i[t].call(n.exports,n,n.exports,o),n.loaded=!0,n.exports}o.c=a,o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(i){if("object"==typeof window)return window}}(),o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var s=o(o.s=6187).Z;const l="light";const u=({chart:t,config:e})=>{if("undefined"==typeof window)return r.createElement("div",{className:"mermaid","data-mermaid-src":t},t);const n=(0,r.useMemo)((()=>"string"==typeof e?JSON.parse(e):e),[e]),i=document.querySelector("html"),[a,o]=(0,r.useState)(!1),c=(0,r.useMemo)((()=>function(t,e){let n=t.getAttribute("data-theme")??l;n!==l&&"dark"!==n&&(n=l);const r=n===l?"default":"dark";return e?.theme?.[n]??e?.mermaid?.theme??r}(i,n)),[n,a]);return(0,r.useEffect)((()=>{const t=new MutationObserver((t=>{for(const e of t)if("attributes"===e.type&&"data-theme"===e.attributeName){o((t=>!t));break}}));return t.observe(i,{attributes:!0}),()=>{try{t.disconnect()}catch{}}}),[]),(0,r.useEffect)((()=>{n&&(n.mermaid?s.initialize({startOnLoad:!0,...n.mermaid,theme:c}):s.initialize({startOnLoad:!0,theme:c}),document.querySelectorAll('div.mermaid[data-processed="true"]').forEach((t=>{t.removeAttribute("data-processed"),t.innerHTML=t.getAttribute("data-mermaid-src")})),s.contentLoaded())}),[n,c]),(0,r.useEffect)((()=>{document.querySelectorAll('div.mermaid[data-processed="true"]').forEach((t=>{t.removeAttribute("data-processed"),t.innerHTML=t.getAttribute("data-mermaid-src")})),setTimeout(s.contentLoaded,0)}),[t]),r.createElement("div",{className:"mermaid","data-mermaid-src":t},t)}}}]); \ No newline at end of file diff --git a/assets/js/d38eaa6e.5e09b96d.js b/assets/js/d38eaa6e.5e09b96d.js new file mode 100644 index 00000000..7daff1cb --- /dev/null +++ b/assets/js/d38eaa6e.5e09b96d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[389],{543:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>n,metadata:()=>p,toc:()=>s});var o=a(7462),i=(a(7294),a(3905));a(1839);const n={},r="Introduction",p={unversionedId:"about/introduction",id:"about/introduction",title:"Introduction",description:"The purpose of the template",source:"@site/docs/about/01-introduction.md",sourceDirName:"about",slug:"/about/introduction",permalink:"/template-fastapi-react/docs/about/introduction",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/about/01-introduction.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"about",next:{title:"Overview",permalink:"/template-fastapi-react/docs/about/overview"}},c={},s=[{value:"The purpose of the template",id:"the-purpose-of-the-template",level:2}],d={toc:s};function u(t){let{components:e,...a}=t;return(0,i.kt)("wrapper",(0,o.Z)({},d,a,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"introduction"},"Introduction"),(0,i.kt)("h2",{id:"the-purpose-of-the-template"},"The purpose of the template"),(0,i.kt)("p",null,"This is a solution template for creating a Single Page App (SPA) with React and FastAPI following the principles of Clean Architecture."),(0,i.kt)("p",null,"The template provides an example implementation of a todo application. The todo app implementation is fairly basic. A user can add a task, mark a task as completed and delete an added task. The purpose of the minimalist todo app implementation is to learn and practice what the concepts of ",(0,i.kt)("a",{parentName:"p",href:"/template-fastapi-react/docs/contribute/development-guide/coding/architecture"},"clean architecture")," are, and how they can be used in a REST API."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d3ec9a0d.42dfbc51.js b/assets/js/d3ec9a0d.42dfbc51.js new file mode 100644 index 00000000..be0d718b --- /dev/null +++ b/assets/js/d3ec9a0d.42dfbc51.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[95],{3883:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>l,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(7462),i=(r(7294),r(3905));r(1839);const a={},o="Prerequisites",s={unversionedId:"about/running/prerequisites",id:"about/running/prerequisites",title:"Prerequisites",description:"In order to run you need to have installed:",source:"@site/docs/about/running/01-prerequisites.md",sourceDirName:"about/running",slug:"/about/running/prerequisites",permalink:"/template-fastapi-react/docs/about/running/prerequisites",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/about/running/01-prerequisites.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"about",previous:{title:"Running",permalink:"/template-fastapi-react/docs/category/running"},next:{title:"Configuration",permalink:"/template-fastapi-react/docs/about/running/configure"}},u={},p=[],c={toc:p};function l(e){let{components:t,...r}=e;return(0,i.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"prerequisites"},"Prerequisites"),(0,i.kt)("p",null,"In order to run you need to have installed:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.docker.com/"},"Docker")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.docker.com/compose/"},"Docker Compose")),(0,i.kt)("li",{parentName:"ul"},"Git"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.python.org/"},"Python")," (3.10 or newer)")))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d5120d00.6cd7f025.js b/assets/js/d5120d00.6cd7f025.js new file mode 100644 index 00000000..b09c76d5 --- /dev/null +++ b/assets/js/d5120d00.6cd7f025.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[410],{5745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/ddc469d8.ae70c047.js b/assets/js/ddc469d8.ae70c047.js new file mode 100644 index 00000000..f91e7704 --- /dev/null +++ b/assets/js/ddc469d8.ae70c047.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[770],{6249:t=>{t.exports=JSON.parse('{"title":"How to","description":"General introductions to complex topics","slug":"/category/how-to","permalink":"/template-fastapi-react/docs/category/how-to","navigation":{"previous":{"title":"Use case","permalink":"/template-fastapi-react/docs/about/concepts/use-case"},"next":{"title":"How to do something","permalink":"/template-fastapi-react/docs/about/how-to/how-to-do-something"}}}')}}]); \ No newline at end of file diff --git a/assets/js/eb414d18.4f3efa3c.js b/assets/js/eb414d18.4f3efa3c.js new file mode 100644 index 00000000..6b9bdcb9 --- /dev/null +++ b/assets/js/eb414d18.4f3efa3c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[529],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/eccd96cf.0961e338.js b/assets/js/eccd96cf.0961e338.js new file mode 100644 index 00000000..e9b8d726 --- /dev/null +++ b/assets/js/eccd96cf.0961e338.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[283],{2565:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>m,frontMatter:()=>d,metadata:()=>p,toc:()=>s});var o=n(7462),i=(n(7294),n(3905)),a=n(1839),r=n(814);const d={sidebar_position:3},u="Extending the web",p={unversionedId:"contribute/development-guide/coding/extending-the-web/index",id:"contribute/development-guide/coding/extending-the-web/index",title:"Extending the web",description:"The web is grouped by features.",source:"@site/docs/contribute/development-guide/coding/extending-the-web/index.md",sourceDirName:"contribute/development-guide/coding/extending-the-web",slug:"/contribute/development-guide/coding/extending-the-web/",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-web/",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/extending-the-web/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"contribute",previous:{title:"Generate API clients",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/generate-api-clients"},next:{title:"Testing",permalink:"/template-fastapi-react/docs/contribute/development-guide/testing"}},c={},s=[{value:"Codebase structure",id:"codebase-structure",level:2},{value:"Application tree",id:"application-tree",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Oauth2",id:"oauth2",level:3},{value:"Routes",id:"routes",level:3}],l={toc:s};function m(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,o.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"extending-the-web"},"Extending the web"),(0,i.kt)("p",null,"The web is grouped by features."),(0,i.kt)("h2",{id:"codebase-structure"},"Codebase structure"),(0,i.kt)("p",null,"The web has a feature-based folder structure."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"\u251c\u2500\u2500 web/\n\u2502 \u2514\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 api/\n\u2502 \u251c\u2500\u2500 common/\n\u2502 \u251c\u2500\u2500 features/\n\u2502 \u2502 \u251c\u2500\u2500 todos/\n\u2502 \u2502 \u2514\u2500\u2500 ...\n\u2502 \u251c\u2500\u2500 hooks/\n\u2502 \u2514\u2500\u2500 pages/\n\u2514\u2500\u2500 ...\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"api")," contains the auto-generated API client"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"common")," contains shared code like generic components"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"features")," contains features e.g. todo-list"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"hooks")," contains re-usable hooks"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"pages")," contains entrypoints (pages that are used by the router)")),(0,i.kt)("h2",{id:"application-tree"},"Application tree"),(0,i.kt)(a.G,{chart:'\nflowchart\n subgraph web\n AuthProvider-. imported from .->react-oauth2-code-pkce;\n index --\x3e AuthProvider\n AuthProvider --\x3e app\n app --\x3e Header\n app --\x3e RouterProvider\n RouterProvider-. imported from .->react-router-dom;\n RouterProvider --\x3e routes\n routes -- /invalid --\x3e InvalidUrl\n routes -- / --\x3e TodoListPage\n TodoListPage --\x3e TodoList\n TodoList -- uses hook --\x3e useTodos\n useTodos -- uses client --\x3e TodoAPI\n TodoList --\x3e AddItem\n TodoList -- 1..x --\x3e TodoItem\n end\n\n TodoAPI -- HTTP requests --\x3e API\n\n style react-oauth2-code-pkce fill:#f96;\n click react-oauth2-code-pkce "https://www.npmjs.com/package/react-oauth2-code-pkce" "Open"\n style react-router-dom fill:#f96;\n click react-router-dom "https://www.npmjs.com/package/react-router-dom" "Open"\n\n style useTodos fill:#b8c;',mdxType:"Mermaid"}),(0,i.kt)("p",null,"External dependencies:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The app is using ",(0,i.kt)("a",{parentName:"li",href:"https://www.npmjs.com/package/react-oauth2-code-pkce"},"react-oauth2-code-pkce")," for Oauth2 authentication."),(0,i.kt)("li",{parentName:"ul"},"The app is using ",(0,i.kt)("a",{parentName:"li",href:"https://www.npmjs.com/package/react-router-dom"},"react-router-dom")," for routing.")),(0,i.kt)("h2",{id:"configuration"},"Configuration"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"../../../../about/running/configure"},"configuration")," for a description of the different configuration options available."),(0,i.kt)("h3",{id:"oauth2"},"Oauth2"),(0,i.kt)("p",null,"The AuthProvider are using the configuration defined in ",(0,i.kt)("inlineCode",{parentName:"p"},"web/src/auth"),"."),(0,i.kt)(r.Z,{language:"jsx",mdxType:"CodeBlock"},"import type { TAuthConfig } from 'react-oauth2-code-pkce'\n\nexport const authConfig: TAuthConfig = {\n clientId: import.meta.env.VITE_AUTH_CLIENT_ID || '',\n authorizationEndpoint: import.meta.env.VITE_AUTH_ENDPOINT || '',\n tokenEndpoint: import.meta.env.VITE_TOKEN_ENDPOINT || '',\n scope: import.meta.env.VITE_AUTH_SCOPE || '',\n redirectUri: import.meta.env.VITE_AUTH_REDIRECT_URI || '',\n logoutEndpoint: import.meta.env.VITE_LOGOUT_ENDPOINT || '',\n autoLogin: false,\n preLogin: () =>\n localStorage.setItem(\n 'preLoginPath',\n `${window.location.pathname}${window.location.search}${window.location.hash}`\n ),\n postLogin: () =>\n window.location.replace(localStorage.getItem('preLoginPath') ?? (import.meta.env.VITE_AUTH_REDIRECT_URI || '')),\n}\n"),(0,i.kt)("h3",{id:"routes"},"Routes"),(0,i.kt)("p",null,"The RouterProvider are using the router defined in ",(0,i.kt)("inlineCode",{parentName:"p"},"web/src/router"),"."),(0,i.kt)(r.Z,{language:"jsx",mdxType:"CodeBlock"},"import { createBrowserRouter } from 'react-router-dom'\nimport InvalidUrl from './common/components/InvalidUrl'\nimport { TodoListPage } from './pages/TodoListPage'\n\nexport const router = createBrowserRouter([\n {\n path: '/',\n element: <TodoListPage />,\n },\n {\n path: '*',\n element: <InvalidUrl />,\n },\n])\n"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f05b69d1.3b3214c8.js b/assets/js/f05b69d1.3b3214c8.js new file mode 100644 index 00000000..bbf5b7ae --- /dev/null +++ b/assets/js/f05b69d1.3b3214c8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[301],{5490:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>r,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>c,toc:()=>l});var o=a(7462),s=(a(7294),a(3905));a(1839);const n={},i="Task",c={unversionedId:"about/concepts/task",id:"about/concepts/task",title:"Task",description:'This is an example of a "concept" which is domain specific, and not related to your application. It should be replaced by relevant domain specific concepts in your documentation. Note that for some concepts, having an "Examples"-section does not make sense. Feel free to adapt the example\'s structure to best suit your concepts.',source:"@site/docs/about/concepts/01-task.md",sourceDirName:"about/concepts",slug:"/about/concepts/task",permalink:"/template-fastapi-react/docs/about/concepts/task",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/about/concepts/01-task.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"about",previous:{title:"Concepts",permalink:"/template-fastapi-react/docs/category/concepts"},next:{title:"Use case",permalink:"/template-fastapi-react/docs/about/concepts/use-case"}},r={},l=[{value:"Examples",id:"examples",level:2},{value:"Related concepts",id:"related-concepts",level:2}],p={toc:l};function d(e){let{components:t,...a}=e;return(0,s.kt)("wrapper",(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"task"},"Task"),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},'This is an example of a "concept" which is domain specific, and not related to your application. It should be replaced by relevant domain specific concepts in your documentation. Note that for some concepts, having an "Examples"-section does not make sense. Feel free to adapt the example\'s structure to best suit your concepts.')),(0,s.kt)("p",null,"A task is piece of work which is assigned to be done by one or multiple persons. A task usually has defined limits, often referred to as the task description."),(0,s.kt)("p",null,"In order to remember assigned tasks, they are often made note of in lists. Traditionally, these lists have been written on small notes (e.g. post-its), but in recent years there have been a large number of todo-apps developed for phones and computers, replacing its analogue predecessor. See ",(0,s.kt)("a",{parentName:"p",href:"#related-concepts"},"related concepts")," for more on to-do lists."),(0,s.kt)("p",null,"Once a task is assigned to a person, the person is expected to carry out the task until completion. There is often a time-limit associated with a task, and a failure to complete the task within the time-limit might be unacceptable and as unfavorable as not completing the task at all."),(0,s.kt)("h2",{id:"examples"},"Examples"),(0,s.kt)("ol",null,(0,s.kt)("li",{parentName:"ol"},"Many young children are given chores around the house, such as taking out the trash or cleaning their room."),(0,s.kt)("li",{parentName:"ol"},"All employees have a set of tasks to complete, which are often defined in their contract or verbally during their training.")),(0,s.kt)("h2",{id:"related-concepts"},"Related concepts"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"/template-fastapi-react/docs/about/concepts/task"},"To-do list")," "),(0,s.kt)("li",{parentName:"ul"},"xxx")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f271ccf2.1243d9fe.js b/assets/js/f271ccf2.1243d9fe.js new file mode 100644 index 00000000..f082a418 --- /dev/null +++ b/assets/js/f271ccf2.1243d9fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[214],{1270:e=>{e.exports=JSON.parse('{"title":"Coding","description":"This section of the documentation lists instructions and guidelines on how to start coding","slug":"/category/coding","permalink":"/template-fastapi-react/docs/category/coding","navigation":{"previous":{"title":"Setup","permalink":"/template-fastapi-react/docs/contribute/development-guide/setup"},"next":{"title":"Architecture overview","permalink":"/template-fastapi-react/docs/contribute/development-guide/coding/architecture"}}}')}}]); \ No newline at end of file diff --git a/assets/js/faf05ce9.6d36023d.js b/assets/js/faf05ce9.6d36023d.js new file mode 100644 index 00000000..e76f4733 --- /dev/null +++ b/assets/js/faf05ce9.6d36023d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[349],{3603:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>l,frontMatter:()=>d,metadata:()=>s,toc:()=>c});var i=o(7462),n=(o(7294),o(3905)),r=(o(1839),o(814));const d={},a="Repository interfaces",s={unversionedId:"contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces",id:"contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces",title:"Repository interfaces",description:"A repository interface describes the incoming parameters and the type of the object returned by a repository. The",source:"@site/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/02-repository-interfaces.md",sourceDirName:"contribute/development-guide/coding/extending-the-api/adding-data-providers",slug:"/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/02-repository-interfaces.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"contribute",previous:{title:"Clients",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/clients"},next:{title:"Repositories",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories"}},p={},c=[],m={toc:c};function l(e){let{components:t,...o}=e;return(0,n.kt)("wrapper",(0,i.Z)({},m,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"repository-interfaces"},"Repository interfaces"),(0,n.kt)("p",null,"A repository interface describes the incoming parameters and the type of the object returned by a repository. The\npurpose of these interfaces is to allow use-cases to be implementation-agnostic (and thus not depend on an outer layer).\nIt also allows for mocking of repositories for testing purposes."),(0,n.kt)(r.Z,{language:"jsx",mdxType:"CodeBlock"},"from abc import ABCMeta, abstractmethod\n\nfrom features.todo.entities.todo_item import TodoItem\n\n\nclass TodoRepositoryInterface(metaclass=ABCMeta):\n @abstractmethod\n def create(self, todo_item: TodoItem) -> TodoItem | None:\n raise NotImplementedError\n\n @abstractmethod\n def get(self, todo_item_id: str) -> TodoItem:\n raise NotImplementedError\n\n @abstractmethod\n def update(self, todo_item: TodoItem) -> TodoItem:\n raise NotImplementedError\n\n @abstractmethod\n def delete(self, todo_item_id: str) -> None:\n raise NotImplementedError\n\n @abstractmethod\n def get_all(self) -> list[TodoItem]:\n raise NotImplementedError\n"))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fc1348c9.0401af5e.js b/assets/js/fc1348c9.0401af5e.js new file mode 100644 index 00000000..d5535eb8 --- /dev/null +++ b/assets/js/fc1348c9.0401af5e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[302],{6897:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),i=(a(7294),a(3905));a(1839);const r={},s="Architecture overview",l={unversionedId:"contribute/development-guide/coding/architecture",id:"contribute/development-guide/coding/architecture",title:"Architecture overview",description:"Architecture diagrams",source:"@site/docs/contribute/development-guide/coding/01-architecture.md",sourceDirName:"contribute/development-guide/coding",slug:"/contribute/development-guide/coding/architecture",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/architecture",draft:!1,editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/docs/contribute/development-guide/coding/01-architecture.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"contribute",previous:{title:"Coding",permalink:"/template-fastapi-react/docs/category/coding"},next:{title:"Extending the API",permalink:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/"}},o={},c=[{value:"Architecture diagrams",id:"architecture-diagrams",level:2},{value:"Level 1 - System Context diagram",id:"level-1---system-context-diagram",level:3},{value:"Level 2 - Container diagram",id:"level-2---container-diagram",level:3},{value:"Level 3 - Component diagram",id:"level-3---component-diagram",level:3},{value:"Clean architecture",id:"clean-architecture",level:2},{value:"What is Clean Architecture?",id:"what-is-clean-architecture",level:3},{value:"The dependency rule",id:"the-dependency-rule",level:3},{value:"Why Clean Architecture?",id:"why-clean-architecture",level:3},{value:"S.O.L.I.D Principles",id:"solid-principles",level:3},{value:"Components",id:"components",level:3},{value:"Business rules",id:"business-rules",level:3}],u={toc:c};function d(e){let{components:t,...r}=e;return(0,i.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"architecture-overview"},"Architecture overview"),(0,i.kt)("h2",{id:"architecture-diagrams"},"Architecture diagrams"),(0,i.kt)("p",null,"We are using ",(0,i.kt)("a",{parentName:"p",href:"https://c4model.com"},"c4model")," for showing architecture diagrams."),(0,i.kt)("h3",{id:"level-1---system-context-diagram"},"Level 1 - System Context diagram"),(0,i.kt)("p",null,"The Context diagram is a good starting point for diagramming and documenting a software system, allowing you to step back and see the big picture. Here we draw a diagram showing the system as a box in the centre, surrounded by its users and the other systems that it interacts with."),(0,i.kt)("img",{src:"https://www.plantuml.com/plantuml/png/jP11Jy9048Nl_HLZJv2KDZ6SF46Gg0aA4Hh3gLbs1xl9ThUPdKNWrvkrWXZrwFNDUz-ycP5dGHmQaoHNsaeJ54BDtFgReY3nbhzghiCcU2JfBAFbNBgcQ8smCJJmh8pU59FXO16byd5MDC8pKZ4PLfEOs7FUHlo_q8MsI1q_cOtNyt9LlJoixglPz6xwTDlh9ya2oJlR4srhj1IidQtYEfz1ElxIeFH8QTGWJi5jWMi4Tih1HJHF-ydou1cRIs06wIeQBtWHjI2tqmfzHza6A-D46Cs7CwQQxhadZe6m4fBr3Ykb2IKxEcIGpaNW-Xh6WMj7-jWrNIBjkgxd1T66ba-t2AkWFStYELfzQEGCUjWw0Y4bUW_nv-HCsa-UqVpsekz7bXxzJsy6V_R_38pGgj2OTm00",alt:"System context diagram"}),(0,i.kt)("h3",{id:"level-2---container-diagram"},"Level 2 - Container diagram"),(0,i.kt)("p",null,"Once you understand how your system interacts with users and external systems, a useful next step is to zoom-in to the system boundary with a Container diagram. A container is something like a server-side web application, single-page application, desktop application, mobile app, database schema, file system, etc. Essentially, a container is a separately runnable/deployable unit (e.g. a separate process space) that executes code or stores data."),(0,i.kt)("img",{src:"https://www.plantuml.com/plantuml/png/jP51J-D038Nl-HKcfrPgamidJfIsMa0jH4sgrPuY9p7jQ2SpqTWXyE-Hb-uc4bptDhBV-vxjkMN187rhe-ZAkDhs3S5PfEERD0qu92SZvxxgcKBjdP2JfFPjsbbqQbgoDDPKwVfwcMdfkD-bBR9GIDVNvLeTRv9qYlylT3IEmYS_sgr-FH-BykT3SL_kjZ-sJvlPF8eo2kpT3BlEcXh5U5Tg72yWNeqrE3A5M6kWNV0l86S2yOs7YJM9vr7-paBjRA2gd7GM4EV6dImjCpmHJD1ApO9_DGq1MZjoNtfNgm2jaNSG_oUPuTMWQao0WIgeWX-OGW9ZSY2M4ZkpWFYmpGjOPG-J3FuEhao4n_pvARqlYYnNZ-vo8FlTPRxkTcJYY_vBSpBF7dyJAnngj5P7qSd6t7WU_VkrJJLhKB12fWN4cyjJzNllJdvpfyzSVFWyrz_uCMtYFX0sWAw18HYXIsmyZsx9DNrhFm00",alt:"Container diagram"}),(0,i.kt)("p",null,"The use cases and entities are the heart of our application and should have a minimal set of external library dependencies."),(0,i.kt)("h3",{id:"level-3---component-diagram"},"Level 3 - Component diagram"),(0,i.kt)("p",null,"Next you can zoom in and decompose each container further to identify the major structural building blocks and their interactions."),(0,i.kt)("p",null,"The Component diagram shows how a container is made up of a number of components, what each of those components are, their responsibilities and the technology/implementation details."),(0,i.kt)("img",{src:"https://www.plantuml.com/plantuml/png/jLDDZzem4BtdLqnp0ecFovvwMXPe5ubj4H-gUaAJP0Ykd77g6Iz5LVzxvGGjWUsrjx4zyzxpU_QZA7eDbKsI3uPp6mg2esej7yTZZwTHQVGOiY3aSyTAhAFSLUFQ8iUXeMXXJJQUFWnNSMltiXnNA4f-F7tOJrrLEuupTIJu3_YiQ9XyYvyi9z-_xhRxRuljytuv_pp_CklrasH5NXptiAwjoL6Dutsaam6aa-iUx8Hy6lSWde8xW1u9r1KEEgEZj9yacxCeLRqJPGD8DuPBIyCLbWGTl0YrykxL50HexHNi43YF3MYDda5TGoVmQZ3s60ydoY3pxYJaHn3frcJ_fRwbtmd9LTF-oGKkq9zxM9i1fElvPWkJrIBjm-y4u2sGNZJREsjR7wRNLTJzwI8nrbjlof9yL0av2WaW5-19WsV3PNClJnAiHckw545etqoqAc4QwtluHLLRgeYrWINEiPPWKLlJBY5aGGoJ2FXWIUvvFDLEZ3fl6gfrPzami98_O4vnyOnSs2WOYuRmv8qIM5UQ7B14mw8WwdmCiwB2XEeT7R4QRQdciJn7tAb5QTYsHuB2LMWONFQ3Sct20OWPtdZUTMV-Y_AWr135nixPtUKkQRTjjsSTNGiMHLQ33UQVzWKrp-KszZNz32IjnBU_DCjw1IfcA3I0T7OfuzrU79TkzXJBZJhVlkSu_5vC1s5zwxMwj9yy4XUXidy1",alt:"Component diagram"}),(0,i.kt)("h2",{id:"clean-architecture"},"Clean architecture"),(0,i.kt)("p",null,"We follow the ",(0,i.kt)("a",{parentName:"p",href:"https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html"},"Clean Architecture")," style and structure the codebase accordingly for our API."),(0,i.kt)("h3",{id:"what-is-clean-architecture"},"What is Clean Architecture?"),(0,i.kt)("p",null,"It is a layered approach for a ",(0,i.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=wtCQalq7L-E"},"more civilized age"),"."),(0,i.kt)("p",null,"Clean architecture aims to divide a big project into layers and pieces (classes, entities, modules etc.), and to make them independent of each other, so that our big and complex project becomes more maintainable, flexible and easy to work on together."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Clean Architecture",src:a(9743).Z,width:"646",height:"708"})),(0,i.kt)("p",null,'The key idea behind this diagram is that the application should be divided into layers (there can be any amount of layers). The inner layers must not know anything about the outer ones; all dependencies are directed towards the center. The further a layer is from the center, the more it knows about "non-business" details of the application (e.g. which framework is used is part of the outermost layers).'),(0,i.kt)("p",null,"The idea to keep the core business logic (entities) and application logic (use cases) at the center of the solution structure, and independent of frameworks, databases, and external parts (the two outer layers). This allows the core part to be adaptive and flexible enough to deal with changing technology and interfaces, so that frameworks, databases, and external parts can be replaced with minimum efforts."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"The core inner entities and use cases are less likely to change"),(0,i.kt)("li",{parentName:"ul"},"The external layers are most likely to change based on technologies, frameworks and so on"))),(0,i.kt)("h3",{id:"the-dependency-rule"},"The dependency rule"),(0,i.kt)("p",null,"The most important rule is that source code ",(0,i.kt)("strong",{parentName:"p"},"dependencies can only point inwards.")," Nothing in an inner circle can know anything at all about something in an outer circle. In particular, the name of something declared in an outer circle must not be mentioned by the code in an inner circle. That includes functions, classes. variables, or any other named software entity."),(0,i.kt)("p",null,"The dependency rule is the underlying rule that makes Clean Architecture work. It says that nothing in an inner circle should depend on anything in an outer circle. For example, Entities know nothing about all the other circles, while the outer layer, know everything about the inner rings. In particular, application and business rules shouldn\u2019t depend on the UI, database, presenters, and so on. These rules allow us to build systems that are simpler to maintain, as changes in outer circles won\u2019t impact inner ones."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The inner circle is not allowed to know anything about the outer circle."),(0,i.kt)("p",{parentName:"admonition"},"Talk inward with simple structures (dictionaries or classes) and talk outwards through interfaces.")),(0,i.kt)("h3",{id:"why-clean-architecture"},"Why Clean Architecture?"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Loose coupling"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"It becomes easier to modify one small piece of code without it affecting a large part of the app\u2019s code base. This makes it easier to scale the application later on."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Testable"),".",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"It is designed so that every part of the architecture is easy testable. Our tests can be simpler to write, faster and cheaper to maintain."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Separation of concern"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Different modules have specific responsibilities making it easier for modification and maintenance."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Framework independent"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"The architecture is framework independent. This means that it doesn\u2019t matter which database, frameworks, UI or external services you are using - the entities and the business logic of the application will always stay the same. When any of the external parts of the system become obsolete, like the database, or the web framework, you can replace those obsolete elements with a minimum of effort.")))),(0,i.kt)("h3",{id:"solid-principles"},"S.O.L.I.D Principles"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Single Responsibility"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Each software component should have only one reason to change \u2013 one responsibility."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Open-Closed"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"You should be able to extend the behavior of a component, without breaking its usage, or modifying its extensions."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Liskov Substitution"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"If you have a class of one type, and any subclasses of that class, you should be able to represent the base class usage with the subclass, without breaking the app."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Interface Segregation"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"It\u2019s better to have many smaller interfaces than a large one, to prevent a class from implementing methods that it doesn\u2019t need."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Dependency Inversion"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Components should depend on abstractions rather than concrete implementations. Also higher level modules shouldn\u2019t depend on lower level modules.")))),(0,i.kt)("h3",{id:"components"},"Components"),(0,i.kt)("p",null,"Data flow:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Clean Architecture",src:a(5935).Z,width:"2590",height:"934"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Entities"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Entities are the domain model that holds data (state) and logic (business rules)"),(0,i.kt)("li",{parentName:"ul"},"Entities may be reused across applications in the same enterprise."),(0,i.kt)("li",{parentName:"ul"},"Entities must be regular classes, dataclasses, or value objects (meaning if all the properties are the same, the objects are identical)."),(0,i.kt)("li",{parentName:"ul"},"Entities can not depend on anything except other entities."),(0,i.kt)("li",{parentName:"ul"},"Entities should not be affected by any external change, and should be the most stable code within your application."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Use cases"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Use cases are the application features (it\u2019s what you can do with the application)",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Each use case should be limited to one feature according to the Single Responsibility Principle."))),(0,i.kt)("li",{parentName:"ul"},"Use cases interact with entities (thus depend on them) and hold logic of the specific application, and typically execute that logic via various repositories or data access layer(s) gateway(s).",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Use cases may define repository interfaces for the data they require, and one or more repositories will implement the repository interfaces, but the use case doesn\u2019t know where the data is coming from."))),(0,i.kt)("li",{parentName:"ul"},"Use cases throw business specific exceptions."),(0,i.kt)("li",{parentName:"ul"},"Use cases are not affected by changes in database or controllers."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Controllers"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Controllers execute use cases."),(0,i.kt)("li",{parentName:"ul"},"They contain no business logic, only conversion logic.",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Controllers adapt inputs from the outside world into messages the use cases can understand, and in turn adapt responses from the use cases into outputs for the world."))),(0,i.kt)("li",{parentName:"ul"},"You can think of them as entry and exit gates to the use cases. A controller receives a request and returns a response."),(0,i.kt)("li",{parentName:"ul"},"The controller takes the user input (the request), converts it into the request object defined by the use case and passes the request objects to the use case, and at the end return the response objects."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Repositories"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"A repository takes entities and returns entities, hides storage details."),(0,i.kt)("li",{parentName:"ul"},"Repositories implement interfaces defined by use cases.",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Could have multiple implementations, e.g. from db or from file system."))),(0,i.kt)("li",{parentName:"ul"},"Hides all details about where the data is from.",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Can work against local, remote, data services or third party services.")))))),(0,i.kt)("h3",{id:"business-rules"},"Business rules"),(0,i.kt)("p",null,"The business logic is divided into two layers:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The domain layer (aka entities)"),(0,i.kt)("li",{parentName:"ul"},"The application layer (aka use cases)")),(0,i.kt)("p",null,"The domain layer contains the enterprise business logic, and the application layer contains the application business logic. The difference being that enterprise logic could be shared between systems whereas application logic would typically be specific to single system."))}d.isMDXComponent=!0},5935:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/clean-architecture-horizontal2-89d7350d193766d81f16643008c28a16.png"},9743:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/clean-architecture2-e72f296e5bfa4a0d19a261aa8d1eda47.png"}}]); \ No newline at end of file diff --git a/assets/js/main.fe5c8998.js b/assets/js/main.fe5c8998.js new file mode 100644 index 00000000..f8fabb83 --- /dev/null +++ b/assets/js/main.fe5c8998.js @@ -0,0 +1,2 @@ +/*! For license information please see main.fe5c8998.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"05e44ab7":[()=>n.e(833).then(n.t.bind(n,7656,19)),"~docs/default/category-template-fastapi-reactdocs-about-category-running-f8f.json",7656],"06314cb9":[()=>Promise.all([n.e(592),n.e(297)]).then(n.bind(n,8793)),"@site/docs/contribute/development-guide/coding/extending-the-api/adding-features/03-securing-endpoints.md",8793],"14a713f6":[()=>Promise.all([n.e(532),n.e(592),n.e(814),n.e(109)]).then(n.bind(n,3118)),"@site/docs/contribute/development-guide/coding/extending-the-api/adding-features/02-use-cases.md",3118],"14eb3368":[()=>Promise.all([n.e(532),n.e(817)]).then(n.bind(n,4228)),"@theme/DocCategoryGeneratedIndexPage",4228],17896441:[()=>Promise.all([n.e(532),n.e(592),n.e(814),n.e(327),n.e(918)]).then(n.bind(n,230)),"@theme/DocItem",230],"1b4cc8e2":[()=>Promise.all([n.e(592),n.e(511)]).then(n.bind(n,8905)),"@site/docs/contribute/development-guide/04-upgrading.md",8905],"1be78505":[()=>Promise.all([n.e(532),n.e(514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1df93b7f":[()=>Promise.all([n.e(532),n.e(237)]).then(n.bind(n,3808)),"@site/src/pages/index.tsx",3808],"1f391b9e":[()=>Promise.all([n.e(532),n.e(592),n.e(814),n.e(327),n.e(85)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],"20f005c0":[()=>Promise.all([n.e(532),n.e(592),n.e(814),n.e(141)]).then(n.bind(n,2359)),"@site/docs/contribute/development-guide/coding/extending-the-api/adding-features/01-controllers.md",2359],"2424d345":[()=>Promise.all([n.e(592),n.e(89)]).then(n.bind(n,5449)),"@site/docs/about/how-to/01-how-to-do-something.md",5449],"2e61c9f2":[()=>Promise.all([n.e(592),n.e(413)]).then(n.bind(n,9811)),"@site/docs/contribute/03-documentation.md",9811],"3cb05d6d":[()=>Promise.all([n.e(532),n.e(592),n.e(814),n.e(176)]).then(n.bind(n,516)),"@site/docs/contribute/development-guide/coding/extending-the-api/index.md",516],"415192e1":[()=>Promise.all([n.e(532),n.e(592),n.e(814),n.e(295)]).then(n.bind(n,3380)),"@site/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/01-clients.md",3380],"41b8e814":[()=>Promise.all([n.e(532),n.e(592),n.e(3)]).then(n.bind(n,8979)),"@site/docs/contribute/development-guide/03-testing.md",8979],"428320b6":[()=>Promise.all([n.e(592),n.e(193)]).then(n.bind(n,1425)),"@site/docs/changelog/changelog.md",1425],"492dc3f9":[()=>Promise.all([n.e(592),n.e(396)]).then(n.bind(n,2489)),"@site/docs/about/running/02-configure.md",2489],"4b94b993":[()=>Promise.all([n.e(592),n.e(859)]).then(n.bind(n,4657)),"@site/docs/about/concepts/02-use-case.md",4657],"57dd7c71":[()=>Promise.all([n.e(532),n.e(592),n.e(508)]).then(n.bind(n,9535)),"@site/docs/contribute/development-guide/01-setup.md",9535],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"5fef8d46":[()=>Promise.all([n.e(532),n.e(592),n.e(814),n.e(219)]).then(n.bind(n,5714)),"@site/docs/contribute/development-guide/coding/extending-the-api/adding-features/index.md",5714],"61b19cc7":[()=>Promise.all([n.e(592),n.e(118)]).then(n.bind(n,3214)),"@site/docs/contribute/02-ground-rules.md",3214],"6d61db34":[()=>n.e(260).then(n.t.bind(n,4564,19)),"~docs/default/category-template-fastapi-reactdocs-about-category-concepts-570.json",4564],73611911:[()=>Promise.all([n.e(532),n.e(592),n.e(814),n.e(250)]).then(n.bind(n,4678)),"@site/docs/contribute/development-guide/coding/extending-the-api/02-adding-entities.md",4678],"75878fc8":[()=>Promise.all([n.e(592),n.e(990)]).then(n.bind(n,9095)),"@site/src/pages/changelog.md",9095],"792d5b58":[()=>n.e(910).then(n.t.bind(n,2719,19)),"~docs/default/category-template-fastapi-reactdocs-contribute-category-development-guide-008.json",2719],"8140cfa8":[()=>Promise.all([n.e(592),n.e(256)]).then(n.bind(n,770)),"@site/docs/contribute/development-guide/05-publishing.md",770],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"95fd3ae2":[()=>Promise.all([n.e(592),n.e(898)]).then(n.bind(n,9482)),"@site/docs/contribute/development-guide/coding/03-generate-api-clients.md",9482],"9b8d192f":[()=>Promise.all([n.e(592),n.e(172)]).then(n.bind(n,3894)),"@site/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/index.md",3894],b5acc4c4:[()=>Promise.all([n.e(592),n.e(106)]).then(n.bind(n,8742)),"@site/docs/about/02-overview.md",8742],b893987e:[()=>Promise.all([n.e(532),n.e(592),n.e(814),n.e(499)]).then(n.bind(n,5545)),"@site/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/03-repositories.md",5545],be239b1c:[()=>Promise.all([n.e(592),n.e(19)]).then(n.bind(n,3477)),"@site/docs/contribute/01-how-to-start-contributing.md",3477],c66b78d2:[()=>Promise.all([n.e(592),n.e(6)]).then(n.bind(n,2369)),"@site/docs/about/running/03-starting-services.md",2369],d38eaa6e:[()=>Promise.all([n.e(592),n.e(389)]).then(n.bind(n,543)),"@site/docs/about/01-introduction.md",543],d3ec9a0d:[()=>Promise.all([n.e(592),n.e(95)]).then(n.bind(n,3883)),"@site/docs/about/running/01-prerequisites.md",3883],d5120d00:[()=>n.e(410).then(n.t.bind(n,5745,19)),"/home/runner/work/template-fastapi-react/template-fastapi-react/documentation/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],ddc469d8:[()=>n.e(770).then(n.t.bind(n,6249,19)),"~docs/default/category-template-fastapi-reactdocs-about-category-how-to-203.json",6249],eb414d18:[()=>n.e(529).then(n.t.bind(n,3769,19)),"/home/runner/work/template-fastapi-react/template-fastapi-react/documentation/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],eccd96cf:[()=>Promise.all([n.e(532),n.e(592),n.e(814),n.e(283)]).then(n.bind(n,2565)),"@site/docs/contribute/development-guide/coding/extending-the-web/index.md",2565],f05b69d1:[()=>Promise.all([n.e(592),n.e(301)]).then(n.bind(n,5490)),"@site/docs/about/concepts/01-task.md",5490],f271ccf2:[()=>n.e(214).then(n.t.bind(n,1270,19)),"~docs/default/category-template-fastapi-reactdocs-contribute-category-coding-88c.json",1270],faf05ce9:[()=>Promise.all([n.e(532),n.e(592),n.e(814),n.e(349)]).then(n.bind(n,3603)),"@site/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/02-repository-interfaces.md",3603],fc1348c9:[()=>Promise.all([n.e(592),n.e(302)]).then(n.bind(n,6897)),"@site/docs/contribute/development-guide/coding/01-architecture.md",6897]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(9670),d=n(226);function p(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],p={},f=[],m=[],g=(0,c.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const f=[{path:"/template-fastapi-react/changelog",component:p("/template-fastapi-react/changelog","58e"),exact:!0},{path:"/template-fastapi-react/docs",component:p("/template-fastapi-react/docs","ee5"),routes:[{path:"/template-fastapi-react/docs/about/concepts/task",component:p("/template-fastapi-react/docs/about/concepts/task","786"),exact:!0,sidebar:"about"},{path:"/template-fastapi-react/docs/about/concepts/use-case",component:p("/template-fastapi-react/docs/about/concepts/use-case","2d3"),exact:!0,sidebar:"about"},{path:"/template-fastapi-react/docs/about/how-to/how-to-do-something",component:p("/template-fastapi-react/docs/about/how-to/how-to-do-something","eda"),exact:!0,sidebar:"about"},{path:"/template-fastapi-react/docs/about/introduction",component:p("/template-fastapi-react/docs/about/introduction","511"),exact:!0,sidebar:"about"},{path:"/template-fastapi-react/docs/about/overview",component:p("/template-fastapi-react/docs/about/overview","0ac"),exact:!0,sidebar:"about"},{path:"/template-fastapi-react/docs/about/running/configure",component:p("/template-fastapi-react/docs/about/running/configure","9bd"),exact:!0,sidebar:"about"},{path:"/template-fastapi-react/docs/about/running/prerequisites",component:p("/template-fastapi-react/docs/about/running/prerequisites","d7d"),exact:!0,sidebar:"about"},{path:"/template-fastapi-react/docs/about/running/starting-services",component:p("/template-fastapi-react/docs/about/running/starting-services","0ec"),exact:!0,sidebar:"about"},{path:"/template-fastapi-react/docs/category/coding",component:p("/template-fastapi-react/docs/category/coding","179"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/category/concepts",component:p("/template-fastapi-react/docs/category/concepts","080"),exact:!0,sidebar:"about"},{path:"/template-fastapi-react/docs/category/development-guide",component:p("/template-fastapi-react/docs/category/development-guide","cdf"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/category/how-to",component:p("/template-fastapi-react/docs/category/how-to","560"),exact:!0,sidebar:"about"},{path:"/template-fastapi-react/docs/category/running",component:p("/template-fastapi-react/docs/category/running","9ea"),exact:!0,sidebar:"about"},{path:"/template-fastapi-react/docs/changelog/",component:p("/template-fastapi-react/docs/changelog/","c7e"),exact:!0},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/architecture",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/architecture","cae"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/","cdf"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/","4e7"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/clients",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/clients","032"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories","a61"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces","2b2"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-entities",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-entities","f75"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/","173"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllers",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllers","c4d"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints","390"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-cases",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-cases","d63"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-web/",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-web/","731"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/coding/generate-api-clients",component:p("/template-fastapi-react/docs/contribute/development-guide/coding/generate-api-clients","362"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/publishing",component:p("/template-fastapi-react/docs/contribute/development-guide/publishing","7f3"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/setup",component:p("/template-fastapi-react/docs/contribute/development-guide/setup","e9b"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/testing",component:p("/template-fastapi-react/docs/contribute/development-guide/testing","8f0"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/development-guide/upgrading",component:p("/template-fastapi-react/docs/contribute/development-guide/upgrading","710"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/documentation",component:p("/template-fastapi-react/docs/contribute/documentation","a74"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/ground-rules",component:p("/template-fastapi-react/docs/contribute/ground-rules","0ff"),exact:!0,sidebar:"contribute"},{path:"/template-fastapi-react/docs/contribute/how-to-start-contributing",component:p("/template-fastapi-react/docs/contribute/how-to-start-contributing","a96"),exact:!0,sidebar:"contribute"}]},{path:"/template-fastapi-react/",component:p("/template-fastapi-react/","061"),exact:!0},{path:"*",component:p("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6775),d=n(8790);function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var f=n(7462),m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),k=n(3320),E=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e}}=(0,g.Z)(),{pathname:t}=(0,c.TH)();return e+(0,h.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function C(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(S,null),r.createElement(E.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,f.Z)({key:t},e))))))}const _=new Map;function T(e){if(_.has(e.pathname))return{...e,pathname:_.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return _.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return _.set(e.pathname,t),{...e,pathname:t}}var A=n(8934),L=n(8940);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const a=s.map((t=>{var r;const a=(null==(r=t.default)?void 0:r[e])??t[e];return null==a?void 0:a(...n)}));return()=>a.forEach((e=>null==e?void 0:e()))}const R=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(a&&function(e){const{hash:t}=e;if(t){const e=decodeURIComponent(t.substring(1)),n=document.getElementById(e);null==n||n.scrollIntoView()}else window.scrollTo(0,0)}(n),P("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>null==e.route.component.preload?void 0:e.route.component.preload())))}class O extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(R,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const I=O,D="docusaurus-base-url-issue-banner-container",M="docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function B(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseurl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${M}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${M}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function j(){const{siteConfig:{baseUrl:e}}=(0,g.Z)();return(0,r.useLayoutEffect)((()=>{window[F]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,B(e))),r.createElement("div",{id:D}))}function z(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(j,null):null}function U(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var $=n(4763);function q(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement($.Z,null,r.createElement(L.M,null,r.createElement(A.t,null,r.createElement(p,null,r.createElement(U,null),r.createElement(C,null),r.createElement(z,null),r.createElement(I,{location:T(t)},e)))))}var G=n(6887);const H=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{var r;if("undefined"==typeof document)return void n();const a=document.createElement("link");a.setAttribute("rel","prefetch"),a.setAttribute("href",e),a.onload=()=>t(),a.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??(null==(r=document.getElementsByName("script")[0])?void 0:r.parentNode);null==o||o.appendChild(a)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Z=n(9670);const V=new Set,W=new Set,Y=()=>{var e,t;return(null==(e=navigator.connection)?void 0:e.effectiveType.includes("2g"))||(null==(t=navigator.connection)?void 0:t.saveData)},K={prefetch(e){if(!(e=>!Y()&&!W.has(e)&&!V.has(e))(e))return!1;V.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Z.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?H(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!Y()&&!W.has(e))(e)&&(W.add(e),N(e))},Q=Object.freeze(K);if(l.Z.canUseDOM){window.docusaurus=Q;const e=a.hydrate;N(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(q,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/template-fastapi-react/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/template-fastapi-react/docs","mainDocId":"about/introduction","docs":[{"id":"about/concepts/task","path":"/template-fastapi-react/docs/about/concepts/task","sidebar":"about"},{"id":"about/concepts/use-case","path":"/template-fastapi-react/docs/about/concepts/use-case","sidebar":"about"},{"id":"about/how-to/how-to-do-something","path":"/template-fastapi-react/docs/about/how-to/how-to-do-something","sidebar":"about"},{"id":"about/introduction","path":"/template-fastapi-react/docs/about/introduction","sidebar":"about"},{"id":"about/overview","path":"/template-fastapi-react/docs/about/overview","sidebar":"about"},{"id":"about/running/configure","path":"/template-fastapi-react/docs/about/running/configure","sidebar":"about"},{"id":"about/running/prerequisites","path":"/template-fastapi-react/docs/about/running/prerequisites","sidebar":"about"},{"id":"about/running/starting-services","path":"/template-fastapi-react/docs/about/running/starting-services","sidebar":"about"},{"id":"changelog/changelog","path":"/template-fastapi-react/docs/changelog/"},{"id":"contribute/development-guide/coding/architecture","path":"/template-fastapi-react/docs/contribute/development-guide/coding/architecture","sidebar":"contribute"},{"id":"contribute/development-guide/coding/extending-the-api/adding-data-providers/clients","path":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/clients","sidebar":"contribute"},{"id":"contribute/development-guide/coding/extending-the-api/adding-data-providers/index","path":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/","sidebar":"contribute"},{"id":"contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories","path":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories","sidebar":"contribute"},{"id":"contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces","path":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces","sidebar":"contribute"},{"id":"contribute/development-guide/coding/extending-the-api/adding-entities","path":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-entities","sidebar":"contribute"},{"id":"contribute/development-guide/coding/extending-the-api/adding-features/controllers","path":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllers","sidebar":"contribute"},{"id":"contribute/development-guide/coding/extending-the-api/adding-features/index","path":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/","sidebar":"contribute"},{"id":"contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints","path":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints","sidebar":"contribute"},{"id":"contribute/development-guide/coding/extending-the-api/adding-features/use-cases","path":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-cases","sidebar":"contribute"},{"id":"contribute/development-guide/coding/extending-the-api/index","path":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/","sidebar":"contribute"},{"id":"contribute/development-guide/coding/extending-the-web/index","path":"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-web/","sidebar":"contribute"},{"id":"contribute/development-guide/coding/generate-api-clients","path":"/template-fastapi-react/docs/contribute/development-guide/coding/generate-api-clients","sidebar":"contribute"},{"id":"contribute/development-guide/publishing","path":"/template-fastapi-react/docs/contribute/development-guide/publishing","sidebar":"contribute"},{"id":"contribute/development-guide/setup","path":"/template-fastapi-react/docs/contribute/development-guide/setup","sidebar":"contribute"},{"id":"contribute/development-guide/testing","path":"/template-fastapi-react/docs/contribute/development-guide/testing","sidebar":"contribute"},{"id":"contribute/development-guide/upgrading","path":"/template-fastapi-react/docs/contribute/development-guide/upgrading","sidebar":"contribute"},{"id":"contribute/documentation","path":"/template-fastapi-react/docs/contribute/documentation","sidebar":"contribute"},{"id":"contribute/ground-rules","path":"/template-fastapi-react/docs/contribute/ground-rules","sidebar":"contribute"},{"id":"contribute/how-to-start-contributing","path":"/template-fastapi-react/docs/contribute/how-to-start-contributing","sidebar":"contribute"},{"id":"/category/concepts","path":"/template-fastapi-react/docs/category/concepts","sidebar":"about"},{"id":"/category/how-to","path":"/template-fastapi-react/docs/category/how-to","sidebar":"about"},{"id":"/category/running","path":"/template-fastapi-react/docs/category/running","sidebar":"about"},{"id":"/category/development-guide","path":"/template-fastapi-react/docs/category/development-guide","sidebar":"contribute"},{"id":"/category/coding","path":"/template-fastapi-react/docs/category/coding","sidebar":"contribute"}],"draftIds":[],"sidebars":{"about":{"link":{"path":"/template-fastapi-react/docs/about/introduction","label":"about/introduction"}},"contribute":{"link":{"path":"/template-fastapi-react/docs/contribute/how-to-start-contributing","label":"contribute/how-to-start-contributing"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.1.0","siteVersion":"0.1.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.1.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.1.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.1.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.1.0"}}}'),u={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7294),a=n(412),o=n(5742),i=n(4704);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"50vh",width:"100%",fontSize:"20px"}},r.createElement("h1",null,"This page crashed."),r.createElement("p",null,t.message),r.createElement("button",{type:"button",onClick:n},"Try again"))}function s(e){let{error:t,tryAgain:n}=e;return r.createElement(c,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(i.Z,null,r.createElement(l,{error:t,tryAgain:n})))}const u=e=>r.createElement(s,e);class c extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??u)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),u=n(412);const c=a.createContext({collectLink:()=>{}});var d=n(4996);function p(e,t){var n;let{isNavLink:p,to:f,href:m,activeClassName:g,isActive:h,"data-noBrokenLinkCheck":b,autoAddBaseUrl:v=!0,...y}=e;const{siteConfig:{trailingSlash:w,baseUrl:k}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),S=(0,a.useContext)(c),x=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>x.current));const C=f||m;const _=(0,s.Z)(C),T=null==C?void 0:C.replace("pathname://","");let A=void 0!==T?(L=T,v&&(e=>e.startsWith("/"))(L)?E(L):L):void 0;var L;A&&_&&(A=(0,i.applyTrailingSlash)(A,{trailingSlash:w,baseUrl:k}));const P=(0,a.useRef)(!1),R=p?o.OL:o.rU,N=u.Z.canUseIntersectionObserver,O=(0,a.useRef)();(0,a.useEffect)((()=>(!N&&_&&null!=A&&window.docusaurus.prefetch(A),()=>{N&&O.current&&O.current.disconnect()})),[O,A,N,_]);const I=(null==(n=A)?void 0:n.startsWith("#"))??!1,D=!A||!_||I;return D||b||S.collectLink(A),D?a.createElement("a",(0,r.Z)({ref:x,href:A},C&&!_&&{target:"_blank",rel:"noopener noreferrer"},y)):a.createElement(R,(0,r.Z)({},y,{onMouseEnter:()=>{P.current||null==A||(window.docusaurus.preload(A),P.current=!0)},innerRef:e=>{x.current=e,N&&e&&_&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=A&&window.docusaurus.prefetch(A))}))})),O.current.observe(e))},to:A},p&&{isActive:h,activeClassName:g}))}const f=a.forwardRef(p)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=null==t?void 0:t[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>o,Z:()=>i});var r=n(2263),a=n(3919);function o(){const{siteConfig:{baseUrl:e,url:t}}=(0,r.Z)();return{withBaseUrl:(n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)}}function i(e,t){void 0===t&&(t={});const{withBaseUrl:n}=o();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});function r(e){const t={};return function e(n,r){Object.entries(n).forEach((n=>{let[a,o]=n;const i=r?`${r}.${a}`:a;var l;"object"==typeof(l=o)&&l&&Object.keys(l).length>0?e(o,i):t[i]=o}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...null==n?void 0:n.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>p,_r:()=>c,Jo:()=>h,zh:()=>d,yW:()=>m,gB:()=>f});var r=n(6775),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=null==n?void 0:n.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=null==r?void 0:r[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a="iconExternalLink_nPIU";function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},4704:(e,t,n)=>{"use strict";n.d(t,{Z:()=>ot});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),l=n(5281),s=n(9727),u=n(5999),c=n(6775),d=n(5936);function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}const f="skipToContent_fXgn";function m(){const{containerRef:e,handleSkip:t}=function(){const e=(0,r.useRef)(null),{action:t}=(0,c.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.querySelector(`.${l.k.wrapper.main}`);t&&p(t)}),[]);return(0,d.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,handleSkip:n}}();return r.createElement("div",{ref:e,role:"region","aria-label":(0,u.I)({id:"theme.common.skipToMainContent"})},r.createElement("a",{href:"#",className:f,onClick:t},r.createElement(u.Z,{id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"},"Skip to main content")))}var g=n(6668),h=n(9689),b=n(7462);function v(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...l}=e;return r.createElement("svg",(0,b.Z)({viewBox:"0 0 15 15",width:t,height:n},l),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const y="closeButton_CVFx";function w(e){return r.createElement("button",(0,b.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",y,e.className)}),r.createElement(v,{width:14,height:14,strokeWidth:3.1}))}const k="content_knG7";function E(e){const{announcementBar:t}=(0,g.L)(),{content:n}=t;return r.createElement("div",(0,b.Z)({},e,{className:(0,a.Z)(k,e.className),dangerouslySetInnerHTML:{__html:n}}))}const S="announcementBar_mb4j",x="announcementBarPlaceholder_vyr4",C="announcementBarClose_gvF7",_="announcementBarContent_xLdY";function T(){const{announcementBar:e}=(0,g.L)(),{isActive:t,close:n}=(0,h.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:S,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:x}),r.createElement(E,{className:_}),i&&r.createElement(w,{onClick:n,className:C}))}var A=n(2961),L=n(2466);var P=n(902),R=n(3102);const N=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,A.e)(),t=(0,R.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,P.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(N.Provider,{value:n},t)}function I(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(N);if(!e)throw new P.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,R.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:I(o)})),[a,o,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var F=n(2949),B=n(2389);function j(e){return r.createElement("svg",(0,b.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function z(e){return r.createElement("svg",(0,b.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function $(e){let{className:t,value:n,onChange:o}=e;const i=(0,B.Z)(),l=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(U.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled),type:"button",onClick:()=>o("dark"===n?"light":"dark"),disabled:!i,title:l,"aria-label":l},r.createElement(j,{className:(0,a.Z)(U.toggleIcon,U.lightToggleIcon)}),r.createElement(z,{className:(0,a.Z)(U.toggleIcon,U.darkToggleIcon)})))}const q=r.memo($);function G(e){let{className:t}=e;const n=(0,g.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,F.I)();return n?null:r.createElement(q,{className:t,value:a,onChange:o})}var H=n(1327);function Z(){return r.createElement(H.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function V(){const e=(0,A.e)();return r.createElement("button",{type:"button",className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(v,{color:"var(--ifm-color-emphasis-600)"}))}function W(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(Z,null),r.createElement(G,{className:"margin-right--md"}),r.createElement(V,null))}var Y=n(9960),K=n(4996),Q=n(3919);function X(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var J=n(9471);function ee(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:l,isDropdownLink:s,prependBaseUrlToHref:u,...c}=e;const d=(0,K.Z)(a),p=(0,K.Z)(t),f=(0,K.Z)(o,{forcePrependBaseUrl:!0}),m=i&&o&&!(0,Q.Z)(o),g=l?{dangerouslySetInnerHTML:{__html:l}}:{children:r.createElement(r.Fragment,null,i,m&&r.createElement(J.Z,s&&{width:12,height:12}))};return o?r.createElement(Y.Z,(0,b.Z)({href:u?f:o},c,g)):r.createElement(Y.Z,(0,b.Z)({to:d,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?X(n,t.pathname):t.pathname.startsWith(p)},c,g))}function te(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ee,(0,b.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ne(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ee,(0,b.Z)({className:(0,a.Z)("menu__link",t)},o)))}function re(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ne:te;return r.createElement(o,(0,b.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ae=n(6043),oe=n(8596),ie=n(2263);function le(e,t){return e.some((e=>function(e,t){return!!(0,oe.Mg)(e.to,t)||!!X(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function se(e){let{items:t,position:n,className:o,onClick:i,...l}=e;const s=(0,r.useRef)(null),[u,c]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&c(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[s]),r.createElement("div",{ref:s,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(ee,(0,b.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},l,{onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),c(!u))}}),l.children??l.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,n)=>r.createElement(Ee,(0,b.Z)({isDropdownItem:!0,onKeyDown:e=>{if(n===t.length-1&&"Tab"===e.key){e.preventDefault(),c(!1);const t=s.current.nextElementSibling;if(t){(t instanceof HTMLAnchorElement?t:t.querySelector("a")).focus()}}},activeClassName:"dropdown__link--active"},e,{key:n}))))))}function ue(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const s=function(){const{siteConfig:{baseUrl:e}}=(0,ie.Z)(),{pathname:t}=(0,c.TH)();return t.replace(e,"/")}(),u=le(t,s),{collapsed:d,toggleCollapsed:p,setCollapsed:f}=(0,ae.u)({initialState:()=>!u});return(0,r.useEffect)((()=>{u&&f(!u)}),[s,u,f]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":d})},r.createElement(ee,(0,b.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},l,{onClick:e=>{e.preventDefault(),p()}}),l.children??l.label),r.createElement(ae.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:d},t.map(((e,t)=>r.createElement(Ee,(0,b.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function ce(e){let{mobile:t=!1,...n}=e;const a=t?ue:se;return r.createElement(a,n)}var de=n(4711);function pe(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,b.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const fe="iconLanguage_nlXk";const me=()=>null,ge="searchBox_ZlJk";function he(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,ge)},t)}var be=n(143),ve=n(3438);var ye=n(373);const we=e=>e.docs.find((t=>t.id===e.mainDocId));const ke={default:re,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:l,localeConfigs:s}}=(0,ie.Z)(),c=(0,de.l)(),d=[...n,...l.map((e=>{const n=`pathname://${c.createUrl({locale:e,fullyQualified:!1})}`;return{label:s[e].label,lang:s[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],p=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):s[i].label;return r.createElement(ce,(0,b.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(pe,{className:fe}),p),items:d}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(he,{className:n},r.createElement(me,null))},dropdown:ce,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,be.Iw)(a),l=(0,ve.vY)(t,a);return null===l?null:r.createElement(re,(0,b.Z)({exact:!0},o,{isActive:()=>(null==i?void 0:i.path)===l.path||!(null==i||!i.sidebar)&&i.sidebar===l.sidebar,label:n??l.id,to:l.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,be.Iw)(a),l=(0,ve.oz)(t,a).link;if(!l)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(re,(0,b.Z)({exact:!0},o,{isActive:()=>(null==i?void 0:i.sidebar)===t,label:n??l.label,to:l.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,ve.lO)(a)[0],l=t??i.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(re,(0,b.Z)({},o,{label:l,to:s}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...l}=e;const s=(0,be.Iw)(n),c=(0,be.gB)(n),{savePreferredVersionName:d}=(0,ye.J)(n),p=[...o,...c.map((e=>{const t=s.alternateDocVersions[e.name]??we(e);return{label:e.label,to:t.path,isActive:()=>e===s.activeVersion,onClick:()=>d(e.name)}})),...i],f=(0,ve.lO)(n)[0],m=t&&p.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):f.label,g=t&&p.length>1?void 0:we(f).path;return p.length<=1?r.createElement(re,(0,b.Z)({},l,{mobile:t,label:m,to:g,isActive:a?()=>!1:void 0})):r.createElement(ce,(0,b.Z)({},l,{mobile:t,label:m,to:g,items:p,isActive:a?()=>!1:void 0}))}};function Ee(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=ke[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function Se(){const e=(0,A.e)(),t=(0,g.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Ee,(0,b.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function xe(e){return r.createElement("button",(0,b.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Ce(){const e=0===(0,g.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(xe,{onClick:()=>t.hide()}),t.content)}function _e(){const e=(0,A.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(W,null),primaryMenu:r.createElement(Se,null),secondaryMenu:r.createElement(Ce,null)}):null}const Te="navbarHideable_m1mJ",Ae="navbarHidden_jGov";function Le(e){return r.createElement("div",(0,b.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Pe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,g.L)(),i=(0,A.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,L.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<o.current)return void n(!0);if(a.current)return void(a.current=!1);const l=null==r?void 0:r.scrollY,s=document.documentElement.scrollHeight-o.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,d.S)((t=>{if(e)return t.location.hash?(a.current=!0,void n(!1)):void n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Te,!s&&Ae],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Le,{onClick:i.toggle}),r.createElement(_e,null))}function Re(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,b.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Ne(){const e=(0,A.e)();return r.createElement("button",{onClick:e.toggle,onKeyDown:e.toggle,"aria-label":"Navigation bar toggle",className:"navbar__toggle clean-btn",type:"button",tabIndex:0},r.createElement(Re,null))}const Oe="colorModeToggle_DEke";function Ie(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ee,(0,b.Z)({},e,{key:t})))))}function De(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Me(){const e=(0,A.e)(),t=(0,g.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??"right")}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(De,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Ne,null),r.createElement(Z,null),r.createElement(Ie,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ie,{items:a}),r.createElement(G,{className:Oe}),!o&&r.createElement(he,null,r.createElement(me,null)))})}function Fe(){return r.createElement(Pe,null,r.createElement(Me,null))}function Be(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...l}=t,s=(0,K.Z)(n),u=(0,K.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(Y.Z,(0,b.Z)({className:"footer__link-item"},a?{href:i?u:a}:{to:s},l),o,a&&!(0,Q.Z)(a)&&r.createElement(J.Z,null))}function je(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Be,{item:t}))}function ze(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(je,{key:t,item:e})))))}function Ue(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(ze,{key:t,column:e}))))}function $e(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function qe(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Be,{item:t})}function Ge(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(qe,{item:e}),t.length!==n+1&&r.createElement($e,null))))))}function He(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Ue,{columns:t}):r.createElement(Ge,{links:t})}var Ze=n(941);const Ve="footerLogoLink_BH7S";function We(e){let{logo:t}=e;const{withBaseUrl:n}=(0,K.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Ze.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function Ye(e){let{logo:t}=e;return t.href?r.createElement(Y.Z,{href:t.href,className:Ve,target:t.target},r.createElement(We,{logo:t})):r.createElement(We,{logo:t})}function Ke(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Qe(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function Xe(){const{footer:e}=(0,g.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(Qe,{style:o,links:n&&n.length>0&&r.createElement(He,{links:n}),logo:a&&r.createElement(Ye,{logo:a}),copyright:t&&r.createElement(Ke,{copyright:t})})}const Je=r.memo(Xe);var et=n(7094);const tt=(0,P.Qc)([F.S,h.pl,et.z,L.OC,ye.L5,i.VC,function(e){let{children:t}=e;return r.createElement(R.n2,null,r.createElement(A.M,null,r.createElement(O,null,t)))}]);function nt(e){let{children:t}=e;return r.createElement(tt,null,t)}function rt(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("p",null,t.message),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again when the page crashed"},"Try again"))))))}const at="mainWrapper_z2l0";function ot(e){const{children:t,noFooter:n,wrapperClassName:u,title:c,description:d}=e;return(0,s.t)(),r.createElement(nt,null,r.createElement(i.d,{title:c,description:d}),r.createElement(m,null),r.createElement(T,null),r.createElement(Fe,null),r.createElement("div",{className:(0,a.Z)(l.k.wrapper.main,at,u)},r.createElement(o.Z,{fallback:e=>r.createElement(rt,e)},t)),!n&&r.createElement(Je,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),l=n(2263),s=n(6668),u=n(941);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(u.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,i.Z)((null==u?void 0:u.href)||"/"),g=n?"":t,h=(null==u?void 0:u.alt)??g;return a.createElement(o.Z,(0,r.Z)({to:m},f,(null==u?void 0:u.target)&&{target:u.target}),u&&a.createElement(c,{logo:u,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:p},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,f.map((e=>a.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],c)},p)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>i,z:()=>m});var r=n(7462),a=n(7294),o=n(412);function i(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const l={display:"none",overflow:"hidden",height:"0px"},s={display:"block",overflow:"visible",height:"auto"};function u(e,t){const n=t?l:s;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function c(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=(null==r?void 0:r.duration)??function(e){const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${(null==r?void 0:r.easing)??"ease-in-out"}`,height:`${t}px`}}function i(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return u(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(i(),requestAnimationFrame((()=>{e.style.height=l.height,e.style.overflow=l.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{i()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function d(e){if(!o.Z.canUseDOM)return e?l:s}function p(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const p=(0,a.useRef)(null);return c({collapsibleRef:p,collapsed:n,animation:o}),a.createElement(t,{ref:p,style:s?void 0:d(n),onTransitionEnd:e=>{"height"===e.propertyName&&(u(p.current,n),null==i||i(n))},className:l},r)}function f(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(p,(0,r.Z)({},n,{collapsed:l})):null}function m(e){let{lazy:t,...n}=e;const r=t?f:p;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668);const s=(0,o.W)("docusaurus.announcement.dismiss"),u=(0,o.W)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{o(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(p.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),u="theme",c=(0,i.W)(u),d="light",p="dark",f=e=>e===p?p:d;function m(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,i]=(0,r.useState)((e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e))(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const s=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(i(t),a&&(e=>{c.set(f(e))})(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p:d:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&s(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,s]);const m=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||m.current?m.current=window.matchMedia("print").matches:s(null)};return e.addListener(r),()=>e.removeListener(r)}),[s,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:s,get isDarkTheme(){return o===p},setLightTheme(){s(d)},setDarkTheme(){s(p)}})),[o,s])}function g(e){let{children:t}=e;const n=m();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>b});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(3438),s=n(902),u=n(12);const c=e=>`docs-preferred-version-${e}`,d=(e,t,n)=>{(0,u.W)(c(e),{persistence:t}).set(n)},p=(e,t)=>(0,u.W)(c(e),{persistence:t}).get(),f=(e,t)=>{(0,u.W)(c(e),{persistence:t}).del()};const m=r.createContext(null);function g(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>(e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}]))))(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=p(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=g();return r.createElement(m.Provider,{value:n},t)}function b(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function v(){const e=(0,r.useContext)(m);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=v(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(null===e)throw new a.i6("DocsVersionProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(7294),a=n(3102),o=n(7524),i=n(6775),l=n(902);function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6668);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function p(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function f(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},7094:(e,t,n)=>{"use strict";n.d(t,{U:()=>u,z:()=>s});var r=n(7294),a=n(12),o=n(902);const i="docusaurus.tab.",l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const[e,t]=(0,r.useState)({}),n=(0,r.useCallback)(((e,t)=>{(0,a.W)(`docusaurus.tab.${e}`).set(t)}),[]);(0,r.useEffect)((()=>{try{const e={};(0,a._)().forEach((t=>{if(t.startsWith(i)){const n=t.substring(i.length);e[n]=(0,a.W)(t).get()}})),t(e)}catch(e){console.error(e)}}),[]);const o=(0,r.useCallback)(((e,r)=>{t((t=>({...t,[e]:r}))),n(e,r)}),[n]);return(0,r.useMemo)((()=>({tabGroupChoices:e,setTabGroupChoices:o})),[e,o])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new o.i6("TabGroupChoiceProvider");return e}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),a=n(412);const o="desktop",i="mobile",l="ssr";function s(){return a.Z.canUseDOM?window.innerWidth>996?o:i:l}function u(){const[e,t]=(0,r.useState)((()=>s()));return(0,r.useEffect)((()=>{function e(){t(s())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},3438:(e,t,n)=>{"use strict";n.d(t,{MN:()=>x,Wl:()=>m,_F:()=>b,cE:()=>p,hI:()=>S,jA:()=>g,lO:()=>w,oz:()=>k,s1:()=>y,vY:()=>E,xz:()=>f});var r=n(7294),a=n(6775),o=n(8790),i=n(143),l=n(373),s=n(4477),u=n(1116),c=n(7392),d=n(8596);const p=!!i._r;function f(e){const t=(0,s.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}function g(){const{pathname:e}=(0,a.TH)(),t=(0,u.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=v({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t);function b(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||((e,t)=>e.some((e=>b(e,t))))(e.items,t))}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function y(){var e;const t=(0,u.V)(),{pathname:n}=(0,a.TH)();return!1!==(null==(e=(0,i.gA)())?void 0:e.pluginData.breadcrumbs)&&t?v({sidebarItems:t.items,pathname:n}):null}function w(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,c.j)([t,n,a].filter(Boolean))),[t,n,a])}function k(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\n Available sidebar ids are:\n - ${Object.keys(t).join("\n- ")}`);return r[1]}),[e,n])}function E(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`DocNavbarItem: couldn't find any doc with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,c.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function S(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:u}}function x(e){return e.filter((e=>"category"!==e.type||!!m(e)))}},7392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>c,VC:()=>f});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return null!=e&&e.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),p=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),l)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function f(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(p,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){var n,r,a;super(),this.name="ReactContextError",this.message=`Hook ${(null==(n=this.stack)||null==(r=n.split("\n")[1])||null==(a=r.match(/at (?:\w+\.)?(?<name>\w+)/))?void 0:a.groups.name)??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>{var t;return null==(t=!e||e.endsWith("/")?e:`${e}/`)?void 0:t.toLowerCase()};return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>s,RF:()=>d,o5:()=>p});var r=n(7294),a=n(412),o=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(c()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{null==n.current||n.current()})),{blockElementScrollPositionUntilNextRender:a}}function f(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&a<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(a-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>null==e.current?void 0:e.current()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{W:()=>l,_:()=>s});const r="localStorage";function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,o||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),o=!0),null}var t}let o=!1;const i={get:()=>null,set:()=>{},del:()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t}}(e);const n=a(null==t?void 0:t.persistence);return null===n?i:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{n.setItem(e,t)}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{n.removeItem(e)}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}}}}function s(e){void 0===e&&(e=r);const t=a(e);if(!t)return[];const n=[];for(let r=0;r<t.length;r+=1){const e=t.key(r);null!==e&&n.push(e)}return n}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6775);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6775),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n);else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>_,ob:()=>f,PP:()=>A,Ep:()=>p});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r<a;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&a(e),s=t&&a(t),u=l||s;if(e&&a(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(2177);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function h(e,t){t(window.confirm(e))}var b="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),g||(0,l.Z)(!1);var t,n=window.history,a=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,o=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,k=i.getUserConfirmation,E=void 0===k?h:k,S=i.keyLength,x=void 0===S?6:S,C=e.basename?d(s(e.basename)):"";function _(e){var t=e||{},n=t.key,r=t.state,a=window.location,o=a.pathname+a.search+a.hash;return C&&(o=c(o,C)),f(o,r,n)}function T(){return Math.random().toString(36).substr(2,x)}var A=m();function L(e){(0,r.Z)(U,e),U.length=n.length,A.notifyListeners(U.location,U.action)}function P(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||O(_(e.state))}function R(){O(_(y()))}var N=!1;function O(e){if(N)N=!1,L();else{A.confirmTransitionTo(e,"POP",E,(function(t){t?L({action:"POP",location:e}):function(e){var t=U.location,n=D.indexOf(t.key);-1===n&&(n=0);var r=D.indexOf(e.key);-1===r&&(r=0);var a=n-r;a&&(N=!0,F(a))}(e)}))}}var I=_(y()),D=[I.key];function M(e){return C+p(e)}function F(e){n.go(e)}var B=0;function j(e){1===(B+=e)&&1===e?(window.addEventListener(b,P),o&&window.addEventListener(v,R)):0===B&&(window.removeEventListener(b,P),o&&window.removeEventListener(v,R))}var z=!1;var U={length:n.length,action:"POP",location:I,createHref:M,push:function(e,t){var r="PUSH",o=f(e,t,T(),U.location);A.confirmTransitionTo(o,r,E,(function(e){if(e){var t=M(o),i=o.key,l=o.state;if(a)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=D.indexOf(U.location.key),u=D.slice(0,s+1);u.push(o.key),D=u,L({action:r,location:o})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,T(),U.location);A.confirmTransitionTo(o,r,E,(function(e){if(e){var t=M(o),i=o.key,l=o.state;if(a)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=D.indexOf(U.location.key);-1!==s&&(D[s]=o.key),L({action:r,location:o})}else window.location.replace(t)}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=A.setPrompt(e);return z||(j(1),z=!0),function(){return z&&(z=!1,j(-1)),t()}},listen:function(e){var t=A.appendListener(e);return j(1),function(){j(-1),t()}}};return U}var k="hashchange",E={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function x(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function C(e){window.location.replace(S(window.location.href)+"#"+e)}function _(e){void 0===e&&(e={}),g||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),a=n.getUserConfirmation,o=void 0===a?h:a,i=n.hashType,u=void 0===i?"slash":i,b=e.basename?d(s(e.basename)):"",v=E[u],y=v.encodePath,w=v.decodePath;function _(){var e=w(x());return b&&(e=c(e,b)),f(e)}var T=m();function A(e){(0,r.Z)(z,e),z.length=t.length,T.notifyListeners(z.location,z.action)}var L=!1,P=null;function R(){var e,t,n=x(),r=y(n);if(n!==r)C(r);else{var a=_(),i=z.location;if(!L&&(t=a,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(P===p(a))return;P=null,function(e){if(L)L=!1,A();else{var t="POP";T.confirmTransitionTo(e,t,o,(function(n){n?A({action:t,location:e}):function(e){var t=z.location,n=D.lastIndexOf(p(t));-1===n&&(n=0);var r=D.lastIndexOf(p(e));-1===r&&(r=0);var a=n-r;a&&(L=!0,M(a))}(e)}))}}(a)}}var N=x(),O=y(N);N!==O&&C(O);var I=_(),D=[p(I)];function M(e){t.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?window.addEventListener(k,R):0===F&&window.removeEventListener(k,R)}var j=!1;var z={length:t.length,action:"POP",location:I,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+y(b+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=p(r),a=y(b+t);if(x()!==a){P=t,function(e){window.location.hash=e}(a);var o=D.lastIndexOf(p(z.location)),i=D.slice(0,o+1);i.push(t),D=i,A({action:n,location:r})}else A()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=p(r),a=y(b+t);x()!==a&&(P=t,C(a));var o=D.indexOf(p(z.location));-1!==o&&(D[o]=t),A({action:n,location:r})}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return j||(B(1),j=!0),function(){return j&&(j=!1,B(-1)),t()}},listen:function(e){var t=T.appendListener(e);return B(1),function(){B(-1),t()}}};return z}function T(e,t,n){return Math.min(Math.max(e,t),n)}function A(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,a=t.initialEntries,o=void 0===a?["/"]:a,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function g(){return Math.random().toString(36).substr(2,u)}var h=T(l,0,o.length-1),b=o.map((function(e){return f(e,void 0,"string"==typeof e?g():e.key||g())})),v=p;function y(e){var t=T(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[h],index:h,entries:b,createHref:v,push:function(e,t){var r="PUSH",a=f(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h<i.length;++h){var b=i[h];if(!(o[b]||r&&r[b]||g&&g[b]||l&&l[b])){var v=p(n,b);try{u(t,b,v)}catch(y){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function a(e,t,n){return e<t?t:e>n?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,o){for(var i,l,s=a(e),u=1;u<arguments.length;u++){for(var c in i=Object(arguments[u]))n.call(i,c)&&(s[c]=i[c]);if(t){l=t(i);for(var d=0;d<l.length;d++)r.call(i,l[d])&&(s[l[d]]=i[l[d]])}}return s}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var a,o;switch(n=n||{},r.util.type(t)){case"Object":if(o=r.util.objId(t),n[o])return n[o];for(var i in a={},n[o]=a,t)t.hasOwnProperty(i)&&(a[i]=e(t[i],n));return a;case"Array":return o=r.util.objId(t),n[o]?n[o]:(a=[],n[o]=a,t.forEach((function(t,r){a[r]=e(t,n)})),a);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var a=e.classList;if(a.contains(t))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(e,t,n,a){var o=(a=a||r.languages)[e],i={};for(var l in o)if(o.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=o[l])}var u=a[e];return a[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,a,o){o=o||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],a||l);var s=t[l],u=r.util.type(s);"Object"!==u||o[i(s)]?"Array"!==u||o[i(s)]||(o[i(s)]=!0,e(s,n,l,o)):(o[i(s)]=!0,e(s,n,null,o))}}},plugins:{},highlight:function(e,t,n){var o={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",o),o.tokens=r.tokenize(o.code,o.grammar),r.hooks.run("after-tokenize",o),a.stringify(r.util.encode(o.tokens),o.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var a=new l;return s(a,a.head,e),i(e,a,t,a.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(a)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var a,o=0;a=n[o++];)a(t)}},Token:a};function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function o(e,t,n,r){e.lastIndex=t;var a=e.exec(n);if(a&&r&&a[1]){var o=a[1].length;a.index+=o,a[0]=a[0].slice(o)}return a}function i(e,t,n,l,c,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(d&&d.cause==p+","+m)return;var g=f[m],h=g.inside,b=!!g.lookbehind,v=!!g.greedy,y=g.alias;if(v&&!g.pattern.global){var w=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,w+"g")}for(var k=g.pattern||g,E=l.next,S=c;E!==t.tail&&!(d&&S>=d.reach);S+=E.value.length,E=E.next){var x=E.value;if(t.length>e.length)return;if(!(x instanceof a)){var C,_=1;if(v){if(!(C=o(k,S,e,b))||C.index>=e.length)break;var T=C.index,A=C.index+C[0].length,L=S;for(L+=E.value.length;T>=L;)L+=(E=E.next).value.length;if(S=L-=E.value.length,E.value instanceof a)continue;for(var P=E;P!==t.tail&&(L<A||"string"==typeof P.value);P=P.next)_++,L+=P.value.length;_--,x=e.slice(S,L),C.index-=S}else if(!(C=o(k,0,x,b)))continue;T=C.index;var R=C[0],N=x.slice(0,T),O=x.slice(T+R.length),I=S+x.length;d&&I>d.reach&&(d.reach=I);var D=E.prev;if(N&&(D=s(t,D,N),S+=N.length),u(t,D,_),E=s(t,D,new a(p,h?r.tokenize(R,h):R,y,R)),O&&s(t,E,O),_>1){var M={cause:p+","+m,reach:I};i(e,t,n,E.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a<n&&r!==e.tail;a++)r=r.next;t.next=r,r.prev=t,e.length-=a}return a.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var a="";return t.forEach((function(t){a+=e(t,n)})),a}var o={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(o.classes,i):o.classes.push(i)),r.hooks.run("wrap",o);var l="";for(var s in o.attributes)l+=" "+s+'="'+(o.attributes[s]||"").replace(/"/g,""")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+l+">"+o.content+"</"+o.tag+">"},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i<a.length;i++)o[a[i]]=e.languages.bash[a[i]];e.languages.shell=e.languages.bash}(a),a.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var a=t[n];if("code"===a.type){var o=a.content[1],i=a.content[3];if(o&&i&&"code-language"===o.type&&"code-block"===i.type&&"string"==typeof o.content){var l=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(a.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,a=t.classes.length;r<a;r++){var o=t.classes[r],u=/language-(.+)/.exec(o);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var p="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=p,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(p);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var a=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var o=p(/^\($/,/^\)$/);if(-1===o)continue;for(;n<o;n++){var i=c(0);"variable"===i.type&&(f(i,"variable-input"),a.push(i.content))}n=o+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,f(c(0),"property-mutation"),a.length>0)){var l=p(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&a.indexOf(u.content)>=0&&f(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function p(e,r){for(var a=1,o=n;o<t.length;o++){var i=t[o],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))a++;else if(r.test(l)&&0===--a)return o}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),a.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),p=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=p[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),f=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),f){var g=[f];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r<a;r++){var o=n[r];if("string"!=typeof o){var i=o.content;if(Array.isArray(i))if("template-string"===o.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=p(l),u=l.alias,d=Array.isArray(u)?u[0]:u,f=e.languages[d];if(!f)continue;i[1]=c(s,f,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(a),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var a=n[r],o=e.languages.javascript[a];"RegExp"===e.util.type(o)&&(o=e.languages.javascript[a]={pattern:o});var i=o.inside||{};o.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(a),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,a=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function o(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var a=t[r],o=!1;if("string"!=typeof a&&("tag"===a.type&&a.content[0]&&"tag"===a.content[0].type?"</"===a.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(a>=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++a;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),a=n(9642),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),o.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6726},6500:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function a(r,o){if(!(r in n)){o.push(r);var i=o.indexOf(r);if(i<o.length-1)throw new Error("Circular dependency: "+o.slice(i).join(" -> "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in a(t,o),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var p,f=r(s),m=c;a(m);){for(var g in p={},m){var h=s[g];t(h&&h.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in c))for(var v in f(b))if(v in c){p[b]=!0;break}for(var y in m=p)c[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var a,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)a=r(e);else{var p=i(c.map((function(e){var t=u(e);return delete s[e],t})));o?a=o(p,(function(){return r(e)})):r(e)}return l[e]=a}for(var c in n)u(c);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,c,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f=Object.prototype.hasOwnProperty,m={},g={};function h(e,t,n,r,a,o,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){b[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];b[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){b[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){b[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){b[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){b[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){b[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){b[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){b[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function w(e,t,n,r){var a=b.hasOwnProperty(t)?b[t]:null;(null!==a?0===a.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,a,r)&&(n=null),r||null===a?function(e){return!!f.call(g,e)||!f.call(m,e)&&(p.test(e)?g[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=null===n?3!==a.type&&"":n:(t=a.attributeName,r=a.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(a=a.type)||4===a&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){b[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),b.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){b[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var k=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,E=60103,S=60106,x=60107,C=60108,_=60114,T=60109,A=60110,L=60112,P=60113,R=60120,N=60115,O=60116,I=60121,D=60128,M=60129,F=60130,B=60131;if("function"==typeof Symbol&&Symbol.for){var j=Symbol.for;E=j("react.element"),S=j("react.portal"),x=j("react.fragment"),C=j("react.strict_mode"),_=j("react.profiler"),T=j("react.provider"),A=j("react.context"),L=j("react.forward_ref"),P=j("react.suspense"),R=j("react.suspense_list"),N=j("react.memo"),O=j("react.lazy"),I=j("react.block"),j("react.scope"),D=j("react.opaque.id"),M=j("react.debug_trace_mode"),F=j("react.offscreen"),B=j("react.legacy_hidden")}var z,U="function"==typeof Symbol&&Symbol.iterator;function $(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=U&&e[U]||e["@@iterator"])?e:null}function q(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var G=!1;function H(e,t){if(!e||G)return"";G=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var a=s.stack.split("\n"),o=r.stack.split("\n"),i=a.length-1,l=o.length-1;1<=i&&0<=l&&a[i]!==o[l];)l--;for(;1<=i&&0<=l;i--,l--)if(a[i]!==o[l]){if(1!==i||1!==l)do{if(i--,0>--l||a[i]!==o[l])return"\n"+a[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{G=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?q(e):""}function Z(e){switch(e.tag){case 5:return q(e.type);case 16:return q("Lazy");case 13:return q("Suspense");case 19:return q("SuspenseList");case 0:case 2:case 15:return e=H(e.type,!1);case 11:return e=H(e.type.render,!1);case 22:return e=H(e.type._render,!1);case 1:return e=H(e.type,!0);default:return""}}function V(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case x:return"Fragment";case S:return"Portal";case _:return"Profiler";case C:return"StrictMode";case P:return"Suspense";case R:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case A:return(e.displayName||"Context")+".Consumer";case T:return(e._context.displayName||"Context")+".Provider";case L:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case N:return V(e.type);case I:return V(e._render);case O:t=e._payload,e=e._init;try{return V(e(t))}catch(n){}}return null}function W(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Y(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function K(e){e._valueTracker||(e._valueTracker=function(e){var t=Y(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(e){r=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Q(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Y(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return a({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=W(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=W(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ae(e,t.type,n):t.hasOwnProperty("defaultValue")&&ae(e,t.type,W(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ae(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function oe(e,t){return e=a({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+W(n),t=null,a=0;a<e.length;a++){if(e[a].value===n)return e[a].selected=!0,void(r&&(e[a].defaultSelected=!0));null!==t||e[a].disabled||(t=e[a])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return a({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:W(n)}}function ue(e,t){var n=W(t.value),r=W(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de="http://www.w3.org/1999/xhtml",pe="http://www.w3.org/2000/svg";function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function me(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ge,he,be=(he=function(e,t){if(e.namespaceURI!==pe||"innerHTML"in e)e.innerHTML=t;else{for((ge=ge||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ge.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return he(e,t)}))}:he);function ve(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ye={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},we=["Webkit","ms","Moz","O"];function ke(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ye.hasOwnProperty(e)&&ye[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),a=ke(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}Object.keys(ye).forEach((function(e){we.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ye[t]=ye[e]}))}));var Se=a({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function xe(e,t){if(t){if(Se[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function Ce(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function _e(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Te=null,Ae=null,Le=null;function Pe(e){if(e=ra(e)){if("function"!=typeof Te)throw Error(i(280));var t=e.stateNode;t&&(t=oa(t),Te(e.stateNode,e.type,t))}}function Re(e){Ae?Le?Le.push(e):Le=[e]:Ae=e}function Ne(){if(Ae){var e=Ae,t=Le;if(Le=Ae=null,Pe(e),t)for(e=0;e<t.length;e++)Pe(t[e])}}function Oe(e,t){return e(t)}function Ie(e,t,n,r,a){return e(t,n,r,a)}function De(){}var Me=Oe,Fe=!1,Be=!1;function je(){null===Ae&&null===Le||(De(),Ne())}function ze(e,t){var n=e.stateNode;if(null===n)return null;var r=oa(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var Ue=!1;if(d)try{var $e={};Object.defineProperty($e,"passive",{get:function(){Ue=!0}}),window.addEventListener("test",$e,$e),window.removeEventListener("test",$e,$e)}catch(he){Ue=!1}function qe(e,t,n,r,a,o,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var Ge=!1,He=null,Ze=!1,Ve=null,We={onError:function(e){Ge=!0,He=e}};function Ye(e,t,n,r,a,o,i,l,s){Ge=!1,He=null,qe.apply(We,arguments)}function Ke(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Qe(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Xe(e){if(Ke(e)!==e)throw Error(i(188))}function Je(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ke(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(null===a)break;var o=a.alternate;if(null===o){if(null!==(r=a.return)){n=r;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===n)return Xe(a),e;if(o===r)return Xe(a),t;o=o.sibling}throw Error(i(188))}if(n.return!==r.return)n=a,r=o;else{for(var l=!1,s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l){for(s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function et(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var tt,nt,rt,at,ot=!1,it=[],lt=null,st=null,ut=null,ct=new Map,dt=new Map,pt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function mt(e,t,n,r,a){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:a,targetContainers:[r]}}function gt(e,t){switch(e){case"focusin":case"focusout":lt=null;break;case"dragenter":case"dragleave":st=null;break;case"mouseover":case"mouseout":ut=null;break;case"pointerover":case"pointerout":ct.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":dt.delete(t.pointerId)}}function ht(e,t,n,r,a,o){return null===e||e.nativeEvent!==o?(e=mt(t,n,r,a,o),null!==t&&(null!==(t=ra(t))&&nt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==a&&-1===t.indexOf(a)&&t.push(a),e)}function bt(e){var t=na(e.target);if(null!==t){var n=Ke(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Qe(n)))return e.blockedOn=t,void at(e.lanePriority,(function(){o.unstable_runWithPriority(e.priority,(function(){rt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function vt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=ra(n))&&nt(t),e.blockedOn=n,!1;t.shift()}return!0}function yt(e,t,n){vt(e)&&n.delete(t)}function wt(){for(ot=!1;0<it.length;){var e=it[0];if(null!==e.blockedOn){null!==(e=ra(e.blockedOn))&&tt(e);break}for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&it.shift()}null!==lt&&vt(lt)&&(lt=null),null!==st&&vt(st)&&(st=null),null!==ut&&vt(ut)&&(ut=null),ct.forEach(yt),dt.forEach(yt)}function kt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,wt)))}function Et(e){function t(t){return kt(t,e)}if(0<it.length){kt(it[0],e);for(var n=1;n<it.length;n++){var r=it[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==lt&&kt(lt,e),null!==st&&kt(st,e),null!==ut&&kt(ut,e),ct.forEach(t),dt.forEach(t),n=0;n<pt.length;n++)(r=pt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<pt.length&&null===(n=pt[0]).blockedOn;)bt(n),null===n.blockedOn&&pt.shift()}function St(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var xt={animationend:St("Animation","AnimationEnd"),animationiteration:St("Animation","AnimationIteration"),animationstart:St("Animation","AnimationStart"),transitionend:St("Transition","TransitionEnd")},Ct={},_t={};function Tt(e){if(Ct[e])return Ct[e];if(!xt[e])return e;var t,n=xt[e];for(t in n)if(n.hasOwnProperty(t)&&t in _t)return Ct[e]=n[t];return e}d&&(_t=document.createElement("div").style,"AnimationEvent"in window||(delete xt.animationend.animation,delete xt.animationiteration.animation,delete xt.animationstart.animation),"TransitionEvent"in window||delete xt.transitionend.transition);var At=Tt("animationend"),Lt=Tt("animationiteration"),Pt=Tt("animationstart"),Rt=Tt("transitionend"),Nt=new Map,Ot=new Map,It=["abort","abort",At,"animationEnd",Lt,"animationIteration",Pt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Rt,"transitionEnd","waiting","waiting"];function Dt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],a=e[n+1];a="on"+(a[0].toUpperCase()+a.slice(1)),Ot.set(r,t),Nt.set(r,a),u(a,[r])}}(0,o.unstable_now)();var Mt=8;function Ft(e){if(0!=(1&e))return Mt=15,1;if(0!=(2&e))return Mt=14,2;if(0!=(4&e))return Mt=13,4;var t=24&e;return 0!==t?(Mt=12,t):0!=(32&e)?(Mt=11,32):0!==(t=192&e)?(Mt=10,t):0!=(256&e)?(Mt=9,256):0!==(t=3584&e)?(Mt=8,t):0!=(4096&e)?(Mt=7,4096):0!==(t=4186112&e)?(Mt=6,t):0!==(t=62914560&e)?(Mt=5,t):67108864&e?(Mt=4,67108864):0!=(134217728&e)?(Mt=3,134217728):0!==(t=805306368&e)?(Mt=2,t):0!=(1073741824&e)?(Mt=1,1073741824):(Mt=8,e)}function Bt(e,t){var n=e.pendingLanes;if(0===n)return Mt=0;var r=0,a=0,o=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==o)r=o,a=Mt=15;else if(0!==(o=134217727&n)){var s=o&~i;0!==s?(r=Ft(s),a=Mt):0!==(l&=o)&&(r=Ft(l),a=Mt)}else 0!==(o=n&~i)?(r=Ft(o),a=Mt):0!==l&&(r=Ft(l),a=Mt);if(0===r)return 0;if(r=n&((0>(r=31-Gt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Ft(t),a<=Mt)return t;Mt=a}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)a=1<<(n=31-Gt(t)),r|=e[n],t&=~a;return r}function jt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function zt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=Ut(24&~t))?zt(10,t):e;case 10:return 0===(e=Ut(192&~t))?zt(8,t):e;case 8:return 0===(e=Ut(3584&~t))&&(0===(e=Ut(4186112&~t))&&(e=512)),e;case 2:return 0===(t=Ut(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function Ut(e){return e&-e}function $t(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function qt(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Gt(t)]=n}var Gt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Ht(e)/Zt|0)|0},Ht=Math.log,Zt=Math.LN2;var Vt=o.unstable_UserBlockingPriority,Wt=o.unstable_runWithPriority,Yt=!0;function Kt(e,t,n,r){Fe||De();var a=Xt,o=Fe;Fe=!0;try{Ie(a,e,t,n,r)}finally{(Fe=o)||je()}}function Qt(e,t,n,r){Wt(Vt,Xt.bind(null,e,t,n,r))}function Xt(e,t,n,r){var a;if(Yt)if((a=0==(4&t))&&0<it.length&&-1<ft.indexOf(e))e=mt(null,e,t,n,r),it.push(e);else{var o=Jt(e,t,n,r);if(null===o)a&>(e,r);else{if(a){if(-1<ft.indexOf(e))return e=mt(o,e,t,n,r),void it.push(e);if(function(e,t,n,r,a){switch(t){case"focusin":return lt=ht(lt,e,t,n,r,a),!0;case"dragenter":return st=ht(st,e,t,n,r,a),!0;case"mouseover":return ut=ht(ut,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return ct.set(o,ht(ct.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,dt.set(o,ht(dt.get(o)||null,e,t,n,r,a)),!0}return!1}(o,e,t,n,r))return;gt(e,r)}Dr(e,t,r,null,n)}}}function Jt(e,t,n,r){var a=_e(r);if(null!==(a=na(a))){var o=Ke(a);if(null===o)a=null;else{var i=o.tag;if(13===i){if(null!==(a=Qe(o)))return a;a=null}else if(3===i){if(o.stateNode.hydrate)return 3===o.tag?o.stateNode.containerInfo:null;a=null}else o!==a&&(a=null)}}return Dr(e,t,r,a,n),null}var en=null,tn=null,nn=null;function rn(){if(nn)return nn;var e,t,n=tn,r=n.length,a="value"in en?en.value:en.textContent,o=a.length;for(e=0;e<r&&n[e]===a[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===a[o-t];t++);return nn=a.slice(e,1<t?1-t:void 0)}function an(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function ln(){return!1}function sn(e){function t(t,n,r,a,o){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=a,this.target=o,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(a):a[i]);return this.isDefaultPrevented=(null!=a.defaultPrevented?a.defaultPrevented:!1===a.returnValue)?on:ln,this.isPropagationStopped=ln,this}return a(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var un,cn,dn,pn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=sn(pn),mn=a({},pn,{view:0,detail:0}),gn=sn(mn),hn=a({},mn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:An,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==dn&&(dn&&"mousemove"===e.type?(un=e.screenX-dn.screenX,cn=e.screenY-dn.screenY):cn=un=0,dn=e),un)},movementY:function(e){return"movementY"in e?e.movementY:cn}}),bn=sn(hn),vn=sn(a({},hn,{dataTransfer:0})),yn=sn(a({},mn,{relatedTarget:0})),wn=sn(a({},pn,{animationName:0,elapsedTime:0,pseudoElement:0})),kn=a({},pn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),En=sn(kn),Sn=sn(a({},pn,{data:0})),xn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Cn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},_n={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Tn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=_n[e])&&!!t[e]}function An(){return Tn}var Ln=a({},mn,{key:function(e){if(e.key){var t=xn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=an(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?Cn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:An,charCode:function(e){return"keypress"===e.type?an(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?an(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Pn=sn(Ln),Rn=sn(a({},hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Nn=sn(a({},mn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:An})),On=sn(a({},pn,{propertyName:0,elapsedTime:0,pseudoElement:0})),In=a({},hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Dn=sn(In),Mn=[9,13,27,32],Fn=d&&"CompositionEvent"in window,Bn=null;d&&"documentMode"in document&&(Bn=document.documentMode);var jn=d&&"TextEvent"in window&&!Bn,zn=d&&(!Fn||Bn&&8<Bn&&11>=Bn),Un=String.fromCharCode(32),$n=!1;function qn(e,t){switch(e){case"keyup":return-1!==Mn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Gn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Hn=!1;var Zn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Zn[e.type]:"textarea"===t}function Wn(e,t,n,r){Re(r),0<(t=Fr(t,"onChange")).length&&(n=new fn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Yn=null,Kn=null;function Qn(e){Lr(e,0)}function Xn(e){if(Q(aa(e)))return e}function Jn(e,t){if("change"===e)return t}var er=!1;if(d){var tr;if(d){var nr="oninput"in document;if(!nr){var rr=document.createElement("div");rr.setAttribute("oninput","return;"),nr="function"==typeof rr.oninput}tr=nr}else tr=!1;er=tr&&(!document.documentMode||9<document.documentMode)}function ar(){Yn&&(Yn.detachEvent("onpropertychange",or),Kn=Yn=null)}function or(e){if("value"===e.propertyName&&Xn(Kn)){var t=[];if(Wn(t,Kn,e,_e(e)),e=Qn,Fe)e(t);else{Fe=!0;try{Oe(e,t)}finally{Fe=!1,je()}}}}function ir(e,t,n){"focusin"===e?(ar(),Kn=n,(Yn=t).attachEvent("onpropertychange",or)):"focusout"===e&&ar()}function lr(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Xn(Kn)}function sr(e,t){if("click"===e)return Xn(t)}function ur(e,t){if("input"===e||"change"===e)return Xn(t)}var cr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},dr=Object.prototype.hasOwnProperty;function pr(e,t){if(cr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!dr.call(t,n[r])||!cr(e[n[r]],t[n[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function mr(e,t){var n,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function gr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?gr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function br(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var vr=d&&"documentMode"in document&&11>=document.documentMode,yr=null,wr=null,kr=null,Er=!1;function Sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==yr||yr!==X(r)||("selectionStart"in(r=yr)&&br(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},kr&&pr(kr,r)||(kr=r,0<(r=Fr(wr,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=yr)))}Dt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Dt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Dt(It,2);for(var xr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Cr=0;Cr<xr.length;Cr++)Ot.set(xr[Cr],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var _r="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Tr=new Set("cancel close invalid load scroll toggle".split(" ").concat(_r));function Ar(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,a,o,l,s,u){if(Ye.apply(this,arguments),Ge){if(!Ge)throw Error(i(198));var c=He;Ge=!1,He=null,Ze||(Ze=!0,Ve=c)}}(r,t,void 0,e),e.currentTarget=null}function Lr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==o&&a.isPropagationStopped())break e;Ar(a,l,u),o=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==o&&a.isPropagationStopped())break e;Ar(a,l,u),o=s}}}if(Ze)throw e=Ve,Ze=!1,Ve=null,e}function Pr(e,t){var n=ia(t),r=e+"__bubble";n.has(r)||(Ir(t,e,2,!1),n.add(r))}var Rr="_reactListening"+Math.random().toString(36).slice(2);function Nr(e){e[Rr]||(e[Rr]=!0,l.forEach((function(t){Tr.has(t)||Or(t,!1,e,null),Or(t,!0,e,null)})))}function Or(e,t,n,r){var a=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,o=n;if("selectionchange"===e&&9!==n.nodeType&&(o=n.ownerDocument),null!==r&&!t&&Tr.has(e)){if("scroll"!==e)return;a|=2,o=r}var i=ia(o),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(a|=4),Ir(o,e,a,t),i.add(l))}function Ir(e,t,n,r){var a=Ot.get(t);switch(void 0===a?2:a){case 0:a=Kt;break;case 1:a=Qt;break;default:a=Xt}n=a.bind(null,t,n,e),a=void 0,!Ue||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(a=!0),r?void 0!==a?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):void 0!==a?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function Dr(e,t,n,r,a){var o=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===a||8===l.nodeType&&l.parentNode===a)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===a||8===s.nodeType&&s.parentNode===a))return;i=i.return}for(;null!==l;){if(null===(i=na(l)))return;if(5===(s=i.tag)||6===s){r=o=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Be)return e(t,n);Be=!0;try{Me(e,t,n)}finally{Be=!1,je()}}((function(){var r=o,a=_e(n),i=[];e:{var l=Nt.get(e);if(void 0!==l){var s=fn,u=e;switch(e){case"keypress":if(0===an(n))break e;case"keydown":case"keyup":s=Pn;break;case"focusin":u="focus",s=yn;break;case"focusout":u="blur",s=yn;break;case"beforeblur":case"afterblur":s=yn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=bn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=vn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=Nn;break;case At:case Lt:case Pt:s=wn;break;case Rt:s=On;break;case"scroll":s=gn;break;case"wheel":s=Dn;break;case"copy":case"cut":case"paste":s=En;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=Rn}var c=0!=(4&t),d=!c&&"scroll"===e,p=c?null!==l?l+"Capture":null:l;c=[];for(var f,m=r;null!==m;){var g=(f=m).stateNode;if(5===f.tag&&null!==g&&(f=g,null!==p&&(null!=(g=ze(m,p))&&c.push(Mr(m,g,f)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,a),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!na(u)&&!u[ea])&&(s||l)&&(l=a.window===a?a:(l=a.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?na(u):null)&&(u!==(d=Ke(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=bn,g="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=Rn,g="onPointerLeave",p="onPointerEnter",m="pointer"),d=null==s?l:aa(s),f=null==u?l:aa(u),(l=new c(g,m+"leave",s,n,a)).target=d,l.relatedTarget=f,g=null,na(a)===r&&((c=new c(p,m+"enter",u,n,a)).target=f,c.relatedTarget=d,g=c),d=g,s&&u)e:{for(p=u,m=0,f=c=s;f;f=Br(f))m++;for(f=0,g=p;g;g=Br(g))f++;for(;0<m-f;)c=Br(c),m--;for(;0<f-m;)p=Br(p),f--;for(;m--;){if(c===p||null!==p&&c===p.alternate)break e;c=Br(c),p=Br(p)}c=null}else c=null;null!==s&&jr(i,l,s,c,!1),null!==u&&null!==d&&jr(i,d,u,c,!0)}if("select"===(s=(l=r?aa(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var h=Jn;else if(Vn(l))if(er)h=ur;else{h=lr;var b=ir}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(h=sr);switch(h&&(h=h(e,r))?Wn(i,h,n,a):(b&&b(e,l,r),"focusout"===e&&(b=l._wrapperState)&&b.controlled&&"number"===l.type&&ae(l,"number",l.value)),b=r?aa(r):window,e){case"focusin":(Vn(b)||"true"===b.contentEditable)&&(yr=b,wr=r,kr=null);break;case"focusout":kr=wr=yr=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,Sr(i,n,a);break;case"selectionchange":if(vr)break;case"keydown":case"keyup":Sr(i,n,a)}var v;if(Fn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else Hn?qn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(zn&&"ko"!==n.locale&&(Hn||"onCompositionStart"!==y?"onCompositionEnd"===y&&Hn&&(v=rn()):(tn="value"in(en=a)?en.value:en.textContent,Hn=!0)),0<(b=Fr(r,y)).length&&(y=new Sn(y,e,null,n,a),i.push({event:y,listeners:b}),v?y.data=v:null!==(v=Gn(n))&&(y.data=v))),(v=jn?function(e,t){switch(e){case"compositionend":return Gn(t);case"keypress":return 32!==t.which?null:($n=!0,Un);case"textInput":return(e=t.data)===Un&&$n?null:e;default:return null}}(e,n):function(e,t){if(Hn)return"compositionend"===e||!Fn&&qn(e,t)?(e=rn(),nn=tn=en=null,Hn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return zn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Fr(r,"onBeforeInput")).length&&(a=new Sn("onBeforeInput","beforeinput",null,n,a),i.push({event:a,listeners:r}),a.data=v))}Lr(i,t)}))}function Mr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Fr(e,t){for(var n=t+"Capture",r=[];null!==e;){var a=e,o=a.stateNode;5===a.tag&&null!==o&&(a=o,null!=(o=ze(e,n))&&r.unshift(Mr(e,o,a)),null!=(o=ze(e,t))&&r.push(Mr(e,o,a))),e=e.return}return r}function Br(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function jr(e,t,n,r,a){for(var o=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,a?null!=(s=ze(n,o))&&i.unshift(Mr(n,s,l)):a||null!=(s=ze(n,o))&&i.push(Mr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function zr(){}var Ur=null,$r=null;function qr(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Gr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Hr="function"==typeof setTimeout?setTimeout:void 0,Zr="function"==typeof clearTimeout?clearTimeout:void 0;function Vr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Wr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Yr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Kr=0;var Qr=Math.random().toString(36).slice(2),Xr="__reactFiber$"+Qr,Jr="__reactProps$"+Qr,ea="__reactContainer$"+Qr,ta="__reactEvents$"+Qr;function na(e){var t=e[Xr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ea]||n[Xr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Yr(e);null!==e;){if(n=e[Xr])return n;e=Yr(e)}return t}n=(e=n).parentNode}return null}function ra(e){return!(e=e[Xr]||e[ea])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function aa(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oa(e){return e[Jr]||null}function ia(e){var t=e[ta];return void 0===t&&(t=e[ta]=new Set),t}var la=[],sa=-1;function ua(e){return{current:e}}function ca(e){0>sa||(e.current=la[sa],la[sa]=null,sa--)}function da(e,t){sa++,la[sa]=e.current,e.current=t}var pa={},fa=ua(pa),ma=ua(!1),ga=pa;function ha(e,t){var n=e.type.contextTypes;if(!n)return pa;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a,o={};for(a in n)o[a]=t[a];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function ba(e){return null!=(e=e.childContextTypes)}function va(){ca(ma),ca(fa)}function ya(e,t,n){if(fa.current!==pa)throw Error(i(168));da(fa,t),da(ma,n)}function wa(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in e))throw Error(i(108,V(t)||"Unknown",o));return a({},n,r)}function ka(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||pa,ga=fa.current,da(fa,e),da(ma,ma.current),!0}function Ea(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wa(e,t,ga),r.__reactInternalMemoizedMergedChildContext=e,ca(ma),ca(fa),da(fa,e)):ca(ma),da(ma,n)}var Sa=null,xa=null,Ca=o.unstable_runWithPriority,_a=o.unstable_scheduleCallback,Ta=o.unstable_cancelCallback,Aa=o.unstable_shouldYield,La=o.unstable_requestPaint,Pa=o.unstable_now,Ra=o.unstable_getCurrentPriorityLevel,Na=o.unstable_ImmediatePriority,Oa=o.unstable_UserBlockingPriority,Ia=o.unstable_NormalPriority,Da=o.unstable_LowPriority,Ma=o.unstable_IdlePriority,Fa={},Ba=void 0!==La?La:function(){},ja=null,za=null,Ua=!1,$a=Pa(),qa=1e4>$a?Pa:function(){return Pa()-$a};function Ga(){switch(Ra()){case Na:return 99;case Oa:return 98;case Ia:return 97;case Da:return 96;case Ma:return 95;default:throw Error(i(332))}}function Ha(e){switch(e){case 99:return Na;case 98:return Oa;case 97:return Ia;case 96:return Da;case 95:return Ma;default:throw Error(i(332))}}function Za(e,t){return e=Ha(e),Ca(e,t)}function Va(e,t,n){return e=Ha(e),_a(e,t,n)}function Wa(){if(null!==za){var e=za;za=null,Ta(e)}Ya()}function Ya(){if(!Ua&&null!==ja){Ua=!0;var e=0;try{var t=ja;Za(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),ja=null}catch(n){throw null!==ja&&(ja=ja.slice(e+1)),_a(Na,Wa),n}finally{Ua=!1}}}var Ka=k.ReactCurrentBatchConfig;function Qa(e,t){if(e&&e.defaultProps){for(var n in t=a({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xa=ua(null),Ja=null,eo=null,to=null;function no(){to=eo=Ja=null}function ro(e){var t=Xa.current;ca(Xa),e.type._context._currentValue=t}function ao(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function oo(e,t){Ja=e,to=eo=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Fi=!0),e.firstContext=null)}function io(e,t){if(to!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(to=e,t=1073741823),t={context:e,observedBits:t,next:null},null===eo){if(null===Ja)throw Error(i(308));eo=t,Ja.dependencies={lanes:0,firstContext:t,responders:null}}else eo=eo.next=t;return e._currentValue}var lo=!1;function so(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function uo(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function co(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function po(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fo(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var a=null,o=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===o?a=o=i:o=o.next=i,n=n.next}while(null!==n);null===o?a=o=t:o=o.next=t}else a=o=t;return n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function mo(e,t,n,r){var o=e.updateQueue;lo=!1;var i=o.firstBaseUpdate,l=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var p=(d=d.updateQueue).lastBaseUpdate;p!==l&&(null===p?d.firstBaseUpdate=c:p.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(p=o.baseState,l=0,d=c=u=null;;){s=i.lane;var f=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:f,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,g=i;switch(s=t,f=n,g.tag){case 1:if("function"==typeof(m=g.payload)){p=m.call(f,p,s);break e}p=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=g.payload)?m.call(f,p,s):m))break e;p=a({},p,s);break e;case 2:lo=!0}}null!==i.callback&&(e.flags|=32,null===(s=o.effects)?o.effects=[i]:s.push(i))}else f={eventTime:f,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=f,u=p):d=d.next=f,l|=s;if(null===(i=i.next)){if(null===(s=o.shared.pending))break;i=s.next,s.next=null,o.lastBaseUpdate=s,o.shared.pending=null}}null===d&&(u=p),o.baseState=u,o.firstBaseUpdate=c,o.lastBaseUpdate=d,Ul|=l,e.lanes=l,e.memoizedState=p}}function go(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(null!==a){if(r.callback=null,r=n,"function"!=typeof a)throw Error(i(191,a));a.call(r)}}}var ho=(new r.Component).refs;function bo(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:a({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var vo={isMounted:function(e){return!!(e=e._reactInternals)&&Ke(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=ps(),a=fs(e),o=co(r,a);o.payload=t,null!=n&&(o.callback=n),po(e,o),ms(e,a,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=ps(),a=fs(e),o=co(r,a);o.tag=1,o.payload=t,null!=n&&(o.callback=n),po(e,o),ms(e,a,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=ps(),r=fs(e),a=co(n,r);a.tag=2,null!=t&&(a.callback=t),po(e,a),ms(e,r,n)}};function yo(e,t,n,r,a,o,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,i):!t.prototype||!t.prototype.isPureReactComponent||(!pr(n,r)||!pr(a,o))}function wo(e,t,n){var r=!1,a=pa,o=t.contextType;return"object"==typeof o&&null!==o?o=io(o):(a=ba(t)?ga:fa.current,o=(r=null!=(r=t.contextTypes))?ha(e,a):pa),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=vo,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function ko(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&vo.enqueueReplaceState(t,t.state,null)}function Eo(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs=ho,so(e);var o=t.contextType;"object"==typeof o&&null!==o?a.context=io(o):(o=ba(t)?ga:fa.current,a.context=ha(e,o)),mo(e,n,a,r),a.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&(bo(e,t,o,n),a.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof a.getSnapshotBeforeUpdate||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||(t=a.state,"function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),t!==a.state&&vo.enqueueReplaceState(a,a.state,null),mo(e,n,a,r),a.state=e.memoizedState),"function"==typeof a.componentDidMount&&(e.flags|=4)}var So=Array.isArray;function xo(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var a=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===a?t.ref:(t=function(e){var t=r.refs;t===ho&&(t=r.refs={}),null===e?delete t[a]:t[a]=e},t._stringRef=a,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function Co(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function _o(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function a(e,t){return(e=Zs(e,t)).index=0,e.sibling=null,e}function o(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ks(n,e.mode,r)).return=e,t):((t=a(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=a(t,n.props)).ref=xo(e,t,n),r.return=e,r):((r=Vs(n.type,n.key,n.props,null,e.mode,r)).ref=xo(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Qs(n,e.mode,r)).return=e,t):((t=a(t,n.children||[])).return=e,t)}function d(e,t,n,r,o){return null===t||7!==t.tag?((t=Ws(n,e.mode,r,o)).return=e,t):((t=a(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ks(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case E:return(n=Vs(t.type,t.key,t.props,null,e.mode,n)).ref=xo(e,null,t),n.return=e,n;case S:return(t=Qs(t,e.mode,n)).return=e,t}if(So(t)||$(t))return(t=Ws(t,e.mode,n,null)).return=e,t;Co(e,t)}return null}function f(e,t,n,r){var a=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==a?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case E:return n.key===a?n.type===x?d(e,t,n.props.children,r,a):u(e,t,n,r):null;case S:return n.key===a?c(e,t,n,r):null}if(So(n)||$(n))return null!==a?null:d(e,t,n,r,null);Co(e,n)}return null}function m(e,t,n,r,a){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,a);if("object"==typeof r&&null!==r){switch(r.$$typeof){case E:return e=e.get(null===r.key?n:r.key)||null,r.type===x?d(t,e,r.props.children,a,r.key):u(t,e,r,a);case S:return c(t,e=e.get(null===r.key?n:r.key)||null,r,a)}if(So(r)||$(r))return d(t,e=e.get(n)||null,r,a,null);Co(t,r)}return null}function g(a,i,l,s){for(var u=null,c=null,d=i,g=i=0,h=null;null!==d&&g<l.length;g++){d.index>g?(h=d,d=null):h=d.sibling;var b=f(a,d,l[g],s);if(null===b){null===d&&(d=h);break}e&&d&&null===b.alternate&&t(a,d),i=o(b,i,g),null===c?u=b:c.sibling=b,c=b,d=h}if(g===l.length)return n(a,d),u;if(null===d){for(;g<l.length;g++)null!==(d=p(a,l[g],s))&&(i=o(d,i,g),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(a,d);g<l.length;g++)null!==(h=m(d,a,g,l[g],s))&&(e&&null!==h.alternate&&d.delete(null===h.key?g:h.key),i=o(h,i,g),null===c?u=h:c.sibling=h,c=h);return e&&d.forEach((function(e){return t(a,e)})),u}function h(a,l,s,u){var c=$(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,g=l,h=l=0,b=null,v=s.next();null!==g&&!v.done;h++,v=s.next()){g.index>h?(b=g,g=null):b=g.sibling;var y=f(a,g,v.value,u);if(null===y){null===g&&(g=b);break}e&&g&&null===y.alternate&&t(a,g),l=o(y,l,h),null===d?c=y:d.sibling=y,d=y,g=b}if(v.done)return n(a,g),c;if(null===g){for(;!v.done;h++,v=s.next())null!==(v=p(a,v.value,u))&&(l=o(v,l,h),null===d?c=v:d.sibling=v,d=v);return c}for(g=r(a,g);!v.done;h++,v=s.next())null!==(v=m(g,a,h,v.value,u))&&(e&&null!==v.alternate&&g.delete(null===v.key?h:v.key),l=o(v,l,h),null===d?c=v:d.sibling=v,d=v);return e&&g.forEach((function(e){return t(a,e)})),c}return function(e,r,o,s){var u="object"==typeof o&&null!==o&&o.type===x&&null===o.key;u&&(o=o.props.children);var c="object"==typeof o&&null!==o;if(c)switch(o.$$typeof){case E:e:{for(c=o.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(o.type===x){n(e,u.sibling),(r=a(u,o.props.children)).return=e,e=r;break e}}else if(u.elementType===o.type){n(e,u.sibling),(r=a(u,o.props)).ref=xo(e,u,o),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}o.type===x?((r=Ws(o.props.children,e.mode,s,o.key)).return=e,e=r):((s=Vs(o.type,o.key,o.props,null,e.mode,s)).ref=xo(e,r,o),s.return=e,e=s)}return l(e);case S:e:{for(u=o.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),(r=a(r,o.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Qs(o,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof o||"number"==typeof o)return o=""+o,null!==r&&6===r.tag?(n(e,r.sibling),(r=a(r,o)).return=e,e=r):(n(e,r),(r=Ks(o,e.mode,s)).return=e,e=r),l(e);if(So(o))return g(e,r,o,s);if($(o))return h(e,r,o,s);if(c&&Co(e,o),void 0===o&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,V(e.type)||"Component"))}return n(e,r)}}var To=_o(!0),Ao=_o(!1),Lo={},Po=ua(Lo),Ro=ua(Lo),No=ua(Lo);function Oo(e){if(e===Lo)throw Error(i(174));return e}function Io(e,t){switch(da(No,t),da(Ro,e),da(Po,Lo),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:me(null,"");break;default:t=me(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}ca(Po),da(Po,t)}function Do(){ca(Po),ca(Ro),ca(No)}function Mo(e){Oo(No.current);var t=Oo(Po.current),n=me(t,e.type);t!==n&&(da(Ro,e),da(Po,n))}function Fo(e){Ro.current===e&&(ca(Po),ca(Ro))}var Bo=ua(0);function jo(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var zo=null,Uo=null,$o=!1;function qo(e,t){var n=Gs(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Go(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Ho(e){if($o){var t=Uo;if(t){var n=t;if(!Go(e,t)){if(!(t=Wr(n.nextSibling))||!Go(e,t))return e.flags=-1025&e.flags|2,$o=!1,void(zo=e);qo(zo,n)}zo=e,Uo=Wr(t.firstChild)}else e.flags=-1025&e.flags|2,$o=!1,zo=e}}function Zo(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;zo=e}function Vo(e){if(e!==zo)return!1;if(!$o)return Zo(e),$o=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Gr(t,e.memoizedProps))for(t=Uo;t;)qo(e,t),t=Wr(t.nextSibling);if(Zo(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){Uo=Wr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}Uo=null}}else Uo=zo?Wr(e.stateNode.nextSibling):null;return!0}function Wo(){Uo=zo=null,$o=!1}var Yo=[];function Ko(){for(var e=0;e<Yo.length;e++)Yo[e]._workInProgressVersionPrimary=null;Yo.length=0}var Qo=k.ReactCurrentDispatcher,Xo=k.ReactCurrentBatchConfig,Jo=0,ei=null,ti=null,ni=null,ri=!1,ai=!1;function oi(){throw Error(i(321))}function ii(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!cr(e[n],t[n]))return!1;return!0}function li(e,t,n,r,a,o){if(Jo=o,ei=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Qo.current=null===e||null===e.memoizedState?Oi:Ii,e=n(r,a),ai){o=0;do{if(ai=!1,!(25>o))throw Error(i(301));o+=1,ni=ti=null,t.updateQueue=null,Qo.current=Di,e=n(r,a)}while(ai)}if(Qo.current=Ni,t=null!==ti&&null!==ti.next,Jo=0,ni=ti=ei=null,ri=!1,t)throw Error(i(300));return e}function si(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ni?ei.memoizedState=ni=e:ni=ni.next=e,ni}function ui(){if(null===ti){var e=ei.alternate;e=null!==e?e.memoizedState:null}else e=ti.next;var t=null===ni?ei.memoizedState:ni.next;if(null!==t)ni=t,ti=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ti=e).memoizedState,baseState:ti.baseState,baseQueue:ti.baseQueue,queue:ti.queue,next:null},null===ni?ei.memoizedState=ni=e:ni=ni.next=e}return ni}function ci(e,t){return"function"==typeof t?t(e):t}function di(e){var t=ui(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ti,a=r.baseQueue,o=n.pending;if(null!==o){if(null!==a){var l=a.next;a.next=o.next,o.next=l}r.baseQueue=a=o,n.pending=null}if(null!==a){a=a.next,r=r.baseState;var s=l=o=null,u=a;do{var c=u.lane;if((Jo&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,o=r):s=s.next=d,ei.lanes|=c,Ul|=c}u=u.next}while(null!==u&&u!==a);null===s?o=r:s.next=l,cr(r,t.memoizedState)||(Fi=!0),t.memoizedState=r,t.baseState=o,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function pi(e){var t=ui(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,o=t.memoizedState;if(null!==a){n.pending=null;var l=a=a.next;do{o=e(o,l.action),l=l.next}while(l!==a);cr(o,t.memoizedState)||(Fi=!0),t.memoizedState=o,null===t.baseQueue&&(t.baseState=o),n.lastRenderedState=o}return[o,r]}function fi(e,t,n){var r=t._getVersion;r=r(t._source);var a=t._workInProgressVersionPrimary;if(null!==a?e=a===r:(e=e.mutableReadLanes,(e=(Jo&e)===e)&&(t._workInProgressVersionPrimary=r,Yo.push(t))),e)return n(t._source);throw Yo.push(t),Error(i(350))}function mi(e,t,n,r){var a=Ol;if(null===a)throw Error(i(349));var o=t._getVersion,l=o(t._source),s=Qo.current,u=s.useState((function(){return fi(a,t,n)})),c=u[1],d=u[0];u=ni;var p=e.memoizedState,f=p.refs,m=f.getSnapshot,g=p.source;p=p.subscribe;var h=ei;return e.memoizedState={refs:f,source:t,subscribe:r},s.useEffect((function(){f.getSnapshot=n,f.setSnapshot=c;var e=o(t._source);if(!cr(l,e)){e=n(t._source),cr(d,e)||(c(e),e=fs(h),a.mutableReadLanes|=e&a.pendingLanes),e=a.mutableReadLanes,a.entangledLanes|=e;for(var r=a.entanglements,i=e;0<i;){var s=31-Gt(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=f.getSnapshot,n=f.setSnapshot;try{n(e(t._source));var r=fs(h);a.mutableReadLanes|=r&a.pendingLanes}catch(o){n((function(){throw o}))}}))}),[t,r]),cr(m,n)&&cr(g,t)&&cr(p,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:d}).dispatch=c=Ri.bind(null,ei,e),u.queue=e,u.baseQueue=null,d=fi(a,t,n),u.memoizedState=u.baseState=d),d}function gi(e,t,n){return mi(ui(),e,t,n)}function hi(e){var t=si();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:e}).dispatch=Ri.bind(null,ei,e),[t.memoizedState,e]}function bi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=ei.updateQueue)?(t={lastEffect:null},ei.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function vi(e){return e={current:e},si().memoizedState=e}function yi(){return ui().memoizedState}function wi(e,t,n,r){var a=si();ei.flags|=e,a.memoizedState=bi(1|t,n,void 0,void 0===r?null:r)}function ki(e,t,n,r){var a=ui();r=void 0===r?null:r;var o=void 0;if(null!==ti){var i=ti.memoizedState;if(o=i.destroy,null!==r&&ii(r,i.deps))return void bi(t,n,o,r)}ei.flags|=e,a.memoizedState=bi(1|t,n,o,r)}function Ei(e,t){return wi(516,4,e,t)}function Si(e,t){return ki(516,4,e,t)}function xi(e,t){return ki(4,2,e,t)}function Ci(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function _i(e,t,n){return n=null!=n?n.concat([e]):null,ki(4,2,Ci.bind(null,t,e),n)}function Ti(){}function Ai(e,t){var n=ui();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ii(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Li(e,t){var n=ui();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ii(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Pi(e,t){var n=Ga();Za(98>n?98:n,(function(){e(!0)})),Za(97<n?97:n,(function(){var n=Xo.transition;Xo.transition=1;try{e(!1),t()}finally{Xo.transition=n}}))}function Ri(e,t,n){var r=ps(),a=fs(e),o={lane:a,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?o.next=o:(o.next=i.next,i.next=o),t.pending=o,i=e.alternate,e===ei||null!==i&&i===ei)ai=ri=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(o.eagerReducer=i,o.eagerState=s,cr(s,l))return}catch(u){}ms(e,a,r)}}var Ni={readContext:io,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Oi={readContext:io,useCallback:function(e,t){return si().memoizedState=[e,void 0===t?null:t],e},useContext:io,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,Ci.bind(null,t,e),n)},useLayoutEffect:function(e,t){return wi(4,2,e,t)},useMemo:function(e,t){var n=si();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=si();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ri.bind(null,ei,e),[r.memoizedState,e]},useRef:vi,useState:hi,useDebugValue:Ti,useDeferredValue:function(e){var t=hi(e),n=t[0],r=t[1];return Ei((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=hi(!1),t=e[0];return vi(e=Pi.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=si();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},mi(r,e,t,n)},useOpaqueIdentifier:function(){if($o){var e=!1,t=function(e){return{$$typeof:D,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Kr++).toString(36))),Error(i(355))})),n=hi(t)[1];return 0==(2&ei.mode)&&(ei.flags|=516,bi(5,(function(){n("r:"+(Kr++).toString(36))}),void 0,null)),t}return hi(t="r:"+(Kr++).toString(36)),t},unstable_isNewReconciler:!1},Ii={readContext:io,useCallback:Ai,useContext:io,useEffect:Si,useImperativeHandle:_i,useLayoutEffect:xi,useMemo:Li,useReducer:di,useRef:yi,useState:function(){return di(ci)},useDebugValue:Ti,useDeferredValue:function(e){var t=di(ci),n=t[0],r=t[1];return Si((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=di(ci)[0];return[yi().current,e]},useMutableSource:gi,useOpaqueIdentifier:function(){return di(ci)[0]},unstable_isNewReconciler:!1},Di={readContext:io,useCallback:Ai,useContext:io,useEffect:Si,useImperativeHandle:_i,useLayoutEffect:xi,useMemo:Li,useReducer:pi,useRef:yi,useState:function(){return pi(ci)},useDebugValue:Ti,useDeferredValue:function(e){var t=pi(ci),n=t[0],r=t[1];return Si((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=pi(ci)[0];return[yi().current,e]},useMutableSource:gi,useOpaqueIdentifier:function(){return pi(ci)[0]},unstable_isNewReconciler:!1},Mi=k.ReactCurrentOwner,Fi=!1;function Bi(e,t,n,r){t.child=null===e?Ao(t,null,n,r):To(t,e.child,n,r)}function ji(e,t,n,r,a){n=n.render;var o=t.ref;return oo(t,a),r=li(e,t,n,r,o,a),null===e||Fi?(t.flags|=1,Bi(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,ol(e,t,a))}function zi(e,t,n,r,a,o){if(null===e){var i=n.type;return"function"!=typeof i||Hs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Vs(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,Ui(e,t,i,r,a,o))}return i=e.child,0==(a&o)&&(a=i.memoizedProps,(n=null!==(n=n.compare)?n:pr)(a,r)&&e.ref===t.ref)?ol(e,t,o):(t.flags|=1,(e=Zs(i,r)).ref=t.ref,e.return=t,t.child=e)}function Ui(e,t,n,r,a,o){if(null!==e&&pr(e.memoizedProps,r)&&e.ref===t.ref){if(Fi=!1,0==(o&a))return t.lanes=e.lanes,ol(e,t,o);0!=(16384&e.flags)&&(Fi=!0)}return Gi(e,t,n,r,o)}function $i(e,t,n){var r=t.pendingProps,a=r.children,o=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},Es(t,n);else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},Es(t,e),null;t.memoizedState={baseLanes:0},Es(t,null!==o?o.baseLanes:n)}else null!==o?(r=o.baseLanes|n,t.memoizedState=null):r=n,Es(t,r);return Bi(e,t,a,n),t.child}function qi(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Gi(e,t,n,r,a){var o=ba(n)?ga:fa.current;return o=ha(t,o),oo(t,a),n=li(e,t,n,r,o,a),null===e||Fi?(t.flags|=1,Bi(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,ol(e,t,a))}function Hi(e,t,n,r,a){if(ba(n)){var o=!0;ka(t)}else o=!1;if(oo(t,a),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),wo(t,n,r),Eo(t,n,r,a),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=io(u):u=ha(t,u=ba(n)?ga:fa.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&ko(t,i,r,u),lo=!1;var p=t.memoizedState;i.state=p,mo(t,r,i,a),s=t.memoizedState,l!==r||p!==s||ma.current||lo?("function"==typeof c&&(bo(t,n,c,r),s=t.memoizedState),(l=lo||yo(t,n,l,r,p,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,uo(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Qa(t.type,l),i.props=u,d=t.pendingProps,p=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=io(s):s=ha(t,s=ba(n)?ga:fa.current);var f=n.getDerivedStateFromProps;(c="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||p!==s)&&ko(t,i,r,s),lo=!1,p=t.memoizedState,i.state=p,mo(t,r,i,a);var m=t.memoizedState;l!==d||p!==m||ma.current||lo?("function"==typeof f&&(bo(t,n,f,r),m=t.memoizedState),(u=lo||yo(t,n,u,r,p,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),r=!1)}return Zi(e,t,n,r,o,a)}function Zi(e,t,n,r,a,o){qi(e,t);var i=0!=(64&t.flags);if(!r&&!i)return a&&Ea(t,n,!1),ol(e,t,o);r=t.stateNode,Mi.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=To(t,e.child,null,o),t.child=To(t,null,l,o)):Bi(e,t,l,o),t.memoizedState=r.state,a&&Ea(t,n,!0),t.child}function Vi(e){var t=e.stateNode;t.pendingContext?ya(0,t.pendingContext,t.pendingContext!==t.context):t.context&&ya(0,t.context,!1),Io(e,t.containerInfo)}var Wi,Yi,Ki,Qi={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,a=t.pendingProps,o=Bo.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&o)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===a.fallback||!0===a.unstable_avoidThisFallback||(o|=1),da(Bo,1&o),null===e?(void 0!==a.fallback&&Ho(t),e=a.children,o=a.fallback,i?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Qi,e):"number"==typeof a.unstable_expectedLoadTime?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Qi,t.lanes=33554432,e):((n=Ys({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(a=tl(e,t,a.children,a.fallback,n),i=t.child,o=e.child.memoizedState,i.memoizedState=null===o?{baseLanes:n}:{baseLanes:o.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Qi,a):(n=el(e,t,a.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var a=e.mode,o=e.child;return t={mode:"hidden",children:t},0==(2&a)&&null!==o?(o.childLanes=0,o.pendingProps=t):o=Ys(t,a,0,null),n=Ws(n,a,r,null),o.return=e,n.return=e,o.sibling=n,e.child=o,n}function el(e,t,n,r){var a=e.child;return e=a.sibling,n=Zs(a,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,a){var o=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&o)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Zs(i,l),null!==e?r=Zs(e,r):(r=Ws(r,o,a,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ao(e.return,t)}function rl(e,t,n,r,a,o){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a,lastEffect:o}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=a,i.lastEffect=o)}function al(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(Bi(e,t,r.children,n),0!=(2&(r=Bo.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(da(Bo,r),0==(2&t.mode))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;null!==n;)null!==(e=n.alternate)&&null===jo(e)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),rl(t,!1,a,n,o,t.lastEffect);break;case"backwards":for(n=null,a=t.child,t.child=null;null!==a;){if(null!==(e=a.alternate)&&null===jo(e)){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}rl(t,!0,n,null,o,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function ol(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Ul|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Zs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Zs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!$o)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return ba(t.type)&&va(),null;case 3:return Do(),ca(ma),ca(fa),Ko(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Vo(t)?t.flags|=4:r.hydrate||(t.flags|=256)),null;case 5:Fo(t);var o=Oo(No.current);if(n=t.type,null!==e&&null!=t.stateNode)Yi(e,t,n,r),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Oo(Po.current),Vo(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Xr]=t,r[Jr]=l,n){case"dialog":Pr("cancel",r),Pr("close",r);break;case"iframe":case"object":case"embed":Pr("load",r);break;case"video":case"audio":for(e=0;e<_r.length;e++)Pr(_r[e],r);break;case"source":Pr("error",r);break;case"img":case"image":case"link":Pr("error",r),Pr("load",r);break;case"details":Pr("toggle",r);break;case"input":ee(r,l),Pr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Pr("invalid",r);break;case"textarea":se(r,l),Pr("invalid",r)}for(var u in xe(n,l),e=null,l)l.hasOwnProperty(u)&&(o=l[u],"children"===u?"string"==typeof o?r.textContent!==o&&(e=["children",o]):"number"==typeof o&&r.textContent!==""+o&&(e=["children",""+o]):s.hasOwnProperty(u)&&null!=o&&"onScroll"===u&&Pr("scroll",r));switch(n){case"input":K(r),re(r,l,!0);break;case"textarea":K(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=zr)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===o.nodeType?o:o.ownerDocument,e===de&&(e=fe(n)),e===de?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Xr]=t,e[Jr]=r,Wi(e,t),t.stateNode=e,u=Ce(n,r),n){case"dialog":Pr("cancel",e),Pr("close",e),o=r;break;case"iframe":case"object":case"embed":Pr("load",e),o=r;break;case"video":case"audio":for(o=0;o<_r.length;o++)Pr(_r[o],e);o=r;break;case"source":Pr("error",e),o=r;break;case"img":case"image":case"link":Pr("error",e),Pr("load",e),o=r;break;case"details":Pr("toggle",e),o=r;break;case"input":ee(e,r),o=J(e,r),Pr("invalid",e);break;case"option":o=oe(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=a({},r,{value:void 0}),Pr("invalid",e);break;case"textarea":se(e,r),o=le(e,r),Pr("invalid",e);break;default:o=r}xe(n,o);var c=o;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?Ee(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&be(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&ve(e,d):"number"==typeof d&&ve(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Pr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":K(e),re(e,r,!1);break;case"textarea":K(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+W(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=zr)}qr(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Ki(0,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Oo(No.current),Oo(Po.current),Vo(t)?(r=t.stateNode,n=t.memoizedProps,r[Xr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Xr]=t,t.stateNode=r)}return null;case 13:return ca(Bo),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Vo(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Bo.current)?0===Bl&&(Bl=3):(0!==Bl&&3!==Bl||(Bl=4),null===Ol||0==(134217727&Ul)&&0==(134217727&$l)||vs(Ol,Dl))),(r||n)&&(t.flags|=4),null);case 4:return Do(),null===e&&Nr(t.stateNode.containerInfo),null;case 10:return ro(t),null;case 19:if(ca(Bo),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Bl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=jo(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return da(Bo,1&Bo.current|2),t.child}e=e.sibling}null!==r.tail&&qa()>Zl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=jo(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!$o)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*qa()-r.renderingStartTime>Zl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=qa(),n.sibling=null,t=Bo.current,da(Bo,l?1&t|2:1&t),n):null;case 23:case 24:return Ss(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:ba(e.type)&&va();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Do(),ca(ma),ca(fa),Ko(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Fo(e),null;case 13:return ca(Bo),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return ca(Bo),null;case 4:return Do(),null;case 10:return ro(e),null;case 23:case 24:return Ss(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=Z(r),r=r.return}while(r);var a=n}catch(o){a="\nError generating stack: "+o.message+"\n"+o.stack}return{value:e,source:t,stack:a}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Wi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Yi=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,Oo(Po.current);var i,l=null;switch(n){case"input":o=J(e,o),r=J(e,r),l=[];break;case"option":o=oe(e,o),r=oe(e,r),l=[];break;case"select":o=a({},o,{value:void 0}),r=a({},r,{value:void 0}),l=[];break;case"textarea":o=le(e,o),r=le(e,r),l=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=zr)}for(d in xe(n,r),n=null,o)if(!r.hasOwnProperty(d)&&o.hasOwnProperty(d)&&null!=o[d])if("style"===d){var u=o[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=o?o[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Pr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===D?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Ki=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function pl(e,t,n){(n=co(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Kl||(Kl=!0,Ql=r),cl(0,t)},n}function fl(e,t,n){(n=co(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var a=t.value;n.payload=function(){return cl(0,t),r(a)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xl?Xl=new Set([this]):Xl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function gl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function hl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Qa(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vr(t.stateNode.containerInfo))}throw Error(i(163))}function bl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var a=e;r=a.next,0!=(4&(a=a.tag))&&0!=(1&a)&&(Fs(n,e),Ms(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Qa(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&go(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}go(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&qr(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function vl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var a=n.memoizedProps.style;a=null!=a&&a.hasOwnProperty("display")?a.display:null,r.style.display=ke("display",a)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function yl(e,t){if(xa&&"function"==typeof xa.onCommitFiberUnmount)try{xa.onCommitFiberUnmount(Sa,t)}catch(o){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,a=r.destroy;if(r=r.tag,void 0!==a)if(0!=(4&r))Fs(t,n);else{r=t;try{a()}catch(o){zs(r,o)}}n=n.next}while(n!==e)}break;case 1:if(gl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(o){zs(t,o)}break;case 5:gl(t);break;case 4:Cl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function kl(e){return 5===e.tag||3===e.tag||4===e.tag}function El(e){e:{for(var t=e.return;null!==t;){if(kl(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ve(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||kl(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?Sl(e,n,t):xl(e,n,t)}function Sl(e,t,n){var r=e.tag,a=5===r||6===r;if(a)e=a?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=zr));else if(4!==r&&null!==(e=e.child))for(Sl(e,t,n),e=e.sibling;null!==e;)Sl(e,t,n),e=e.sibling}function xl(e,t,n){var r=e.tag,a=5===r||6===r;if(a)e=a?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(xl(e,t,n),e=e.sibling;null!==e;)xl(e,t,n),e=e.sibling}function Cl(e,t){for(var n,r,a=t,o=!1;;){if(!o){o=a.return;e:for(;;){if(null===o)throw Error(i(160));switch(n=o.stateNode,o.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}o=o.return}o=!0}if(5===a.tag||6===a.tag){e:for(var l=e,s=a,u=s;;)if(yl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=a.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(a.stateNode)}else if(4===a.tag){if(null!==a.child){n=a.stateNode.containerInfo,r=!0,a.child.return=a,a=a.child;continue}}else if(yl(e,a),null!==a.child){a.child.return=a,a=a.child;continue}if(a===t)break;for(;null===a.sibling;){if(null===a.return||a.return===t)return;4===(a=a.return).tag&&(o=!1)}a.sibling.return=a.return,a=a.sibling}}function _l(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var a=null!==e?e.memoizedProps:r;e=t.type;var o=t.updateQueue;if(t.updateQueue=null,null!==o){for(n[Jr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),Ce(e,a),t=Ce(e,r),a=0;a<o.length;a+=2){var l=o[a],s=o[a+1];"style"===l?Ee(n,s):"dangerouslySetInnerHTML"===l?be(n,s):"children"===l?ve(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(o=r.value)?ie(n,!!r.multiple,o,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Hl=qa(),vl(t.child,!0)),void Tl(t);case 19:return void Tl(t);case 23:case 24:return void vl(t,null!==t.memoizedState)}throw Error(i(163))}function Tl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=$s.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Al(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Ll=Math.ceil,Pl=k.ReactCurrentDispatcher,Rl=k.ReactCurrentOwner,Nl=0,Ol=null,Il=null,Dl=0,Ml=0,Fl=ua(0),Bl=0,jl=null,zl=0,Ul=0,$l=0,ql=0,Gl=null,Hl=0,Zl=1/0;function Vl(){Zl=qa()+500}var Wl,Yl=null,Kl=!1,Ql=null,Xl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],as=null,os=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function ps(){return 0!=(48&Nl)?qa():-1!==ls?ls:ls=qa()}function fs(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Ga()?1:2;if(0===ss&&(ss=zl),0!==Ka.transition){0!==us&&(us=null!==Gl?Gl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Ga(),0!=(4&Nl)&&98===e?e=zt(12,ss):e=zt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<os)throw os=0,is=null,Error(i(185));if(null===(e=gs(e,t)))return null;qt(e,t,n),e===Ol&&($l|=t,4===Bl&&vs(e,Dl));var r=Ga();1===t?0!=(8&Nl)&&0==(48&Nl)?ys(e):(hs(e,n),0===Nl&&(Vl(),Wa())):(0==(4&Nl)||98!==r&&99!==r||(null===as?as=new Set([e]):as.add(e)),hs(e,n)),Gl=e}function gs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function hs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,a=e.pingedLanes,o=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Gt(l),u=1<<s,c=o[s];if(-1===c){if(0==(u&r)||0!=(u&a)){c=t,Ft(u);var d=Mt;o[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Bt(e,e===Ol?Dl:0),t=Mt,0===r)null!==n&&(n!==Fa&&Ta(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Fa&&Ta(n)}15===t?(n=ys.bind(null,e),null===ja?(ja=[n],za=_a(Na,Ya)):ja.push(n),n=Fa):14===t?n=Va(99,ys.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Va(n,bs.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function bs(e){if(ls=-1,us=ss=0,0!=(48&Nl))throw Error(i(327));var t=e.callbackNode;if(Ds()&&e.callbackNode!==t)return null;var n=Bt(e,e===Ol?Dl:0);if(0===n)return null;var r=n,a=Nl;Nl|=16;var o=_s();for(Ol===e&&Dl===r||(Vl(),xs(e,r));;)try{Ls();break}catch(s){Cs(e,s)}if(no(),Pl.current=o,Nl=a,null!==Il?r=0:(Ol=null,Dl=0,r=Bl),0!=(zl&$l))xs(e,0);else if(0!==r){if(2===r&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(n=jt(e))&&(r=Ts(e,n))),1===r)throw t=jl,xs(e,0),vs(e,n),hs(e,qa()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ns(e);break;case 3:if(vs(e,n),(62914560&n)===n&&10<(r=Hl+500-qa())){if(0!==Bt(e,0))break;if(((a=e.suspendedLanes)&n)!==n){ps(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=Hr(Ns.bind(null,e),r);break}Ns(e);break;case 4:if(vs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,a=-1;0<n;){var l=31-Gt(n);o=1<<l,(l=r[l])>a&&(a=l),n&=~o}if(n=a,10<(n=(120>(n=qa()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Ll(n/1960))-n)){e.timeoutHandle=Hr(Ns.bind(null,e),n);break}Ns(e);break;default:throw Error(i(329))}}return hs(e,qa()),e.callbackNode===t?bs.bind(null,e):null}function vs(e,t){for(t&=~ql,t&=~$l,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Gt(t),r=1<<n;e[n]=-1,t&=~r}}function ys(e){if(0!=(48&Nl))throw Error(i(327));if(Ds(),e===Ol&&0!=(e.expiredLanes&Dl)){var t=Dl,n=Ts(e,t);0!=(zl&$l)&&(n=Ts(e,t=Bt(e,t)))}else n=Ts(e,t=Bt(e,0));if(0!==e.tag&&2===n&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(t=jt(e))&&(n=Ts(e,t))),1===n)throw n=jl,xs(e,0),vs(e,t),hs(e,qa()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ns(e),hs(e,qa()),null}function ws(e,t){var n=Nl;Nl|=1;try{return e(t)}finally{0===(Nl=n)&&(Vl(),Wa())}}function ks(e,t){var n=Nl;Nl&=-2,Nl|=8;try{return e(t)}finally{0===(Nl=n)&&(Vl(),Wa())}}function Es(e,t){da(Fl,Ml),Ml|=t,zl|=t}function Ss(){Ml=Fl.current,ca(Fl)}function xs(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Zr(n)),null!==Il)for(n=Il.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&va();break;case 3:Do(),ca(ma),ca(fa),Ko();break;case 5:Fo(r);break;case 4:Do();break;case 13:case 19:ca(Bo);break;case 10:ro(r);break;case 23:case 24:Ss()}n=n.return}Ol=e,Il=Zs(e.current,null),Dl=Ml=zl=t,Bl=0,jl=null,ql=$l=Ul=0}function Cs(e,t){for(;;){var n=Il;try{if(no(),Qo.current=Ni,ri){for(var r=ei.memoizedState;null!==r;){var a=r.queue;null!==a&&(a.pending=null),r=r.next}ri=!1}if(Jo=0,ni=ti=ei=null,ai=!1,Rl.current=null,null===n||null===n.return){Bl=1,jl=t,Il=null;break}e:{var o=e,i=n.return,l=n,s=t;if(t=Dl,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Bo.current),p=i;do{var f;if(f=13===p.tag){var m=p.memoizedState;if(null!==m)f=null!==m.dehydrated;else{var g=p.memoizedProps;f=void 0!==g.fallback&&(!0!==g.unstable_avoidThisFallback||!d)}}if(f){var h=p.updateQueue;if(null===h){var b=new Set;b.add(u),p.updateQueue=b}else h.add(u);if(0==(2&p.mode)){if(p.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var v=co(-1,1);v.tag=2,po(l,v)}l.lanes|=1;break e}s=void 0,l=t;var y=o.pingCache;if(null===y?(y=o.pingCache=new dl,s=new Set,y.set(u,s)):void 0===(s=y.get(u))&&(s=new Set,y.set(u,s)),!s.has(l)){s.add(l);var w=Us.bind(null,o,u,l);u.then(w,w)}p.flags|=4096,p.lanes=t;break e}p=p.return}while(null!==p);s=Error((V(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Bl&&(Bl=2),s=ul(s,l),p=i;do{switch(p.tag){case 3:o=s,p.flags|=4096,t&=-t,p.lanes|=t,fo(p,pl(0,o,t));break e;case 1:o=s;var k=p.type,E=p.stateNode;if(0==(64&p.flags)&&("function"==typeof k.getDerivedStateFromError||null!==E&&"function"==typeof E.componentDidCatch&&(null===Xl||!Xl.has(E)))){p.flags|=4096,t&=-t,p.lanes|=t,fo(p,fl(p,o,t));break e}}p=p.return}while(null!==p)}Rs(n)}catch(S){t=S,Il===n&&null!==n&&(Il=n=n.return);continue}break}}function _s(){var e=Pl.current;return Pl.current=Ni,null===e?Ni:e}function Ts(e,t){var n=Nl;Nl|=16;var r=_s();for(Ol===e&&Dl===t||xs(e,t);;)try{As();break}catch(a){Cs(e,a)}if(no(),Nl=n,Pl.current=r,null!==Il)throw Error(i(261));return Ol=null,Dl=0,Bl}function As(){for(;null!==Il;)Ps(Il)}function Ls(){for(;null!==Il&&!Aa();)Ps(Il)}function Ps(e){var t=Wl(e.alternate,e,Ml);e.memoizedProps=e.pendingProps,null===t?Rs(e):Il=t,Rl.current=null}function Rs(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Ml)))return void(Il=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Ml)||0==(4&n.mode)){for(var r=0,a=n.child;null!==a;)r|=a.lanes|a.childLanes,a=a.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(Il=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Il=t);Il=t=e}while(null!==t);0===Bl&&(Bl=5)}function Ns(e){var t=Ga();return Za(99,Os.bind(null,e,t)),null}function Os(e,t){do{Ds()}while(null!==es);if(0!=(48&Nl))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,a=r,o=e.pendingLanes&~a;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=a,e.mutableReadLanes&=a,e.entangledLanes&=a,a=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<o;){var u=31-Gt(o),c=1<<u;a[u]=0,l[u]=-1,s[u]=-1,o&=~c}if(null!==as&&0==(24&r)&&as.has(e)&&as.delete(e),e===Ol&&(Il=Ol=null,Dl=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(a=Nl,Nl|=32,Rl.current=null,Ur=Yt,br(l=hr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,o=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(_){s=null;break e}var d=0,p=-1,f=-1,m=0,g=0,h=l,b=null;t:for(;;){for(var v;h!==s||0!==o&&3!==h.nodeType||(p=d+o),h!==u||0!==c&&3!==h.nodeType||(f=d+c),3===h.nodeType&&(d+=h.nodeValue.length),null!==(v=h.firstChild);)b=h,h=v;for(;;){if(h===l)break t;if(b===s&&++m===o&&(p=d),b===u&&++g===c&&(f=d),null!==(v=h.nextSibling))break;b=(h=b).parentNode}h=v}s=-1===p||-1===f?null:{start:p,end:f}}else s=null;s=s||{start:0,end:0}}else s=null;$r={focusedElem:l,selectionRange:s},Yt=!1,cs=null,ds=!1,Yl=r;do{try{Is()}catch(_){if(null===Yl)throw Error(i(330));zs(Yl,_),Yl=Yl.nextEffect}}while(null!==Yl);cs=null,Yl=r;do{try{for(l=e;null!==Yl;){var y=Yl.flags;if(16&y&&ve(Yl.stateNode,""),128&y){var w=Yl.alternate;if(null!==w){var k=w.ref;null!==k&&("function"==typeof k?k(null):k.current=null)}}switch(1038&y){case 2:El(Yl),Yl.flags&=-3;break;case 6:El(Yl),Yl.flags&=-3,_l(Yl.alternate,Yl);break;case 1024:Yl.flags&=-1025;break;case 1028:Yl.flags&=-1025,_l(Yl.alternate,Yl);break;case 4:_l(Yl.alternate,Yl);break;case 8:Cl(l,s=Yl);var E=s.alternate;wl(s),null!==E&&wl(E)}Yl=Yl.nextEffect}}catch(_){if(null===Yl)throw Error(i(330));zs(Yl,_),Yl=Yl.nextEffect}}while(null!==Yl);if(k=$r,w=hr(),y=k.focusedElem,l=k.selectionRange,w!==y&&y&&y.ownerDocument&&gr(y.ownerDocument.documentElement,y)){null!==l&&br(y)&&(w=l.start,void 0===(k=l.end)&&(k=w),"selectionStart"in y?(y.selectionStart=w,y.selectionEnd=Math.min(k,y.value.length)):(k=(w=y.ownerDocument||document)&&w.defaultView||window).getSelection&&(k=k.getSelection(),s=y.textContent.length,E=Math.min(l.start,s),l=void 0===l.end?E:Math.min(l.end,s),!k.extend&&E>l&&(s=l,l=E,E=s),s=mr(y,E),o=mr(y,l),s&&o&&(1!==k.rangeCount||k.anchorNode!==s.node||k.anchorOffset!==s.offset||k.focusNode!==o.node||k.focusOffset!==o.offset)&&((w=w.createRange()).setStart(s.node,s.offset),k.removeAllRanges(),E>l?(k.addRange(w),k.extend(o.node,o.offset)):(w.setEnd(o.node,o.offset),k.addRange(w))))),w=[];for(k=y;k=k.parentNode;)1===k.nodeType&&w.push({element:k,left:k.scrollLeft,top:k.scrollTop});for("function"==typeof y.focus&&y.focus(),y=0;y<w.length;y++)(k=w[y]).element.scrollLeft=k.left,k.element.scrollTop=k.top}Yt=!!Ur,$r=Ur=null,e.current=n,Yl=r;do{try{for(y=e;null!==Yl;){var S=Yl.flags;if(36&S&&bl(y,Yl.alternate,Yl),128&S){w=void 0;var x=Yl.ref;if(null!==x){var C=Yl.stateNode;Yl.tag,w=C,"function"==typeof x?x(w):x.current=w}}Yl=Yl.nextEffect}}catch(_){if(null===Yl)throw Error(i(330));zs(Yl,_),Yl=Yl.nextEffect}}while(null!==Yl);Yl=null,Ba(),Nl=a}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Yl=r;null!==Yl;)t=Yl.nextEffect,Yl.nextEffect=null,8&Yl.flags&&((S=Yl).sibling=null,S.stateNode=null),Yl=t;if(0===(r=e.pendingLanes)&&(Xl=null),1===r?e===is?os++:(os=0,is=e):os=0,n=n.stateNode,xa&&"function"==typeof xa.onCommitFiberRoot)try{xa.onCommitFiberRoot(Sa,n,void 0,64==(64&n.current.flags))}catch(_){}if(hs(e,qa()),Kl)throw Kl=!1,e=Ql,Ql=null,e;return 0!=(8&Nl)||Wa(),null}function Is(){for(;null!==Yl;){var e=Yl.alternate;ds||null===cs||(0!=(8&Yl.flags)?et(Yl,cs)&&(ds=!0):13===Yl.tag&&Al(e,Yl)&&et(Yl,cs)&&(ds=!0));var t=Yl.flags;0!=(256&t)&&hl(e,Yl),0==(512&t)||Jl||(Jl=!0,Va(97,(function(){return Ds(),null}))),Yl=Yl.nextEffect}}function Ds(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Za(e,Bs)}return!1}function Ms(e,t){ns.push(t,e),Jl||(Jl=!0,Va(97,(function(){return Ds(),null})))}function Fs(e,t){rs.push(t,e),Jl||(Jl=!0,Va(97,(function(){return Ds(),null})))}function Bs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Nl))throw Error(i(331));var t=Nl;Nl|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var a=n[r],o=n[r+1],l=a.destroy;if(a.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===o)throw Error(i(330));zs(o,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){a=n[r],o=n[r+1];try{var s=a.create;a.destroy=s()}catch(u){if(null===o)throw Error(i(330));zs(o,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Nl=t,Wa(),!0}function js(e,t,n){po(e,t=pl(0,t=ul(n,t),1)),t=ps(),null!==(e=gs(e,1))&&(qt(e,1,t),hs(e,t))}function zs(e,t){if(3===e.tag)js(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){js(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r))){var a=fl(n,e=ul(t,e),1);if(po(n,a),a=ps(),null!==(n=gs(n,1)))qt(n,1,a),hs(n,a);else if("function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r)))try{r.componentDidCatch(t,e)}catch(o){}break}}n=n.return}}function Us(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=ps(),e.pingedLanes|=e.suspendedLanes&n,Ol===e&&(Dl&n)===n&&(4===Bl||3===Bl&&(62914560&Dl)===Dl&&500>qa()-Hl?xs(e,0):ql|=n),hs(e,t)}function $s(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Ga()?1:2:(0===ss&&(ss=zl),0===(t=Ut(62914560&~ss))&&(t=4194304))),n=ps(),null!==(e=gs(e,t))&&(qt(e,t,n),hs(e,n))}function qs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Gs(e,t,n,r){return new qs(e,t,n,r)}function Hs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Zs(e,t){var n=e.alternate;return null===n?((n=Gs(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Vs(e,t,n,r,a,o){var l=2;if(r=e,"function"==typeof e)Hs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case x:return Ws(n.children,a,o,t);case M:l=8,a|=16;break;case C:l=8,a|=1;break;case _:return(e=Gs(12,n,t,8|a)).elementType=_,e.type=_,e.lanes=o,e;case P:return(e=Gs(13,n,t,a)).type=P,e.elementType=P,e.lanes=o,e;case R:return(e=Gs(19,n,t,a)).elementType=R,e.lanes=o,e;case F:return Ys(n,a,o,t);case B:return(e=Gs(24,n,t,a)).elementType=B,e.lanes=o,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:l=10;break e;case A:l=9;break e;case L:l=11;break e;case N:l=14;break e;case O:l=16,r=null;break e;case I:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Gs(l,n,t,a)).elementType=e,t.type=r,t.lanes=o,t}function Ws(e,t,n,r){return(e=Gs(7,e,r,t)).lanes=n,e}function Ys(e,t,n,r){return(e=Gs(23,e,r,t)).elementType=F,e.lanes=n,e}function Ks(e,t,n){return(e=Gs(6,e,null,t)).lanes=n,e}function Qs(e,t,n){return(t=Gs(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=$t(0),this.expirationTimes=$t(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=$t(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:S,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}function eu(e,t,n,r){var a=t.current,o=ps(),l=fs(a);e:if(n){t:{if(Ke(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(ba(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(ba(u)){n=wa(n,u,s);break e}}n=s}else n=pa;return null===t.context?t.context=n:t.pendingContext=n,(t=co(o,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),po(a,t),ms(a,l,o),l}function tu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function nu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function ru(e,t){nu(e,t),(e=e.alternate)&&nu(e,t)}function au(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xs(e,t,null!=n&&!0===n.hydrate),t=Gs(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,so(t),e[ea]=n.current,Nr(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var a=(t=r[e])._getVersion;a=a(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,a]:n.mutableSourceEagerHydrationData.push(t,a)}this._internalRoot=n}function ou(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function iu(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o._internalRoot;if("function"==typeof a){var l=a;a=function(){var e=tu(i);l.call(e)}}eu(t,i,e,a)}else{if(o=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new au(e,0,t?{hydrate:!0}:void 0)}(n,r),i=o._internalRoot,"function"==typeof a){var s=a;a=function(){var e=tu(i);s.call(e)}}ks((function(){eu(t,i,e,a)}))}return tu(i)}function lu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ou(t))throw Error(i(200));return Js(e,t,null,n)}Wl=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||ma.current)Fi=!0;else{if(0==(n&r)){switch(Fi=!1,t.tag){case 3:Vi(t),Wo();break;case 5:Mo(t);break;case 1:ba(t.type)&&ka(t);break;case 4:Io(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var a=t.type._context;da(Xa,a._currentValue),a._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(da(Bo,1&Bo.current),null!==(t=ol(e,t,n))?t.sibling:null);da(Bo,1&Bo.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return al(e,t,n);t.flags|=64}if(null!==(a=t.memoizedState)&&(a.rendering=null,a.tail=null,a.lastEffect=null),da(Bo,Bo.current),r)break;return null;case 23:case 24:return t.lanes=0,$i(e,t,n)}return ol(e,t,n)}Fi=0!=(16384&e.flags)}else Fi=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,a=ha(t,fa.current),oo(t,n),a=li(null,t,r,e,a,n),t.flags|=1,"object"==typeof a&&null!==a&&"function"==typeof a.render&&void 0===a.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,ba(r)){var o=!0;ka(t)}else o=!1;t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,so(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&bo(t,r,l,e),a.updater=vo,t.stateNode=a,a._reactInternals=t,Eo(t,r,e,n),t=Zi(null,t,r,!0,o,n)}else t.tag=0,Bi(null,t,a,n),t=t.child;return t;case 16:a=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,a=(o=a._init)(a._payload),t.type=a,o=t.tag=function(e){if("function"==typeof e)return Hs(e)?1:0;if(null!=e){if((e=e.$$typeof)===L)return 11;if(e===N)return 14}return 2}(a),e=Qa(a,e),o){case 0:t=Gi(null,t,a,e,n);break e;case 1:t=Hi(null,t,a,e,n);break e;case 11:t=ji(null,t,a,e,n);break e;case 14:t=zi(null,t,a,Qa(a.type,e),r,n);break e}throw Error(i(306,a,""))}return t;case 0:return r=t.type,a=t.pendingProps,Gi(e,t,r,a=t.elementType===r?a:Qa(r,a),n);case 1:return r=t.type,a=t.pendingProps,Hi(e,t,r,a=t.elementType===r?a:Qa(r,a),n);case 3:if(Vi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,a=null!==(a=t.memoizedState)?a.element:null,uo(e,t),mo(t,r,null,n),(r=t.memoizedState.element)===a)Wo(),t=ol(e,t,n);else{if((o=(a=t.stateNode).hydrate)&&(Uo=Wr(t.stateNode.containerInfo.firstChild),zo=t,o=$o=!0),o){if(null!=(e=a.mutableSourceEagerHydrationData))for(a=0;a<e.length;a+=2)(o=e[a])._workInProgressVersionPrimary=e[a+1],Yo.push(o);for(n=Ao(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Bi(e,t,r,n),Wo();t=t.child}return t;case 5:return Mo(t),null===e&&Ho(t),r=t.type,a=t.pendingProps,o=null!==e?e.memoizedProps:null,l=a.children,Gr(r,a)?l=null:null!==o&&Gr(r,o)&&(t.flags|=16),qi(e,t),Bi(e,t,l,n),t.child;case 6:return null===e&&Ho(t),null;case 13:return Xi(e,t,n);case 4:return Io(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=To(t,null,r,n):Bi(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,ji(e,t,r,a=t.elementType===r?a:Qa(r,a),n);case 7:return Bi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Bi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,a=t.pendingProps,l=t.memoizedProps,o=a.value;var s=t.type._context;if(da(Xa,s._currentValue),s._currentValue=o,null!==l)if(s=l.value,0===(o=cr(s,o)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,o):1073741823))){if(l.children===a.children&&!ma.current){t=ol(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&o)){1===s.tag&&((c=co(-1,n&-n)).tag=2,po(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),ao(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Bi(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=(o=t.pendingProps).children,oo(t,n),r=r(a=io(a,o.unstable_observedBits)),t.flags|=1,Bi(e,t,r,n),t.child;case 14:return o=Qa(a=t.type,t.pendingProps),zi(e,t,a,o=Qa(a.type,o),r,n);case 15:return Ui(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Qa(r,a),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,ba(r)?(e=!0,ka(t)):e=!1,oo(t,n),wo(t,r,a),Eo(t,r,a,n),Zi(null,t,r,!0,e,n);case 19:return al(e,t,n);case 23:case 24:return $i(e,t,n)}throw Error(i(156,t.tag))},au.prototype.render=function(e){eu(e,this._internalRoot,null,null)},au.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;eu(null,e,null,(function(){t[ea]=null}))},tt=function(e){13===e.tag&&(ms(e,4,ps()),ru(e,4))},nt=function(e){13===e.tag&&(ms(e,67108864,ps()),ru(e,67108864))},rt=function(e){if(13===e.tag){var t=ps(),n=fs(e);ms(e,n,t),ru(e,n)}},at=function(e,t){return t()},Te=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=oa(r);if(!a)throw Error(i(90));Q(r),ne(r,a)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Oe=ws,Ie=function(e,t,n,r,a){var o=Nl;Nl|=4;try{return Za(98,e.bind(null,t,n,r,a))}finally{0===(Nl=o)&&(Vl(),Wa())}},De=function(){0==(49&Nl)&&(function(){if(null!==as){var e=as;as=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,hs(e,qa())}))}Wa()}(),Ds())},Me=function(e,t){var n=Nl;Nl|=2;try{return e(t)}finally{0===(Nl=n)&&(Vl(),Wa())}};var su={Events:[ra,aa,oa,Re,Ne,Ds,{current:!1}]},uu={findFiberByHostInstance:na,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},cu={bundleType:uu.bundleType,version:uu.version,rendererPackageName:uu.rendererPackageName,rendererConfig:uu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:k.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Je(e))?null:e.stateNode},findFiberByHostInstance:uu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var du=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!du.isDisabled&&du.supportsFiber)try{Sa=du.inject(cu),xa=du}catch(he){}}t.hydrate=function(e,t,n){if(!ou(t))throw Error(i(200));return iu(null,e,t,!0,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,a="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!o(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!o(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(a&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!o(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return o(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>H,ql:()=>J});var r=n(7294),a=n(5697),o=n.n(a),i=n(9590),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function g(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t.indexOf(n=o[r])>=0||(a[n]=e[n]);return a}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(h).map((function(e){return h[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},E=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},x=function(e){var t=S(e,h.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},C=function(e){return S(e,"onChangeClientState")||function(){}},_=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[h.BASE]})).map((function(e){return e[h.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a<r.length;a+=1){var o=r[a].toLowerCase();if(-1!==e.indexOf(o)&&n[o])return t.concat(n)}return t}),[])},A=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var a={};n.filter((function(e){for(var n,o=Object.keys(e),i=0;i<o.length;i+=1){var l=o[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),a[n]||(a[n]={}),!r[n][u]&&(a[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var o=Object.keys(a),i=0;i<o.length;i+=1){var l=o[i],s=p({},r[l],a[l]);r[l]=s}return e}),[]).reverse()},L=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},P=function(e){return Array.isArray(e)?e.join(""):e},R=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},N=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},O=[h.NOSCRIPT,h.SCRIPT,h.STYLE],I=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},D=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},M=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[k[n]||n]=e[n],t}),t)},F=function(e,t){return t.map((function(t,n){var a,o=((a={key:n})["data-rh"]=!0,a);return Object.keys(t).forEach((function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[n]=t[e]})),r.createElement(e,o)}))},B=function(e,t,n){switch(e){case h.TITLE:return{toComponent:function(){return n=t.titleAttributes,(a={key:e=t.title})["data-rh"]=!0,o=M(n,a),[r.createElement(h.TITLE,o,e)];var e,n,a,o},toString:function(){return function(e,t,n,r){var a=D(n),o=P(t);return a?"<"+e+' data-rh="true" '+a+">"+I(o,r)+"</"+e+">":"<"+e+' data-rh="true">'+I(o,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return M(t)},toString:function(){return D(t)}};default:return{toComponent:function(){return F(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+I(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===O.indexOf(e);return t+"<"+e+' data-rh="true" '+a+(i?"/>":">"+o+"</"+e+">")}),"")}(e,t,n)}}}},j=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,a=R(e.metaTags,y),o=R(t,b),i=R(n,v);return{priorityMethods:{toComponent:function(){return[].concat(F(h.META,a.priority),F(h.LINK,o.priority),F(h.SCRIPT,i.priority))},toString:function(){return B(h.META,a.priority,r)+" "+B(h.LINK,o.priority,r)+" "+B(h.SCRIPT,i.priority,r)}},metaTags:a.default,linkTags:o.default,scriptTags:i.default}}(e);f=m.priorityMethods,c=m.linkTags,d=m.metaTags,p=m.scriptTags}return{priority:f,base:B(h.BASE,t,r),bodyAttributes:B("bodyAttributes",n,r),htmlAttributes:B("htmlAttributes",a,r),link:B(h.LINK,c,r),meta:B(h.META,d,r),noscript:B(h.NOSCRIPT,o,r),script:B(h.SCRIPT,p,r),style:B(h.STYLE,i,r),title:B(h.TITLE,{title:s,titleAttributes:u},r)}},z=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=j({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),q=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),G="undefined"!=typeof document,H=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);H.canUseDOM=G,H.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},H.defaultProps={context:{}},H.displayName="HelmetProvider";var Z=function(e,t){var n,r=document.head||document.querySelector(h.HEAD),a=r.querySelectorAll(e+"[data-rh]"),o=[].slice.call(a),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&("innerHTML"===a?r.innerHTML=t.innerHTML:"cssText"===a?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(a,void 0===t[a]?"":t[a]));r.setAttribute("data-rh","true"),o.some((function(e,t){return n=t,r.isEqualNode(e)}))?o.splice(n,1):i.push(r)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:o,newTags:i}},V=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),a=r?r.split(","):[],o=[].concat(a),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===a.indexOf(s)&&a.push(s);var c=o.indexOf(s);-1!==c&&o.splice(c,1)}for(var d=o.length-1;d>=0;d-=1)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},W=function(e,t){var n=e.baseTag,r=e.htmlAttributes,a=e.linkTags,o=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;V(h.BODY,e.bodyAttributes),V(h.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=P(e)),V(h.TITLE,t)}(c,d);var p={baseTag:Z(h.BASE,n),linkTags:Z(h.LINK,a),metaTags:Z(h.META,o),noscriptTags:Z(h.NOSCRIPT,i),scriptTags:Z(h.SCRIPT,s),styleTags:Z(h.STYLE,u)},f={},m={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(m[e]=p[e].oldTags)})),t&&t(),l(e,f,m)},Y=null,K=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,a=null,o=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:_("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:_("htmlAttributes",e),linkTags:A(h.LINK,["rel","href"],e),metaTags:A(h.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:A(h.NOSCRIPT,["innerHTML"],e),onChangeClientState:C(e),scriptTags:A(h.SCRIPT,["src","innerHTML"],e),styleTags:A(h.STYLE,["cssText"],e),title:x(e),titleAttributes:_("titleAttributes",e),prioritizeSeoTags:L(e,"prioritizeSeoTags")});H.canUseDOM?(t=o,Y&&cancelAnimationFrame(Y),t.defer?Y=requestAnimationFrame((function(){W(t,(function(){Y=null}))})):(W(t),Y=null)):j&&(a=j(o)),r(a)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);K.propTypes={context:q.isRequired},K.displayName="HelmetDispatcher";var Q=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(N(this.props,"helmetData"),N(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case h.TITLE:return p({},a,((t={})[r.type]=i,t.titleAttributes=p({},o),t));case h.BODY:return p({},a,{bodyAttributes:p({},o)});case h.HTML:return p({},a,{htmlAttributes:p({},o)});default:return p({},a,((n={})[r.type]=p({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,a={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,o=r.children,i=g(r,Q),l=Object.keys(i).reduce((function(e,t){return e[E[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,o),s){case h.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:a=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:a,newChildProps:l,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(a,t)},n.render=function(){var e=this.props,t=e.children,n=g(e,X),a=p({},n),o=n.helmetData;return t&&(a=this.mapChildrenToProps(t,a)),!o||o instanceof U||(o=new U(o.context,o.instances)),o?r.createElement(K,p({},a,{context:o.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(K,p({},a,{context:e}))}))},t}(r.Component);J.propTypes={base:o().object,bodyAttributes:o().object,children:o().oneOfType([o().arrayOf(o().node),o().node]),defaultTitle:o().string,defer:o().bool,encodeSpecialCharacters:o().bool,htmlAttributes:o().object,link:o().arrayOf(o().object),meta:o().arrayOf(o().object),noscript:o().arrayOf(o().object),onChangeClientState:o().func,script:o().arrayOf(o().object),style:o().arrayOf(o().object),title:o().string,titleAttributes:o().object,titleTemplate:o().string,prioritizeSeoTags:o().bool,helmetData:o().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,a=n?Symbol.for("react.portal"):60106,o=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case o:case l:case i:case f:return e;default:switch(e=e&&e.$$typeof){case u:case p:case h:case g:case s:return e;default:return t}}case a:return t}}}function E(e){return k(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=p,t.Fragment=o,t.Lazy=h,t.Memo=g,t.Portal=a,t.Profiler=l,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return E(e)||k(e)===c},t.isConcurrentMode=E,t.isContextConsumer=function(e){return k(e)===u},t.isContextProvider=function(e){return k(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===o},t.isLazy=function(e){return k(e)===h},t.isMemo=function(e){return k(e)===g},t.isPortal=function(e){return k(e)===a},t.isProfiler=function(e){return k(e)===l},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===l||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===g||e.$$typeof===s||e.$$typeof===u||e.$$typeof===p||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(7294),s=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var a=d(e[r]);a.loading?t.loading=!0:(t.loaded[r]=a.loaded,t.error=a.error),n.push(a.promise),a.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),g=null;function h(){return g||(g=e(m.loader)),g.promise}return u.push(h),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return h()})),p=d=function(t){function n(n){var r;return o(a(a(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),g=e(m.loader),r._loadModule()})),h(),r.state={error:g.error,pastDelay:!1,timedOut:!1,loading:g.loading,loaded:g.loaded},r}r(n,t),n.preload=function(){return h()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),g.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:g.error,loaded:g.loaded,loading:g.loading}),e._clearTimeouts()};g.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),o(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),p}function g(e){return m(d,e)}g.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var h=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}o(h,"propTypes",{report:s.func.isRequired}),o(h,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),g.Capture=h,g.preloadAll=function(){return new Promise((function(e,t){b(u).then(e,t)}))},g.preloadReady=function(){return new Promise((function(e,t){b(c).then(e,e)}))},e.exports=g},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6775),a=n(7462),o=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var a=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return a&&(n.push({route:e,match:a}),e.routes&&i(e.routes,t,n)),a})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?o.createElement(r.rs,n,e.map((function(e,n){return o.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,a.Z)({},n,{},t,{route:e})):o.createElement(e.component,(0,a.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>c,rU:()=>h});var r=n(6775),a=n(5068),o=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(2177),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,a.Z)(t,e),t.prototype.render=function(){return o.createElement(r.F0,{history:this.history,children:this.props.children})},t}(o.Component);o.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},f=function(e){return e},m=o.forwardRef;void 0===m&&(m=f);var g=m((function(e,t){var n=e.innerRef,r=e.navigate,a=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{a&&a(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=f!==m&&t||n,o.createElement("a",c)}));var h=m((function(e,t){var n=e.component,a=void 0===n?g:n,c=e.replace,h=e.to,b=e.innerRef,v=(0,s.Z)(e,["component","replace","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=p(d(h,e.location),e.location),s=r?n.createHref(r):"",g=(0,l.Z)({},v,{href:s,navigate:function(){var t=d(h,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(c||r?n.replace:n.push)(t)}});return f!==m?g.ref=t||b:g.innerRef=b,o.createElement(a,g)}))})),b=function(e){return e},v=o.forwardRef;void 0===v&&(v=b);var y=v((function(e,t){var n=e["aria-current"],a=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,f=e.activeStyle,m=e.className,g=e.exact,y=e.isActive,w=e.location,k=e.sensitive,E=e.strict,S=e.style,x=e.to,C=e.innerRef,_=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=p(d(x,n),n),s=i.pathname,T=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),A=T?(0,r.LX)(n.pathname,{path:T,exact:g,sensitive:k,strict:E}):null,L=!!(y?y(A,n):A),P="function"==typeof m?m(L):m,R="function"==typeof S?S(L):S;L&&(P=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(P,c),R=(0,l.Z)({},R,f));var N=(0,l.Z)({"aria-current":L&&a||null,className:P,style:R,to:i},_);return b!==v?N.ref=t||C:N.innerRef=C,o.createElement(h,N)}))}))},6775:(e,t,n)=>{"use strict";n.d(t,{AW:()=>C,F0:()=>k,rs:()=>R,s6:()=>w,LX:()=>x,k6:()=>O,TH:()=>I});var r=n(5068),a=n(7294),o=n(9318),i=n(5697),l=n.n(i),s=1073741823,u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};function c(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(n,r){e=n,t.forEach((function(t){return t(e,r)}))}}}var d=a.createContext||function(e,t){var n,o,i="__create-react-context-"+function(){var e="__global_unique_id__";return u[e]=(u[e]||0)+1}()+"__",d=function(e){function n(){var t;return(t=e.apply(this,arguments)||this).emitter=c(t.props.value),t}(0,r.Z)(n,e);var a=n.prototype;return a.getChildContext=function(){var e;return(e={})[i]=this.emitter,e},a.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,a=e.value;((o=r)===(i=a)?0!==o||1/o==1/i:o!=o&&i!=i)?n=0:(n="function"==typeof t?t(r,a):s,0!==(n|=0)&&this.emitter.set(e.value,n))}var o,i},a.render=function(){return this.props.children},n}(a.Component);d.childContextTypes=((n={})[i]=l().object.isRequired,n);var p=function(t){function n(){var e;return(e=t.apply(this,arguments)||this).state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var a=n.prototype;return a.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?s:t},a.componentDidMount=function(){this.context[i]&&this.context[i].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?s:e},a.componentWillUnmount=function(){this.context[i]&&this.context[i].off(this.onUpdate)},a.getValue=function(){return this.context[i]?this.context[i].get():e},a.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(a.Component);return p.contextTypes=((o={})[i]=l().object,o),{Provider:d,Consumer:p}};const p=d;var f=n(2177),m=n(7462),g=n(9658),h=n.n(g),b=(n(9864),n(3366)),v=(n(8679),function(e){var t=p();return t.displayName=e,t}),y=v("Router-History"),w=v("Router"),k=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return a.createElement(w.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},a.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(a.Component);a.Component;a.Component;var E={},S=0;function x(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,a=n.exact,o=void 0!==a&&a,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=E[n]||(E[n]={});if(r[e])return r[e];var a=[],o={regexp:h()(e,a,t),keys:a};return S<1e4&&(r[e]=o,S++),o}(n,{end:o,strict:l,sensitive:u}),a=r.regexp,i=r.keys,s=a.exec(e);if(!s)return null;var c=s[0],d=s.slice(1),p=e===c;return o&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=d[n],e}),{})}}),null)}var C=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(w.Consumer,null,(function(t){t||(0,f.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?x(n.pathname,e.props):t.match,o=(0,m.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,s=i.component,u=i.render;return Array.isArray(l)&&function(e){return 0===a.Children.count(e)}(l)&&(l=null),a.createElement(w.Provider,{value:o},o.match?l?"function"==typeof l?l(o):l:s?a.createElement(s,o):u?u(o):null:"function"==typeof l?l(o):null)}))},t}(a.Component);function _(e){return"/"===e.charAt(0)?e:"/"+e}function T(e,t){if(!e)return t;var n=_(e);return 0!==t.pathname.indexOf(n)?t:(0,m.Z)({},t,{pathname:t.pathname.substr(n.length)})}function A(e){return"string"==typeof e?e:(0,o.Ep)(e)}function L(e){return function(){(0,f.Z)(!1)}}function P(){}a.Component;var R=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(w.Consumer,null,(function(t){t||(0,f.Z)(!1);var n,r,o=e.props.location||t.location;return a.Children.forEach(e.props.children,(function(e){if(null==r&&a.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?x(o.pathname,(0,m.Z)({},e.props,{path:i})):t.match}})),r?a.cloneElement(n,{location:o,computedMatch:r}):null}))},t}(a.Component);var N=a.useContext;function O(){return N(y)}function I(){return N(w).location}},9658:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=p;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],p=n[1],f=n.index;if(l+=e.slice(i,f),i=f+d.length,p)l+=p[1];else{var m=e[i],g=n[2],h=n[3],b=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=g&&null!=m&&m!==g,E="+"===y||"*"===y,S="?"===y||"*"===y,x=n[2]||c,C=b||v;r.push({name:h||o++,prefix:g||"",delimiter:x,optional:S,repeat:E,partial:k,asterisk:!!w,pattern:C?u(C):w?".*":"[^"+s(x)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),a=0;a<e.length;a++)"object"==typeof e[a]&&(n[a]=new RegExp("^(?:"+e[a].pattern+")$",d(t)));return function(t,a){for(var o="",l=t||{},s=(a||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,p=l[c.name];if(null==p){if(c.optional){c.partial&&(o+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(p)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=s(p[f]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");o+=(0===f?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(p),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');o+=c.prefix+d}}else o+=c}return o}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var a=(n=n||{}).strict,o=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var p=s(u.prefix),f="(?:"+u.pattern+")";t.push(u),u.repeat&&(f+="(?:"+p+f+")*"),i+=f=u.optional?u.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var m=s(n.delimiter||"/"),g=i.slice(-m.length)===m;return a||(i=(g?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=o?"$":a&&g?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],a=0;a<e.length;a++)r.push(f(e[a],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(o(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),a=60103,o=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;a=d("react.element"),o=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var p="function"==typeof Symbol&&Symbol.iterator;function f(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g={};function h(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function b(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(f(85));this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},b.prototype=h.prototype;var y=v.prototype=new b;y.constructor=v,r(y,h.prototype),y.isPureReactComponent=!0;var w={current:null},k=Object.prototype.hasOwnProperty,E={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,n){var r,o={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)k.call(t,r)&&!E.hasOwnProperty(r)&&(o[r]=t[r]);var s=arguments.length-2;if(1===s)o.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];o.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===o[r]&&(o[r]=s[r]);return{$$typeof:a,type:e,key:i,ref:l,props:o,_owner:w.current}}function x(e){return"object"==typeof e&&null!==e&&e.$$typeof===a}var C=/\/+/g;function _(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function T(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case a:case o:s=!0}}if(s)return i=i(s=e),e=""===r?"."+_(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(C,"$&/")+"/"),T(i,t,n,"",(function(e){return e}))):null!=i&&(x(i)&&(i=function(e,t){return{$$typeof:a,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(C,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+_(l=e[u],u);s+=T(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=T(l=l.value,t,n,c=r+_(l,u++),i);else if("object"===l)throw t=""+e,Error(f(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function A(e,t,n){if(null==e)return e;var r=[],a=0;return T(e,r,"","",(function(e){return t.call(n,e,a++)})),r}function L(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var P={current:null};function R(){var e=P.current;if(null===e)throw Error(f(321));return e}var N={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:A,forEach:function(e,t,n){A(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return A(e,(function(){t++})),t},toArray:function(e){return A(e,(function(e){return e}))||[]},only:function(e){if(!x(e))throw Error(f(143));return e}},t.Component=h,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(f(267,e));var o=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)k.call(t,c)&&!E.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];o.children=u}return{$$typeof:a,type:e.type,key:i,ref:l,props:o,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=x,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:L}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return R().useCallback(e,t)},t.useContext=function(e,t){return R().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return R().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return R().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return R().useLayoutEffect(e,t)},t.useMemo=function(e,t){return R().useMemo(e,t)},t.useReducer=function(e,t,n){return R().useReducer(e,t,n)},t.useRef=function(e){return R().useRef(e)},t.useState=function(e){return R().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,a,o;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},a=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},o=t.unstable_forceFrameRate=function(){}}else{var p=window.setTimeout,f=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var g=!1,h=null,b=-1,v=5,y=0;t.unstable_shouldYield=function(){return t.unstable_now()>=y},o=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):v=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,k=w.port2;w.port1.onmessage=function(){if(null!==h){var e=t.unstable_now();y=e+v;try{h(!0,e)?k.postMessage(null):(g=!1,h=null)}catch(n){throw k.postMessage(null),n}}else g=!1},n=function(e){h=e,g||(g=!0,k.postMessage(null))},r=function(e,n){b=p((function(){e(t.unstable_now())}),n)},a=function(){f(b),b=-1}}function E(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,a=e[r];if(!(void 0!==a&&0<C(a,t)))break e;e[r]=t,e[n]=a,n=r}}function S(e){return void 0===(e=e[0])?null:e}function x(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,a=e.length;r<a;){var o=2*(r+1)-1,i=e[o],l=o+1,s=e[l];if(void 0!==i&&0>C(i,n))void 0!==s&&0>C(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[o]=n,r=o);else{if(!(void 0!==s&&0>C(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function C(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var _=[],T=[],A=1,L=null,P=3,R=!1,N=!1,O=!1;function I(e){for(var t=S(T);null!==t;){if(null===t.callback)x(T);else{if(!(t.startTime<=e))break;x(T),t.sortIndex=t.expirationTime,E(_,t)}t=S(T)}}function D(e){if(O=!1,I(e),!N)if(null!==S(_))N=!0,n(M);else{var t=S(T);null!==t&&r(D,t.startTime-e)}}function M(e,n){N=!1,O&&(O=!1,a()),R=!0;var o=P;try{for(I(n),L=S(_);null!==L&&(!(L.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=L.callback;if("function"==typeof i){L.callback=null,P=L.priorityLevel;var l=i(L.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?L.callback=l:L===S(_)&&x(_),I(n)}else x(_);L=S(_)}if(null!==L)var s=!0;else{var u=S(T);null!==u&&r(D,u.startTime-n),s=!1}return s}finally{L=null,P=o,R=!1}}var F=o;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||R||(N=!0,n(M))},t.unstable_getCurrentPriorityLevel=function(){return P},t.unstable_getFirstCallbackNode=function(){return S(_)},t.unstable_next=function(e){switch(P){case 1:case 2:case 3:var t=3;break;default:t=P}var n=P;P=t;try{return e()}finally{P=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=F,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=P;P=e;try{return t()}finally{P=n}},t.unstable_scheduleCallback=function(e,o,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:A++,callback:o,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,E(T,e),null===S(_)&&e===S(T)&&(O?a():O=!0,r(D,i-l))):(e.sortIndex=s,E(_,e),N||R||(N=!0,n(M))),e},t.unstable_wrapCallback=function(e){var t=P;return function(){var n=P;P=t;try{return e.apply(this,arguments)}finally{P=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var a=n?n.call(r,e,t):void 0;if(void 0!==a)return!!a;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<o.length;s++){var u=o[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(a=n?n.call(r,c,d,u):void 0)||void 0===a&&c!==d)return!1}return!0}},2177:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r="Invariant failed";function a(e,t){if(!e)throw new Error(r)}},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Template FastAPI React",tagline:"A solution template for creating a Single Page App (SPA) with React and FastAPI following the principles of Clean Architecture.",url:"https://template-fastapi-react.app.playground.radix.equinor.com/",baseUrl:"/template-fastapi-react/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.png",organizationName:"equinor",projectName:"template-fastapi-react",deploymentBranch:"gh-pages",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},plugins:[],presets:[["classic",{docs:{sidebarPath:"/home/runner/work/template-fastapi-react/template-fastapi-react/documentation/sidebars.js",editUrl:"https://github.com/equinor/template-fastapi-react/tree/main/documentation/",remarkPlugins:[null,null]},blog:!1,theme:{customCss:"/home/runner/work/template-fastapi-react/template-fastapi-react/documentation/src/css/custom.css"}}]],themeConfig:{navbar:{title:"Template FastAPI React",logo:{alt:"Equinor Logo",src:"img/logo.svg"},items:[{type:"docSidebar",sidebarId:"about",position:"left",label:"Docs"},{type:"docSidebar",sidebarId:"contribute",position:"left",label:"Contribute"},{to:"/docs/changelog",label:"Changelog",position:"left"},{href:"https://template-fastapi-react.app.playground.radix.equinor.com",label:"Demo",position:"right"},{href:"https://template-fastapi-react.app.playground.radix.equinor.com/api/docs",label:"API",position:"right"},{href:"https://github.com/equinor/template-fastapi-react",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Docs",to:"/docs/about/introduction"},{label:"Contribute",to:"/docs/contribute/how-to-start-contributing"},{label:"Changelog",to:"/docs/changelog"}]},{title:"More",items:[{label:"Team Hermes Homepage",href:"https://verbose-eureka-374aa4f5.pages.github.io"},{label:"GitHub",href:"https://github.com/equinor/template-fastapi-react"},{label:"Template FastAPI React",href:"https://template-fastapi-react.app.playground.radix.equinor.com/"}]}],copyright:"Copyright \xa9 2024 Team Hermes, Inc. Built with Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"dark",disableSwitch:!1,respectPrefersColorScheme:!0},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],scripts:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>a})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}n.d(t,{Z:()=>r})},7529:e=>{"use strict";e.exports={}},6887:e=>{"use strict";e.exports=JSON.parse('{"/template-fastapi-react/changelog-58e":{"__comp":"1f391b9e","__context":{"plugin":"d5120d00"},"content":"75878fc8"},"/template-fastapi-react/docs-ee5":{"__comp":"1be78505","__context":{"plugin":"eb414d18"},"versionMetadata":"935f2afb"},"/template-fastapi-react/docs/about/concepts/task-786":{"__comp":"17896441","content":"f05b69d1"},"/template-fastapi-react/docs/about/concepts/use-case-2d3":{"__comp":"17896441","content":"4b94b993"},"/template-fastapi-react/docs/about/how-to/how-to-do-something-eda":{"__comp":"17896441","content":"2424d345"},"/template-fastapi-react/docs/about/introduction-511":{"__comp":"17896441","content":"d38eaa6e"},"/template-fastapi-react/docs/about/overview-0ac":{"__comp":"17896441","content":"b5acc4c4"},"/template-fastapi-react/docs/about/running/configure-9bd":{"__comp":"17896441","content":"492dc3f9"},"/template-fastapi-react/docs/about/running/prerequisites-d7d":{"__comp":"17896441","content":"d3ec9a0d"},"/template-fastapi-react/docs/about/running/starting-services-0ec":{"__comp":"17896441","content":"c66b78d2"},"/template-fastapi-react/docs/category/coding-179":{"__comp":"14eb3368","categoryGeneratedIndex":"f271ccf2"},"/template-fastapi-react/docs/category/concepts-080":{"__comp":"14eb3368","categoryGeneratedIndex":"6d61db34"},"/template-fastapi-react/docs/category/development-guide-cdf":{"__comp":"14eb3368","categoryGeneratedIndex":"792d5b58"},"/template-fastapi-react/docs/category/how-to-560":{"__comp":"14eb3368","categoryGeneratedIndex":"ddc469d8"},"/template-fastapi-react/docs/category/running-9ea":{"__comp":"14eb3368","categoryGeneratedIndex":"05e44ab7"},"/template-fastapi-react/docs/changelog/-c7e":{"__comp":"17896441","content":"428320b6"},"/template-fastapi-react/docs/contribute/development-guide/coding/architecture-cae":{"__comp":"17896441","content":"fc1348c9"},"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/-cdf":{"__comp":"17896441","content":"3cb05d6d"},"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/-4e7":{"__comp":"17896441","content":"9b8d192f"},"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/clients-032":{"__comp":"17896441","content":"415192e1"},"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories-a61":{"__comp":"17896441","content":"b893987e"},"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces-2b2":{"__comp":"17896441","content":"faf05ce9"},"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-entities-f75":{"__comp":"17896441","content":"73611911"},"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/-173":{"__comp":"17896441","content":"5fef8d46"},"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllers-c4d":{"__comp":"17896441","content":"20f005c0"},"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints-390":{"__comp":"17896441","content":"06314cb9"},"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-cases-d63":{"__comp":"17896441","content":"14a713f6"},"/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-web/-731":{"__comp":"17896441","content":"eccd96cf"},"/template-fastapi-react/docs/contribute/development-guide/coding/generate-api-clients-362":{"__comp":"17896441","content":"95fd3ae2"},"/template-fastapi-react/docs/contribute/development-guide/publishing-7f3":{"__comp":"17896441","content":"8140cfa8"},"/template-fastapi-react/docs/contribute/development-guide/setup-e9b":{"__comp":"17896441","content":"57dd7c71"},"/template-fastapi-react/docs/contribute/development-guide/testing-8f0":{"__comp":"17896441","content":"41b8e814"},"/template-fastapi-react/docs/contribute/development-guide/upgrading-710":{"__comp":"17896441","content":"1b4cc8e2"},"/template-fastapi-react/docs/contribute/documentation-a74":{"__comp":"17896441","content":"2e61c9f2"},"/template-fastapi-react/docs/contribute/ground-rules-0ff":{"__comp":"17896441","content":"61b19cc7"},"/template-fastapi-react/docs/contribute/how-to-start-contributing-a96":{"__comp":"17896441","content":"be239b1c"},"/template-fastapi-react/-061":{"__comp":"1df93b7f","__context":{"plugin":"d5120d00"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=9383,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.fe5c8998.js.LICENSE.txt b/assets/js/main.fe5c8998.js.LICENSE.txt new file mode 100644 index 00000000..6e08db29 --- /dev/null +++ b/assets/js/main.fe5c8998.js.LICENSE.txt @@ -0,0 +1,53 @@ +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ + +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + */ + +/** @license React v0.20.2 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v17.0.2 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v17.0.2 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/assets/js/runtime~main.15945b69.js b/assets/js/runtime~main.15945b69.js new file mode 100644 index 00000000..2fd78278 --- /dev/null +++ b/assets/js/runtime~main.15945b69.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,t,c,d,r,a={},f={};function o(e){var t=f[e];if(void 0!==t)return t.exports;var c=f[e]={id:e,loaded:!1,exports:{}};return a[e].call(c.exports,c,c.exports,o),c.loaded=!0,c.exports}o.m=a,o.c=f,e=[],o.O=(t,c,d,r)=>{if(!c){var a=1/0;for(i=0;i<e.length;i++){c=e[i][0],d=e[i][1],r=e[i][2];for(var f=!0,b=0;b<c.length;b++)(!1&r||a>=r)&&Object.keys(o.O).every((e=>o.O[e](c[b])))?c.splice(b--,1):(f=!1,r<a&&(a=r));if(f){e.splice(i--,1);var n=d();void 0!==n&&(t=n)}}return t}r=r||0;for(var i=e.length;i>0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[c,d,r]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var r=Object.create(null);o.r(r);var a={};t=t||[null,c({}),c([]),c(c)];for(var f=2&d&&e;"object"==typeof f&&!~t.indexOf(f);f=c(f))Object.getOwnPropertyNames(f).forEach((t=>a[t]=()=>e[t]));return a.default=()=>e,o.d(r,a),r},o.d=(e,t)=>{for(var c in t)o.o(t,c)&&!o.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:t[c]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((t,c)=>(o.f[c](e,t),t)),[])),o.u=e=>"assets/js/"+({3:"41b8e814",6:"c66b78d2",19:"be239b1c",53:"935f2afb",85:"1f391b9e",89:"2424d345",95:"d3ec9a0d",106:"b5acc4c4",109:"14a713f6",118:"61b19cc7",141:"20f005c0",172:"9b8d192f",176:"3cb05d6d",193:"428320b6",214:"f271ccf2",219:"5fef8d46",237:"1df93b7f",250:"73611911",256:"8140cfa8",260:"6d61db34",283:"eccd96cf",295:"415192e1",297:"06314cb9",301:"f05b69d1",302:"fc1348c9",349:"faf05ce9",389:"d38eaa6e",396:"492dc3f9",410:"d5120d00",413:"2e61c9f2",499:"b893987e",508:"57dd7c71",511:"1b4cc8e2",514:"1be78505",529:"eb414d18",592:"common",770:"ddc469d8",817:"14eb3368",833:"05e44ab7",859:"4b94b993",898:"95fd3ae2",910:"792d5b58",918:"17896441",990:"75878fc8"}[e]||e)+"."+{3:"b9683f34",6:"a4ca6671",19:"3a72d963",53:"be34cfe3",85:"1cd91990",89:"a6d361c6",95:"42dfbc51",106:"0b2208ad",109:"d009dfb8",118:"35a6f195",141:"049174b7",172:"082a6409",176:"2e6d8bf1",193:"b0e6cab4",214:"1243d9fe",219:"fc4c9a16",237:"6c196ace",250:"902cc1fc",256:"b0156491",260:"31b6f0e7",283:"0961e338",295:"5c02af10",297:"e2de962b",301:"3b3214c8",302:"0401af5e",327:"6bc39bf0",349:"6d36023d",389:"5e09b96d",396:"b3c5f638",410:"6cd7f025",413:"6d5fa105",499:"c7bcf8cd",508:"325d5b48",511:"0a0766ce",514:"86914a5e",529:"4f3efa3c",592:"53c69b33",770:"ae70c047",814:"e703c48f",817:"9428a0f9",833:"b8156b68",859:"25343c8e",898:"01388588",910:"f356f65f",918:"1939eeab",972:"8d79bbe8",990:"2cbd87ce"}[e]+".js",o.miniCssF=e=>{},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),d={},r="documentation:",o.l=(e,t,c,a)=>{if(d[e])d[e].push(t);else{var f,b;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==r+c){f=u;break}}f||(b=!0,(f=document.createElement("script")).charset="utf-8",f.timeout=120,o.nc&&f.setAttribute("nonce",o.nc),f.setAttribute("data-webpack",r+c),f.src=e),d[e]=[t];var l=(t,c)=>{f.onerror=f.onload=null,clearTimeout(s);var r=d[e];if(delete d[e],f.parentNode&&f.parentNode.removeChild(f),r&&r.forEach((e=>e(c))),t)return t(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=l.bind(null,f.onerror),f.onload=l.bind(null,f.onload),b&&document.head.appendChild(f)}},o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.p="/template-fastapi-react/",o.gca=function(e){return e={17896441:"918",73611911:"250","41b8e814":"3",c66b78d2:"6",be239b1c:"19","935f2afb":"53","1f391b9e":"85","2424d345":"89",d3ec9a0d:"95",b5acc4c4:"106","14a713f6":"109","61b19cc7":"118","20f005c0":"141","9b8d192f":"172","3cb05d6d":"176","428320b6":"193",f271ccf2:"214","5fef8d46":"219","1df93b7f":"237","8140cfa8":"256","6d61db34":"260",eccd96cf:"283","415192e1":"295","06314cb9":"297",f05b69d1:"301",fc1348c9:"302",faf05ce9:"349",d38eaa6e:"389","492dc3f9":"396",d5120d00:"410","2e61c9f2":"413",b893987e:"499","57dd7c71":"508","1b4cc8e2":"511","1be78505":"514",eb414d18:"529",common:"592",ddc469d8:"770","14eb3368":"817","05e44ab7":"833","4b94b993":"859","95fd3ae2":"898","792d5b58":"910","75878fc8":"990"}[e]||e,o.p+o.u(e)},(()=>{var e={303:0,532:0};o.f.j=(t,c)=>{var d=o.o(e,t)?e[t]:void 0;if(0!==d)if(d)c.push(d[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var r=new Promise(((c,r)=>d=e[t]=[c,r]));c.push(d[2]=r);var a=o.p+o.u(t),f=new Error;o.l(a,(c=>{if(o.o(e,t)&&(0!==(d=e[t])&&(e[t]=void 0),d)){var r=c&&("load"===c.type?"missing":c.type),a=c&&c.target&&c.target.src;f.message="Loading chunk "+t+" failed.\n("+r+": "+a+")",f.name="ChunkLoadError",f.type=r,f.request=a,d[1](f)}}),"chunk-"+t,t)}},o.O.j=t=>0===e[t];var t=(t,c)=>{var d,r,a=c[0],f=c[1],b=c[2],n=0;if(a.some((t=>0!==e[t]))){for(d in f)o.o(f,d)&&(o.m[d]=f[d]);if(b)var i=b(o)}for(t&&t(c);n<a.length;n++)r=a[n],o.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return o.O(i)},c=self.webpackChunkdocumentation=self.webpackChunkdocumentation||[];c.forEach(t.bind(null,0)),c.push=t.bind(null,c.push.bind(c))})()})(); \ No newline at end of file diff --git a/changelog/index.html b/changelog/index.html new file mode 100644 index 00000000..d23efca2 --- /dev/null +++ b/changelog/index.html @@ -0,0 +1,16 @@ +<!doctype html> +<html lang="en" dir="ltr" class="mdx-wrapper mdx-page plugin-pages plugin-id-default"> +<head> +<meta charset="UTF-8"> +<meta name="generator" content="Docusaurus v2.1.0"> +<title data-rh="true">Template FastAPI React + + + + +
+

Warning: This is the development version.

Changelog

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

1.5.0 (2024-09-04)

Features

  • add Popover component (c8964bd)
  • add react context to handle todo state (510e470)
  • add reusable IconButton component (f933e30)
  • replace exception handling (35ae0ef)
  • replace prettier and eslint with biome (afe2cb9)

Bug Fixes

  • docs reference out of date (bd4cc8d)
  • extras typing is not always dict[str,str] (7ba0694)
  • make authentication work again (3e8da0f)
  • mypy error (66303aa)
  • ran api again (afa8158)
  • ran generator (19ff51b)
  • replace gunicorn with horizontal scaling (a8baa0f)
  • The template no longer use the node image in production (f9b68d9)
  • update old references (5152a1f)
  • update to match new parameters for get pydantic json schema (c6b14a8)

1.4.0 (2023-03-01)

Features

Bug Fixes

  • add error handling of version file fetch (a4f6889)
  • api: handle lists in create_response (333f7d4)
  • api: make health-check return PlainTextResponse (12d5169)
  • api: remove empty default pydantic field in models (0424282)
  • remove /api as root path. (208ceb9)
  • replace deprecated output definition (c53b003)

Tests

Build System

  • add typescript plugin (83ade0c)
  • ci/cd: update flake8 repo location (e6953ad)
  • enable scripts to build necessary packages (YN0007) (f1cf2c3)
  • missing peer dependencies (YN0002) (9e8981d)
  • set yarn version (afb5834)

Miscellaneous Chores

Code Refactoring

  • api: replace response_class with return type annotations (b1fa3bd)
  • ci: extract ghcr login into separate step (0d90fe0)
  • ci: remove crazy-max external action (b41990d)
  • create empty yarn.lock (39050e7)
  • separate responsibilities by moving useEffect to a custom hook (cc33a5d)
  • workflow: Fix linting errors (8ea9f69)
  • workflow: rename and restructure workflows (f08fffa)

Continuous Integration

  • Add rollback workflow (b1cca70), closes #153
  • allow publishing multiple tags at once (4c5d867), closes #153
  • bump pre-commit hooks (9a0cea7)
  • change oauth redurect url to radix playground (655c55f)
  • Change version logging format on build (49ca893), closes #154
  • correct permissions (6d9d563)
  • Fix bug in publish docs (a696a33)
  • Include all commit types in changelog (73cfaaa)
  • login as the service principal to request an access token (fabe3b4)
  • pass tag name to publish-image workflow (dcedc16), closes #153
  • remove secret as input to reusable workflow (1ec6cbb)
  • specify playground context (142bc13)

Documentation

  • add what is fastapi (bbec23b)
  • ci: add comment to azure login (f6b9c96)
  • rewrite 01-setup Yarn PnP in VSCode (df4c7d0)
  • update link to radix playground (6c932c3)

1.3.0 (2022-11-11)

Features

  • allow each user to have their own todos (9456ab8)

Bug Fixes

  • add missing dependency without causing infinite loop of rerendering (8f5c01d)
  • api: raise MissingPrivilegeException when relevant (0c55af3)
  • api: raise MissingPrivilegeException when relevant (613cc42)
  • make todo title required, not optional (bc8dab6)
  • only allow users to delete their own todos (1cf1e7a)
  • test suite (31da3f7)
  • tests: fix up integration tests with per-user todos (b7cc0ca)

1.2.1 (2022-11-09)

Bug Fixes

  • web: adding todo item now clears input. (82e6f6b)

1.2.0 (2022-11-09)

Features

  • expand and visualize auth states (51c9870)
  • web: clear input on add-todo (d61adc1)
  • web: visualize loading state better (6a6ab81)

Bug Fixes

  • make useTodos simpler to use (e8f0a18)

1.1.1 (2022-11-04)

Bug Fixes

1.1.0 (2022-11-04)

Features

  • standardized ErrorResponse model (c09e4dc)

Bug Fixes

  • add types to fixtures (0528e5b)
  • delete non existing item should return 404 (4341416)

1.0.0 (2022-09-07)

Features

  • add auth (a201f13)
  • add axios (88448c2)
  • add equinor design system (b96d4da)
  • add equinor typeface (53a7423)
  • add eslint to pre-commit (20c872d)
  • Add extra checks to pre-commit and run safety in venv (27a6cbe)
  • add flake8, safety and pytests to pre-commit (1917997)
  • add mypy type checking to pre-commit (437cedd)
  • add prettier (b1ce63a)
  • autogenerate release changelog (e463ae2)
  • build and push images in ci (477ad85)
  • create-react-app with typescript and equinor icons (2cfa523)
  • init todo example (8beaf08)
  • official nginx image running unprivileged (fab0c14)
  • pre-commit in CI from pre-commit-config.yaml (5d806b5)
  • pre-commit: Add autoflake to pre-commits (8d97b34), closes #31
  • response decorator takes Response type as parameter (9a7f228)
  • reusable gh actions workflows (d557ebc)
  • show changelog in documentation (6da9b86)
  • tutorial on authentication (fd789c0)

Bug Fixes

  • add missing decorators (54fd2f8)
  • add required additional dependencies to eslint pre-commit env (cca8509)
  • add venv (d682b08)
  • cast variable that cannot be undefined to boolean (372f781)
  • dev: env_file in docker-compose.override.yml (PR #39) (2aa80bd)
  • disable pull (de2d045)
  • duplicated pre-commit hook (a21f5a6)
  • fix mypy errors (d9543c1)
  • fix pytest_plugin import error (b521819)
  • lock cryptography dependency since a bad new release. Set authentication scheme to allow for no tokens. Exclude some file from pre-commit (ea6a931)
  • move Response decorator to controllers (bd36b4a)
  • only run safety hook once (bc33372)
  • poetry command (ccbb2e1)
  • pre-commit (5192d0e)
  • python-version (a934109)
  • remove encryption.py (a500444)
  • set correct base path for docs (0dda0b2)
  • set correct type on todo local state (2a4020c)
  • turn off eslint rules that are unnecessary or might conflict with prettier (d6beaf7)
  • typo (fb557b8)
  • use const on variable that is never reassigned (9f7c543)
  • web: correct base path (a3872d5)
  • yarn build again (dfc48fd)
+ + + + \ No newline at end of file diff --git a/docs/about/concepts/task/index.html b/docs/about/concepts/task/index.html new file mode 100644 index 00000000..bbbeecb1 --- /dev/null +++ b/docs/about/concepts/task/index.html @@ -0,0 +1,16 @@ + + + + + +Task | Template FastAPI React + + + + +
+

Task

info

This is an example of a "concept" which is domain specific, and not related to your application. It should be replaced by relevant domain specific concepts in your documentation. Note that for some concepts, having an "Examples"-section does not make sense. Feel free to adapt the example's structure to best suit your concepts.

A task is piece of work which is assigned to be done by one or multiple persons. A task usually has defined limits, often referred to as the task description.

In order to remember assigned tasks, they are often made note of in lists. Traditionally, these lists have been written on small notes (e.g. post-its), but in recent years there have been a large number of todo-apps developed for phones and computers, replacing its analogue predecessor. See related concepts for more on to-do lists.

Once a task is assigned to a person, the person is expected to carry out the task until completion. There is often a time-limit associated with a task, and a failure to complete the task within the time-limit might be unacceptable and as unfavorable as not completing the task at all.

Examples

  1. Many young children are given chores around the house, such as taking out the trash or cleaning their room.
  2. All employees have a set of tasks to complete, which are often defined in their contract or verbally during their training.
+ + + + \ No newline at end of file diff --git a/docs/about/concepts/use-case/index.html b/docs/about/concepts/use-case/index.html new file mode 100644 index 00000000..90b6b3c5 --- /dev/null +++ b/docs/about/concepts/use-case/index.html @@ -0,0 +1,16 @@ + + + + + +Use case | Template FastAPI React + + + + +
+

Use case

There will be one use case for each individual action/command of an actor. An actor is a person or another system that interacts with our application. Typically, it will be a regular user.

Examples

For a meetup.com clone, it could be:

  • Confirming attendance as an attendee
  • Cancelling attendance as an attendee
  • Drafting new meeting as an organizer
+ + + + \ No newline at end of file diff --git a/docs/about/how-to/how-to-do-something/index.html b/docs/about/how-to/how-to-do-something/index.html new file mode 100644 index 00000000..cef38651 --- /dev/null +++ b/docs/about/how-to/how-to-do-something/index.html @@ -0,0 +1,16 @@ + + + + + +How to do something | Template FastAPI React + + + + + + + + + \ No newline at end of file diff --git a/docs/about/introduction/index.html b/docs/about/introduction/index.html new file mode 100644 index 00000000..5cc60e0d --- /dev/null +++ b/docs/about/introduction/index.html @@ -0,0 +1,16 @@ + + + + + +Introduction | Template FastAPI React + + + + +
+

Introduction

The purpose of the template

This is a solution template for creating a Single Page App (SPA) with React and FastAPI following the principles of Clean Architecture.

The template provides an example implementation of a todo application. The todo app implementation is fairly basic. A user can add a task, mark a task as completed and delete an added task. The purpose of the minimalist todo app implementation is to learn and practice what the concepts of clean architecture are, and how they can be used in a REST API.

+ + + + \ No newline at end of file diff --git a/docs/about/overview/index.html b/docs/about/overview/index.html new file mode 100644 index 00000000..83a21af5 --- /dev/null +++ b/docs/about/overview/index.html @@ -0,0 +1,16 @@ + + + + + +Overview | Template FastAPI React + + + + +
+

Overview

Getting started

In order to start using this template for your own project, go to equinor/template-fastapi-react and click the Use this template button to create a copy.

Next, go-to the instructions on how-to run locally .

For setting up a development environment, go to the development guide. Next, to start coding and extending the template see the coding section.

For starting contributing to the template see contribute section.

Project structure

Here’s how the app is organized.

├── api/ - backend code
│── web/ - frontend code
│── documentation/ - documentation
├── nginx/ - reverse proxy
├── .env-template - template for environment variables
├── docker-compose.override.yml - for running locally
├── docker-compose.yml - common docker compose settings
└── ...
+ + + + \ No newline at end of file diff --git a/docs/about/running/configure/index.html b/docs/about/running/configure/index.html new file mode 100644 index 00000000..50fceaa2 --- /dev/null +++ b/docs/about/running/configure/index.html @@ -0,0 +1,17 @@ + + + + + +Configuration | Template FastAPI React + + + + +
+

Configuration

This document goes through all the different configuration options available.

info

Remember to restart

Any changes you make to this file will only come into effect when you restart the +server.

.env

First, let's look at the options available in the .env file.

Web

Authentication

  • AUTH_ENABLED: To enable or disable authentication
  • CLIENT_ID: Find the app's client ID under Azure Active Directory service (also called application ID). The client ID is used to tell Azure which resource a user is attempting to access.
  • TENANT_ID: Find tenant ID through the Azure portal under Azure Active Directory service. Select properties and under scroll down to the Tenant ID field.
  • AUTH_SCOPE: Find the scope the Azure portal under Azure Active Directory service and App registrations. The scope is located under the expose an API.

API

System

  • ENVIRONMENT: local for hot-reloading, or production for speed
  • LOGGER_LEVEL: DEBUG, ERROR, INFO, WARN

Database

  • MONGODB_USERNAME: The username
  • MONGODB_PASSWORD: The password
  • MONGODB_HOSTNAME: The host where it's running
  • MONGODB_DATABASE: The database to connect to
  • MONGODB_PORT: The port that is used

Authentication

  • OAUTH_TOKEN_ENDPOINT: The endpoint to obtain tokens.
  • OAUTH_AUTH_ENDPOINT: The authorization endpoint performs authentication of the end-user (this is done by redirecting the user agent to this endpoint).
  • OAUTH_WELL_KNOWN: The endpoints that lists endpoints and other configuration options relevant to the OpenID Connect implementation in the project.
  • OAUTH_AUDIENCE: If using azure ad, audience is the azure client id.
  • SECRET_KEY: The secret used for signing JWT.

Used by the docs:

  • OAUTH_CLIENT_ID: Find the app's client ID under Azure Active Directory service (also called application ID). The client ID is used to tell Azure which resource a user is attempting to access.
  • OAUTH_AUTH_SCOPE: Find the scope the Azure portal under Azure Active Directory service and App registrations. The scope is located under the expose an API.
+ + + + \ No newline at end of file diff --git a/docs/about/running/prerequisites/index.html b/docs/about/running/prerequisites/index.html new file mode 100644 index 00000000..0a8fd06f --- /dev/null +++ b/docs/about/running/prerequisites/index.html @@ -0,0 +1,16 @@ + + + + + +Prerequisites | Template FastAPI React + + + + + + + + + \ No newline at end of file diff --git a/docs/about/running/starting-services/index.html b/docs/about/running/starting-services/index.html new file mode 100644 index 00000000..eb1d7a6e --- /dev/null +++ b/docs/about/running/starting-services/index.html @@ -0,0 +1,16 @@ + + + + + +Starting services | Template FastAPI React + + + + +
+

Starting services

You can start running:

docker compose up

The web app will be served at http://localhost

The API documentation can be found at http://localhost/api/docs

The OpenAPI spec can be found at http://localhost/api/openapi.json

Skip Docker (not recommended)

Navigate to the /api folder, activate local venv, then start backend app.py with Uvicorn:

cd api/src/  # go to the location of app.py
uvicorn app:create_app --reload

Navigate to the /web folder, and then start web application:

yarn start
+ + + + \ No newline at end of file diff --git a/docs/category/coding/index.html b/docs/category/coding/index.html new file mode 100644 index 00000000..ac82e143 --- /dev/null +++ b/docs/category/coding/index.html @@ -0,0 +1,16 @@ + + + + + +Coding | Template FastAPI React + + + + + + + + + \ No newline at end of file diff --git a/docs/category/concepts/index.html b/docs/category/concepts/index.html new file mode 100644 index 00000000..17ef2960 --- /dev/null +++ b/docs/category/concepts/index.html @@ -0,0 +1,16 @@ + + + + + +Concepts | Template FastAPI React + + + + + + + + + \ No newline at end of file diff --git a/docs/category/development-guide/index.html b/docs/category/development-guide/index.html new file mode 100644 index 00000000..d312841f --- /dev/null +++ b/docs/category/development-guide/index.html @@ -0,0 +1,16 @@ + + + + + +Development guide | Template FastAPI React + + + + + + + + + \ No newline at end of file diff --git a/docs/category/how-to/index.html b/docs/category/how-to/index.html new file mode 100644 index 00000000..54978a76 --- /dev/null +++ b/docs/category/how-to/index.html @@ -0,0 +1,16 @@ + + + + + +How to | Template FastAPI React + + + + + + + + + \ No newline at end of file diff --git a/docs/category/running/index.html b/docs/category/running/index.html new file mode 100644 index 00000000..7a1fae61 --- /dev/null +++ b/docs/category/running/index.html @@ -0,0 +1,16 @@ + + + + + +Running | Template FastAPI React + + + + + + + + + \ No newline at end of file diff --git a/docs/changelog/index.html b/docs/changelog/index.html new file mode 100644 index 00000000..3d23b3aa --- /dev/null +++ b/docs/changelog/index.html @@ -0,0 +1,19 @@ + + + + + +Changelog | Template FastAPI React + + + + +
+

Changelog

1.5.0 (2024-07-22)

Features

  • add auth (a201f13)
  • add axios (88448c2)
  • add equinor design system (b96d4da)
  • add equinor typeface (53a7423)
  • add eslint to pre-commit (20c872d)
  • Add extra checks to pre-commit and run safety in venv (27a6cbe)
  • add flake8, safety and pytests to pre-commit (1917997)
  • Add info popover with version (28aa513), closes #154
  • add mypy type checking to pre-commit (437cedd)
  • add OpenCensusRequestLoggingMiddleware middleware (b9c035b)
  • add Popover component (c8964bd)
  • add prettier (b1ce63a)
  • add react context to handle todo state (510e470)
  • add reusable IconButton component (f933e30)
  • allow each user to have their own todos (9456ab8)
  • autogenerate release changelog (e463ae2)
  • build and push images in ci (477ad85)
  • create-react-app with typescript and equinor icons (2cfa523)
  • expand and visualize auth states (51c9870)
  • init todo example (8beaf08)
  • official nginx image running unprivileged (fab0c14)
  • pre-commit in CI from pre-commit-config.yaml (5d806b5)
  • pre-commit: Add autoflake to pre-commits (8d97b34), closes #31
  • replace exception handling (35ae0ef)
  • replace prettier and eslint with biome (afe2cb9)
  • response decorator takes Response type as parameter (9a7f228)
  • reusable gh actions workflows (d557ebc)
  • show changelog in documentation (6da9b86)
  • standardized ErrorResponse model (c09e4dc)
  • tutorial on authentication (fd789c0)
  • web: clear input on add-todo (d61adc1)
  • web: visualize loading state better (6a6ab81)

Bug Fixes

  • add error handling of version file fetch (a4f6889)
  • add missing decorators (54fd2f8)
  • add missing dependency without causing infinite loop of rerendering (8f5c01d)
  • add required additional dependecies to eslint pre-commit env (cca8509)
  • add types to fixtures (0528e5b)
  • add venv (d682b08)
  • api: handle lists in create_response (333f7d4)
  • api: make health-check return PlainTextResponse (12d5169)
  • api: raise MissingPrivilegeException when relevant (0c55af3)
  • api: raise MissingPrivilegeException when relevant (613cc42)
  • api: remove empty default pydantic field in models (0424282)
  • cast variable that cannot be undefined to boolean (372f781)
  • delete non existing item should return 404 (4341416)
  • dev: env_file in docker-compose.override.yml (PR #39) (2aa80bd)
  • disable pull (de2d045)
  • docs reference out of date (bd4cc8d)
  • duplicated pre-commit hook (a21f5a6)
  • extras typing is not always dict[str,str] (7ba0694)
  • fix mypy errors (d9543c1)
  • fix pytest_plugin import error (b521819)
  • lock cryptography dependency since a bad new release. Set authentication scheme to allow for no tokens. Exclude some file from pre-commit (ea6a931)
  • make authentication work again (3e8da0f)
  • make todo title required, not optional (bc8dab6)
  • make useTodos simpler to use (e8f0a18)
  • move Response decorator to controllers (bd36b4a)
  • only allow users to delete their own todos (1cf1e7a)
  • only run safety hook once (bc33372)
  • poetry command (ccbb2e1)
  • pre-commit (5192d0e)
  • python-version (a934109)
  • ran api again (afa8158)
  • ran generator (19ff51b)
  • remove /api as root path. (208ceb9)
  • remove encryption.py (a500444)
  • replace deprecated output definition (c53b003)
  • replace gunicorn with horizontal scaling (a8baa0f)
  • resolve PR feedback (bd3debe)
  • set correct base path for docs (0dda0b2)
  • set correct type on todo local state (2a4020c)
  • test suite (31da3f7)
  • tests: fix up integration tests with per-user todos (b7cc0ca)
  • The template no longer use the node image in production (f9b68d9)
  • turn off eslint rules that are unnecessary or might conflict with prettier (d6beaf7)
  • typo (fb557b8)
  • update old references (5152a1f)
  • update to match new parameters for get pydantic json schema (c6b14a8)
  • use const on variable that is never reassigned (9f7c543)
  • web: adding todo item now clears input. (82e6f6b)
  • web: correct base path (a3872d5)
  • yarn build again (dfc48fd)

Documentation

  • Adapt config file (8b47298), closes #70
  • add application tree (59aaf94)
  • add configuration section to extending the API page (928e7f5)
  • add data provider (e3f0055)
  • add example to git commit format (9e7f1dc)
  • add glossary of terms and explain enterprise vs application logic (edc720f)
  • add how to extend the web (6700cbd)
  • add how to tests components (ba78d28)
  • add link to API docs (e5f8638)
  • add link to demo (f1475f6)
  • add missing environment variables descriptions (0b228fb)
  • add on push to main branch badge (657f3b7)
  • add overview (8287989)
  • add what is fastapi (bbec23b)
  • addd list of features (e8304a3)
  • allow and move plantuml directly in markdown (99bacb4)
  • ci: add comment to azure login (f6b9c96)
  • Delete blog (85f43fd), closes #70
  • Fix baseUrl bug (b14aa8c), closes #70
  • fix broken links (de60d94)
  • Fix broken links (6b18ff5), closes #70
  • Fix frontpage (c304538), closes #70
  • Generate docs on feature branch push (73fa918), closes #70
  • how to contribute to template (526b4b0)
  • how to register a feature to the app (efdba6b)
  • minor change to clean architecture (ac0b607)
  • Move and adapt markdown files (8dfc7d9), closes #70
  • move contributing to own page (cc19714)
  • move glossary of terms to end of page and explain the two business logic layers (02f9b70)
  • Move images (ac1e323), closes #70
  • overview of github workflows (839d1b5)
  • overview of pre-commit hooks (e479932)
  • re-structure documentation (4187823)
  • re-write intro to controllers (cb1b28a)
  • Readd puml files (290eb69), closes #70
  • remove calculations from description (178829d)
  • Remove comment (1626088), closes #70
  • Remove docs build on feature push (4d41153), closes #70
  • Remove error in documentation docs (5d1075f), closes #70
  • remove key features (1e97ba8)
  • Remove references to Doctave (6949799), closes #70
  • remove simulations from API description (ac49fdd)
  • Remove unused docusaurus files (13a6f92), closes #70
  • remove web app image in introduction (0bf620d)
  • rename of the application (e7c6952)
  • Rename Tutorial to Docs (1c92b9e)
  • Respect browser color scheme (63289ba), closes #70
  • revert left to right for diagrams (6ab6ea7)
  • rewrite 01-setup Yarn PnP in VSCode (df4c7d0)
  • Run create-docusaurus (c52ff06), closes #70
  • style feature list (568539e)
  • turn puml diagrams sideways (a7a35fa)
  • Update documentation version (76f1aaa), closes #70
  • Update github workflow (e2eba4a), closes #70
  • update link to radix playground (6c932c3)
  • use tabs to show platform specific options (2216c0a)

Styles

  • fix typos + add codespell pre-commit hook (025ad8a)
  • Make eslint.js and index.js prettier (9d22357), closes #44
  • run biome (27b2b15)

Miscellaneous Chores

  • add action to initialize state fetched asynchronously (d85b789)
  • add eslint for typescript (a6f8e7f)
  • add issue templates and labels (32cadec)
  • add labels to cover conventional commits (57dd018)
  • add script to run eslint (2c8e006)
  • add union type to support broader area of usage (f253241)
  • add vitest (6c45021)
  • Add yarn upgrade-interactive (91d998f)
  • api: return Pydantic model instead of dict (427a963)
  • build: add pre-commit hook to generate ts api (caec39e)
  • build: delete old generated ts files (12c8766)
  • build: generate new files, and use them (5c16ae9)
  • build: install new api codegen tool (6318b37)
  • bump web node image version (337ed61)
  • configure prettier recommended plugin (40d8527)
  • dev: add black formatter location to specify line length (2755265)
  • dev: make CRA websocket use port 80 (53d2518)
  • disable unnecessary rules after the new jsx transform from React 17 (9109e77)
  • document bandit exception (b3a5460)
  • fix file-formatter hooks exclude regex (61a3e36)
  • fix yarn pnp runtime files (no-install setup) (1940186)
  • forward ref to IconButton (02b1edd)
  • generate api with axios (a2fea02)
  • ignore correct path eslint (8c1a88e)
  • ignore diffs on yarn plugins (78017e5)
  • ignore generated folder on formatting/linting (8471ab1)
  • init api and web (5602961)
  • main: release 1.0.0 (b490f57)
  • main: release 1.1.0 (0fc8052)
  • main: release 1.1.1 (89d74cb)
  • main: release 1.2.0 (48fe424)
  • main: release 1.2.1 (0b2bcc3)
  • main: release 1.3.0 (1d8d8bb)
  • main: release 1.4.0 (0c37123)
  • pre-commit: Change from autoflake to pycln (2104864), closes #31
  • pre-commit: Make local tests run on windows (8171738)
  • pre-commit: Move autoflake before isort (984f69e)
  • prettier ignores files in node_modules by default (23da6e5)
  • remove conditional render (36745ec)
  • remove dead links to demo application (e6dd31d)
  • remove empty catch (0264cb5)
  • remove flake8 file from Dockerfile (fe48903)
  • remove old yarn-2 stuff (ddbb339)
  • remove package-lock (4ea4417)
  • remove PnP (5263327)
  • remove react-app from eslint extends (debatable) (1f955d6)
  • remove redundant conditional (925d5b4)
  • remove safety from dependencies (0e69345)
  • remove safety from pre-commit (d0719fd)
  • remove unused export (48199e7)
  • replace deprecated pytest function (d35b0c3)
  • set language version interrogate (57032e8)
  • substitute HashRouter with BrowserRouter in web app (c2230d5)
  • type CommitInfo (2179e13)
  • typing errors (1ebe695)
  • Update all web packages (a193af5)
  • update dependencies (fb2cf50)
  • update dependencies (67061eb)
  • update gitignore (995ee82)
  • update poetry.lock (ce07368)
  • update sdks (385a55e)
  • upgrade release-please (381ee02)
  • upgrade versions (bc9f6a3)
  • upgrade versions (041f78e)
  • vscode: Stop git ignoring vscode settings (2b643d1), closes #44
  • yarn: Stop running redundant yarn install (4841577), closes #44
  • yarn: Use Yarn Zero-Install (ae03fa6), closes #44

Code Refactoring

  • adding middleware and exception handlers recommended way (11384e9)
  • all files under feaures (10df906)
  • api: fix type errors in vscode (fd40ccb)
  • api: replace response_class with return type annotations (b1fa3bd)
  • change test URL to match root path (7c66513)
  • ci: extract ghcr login into separat step (0d90fe0)
  • ci: remove crazy-max external action (b41990d)
  • configure prettier on src folder (14d63aa)
  • conform to snake_case filenames (018918e)
  • create empty yarn.lock (39050e7)
  • improve type-strictness (961a7b2)
  • memoize todoAPI, closes #199 (35059fa)
  • migrate to pydantic v2 (7b0099b)
  • mocking database using mongomock (19b7023)
  • move default mongo client outside (9c241ff)
  • move default react eslint config from package.json to .eslintrc (bbcf3b5)
  • move dependency to API to useTodoAPI hook (4055f89)
  • move todo component out from App.tsx (edfd9f6)
  • remove empty catch (f4024bf)
  • remove old repository mock (624cf0a)
  • remove prefix in API url path (bc99f93)
  • remove pyproject.toml parsing with extra-files (c1d812a)
  • remove repeated code (DRY) (c5e6aa1)
  • remove tool versions file (480e38e)
  • remove unused className (1ee3eff)
  • remove unused doctave file (c42fdeb)
  • rename infrastructure to data_providers (8630fb7)
  • rename list() member-function to list_collection (7ef87c0)
  • rename popover state setter (500ec0a)
  • rename unit tests from infrastructure to data providers (bbd21ba)
  • render TodoApp.tsx as single component in App (f823831)
  • replace python-jose with pyjwt (0d01e42)
  • rework design (eds) (f3db74a)
  • rewrite logger middleware to be a 'pure ASGI' middleware (309620e)
  • separate responsibilities by moving useEffect to a custom hook (cc33a5d)
  • structure web to group files by feature (cb5a09b)
  • update some react/axios-related types (43e22fb)
  • update typing to python 3.10+ syntax (245c699)
  • use <Icon> data prop instead of name (5f142a9)
  • use case responses decorator instead of use case executor (d0af7e4)
  • use common toggle function (ab78e1f)
  • use default URL for docs and openapi specification (8b11fed)
  • use descriptive property name (80af660)
  • use IconButton (c3d236a)
  • use IconButton to reduce complexity of TodoItem (3bb232f)
  • Use NginX as web server (3c6ebd9)
  • use Popover component (270f2ea)
  • use settings in pyproject.toml for pre commit hooks related to python (19c397f)
  • use TodoContext to handle todos state (7d6cc34)
  • use version from pyproject.toml in docs (015206c)
  • workflow: Fix linting errors (8ea9f69)
  • workflow: rename and restructure workflows (f08fffa)

Tests

  • add jsx-a11y to check accessibility rules on jsx elements (77b865d)
  • add rules of hooks (4d0d771)
  • add some simple web tests (81fde9c)
  • add unit and integration tests to exception handler (1d32e62)
  • docs: Add testing of docs (08d8c23)
  • mock authorization (618258c)
  • move pytest configuration to pyproject.toml (a5eff87)
  • Upgrade pre-commits (bd8f110)

Build System

  • add mongodb to run in radix (43faa80)
  • add path to init.sh to cmd (10feabb)
  • add react-oauth2-code-pkce (06b2a27)
  • add typescript plugin (83ade0c)
  • adding missing packges (02a92ca)
  • api crashes fix (e94a17e)
  • api: add requests library (4c4790d)
  • bump python version to 3.11 (225a530)
  • bump versions in pyproject.toml (b185366)
  • ci/cd: update flake8 repo location (e6953ad)
  • deps: bump certifi from 2022.12.7 to 2023.7.22 in /api (a9ab785)
  • deps: update react-oauth-code-pkce (37f6008)
  • enable auth for web in readix (d8c6797)
  • enable scripts to build necessary packages (YN0007) (f1cf2c3)
  • fix mac m1 virtiofs docker problem (8c017a6)
  • missing peer dependencies (YN0002) (9e8981d)
  • move config of codespell to pyproject.toml (f3d4fa7)
  • radix: add missing db environment variables for api (cc8ee59)
  • radix: add missing port definition (fbf548e)
  • radix: add missing root password for mongodb (71de476)
  • radix: add more resources to api (f18518a)
  • radix: non root mongodb image (a8a60f1)
  • run as non-root (a5a255f)
  • set oauth client id and audience (1fc42ec)
  • set yarn version (afb5834)
  • styled components post-install causing noise in yarn pnp (03dfac0)
  • Update api packages (9dc46b4)
  • update environment name (2c40003)
  • update OAUTH_AUDIENCE settings (c38c8e2)
  • web: replace cra and webpack with vite (4f67778)
  • yarn: Migrate the lockfile (2e71fba), closes #44
  • yarn: Set Yarn to version berry (e2a3352), closes #44
  • yarn: Swithc to Plug'n'Play setup (751640e), closes #44
  • yarn: Update Dockerfile (78bddad), closes #44
  • yarn: Update gitignore (a527bec), closes #44
  • yarn: Update yarn commands (5a0cbd2), closes #44

Continuous Integration

  • activate publish (cc14523)
  • add build and deploy settings for production (02dbc99)
  • add check to typescript-client to ensure right api-spec is used (edc4621)
  • Add rollback workflow (b1cca70), closes #153
  • allow publishing multiple tags at once (4c5d867), closes #153
  • api: enable ruff autofix (aeaac4d)
  • api: enable upgradepy (59c75f7)
  • api: replace flake8 with ruff (180a48c)
  • bump pre-commit hooks (24455ca)
  • bump pre-commit hooks (9a0cea7)
  • call correct workflow file (cb2c2eb)
  • change oauth redurect url to radix playground (655c55f)
  • Change version logging format on build (49ca893), closes #154
  • correct permissions (6d9d563)
  • correct version path for web (781cef2)
  • disable deploy workflows (7f3e275)
  • enable publish latest (3716ee6)
  • enforce conventional commits (c0a40b0)
  • Fix bug in publish docs (a696a33)
  • Include all commit types in changelog (73cfaaa)
  • login as the service principal to request an access token (fabe3b4)
  • pass tag name to publish-image workflow (dcedc16), closes #153
  • pipeline not running (4b5e587)
  • pre-commit: add end-of-file-fixer hook (cea07f1)
  • pre-commit: add no-commit-to-branch hook (073879c)
  • pre-commit: make convential commit hook run (d50f01d)
  • pre-commit: update hook versions (a5bd7d3)
  • publish nginx image to docker registry (939a29c)
  • release to production on release created (b3e5e57)
  • remove pycln (9614b7e)
  • remove secret as input to reusable workflow (1ec6cbb)
  • remove unused code (fda1325)
  • replace local mypy with pre-commit hook (4cee89e)
  • run pytest integrations tests (0fff7a3)
  • set correct oauth redirect url for test environment (3c5db08)
  • set correct radix environment to deploy for latest (aee20af)
  • specify playground context (142bc13)
  • update azure auth configuration (fb02376)
  • use ruff implementation of isort and bandit (1151ec4)

title: "Changelog" +hide_title: true +sidebar_label: "Changelog" +id: "changelog"

slug: "/changelog"

Warning: This is the development version.

Changelog

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

1.5.0 (2024-09-04)

Features

  • add Popover component (c8964bd)
  • add react context to handle todo state (510e470)
  • add reusable IconButton component (f933e30)
  • replace exception handling (35ae0ef)
  • replace prettier and eslint with biome (afe2cb9)

Bug Fixes

  • docs reference out of date (bd4cc8d)
  • extras typing is not always dict[str,str] (7ba0694)
  • make authentication work again (3e8da0f)
  • mypy error (66303aa)
  • ran api again (afa8158)
  • ran generator (19ff51b)
  • replace gunicorn with horizontal scaling (a8baa0f)
  • The template no longer use the node image in production (f9b68d9)
  • update old references (5152a1f)
  • update to match new parameters for get pydantic json schema (c6b14a8)

1.4.0 (2023-03-01)

Features

Bug Fixes

  • add error handling of version file fetch (a4f6889)
  • api: handle lists in create_response (333f7d4)
  • api: make health-check return PlainTextResponse (12d5169)
  • api: remove empty default pydantic field in models (0424282)
  • remove /api as root path. (208ceb9)
  • replace deprecated output definition (c53b003)

Tests

Build System

  • add typescript plugin (83ade0c)
  • ci/cd: update flake8 repo location (e6953ad)
  • enable scripts to build necessary packages (YN0007) (f1cf2c3)
  • missing peer dependencies (YN0002) (9e8981d)
  • set yarn version (afb5834)

Miscellaneous Chores

Code Refactoring

  • api: replace response_class with return type annotations (b1fa3bd)
  • ci: extract ghcr login into separate step (0d90fe0)
  • ci: remove crazy-max external action (b41990d)
  • create empty yarn.lock (39050e7)
  • separate responsibilities by moving useEffect to a custom hook (cc33a5d)
  • workflow: Fix linting errors (8ea9f69)
  • workflow: rename and restructure workflows (f08fffa)

Continuous Integration

  • Add rollback workflow (b1cca70), closes #153
  • allow publishing multiple tags at once (4c5d867), closes #153
  • bump pre-commit hooks (9a0cea7)
  • change oauth redurect url to radix playground (655c55f)
  • Change version logging format on build (49ca893), closes #154
  • correct permissions (6d9d563)
  • Fix bug in publish docs (a696a33)
  • Include all commit types in changelog (73cfaaa)
  • login as the service principal to request an access token (fabe3b4)
  • pass tag name to publish-image workflow (dcedc16), closes #153
  • remove secret as input to reusable workflow (1ec6cbb)
  • specify playground context (142bc13)

Documentation

  • add what is fastapi (bbec23b)
  • ci: add comment to azure login (f6b9c96)
  • rewrite 01-setup Yarn PnP in VSCode (df4c7d0)
  • update link to radix playground (6c932c3)

1.3.0 (2022-11-11)

Features

  • allow each user to have their own todos (9456ab8)

Bug Fixes

  • add missing dependency without causing infinite loop of rerendering (8f5c01d)
  • api: raise MissingPrivilegeException when relevant (0c55af3)
  • api: raise MissingPrivilegeException when relevant (613cc42)
  • make todo title required, not optional (bc8dab6)
  • only allow users to delete their own todos (1cf1e7a)
  • test suite (31da3f7)
  • tests: fix up integration tests with per-user todos (b7cc0ca)

1.2.1 (2022-11-09)

Bug Fixes

  • web: adding todo item now clears input. (82e6f6b)

1.2.0 (2022-11-09)

Features

  • expand and visualize auth states (51c9870)
  • web: clear input on add-todo (d61adc1)
  • web: visualize loading state better (6a6ab81)

Bug Fixes

  • make useTodos simpler to use (e8f0a18)

1.1.1 (2022-11-04)

Bug Fixes

1.1.0 (2022-11-04)

Features

  • standardized ErrorResponse model (c09e4dc)

Bug Fixes

  • add types to fixtures (0528e5b)
  • delete non existing item should return 404 (4341416)

1.0.0 (2022-09-07)

Features

  • add auth (a201f13)
  • add axios (88448c2)
  • add equinor design system (b96d4da)
  • add equinor typeface (53a7423)
  • add eslint to pre-commit (20c872d)
  • Add extra checks to pre-commit and run safety in venv (27a6cbe)
  • add flake8, safety and pytests to pre-commit (1917997)
  • add mypy type checking to pre-commit (437cedd)
  • add prettier (b1ce63a)
  • autogenerate release changelog (e463ae2)
  • build and push images in ci (477ad85)
  • create-react-app with typescript and equinor icons (2cfa523)
  • init todo example (8beaf08)
  • official nginx image running unprivileged (fab0c14)
  • pre-commit in CI from pre-commit-config.yaml (5d806b5)
  • pre-commit: Add autoflake to pre-commits (8d97b34), closes #31
  • response decorator takes Response type as parameter (9a7f228)
  • reusable gh actions workflows (d557ebc)
  • show changelog in documentation (6da9b86)
  • tutorial on authentication (fd789c0)

Bug Fixes

  • add missing decorators (54fd2f8)
  • add required additional dependencies to eslint pre-commit env (cca8509)
  • add venv (d682b08)
  • cast variable that cannot be undefined to boolean (372f781)
  • dev: env_file in docker-compose.override.yml (PR #39) (2aa80bd)
  • disable pull (de2d045)
  • duplicated pre-commit hook (a21f5a6)
  • fix mypy errors (d9543c1)
  • fix pytest_plugin import error (b521819)
  • lock cryptography dependency since a bad new release. Set authentication scheme to allow for no tokens. Exclude some file from pre-commit (ea6a931)
  • move Response decorator to controllers (bd36b4a)
  • only run safety hook once (bc33372)
  • poetry command (ccbb2e1)
  • pre-commit (5192d0e)
  • python-version (a934109)
  • remove encryption.py (a500444)
  • set correct base path for docs (0dda0b2)
  • set correct type on todo local state (2a4020c)
  • turn off eslint rules that are unnecessary or might conflict with prettier (d6beaf7)
  • typo (fb557b8)
  • use const on variable that is never reassigned (9f7c543)
  • web: correct base path (a3872d5)
  • yarn build again (dfc48fd)
+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/architecture/index.html b/docs/contribute/development-guide/coding/architecture/index.html new file mode 100644 index 00000000..e91e5875 --- /dev/null +++ b/docs/contribute/development-guide/coding/architecture/index.html @@ -0,0 +1,16 @@ + + + + + +Architecture overview | Template FastAPI React + + + + +
+

Architecture overview

Architecture diagrams

We are using c4model for showing architecture diagrams.

Level 1 - System Context diagram

The Context diagram is a good starting point for diagramming and documenting a software system, allowing you to step back and see the big picture. Here we draw a diagram showing the system as a box in the centre, surrounded by its users and the other systems that it interacts with.

System context diagram

Level 2 - Container diagram

Once you understand how your system interacts with users and external systems, a useful next step is to zoom-in to the system boundary with a Container diagram. A container is something like a server-side web application, single-page application, desktop application, mobile app, database schema, file system, etc. Essentially, a container is a separately runnable/deployable unit (e.g. a separate process space) that executes code or stores data.

Container diagram

The use cases and entities are the heart of our application and should have a minimal set of external library dependencies.

Level 3 - Component diagram

Next you can zoom in and decompose each container further to identify the major structural building blocks and their interactions.

The Component diagram shows how a container is made up of a number of components, what each of those components are, their responsibilities and the technology/implementation details.

Component diagram

Clean architecture

We follow the Clean Architecture style and structure the codebase accordingly for our API.

What is Clean Architecture?

It is a layered approach for a more civilized age.

Clean architecture aims to divide a big project into layers and pieces (classes, entities, modules etc.), and to make them independent of each other, so that our big and complex project becomes more maintainable, flexible and easy to work on together.

Clean Architecture

The key idea behind this diagram is that the application should be divided into layers (there can be any amount of layers). The inner layers must not know anything about the outer ones; all dependencies are directed towards the center. The further a layer is from the center, the more it knows about "non-business" details of the application (e.g. which framework is used is part of the outermost layers).

The idea to keep the core business logic (entities) and application logic (use cases) at the center of the solution structure, and independent of frameworks, databases, and external parts (the two outer layers). This allows the core part to be adaptive and flexible enough to deal with changing technology and interfaces, so that frameworks, databases, and external parts can be replaced with minimum efforts.

note
  • The core inner entities and use cases are less likely to change
  • The external layers are most likely to change based on technologies, frameworks and so on

The dependency rule

The most important rule is that source code dependencies can only point inwards. Nothing in an inner circle can know anything at all about something in an outer circle. In particular, the name of something declared in an outer circle must not be mentioned by the code in an inner circle. That includes functions, classes. variables, or any other named software entity.

The dependency rule is the underlying rule that makes Clean Architecture work. It says that nothing in an inner circle should depend on anything in an outer circle. For example, Entities know nothing about all the other circles, while the outer layer, know everything about the inner rings. In particular, application and business rules shouldn’t depend on the UI, database, presenters, and so on. These rules allow us to build systems that are simpler to maintain, as changes in outer circles won’t impact inner ones.

info

The inner circle is not allowed to know anything about the outer circle.

Talk inward with simple structures (dictionaries or classes) and talk outwards through interfaces.

Why Clean Architecture?

  • Loose coupling
    • It becomes easier to modify one small piece of code without it affecting a large part of the app’s code base. This makes it easier to scale the application later on.
  • Testable.
    • It is designed so that every part of the architecture is easy testable. Our tests can be simpler to write, faster and cheaper to maintain.
  • Separation of concern
    • Different modules have specific responsibilities making it easier for modification and maintenance.
  • Framework independent
    • The architecture is framework independent. This means that it doesn’t matter which database, frameworks, UI or external services you are using - the entities and the business logic of the application will always stay the same. When any of the external parts of the system become obsolete, like the database, or the web framework, you can replace those obsolete elements with a minimum of effort.

S.O.L.I.D Principles

  • Single Responsibility
    • Each software component should have only one reason to change – one responsibility.
  • Open-Closed
    • You should be able to extend the behavior of a component, without breaking its usage, or modifying its extensions.
  • Liskov Substitution
    • If you have a class of one type, and any subclasses of that class, you should be able to represent the base class usage with the subclass, without breaking the app.
  • Interface Segregation
    • It’s better to have many smaller interfaces than a large one, to prevent a class from implementing methods that it doesn’t need.
  • Dependency Inversion
    • Components should depend on abstractions rather than concrete implementations. Also higher level modules shouldn’t depend on lower level modules.

Components

Data flow:

Clean Architecture

  • Entities
    • Entities are the domain model that holds data (state) and logic (business rules)
    • Entities may be reused across applications in the same enterprise.
    • Entities must be regular classes, dataclasses, or value objects (meaning if all the properties are the same, the objects are identical).
    • Entities can not depend on anything except other entities.
    • Entities should not be affected by any external change, and should be the most stable code within your application.
  • Use cases
    • Use cases are the application features (it’s what you can do with the application)
      • Each use case should be limited to one feature according to the Single Responsibility Principle.
    • Use cases interact with entities (thus depend on them) and hold logic of the specific application, and typically execute that logic via various repositories or data access layer(s) gateway(s).
      • Use cases may define repository interfaces for the data they require, and one or more repositories will implement the repository interfaces, but the use case doesn’t know where the data is coming from.
    • Use cases throw business specific exceptions.
    • Use cases are not affected by changes in database or controllers.
  • Controllers
    • Controllers execute use cases.
    • They contain no business logic, only conversion logic.
      • Controllers adapt inputs from the outside world into messages the use cases can understand, and in turn adapt responses from the use cases into outputs for the world.
    • You can think of them as entry and exit gates to the use cases. A controller receives a request and returns a response.
    • The controller takes the user input (the request), converts it into the request object defined by the use case and passes the request objects to the use case, and at the end return the response objects.
  • Repositories
    • A repository takes entities and returns entities, hides storage details.
    • Repositories implement interfaces defined by use cases.
      • Could have multiple implementations, e.g. from db or from file system.
    • Hides all details about where the data is from.
      • Can work against local, remote, data services or third party services.

Business rules

The business logic is divided into two layers:

  • The domain layer (aka entities)
  • The application layer (aka use cases)

The domain layer contains the enterprise business logic, and the application layer contains the application business logic. The difference being that enterprise logic could be shared between systems whereas application logic would typically be specific to single system.

+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/clients/index.html b/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/clients/index.html new file mode 100644 index 00000000..12c14730 --- /dev/null +++ b/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/clients/index.html @@ -0,0 +1,16 @@ + + + + + +Clients | Template FastAPI React + + + + +
+

Clients

The template already ships with a mongo database client for connecting to MongoDB databases. However, if you need a client that can talk to e.g. PostgreSQL you need to add this.

from typing import Any

from pymongo.cursor import Cursor
from pymongo.database import Database
from pymongo.errors import DuplicateKeyError
from pymongo.mongo_client import MongoClient
from pymongo.results import DeleteResult, InsertManyResult

from common.exceptions import NotFoundException, ValidationException
from config import config
from data_providers.clients.client_interface import ClientInterface

MONGO_CLIENT: MongoClient[dict[str, Any]] = MongoClient(
host=config.MONGODB_HOSTNAME,
port=config.MONGODB_PORT,
username=config.MONGODB_USERNAME,
password=config.MONGODB_PASSWORD,
authSource="admin",
tls=False,
connectTimeoutMS=5000,
serverSelectionTimeoutMS=5000,
retryWrites=False,
)


class MongoDatabaseClient(ClientInterface[dict, str]):
def __init__(self, collection_name: str, database_name: str, client: MongoClient[dict[str, Any]] = MONGO_CLIENT):
database: Database[dict[str, Any]] = client[database_name]
self.database = database
self.collection_name = collection_name
self.collection = database[collection_name]

def wipe_db(self) -> None:
databases = self.database.client.list_database_names()
databases_to_delete = [
database_name for database_name in databases if database_name not in ("admin", "config", "local")
] # Don't delete the mongo admin or local database
for database_name in databases_to_delete:
self.database.client.drop_database(database_name)

def delete_collection(self) -> None:
self.collection.drop()

def create(self, document: dict[str, Any]) -> dict[str, Any]:
try:
result = self.collection.insert_one(document)
return self.get(str(result.inserted_id))
except DuplicateKeyError:
raise ValidationException(message=f"The document with id '{document['_id']}' already exists")

def list_collection(self) -> list[dict[str, Any]]:
return list(self.collection.find())

def get(self, uid: str) -> dict[str, Any]:
document = self.collection.find_one(filter={"_id": uid})
if document is None:
raise NotFoundException
else:
return dict(document)

def update(self, uid: str, document: dict[str, Any]) -> dict[str, Any]:
if self.collection.find_one(filter={"_id": uid}) is None:
raise NotFoundException(extra={"uid": uid})
self.collection.replace_one({"_id": uid}, document)
return self.get(uid)

def delete(self, uid: str) -> bool:
result = self.collection.delete_one(filter={"_id": uid})
return result.deleted_count > 0

def find(self, filter: dict[str, Any]) -> Cursor[dict[str, Any]]:
return self.collection.find(filter=filter)

def find_one(self, filter: dict[str, Any]) -> dict[str, Any] | None:
return self.collection.find_one(filter=filter)

def insert_many(self, items: list[dict[str, Any]]) -> InsertManyResult:
return self.collection.insert_many(items)

def delete_many(self, filter: dict[str, Any]) -> DeleteResult:
return self.collection.delete_many(filter)

Testing clients

The test_client fixture are using the mongomock instead of real database.

import pytest

from common.exceptions import NotFoundException, ValidationException
from data_providers.clients.mongodb.mongo_database_client import MongoDatabaseClient


class TestMongoDatabaseClient:
def test_find_one(self, test_client: MongoDatabaseClient):
document = {"_id": "81549300", "name": "hello"}

test_client.collection.insert_one(document)
assert test_client.find_one({"_id": document["_id"]}) == document
assert test_client.find_one({"name": document["name"]}) == document
assert test_client.find_one({"_id": document["_id"], "name": document["name"]}) == document
assert test_client.find_one({"_id": "unknown"}) is None

def test_create(self, test_client: MongoDatabaseClient):
document = {"_id": "987321", "name": "alberto"}
assert test_client.collection.count_documents({}) == 0
result = test_client.create(document)
assert test_client.collection.count_documents({}) == 1
assert result == document
# try to create entry with already existing id:
with pytest.raises(ValidationException):
test_client.create(document)

def test_get(self, test_client: MongoDatabaseClient):
document = {"_id": "81549300", "name": "hello"}
test_client.collection.insert_one(document)
assert test_client.get(document["_id"]) == document
with pytest.raises(NotFoundException):
test_client.get("unknown")

def test_find(self, test_client: MongoDatabaseClient):
documents = [
{"_id": "81549300", "name": "hello"},
{"_id": "1a2b", "name": "pingvin"},
{"_id": "987321", "name": "alberto"},
{"_id": "987456", "name": "alberto"},
]
test_client.collection.insert_many(documents)
assert list(test_client.find({})) == documents
assert list(test_client.find({"name": "alberto"})) == [
documents[2],
documents[3],
]

def test_list(self, test_client: MongoDatabaseClient):
documents = [
{"_id": "81549300", "name": "hello"},
{"_id": "1a2b", "name": "pingvin"},
{"_id": "987321", "name": "alberto"},
{"_id": "987456", "name": "alberto"},
]
test_client.collection.insert_many(documents)
assert test_client.list_collection() == documents

def test_update(self, test_client: MongoDatabaseClient):
document = {"_id": "987321", "name": "alberto"}
test_client.collection.insert_one(document)
instance = document
instance_id = instance["_id"]
instance["name"] = "Francois"
assert test_client.find_one({"_id": instance_id}) != instance["name"]
result = test_client.update(instance_id, instance)
assert result["name"] == instance["name"]
assert test_client.find_one({"_id": instance_id}) == instance
# update with non-existing id
entries = list(test_client.find({}))
with pytest.raises(NotFoundException):
assert test_client.update("instance_id", instance)
assert list(test_client.find({})) == entries

def test_delete(self, test_client: MongoDatabaseClient):
document = {"_id": "987321", "name": "alberto"}
test_client.collection.insert_one(document)
test_client.delete(document["_id"])
assert test_client.collection.count_documents({}) == 0
assert test_client.find_one({"_id": document["_id"]}) is None
# try to delete the same entry again
test_client.delete(document["_id"])
assert test_client.collection.count_documents({}) == 0

def test_delete_collection(self, test_client: MongoDatabaseClient):
documents = [
{"_id": "81549300", "name": "hello"},
{"_id": "1a2b", "name": "pingvin"},
{"_id": "987321", "name": "alberto"},
{"_id": "987456", "name": "alberto"},
]
test_client.collection.insert_many(documents)
# add second collection to TestDB:
test_client.database.create_collection("peppers")
active_collections = test_client.database.list_collection_names()
number_of_entries_in_original_collection = test_client.collection.count_documents({})
assert number_of_entries_in_original_collection > 0
assert len(active_collections) == 2
test_client.delete_collection()
assert test_client.database.list_collection_names() == ["peppers"]
assert test_client.collection.count_documents({}) == 0

def test_create_in_empty_database(self, test_client: MongoDatabaseClient):
document = {"_id": "1a2b", "name": "pingvin"}
assert test_client.collection.count_documents({}) == 0
result = test_client.create(document)
assert test_client.collection.count_documents({}) == 1
assert result == document

def test_wipe_db(self, test_client: MongoDatabaseClient):
documents = [
{"_id": "81549300", "name": "hello"},
{"_id": "1a2b", "name": "pingvin"},
{"_id": "987321", "name": "alberto"},
{"_id": "987456", "name": "alberto"},
]
test_client.collection.insert_many(documents)
original_database = test_client.database.client.list_database_names()[0]
collections_in_original_db = test_client.database.client[original_database].list_collection_names()
# add admin database (admin collection should not be wiped)
test_client.database.client["admin"].create_collection("vips")
active_dbs = test_client.database.client.list_database_names()
collections_in_admin_db = test_client.database.client["admin"].list_collection_names()
assert len(active_dbs) == 2
assert len(collections_in_original_db) == 1
assert len(collections_in_admin_db) == 1
test_client.wipe_db()
assert test_client.database.client.list_database_names() == ["admin"]
assert test_client.database[collections_in_original_db[0]].count_documents({}) == 0
+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/index.html b/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/index.html new file mode 100644 index 00000000..c4b289f0 --- /dev/null +++ b/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/index.html @@ -0,0 +1,19 @@ + + + + + +Adding data providers | Template FastAPI React + + + + +
+

Adding data providers

Data providers are part of the infrastructure layer, which is responsible for external infrastructure communications +like database storage, file system, and external systems. The infrastructure layer is the layer that contains all the +concrete implementations of the application. It implements interfaces defined in use cases, to provide access to +external systems.

├── data_providers/
│ ├── clients/
│ ├── repository_interfaces/
│ └── repositories/
└── ...

w

+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories/index.html b/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories/index.html new file mode 100644 index 00000000..a275ba3b --- /dev/null +++ b/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositories/index.html @@ -0,0 +1,18 @@ + + + + + +Repositories | Template FastAPI React + + + + +
+

Repositories

Concrete implementations of repository interfaces. A repository takes entities and returns entities, while hiding +storage details. It can work against local, remote, data services or third party services.

from typing import Any

from common.exceptions import NotFoundException
from config import config
from data_providers.clients.client_interface import ClientInterface
from data_providers.clients.mongodb.mongo_database_client import MongoDatabaseClient
from features.todo.entities.todo_item import TodoItem
from features.todo.repository.todo_repository_interface import TodoRepositoryInterface


def to_dict(todo_item: TodoItem) -> dict[str, Any]:
_dict: dict[str, Any] = todo_item.__dict__
_dict["_id"] = todo_item.id
return _dict


def get_todo_repository() -> "TodoRepository":
mongo_database_client = MongoDatabaseClient(collection_name="todos", database_name=config.MONGODB_DATABASE)
return TodoRepository(client=mongo_database_client)


class TodoRepository(TodoRepositoryInterface):
client: ClientInterface

def __init__(self, client: ClientInterface):
self.client = client

def update(self, todo_item: TodoItem) -> TodoItem:
updated_todo_item = self.client.update(todo_item.id, to_dict(todo_item))
return TodoItem.from_dict(updated_todo_item)

def delete(self, todo_item_id: str) -> None:
is_deleted = self.client.delete(todo_item_id)
if not is_deleted:
raise NotFoundException

def delete_all(self) -> None:
self.client.delete_collection()

def get(self, todo_item_id: str) -> TodoItem:
todo_item = self.client.get(todo_item_id)
return TodoItem.from_dict(todo_item)

def create(self, todo_item: TodoItem) -> TodoItem | None:
inserted_todo_item = self.client.create(to_dict(todo_item))
return TodoItem.from_dict(inserted_todo_item)

def get_all(self) -> list[TodoItem]:
todo_items: list[TodoItem] = []
for item in self.client.list_collection():
todo_items.append(TodoItem.from_dict(item))
return todo_items

def find_one(self, filter: dict[str, Any]) -> TodoItem | None:
todo_item = self.client.find_one(filter)
if todo_item:
return TodoItem.from_dict(todo_item)
return None

Testing repositories

Use the test_client fixture as input to TodoRepository. The test_client fixture are using the mongomock instead of +real database.

import pytest

from common.exceptions import NotFoundException, ValidationException
from data_providers.clients.mongodb.mongo_database_client import MongoDatabaseClient
from features.todo.entities.todo_item import TodoItem
from features.todo.repository.todo_repository import TodoRepository


class TestTodoRepository:
@pytest.fixture(autouse=True)
def _setup_repository(self, test_client: MongoDatabaseClient):
self.repository = TodoRepository(client=test_client)

def test_create(self):
todo_item = TodoItem(id="1234", title="todo 1", user_id="xyz")
self.repository.create(todo_item)
assert len(self.repository.get_all()) == 1

def test_create_already_exists(self):
todo_item_1 = TodoItem(id="1234", title="todo 1", user_id="xyz")
self.repository.create(todo_item_1)
with pytest.raises(ValidationException):
todo_item_2 = TodoItem(id="1234", title="todo 1", user_id="xyz")
self.repository.create(todo_item_2)

def test_find_item_that_exist(self):
documents = [
{"_id": "81549300", "title": "todo 1", "user_id": "xyz"},
{"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},
{"_id": "987321", "title": "todo 3", "user_id": "abc"},
{"_id": "987456", "title": "todo 4", "user_id": "abc"},
]
self.repository.client.insert_many(documents)
todo_item = self.repository.find_one({"title": "todo 2", "user_id": "xyz"})
assert todo_item is not None and todo_item.id == "1a2b"

def test_find_item_that_does_not_exist(self):
documents = [
{"_id": "81549300", "title": "todo 1", "user_id": "xyz"},
{"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},
{"_id": "987321", "title": "todo 3", "user_id": "abc"},
{"_id": "987456", "title": "todo 4", "user_id": "abc"},
]
self.repository.client.insert_many(documents)
assert self.repository.find_one({"_id": "invalid"}) is None

def test_find_item_of_other_user(self):
documents = [
{"_id": "81549300", "title": "todo 1", "user_id": "xyz"},
{"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},
{"_id": "987321", "title": "todo 3", "user_id": "abc"},
{"_id": "987456", "title": "todo 4", "user_id": "abc"},
]
self.repository.client.insert_many(documents)
assert self.repository.find_one({"_id": "1a2b", "user_id": "abc"}) is None

def test_get_item_that_does_exist(self):
documents = [
{"_id": "81549300", "title": "todo 1", "user_id": "xyz"},
{"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},
{"_id": "987321", "title": "todo 3", "user_id": "abc"},
{"_id": "987456", "title": "todo 4", "user_id": "abc"},
]
self.repository.client.insert_many(documents)
assert self.repository.get("987321").id == "987321"

def test_get_item_that_does_not_exist(self):
documents = [
{"_id": "81549300", "title": "todo 1", "user_id": "xyz"},
{"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},
{"_id": "987321", "title": "todo 3", "user_id": "abc"},
{"_id": "987456", "title": "todo 4", "user_id": "abc"},
]
self.repository.client.insert_many(documents)
with pytest.raises(NotFoundException):
self.repository.get("invalid")

def test_update_item(self):
todo_item = TodoItem(id="81549300", title="todo 1", user_id="xyz")
self.repository.create(todo_item)
todo_item_to_update = TodoItem(id="81549300", title="Updated title", user_id="xyz")
self.repository.update(todo_item=todo_item_to_update)
assert self.repository.get("81549300").title == "Updated title"

def test_update_item_that_does_not_exist(self):
todo_item_to_update = TodoItem(id="unknown", title="Updated title", user_id="xyz")
with pytest.raises(NotFoundException):
self.repository.update(todo_item_to_update)

def test_delete(self):
documents = [
{"_id": "81549300", "title": "todo 1", "user_id": "xyz"},
{"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},
]
self.repository.client.insert_many(documents)
assert len(self.repository.get_all()) == 2
self.repository.delete("81549300")
assert len(self.repository.get_all()) == 1
assert self.repository.get_all() == [self.repository.get("1a2b")]

def test_delete_all(self):
documents = [
{"_id": "81549300", "title": "todo 1", "user_id": "xyz"},
{"_id": "1a2b", "title": "todo 2", "user_id": "xyz"},
]
self.repository.client.insert_many(documents)
assert len(self.repository.get_all()) == 2
self.repository.delete_all()
assert len(self.repository.get_all()) == 0
+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces/index.html b/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces/index.html new file mode 100644 index 00000000..c71bfe68 --- /dev/null +++ b/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfaces/index.html @@ -0,0 +1,18 @@ + + + + + +Repository interfaces | Template FastAPI React + + + + +
+

Repository interfaces

A repository interface describes the incoming parameters and the type of the object returned by a repository. The +purpose of these interfaces is to allow use-cases to be implementation-agnostic (and thus not depend on an outer layer). +It also allows for mocking of repositories for testing purposes.

from abc import ABCMeta, abstractmethod

from features.todo.entities.todo_item import TodoItem


class TodoRepositoryInterface(metaclass=ABCMeta):
@abstractmethod
def create(self, todo_item: TodoItem) -> TodoItem | None:
raise NotImplementedError

@abstractmethod
def get(self, todo_item_id: str) -> TodoItem:
raise NotImplementedError

@abstractmethod
def update(self, todo_item: TodoItem) -> TodoItem:
raise NotImplementedError

@abstractmethod
def delete(self, todo_item_id: str) -> None:
raise NotImplementedError

@abstractmethod
def get_all(self) -> list[TodoItem]:
raise NotImplementedError
+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/extending-the-api/adding-entities/index.html b/docs/contribute/development-guide/coding/extending-the-api/adding-entities/index.html new file mode 100644 index 00000000..1a34a686 --- /dev/null +++ b/docs/contribute/development-guide/coding/extending-the-api/adding-entities/index.html @@ -0,0 +1,18 @@ + + + + + +Adding entities | Template FastAPI React + + + + +
+

Adding entities

Entities form the domain model of the application.

An entity can be an object with methods, or it can be a set of data structures and functions. It should be a regular +class, a dataclass, or a value object (if all the properties are the same, two objects are identical). Entities hold +data (state) and logic reusable for various applications.

from dataclasses import asdict, dataclass, fields


@dataclass(frozen=True)
class TodoItem:
id: str
user_id: str
title: str
is_completed: bool = False

def to_dict(self) -> dict[str, str | bool]:
return asdict(self)

@classmethod
def from_dict(cls, dict_: dict[str, str | bool]) -> "TodoItem":
class_fields = {f.name for f in fields(cls)}
if "_id" in dict_:
dict_["id"] = dict_.pop("_id")
data = {k: v for k, v in dict_.items() if k in class_fields}
return TodoItem(**data) # type:ignore
info

Entities must not depend on anything, except possibly other entities.

Entities should be the most stable code within your application.

Entities should not be affected by any change external to them.

Testing entities

import uuid

from features.todo.entities.todo_item import TodoItem


def test_todo_item_init():
id = str(uuid.uuid4())
todo = TodoItem(id=id, title="title 1", is_completed=False, user_id="xyz")
assert todo.id == id
assert todo.title == "title 1"
assert not todo.is_completed


def test_todo_item_from_dict():
id = str(uuid.uuid4())
init_dict = {"id": id, "title": "title 1", "is_completed": False, "user_id": "xyz"}
todo = TodoItem.from_dict(init_dict)

assert todo.id == id
assert todo.title == "title 1"
assert not todo.is_completed


def test_todo_item_comparison():
id = str(uuid.uuid4())
init_dict = {"id": id, "title": "title 1", "is_completed": False, "user_id": "xyz"}
todo1 = TodoItem.from_dict(init_dict)
todo2 = TodoItem.from_dict(init_dict)

assert todo1 == todo2
+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllers/index.html b/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllers/index.html new file mode 100644 index 00000000..f73b6eac --- /dev/null +++ b/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllers/index.html @@ -0,0 +1,16 @@ + + + + + +Controller | Template FastAPI React + + + + +
+

Controller

A controller receives a request, then calls a use case, before finally returning a response.

The controller (adapter layer) is responsible for validating and transforming requests into an understandable format for the use cases (application layer). The format is defined inside the use cases by the request and response models. The controller takes the user input (the request), converts it into the request model defined by the use case and passes the request model to the use case, and at the end return the response model.

from fastapi import APIRouter, Depends

from authentication.authentication import auth_with_jwt
from authentication.models import User
from features.todo.repository.todo_repository import get_todo_repository
from features.todo.repository.todo_repository_interface import TodoRepositoryInterface
from features.todo.use_cases.add_todo import (
AddTodoRequest,
AddTodoResponse,
add_todo_use_case,
)
from features.todo.use_cases.delete_todo_by_id import (
DeleteTodoByIdResponse,
delete_todo_use_case,
)
from features.todo.use_cases.get_todo_all import GetTodoAllResponse, get_todo_all_use_case
from features.todo.use_cases.get_todo_by_id import (
GetTodoByIdResponse,
get_todo_by_id_use_case,
)
from features.todo.use_cases.update_todo import (
UpdateTodoRequest,
UpdateTodoResponse,
update_todo_use_case,
)

router = APIRouter(tags=["todos"], prefix="/todos")


@router.post("", operation_id="create")
def add_todo(
data: AddTodoRequest,
user: User = Depends(auth_with_jwt),
todo_repository: TodoRepositoryInterface = Depends(get_todo_repository),
) -> AddTodoResponse:
return add_todo_use_case(data=data, user_id=user.user_id, todo_repository=todo_repository)


@router.get("/{id}", operation_id="get_by_id")
def get_todo_by_id(
id: str,
user: User = Depends(auth_with_jwt),
todo_repository: TodoRepositoryInterface = Depends(get_todo_repository),
) -> GetTodoByIdResponse:
return get_todo_by_id_use_case(id=id, user_id=user.user_id, todo_repository=todo_repository)


@router.delete("/{id}", operation_id="delete_by_id")
def delete_todo_by_id(
id: str,
user: User = Depends(auth_with_jwt),
todo_repository: TodoRepositoryInterface = Depends(get_todo_repository),
) -> DeleteTodoByIdResponse:
return delete_todo_use_case(id=id, user_id=user.user_id, todo_repository=todo_repository)


@router.get("", operation_id="get_all")
def get_todo_all(
user: User = Depends(auth_with_jwt), todo_repository: TodoRepositoryInterface = Depends(get_todo_repository)
) -> list[GetTodoAllResponse]:
return get_todo_all_use_case(user_id=user.user_id, todo_repository=todo_repository) # type: ignore


@router.put("/{id}", operation_id="update_by_id")
def update_todo(
id: str,
data: UpdateTodoRequest,
user: User = Depends(auth_with_jwt),
todo_repository: TodoRepositoryInterface = Depends(get_todo_repository),
) -> UpdateTodoResponse:
return update_todo_use_case(id=id, data=data, user_id=user.user_id, todo_repository=todo_repository)
  • Required
    • The controller needs to be decorated with the create_response decorator, which handles exceptions and returns a unified response type.
    • The controller needs to have set the response_model and request_model, that is used to generate API documentation and used for validation.
  • Optional
    • Add repository interface to handle communication to external services such as databases and inject the repository implementations to the controller endpoint and pass the injected repository implementations to the use case.
note

FastAPI is built around the OpenAPI Specification (formerly known as swagger) standards. In FastAPI, by coding your endpoints, you are automatically writing your API documentation. FastAPI maps your endpoint details to a JSON Schema document. Under the hood, FastAPI uses Pydantic for data validation. With Pydantic along with type hints, you get a nice editor experience with autocompletion.

Testing controllers

Use the test_client fixture to populate the database with test data and test_app fixture to perform REST API calls.

import pytest
from starlette.status import (
HTTP_200_OK,
HTTP_404_NOT_FOUND,
HTTP_422_UNPROCESSABLE_ENTITY,
)
from starlette.testclient import TestClient

from data_providers.clients.client_interface import ClientInterface


class TestTodo:
@pytest.fixture(autouse=True)
def setup_database(self, test_client: ClientInterface):
test_client.insert_many(
[
{"_id": "1", "id": "1", "title": "title 1", "user_id": "nologin"},
{"_id": "2", "id": "2", "title": "title 2", "user_id": "nologin"},
]
)

def test_get_todo_all(self, test_app: TestClient):
response = test_app.get("/todos")
items = response.json()

assert response.status_code == HTTP_200_OK
assert len(items) == 2
assert items[0]["id"] == "1"
assert items[0]["title"] == "title 1"
assert items[1]["id"] == "2"
assert items[1]["title"] == "title 2"

def test_get_todo_by_id(self, test_app: TestClient):
response = test_app.get("/todos/1")

assert response.status_code == HTTP_200_OK
assert response.json()["id"] == "1"
assert response.json()["title"] == "title 1"

def test_get_todo_should_return_not_found(self, test_app: TestClient):
response = test_app.get("/todos/unknown")
assert response.status_code == HTTP_404_NOT_FOUND

def test_add_todo(self, test_app: TestClient):
response = test_app.post("/todos", json={"title": "title 3"})
item = response.json()

assert response.status_code == HTTP_200_OK
assert item["title"] == "title 3"

def test_add_todo_should_return_unprocessable_when_invalid_entity(self, test_app: TestClient):
response = test_app.post("/todos", json=None)

assert response.status_code == HTTP_422_UNPROCESSABLE_ENTITY

def test_update_todo(self, test_app):
response = test_app.put("/todos/1", json={"title": "title 1 updated", "is_completed": False})

assert response.status_code == HTTP_200_OK
assert response.json()["success"]

def test_update_todo_should_return_not_found(self, test_app):
response = test_app.put("/todos/unknown", json={"title": "something", "is_completed": False})
assert response.status_code == HTTP_404_NOT_FOUND

def test_update_todo_should_return_unprocessable_when_invalid_entity(self, test_app: TestClient):
response = test_app.put("/todos/1", json={"title": ""})

assert response.status_code == HTTP_422_UNPROCESSABLE_ENTITY

def test_delete_todo(self, test_app: TestClient):
response = test_app.delete("/todos/1")

assert response.status_code == HTTP_200_OK
assert response.json()["success"]

def test_delete_todo_should_return_not_found(self, test_app: TestClient):
response = test_app.delete("/todos/unknown")
assert response.status_code == HTTP_404_NOT_FOUND
note

Mark it as integration test.

+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/extending-the-api/adding-features/index.html b/docs/contribute/development-guide/coding/extending-the-api/adding-features/index.html new file mode 100644 index 00000000..a7b26730 --- /dev/null +++ b/docs/contribute/development-guide/coding/extending-the-api/adding-features/index.html @@ -0,0 +1,16 @@ + + + + + +Adding features | Template FastAPI React + + + + +
+

Adding features

A feature has this structure.

├── todo/
│ ├── use_cases/ - Application logic
│ ├── exceptions.py - Exceptions classes (optional)
│ └── controller.py - The entrypoint
└── ...

Define endpoints in the controller that calls use cases that implements the application logic.

Register a feature

Import the router of the feature and include it to the app.

import click
from fastapi import APIRouter, FastAPI, Security
from starlette.middleware import Middleware

from authentication.authentication import auth_with_jwt
from common.exception_handlers import add_exception_handlers
from common.middleware import LocalLoggerMiddleware, OpenCensusRequestLoggingMiddleware
from common.responses import responses
from config import config
from features.health_check import health_check_feature
from features.todo import todo_feature
from features.whoami import whoami_feature

description_md = """
### Description
A RESTful API for handling todo items.

Anyone in Equinor are authorized to use the API.
* Click **Authorize** to login and start testing.

### Resources
* [Docs](https://equinor.github.io/template-fastapi-react/)
* [Github](https://github.com/equinor/template-fastapi-react)

For questions about usage or expanding the API, create issue on Github or see docs.
"""


def create_app() -> FastAPI:
public_routes = APIRouter()
public_routes.include_router(health_check_feature.router)

authenticated_routes = APIRouter()
authenticated_routes.include_router(todo_feature.router)
authenticated_routes.include_router(whoami_feature.router)

middleware = [Middleware(LocalLoggerMiddleware)]
if config.APPINSIGHTS_CONSTRING:
middleware.append(Middleware(OpenCensusRequestLoggingMiddleware))

app = FastAPI(
title="Template FastAPI React",
version="1.4.0", # x-release-please-version
description=description_md,
responses=responses,
middleware=middleware,
license_info={"name": "MIT", "url": "https://github.com/equinor/template-fastapi-react/blob/main/LICENSE.md"},
swagger_ui_init_oauth={
"clientId": config.OAUTH_CLIENT_ID,
"appName": "TemplateFastAPIReact",
"usePkceWithAuthorizationCodeGrant": True,
"scopes": config.OAUTH_AUTH_SCOPE,
"useBasicAuthenticationWithAccessCodeGrant": True,
},
)

add_exception_handlers(app)

app.include_router(authenticated_routes, dependencies=[Security(auth_with_jwt)])
app.include_router(public_routes)

return app


@click.group()
def cli() -> None:
pass


@cli.command()
def run() -> None:
import uvicorn

uvicorn.run(
"app:create_app",
host="0.0.0.0", # noqa:S104
port=5000,
factory=True,
reload=config.ENVIRONMENT == "local",
log_level=config.log_level,
)


if __name__ == "__main__":
cli() # run commands in cli() group
+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints/index.html b/docs/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints/index.html new file mode 100644 index 00000000..970de88d --- /dev/null +++ b/docs/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpoints/index.html @@ -0,0 +1,17 @@ + + + + + +Securing endpoints | Template FastAPI React + + + + +
+

Securing endpoints

The REST API (i.e. python FastAPI server) has access to, and is responsible for serving, data that could be private. Therefore we need to validate that the request is coming from an authenticated client.

We do that in these steps;

  1. Require a JWT on each request
  2. Fetch the RSA public keys from the authentication server.
  3. Validate the JWT signature with the auth server's public key

FastAPI has system called dependencies that is well suited for running a specific function before every request.

Here is an example;

routes = APIRouter()
app = FastAPI(title="Awesome Boilerplate") # Create the FastAPI app
app.include_router(routes) # Add a route/controller to the app
# Add the 'auth_with_jwt()' function as a dependency
# This function will do the actual JWT validation with step 2 and 3
app.include_router(routes, dependencies=[Security(auth_with_jwt)])

That's it! Now every route added like this will require a successful JWT validation before the request will be processed.

Dependencies can also return values, useful if you need to do some kind of authorization. +Here is one example;

@router.delete("/{id}", operation_id="delete-report")
def delete_report(id: str, user: User = Depends(auth_with_jwt)):
if has_permission(user):
delete_report(id)
return "OK"
else:
return PlainTextResponse("Permission denied", status_code=402)
+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-cases/index.html b/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-cases/index.html new file mode 100644 index 00000000..c47daf1a --- /dev/null +++ b/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-cases/index.html @@ -0,0 +1,16 @@ + + + + + +Use cases | Template FastAPI React + + + + +
+

Use cases

Use cases implement and encapsulate all the application business rules.

If the use case wants to access a database (infrastructure layer), then the use case will use a data provider interface. The add_todo_use_case interacts with the infrastructure layer via TodoRepositoryInterface.

import uuid

from pydantic import BaseModel, Field

from features.todo.entities.todo_item import TodoItem
from features.todo.repository.todo_repository_interface import TodoRepositoryInterface


class AddTodoRequest(BaseModel):
title: str = Field(
title="The title of the item",
max_length=300,
min_length=1,
json_schema_extra={
"examples": ["Read about clean architecture"],
},
)


class AddTodoResponse(BaseModel):
id: str = Field(
json_schema_extra={
"examples": ["vytxeTZskVKR7C7WgdSP3d"],
}
)
title: str = Field(
json_schema_extra={
"examples": ["Read about clean architecture"],
}
)
is_completed: bool = False

@staticmethod
def from_entity(todo_item: TodoItem) -> "AddTodoResponse":
return AddTodoResponse(id=todo_item.id, title=todo_item.title, is_completed=todo_item.is_completed)


def add_todo_use_case(
data: AddTodoRequest,
user_id: str,
todo_repository: TodoRepositoryInterface,
) -> AddTodoResponse:
todo_item = TodoItem(id=str(uuid.uuid4()), title=data.title, user_id=user_id)
todo_repository.create(todo_item)
return AddTodoResponse.from_entity(todo_item)
  • Required
    • Each use case needs to have its own read and write model to handle custom requests inputs and outputs for each use case.
  • Optional
info

Changes to use cases should not impact the entities.

The use-case should only know of the repository interface (abstract class) before run-time. The concrete implementation of a repository is injected (dependency injection) into the use-case at run-time.

Testing use cases

Use the todo_repository fixture as input to use_cases.

import pytest
from pydantic import ValidationError

from features.todo.repository.todo_repository_interface import TodoRepositoryInterface
from features.todo.use_cases.add_todo import AddTodoRequest, add_todo_use_case


def test_add_with_valid_title_should_return_todo(todo_repository: TodoRepositoryInterface):
data = AddTodoRequest(title="new todo")
result = add_todo_use_case(data, user_id="xyz", todo_repository=todo_repository)
assert result.title == data.title


def test_add_with_empty_title_should_throw_validation_error(todo_repository: TodoRepositoryInterface):
with pytest.raises(ValidationError):
data = AddTodoRequest(title="")
add_todo_use_case(data, user_id="xyz", todo_repository=todo_repository)

+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/extending-the-api/index.html b/docs/contribute/development-guide/coding/extending-the-api/index.html new file mode 100644 index 00000000..8e1fc320 --- /dev/null +++ b/docs/contribute/development-guide/coding/extending-the-api/index.html @@ -0,0 +1,17 @@ + + + + + +Extending the API | Template FastAPI React + + + + +
+

Extending the API

FastAPI

FastAPI is a high-performant REST API framework for Python. It's built on top of Starlette, an ASGI (Asynchronous Server Gateway Interface) implementation for Python, and it uses Pydantic for data validation. It can generate OpenAPI documentation from your code and also produces a Swagger UI that you can use to test your application. OpenAPI uses a subset of JSON Schema to describe APIs and define the validation rules of the +API payloads and parameters.

To run FastAPI applications, we use the process manager uvicorn. Check out the official documentation for more details.

FastAPI

Codebase structure

The API is grouped by features.

Features

The API has a feature-based folder structure following the principles of Clean Architecture.

├── api/
│ └── src/
│ ├── common/
│ ├── entities/
│ ├── features/
│ │ ├── health_check/
│ │ ├── todo/
│ │ ├── whoami/
│ │ └── ...
│ ├── data_providers/
│ └── tests/
│ ├── unit/
│ └── integration/
└── ...
  • common contains shared code like authentication, exceptions, response decorator
  • entities contains all entities, enums, exceptions, interfaces, types and logic specific to the domain layer
  • features contains use-cases (application logic), repository interfaces, and controllers
  • data providers contains classes for accessing external resources such as databases, file systems, web services, and repository implementations
  • tests contains unit and integrations tests

Get started

  1. Create the domain model by adding entities
  2. Extend the API by adding features
    • Add a use case to handle application logic
    • Add a controller to handle API requests
      • Add an endpoint to the controller that executes the use case
  3. Add a data provider, repository interface and repository to handle communication to external services such as databases.
note

Entities and data providers can be shared between features (the entrypoints and use-cases).

Configuration

All configuration parameters are expected to be environment variables, and are defined in this file api/src/config.py.

from pydantic import Field
from pydantic_settings import BaseSettings

from authentication.models import User
from common.logger_level import LoggerLevel


class Config(BaseSettings):
# Pydantic-settings in pydantic v2 automatically fetch config settings from env-variables
ENVIRONMENT: str = "local"

# Logging
LOGGER_LEVEL: LoggerLevel = Field(default=LoggerLevel.INFO)
APPINSIGHTS_CONSTRING: str | None = None

# Database
MONGODB_USERNAME: str = "dummy"
MONGODB_PASSWORD: str = "dummy"
MONGODB_HOSTNAME: str = "db"
MONGODB_DATABASE: str = "test"
MONGODB_PORT: int = 27017

# Access control
APPLICATION_ADMIN: str = "admin"
APPLICATION_ADMIN_ROLE: str = "admin"

# Authentication
SECRET_KEY: str | None = None
AUTH_ENABLED: bool = False
JWT_SELF_SIGNING_ISSUER: str = "APPLICATION" # Which value will be used to sign self-signed JWT's
TEST_TOKEN: bool = False # This value should only be changed at runtime by test setup
OAUTH_WELL_KNOWN: str | None = None
OAUTH_TOKEN_ENDPOINT: str = ""
OAUTH_AUTH_ENDPOINT: str = ""
OAUTH_CLIENT_ID: str = ""
OAUTH_AUTH_SCOPE: str = ""
OAUTH_AUDIENCE: str = ""
MICROSOFT_AUTH_PROVIDER: str = "login.microsoftonline.com"

@property
def log_level(self) -> str:
"""Returns LOGGER_LEVEL as a (lower case) string."""
return str(self.LOGGER_LEVEL.value).lower()


config = Config()

if config.AUTH_ENABLED and not all((config.OAUTH_AUTH_ENDPOINT, config.OAUTH_TOKEN_ENDPOINT, config.OAUTH_WELL_KNOWN)):
raise ValueError("Authentication was enabled, but some auth configuration parameters are missing")

if not config.AUTH_ENABLED:
print("\n")
print("################ WARNING ################")
print("# Authentication is disabled #")
print("################ WARNING ################\n")

default_user: User = User(
user_id="nologin",
full_name="Not Authenticated",
email="nologin@example.com",
)

See configuration for a description of the different configuration options available.

+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/extending-the-web/index.html b/docs/contribute/development-guide/coding/extending-the-web/index.html new file mode 100644 index 00000000..ca09b8f3 --- /dev/null +++ b/docs/contribute/development-guide/coding/extending-the-web/index.html @@ -0,0 +1,68 @@ + + + + + +Extending the web | Template FastAPI React + + + + +
+

Extending the web

The web is grouped by features.

Codebase structure

The web has a feature-based folder structure.

├── web/
│ └── src/
│ ├── api/
│ ├── common/
│ ├── features/
│ │ ├── todos/
│ │ └── ...
│ ├── hooks/
│ └── pages/
└── ...
  • api contains the auto-generated API client
  • common contains shared code like generic components
  • features contains features e.g. todo-list
  • hooks contains re-usable hooks
  • pages contains entrypoints (pages that are used by the router)

Application tree

+flowchart + subgraph web + AuthProvider-. imported from .->react-oauth2-code-pkce; + index --> AuthProvider + AuthProvider --> app + app --> Header + app --> RouterProvider + RouterProvider-. imported from .->react-router-dom; + RouterProvider --> routes + routes -- /invalid --> InvalidUrl + routes -- / --> TodoListPage + TodoListPage --> TodoList + TodoList -- uses hook --> useTodos + useTodos -- uses client --> TodoAPI + TodoList --> AddItem + TodoList -- 1..x --> TodoItem + end + + TodoAPI -- HTTP requests --> API + + style react-oauth2-code-pkce fill:#f96; + click react-oauth2-code-pkce "https://www.npmjs.com/package/react-oauth2-code-pkce" "Open" + style react-router-dom fill:#f96; + click react-router-dom "https://www.npmjs.com/package/react-router-dom" "Open" + + style useTodos fill:#b8c;

External dependencies:

Configuration

See configuration for a description of the different configuration options available.

Oauth2

The AuthProvider are using the configuration defined in web/src/auth.

import type { TAuthConfig } from 'react-oauth2-code-pkce'

export const authConfig: TAuthConfig = {
clientId: import.meta.env.VITE_AUTH_CLIENT_ID || '',
authorizationEndpoint: import.meta.env.VITE_AUTH_ENDPOINT || '',
tokenEndpoint: import.meta.env.VITE_TOKEN_ENDPOINT || '',
scope: import.meta.env.VITE_AUTH_SCOPE || '',
redirectUri: import.meta.env.VITE_AUTH_REDIRECT_URI || '',
logoutEndpoint: import.meta.env.VITE_LOGOUT_ENDPOINT || '',
autoLogin: false,
preLogin: () =>
localStorage.setItem(
'preLoginPath',
`${window.location.pathname}${window.location.search}${window.location.hash}`
),
postLogin: () =>
window.location.replace(localStorage.getItem('preLoginPath') ?? (import.meta.env.VITE_AUTH_REDIRECT_URI || '')),
}

Routes

The RouterProvider are using the router defined in web/src/router.

import { createBrowserRouter } from 'react-router-dom'
import InvalidUrl from './common/components/InvalidUrl'
import { TodoListPage } from './pages/TodoListPage'

export const router = createBrowserRouter([
{
path: '/',
element: <TodoListPage />,
},
{
path: '*',
element: <InvalidUrl />,
},
])
+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/coding/generate-api-clients/index.html b/docs/contribute/development-guide/coding/generate-api-clients/index.html new file mode 100644 index 00000000..9a9c13ba --- /dev/null +++ b/docs/contribute/development-guide/coding/generate-api-clients/index.html @@ -0,0 +1,16 @@ + + + + + +Generate API clients | Template FastAPI React + + + + +
+

Generate API clients

To generate typescript client for API run:

cd web
./generate-api-client.sh

This will populate web/src/api/generated with new typescript files that matches the API OpenAPI specification.

+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/publishing/index.html b/docs/contribute/development-guide/publishing/index.html new file mode 100644 index 00000000..5db1b52f --- /dev/null +++ b/docs/contribute/development-guide/publishing/index.html @@ -0,0 +1,16 @@ + + + + + +Publishing | Template FastAPI React + + + + +
+

Publishing

Github actions

We use GitHub Actions, as the CI/CD pipeline.

GitHub Actions make it easy to automate all our software workflows. They build, test, and deploy the code right from GitHub.

All the heavy lifting is done by GitHub. GitHub will simply use the files defined in .github/workflows to do the setup.

We trigger the reusable workflow like this (note that the chart is slightly outdated):

Github Actions

Since we are using trunk based development, all pushes to main trigger a release to a test environment.

Release to production is triggered when we merge in the auto-generated pull requests (that contains changelogs) that are created by the create-release-pr.yaml Github action.

Workflows

Overview

Reusable workflows

WorkflowJobPurpose
codeql-security-analysis.yamlanalyzeRuns CodeQL on the source code
create-release-pr.yamlrelease-pleaseCreates a new release on GitHub
deploy-to-radix.yamldeploy-on-radixDeploys the services to Radix
generate-changelog.yamlgenerate-changelogAutomatically generates changelogs based on commit messages
label-importer.yamllabelerImport labels from labels.yml
publish-docs.yamlpublish-docsBuilds and publishes the latest docs to GitHub pages
publish-image.yamlbuild-and-publish-web-mainBuilds and publishes the Docker image for the Web (frontend)
build-and-publish-api-mainBuilds and publishes the Docker image for the API (backend)
build-and-publish-nginxBuilds and publishes the Docker image for the Nginx proxy
tests.yamlpre-commitRuns the pre-commit hooks. See Hooks for details
test-apiRuns tests on the API (backend) using pytest and behave
test-webRuns tests on the Web (frontend)
test-docsChecks that the doc pages build without errors

Triggerable workflows

WorkflowJobPurpose
on-pull-request.yamlcodeqlUses the codeql-security-analysis workflow
testsUses the tests workflow
on-push-main-branch.yamlcodeqlUses the codeql-security-analysis workflow
testsUses the tests workflow
generate-changelogUses the generate-changelog workflow
docsUses the publish-docs workflow
publish-latestUses the publish-image workflow to create a docker image for the test environment
deploy-testUses the deploy-to-radix workflow to deploy to the test environment
release-pleaseCreates a new release PR on GitHub
publish-productionUses the publish-image workflow to create a docker image for the prod environment
deploy-prodUses the deploy-to-radix workflow to deploy to the prod environment
on-weekly.yamlcodeqlUses the codeql-security-analysis workflow

Reusable workflows

A reusable workflow is just like any GitHub Actions workflow with one key difference - it includes a workflow_call trigger.

  • The create-release-pr.yaml workflow will automatically create a pull request with an auto-generated changelog. It also bumps the version code (using semantic versioning, depending on the types of commits) and create a tagged release that can be used to deploy to production.

  • The tests.yaml workflow will automatically run all types of tests.

  • The publish-docs.yaml workflow will build the documentation. Then it will deploy the documentation (placed in the site folder) to GitHub Pages.

Changelogs

We auto-generate changelogs by following the conventional commits specification.

How to generate

Auto-generated

The Github action release-please.yaml is a workflow that will automatically create a pull request with an auto-generated changelog every time code is pushed to the main branch.

Locally

Sometimes it is nice to generate the changelogs locally for testing.

It is possible to use act to run Github actions locally.

act -j release-please -s GITHUB_TOKEN=<GITHUB_TOKEN>

GITHUB_TOKEN: Log in to GitHub and generate a personal access token (PaT) from Personal settings -> Developer settings -> Personal access tokens.

+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/setup/index.html b/docs/contribute/development-guide/setup/index.html new file mode 100644 index 00000000..e36ba12e --- /dev/null +++ b/docs/contribute/development-guide/setup/index.html @@ -0,0 +1,18 @@ + + + + + +Setup | Template FastAPI React + + + + +
+

Setup

Prerequisites

To work with the template monorepo you'll need to install these tools.

Pre-commit

When contributing to this project, pre-commits are necessary, as they run certain tests, sanitisers, and formatters.

The project provides a .pre-commit-config.yaml file that is used to setup git pre-commit hooks.

On commit locally, code is automatically formatted and checked for security vulnerabilities using pre-commit git hooks.

Installation

To initialize pre-commit in your local repository, run

pre-commit install

This tells pre-commit to run for this repository on every commit.

Usage

Pre-commit will run on every commit, but can also be run manually on all files:

pre-commit run --all-files

Pre-commit tests can be skipped on commits with git commit --no-verify.

caution

If you have to skip the pre-commit tests, you're probably doing something you're not supposed to, and whoever commits after you might have to fix your "mistakes". Consider updating the pre-commit hooks if your code is non-compliant.

Hooks

Overview
RepositoryHookPurpose
pre-commit/pre-commit-hookscheck-astCheck whether files parse as valid python
check-merge-conflictCheck for files that contain merge conflict strings
check-case-conflictCheck for files with names that would conflict on a case-insensitive filesystem
check-jsonVerify syntax of all JSON files
check-tomlVerify syntax of all TOML files
check-yamlVerify syntax of all YAML files
trailing-whitespaceTrim trailing whitespace
mixed-line-endingReplaces or checks mixed line ending
detect-private-keyChecks for the existence of private keys
compilerla/conventional-pre-commitconventional-pre-commitA pre-commit hook to check commit messages for Conventional Commits formatting
ambv/blackblackPython code formatter
PyCQA/banditbanditA security linter designed to find common security issues in Python code
econchick/interrogateinterrogateCheck the code base for missing docstrings
hadialqattan/pyclnpyclnFinds and removes unused import statements
pycqa/isortisortSort imports alphabetically, and automatically separated into sections and by type
pre-commit/mirrors-prettierprettierTypeScript/JavaScript/JSON ++ code formatter
pre-commit/mirrors-eslinteslintHelps you find and fix problems in your JavaScript code
pycqa/flake8flake8Check the style and quality of Python code
localmypyPython type checker
pytestPython test runner

API

From inside the /api folder.

Create virtualenv

Virtual environment is used for running unit tests with pre-commit and upgrade packages. It also can be used to run the application if you not are using Docker.

python3 -m venv .venv

Activate virtualenv

source .venv/bin/activate

Install Poetry

Poetry is used to manage Python package dependencies.

$ pip install poetry
$ poetry config virtualenvs.create false # Not create venv

The installation instructions can be found here.

Install packages

$ poetry install

Web

From inside the /web folder.

Package management

This project uses Yarn 2 Plug'n'Play to manage web package dependencies. +That means there is no need to run npm/yarn install. +However, if you want to add/remove/update packages, you need yarn installed locally.

$ npm install -g yarn

Yarn PnP in Jetbrains IDEs

To let the IDE know that dependencies can be found in .yarn instead of node_modules, follow these steps; https://www.jetbrains.com/help/idea/installing-and-removing-external-software-using-node-package-manager.html#ws_npm_yarn_set_up_yarn2

Yarn PnP in VSCode

Because the project uses Yarn PnP, VSCode's language server must use the same typescript executable as the project in order to access dependencies. This is located in web/.yarn/sdks/typescript/lib. To use this version, simply open a .ts(x) file, open the command palette (default Ctrl+Shift+P or Cmd+Shift+P), find TypeScript: Select TypeScript Version... and select Use Workspace Version.

Not using the correct typescript executable might cause Cannot find module '***' or its corresponding type declarations. and JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists. errors.

+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/testing/index.html b/docs/contribute/development-guide/testing/index.html new file mode 100644 index 00000000..2ba8595e --- /dev/null +++ b/docs/contribute/development-guide/testing/index.html @@ -0,0 +1,16 @@ + + + + + +Testing | Template FastAPI React + + + + +
+

Testing

API

The application has two types of API tests: unit tests and integration tests.

Unit tests

You will find unit tests under src/tests/unit.

docker compose run --rm api pytest

As a general rule, unit tests should not have any external dependencies - especially on the file system.

Integration tests

The integrations tests can be found under src/tests/integration.

To run integration tests add --integration as argument for pytest.

These tests depends on mongodb and that it's running.

Web

Unit tests

docker compose run --rm web yarn test
+ + + + \ No newline at end of file diff --git a/docs/contribute/development-guide/upgrading/index.html b/docs/contribute/development-guide/upgrading/index.html new file mode 100644 index 00000000..78e9b1e7 --- /dev/null +++ b/docs/contribute/development-guide/upgrading/index.html @@ -0,0 +1,18 @@ + + + + + +Upgrading | Template FastAPI React + + + + +
+

Upgrading

Packages

info

Remember to restart!

Any changes you make to these files will only come into effect after you restart the +server. If you run the application using containers, +you need to do docker compose build and then docker compose up to get the changes.

API dependencies

cd api/
# Add or remove package to pyproject.toml
poetry update

Web dependencies

cd web/
# Add or remove package to package.json
yarn install
+ + + + \ No newline at end of file diff --git a/docs/contribute/documentation/index.html b/docs/contribute/documentation/index.html new file mode 100644 index 00000000..0c6dcfd9 --- /dev/null +++ b/docs/contribute/documentation/index.html @@ -0,0 +1,16 @@ + + + + + +Documentation | Template FastAPI React + + + + +
+

Documentation

This site was generated from the contents of your documentation folder using Docusaurus and we host it on GitHub Pages.

How it works

From Docusaurus own documentation:

Docusaurus is a static-site generator. It builds a single-page application with fast client-side navigation, leveraging the full power of React to make your site interactive. It provides out-of-the-box documentation features but can be used to create any kind of site (personal website, product, blog, marketing landing pages, etc).

While Docusaurus is rich on features, we use it mostly to host markdown pages. The main bulk of the documentation is located in documentation/docs.

Publishing

We are using the Github Action publish-docs.yaml to build and publish the documentation website. This action is run every time someone pushes to the main branch.

This will checkout the code, download the changelog from the generate-changelog.yaml action, and build the documentation. Then it will deploy the documentation (placed in the documentation/build/ folder) to GitHub Pages.

Initial settings

When deployed to GitHub Pages, you do need to configure your site under the settings. Pick the gh-pages branch and select either a private url or a public one. It will show you the site’s url, which should now contain your generated documentation site.

Assets

All assets files are places under documentation/static

+ + + + \ No newline at end of file diff --git a/docs/contribute/ground-rules/index.html b/docs/contribute/ground-rules/index.html new file mode 100644 index 00000000..c8cf58f0 --- /dev/null +++ b/docs/contribute/ground-rules/index.html @@ -0,0 +1,16 @@ + + + + + +Ground rules | Template FastAPI React + + + + +
+

Ground rules

  • For major changes, please open an issue first to discuss what you would like to change.
  • Contributors should fork the repository and work on fixes or enhancements on their own fork.
    • Use the pull request feature to submit your changes to this repository.
    • All pull requests should be rebased (with main) and commits squashed prior to the final merge process.
    • Use conventional commit formatting for commit messages, so that it's possible to auto-generate the changelogs.
  • Use a separate branch for each issue you’re working on.
    • Do not combine fixes for multiple issues into one branch.
  • Please include unit tests with all your code changes.
    • All unit tests must be 100% passing before the pull requests will be approved and merged.

Pull Requests

Please try to make your pull request easy to review for us.

  • Make small pull requests. The smaller, the faster to review and the more likely it will be merged soon.
  • Don't make changes unrelated to the goals of your PR.
    • There might be typos on some comments, or perhaps a function is in need of refactoring - regardless, if those changes are not related to your PR, please implement those changes in another PR.

While you're writing up the pull request, you can add Closes #XXX in the message body where #XXX is the issue you're fixing. Therefore, an example would be Closes #42 would close issue #42.

Git commit format

We have very precise rules over how our git commit messages can be formatted.

We are using the conventional commits formatting for commit messages.

Here’s an example commit message:

type: short description of what you did (imperative tense) <= 50 chars

When necessary, mote details can come here, until 72 chars each line.

BREAKING CHANGE: some description

Fixes #1234

The type can be one of these types: feat, fix, build, ci, docs, style, refactor, test, and chore.

caution

Summary should:

  • Be written in imperative, present tense, e.g. write add instead of added or adds.
  • Don't capitalize the first letter.
  • Don't write dot (.) at the end.
An example

patches (1.0.0 → 1.0.1)

git commit -a -m "fix(parsing): fixed a bug in our parser"

features (1.0.0 → 1.1.0)

git commit -a -m "feat(parser): we now have a parser \o/"

breaking changes (1.0.0 → 2.0.0)

git commit -a -m "feat(new-parser): introduces a new parsing library
BREAKING CHANGE: new library does not support foo-construct"

Complete:

refactor!: foo-bar replaces bar-foo

bar-foo does not fit other solutions, use standard convention foo-bar

AB#11
Closes #22, AB#33, equinor/otherrepo#44

BREAKING CHANGE:

'bar-foo' command has changed from 'bar-foo' to 'foo-bar'

To migrate your project, change all command where you use 'bar-foo' with 'foo-bar'

Co-authored-by: Elliot Alderson

This leads to more readable messages that are easy to follow when looking through the project history.

It is important to note that we use the git commit messages to auto-generate changelogs for each release.

+ + + + \ No newline at end of file diff --git a/docs/contribute/how-to-start-contributing/index.html b/docs/contribute/how-to-start-contributing/index.html new file mode 100644 index 00000000..67377f1c --- /dev/null +++ b/docs/contribute/how-to-start-contributing/index.html @@ -0,0 +1,16 @@ + + + + + +How to start contributing | Template FastAPI React + + + + +
+

How to start contributing

Welcome! We are glad that you want to contribute to our project! 💖

This project accepts contributions via Github pull requests.

This document outlines the process to help get your contribution accepted.

There are many ways to contribute:

You can start by looking through the good first issues.

Fork the repository

In general, we follow the "fork-and-pull" Git workflow.

Here's a quick guide:

  1. Create your own fork of the repository
  2. Clone the project to your machine
  3. To keep track of the original repository add another remote named upstream
git remote add upstream git@github.com:equinor/template-fastapi-react.git
  1. Create a branch locally with a succinct but descriptive name and prefixed with change type.
git checkout -b feature/my-new-feature
  1. Make the changes in the created branch.
  2. Add and run tests for your changes (we only take pull requests with passing tests).
docker compose run --rm api pytest
docker compose run --rm web yarn test
  1. Add the changed files
git add path/to/filename
  1. Commit your changes using the conventional commits formatting for the commit messages.
git commit -m "conventional commit formatted message"
  1. Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code.
git fetch upstream
git rebase upstream/main
  1. Push to your fork.
git push origin feature/my-new-feature
  1. Submit a pull request to the original repository (via Github interface). Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us.

That's it... thank you for your contribution!

After your pull request is merged, you can safely delete your branch.

Code review process

The core team looks at pull requests on a regular basis. After feedback has been given we expect responses within three weeks. After three weeks we may close the pull request if it isn't showing any activity.

+ + + + \ No newline at end of file diff --git a/img/clean-architecture-horizontal2.png b/img/clean-architecture-horizontal2.png new file mode 100644 index 00000000..4d62e561 Binary files /dev/null and b/img/clean-architecture-horizontal2.png differ diff --git a/img/clean-architecture.png b/img/clean-architecture.png new file mode 100644 index 00000000..6dfc2d6e Binary files /dev/null and b/img/clean-architecture.png differ diff --git a/img/clean-architecture2.png b/img/clean-architecture2.png new file mode 100644 index 00000000..375efe59 Binary files /dev/null and b/img/clean-architecture2.png differ diff --git a/img/favicon.png b/img/favicon.png new file mode 100644 index 00000000..fdc98338 Binary files /dev/null and b/img/favicon.png differ diff --git a/img/features.png b/img/features.png new file mode 100644 index 00000000..754c8d0c Binary files /dev/null and b/img/features.png differ diff --git a/img/logo.svg b/img/logo.svg new file mode 100644 index 00000000..3a7fe4d1 --- /dev/null +++ b/img/logo.svg @@ -0,0 +1,7 @@ + + + diff --git a/index.html b/index.html new file mode 100644 index 00000000..9eff4c0e --- /dev/null +++ b/index.html @@ -0,0 +1,16 @@ + + + + + +Frontpage | Template FastAPI React | Template FastAPI React + + + + +
+

Template FastAPI React

A solution template for creating a Single Page App (SPA) with React and FastAPI following the principles of Clean Architecture.

Features include:

Auto-generated changelogs from Git history
Auto-generated API documentations (using FastAPI)
Auto-generated API clients (using openapi generator)
Pre-commit hooks
CI/CD (using Github Actions)
Pydantic data validation
OAuth2
Standardized API error and response model
Run using Docker
Documentation solution (using Docusaurus)
+ + + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..c968955a --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/changelogweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/about/concepts/taskweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/about/concepts/use-caseweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/about/how-to/how-to-do-somethingweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/about/introductionweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/about/overviewweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/about/running/configureweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/about/running/prerequisitesweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/about/running/starting-servicesweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/category/codingweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/category/conceptsweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/category/development-guideweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/category/how-toweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/category/runningweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/changelog/weekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/architectureweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/weekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/weekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/clientsweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repositoriesweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-data-providers/repository-interfacesweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-entitiesweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/weekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/controllersweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/securing-endpointsweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-api/adding-features/use-casesweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/extending-the-web/weekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/coding/generate-api-clientsweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/publishingweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/setupweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/testingweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/development-guide/upgradingweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/documentationweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/ground-rulesweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/docs/contribute/how-to-start-contributingweekly0.5https://template-fastapi-react.app.playground.radix.equinor.com/template-fastapi-react/weekly0.5 \ No newline at end of file