1
0
Fork 0
mirror of https://github.com/voltbonn/diversity.volt.link.git synced 2024-06-30 17:59:40 +00:00
diversity.volt.link/frontend/index.html
2022-11-20 00:05:34 +01:00

1559 lines
71 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no" />
<meta property="og:title" data-translation-key="website_title" data-translation-dest="attr-content" content="Volt — Internal Diversity Survey">
<meta property="og:description" data-translation-key="website_description" data-translation-dest="attr-content" content="Im Grundsatzprogramm von Volt Deutschland fordern wir „Diversität als Selbstverständlichkeit“ (S.74)! Wir können aber nicht davon ausgehen, dass Volt automatisch diese Diversität erreicht. Tatsächlich wissen wir längst über die ungleiche Gender-Verteilung in Volt bescheit. (Gemessen an den Kategorien Frau und Mann des binären Gender-Systems.)">
<meta property="og:url" content="https://volt-diversity-survey.web.app/">
<meta property="og:site_name" content="Volt Europa">
<meta property="og:type" content="website">
<meta property="og:image" content="http://volt-diversity-survey.web.app/thumbnail.png">
<meta property="og:image:url" content="http://volt-diversity-survey.web.app/thumbnail.png">
<meta property="og:image:secure_url" content="https://volt-diversity-survey.web.app/thumbnail.png">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1334">
<meta property="og:image:height" content="750">
<meta name="twitter:title" data-translation-key="website_title" data-translation-dest="attr-content" content="Volt — Internal Diversity Survey">
<meta name="twitter:description" data-translation-key="website_description" data-translation-dest="attr-content" content="Im Grundsatzprogramm von Volt Deutschland fordern wir „Diversität als Selbstverständlichkeit“ (S.74)! Wir können aber nicht davon ausgehen, dass Volt automatisch diese Diversität erreicht. Tatsächlich wissen wir längst über die ungleiche Gender-Verteilung in Volt bescheit. (Gemessen an den Kategorien Frau und Mann des binären Gender-Systems.)">
<meta name="twitter:site" content="@VoltEuropa">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://volt-diversity-survey.web.app/thumbnail.png">
<meta name="twitter:image:alt" content="Volt — Internal Diversity Survey. Im Grundsatzprogramm von Volt Deutschland fordern wir „Diversität als Selbstverständlichkeit“!">
<title id="websiteTitle" data-translation-key="website_title">Volt — Internal Diversity Survey</title>
<script async defer data-website-id="1331508f-202c-4c87-9a1b-f8572c401af1" src="https://umami.volteuropa.org/umami.js"></script>
<script type="text/javascript" src="./jsSHA/src/sha3.js" defer></script>
<script type="text/javascript" src="./_DATA_.js" defer></script>
<link href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" rel="icon" type="image/x-icon" />
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html,
body {
--volt-purple: #502379;
--volt-yellow: #FDC220;
--volt-red: #E63E12;
--volt-blur: #82D0F4;
--volt-green: #1BBE6F;
--page-width: 800px;
--block-width: 400px;
--max-page-size: calc(100% - 64px);
--light-color: white;
--dark-color: var(--volt-purple);
--on-light-color: #141414;
--on-dark-color: white;
max-width: 100%;
background: var(--light-color);
color: var(--on-light-color);
font-family: "Ubuntu", "Helvetica", "Arial", sans-serif;
font-weight: 400;
font-style: normal;
font-size: 18px;
line-height: 1.3;
overflow-x: hidden;
/*scroll-behavior: smooth;*/
/*filter: grayscale(1) contrast(1.1);*/
}
a,
a:hover,
a:visited,
a:focus {
color: inherit;
text-decoration: underline;
}
a:hover {
opacity: 0.8;
}
.block_wrapper {
display: flex;
margin: 0;
}
.block_left,
.block_right {
width: 50%;
display: inline-block;
vertical-align: top;
}
.block_left {
margin: 0 32px 0 0;
}
.block_right {
margin: 0 0 0 32px;
}
@media (max-width: 700px) {
.block_wrapper,
.block_left,
.block_right {
display: block;
width: 100%;
margin: 0;
}
}
.page {
position: absolute;
z-index: 1;
top: 0;
right: 0;
/*bottom: 0;*/
left: 0;
min-height: 100%;
/*overflow: auto;*/
overflow-x: hidden;
/*-webkit-overflow-scrolling: touch;*/
background: var(--light-color);
color: var(--on-light-color);
display: none;
}
.page.open {
display: block;
}
.page.violet_bg {
color: white;
background: var(--volt-purple);
}
.page.orange_bg {
color: black;
background: var(--volt-red);
}
.page .pageContent {
width: var(--page-width);
max-width: calc(100% - 64px);
margin: 0 auto;
padding: 0 0 64px 0;
}
section {
margin: 128px 0 32px 0;
}
section .intro {
width: 500px;
max-width: 100%;
margin: 64px 0 0 0;
}
.question {
display: block;
width: 500px;
max-width: 100%;
/*padding: 32px;*/
margin: 64px 0 0 0;
/*box-shadow: 0 16px 32px rgba(0,0,0,0.2);*/
}
@media (max-width: 800px) {
.question {
margin: 32px 0 0 0;
}
}
.voltLogo {
z-index: 1;
position: relative;
display: inline-block;
color: var(--volt-purple) !important;
margin-top: 32px;
margin-bottom: 86px;
transition: top 0.2s ease, margin-bottom 0.2s ease;
}
.website_heading {
margin-top: 32px;
}
.website_description {
margin-top: 16px;
transition: margin-top 0.2s ease;
}
@media (max-width: 800px) {
.website_heading {
margin-top: 0;
}
}
h1 {
margin: 0;
font-size: 4rem;
line-height: 1;
color: var(--on-light-color);
transition: font-size 0.2s ease;
}
.page.violet_bg h1,
.page.orange_bg h1 {
color: var(--on-dark-color);
}
@media (max-width: 800px) {
h1 {
font-size: 3rem;
}
}
h2 {
display: inline-block;
position: relative;
color: white;
font-size: 2rem;
line-height: 1.6;
padding: 16px 32px;
margin: 0 -32px -16px -32px;
-webkit-box-decoration-break: clone;
box-decoration-break: clone;
}
section h2 {
background: var(--volt-purple);
}
section h2:after {
z-index: -1;
content: '';
position: absolute;
top: 0;
right: -1000px;
bottom: 0;
width: 1000px;
box-shadow:
calc(var(--block-width) * -9) 0 0 var(--volt-purple),
calc(var(--block-width) * -8) 0 0 var(--volt-purple),
calc(var(--block-width) * -7) 0 0 var(--volt-purple),
calc(var(--block-width) * -6) 0 0 var(--volt-purple),
calc(var(--block-width) * -5) 0 0 var(--volt-purple),
calc(var(--block-width) * -4) 0 0 var(--volt-purple),
calc(var(--block-width) * -3) 0 0 var(--volt-purple),
calc(var(--block-width) * -2) 0 0 var(--volt-purple),
calc(var(--block-width) * -1) 0 0 var(--volt-purple);
/*box-shadow:
calc(var(--block-width) * -9) 0 0 var(--volt-purple),
calc(var(--block-width) * -8) 0 0 var(--volt-purple),
calc(var(--block-width) * -7) 0 0 var(--volt-purple),
calc(var(--block-width) * -6) 0 0 var(--volt-purple),
calc(var(--block-width) * -5) 0 0 var(--volt-purple),
calc(var(--block-width) * -4) 0 0 var(--volt-purple),
calc(var(--block-width) * -3) 0 0 var(--volt-purple),
calc(var(--block-width) * -2) 0 0 var(--volt-purple),
calc(var(--block-width) * -1) 0 0 var(--volt-purple),
calc(var(--block-width) * 1) 0 0 var(--volt-purple),
calc(var(--block-width) * 2) 0 0 var(--volt-purple),
calc(var(--block-width) * 3) 0 0 var(--volt-purple),
calc(var(--block-width) * 4) 0 0 var(--volt-purple),
calc(var(--block-width) * 5) 0 0 var(--volt-purple),
calc(var(--block-width) * 6) 0 0 var(--volt-purple),
calc(var(--block-width) * 7) 0 0 var(--volt-purple),
calc(var(--block-width) * 8) 0 0 var(--volt-purple),
calc(var(--block-width) * 9) 0 0 var(--volt-purple);*/
}
h3 {
font-size: 1rem;
cursor: text;
margin: 0 0 16px 0;
}
p {
cursor: text;
margin: 0 0 16px 0;
}
.why_text {
opacity: 0.8;
margin: 0 0 5px 0;
}
.why_text.no_info_text {
margin: 0 0 16px 0;
}
.markedText {
position: relative;
display: inline;
padding: 0.1em 0.3em 0.1em 0.3em;
-webkit-box-decoration-break: clone;
box-decoration-break: clone;
background-color: var(--light-color);
color: var(--on-light-color);
}
.markedText.light_on_dark {
background-color: var(--dark-color);
color: var(--on-dark-color);
}
.markedText.dark_on_light {
background-color: var(--light-color);
color: var(--on-light-color);
}
.markedText.black_on_orange {
background-color: var(--volt-red);
color: var(--on-light-color);
}
.markedText.white_on_black {
background-color: var(--on-light-color);
color: var(--on-dark-color);
}
hr {
background: black;
/*background: var(--volt-purple);*/
margin: 16px 0;
border: 0;
height: 1px;
}
input[type="text"],
input[type="number"],
textarea,
select {
-webkit-appearance: none;
border: none;
border: 3px solid var(--volt-purple);
color: black;
min-height: 64px;
padding: 0px 16px;
border-radius: 0px 0px 0 0;
border-width: 3px;
/*background: rgba(88,44,131,0.1);*/
min-width: 100%;
width: 100%;
max-width: 100%;
display: block;
cursor: text;
font-size: 1rem;
font-family: "Ubuntu", "Helvetica", "Arial", sans-serif;
line-height: normal;
outline: none;
}
input::placeholder,
textarea::placeholder,
#metadata select[selectedValue=""] {
color: rgba(0, 0, 0, 0.54);
opacity: 1;
}
select option {
color: black;
}
textarea {
padding: 16px;
border-radius: 0;
border-width: 3px;
height: 128px;
}
select.not_showingAllOptions {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
cursor: pointer;
height: 64px;
}
select.not_showingAllOptions option {
padding: 22px 16px;
}
select.showingAllOptions {
cursor: default;
padding: 0;
min-height: auto;
}
select.showingAllOptions option {
padding: 22px 16px;
outline: none;
cursor: pointer;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
input.inline,
select.inline {
min-width: 0;
width: 100%;
max-width: 100%;
overflow: hidden;
min-height: 24px;
padding: 0;
border-radius: 0;
border-width: 0 0 3px 0;
margin: 0 0 1px 0;
background: transparent;
}
/*.selector:not(*:root), select.inline{ */
/* .selector:not(*:root) is a hack to only target chrome*/
.chrome select.inline,
.webkit select.inline,
input.inline {
padding: 0 0 0 4px;
}
label.languageChooserWrapper {
margin-top: 64px;
display: flex;
align-items: center;
background: white;
color: black;
min-height: 64px;
padding: 0;
/*font-size: 1rem;*/
/*font-family: "Ubuntu", "Helvetica", "Arial", sans-serif;*/
outline: none;
cursor: pointer;
}
label.languageChooserWrapper .labelText {
margin: 0 -22px 0 22px;
}
label.languageChooserWrapper select {
/*padding: 0 22px 0 8px;*/
background: rgb(255, 0, 0, 0.5);
padding: 0 0 0 121px;
margin-left: -84px;
background: transparent;
}
.radio_or_checkbox_label {
line-height: 32px;
padding: 2px 0;
cursor: pointer;
display: flex;
flex-direction: row;
}
.radio_or_checkbox_label input[type="checkbox"],
.radio_or_checkbox_label input[type="radio"] {
position: relative;
height: 32px;
width: 32px;
border-radius: 0;
vertical-align: middle;
margin: 0 16px 0 0;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
cursor: pointer;
flex-shrink: 0;
background: var(--light-color);
border: 3px solid var(--volt-purple);
transition: background 0.2s ease, border 0.2s ease;
}
.radio_or_checkbox_label input[type="radio"] {
border-radius: 100%;
}
.radio_or_checkbox_label input[type="checkbox"]:checked,
.radio_or_checkbox_label input[type="radio"]:checked {
background: var(--volt-green);
border: 3px solid var(--volt-green);
}
.radio_or_checkbox_label input[type="checkbox"]:before,
.radio_or_checkbox_label input[type="radio"]:before {
content: '✓';
position: absolute;
top: -3px;
right: 0;
bottom: 0;
left: 0;
font-size: 32px;
line-height: 32px;
text-align: center;
color: white;
opacity: 0;
transform: scale(0.6);
transition: transform 0.2s ease, opacity 0.2s ease;
}
/*.radio_or_checkbox_label input[type="radio"]:before{
content: '•';
top: -6px;
}*/
.radio_or_checkbox_label input[type="checkbox"]:checked:before,
.radio_or_checkbox_label input[type="radio"]:checked:before {
opacity: 1;
transform: scale(1);
}
.radio_or_checkbox_label span {
display: inline-block;
vertical-align: middle;
}
button {
position: relative;
font-size: 2rem;
line-height: 1.6;
font-family: "Ubuntu", "Helvetica", "Arial", sans-serif;
font-weight: bold;
border: none;
border-radius: 0;
padding: 16px 32px;
margin: 16px auto;
cursor: pointer;
width: 200vw;
text-align: left;
background: var(--light-color);
color: var(--on-light-color);
opacity: 1;
transition: opacity 0.2s ease;
}
.page.violet_bg button {
background: var(--light-color);
color: var(--volt-purple);
}
.page.orange_bg button {
background: var(--light-color);
color: var(--on-light-color);
}
button.green {
background: var(--volt-green);
color: white;
}
@media (max-width: 450px) {
button {
padding: 16px 32px;
font-size: 1.2rem;
/*width: 100%;*/
}
}
button:hover {
opacity: 0.7;
}
button .arrow:before {
content: '➔';
font-size: 5rem;
line-height: 1;
overflow: hidden;
display: inline-block;
margin: -40px 0 -32px 16px;
}
@media (max-width: 800px) {
button .arrow:before {
font-size: 3rem;
margin: -40px 0 -20px 16px;
}
}
.message {
font-size: 1.2rem;
padding: 0.1em 0.3em 0.1em 0.3em;
box-decoration-break: clone;
display: inline-block;
background: black;
color: white;
}
.message.success {
margin: 128px 0 0 0;
background: var(--volt-green);
color: white;
}
.message.error {
background: transparent;
color: black;
box-shadow: 0 0 0 8px var(--volt-red);
}
.message.success,
.message.error,
.message.saving {
display: none;
}
body.error .message.success {
display: none;
}
body.error .message.error {
display: inline-block;
}
body.saving .message.saving {
display: inline-block;
}
body.saving #metadata,
body.saving #inputs,
body.saving .submitWrapper {
opacity: 0.5;
/*pointer-events: none;*/
}
body.success .message.success {
display: inline-block;
}
body.success #inputs,
body.success .submitWrapper {
display: none;
}
.submitWrapper {
padding: 64px 0 0 0;
}
/*.scrollIndicator{
z-index: 9999999;
position: fixed;
bottom: 32px;
left: 50%;
width: 32px;
height: 32px;
font-size: 3rem;
font-weight: 900;
color: white;
text-align: center;
line-height: 32px;
filter: drop-shadow(0 0 8px var(--volt-purple));
transform: rotateZ(90deg) translate(0%, -50%);
animation: moveScrollIndicator 1s ease infinite alternate;
}
@keyframes moveScrollIndicator{
0% {
transform: rotateZ(90deg) translate(0%, -50%);
}
100% {
transform: rotateZ(90deg) translate(50%, -50%);
}
}*/
</style>
<style>
/* latin-ext */
/*@font-face {
font-family: 'Ubuntu';
font-style: italic;
font-weight: 400;
font-display: swap;
src: local('Ubuntu Italic'), local('Ubuntu-Italic'), url(./Ubuntu/4iCu6KVjbNBYlgoKej76l0mwFg.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}*/
/* latin */
/*@font-face {
font-family: 'Ubuntu';
font-style: italic;
font-weight: 400;
font-display: swap;
src: local('Ubuntu Italic'), local('Ubuntu-Italic'), url(./Ubuntu/4iCu6KVjbNBYlgoKej70l0k.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}*/
/* latin-ext */
/*@font-face {
font-family: 'Ubuntu';
font-style: italic;
font-weight: 700;
font-display: swap;
src: local('Ubuntu Bold Italic'), local('Ubuntu-BoldItalic'), url(./Ubuntu/4iCp6KVjbNBYlgoKejZPslyBN4Ffgg.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}*/
/* latin */
/*@font-face {
font-family: 'Ubuntu';
font-style: italic;
font-weight: 700;
font-display: swap;
src: local('Ubuntu Bold Italic'), local('Ubuntu-BoldItalic'), url(./Ubuntu/4iCp6KVjbNBYlgoKejZPslyPN4E.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}*/
/* latin-ext */
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(./Ubuntu/4iCs6KVjbNBYlgoKcQ72j00.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(./Ubuntu/4iCs6KVjbNBYlgoKfw72.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 700;
font-display: swap;
src: local('Ubuntu Bold'), local('Ubuntu-Bold'), url(./Ubuntu/4iCv6KVjbNBYlgoCxCvjvmyNL4U.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 700;
font-display: swap;
src: local('Ubuntu Bold'), local('Ubuntu-Bold'), url(./Ubuntu/4iCv6KVjbNBYlgoCxCvjsGyN.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
</style>
<style>
body[show=""] .page[page="intro"],
body[show="intro"] .page[page="intro"],
body[show="privacy"] .page[page="privacy"],
body[show="questions"] .page[page="questions"] {
display: block;
}
</style>
</head>
<body show="intro">
<div class="page violet_bg" page="intro">
<div class="pageContent">
<h1 class="voltLogo">
<svg style="width:120px;" version="1.1" viewBox="0 0 10433 4346.4" xml:space="preserve"
xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="matrix(1.3333 0 0 -1.3333 0 4346.4)">
<g transform="scale(.1)">
<g transform="scale(4.8003)">
<path
d="m14379 2218.8v1776.9h1315.8v1191h-1315.8v1604.1l-1431.2-226.68v-4364.6c0-326.56 30.3-624.34 91.2-893.28 60.8-268.94 168.1-497.97 321.8-686.77 153.7-188.95 358.6-336.16 614.7-441.82 256.1-105.66 579.5-158.49 970.2-158.49 307.3 0 566.7 25.665 778 76.828 211.3 51.184 403.4 111.97 576.3 182.51l-201.7 1114.2c-134.5-51.33-283.4-91.24-446.7-120.07-163.3-28.81-321.7-43.21-475.4-43.21-320.3 0-533.1 89.58-638.7 268.94-105.7 179.2-158.5 419.31-158.5 720.38"
fill="white" />
</g>
<g transform="scale(1.9999)">
<path
d="m9820.1 322.77c633.3 1336.1 1257.6 2726.6 1872.1 4171.6 614.6 1444.9 1198.2 2874.3 1751.5 4288.6 553.4 1414 1062.7 2765.6 1528.5 4054.9 465.8 1288.9 877.5 2443.1 1235.6 3462.2h-3828.9c-300.5-930.1-633.7-1928.3-999.7-2994.6-366-1066.7-738.5-2129.8-1118.2-3188.9-379.69-1059.4-747.87-2074.2-1103.7-3044.3-355.92-970.46-684.09-1806.3-984.21-2507.3-318.42 705.69-651.64 1543.6-999.66 2514.1-347.97 970.46-711.79 1985.3-1091.5 3044.8-379.67 1059-752.89 2122.1-1118.9 3188.8-366 1066.3-698.5 2062.3-997.5 2987.4h-3965.5c339.34-1014 742.81-2166.8 1209.7-3458.6 466.87-1291.8 978.4-2644.2 1535.3-4056.7 556.57-1412.8 1144.1-2840.8 1763-4284 618.54-1443.4 1245.7-2836.1 1881.9-4178h3430.2"
fill="white" />
</g>
<g transform="scale(3.674)">
<path d="m16300 8872.8-1869.9-296.16v-8400.9h1869.9v8697" fill="white" />
</g>
<g transform="scale(3.1347)">
<path
d="m14312 3971.5c0-1085.8-880.3-1966.1-1966.1-1966.1-1085.9 0-1966.1 880.25-1966.1 1966.1 0 1085.8 880.2 1966.1 1966.1 1966.1 1085.8 0 1966.1-880.24 1966.1-1966.1m1988.5 0c0 2193.4-1778.1 3971.5-3971.5 3971.5-904.2 0-1737.8-302.23-2405.4-811.12-185.82-496.16-380.96-1005.6-585.58-1528.5-295.34-754.93-604.3-1516.7-926.94-2285.2 311.61-1882.5 1947.1-3318.1 3917.9-3318.1 2193.4 0 3971.5 1778.1 3971.5 3971.5"
fill="white" />
</g>
</g>
</g>
</svg>
</h1>
<h1 class="website_heading" data-translation-key="website_heading"></h1>
<div class="block_wrapper">
<div class="block_left">
<p class="website_description" data-translation-key="website_description"></p>
<label style="display:none;" class="languageChooserWrapper" for="languageChooserSelect">
<div class="labelText">Language:</div>
<select class="not_showingAllOptions" style="border-width:0;" id="languageChooserSelect">
<option value="de" selected>German (Deutsch)</option>
<option value="en">English</option>
</select>
</label>
</div>
</div>
<button to-page="privacy"><span data-translation-key="button_to_privacy"></span> <span
class="arrow"></span></button>
</div>
</div>
<div class="page orange_bg" page="privacy">
<div class="pageContent" style="padding-top:64px;">
<h1 class="website_heading" data-translation-key="heading_privacy"></h1>
<div class="block_wrapper" style="margin-top:32px;">
<div class="block_left" style="font-weight:bold;">
<p data-translation-key="">
<h2 data-translation-key="heading_optional"></h2><br>
<span data-translation-key="optional_info"></span>
</p>
<p>
<h2 data-translation-key="heading_anonymous"></h2><br>
<span data-translation-key="anonymous_info"></span>
</p>
</div>
<div class="block_right">
<p style="padding-top:48px;opacity:0.8;font-size:16px;line-height:1.2;display: block;"
data-translation-key="privacy_details"></p>
</div>
</div>
<button to-page="questions" style="margin-top:64px;"><span data-translation-key="button_to_questions"></span>
<span class="arrow"></span></button>
</div>
</div>
<div class="page white_bg" page="questions">
<div class="pageContent">
<div id="inputs"></div>
<div style="margin-bottom: 128px;">
<div class="submitWrapper">
<label class="radio_or_checkbox_label" style="display:flex;align-items: center;width:450px;max-width:100%;">
<input id="metadataIsFirstCompletion" type="checkbox" />
<strong style="text-align:left; padding-bottom:1px; line-height:1.1;"
data-translation-key="metadata_is_this_the_first_completion"></strong>
</label>
<button class="green" id="submitButton"><span data-translation-key="button_send_to_volt"></span><span
class="arrow"></span></button>
</div>
<p class="message saving" data-translation-key="saving"></p>
<p class="message success" data-translation-key="success"></p>
<p class="message error" data-translation-key="error"></p>
</div>
</div>
</div>
<script>
const CloudFunctionsPrefix = 'https://us-central1-volt-4eca0.cloudfunctions.net/save_formdata'
function resetBodyClasses() {
body.classList.remove('error')
body.classList.remove('success')
body.classList.remove('saving')
}
function getByLanguage(objectWithValuesByLanguage) {
let value = '[NO TRANSLATION FOUND!]'
if (objectWithValuesByLanguage) {
if (objectWithValuesByLanguage[_language_]) {
value = objectWithValuesByLanguage[_language_]
} else if (objectWithValuesByLanguage['en']) {
value = objectWithValuesByLanguage['en']
} else if (objectWithValuesByLanguage['de']) {
value = objectWithValuesByLanguage['de']
}
}
// if (value.indexOf(' ') > -1) {
// value = value.substr(0,value.lastIndexOf(' '))+'&nbsp;'+value.substr(value.lastIndexOf(' ')+1)
// }
return value
}
function generateForm(data) {
// websiteTitle.innerHTML = 'Volt — '+getByLanguage(_DATA_.translation_texts.website_title).replace(/\n+/g, ' ')
for (const section of _DATA_.sections) {
var sectionEle = document.createElement('section')
if (!!section.heading) {
var sectionHeading = document.createElement('h2')
sectionHeading.innerHTML = getByLanguage(section.heading)
sectionEle.appendChild(sectionHeading)
}
if (!!section.intro) {
var sectionIntro = document.createElement('p')
sectionIntro.classList.add('intro')
sectionIntro.innerHTML = getByLanguage(section.intro)
sectionEle.appendChild(sectionIntro)
}
// display questions
for (const questionKey of Object.keys(section.questions)) {
const question = section.questions[questionKey]
var questionEle = document.createElement('div')
questionEle.classList.add('question')
if (!!question.question) {
var questionHeading = document.createElement('h3')
questionHeading.innerHTML = getByLanguage(question.question)
questionEle.appendChild(questionHeading)
}
if (!!question.why) {
var question_why_text = document.createElement('p')
question_why_text.classList.add('why_text')
if (!question.info) {
question_why_text.classList.add('no_info_text')
}
question_why_text.innerHTML = getByLanguage(question.why)
questionEle.appendChild(question_why_text)
}
if (!!question.info) {
var question_info_text = document.createElement('p')
// question_info_text.classList.add('info_text')
question_info_text.innerHTML = getByLanguage(question.info)
questionEle.appendChild(question_info_text)
}
if (question.type == 'number') {
let newInput = document.createElement('input')
newInput.addEventListener('click', resetBodyClasses)
newInput.setAttribute('name', questionKey)
newInput.setAttribute('type', 'number')
newInput.setAttribute('placeholder', '…')
newInput.addEventListener('click', resetBodyClasses)
// newInput.value = '123'
questionEle.appendChild(newInput)
} else if (question.type == 'checkbox') {
for (const key of Object.keys(question.options)) {
let labelEle = document.createElement('label')
labelEle.classList.add('radio_or_checkbox_label')
labelEle.addEventListener('click', resetBodyClasses)
let checkboxEle = document.createElement('input')
checkboxEle.setAttribute('type', 'checkbox')
checkboxEle.setAttribute('name', questionKey)
checkboxEle.setAttribute('value', key)
labelEle.appendChild(checkboxEle)
let spanEle = document.createElement('span')
spanEle.innerHTML = getByLanguage(question.options[key])
labelEle.appendChild(spanEle)
questionEle.appendChild(labelEle)
}
} else if (question.type == 'radio') {
for (const key of Object.keys(question.options)) {
let labelEle = document.createElement('label')
labelEle.classList.add('radio_or_checkbox_label')
labelEle.addEventListener('click', resetBodyClasses)
let checkboxEle = document.createElement('input')
checkboxEle.setAttribute('type', 'radio')
checkboxEle.setAttribute('name', questionKey)
checkboxEle.setAttribute('value', key)
labelEle.appendChild(checkboxEle)
let spanEle = document.createElement('span')
spanEle.innerHTML = getByLanguage(question.options[key])
labelEle.appendChild(spanEle)
questionEle.appendChild(labelEle)
}
} else if (question.type == 'chooser') {
let newInput = document.createElement('select')
newInput.addEventListener('click', resetBodyClasses)
if (questionKey == 'metadata_country') {
newInput.setAttribute('selectedValue', window.volt_country_party)
for (const country_data of _DATA_.countries) {
const disabled = country_data.disabled
const value = (country_data.value ? country_data.value : '')
let title = ''
if (country_data.title) {
title = country_data.title
} else if (country_data.en && country_data.local_name && country_data.en != country_data.local_name) {
title = country_data.en + ' (' + country_data.local_name + ')'
} else if (country_data.en) {
title = country_data.en
} else if (country_data.local_name) {
title = country_data.local_name
}
const optionEle = document.createElement('option')
optionEle.setAttribute('name', questionKey)
optionEle.setAttribute('value', value)
optionEle.innerHTML = title
if (window.volt_country_party == value) {
optionEle.selected = true
}
if (disabled == true) {
optionEle.disabled = true
}
newInput.appendChild(optionEle)
}
} else {
// question.options = {
// '': {de:'…'},
// ...question.options
// }
question.options = Object.assign({}, { '': { de: '…' } }, question.options)
newInput.setAttribute('selectedValue', '')
// let optionEle = document.createElement('option')
// optionEle.setAttribute('value', '')
// optionEle.innerHTML = '…'
// newInput.appendChild(optionEle)
// var c = 0
for (const key of Object.keys(question.options)) {
let optionEle = document.createElement('option')
optionEle.setAttribute('name', questionKey)
optionEle.setAttribute('value', key)
optionEle.innerHTML = getByLanguage(question.options[key])
// if (c == 1) {
// optionEle.selected = true
// }
newInput.appendChild(optionEle)
// c += 1
}
}
newInput.addEventListener('change', e => {
const optionEles = e.target.querySelectorAll('option')
for (let optionEle of optionEles) {
if (optionEle.selected) {
newInput.setAttribute('selectedValue', optionEle.value)
break
}
}
})
if (question.multiSelect) {
newInput.setAttribute('multiple', 'multiple')
question.showAllOptions = true
}
if (question.showAllOptions) {
newInput.classList.add('showingAllOptions')
newInput.setAttribute('size', Object.keys(question.options).length)
} else {
newInput.classList.add('not_showingAllOptions')
}
questionEle.appendChild(newInput)
} else if (question.type == 'one_line_text') {
let newInput = document.createElement('input')
newInput.addEventListener('click', resetBodyClasses)
newInput.setAttribute('name', questionKey)
newInput.setAttribute('type', 'text')
newInput.setAttribute('placeholder', '…')
// newInput.value = 'some text'
questionEle.appendChild(newInput)
if (questionKey == 'metadata_city') {
newInput.value = window.volt_city
}
} else {
let newInput = document.createElement('textarea')
newInput.addEventListener('click', resetBodyClasses)
newInput.setAttribute('name', questionKey)
// newInput.setAttribute('type', 'text')
newInput.setAttribute('placeholder', '…')
// newInput.innerHTML = 'some text'
questionEle.appendChild(newInput)
}
sectionEle.appendChild(questionEle)
}
inputs.appendChild(sectionEle)
}
}
function getMetadata(country, city) {
// const now = new Date()
let metadata = {
// year and quater is calculated on the server
// year: now.getFullYear(),
// quater: Math.floor((now.getMonth() + 3) / 3),
isFirstCompletion: !!metadataIsFirstCompletion.checked,
// country: metadataCountries.getAttribute('selectedValue'),
// city: metadataCity.value,
country: country,
city: city,
}
return metadata
}
function getTimelessButAnonymousTrackingCode(questionKey, answerKey) {
// tatc = Timeless but Anonymous Tracking Code
const shaObj = new jsSHA('SHA3-512', 'TEXT')
shaObj.update(window.pre_tatc + '' + questionKey) // +' '+answerKey
return shaObj.getHash('HEX')
}
function submitForm() {
if (navigator.onLine) {
var answers = []
const elements = [
...inputs.querySelectorAll('input[type="text"]'),
...inputs.querySelectorAll('textarea'),
...inputs.querySelectorAll('input[type="number"]'),
]
for (const ele of elements) {
const questionKey = ele.getAttribute('name')
const value = ele.value
if (value != '' && questionKey != '') {
answers.push({
questionKey: questionKey,
answerKey: null,
value: value,
// metadata: metadata,
// tatc: getTimelessButAnonymousTrackingCode(questionKey, null),
})
}
}
for (const ele of inputs.querySelectorAll('option')) {
const questionKey = ele.getAttribute('name')
const answerKey = ele.value
if (ele.selected && questionKey != '' && answerKey != '') {
answers.push({
questionKey: questionKey,
answerKey: answerKey,
value: true, // (ele.selected ? true : false),
// metadata: metadata,
// tatc: getTimelessButAnonymousTrackingCode(questionKey, null),
})
}
}
for (const ele of inputs.querySelectorAll('input[type="checkbox"]')) {
const questionKey = ele.getAttribute('name')
const answerKey = ele.value
if (ele.checked && questionKey != '' && answerKey != '') {
answers.push({
questionKey: questionKey,
answerKey: answerKey,
value: true, // (ele.checked ? true : false),
// metadata: metadata,
// tatc: getTimelessButAnonymousTrackingCode(questionKey, answerKey),
})
}
}
for (const ele of inputs.querySelectorAll('input[type="radio"]')) {
const questionKey = ele.getAttribute('name')
const answerKey = ele.value
if (ele.checked && questionKey != '' && answerKey != '') {
answers.push({
questionKey: questionKey,
answerKey: answerKey,
value: true, // (ele.checked ? true : false),
// metadata: metadata,
// tatc: getTimelessButAnonymousTrackingCode(questionKey, answerKey),
})
}
}
if (answers.length > 0) {
body.classList.add('saving')
// add the metadata
const metadata_country_value = answers.filter(a => a.questionKey == 'metadata_country').map(a => a.answerKey)[0] || ''
const metadata_city_value = answers.filter(a => a.questionKey == 'metadata_city').map(a => a.value)[0] || ''
const metadata = getMetadata(metadata_country_value, metadata_city_value)
answers = answers.filter(answer => answer.questionKey != 'metadata_country' && answer.questionKey != 'metadata_city')
// answers = answers.map(answer=> ({
// ...answer,
// metadata: metadata,
// tatc: getTimelessButAnonymousTrackingCode(answer.questionKey, answer.answerKey),
// }) )
answers = answers.map(answer => Object.assign({}, answer, {
metadata: metadata,
tatc: getTimelessButAnonymousTrackingCode(answer.questionKey, answer.answerKey),
}))
console.log('answers:', answers)
let startTS = new Date() * 1
console.info('START', 0)
async.each(answers, (answer, callback) => {
const xmlReq = new XMLHttpRequest()
xmlReq.addEventListener('load', event => {
const json_res = JSON.parse(event.target.responseText)
if (!!json_res && !json_res.error) {
callback()
} else {
callback('error')
}
})
xmlReq.open('GET', CloudFunctionsPrefix + '?data=' + encodeURIComponent(JSON.stringify({ answers: [answer] })))
xmlReq.send()
}, error => {
console.info('END', (new Date() * 1) - startTS)
if (!!error) {
body.classList.add('error')
body.classList.remove('saving')
} else {
body.classList.add('success')
body.classList.remove('saving')
clearForm()
}
})
}
}
}
function clearForm() {
for (const ele of inputs.querySelectorAll('input[type="text"]')) {
ele.value = ''
}
for (const ele of inputs.querySelectorAll('input[type="number"]')) {
ele.value = ''
}
for (const ele of inputs.querySelectorAll('input[type="checkbox"]')) {
ele.checked = false
}
for (const ele of inputs.querySelectorAll('option')) {
ele.selected = false
}
}
function getIdentifier() {
// a got a few things from https://github.com/Valve/fingerprintjs2/blob/master/fingerprint2.js
// var getDoNotTrack = function() {
// if (navigator.doNotTrack) {
// return navigator.doNotTrack
// } else if (navigator.msDoNotTrack) {
// return navigator.msDoNotTrack
// } else if (window.doNotTrack) {
// return window.doNotTrack
// } else {
// return false
// }
// }
var getTouchSupport = function () {
var maxTouchPoints = 0
var touchEvent;
if (typeof navigator.maxTouchPoints !== 'undefined') {
maxTouchPoints = navigator.maxTouchPoints
} else if (typeof navigator.msMaxTouchPoints !== 'undefined') {
maxTouchPoints = navigator.msMaxTouchPoints
}
try {
document.createEvent('TouchEvent')
touchEvent = true
} catch (_) {
touchEvent = false
}
var touchStart = 'ontouchstart' in window
return [maxTouchPoints, touchEvent, touchStart]
}
var timezone = function () {
if (window.Intl && window.Intl.DateTimeFormat) {
return new window.Intl.DateTimeFormat().resolvedOptions().timeZone
}
return false
}
var relativly_unique_information = {
browserPlatform: navigator.platform,
javaEnabled: navigator.javaEnabled(),
dataCookiesEnabled: navigator.cookieEnabled,
sizeScreenAvailWidth: screen.availWidth,
sizeScreenAvailHeight: screen.availHeight,
sizeScreenWidth: screen.width,
sizeScreenHeight: screen.height,
scrColorDepth: screen.colorDepth,
scrPixelDepth: screen.pixelDepth,
hardwareConcurrency: navigator.hardwareConcurrency,
// doNotTrack: getDoNotTrack(),
isTouchCapable: getTouchSupport().join('|'),
// isTouchCapable: 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch || navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0,
timezoneOffset: new Date().getTimezoneOffset(),
timezone: timezone(),
browserLanguage: (navigator.language || navigator.userLanguage || navigator.browserLanguage || navigator.systemLanguage),
languages: [...(navigator.languages || [])].sort().join('|'),
}
return Object.values(relativly_unique_information).join('|')
}
function parseQuery(queryString) {
var query = {}
var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&')
for (var i = 0; i < pairs.length; i++) {
var pair = pairs[i].split('=')
if (pair[0] != '') {
query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '')
}
}
return query
}
function obj2searchQuery(obj) {
var query_parts = []
for (const key of Object.keys(obj)) {
query_parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]))
}
return '?' + query_parts.join('&')
}
function setMetadata() {
// const now = new Date()
// metaDataCurrentYear.innerHTML = now.getFullYear()
// metadataCurrentRangeInYear.innerHTML = getByLanguage(_DATA_.months[now.getMonth()+1]) // quater = Math.floor((now.getMonth() + 3) / 3)
const locationSearchObj = parseQuery(window.location.search)
window.volt_country_party = (!!locationSearchObj.country ? locationSearchObj.country.toUpperCase() : 'DEU')
window.volt_city = (!!locationSearchObj.city ? locationSearchObj.city : '')
window.pre_tatc = (!!locationSearchObj.tatc ? locationSearchObj.tatc : getIdentifier()) // tatc from get OR a relatively good unique idetifier
// tatc = Timeless but Anonymous Tracking Code
}
function updateLanguageTexts() {
const translationNodes = document.querySelectorAll('[data-translation-key]')
for (let translationNode of translationNodes) {
const translationKey = translationNode.getAttribute('data-translation-key')
if (_DATA_.translation_texts[translationKey]) {
let text = ''
if (_DATA_.translation_texts[translationKey].use_instead && _DATA_.translation_texts[_DATA_.translation_texts[translationKey].use_instead]) {
text = getByLanguage(_DATA_.translation_texts[_DATA_.translation_texts[translationKey].use_instead])
} else {
text = getByLanguage(_DATA_.translation_texts[translationKey])
}
if (_DATA_.translation_texts[translationKey].prefix) {
text = _DATA_.translation_texts[translationKey].prefix + text
}
let translationDestination = ''
if (translationNode.hasAttribute('data-translation-dest')) {
translationDestination = translationNode.getAttribute('data-translation-dest')
}
if (translationDestination == 'attr-content') {
const temp_node = document.createElement("div")
temp_node.innerHTML = text
translationNode.setAttribute('content', temp_node.textContent || temp_node.innerText || "")
delete temp_node
} else {
text = text.replace(/\t+/g, '')
text = text.replace(/(^\n+|\n+$)/g, '')
if (!_DATA_.translation_texts[translationKey].is_plain) {
text = text.replace(/\n/g, '<br>')
}
translationNode.innerHTML = text
}
}
}
}
const body = document.getElementsByTagName('body')[0]
const websiteTitle = document.getElementById('websiteTitle')
const languageChooserSelect = document.getElementById('languageChooserSelect')
const metadataIsFirstCompletion = document.getElementById('metadataIsFirstCompletion')
const inputs = document.getElementById('inputs')
const submitButton = document.getElementById('submitButton')
const buttons_to_page = document.querySelectorAll('button[to-page]')
for (const button of buttons_to_page) {
button.addEventListener('click', () => {
const toPage = button.getAttribute('to-page')
if (!['', 'intro', 'privacy', 'questions'].includes(toPage)) {
toPage = ''
}
body.setAttribute('show', toPage)
window.scrollTo(0, 0)
history.pushState(null, websiteTitle.innerText, '#' + toPage)
})
}
languageChooserSelect.addEventListener('change', e => {
const optionEles = e.target.querySelectorAll('option')
for (let optionEle of optionEles) {
if (optionEle.selected) {
window._language_ = optionEle.value
updateLanguageTexts()
var locationSearchObj = parseQuery(window.location.search)
locationSearchObj.lang = optionEle.value
history.pushState(null, websiteTitle.innerText, window.location.protocol + '//' + window.location.host + window.location.pathname + obj2searchQuery(locationSearchObj) + window.location.hash)
break
}
}
})
function checkUrl() {
// check hash
let hash = document.location.hash
if (hash.charAt(0) === '#') {
hash = hash.slice(1)
}
body.setAttribute('show', hash)
// check search
const locationSearchObj = parseQuery(window.location.search)
// set language
window._language_ = locationSearchObj.lang || 'de'
updateLanguageTexts()
}
window.addEventListener('popstate', checkUrl)
submitButton.addEventListener('click', () => {
submitForm()
})
function _DATA_GOT_LOADED() {
if (typeof _DATA_ !== 'undefined') {
checkUrl()
setMetadata()
generateForm(_DATA_)
}
}
_DATA_GOT_LOADED()
</script>
<script>
// source: https://cdn.jsdelivr.net/npm/async@3.1.0/dist/async.min.js
(function (e, t) { "object" == typeof exports && "undefined" != typeof module ? t(exports) : "function" == typeof define && define.amd ? define(["exports"], t) : t(e.async = {}) })(this, function (e) { 'use strict'; function t(e, ...t) { return (...a) => e(...t, ...a) } function a(e) { return function (...t) { var a = t.pop(); return e.call(this, t, a) } } function n(e) { setTimeout(e, 0) } function i(e) { return (t, ...a) => e(() => t(...a)) } function r(e) { return u(e) ? function (...t) { const a = t.pop(), n = e.apply(this, t); return s(n, a) } : a(function (t, a) { var n; try { n = e.apply(this, t) } catch (t) { return a(t) } return n && "function" == typeof n.then ? s(n, a) : void a(null, n) }) } function s(e, t) { return e.then(e => { l(t, null, e) }, e => { l(t, e && e.message ? e : new Error(e)) }) } function l(e, t, a) { try { e(t, a) } catch (e) { Ee(t => { throw t }, e) } } function u(e) { return "AsyncFunction" === e[Symbol.toStringTag] } function c(e) { return "AsyncGenerator" === e[Symbol.toStringTag] } function d(e) { return "function" == typeof e[Symbol.asyncIterator] } function p(e) { if ("function" != typeof e) throw new Error("expected a function"); return u(e) ? r(e) : e } function o(e, t = e.length) { function a(...a) { return "function" == typeof a[t - 1] ? e.apply(this, a) : new Promise((n, i) => { a[t - 1] = (e, ...t) => e ? i(e) : void n(1 < t.length ? t : t[0]), e.apply(this, a) }) } if (!t) throw new Error("arity is undefined"); return Object.defineProperty(a, "name", { value: `awaitable(${e.name})` }), a } function h(e) { return function (t, ...a) { const n = o(function (n) { var i = this; return e(t, (e, t) => { p(e).apply(i, a.concat(t)) }, n) }); return n } } function f(e, t, a, n) { t = t || []; var i = [], r = 0, s = p(a); return e(t, (e, t, a) => { var n = r++; s(e, (e, t) => { i[n] = t, a(e) }) }, e => { n(e, i) }) } function y(e) { return e && "number" == typeof e.length && 0 <= e.length && 0 == e.length % 1 } function m(e) { function t(...t) { if (null !== e) { var a = e; e = null, a.apply(this, t) } } return Object.assign(t, e), t } function g(e) { return e[Symbol.iterator] && e[Symbol.iterator]() } function k(e) { var t = -1, a = e.length; return function () { return ++t < a ? { value: e[t], key: t } : null } } function v(e) { var t = -1; return function () { var a = e.next(); return a.done ? null : (t++, { value: a.value, key: t }) } } function S(e) { var t = e ? Object.keys(e) : [], a = -1, n = t.length; return function () { var i = t[++a]; return a < n ? { value: e[i], key: i } : null } } function L(e) { if (y(e)) return k(e); var t = g(e); return t ? v(t) : S(e) } function x(e) { return function (...t) { if (null === e) throw new Error("Callback was already called."); var a = e; e = null, a.apply(this, t) } } function E(e, t, a, n) { function i() { d >= t || c || l || (c = !0, e.next().then(({ value: e, done: t }) => { if (!(u || l)) return c = !1, t ? (l = !0, void (0 >= d && n(null))) : void (d++, a(e, p, r), p++, i()) }).catch(s)) } function r(e, t) { return d -= 1, u ? void 0 : e ? s(e) : !1 === e ? (l = !0, void (u = !0)) : t === be || l && 0 >= d ? (l = !0, n(null)) : void i() } function s(e) { u || (c = !1, l = !0, n(e)) } let l = !1, u = !1, c = !1, d = 0, p = 0; i() } function b(e, t, a) { function n(e, t) { !1 === e && (l = !0); !0 === l || (e ? a(e) : (++r === s || t === be) && a(null)) } a = m(a); var i = 0, r = 0, { length: s } = e, l = !1; for (0 === s && a(null); i < s; i++)t(e[i], i, x(n)) } function O(e, t, a) { return _e(e, 1 / 0, t, a) } function _() { function e(e, ...n) { return e ? a(e) : void t(1 < n.length ? n : n[0]) } let t, a; return e[Fe] = new Promise((e, n) => { t = e, a = n }), e } function M(e, t, a) { function n(e, t) { g.push(() => l(e, t)) } function i() { if (!h) { if (0 === g.length && 0 === o) return a(null, d); for (; g.length && o < t;) { var e = g.shift(); e() } } } function r(e, t) { var a = y[e]; a || (a = y[e] = []), a.push(t) } function s(e) { var t = y[e] || []; t.forEach(e => e()), i() } function l(e, t) { if (!f) { var n = x((t, ...n) => { if (o--, !1 === t) return void (h = !0); if (2 > n.length && ([n] = n), t) { var i = {}; if (Object.keys(d).forEach(e => { i[e] = d[e] }), i[e] = n, f = !0, y = Object.create(null), h) return; a(t, i) } else d[e] = n, s(e) }); o++; var i = p(t[t.length - 1]); 1 < t.length ? i(d, n) : i(n) } } function u(t) { var a = []; return Object.keys(e).forEach(n => { const i = e[n]; Array.isArray(i) && 0 <= i.indexOf(t) && a.push(n) }), a } "number" != typeof t && (a = t, t = null), a = m(a || _()); var c = Object.keys(e).length; if (!c) return a(null); t || (t = c); var d = {}, o = 0, h = !1, f = !1, y = Object.create(null), g = [], k = [], v = {}; return Object.keys(e).forEach(t => { var a = e[t]; if (!Array.isArray(a)) return n(t, [a]), void k.push(t); var i = a.slice(0, a.length - 1), s = i.length; return 0 === s ? (n(t, a), void k.push(t)) : void (v[t] = s, i.forEach(l => { if (!e[l]) throw new Error("async.auto task `" + t + "` has a non-existent dependency `" + l + "` in " + i.join(", ")); r(l, () => { s--, 0 === s && n(t, a) }) })) }), function () { for (var e, t = 0; k.length;)e = k.pop(), t++, u(e).forEach(e => { 0 == --v[e] && k.push(e) }); if (t !== c) throw new Error("async.auto cannot execute tasks due to a recursive dependency") }(), i(), a[Fe] } function A(e) { const t = e.toString().replace(ze, ""); let a = t.match(Pe); if (a || (a = t.match(Te)), !a) throw new Error("could not parse args in autoInject\nSource:\n" + t); let [, n] = a; return n.replace(/\s/g, "").split(Re).map(e => e.replace(Ce, "").trim()) } function I(e, t) { var a = {}; return Object.keys(e).forEach(t => { function n(e, t) { var a = i.map(t => e[t]); a.push(t), p(r)(...a) } var i, r = e[t], s = u(r), l = !s && 1 === r.length || s && 0 === r.length; if (Array.isArray(r)) i = [...r], r = i.pop(), a[t] = i.concat(0 < i.length ? n : r); else if (l) a[t] = r; else { if (i = A(r), 0 === r.length && !s && 0 === i.length) throw new Error("autoInject task functions require explicit parameters."); s || i.pop(), a[t] = i.concat(n) } }), M(a, t) } function j(e, t) { e.length = 1, e.head = e.tail = t } function w(e, t, a) { function n(e, t) { f[e].push(t) } function i(e, t) { const a = (...n) => { r(e, a), t(...n) }; f[e].push(a) } function r(e, t) { return e ? t ? void (f[e] = f[e].filter(e => e !== t)) : f[e] = [] : Object.keys(f).forEach(e => f[e] = []) } function s(e, ...t) { f[e].forEach(e => e(...t)) } function l(e, t, a, n) { function i(e, ...t) { return e ? a ? s(e) : r() : 1 >= t.length ? r(t[0]) : void r(t) } if (null != n && "function" != typeof n) throw new Error("task callback must be a function"); k.started = !0; var r, s, l = { data: e, callback: a ? i : n || i }; if (t ? k._tasks.unshift(l) : k._tasks.push(l), y || (y = !0, Ee(() => { y = !1, k.process() })), a || !n) return new Promise((e, t) => { r = e, s = t }) } function u(e) { return function (t, ...a) { o -= 1; for (var n = 0, r = e.length; n < r; n++) { var l = e[n], u = h.indexOf(l); 0 === u ? h.shift() : 0 < u && h.splice(u, 1), l.callback(t, ...a), null != t && s("error", t, l.data) } o <= k.concurrency - k.buffer && s("unsaturated"), k.idle() && s("drain"), k.process() } } function c(e) { return !!(0 === e.length && k.idle()) && (Ee(() => s("drain")), !0) } if (null == t) t = 1; else if (0 === t) throw new RangeError("Concurrency must not be zero"); var d = p(e), o = 0, h = []; const f = { error: [], drain: [], saturated: [], unsaturated: [], empty: [] }; var y = !1; const m = e => t => t ? void (r(e), n(e, t)) : new Promise((t, a) => { i(e, (e, n) => e ? a(e) : void t(n)) }); var g = !1, k = { _tasks: new Ye, *[Symbol.iterator]() { yield* k._tasks[Symbol.iterator]() }, concurrency: t, payload: a, buffer: t / 4, started: !1, paused: !1, push(e, t) { return Array.isArray(e) ? c(e) ? void 0 : e.map(e => l(e, !1, !1, t)) : l(e, !1, !1, t) }, pushAsync(e, t) { return Array.isArray(e) ? c(e) ? void 0 : e.map(e => l(e, !1, !0, t)) : l(e, !1, !0, t) }, kill() { r(), k._tasks.empty() }, unshift(e, t) { return Array.isArray(e) ? c(e) ? void 0 : e.map(e => l(e, !0, !1, t)) : l(e, !0, !1, t) }, unshiftAsync(e, t) { return Array.isArray(e) ? c(e) ? void 0 : e.map(e => l(e, !0, !0, t)) : l(e, !0, !0, t) }, remove(e) { k._tasks.remove(e) }, process() { var e = Math.min; if (!g) { for (g = !0; !k.paused && o < k.concurrency && k._tasks.length;) { var t = [], a = [], n = k._tasks.length; k.payload && (n = e(n, k.payload)); for (var r, c = 0; c < n; c++)r = k._tasks.shift(), t.push(r), h.push(r), a.push(r.data); o += 1, 0 === k._tasks.length && s("empty"), o === k.concurrency && s("saturated"); var p = x(u(t)); d(a, p) } g = !1 } }, length() { return k._tasks.length }, running() { return o }, workersList() { return h }, idle() { return 0 === k._tasks.length + o }, pause() { k.paused = !0 }, resume() { !1 === k.paused || (k.paused = !1, Ee(k.process)) } }; return Object.defineProperties(k, { saturated: { writable: !1, value: m("saturated") }, unsaturated: { writable: !1, value: m("unsaturated") }, empty: { writable: !1, value: m("empty") }, drain: { writable: !1, value: m("drain") }, error: { writable: !1, value: m("error") } }), k } function B(e, t) { return w(e, 1, t) } function F(e, t, a) { return w(e, t, a) } function P(...e) { var t = e.map(p); return function (...e) { var a = this, n = e[e.length - 1]; return "function" == typeof n ? e.pop() : n = _(), Ne(t, e, (e, t, n) => { t.apply(a, e.concat((e, ...t) => { n(e, t) })) }, (e, t) => n(e, ...t)), n[Fe] } } function T(...e) { return P(...e.reverse()) } function R(...e) { return function (...t) { var a = t.pop(); return a(null, ...e) } } function C(e, t) { return (a, n, i, r) => { var s, l = !1; const u = p(i); a(n, (a, n, i) => { u(a, (n, r) => n || !1 === n ? i(n) : e(r) && !s ? (l = !0, s = t(!0, a), i(null, be)) : void i()) }, e => e ? r(e) : void r(null, l ? s : t(!1))) } } function z(e) { return (t, ...a) => p(t)(...a, (t, ...a) => { "object" == typeof console && (t ? console.error && console.error(t) : console[e] && a.forEach(t => console[e](t))) }) } function Y(e, t, a) { const n = p(t); return Je(e, (...e) => { const t = e.pop(); n(...e, (e, a) => t(e, !a)) }, a) } function V(e) { return (t, a, n) => e(t, n) } function N(e) { return u(e) ? e : function (...t) { var a = t.pop(), n = !0; t.push((...e) => { n ? Ee(() => a(...e)) : a(...e) }), e.apply(this, t), n = !1 } } function q(e, t, a, n) { var r = Array(t.length); e(t, (e, t, n) => { a(e, (e, a) => { r[t] = !!a, n(e) }) }, e => { if (e) return n(e); for (var a = [], s = 0; s < t.length; s++)r[s] && a.push(t[s]); n(null, a) }) } function D(e, t, a, n) { var i = []; e(t, (e, t, n) => { a(e, (a, r) => a ? n(a) : void (r && i.push({ index: t, value: e }), n(a))) }, e => e ? n(e) : void n(null, i.sort((e, t) => e.index - t.index).map(e => e.value))) } function Q(e, t, a, n) { var i = y(t) ? q : D; return i(e, t, p(a), n) } function U(e, t, a) { return lt(e, 1 / 0, t, a) } function G(e, t, a) { return lt(e, 1, t, a) } function W(e, t, a) { return ct(e, 1 / 0, t, a) } function K(e, t, a) { return ct(e, 1, t, a) } function X(e, t = e => e) { var n = Object.create(null), r = Object.create(null), s = p(e), l = a((e, a) => { var u = t(...e); u in n ? Ee(() => a(null, ...n[u])) : u in r ? r[u].push(a) : (r[u] = [a], s(...e, (e, ...t) => { e || (n[u] = t); var a = r[u]; delete r[u]; for (var s = 0, c = a.length; s < c; s++)a[s](e, ...t) })) }); return l.memo = n, l.unmemoized = e, l } function J(e, t) { return pt(Me, e, t) } function Z(e, t, a) { return pt(Oe(t), e, a) } function $(e, t) { var a = p(e); return w((e, t) => { a(e[0], t) }, t, 1) } function H(e) { return (e << 1) + 1 } function ee(e) { return (e + 1 >> 1) - 1 } function te(e, t) { return e.priority === t.priority ? e.pushCount < t.pushCount : e.priority < t.priority } function ae(e, t) { var a = $(e, t); return a._tasks = new ot, a.push = function (e, t = 0, n = () => { }) { if ("function" != typeof n) throw new Error("task callback must be a function"); if (a.started = !0, Array.isArray(e) || (e = [e]), 0 === e.length && a.idle()) return Ee(() => a.drain()); for (var r, s = 0, u = e.length; s < u; s++)r = { data: e[s], priority: t, callback: n }, a._tasks.push(r); Ee(a.process) }, delete a.unshift, a } function ne(e, t, a, n) { var i = [...e].reverse(); return Ne(i, t, a, n) } function ie(e) { var t = p(e); return a(function (e, a) { return e.push((e, ...t) => { let n = {}; if (e && (n.error = e), 0 < t.length) { var i = t; 1 >= t.length && ([i] = t), n.value = i } a(null, n) }), t.apply(this, e) }) } function re(e) { var t; return Array.isArray(e) ? t = e.map(ie) : (t = {}, Object.keys(e).forEach(a => { t[a] = ie.call(this, e[a]) })), t } function se(e, t, a, n) { const i = p(a); return Q(e, t, (e, t) => { i(e, (e, a) => { t(e, !a) }) }, n) } function le(e) { return function () { return e } } function ue(e, t, a) { function n() { r((e, ...t) => { !1 === e || (e && s++ < i.times && ("function" != typeof i.errorFilter || i.errorFilter(e)) ? setTimeout(n, i.intervalFunc(s - 1)) : a(e, ...t)) }) } var i = { times: gt, intervalFunc: le(kt) }; if (3 > arguments.length && "function" == typeof e ? (a = t || _(), t = e) : (ce(i, e), a = a || _()), "function" != typeof t) throw new Error("Invalid arguments for async.retry"); var r = p(t), s = 1; return n(), a[Fe] } function ce(e, a) { if ("object" == typeof a) e.times = +a.times || gt, e.intervalFunc = "function" == typeof a.interval ? a.interval : le(+a.interval || kt), e.errorFilter = a.errorFilter; else if ("number" == typeof a || "string" == typeof a) e.times = +a || gt; else throw new Error("Invalid arguments for async.retry") } function de(e, t) { t || (t = e, e = null); let n = e && e.arity || t.length; u(t) && (n += 1); var i = p(t); return a((t, a) => { function r(e) { i(...t, e) } return (t.length < n - 1 || null == a) && (t.push(a), a = _()), e ? ue(e, r, a) : ue(r, a), a[Fe] }) } function pe(e, t) { return pt(je, e, t) } function oe(e, t, n) { var i = p(e); return a((a, r) => { var s, l = !1; a.push((...e) => { l || (r(...e), clearTimeout(s)) }), s = setTimeout(function () { var t = e.name || "anonymous", a = new Error("Callback function \"" + t + "\" timed out."); a.code = "ETIMEDOUT", n && (a.info = n), l = !0, r(a) }, t), i(...a) }) } function he(e) { for (var t = Array(e); e--;)t[e] = e; return t } function fe(e, t, a, n) { var i = p(a); return qe(he(e), t, i, n) } function ye(e, t, a) { return fe(e, 1 / 0, t, a) } function me(e, t, a) { return fe(e, 1, t, a) } function ge(e, t, a, n) { 3 >= arguments.length && "function" == typeof t && (n = a, a = t, t = Array.isArray(e) ? [] : {}), n = m(n || _()); var i = p(a); return Me(e, (e, a, n) => { i(t, e, a, n) }, e => n(e, t)), n[Fe] } function ke(e) { return (...t) => (e.unmemoized || e)(...t) } function ve(e, t, a) { const n = p(e); return bt(e => n((t, a) => e(t, !a)), t, a) } var Se, Le = "function" == typeof setImmediate && setImmediate, xe = "object" == typeof process && "function" == typeof process.nextTick; Se = Le ? setImmediate : xe ? process.nextTick : n; var Ee = i(Se); const be = {}; var Oe = e => (t, a, n) => { function i(e, t) { if (!u) if (p -= 1, e) l = !0, n(e); else if (!1 === e) l = !0, u = !0; else { if (t === be || l && 0 >= p) return l = !0, n(null); o || r() } } function r() { for (o = !0; p < e && !l;) { var t = s(); if (null === t) return l = !0, void (0 >= p && n(null)); p += 1, a(t.value, t.key, x(i)) } o = !1 } if (n = m(n), 0 >= e) throw new RangeError("concurrency limit cannot be less than 1"); if (!t) return n(null); if (c(t)) return E(t, e, a, n); if (d(t)) return E(t[Symbol.asyncIterator](), e, a, n); var s = L(t), l = !1, u = !1, p = 0, o = !1; r() }, _e = o(function (e, t, a, n) { return Oe(t)(e, p(a), n) }, 4), Me = o(function (e, t, a) { var n = y(e) ? b : O; return n(e, p(t), a) }, 3), Ae = o(function (e, t, a) { return f(Me, e, t, a) }, 3), Ie = h(Ae), je = o(function (e, t, a) { return _e(e, 1, t, a) }, 3), we = o(function (e, t, a) { return f(je, e, t, a) }, 3), Be = h(we); const Fe = Symbol("promiseCallback"); var Pe = /^(?:async\s+)?(?:function)?\s*\w*\s*\(\s*([^)]+)\s*\)(?:\s*{)/, Te = /^(?:async\s+)?\(?\s*([^)=]+)\s*\)?(?:\s*=>)/, Re = /,/, Ce = /(=.+)?(\s*)$/, ze = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; class Ye { constructor() { this.head = this.tail = null, this.length = 0 } removeLink(e) { return e.prev ? e.prev.next = e.next : this.head = e.next, e.next ? e.next.prev = e.prev : this.tail = e.prev, e.prev = e.next = null, this.length -= 1, e } empty() { for (; this.head;)this.shift(); return this } insertAfter(e, t) { t.prev = e, t.next = e.next, e.next ? e.next.prev = t : this.tail = t, e.next = t, this.length += 1 } insertBefore(e, t) { t.prev = e.prev, t.next = e, e.prev ? e.prev.next = t : this.head = t, e.prev = t, this.length += 1 } unshift(e) { this.head ? this.insertBefore(this.head, e) : j(this, e) } push(e) { this.tail ? this.insertAfter(this.tail, e) : j(this, e) } shift() { return this.head && this.removeLink(this.head) } pop() { return this.tail && this.removeLink(this.tail) } toArray() { return [...this] } *[Symbol.iterator]() { for (var e = this.head; e;)yield e.data, e = e.next } remove(e) { for (var t = this.head; t;) { var { next: a } = t; e(t) && this.removeLink(t), t = a } return this } } var Ve, Ne = o(function (e, t, a, n) { n = m(n); var r = p(a); return je(e, (e, a, n) => { r(t, e, (e, a) => { t = a, n(e) }) }, e => n(e, t)) }, 4), qe = o(function (e, t, a, n) { return f(Oe(t), e, a, n) }, 4), De = o(function (e, t, a, n) { var i = p(a); return qe(e, t, (e, t) => { i(e, (e, ...a) => e ? t(e) : t(e, a)) }, (e, t) => { for (var a = [], r = 0; r < t.length; r++)t[r] && (a = a.concat(...t[r])); return n(e, a) }) }, 4), Qe = o(function (e, t, a) { return De(e, 1 / 0, t, a) }, 3), Ue = o(function (e, t, a) { return De(e, 1, t, a) }, 3), Ge = o(function (e, t, a) { return C(e => e, (e, t) => t)(Me, e, t, a) }, 3), We = o(function (e, t, a, n) { return C(e => e, (e, t) => t)(Oe(t), e, a, n) }, 4), Ke = o(function (e, t, a) { return C(e => e, (e, t) => t)(Oe(1), e, t, a) }, 3), Xe = z("dir"), Je = o(function (e, t, a) { function n(e, ...t) { return e ? a(e) : void (!1 === e || (r = t, l(...t, i))) } function i(e, t) { return e ? a(e) : !1 === e ? void 0 : t ? void s(n) : a(null, ...r) } a = x(a); var r, s = p(e), l = p(t); return i(null, !0) }, 3), Ze = o(function (e, t, a) { return Me(e, V(p(t)), a) }, 3), $e = o(function (e, t, a, n) { return Oe(t)(e, V(p(a)), n) }, 4), He = o(function (e, t, a) { return $e(e, 1, t, a) }, 3), et = o(function (e, t, a) { return C(e => !e, e => !e)(Me, e, t, a) }, 3), tt = o(function (e, t, a, n) { return C(e => !e, e => !e)(Oe(t), e, a, n) }, 4), at = o(function (e, t, a) { return C(e => !e, e => !e)(je, e, t, a) }, 3), nt = o(function (e, t, a) { return Q(Me, e, t, a) }, 3), it = o(function (e, t, a, n) { return Q(Oe(t), e, a, n) }, 4), rt = o(function (e, t, a) { return Q(je, e, t, a) }, 3), st = o(function (e, t) { function a(e) { return e ? n(e) : void (!1 === e || i(a)) } var n = x(t), i = p(N(e)); return a() }, 2), lt = o(function (e, t, a, n) { var i = p(a); return qe(e, t, (e, t) => { i(e, (a, n) => a ? t(a) : t(a, { key: n, val: e })) }, (e, t) => { for (var a = {}, { hasOwnProperty: r } = Object.prototype, s = 0; s < t.length; s++)if (t[s]) { var { key: l } = t[s], { val: u } = t[s]; r.call(a, l) ? a[l].push(u) : a[l] = [u] } return n(e, a) }) }, 4), ut = z("log"), ct = o(function (e, t, a, n) { n = m(n); var i = {}, r = p(a); return Oe(t)(e, (e, t, a) => { r(e, t, (e, n) => e ? a(e) : void (i[t] = n, a(e))) }, e => n(e, i)) }, 4); Ve = xe ? process.nextTick : Le ? setImmediate : n; var dt = i(Ve), pt = o((e, t, a) => { var n = y(t) ? [] : {}; e(t, (e, t, a) => { p(e)((e, ...i) => { 2 > i.length && ([i] = i), n[t] = i, a(e) }) }, e => a(e, n)) }, 3); class ot { constructor() { this.heap = [], this.pushCount = Number.MIN_SAFE_INTEGER } get length() { return this.heap.length } empty() { return this.heap = [], this } percUp(e) { for (let a; 0 < e && te(this.heap[e], this.heap[a = ee(e)]);) { let n = this.heap[e]; this.heap[e] = this.heap[a], this.heap[a] = n, e = a } } percDown(e) { for (let a, n; (a = H(e)) < this.heap.length && (a + 1 < this.heap.length && te(this.heap[a + 1], this.heap[a]) && ++a, !te(this.heap[e], this.heap[a]));)n = this.heap[e], this.heap[e] = this.heap[a], this.heap[a] = n, e = a } push(e) { e.pushCount = ++this.pushCount, this.heap.push(e), this.percUp(this.heap.length - 1) } unshift(e) { return this.heap.push(e) } shift() { let [e] = this.heap; return this.heap[0] = this.heap[this.heap.length - 1], this.heap.pop(), this.percDown(0), e } toArray() { return [...this] } *[Symbol.iterator]() { for (let e = 0; e < this.heap.length; e++)yield this.heap[e].data } remove(e) { let t = 0; for (let a = 0; a < this.heap.length; a++)e(this.heap[a]) || (this.heap[t] = this.heap[a], t++); this.heap.splice(t); for (let t = ee(this.heap.length - 1); 0 <= t; t--)this.percDown(t); return this } } var ht = o(function (e, t) { if (t = m(t), !Array.isArray(e)) return t(new TypeError("First argument to race must be an array of functions")); if (!e.length) return t(); for (var a = 0, n = e.length; a < n; a++)p(e[a])(t) }, 2), ft = o(function (e, t, a) { return se(Me, e, t, a) }, 3), yt = o(function (e, t, a, n) { return se(Oe(t), e, a, n) }, 4), mt = o(function (e, t, a) { return se(je, e, t, a) }, 3); const gt = 5, kt = 0; var vt = o(function (e, t, a) { return C(Boolean, e => e)(Me, e, t, a) }, 3), St = o(function (e, t, a, n) { return C(Boolean, e => e)(Oe(t), e, a, n) }, 4), Lt = o(function (e, t, a) { return C(Boolean, e => e)(je, e, t, a) }, 3), xt = o(function (e, t, a) { function n(e, t) { var n = e.criteria, a = t.criteria; return n < a ? -1 : n > a ? 1 : 0 } var i = p(t); return Ae(e, (e, t) => { i(e, (a, n) => a ? t(a) : void t(a, { value: e, criteria: n })) }, (e, t) => e ? a(e) : void a(null, t.sort(n).map(e => e.value))) }, 3), Et = o(function (e, t) { var a, n = null; return He(e, (e, t) => { p(e)((e, ...i) => !1 === e ? t(e) : void (2 > i.length ? [a] = i : a = i, n = e, t(e ? null : {}))) }, () => t(n, a)) }), bt = o(function (e, t, a) { function n(e, ...t) { if (e) return a(e); l = t; !1 === e || s(i) } function i(e, t) { return e ? a(e) : !1 === e ? void 0 : t ? void r(n) : a(null, ...l) } a = x(a); var r = p(t), s = p(e), l = []; return s(i) }, 3), Ot = o(function (e, t) { function a(t) { var a = p(e[i++]); a(...t, x(n)) } function n(n, ...r) { return !1 === n ? void 0 : n || i === e.length ? t(n, ...r) : void a(r) } if (t = m(t), !Array.isArray(e)) return t(new Error("First argument to waterfall must be an array of functions")); if (!e.length) return t(); var i = 0; a([]) }); e.default = { apply: t, applyEach: Ie, applyEachSeries: Be, asyncify: r, auto: M, autoInject: I, cargo: B, cargoQueue: F, compose: T, concat: Qe, concatLimit: De, concatSeries: Ue, constant: R, detect: Ge, detectLimit: We, detectSeries: Ke, dir: Xe, doUntil: Y, doWhilst: Je, each: Ze, eachLimit: $e, eachOf: Me, eachOfLimit: _e, eachOfSeries: je, eachSeries: He, ensureAsync: N, every: et, everyLimit: tt, everySeries: at, filter: nt, filterLimit: it, filterSeries: rt, forever: st, groupBy: U, groupByLimit: lt, groupBySeries: G, log: ut, map: Ae, mapLimit: qe, mapSeries: we, mapValues: W, mapValuesLimit: ct, mapValuesSeries: K, memoize: X, nextTick: dt, parallel: J, parallelLimit: Z, priorityQueue: ae, queue: $, race: ht, reduce: Ne, reduceRight: ne, reflect: ie, reflectAll: re, reject: ft, rejectLimit: yt, rejectSeries: mt, retry: ue, retryable: de, seq: P, series: pe, setImmediate: Ee, some: vt, someLimit: St, someSeries: Lt, sortBy: xt, timeout: oe, times: ye, timesLimit: fe, timesSeries: me, transform: ge, tryEach: Et, unmemoize: ke, until: ve, waterfall: Ot, whilst: bt, all: et, allLimit: tt, allSeries: at, any: vt, anyLimit: St, anySeries: Lt, find: Ge, findLimit: We, findSeries: Ke, flatMap: Qe, flatMapLimit: De, flatMapSeries: Ue, forEach: Ze, forEachSeries: He, forEachLimit: $e, forEachOf: Me, forEachOfSeries: je, forEachOfLimit: _e, inject: Ne, foldl: Ne, foldr: ne, select: nt, selectLimit: it, selectSeries: rt, wrapSync: r, during: bt, doDuring: Je }, e.apply = t, e.applyEach = Ie, e.applyEachSeries = Be, e.asyncify = r, e.auto = M, e.autoInject = I, e.cargo = B, e.cargoQueue = F, e.compose = T, e.concat = Qe, e.concatLimit = De, e.concatSeries = Ue, e.constant = R, e.detect = Ge, e.detectLimit = We, e.detectSeries = Ke, e.dir = Xe, e.doUntil = Y, e.doWhilst = Je, e.each = Ze, e.eachLimit = $e, e.eachOf = Me, e.eachOfLimit = _e, e.eachOfSeries = je, e.eachSeries = He, e.ensureAsync = N, e.every = et, e.everyLimit = tt, e.everySeries = at, e.filter = nt, e.filterLimit = it, e.filterSeries = rt, e.forever = st, e.groupBy = U, e.groupByLimit = lt, e.groupBySeries = G, e.log = ut, e.map = Ae, e.mapLimit = qe, e.mapSeries = we, e.mapValues = W, e.mapValuesLimit = ct, e.mapValuesSeries = K, e.memoize = X, e.nextTick = dt, e.parallel = J, e.parallelLimit = Z, e.priorityQueue = ae, e.queue = $, e.race = ht, e.reduce = Ne, e.reduceRight = ne, e.reflect = ie, e.reflectAll = re, e.reject = ft, e.rejectLimit = yt, e.rejectSeries = mt, e.retry = ue, e.retryable = de, e.seq = P, e.series = pe, e.setImmediate = Ee, e.some = vt, e.someLimit = St, e.someSeries = Lt, e.sortBy = xt, e.timeout = oe, e.times = ye, e.timesLimit = fe, e.timesSeries = me, e.transform = ge, e.tryEach = Et, e.unmemoize = ke, e.until = ve, e.waterfall = Ot, e.whilst = bt, e.all = et, e.allLimit = tt, e.allSeries = at, e.any = vt, e.anyLimit = St, e.anySeries = Lt, e.find = Ge, e.findLimit = We, e.findSeries = Ke, e.flatMap = Qe, e.flatMapLimit = De, e.flatMapSeries = Ue, e.forEach = Ze, e.forEachSeries = He, e.forEachLimit = $e, e.forEachOf = Me, e.forEachOfSeries = je, e.forEachOfLimit = _e, e.inject = Ne, e.foldl = Ne, e.foldr = ne, e.select = nt, e.selectLimit = it, e.selectSeries = rt, e.wrapSync = r, e.during = bt, e.doDuring = Je, Object.defineProperty(e, "__esModule", { value: !0 }) });
</script>
<script>
/*
CSS Browser Selector v0.4.0 (Nov 02, 2010)
Rafael Lima (http://rafael.adm.br)
http://rafael.adm.br/css_browser_selector
License: http://creativecommons.org/licenses/by/2.5/
Contributors: http://rafael.adm.br/css_browser_selector#contributors
*/
function css_browser_selector(u) { var ua = u.toLowerCase(), is = function (t) { return ua.indexOf(t) > -1 }, g = 'gecko', w = 'webkit', s = 'safari', o = 'opera', m = 'mobile', h = document.documentElement, b = [(!(/opera|webtv/i.test(ua)) && /msie\s(\d)/.test(ua)) ? ('ie ie' + RegExp.$1) : is('firefox/2') ? g + ' ff2' : is('firefox/3.5') ? g + ' ff3 ff3_5' : is('firefox/3.6') ? g + ' ff3 ff3_6' : is('firefox/3') ? g + ' ff3' : is('gecko/') ? g : is('opera') ? o + (/version\/(\d+)/.test(ua) ? ' ' + o + RegExp.$1 : (/opera(\s|\/)(\d+)/.test(ua) ? ' ' + o + RegExp.$2 : '')) : is('konqueror') ? 'konqueror' : is('blackberry') ? m + ' blackberry' : is('android') ? m + ' android' : is('chrome') ? w + ' chrome' : is('iron') ? w + ' iron' : is('applewebkit/') ? w + ' ' + s + (/version\/(\d+)/.test(ua) ? ' ' + s + RegExp.$1 : '') : is('mozilla/') ? g : '', is('j2me') ? m + ' j2me' : is('iphone') ? m + ' iphone' : is('ipod') ? m + ' ipod' : is('ipad') ? m + ' ipad' : is('mac') ? 'mac' : is('darwin') ? 'mac' : is('webtv') ? 'webtv' : is('win') ? 'win' + (is('windows nt 6.0') ? ' vista' : '') : is('freebsd') ? 'freebsd' : (is('x11') || is('linux')) ? 'linux' : '', 'js']; c = b.join(' '); h.className += ' ' + c; return c; }; css_browser_selector(navigator.userAgent);
</script>
</body>
</html>