uswds-jekyll 3.0.0 → 5.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +345 -240
- data/_includes/analytics.html +7 -10
- data/_includes/components/banner.html +36 -13
- data/_includes/components/footer--big.html +142 -0
- data/_includes/components/footer--default.html +104 -0
- data/_includes/components/footer--slim.html +93 -0
- data/_includes/components/github-edit.html +3 -0
- data/_includes/components/graphic-list.html +13 -11
- data/_includes/components/header.html +161 -0
- data/_includes/components/hero.html +6 -13
- data/_includes/components/search.html +31 -0
- data/_includes/footer.html +7 -1
- data/_includes/header.html +1 -5
- data/_includes/meta.html +7 -1
- data/_includes/project-list.html +14 -0
- data/_includes/scripts.html +7 -5
- data/_includes/sidenav.html +23 -20
- data/_includes/styles.html +5 -9
- data/_includes/subnav.html +1 -1
- data/_includes/team-list.html +13 -0
- data/_layouts/default.html +40 -4
- data/_layouts/home.html +5 -26
- data/_layouts/page.html +19 -13
- data/_layouts/post.html +2 -14
- data/_layouts/project.html +23 -0
- data/_layouts/team-member.html +34 -0
- data/_sass/_uswds-theme-custom-styles.scss +0 -0
- data/_sass/_uswds-theme-override-settings.scss +2 -0
- data/_sass/_uswds-theme-packages.scss +1 -0
- data/_sass/_uswds-theme-settings.scss +0 -0
- data/_sass/uswds/components/_all.scss +8 -0
- data/_sass/uswds/components/_alt-color-section.scss +34 -0
- data/_sass/uswds/components/_card.scss +63 -0
- data/_sass/uswds/components/_footer.scss +16 -502
- data/_sass/uswds/components/_header.scss +30 -198
- data/_sass/uswds/components/_hero.scss +37 -29
- data/_sass/uswds/components/_nav-buttons.scss +24 -0
- data/_sass/uswds/components/_side-nav.scss +48 -0
- data/_sass/uswds/components/_site-width.scss +6 -0
- data/_sass/uswds/components/_top-nav.scss +84 -0
- data/_sass/uswds/components/_usa-banner.scss +30 -0
- data/_sass/uswds/custom/_uswds-theme-custom-styles.scss +47 -0
- data/_sass/uswds/settings/_uswds-conversion-variables.scss +0 -0
- data/_sass/uswds/src/base/_accessibility.scss +3 -0
- data/_sass/uswds/src/base/_body.scss +5 -0
- data/_sass/uswds/src/components/_accordions.scss +116 -0
- data/_sass/uswds/src/components/_alerts.scss +144 -0
- data/_sass/uswds/src/components/_banner.scss +226 -0
- data/_sass/uswds/src/components/_button-groups.scss +134 -0
- data/_sass/uswds/src/components/_card.scss +346 -0
- data/_sass/uswds/src/components/_checklist.scss +17 -0
- data/_sass/uswds/src/components/_footer.scss +349 -0
- data/_sass/uswds/src/components/_forms.scss +54 -0
- data/_sass/uswds/src/components/_graphic-list.scss +42 -0
- data/_sass/uswds/src/components/_header.scss +287 -0
- data/_sass/uswds/src/components/_hero.scss +32 -0
- data/_sass/uswds/src/components/_layout.scss +15 -0
- data/_sass/uswds/src/components/_media-block.scss +7 -0
- data/_sass/uswds/src/components/_megamenu.scss +42 -0
- data/_sass/uswds/src/components/_nav-container.scss +7 -0
- data/_sass/uswds/src/components/_navbar.scss +16 -0
- data/_sass/uswds/src/components/_navigation.scss +348 -0
- data/_sass/uswds/src/components/_search.scss +98 -0
- data/_sass/uswds/src/components/_section.scss +38 -0
- data/_sass/uswds/src/components/_sidenav.scss +19 -0
- data/_sass/uswds/{components → src/components}/_skipnav.scss +7 -6
- data/_sass/uswds/{core → src/core}/_defaults.scss +1 -1
- data/_sass/uswds/src/core/_deprecated.scss +33 -0
- data/_sass/uswds/src/core/_functions.scss +1323 -0
- data/_sass/uswds/src/core/_notifications.scss +86 -0
- data/_sass/uswds/src/core/_properties.scss +687 -0
- data/_sass/uswds/src/core/_system-tokens.scss +1673 -0
- data/_sass/uswds/src/core/_variables.scss +534 -0
- data/_sass/uswds/src/core/mixins/_add-aspect.scss +17 -0
- data/_sass/uswds/src/core/mixins/_add-background-svg.scss +9 -0
- data/_sass/uswds/src/core/mixins/_add-bar.scss +43 -0
- data/_sass/uswds/src/core/mixins/_add-checkbox-placeholder.scss +15 -0
- data/_sass/uswds/src/core/mixins/_add-kerning.scss +4 -0
- data/_sass/uswds/src/core/mixins/_add-knockout-font-smoothing.scss +9 -0
- data/_sass/uswds/src/core/mixins/_add-list-reset.scss +15 -0
- data/_sass/uswds/src/core/mixins/_add-responsive-site-margins.scss +6 -0
- data/_sass/uswds/src/core/mixins/_add-success-mark.scss +7 -0
- data/_sass/uswds/src/core/mixins/_all.scss +86 -0
- data/_sass/uswds/src/core/mixins/_at-media.scss +36 -0
- data/_sass/uswds/src/core/mixins/_border-box-sizing.scss +19 -0
- data/_sass/uswds/src/core/mixins/_button-disabled.scss +17 -0
- data/_sass/uswds/src/core/mixins/_button-unstyled.scss +20 -0
- data/_sass/uswds/src/core/mixins/_clearfix.scss +7 -0
- data/_sass/uswds/src/core/mixins/_embed-container.scss +3 -0
- data/_sass/uswds/src/core/mixins/_external-link.scss +21 -0
- data/_sass/uswds/src/core/mixins/_focus.scss +14 -0
- data/_sass/uswds/src/core/mixins/_font-face.scss +103 -0
- data/_sass/uswds/src/core/mixins/_icon.scss +64 -0
- data/_sass/uswds/src/core/mixins/_layout-grid.scss +128 -0
- data/_sass/uswds/src/core/mixins/_media-block-img.scss +4 -0
- data/_sass/uswds/{elements/_figure.scss → src/core/mixins/_media-link.scss} +0 -8
- data/_sass/uswds/src/core/mixins/_nav-list.scss +95 -0
- data/_sass/uswds/src/core/mixins/_override-prose.scss +6 -0
- data/_sass/uswds/src/core/mixins/_screen-reader.scss +23 -0
- data/_sass/uswds/src/core/mixins/_typography.scss +161 -0
- data/_sass/uswds/src/core/mixins/_unstyled-list.scss +11 -0
- data/_sass/uswds/src/core/mixins/_usa-list-styles.scss +10 -0
- data/_sass/uswds/src/core/mixins/_usa-table-styles.scss +8 -0
- data/_sass/uswds/src/core/mixins/_usa-typography.scss +54 -0
- data/_sass/uswds/src/core/mixins/_utility-builder.scss +369 -0
- data/_sass/uswds/src/core/mixins/layout-grid/_grid-container.scss +14 -0
- data/_sass/uswds/src/core/mixins/layout-grid/_grid-row.scss +7 -0
- data/_sass/uswds/src/core/mixins/utilities/_align-items.scss +11 -0
- data/_sass/uswds/src/core/mixins/utilities/_background-color.scss +9 -0
- data/_sass/uswds/src/core/mixins/utilities/_border-color.scss +11 -0
- data/_sass/uswds/src/core/mixins/utilities/_border-radius.scss +55 -0
- data/_sass/uswds/src/core/mixins/utilities/_border-width.scss +32 -0
- data/_sass/uswds/src/core/mixins/utilities/_border.scss +142 -0
- data/_sass/uswds/src/core/mixins/utilities/_bottom.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_circle.scss +9 -0
- data/_sass/uswds/src/core/mixins/utilities/_color.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_cursor.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_display.scss +11 -0
- data/_sass/uswds/src/core/mixins/utilities/_flex-direction.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_flex.scss +50 -0
- data/_sass/uswds/src/core/mixins/utilities/_float.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_font-weight.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_font.scss +42 -0
- data/_sass/uswds/src/core/mixins/utilities/_height.scss +11 -0
- data/_sass/uswds/src/core/mixins/utilities/_justify-content.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_left.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_line-height.scss +13 -0
- data/_sass/uswds/src/core/mixins/utilities/_margin.scss +85 -0
- data/_sass/uswds/src/core/mixins/utilities/_max-height.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_max-width.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_measure.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_min-height.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_min-width.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_order.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_outline-color.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_outline.scss +35 -0
- data/_sass/uswds/src/core/mixins/utilities/_overflow.scss +28 -0
- data/_sass/uswds/src/core/mixins/utilities/_padding.scss +49 -0
- data/_sass/uswds/src/core/mixins/utilities/_pin.scss +82 -0
- data/_sass/uswds/src/core/mixins/utilities/_position.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_right.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_shadow.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_square.scss +7 -0
- data/_sass/uswds/src/core/mixins/utilities/_text-align.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_text-decoration-color.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_text-decoration.scss +17 -0
- data/_sass/uswds/src/core/mixins/utilities/_text-indent.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_text.scss +72 -0
- data/_sass/uswds/src/core/mixins/utilities/_top.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_vertical-align.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_white-space.scss +10 -0
- data/_sass/uswds/src/core/mixins/utilities/_width.scss +11 -0
- data/_sass/uswds/src/core/mixins/utilities/_z-index.scss +10 -0
- data/_sass/uswds/src/core/placeholders/_all.scss +2 -0
- data/_sass/uswds/src/core/placeholders/_list.scss +18 -0
- data/_sass/uswds/src/core/placeholders/_table.scss +58 -0
- data/_sass/uswds/src/core/system-tokens/_blue-cool.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_blue-warm.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_blue.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_cyan.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_gold.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_gray-cool.scss +18 -0
- data/_sass/uswds/src/core/system-tokens/_gray-warm.scss +18 -0
- data/_sass/uswds/src/core/system-tokens/_gray.scss +19 -0
- data/_sass/uswds/src/core/system-tokens/_green-cool.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_green-warm.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_green.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_indigo-cool.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_indigo-warm.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_indigo.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_magenta.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_mint-cool.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_mint.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_orange-warm.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_orange.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_red-cool.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_red-warm.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_red.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_violet-warm.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_violet.scss +26 -0
- data/_sass/uswds/src/core/system-tokens/_yellow.scss +26 -0
- data/_sass/uswds/src/elements/_buttons.scss +217 -0
- data/_sass/uswds/{elements → src/elements}/_embed.scss +0 -4
- data/_sass/uswds/src/elements/_figure.scss +7 -0
- data/_sass/uswds/src/elements/_layout-grid.scss +159 -0
- data/_sass/uswds/src/elements/_table.scss +7 -0
- data/_sass/uswds/src/elements/_tags.scss +18 -0
- data/_sass/uswds/src/elements/form-controls/_all.scss +9 -0
- data/_sass/uswds/src/elements/form-controls/_character-count.scss +9 -0
- data/_sass/uswds/src/elements/form-controls/_checkbox-and-radio.scss +115 -0
- data/_sass/uswds/src/elements/form-controls/_combo-box.scss +55 -0
- data/_sass/uswds/src/elements/form-controls/_date-input.scss +31 -0
- data/_sass/uswds/src/elements/form-controls/_dropdown.scss +25 -0
- data/_sass/uswds/src/elements/form-controls/_file-input.scss +4 -0
- data/_sass/uswds/src/elements/form-controls/_global.scss +84 -0
- data/_sass/uswds/src/elements/form-controls/_range-input.scss +89 -0
- data/_sass/uswds/src/elements/form-controls/_text-input.scss +13 -0
- data/_sass/uswds/src/elements/typography/_content.scss +62 -0
- data/_sass/uswds/src/elements/typography/_links.scss +15 -0
- data/_sass/uswds/src/elements/typography/_list.scss +14 -0
- data/_sass/uswds/src/elements/typography/_prose.scss +6 -0
- data/_sass/uswds/src/global/_focus.scss +24 -0
- data/_sass/uswds/src/global/_font-face.scss +11 -0
- data/_sass/uswds/src/global/_sizing.scss +14 -0
- data/_sass/uswds/src/global/_typography.scss +32 -0
- data/_sass/uswds/src/lib/_normalize.scss +349 -0
- data/_sass/uswds/src/packages/_form-controls.scss +4 -0
- data/_sass/uswds/src/packages/_form-templates.scss +8 -0
- data/_sass/uswds/src/packages/_global.scss +7 -0
- data/_sass/uswds/src/packages/_layout-grid.scss +4 -0
- data/_sass/uswds/src/packages/_required.scss +21 -0
- data/_sass/uswds/src/packages/_typography.scss +7 -0
- data/_sass/uswds/src/packages/_usa-accordion.scss +4 -0
- data/_sass/uswds/src/packages/_usa-alert.scss +4 -0
- data/_sass/uswds/src/packages/_usa-banner.scss +7 -0
- data/_sass/uswds/src/packages/_usa-button-group.scss +2 -0
- data/_sass/uswds/src/packages/_usa-button.scss +4 -0
- data/_sass/uswds/src/packages/_usa-card.scss +4 -0
- data/_sass/uswds/src/packages/_usa-checklist.scss +4 -0
- data/_sass/uswds/src/packages/_usa-footer.scss +10 -0
- data/_sass/uswds/src/packages/_usa-header.scss +13 -0
- data/_sass/uswds/src/packages/_usa-hero.scss +6 -0
- data/_sass/uswds/src/packages/_usa-media-block.scss +5 -0
- data/_sass/uswds/src/packages/_usa-megamenu.scss +4 -0
- data/_sass/uswds/src/packages/_usa-nav-container.scss +4 -0
- data/_sass/uswds/src/packages/_usa-nav.scss +5 -0
- data/_sass/uswds/src/packages/_usa-navbar.scss +4 -0
- data/_sass/uswds/src/packages/_usa-search.scss +8 -0
- data/_sass/uswds/src/packages/_usa-sidenav.scss +4 -0
- data/_sass/uswds/src/packages/_usa-skipnav.scss +4 -0
- data/_sass/uswds/src/packages/_usa-table.scss +4 -0
- data/_sass/uswds/src/packages/_usa-tag.scss +4 -0
- data/_sass/uswds/src/packages/_uswds-components.scss +44 -0
- data/_sass/uswds/src/packages/_uswds-fonts.scss +2 -0
- data/_sass/uswds/src/packages/_uswds-utilities.scss +6 -0
- data/_sass/uswds/src/packages/_validation.scss +8 -0
- data/_sass/uswds/src/settings/_settings-color.scss +133 -0
- data/_sass/uswds/src/settings/_settings-components.scss +85 -0
- data/_sass/uswds/src/settings/_settings-general.scss +101 -0
- data/_sass/uswds/src/settings/_settings-spacing.scss +93 -0
- data/_sass/uswds/src/settings/_settings-typography.scss +422 -0
- data/_sass/uswds/src/settings/_settings-utilities.scss +853 -0
- data/_sass/uswds/src/theme/_uswds-theme-color.scss +133 -0
- data/_sass/uswds/src/theme/_uswds-theme-components.scss +85 -0
- data/_sass/uswds/src/theme/_uswds-theme-custom-styles.scss +21 -0
- data/_sass/uswds/src/theme/_uswds-theme-general.scss +101 -0
- data/_sass/uswds/src/theme/_uswds-theme-spacing.scss +93 -0
- data/_sass/uswds/src/theme/_uswds-theme-typography.scss +422 -0
- data/_sass/uswds/src/theme/_uswds-theme-utilities.scss +854 -0
- data/_sass/uswds/src/theme/styles.scss +72 -0
- data/_sass/uswds/src/uswds.scss +17 -0
- data/_sass/uswds/src/utilities/palettes/_all.scss +41 -0
- data/_sass/uswds/src/utilities/palettes/_default-palettes.scss +72 -0
- data/_sass/uswds/src/utilities/palettes/_font-palettes.scss +2762 -0
- data/_sass/uswds/src/utilities/palettes/_palette-registry.scss +46 -0
- data/_sass/uswds/src/utilities/palettes/_spacing-palettes.scss +135 -0
- data/_sass/uswds/src/utilities/palettes/colors/_all-colors-palettes.scss +56 -0
- data/_sass/uswds/src/utilities/palettes/colors/_black-transparent-palettes.scss +16 -0
- data/_sass/uswds/src/utilities/palettes/colors/_blue-cool-palettes.scss +69 -0
- data/_sass/uswds/src/utilities/palettes/colors/_blue-palettes.scss +66 -0
- data/_sass/uswds/src/utilities/palettes/colors/_blue-warm-palettes.scss +69 -0
- data/_sass/uswds/src/utilities/palettes/colors/_cyan-palettes.scss +66 -0
- data/_sass/uswds/src/utilities/palettes/colors/_gold-palettes.scss +66 -0
- data/_sass/uswds/src/utilities/palettes/colors/_gray-cool-palettes.scss +40 -0
- data/_sass/uswds/src/utilities/palettes/colors/_gray-palettes.scss +40 -0
- data/_sass/uswds/src/utilities/palettes/colors/_gray-warm-palettes.scss +40 -0
- data/_sass/uswds/src/utilities/palettes/colors/_green-cool-palettes.scss +69 -0
- data/_sass/uswds/src/utilities/palettes/colors/_green-palettes.scss +66 -0
- data/_sass/uswds/src/utilities/palettes/colors/_green-warm-palettes.scss +69 -0
- data/_sass/uswds/src/utilities/palettes/colors/_indigo-cool-palettes.scss +70 -0
- data/_sass/uswds/src/utilities/palettes/colors/_indigo-palettes.scss +66 -0
- data/_sass/uswds/src/utilities/palettes/colors/_indigo-warm-palettes.scss +70 -0
- data/_sass/uswds/src/utilities/palettes/colors/_magenta-palettes.scss +67 -0
- data/_sass/uswds/src/utilities/palettes/colors/_mint-cool-palettes.scss +69 -0
- data/_sass/uswds/src/utilities/palettes/colors/_mint-palettes.scss +66 -0
- data/_sass/uswds/src/utilities/palettes/colors/_orange-palettes.scss +66 -0
- data/_sass/uswds/src/utilities/palettes/colors/_orange-warm-palettes.scss +70 -0
- data/_sass/uswds/src/utilities/palettes/colors/_red-cool-palettes.scss +68 -0
- data/_sass/uswds/src/utilities/palettes/colors/_red-palettes.scss +66 -0
- data/_sass/uswds/src/utilities/palettes/colors/_red-warm-palettes.scss +68 -0
- data/_sass/uswds/src/utilities/palettes/colors/_violet-palettes.scss +66 -0
- data/_sass/uswds/src/utilities/palettes/colors/_violet-warm-palettes.scss +70 -0
- data/_sass/uswds/src/utilities/palettes/colors/_white-transparent-palettes.scss +16 -0
- data/_sass/uswds/src/utilities/palettes/colors/_yellow-palettes.scss +66 -0
- data/_sass/uswds/src/utilities/rules/_all.scss +56 -0
- data/_sass/uswds/src/utilities/rules/_package.scss +61 -0
- data/_sass/uswds/src/utilities/rules/add-aspect.scss +84 -0
- data/_sass/uswds/src/utilities/rules/add-list-reset.scss +39 -0
- data/_sass/uswds/src/utilities/rules/align-items.scss +30 -0
- data/_sass/uswds/src/utilities/rules/background-color.scss +32 -0
- data/_sass/uswds/src/utilities/rules/border-color.scss +32 -0
- data/_sass/uswds/src/utilities/rules/border-radius.scss +51 -0
- data/_sass/uswds/src/utilities/rules/border-style.scss +30 -0
- data/_sass/uswds/src/utilities/rules/border-width.scss +44 -0
- data/_sass/uswds/src/utilities/rules/border.scss +47 -0
- data/_sass/uswds/src/utilities/rules/bottom.scss +28 -0
- data/_sass/uswds/src/utilities/rules/box-shadow.scss +27 -0
- data/_sass/uswds/src/utilities/rules/circle.scss +35 -0
- data/_sass/uswds/src/utilities/rules/clearfix.scss +35 -0
- data/_sass/uswds/src/utilities/rules/color.scss +32 -0
- data/_sass/uswds/src/utilities/rules/cursor.scss +26 -0
- data/_sass/uswds/src/utilities/rules/display.scss +26 -0
- data/_sass/uswds/src/utilities/rules/flex-direction.scss +30 -0
- data/_sass/uswds/src/utilities/rules/flex-wrap.scss +27 -0
- data/_sass/uswds/src/utilities/rules/flex.scss +32 -0
- data/_sass/uswds/src/utilities/rules/float.scss +26 -0
- data/_sass/uswds/src/utilities/rules/font-family.scss +38 -0
- data/_sass/uswds/src/utilities/rules/font-feature.scss +31 -0
- data/_sass/uswds/src/utilities/rules/font-style.scss +29 -0
- data/_sass/uswds/src/utilities/rules/font-weight.scss +30 -0
- data/_sass/uswds/src/utilities/rules/font.scss +38 -0
- data/_sass/uswds/src/utilities/rules/height.scss +26 -0
- data/_sass/uswds/src/utilities/rules/justify-content.scss +32 -0
- data/_sass/uswds/src/utilities/rules/left.scss +28 -0
- data/_sass/uswds/src/utilities/rules/letter-spacing.scss +30 -0
- data/_sass/uswds/src/utilities/rules/line-height.scss +30 -0
- data/_sass/uswds/src/utilities/rules/margin.scss +70 -0
- data/_sass/uswds/src/utilities/rules/max-height.scss +27 -0
- data/_sass/uswds/src/utilities/rules/max-width.scss +27 -0
- data/_sass/uswds/src/utilities/rules/measure.scss +28 -0
- data/_sass/uswds/src/utilities/rules/min-height.scss +27 -0
- data/_sass/uswds/src/utilities/rules/min-width.scss +27 -0
- data/_sass/uswds/src/utilities/rules/opacity.scss +28 -0
- data/_sass/uswds/src/utilities/rules/order.scss +29 -0
- data/_sass/uswds/src/utilities/rules/outline-color.scss +33 -0
- data/_sass/uswds/src/utilities/rules/outline.scss +30 -0
- data/_sass/uswds/src/utilities/rules/overflow.scss +31 -0
- data/_sass/uswds/src/utilities/rules/padding.scss +43 -0
- data/_sass/uswds/src/utilities/rules/pin.scss +101 -0
- data/_sass/uswds/src/utilities/rules/position.scss +27 -0
- data/_sass/uswds/src/utilities/rules/right.scss +28 -0
- data/_sass/uswds/src/utilities/rules/square.scss +33 -0
- data/_sass/uswds/src/utilities/rules/text-align.scss +27 -0
- data/_sass/uswds/src/utilities/rules/text-decoration-color.scss +31 -0
- data/_sass/uswds/src/utilities/rules/text-decoration.scss +30 -0
- data/_sass/uswds/src/utilities/rules/text-indent.scss +30 -0
- data/_sass/uswds/src/utilities/rules/text-transform.scss +30 -0
- data/_sass/uswds/src/utilities/rules/top.scss +28 -0
- data/_sass/uswds/src/utilities/rules/vertical-align.scss +30 -0
- data/_sass/uswds/src/utilities/rules/whitespace.scss +27 -0
- data/_sass/uswds/src/utilities/rules/width.scss +26 -0
- data/_sass/uswds/src/utilities/rules/z-index.scss +28 -0
- data/_sass/uswds/src/utilities/utility-fonts.scss +20 -0
- data/assets/css/uswds-theme.scss +187 -0
- data/assets/img/circle.png +0 -0
- data/assets/img/hero.png +0 -0
- data/assets/img/project-images/project-placeholder.png +0 -0
- data/assets/img/team-images/team-placeholder.png +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Black.ttf +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Black.woff +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Black.woff2 +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-BlackItalic.ttf +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-BlackItalic.woff +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-BlackItalic.woff2 +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Bold.ttf +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Bold.woff +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Bold.woff2 +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-BoldItalic.ttf +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-BoldItalic.woff +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-BoldItalic.woff2 +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Italic.ttf +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Italic.woff +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Italic.woff2 +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Light.ttf +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Light.woff +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Light.woff2 +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-LightItalic.ttf +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-LightItalic.woff +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-LightItalic.woff2 +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Regular.ttf +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Regular.woff +0 -0
- data/assets/uswds/fonts/merriweather/Latin-Merriweather-Regular.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Black.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Black.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Black.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-BlackItalic.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-BlackItalic.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-BlackItalic.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Bold.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Bold.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Bold.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-BoldItalic.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-BoldItalic.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-BoldItalic.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ExtraBold.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ExtraBold.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ExtraBold.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ExtraBoldItalic.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ExtraBoldItalic.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ExtraBoldItalic.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ExtraLight.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ExtraLight.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ExtraLight.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ExtraLightItalic.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ExtraLightItalic.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ExtraLightItalic.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Italic.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Italic.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Italic.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Light.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Light.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Light.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-LightItalic.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-LightItalic.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-LightItalic.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Medium.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Medium.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Medium.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-MediumItalic.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-MediumItalic.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-MediumItalic.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Regular.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Regular.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Regular.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-SemiBold.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-SemiBold.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-SemiBold.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-SemiBoldItalic.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-SemiBoldItalic.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-SemiBoldItalic.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Thin.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Thin.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-Thin.woff2 +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ThinItalic.ttf +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ThinItalic.woff +0 -0
- data/assets/uswds/fonts/public-sans/PublicSans-ThinItalic.woff2 +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-100.ttf +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-100.woff +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-100.woff2 +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-100italic.ttf +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-100italic.woff +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-100italic.woff2 +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-300.ttf +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-300.woff +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-300.woff2 +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-300italic.ttf +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-300italic.woff +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-300italic.woff2 +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-500.ttf +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-500.woff +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-500.woff2 +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-500italic.ttf +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-500italic.woff +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-500italic.woff2 +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-700.ttf +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-700.woff +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-700.woff2 +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-700italic.ttf +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-700italic.woff +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-700italic.woff2 +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-italic.ttf +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-italic.woff +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-italic.woff2 +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-regular.ttf +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-regular.woff +0 -0
- data/assets/uswds/fonts/roboto-mono/roboto-mono-v5-latin-regular.woff2 +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-black-webfont.ttf +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-black-webfont.woff +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-black-webfont.woff2 +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-blackitalic-webfont.ttf +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-blackitalic-webfont.woff +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-blackitalic-webfont.woff2 +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-bold-webfont.ttf +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-bold-webfont.woff +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-bold-webfont.woff2 +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-bolditalic-webfont.ttf +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-bolditalic-webfont.woff +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-bolditalic-webfont.woff2 +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-extralight-webfont.ttf +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-extralight-webfont.woff +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-extralight-webfont.woff2 +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-extralightitalic-webfont.ttf +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-extralightitalic-webfont.woff +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-extralightitalic-webfont.woff2 +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-italic-webfont.ttf +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-italic-webfont.woff +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-italic-webfont.woff2 +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-light-webfont.ttf +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-light-webfont.woff +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-light-webfont.woff2 +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-lightitalic-webfont.ttf +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-lightitalic-webfont.woff +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-lightitalic-webfont.woff2 +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-regular-webfont.ttf +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-regular-webfont.woff +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-regular-webfont.woff2 +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-semibold-webfont.ttf +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-semibold-webfont.woff +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-semibold-webfont.woff2 +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-semibolditalic-webfont.ttf +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-semibolditalic-webfont.woff +0 -0
- data/assets/uswds/fonts/source-sans-pro/sourcesanspro-semibolditalic-webfont.woff2 +0 -0
- data/assets/uswds/img/alerts/error.svg +4 -17
- data/assets/uswds/img/alerts/info.svg +4 -18
- data/assets/uswds/img/alerts/success.svg +1 -12
- data/assets/uswds/img/alerts/warning.svg +4 -16
- data/assets/uswds/img/angle-arrow-down-hover.svg +1 -1
- data/assets/uswds/img/angle-arrow-down-primary-hover.svg +1 -1
- data/assets/uswds/img/angle-arrow-down-primary.svg +1 -1
- data/assets/uswds/img/angle-arrow-down-white.svg +1 -0
- data/assets/uswds/img/angle-arrow-down.svg +1 -1
- data/assets/uswds/img/angle-arrow-up-primary-hover.svg +1 -1
- data/assets/uswds/img/angle-arrow-up-primary.svg +1 -1
- data/assets/uswds/img/angle-arrow-up-white.svg +1 -0
- data/assets/uswds/img/arrow-both.svg +1 -1
- data/assets/uswds/img/arrow-down.svg +1 -1
- data/assets/uswds/img/arrow-right.svg +1 -1
- data/assets/uswds/img/checkbox-check-print.svg +1 -0
- data/assets/uswds/img/circle-124.png +0 -0
- data/assets/uswds/img/close-blue-30-alt.svg +3 -0
- data/assets/uswds/img/close-blue-40v-alt.svg +3 -0
- data/assets/uswds/img/close-blue-50-alt.svg +3 -0
- data/assets/uswds/img/close-blue-50v-alt.svg +3 -0
- data/assets/uswds/img/close-blue-60-alt.svg +3 -0
- data/assets/uswds/img/close-blue-60v-alt.svg +3 -0
- data/assets/uswds/img/close-gray-90-alt.svg +3 -0
- data/assets/uswds/img/close-primary.svg +1 -16
- data/assets/uswds/img/close-white-alt.svg +3 -0
- data/assets/uswds/img/close-white.svg +3 -0
- data/assets/uswds/img/close.svg +1 -12
- data/assets/uswds/img/correct8-alt.png +0 -0
- data/assets/uswds/img/correct8-alt.svg +1 -0
- data/assets/uswds/img/correct8.svg +1 -1
- data/assets/uswds/img/correct9.svg +1 -1
- data/assets/uswds/img/external-link-alt-hover.svg +1 -1
- data/assets/uswds/img/external-link-alt.svg +1 -1
- data/assets/uswds/img/external-link-hover.svg +1 -1
- data/assets/uswds/img/external-link.svg +1 -1
- data/assets/uswds/img/favicons/favicon-114.png +0 -0
- data/assets/uswds/img/favicons/favicon-144.png +0 -0
- data/assets/uswds/img/favicons/favicon-16.png +0 -0
- data/assets/uswds/img/favicons/favicon-192.png +0 -0
- data/assets/uswds/img/favicons/favicon-40.png +0 -0
- data/assets/uswds/img/favicons/favicon-57.png +0 -0
- data/assets/uswds/img/favicons/favicon-72.png +0 -0
- data/assets/uswds/img/favicons/favicon.ico +0 -0
- data/assets/uswds/img/favicons/favicon.png +0 -0
- data/assets/uswds/img/hero.png +0 -0
- data/assets/uswds/img/icon-dot-gov.svg +1 -1
- data/assets/uswds/img/icon-https.svg +1 -1
- data/assets/uswds/img/minus-alt.svg +1 -1
- data/assets/uswds/img/minus.svg +1 -1
- data/assets/uswds/img/plus-alt.svg +1 -1
- data/assets/uswds/img/plus.svg +1 -1
- data/assets/uswds/img/search-alt.svg +1 -1
- data/assets/uswds/img/search-primary.svg +1 -12
- data/assets/uswds/img/search.svg +1 -1
- data/assets/uswds/img/social-icons/facebook25.png +0 -0
- data/assets/uswds/img/social-icons/{svg/facebook25.svg → facebook25.svg} +1 -1
- data/assets/uswds/img/social-icons/rss25.png +0 -0
- data/assets/uswds/img/social-icons/{svg/rss25.svg → rss25.svg} +1 -1
- data/assets/uswds/img/social-icons/twitter16.png +0 -0
- data/assets/uswds/img/social-icons/{svg/twitter16.svg → twitter16.svg} +1 -1
- data/assets/uswds/img/social-icons/youtube15.png +0 -0
- data/assets/uswds/img/social-icons/{svg/youtube15.svg → youtube15.svg} +1 -1
- data/assets/uswds/js/uswds.js +1716 -844
- data/assets/uswds/js/uswds.min.js +1 -1
- data/assets/uswds/js/uswds.min.js.map +1 -1
- metadata +515 -218
- data/_includes/components/footer--medium.html +0 -100
- data/_includes/components/header--basic.html +0 -74
- data/_includes/components/header--extended.html +0 -89
- data/_sass/uswds/_all.scss +0 -1
- data/_sass/uswds/components/_accordions.scss +0 -150
- data/_sass/uswds/components/_alerts.scss +0 -125
- data/_sass/uswds/components/_banner.scss +0 -204
- data/_sass/uswds/components/_forms.scss +0 -164
- data/_sass/uswds/components/_graphic-list.scss +0 -35
- data/_sass/uswds/components/_layout.scss +0 -36
- data/_sass/uswds/components/_media-block.scss +0 -12
- data/_sass/uswds/components/_navigation.scss +0 -549
- data/_sass/uswds/components/_search.scss +0 -111
- data/_sass/uswds/components/_section.scss +0 -37
- data/_sass/uswds/components/_sidenav.scss +0 -8
- data/_sass/uswds/core/_base.scss +0 -35
- data/_sass/uswds/core/_fonts.scss +0 -65
- data/_sass/uswds/core/_grid-settings.scss +0 -3
- data/_sass/uswds/core/_grid.scss +0 -199
- data/_sass/uswds/core/_utilities.scss +0 -252
- data/_sass/uswds/core/_variables.scss +0 -155
- data/_sass/uswds/elements/_buttons.scss +0 -217
- data/_sass/uswds/elements/_inputs.scss +0 -351
- data/_sass/uswds/elements/_labels.scss +0 -20
- data/_sass/uswds/elements/_list.scss +0 -32
- data/_sass/uswds/elements/_table.scss +0 -55
- data/_sass/uswds/elements/_typography.scss +0 -260
- data/_sass/uswds/lib/_bourbon-deprecated-upcoming.scss +0 -411
- data/_sass/uswds/lib/_bourbon.scss +0 -87
- data/_sass/uswds/lib/_neat-helpers.scss +0 -11
- data/_sass/uswds/lib/_neat.scss +0 -23
- data/_sass/uswds/lib/_normalize.scss +0 -424
- data/_sass/uswds/lib/addons/_border-color.scss +0 -26
- data/_sass/uswds/lib/addons/_border-radius.scss +0 -48
- data/_sass/uswds/lib/addons/_border-style.scss +0 -25
- data/_sass/uswds/lib/addons/_border-width.scss +0 -25
- data/_sass/uswds/lib/addons/_buttons.scss +0 -64
- data/_sass/uswds/lib/addons/_clearfix.scss +0 -25
- data/_sass/uswds/lib/addons/_ellipsis.scss +0 -30
- data/_sass/uswds/lib/addons/_font-stacks.scss +0 -31
- data/_sass/uswds/lib/addons/_hide-text.scss +0 -27
- data/_sass/uswds/lib/addons/_margin.scss +0 -26
- data/_sass/uswds/lib/addons/_padding.scss +0 -26
- data/_sass/uswds/lib/addons/_position.scss +0 -48
- data/_sass/uswds/lib/addons/_prefixer.scss +0 -66
- data/_sass/uswds/lib/addons/_retina-image.scss +0 -25
- data/_sass/uswds/lib/addons/_size.scss +0 -51
- data/_sass/uswds/lib/addons/_text-inputs.scss +0 -113
- data/_sass/uswds/lib/addons/_timing-functions.scss +0 -34
- data/_sass/uswds/lib/addons/_triangle.scss +0 -63
- data/_sass/uswds/lib/addons/_word-wrap.scss +0 -29
- data/_sass/uswds/lib/css3/_animation.scss +0 -43
- data/_sass/uswds/lib/css3/_appearance.scss +0 -3
- data/_sass/uswds/lib/css3/_backface-visibility.scss +0 -3
- data/_sass/uswds/lib/css3/_background-image.scss +0 -42
- data/_sass/uswds/lib/css3/_background.scss +0 -55
- data/_sass/uswds/lib/css3/_border-image.scss +0 -59
- data/_sass/uswds/lib/css3/_calc.scss +0 -4
- data/_sass/uswds/lib/css3/_columns.scss +0 -47
- data/_sass/uswds/lib/css3/_filter.scss +0 -4
- data/_sass/uswds/lib/css3/_flex-box.scss +0 -287
- data/_sass/uswds/lib/css3/_font-face.scss +0 -24
- data/_sass/uswds/lib/css3/_font-feature-settings.scss +0 -4
- data/_sass/uswds/lib/css3/_hidpi-media-query.scss +0 -10
- data/_sass/uswds/lib/css3/_hyphens.scss +0 -4
- data/_sass/uswds/lib/css3/_image-rendering.scss +0 -14
- data/_sass/uswds/lib/css3/_keyframes.scss +0 -36
- data/_sass/uswds/lib/css3/_linear-gradient.scss +0 -38
- data/_sass/uswds/lib/css3/_perspective.scss +0 -8
- data/_sass/uswds/lib/css3/_placeholder.scss +0 -8
- data/_sass/uswds/lib/css3/_radial-gradient.scss +0 -39
- data/_sass/uswds/lib/css3/_selection.scss +0 -42
- data/_sass/uswds/lib/css3/_text-decoration.scss +0 -19
- data/_sass/uswds/lib/css3/_transform.scss +0 -15
- data/_sass/uswds/lib/css3/_transition.scss +0 -71
- data/_sass/uswds/lib/css3/_user-select.scss +0 -3
- data/_sass/uswds/lib/functions/_assign-inputs.scss +0 -11
- data/_sass/uswds/lib/functions/_contains-falsy.scss +0 -20
- data/_sass/uswds/lib/functions/_contains.scss +0 -26
- data/_sass/uswds/lib/functions/_is-length.scss +0 -11
- data/_sass/uswds/lib/functions/_is-light.scss +0 -21
- data/_sass/uswds/lib/functions/_is-number.scss +0 -11
- data/_sass/uswds/lib/functions/_is-size.scss +0 -13
- data/_sass/uswds/lib/functions/_modular-scale.scss +0 -69
- data/_sass/uswds/lib/functions/_new-breakpoint.scss +0 -49
- data/_sass/uswds/lib/functions/_private.scss +0 -114
- data/_sass/uswds/lib/functions/_px-to-em.scss +0 -13
- data/_sass/uswds/lib/functions/_px-to-rem.scss +0 -15
- data/_sass/uswds/lib/functions/_shade.scss +0 -24
- data/_sass/uswds/lib/functions/_strip-units.scss +0 -17
- data/_sass/uswds/lib/functions/_tint.scss +0 -24
- data/_sass/uswds/lib/functions/_transition-property-name.scss +0 -22
- data/_sass/uswds/lib/functions/_unpack.scss +0 -27
- data/_sass/uswds/lib/grid/_box-sizing.scss +0 -15
- data/_sass/uswds/lib/grid/_direction-context.scss +0 -33
- data/_sass/uswds/lib/grid/_display-context.scss +0 -28
- data/_sass/uswds/lib/grid/_fill-parent.scss +0 -22
- data/_sass/uswds/lib/grid/_media.scss +0 -92
- data/_sass/uswds/lib/grid/_omega.scss +0 -87
- data/_sass/uswds/lib/grid/_outer-container.scss +0 -34
- data/_sass/uswds/lib/grid/_pad.scss +0 -25
- data/_sass/uswds/lib/grid/_private.scss +0 -35
- data/_sass/uswds/lib/grid/_row.scss +0 -52
- data/_sass/uswds/lib/grid/_shift.scss +0 -50
- data/_sass/uswds/lib/grid/_span-columns.scss +0 -94
- data/_sass/uswds/lib/grid/_to-deprecate.scss +0 -97
- data/_sass/uswds/lib/grid/_visual-grid.scss +0 -42
- data/_sass/uswds/lib/helpers/_convert-units.scss +0 -21
- data/_sass/uswds/lib/helpers/_directional-values.scss +0 -96
- data/_sass/uswds/lib/helpers/_font-source-declaration.scss +0 -43
- data/_sass/uswds/lib/helpers/_gradient-positions-parser.scss +0 -13
- data/_sass/uswds/lib/helpers/_linear-angle-parser.scss +0 -25
- data/_sass/uswds/lib/helpers/_linear-gradient-parser.scss +0 -41
- data/_sass/uswds/lib/helpers/_linear-positions-parser.scss +0 -61
- data/_sass/uswds/lib/helpers/_linear-side-corner-parser.scss +0 -31
- data/_sass/uswds/lib/helpers/_radial-arg-parser.scss +0 -69
- data/_sass/uswds/lib/helpers/_radial-gradient-parser.scss +0 -50
- data/_sass/uswds/lib/helpers/_radial-positions-parser.scss +0 -18
- data/_sass/uswds/lib/helpers/_render-gradients.scss +0 -26
- data/_sass/uswds/lib/helpers/_shape-size-stripper.scss +0 -10
- data/_sass/uswds/lib/helpers/_str-to-num.scss +0 -50
- data/_sass/uswds/lib/mixins/_clearfix.scss +0 -25
- data/_sass/uswds/lib/settings/_asset-pipeline.scss +0 -7
- data/_sass/uswds/lib/settings/_disable-warnings.scss +0 -13
- data/_sass/uswds/lib/settings/_grid.scss +0 -51
- data/_sass/uswds/lib/settings/_prefixer.scss +0 -9
- data/_sass/uswds/lib/settings/_px-to-em.scss +0 -1
- data/_sass/uswds/lib/settings/_visual-grid.scss +0 -27
- data/_sass/uswds/uswds.scss +0 -41
- data/assets/uswds/css/uswds.css +0 -4849
- data/assets/uswds/css/uswds.min.css +0 -4
- data/assets/uswds/css/uswds.min.css.map +0 -1
- data/assets/uswds/fonts/merriweather-bold-webfont.eot +0 -0
- data/assets/uswds/fonts/merriweather-bold-webfont.ttf +0 -0
- data/assets/uswds/fonts/merriweather-bold-webfont.woff +0 -0
- data/assets/uswds/fonts/merriweather-bold-webfont.woff2 +0 -0
- data/assets/uswds/fonts/merriweather-italic-webfont.eot +0 -0
- data/assets/uswds/fonts/merriweather-italic-webfont.ttf +0 -0
- data/assets/uswds/fonts/merriweather-italic-webfont.woff +0 -0
- data/assets/uswds/fonts/merriweather-italic-webfont.woff2 +0 -0
- data/assets/uswds/fonts/merriweather-light-webfont.eot +0 -0
- data/assets/uswds/fonts/merriweather-light-webfont.ttf +0 -0
- data/assets/uswds/fonts/merriweather-light-webfont.woff +0 -0
- data/assets/uswds/fonts/merriweather-light-webfont.woff2 +0 -0
- data/assets/uswds/fonts/merriweather-regular-webfont.eot +0 -0
- data/assets/uswds/fonts/merriweather-regular-webfont.ttf +0 -0
- data/assets/uswds/fonts/merriweather-regular-webfont.woff +0 -0
- data/assets/uswds/fonts/merriweather-regular-webfont.woff2 +0 -0
- data/assets/uswds/fonts/sourcesanspro-bold-webfont.eot +0 -0
- data/assets/uswds/fonts/sourcesanspro-bold-webfont.ttf +0 -0
- data/assets/uswds/fonts/sourcesanspro-bold-webfont.woff +0 -0
- data/assets/uswds/fonts/sourcesanspro-bold-webfont.woff2 +0 -0
- data/assets/uswds/fonts/sourcesanspro-italic-webfont.eot +0 -0
- data/assets/uswds/fonts/sourcesanspro-italic-webfont.ttf +0 -0
- data/assets/uswds/fonts/sourcesanspro-italic-webfont.woff +0 -0
- data/assets/uswds/fonts/sourcesanspro-italic-webfont.woff2 +0 -0
- data/assets/uswds/fonts/sourcesanspro-light-webfont.eot +0 -0
- data/assets/uswds/fonts/sourcesanspro-light-webfont.ttf +0 -0
- data/assets/uswds/fonts/sourcesanspro-light-webfont.woff +0 -0
- data/assets/uswds/fonts/sourcesanspro-light-webfont.woff2 +0 -0
- data/assets/uswds/fonts/sourcesanspro-regular-webfont.eot +0 -0
- data/assets/uswds/fonts/sourcesanspro-regular-webfont.ttf +0 -0
- data/assets/uswds/fonts/sourcesanspro-regular-webfont.woff +0 -0
- data/assets/uswds/fonts/sourcesanspro-regular-webfont.woff2 +0 -0
- data/assets/uswds/img/alerts/error.png +0 -0
- data/assets/uswds/img/alerts/info.png +0 -0
- data/assets/uswds/img/alerts/success.png +0 -0
- data/assets/uswds/img/alerts/warning.png +0 -0
- data/assets/uswds/img/angle-arrow-down-hover.png +0 -0
- data/assets/uswds/img/angle-arrow-down-primary-hover.png +0 -0
- data/assets/uswds/img/angle-arrow-down-primary.png +0 -0
- data/assets/uswds/img/angle-arrow-down.png +0 -0
- data/assets/uswds/img/angle-arrow-up-primary-hover.png +0 -0
- data/assets/uswds/img/angle-arrow-up-primary.png +0 -0
- data/assets/uswds/img/arrow-both.png +0 -0
- data/assets/uswds/img/arrow-down.png +0 -0
- data/assets/uswds/img/arrow-right.png +0 -0
- data/assets/uswds/img/close-primary.png +0 -0
- data/assets/uswds/img/close.png +0 -0
- data/assets/uswds/img/correct8.png +0 -0
- data/assets/uswds/img/correct9.png +0 -0
- data/assets/uswds/img/external-link-alt-hover.png +0 -0
- data/assets/uswds/img/external-link-alt.png +0 -0
- data/assets/uswds/img/external-link-hover.png +0 -0
- data/assets/uswds/img/external-link.png +0 -0
- data/assets/uswds/img/minus-alt.png +0 -0
- data/assets/uswds/img/minus.png +0 -0
- data/assets/uswds/img/plus-alt.png +0 -0
- data/assets/uswds/img/plus.png +0 -0
- data/assets/uswds/img/search-alt.png +0 -0
- data/assets/uswds/img/search-primary.png +0 -0
- data/assets/uswds/img/search.png +0 -0
- data/assets/uswds/img/social-icons/png/facebook25.png +0 -0
- data/assets/uswds/img/social-icons/png/rss25.png +0 -0
- data/assets/uswds/img/social-icons/png/twitter16.png +0 -0
- data/assets/uswds/img/social-icons/png/youtube15.png +0 -0
@@ -1,16 +1 @@
|
|
1
|
-
|
2
|
-
<svg width="15px" height="15px" viewBox="0 0 15 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3
|
-
<!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
|
4
|
-
<title>UI element / Icons / Close</title>
|
5
|
-
<desc>Created with Sketch.</desc>
|
6
|
-
<defs></defs>
|
7
|
-
<g id="UI-components" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
8
|
-
<g id="Headers---Mobile" transform="translate(-298.000000, -362.000000)" fill="#0071BB">
|
9
|
-
<g id="Header---Mobile---Collapse" transform="translate(0.000000, 279.000000)">
|
10
|
-
<g id="UI-element-/-Icons-/-Close" transform="translate(298.000000, 83.000000)">
|
11
|
-
<path d="M14.6467778,11.2126037 C14.8818403,11.4476661 15,11.7342663 15,12.0711472 C15,12.4080282 14.8818403,12.6946283 14.6467778,12.9296908 L12.9296908,14.6467778 C12.6933713,14.8830973 12.4067711,15.001257 12.0698902,15.001257 C11.7342663,15.001257 11.4476661,14.8830973 11.2126037,14.6467778 L7.49937149,10.9348026 L3.7873963,14.6467778 C3.55233386,14.8830973 3.26573368,15.001257 2.92885276,15.001257 C2.59197184,15.001257 2.30662868,14.8830973 2.07030923,14.6467778 L0.353222157,12.9296908 C0.116902707,12.6946283 0,12.4080282 0,12.0711472 C0,11.7342663 0.116902707,11.4476661 0.353222157,11.2126037 L4.06519735,7.50062851 L0.353222157,3.78865331 C0.116902707,3.55233386 0,3.2669907 0,2.92885276 C0,2.59322886 0.116902707,2.30662868 0.353222157,2.07156624 L2.07030923,0.353222157 C2.30662868,0.118159725 2.59197184,0 2.92885276,0 C3.26573368,0 3.55233386,0.118159725 3.7873963,0.353222157 L7.49937149,4.06519735 L11.2126037,0.353222157 C11.4476661,0.118159725 11.7342663,0 12.0698902,0 C12.4067711,0 12.6933713,0.118159725 12.9296908,0.353222157 L14.6467778,2.07156624 C14.8818403,2.30662868 15,2.59322886 15,2.92885276 C15,3.2669907 14.8818403,3.55233386 14.6467778,3.78865331 L10.9348026,7.50062851 L14.6467778,11.2126037 Z" id="Fill-15-Copy"></path>
|
12
|
-
</g>
|
13
|
-
</g>
|
14
|
-
</g>
|
15
|
-
</g>
|
16
|
-
</svg>
|
1
|
+
<svg width="15" height="15" xmlns="http://www.w3.org/2000/svg"><path d="M14.647 11.213c.235.235.353.521.353.858 0 .337-.118.624-.353.859l-1.717 1.717a1.17 1.17 0 0 1-.86.354c-.336 0-.622-.118-.857-.354l-3.714-3.712-3.712 3.712A1.166 1.166 0 0 1 2.93 15c-.337 0-.622-.118-.859-.354L.353 12.93A1.165 1.165 0 0 1 0 12.07c0-.337.117-.623.353-.858L4.065 7.5.353 3.789A1.168 1.168 0 0 1 0 2.929c0-.336.117-.622.353-.857L2.07.353C2.307.118 2.592 0 2.93 0c.337 0 .623.118.858.353L7.5 4.065 11.213.353c.235-.235.521-.353.857-.353.337 0 .623.118.86.353l1.717 1.719c.235.235.353.521.353.857 0 .338-.118.623-.353.86L10.935 7.5l3.712 3.712z" fill="#005ea2" fill-rule="evenodd"/></svg>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
|
2
|
+
<path fill="#FFF" d="M14.6467778,11.2126037 C14.8818403,11.4476661 15,11.7342663 15,12.0711472 C15,12.4080282 14.8818403,12.6946283 14.6467778,12.9296908 L12.9296908,14.6467778 C12.6933713,14.8830973 12.4067711,15.001257 12.0698902,15.001257 C11.7342663,15.001257 11.4476661,14.8830973 11.2126037,14.6467778 L7.49937149,10.9348026 L3.7873963,14.6467778 C3.55233386,14.8830973 3.26573368,15.001257 2.92885276,15.001257 C2.59197184,15.001257 2.30662868,14.8830973 2.07030923,14.6467778 L0.353222157,12.9296908 C0.116902707,12.6946283 0,12.4080282 0,12.0711472 C0,11.7342663 0.116902707,11.4476661 0.353222157,11.2126037 L4.06519735,7.50062851 L0.353222157,3.78865331 C0.116902707,3.55233386 0,3.2669907 0,2.92885276 C0,2.59322886 0.116902707,2.30662868 0.353222157,2.07156624 L2.07030923,0.353222157 C2.30662868,0.118159725 2.59197184,0 2.92885276,0 C3.26573368,0 3.55233386,0.118159725 3.7873963,0.353222157 L7.49937149,4.06519735 L11.2126037,0.353222157 C11.4476661,0.118159725 11.7342663,0 12.0698902,0 C12.4067711,0 12.6933713,0.118159725 12.9296908,0.353222157 L14.6467778,2.07156624 C14.8818403,2.30662868 15,2.59322886 15,2.92885276 C15,3.2669907 14.8818403,3.55233386 14.6467778,3.78865331 L10.9348026,7.50062851 L14.6467778,11.2126037 Z"/>
|
3
|
+
</svg>
|
data/assets/uswds/img/close.svg
CHANGED
@@ -1,12 +1 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"
|
2
|
-
<svg width="15px" height="15px" viewBox="0 0 15 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3
|
-
<!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
|
4
|
-
<title>Fill 15 Copy</title>
|
5
|
-
<desc>Created with Sketch.</desc>
|
6
|
-
<defs></defs>
|
7
|
-
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
8
|
-
<g id="UI-element-/-Icons-/-Close" fill="#5B616B">
|
9
|
-
<path d="M14.6467778,11.2126037 C14.8818403,11.4476661 15,11.7342663 15,12.0711472 C15,12.4080282 14.8818403,12.6946283 14.6467778,12.9296908 L12.9296908,14.6467778 C12.6933713,14.8830973 12.4067711,15.001257 12.0698902,15.001257 C11.7342663,15.001257 11.4476661,14.8830973 11.2126037,14.6467778 L7.49937149,10.9348026 L3.7873963,14.6467778 C3.55233386,14.8830973 3.26573368,15.001257 2.92885276,15.001257 C2.59197184,15.001257 2.30662868,14.8830973 2.07030923,14.6467778 L0.353222157,12.9296908 C0.116902707,12.6946283 0,12.4080282 0,12.0711472 C0,11.7342663 0.116902707,11.4476661 0.353222157,11.2126037 L4.06519735,7.50062851 L0.353222157,3.78865331 C0.116902707,3.55233386 0,3.2669907 0,2.92885276 C0,2.59322886 0.116902707,2.30662868 0.353222157,2.07156624 L2.07030923,0.353222157 C2.30662868,0.118159725 2.59197184,0 2.92885276,0 C3.26573368,0 3.55233386,0.118159725 3.7873963,0.353222157 L7.49937149,4.06519735 L11.2126037,0.353222157 C11.4476661,0.118159725 11.7342663,0 12.0698902,0 C12.4067711,0 12.6933713,0.118159725 12.9296908,0.353222157 L14.6467778,2.07156624 C14.8818403,2.30662868 15,2.59322886 15,2.92885276 C15,3.2669907 14.8818403,3.55233386 14.6467778,3.78865331 L10.9348026,7.50062851 L14.6467778,11.2126037 Z" id="Fill-15-Copy"></path>
|
10
|
-
</g>
|
11
|
-
</g>
|
12
|
-
</svg>
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><title>close</title><path fill="#565C65" fill-rule="evenodd" d="M57.042 1.15l5.809 5.808a4 4 0 0 1 0 5.657L43.465 32l19.386 19.385a4 4 0 0 1 0 5.657l-5.809 5.809a4 4 0 0 1-5.657 0L32 43.465 12.615 62.851a4 4 0 0 1-5.657 0l-5.809-5.809a4 4 0 0 1 0-5.657L20.535 32 1.149 12.615a4 4 0 0 1 0-5.657l5.809-5.809a4 4 0 0 1 5.657 0L32 20.535 51.385 1.149a4 4 0 0 1 5.657 0z"/></svg>
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="65" height="50" viewBox="0 0 65 50"><title>correct8-alt</title><path fill="#171717" fill-rule="evenodd" d="M63.268 7.063l-5.616-5.61C56.882.685 55.946.3 54.845.3s-2.038.385-2.808 1.155L24.951 28.552 12.81 16.385c-.77-.77-1.707-1.155-2.808-1.155-1.1 0-2.037.385-2.807 1.154l-5.616 5.61C.81 22.764.425 23.7.425 24.8s.385 2.035 1.155 2.805l14.947 14.93 5.616 5.61c.77.77 1.706 1.154 2.807 1.154s2.038-.384 2.808-1.154l5.616-5.61 29.894-29.86c.77-.77 1.157-1.707 1.157-2.805 0-1.101-.385-2.036-1.156-2.805l-.001-.002z"/></svg>
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="65" height="50" viewBox="0 0 65 50"><title>correct8</title><path fill="#FFF" fill-rule="evenodd" d="M63.268 7.063l-5.616-5.61C56.882.685 55.946.3 54.845.3s-2.038.385-2.808 1.155L24.951 28.552 12.81 16.385c-.77-.77-1.707-1.155-2.808-1.155-1.1 0-2.037.385-2.807 1.154l-5.616 5.61C.81 22.764.425 23.7.425 24.8s.385 2.035 1.155 2.805l14.947 14.93 5.616 5.61c.77.77 1.706 1.154 2.807 1.154s2.038-.384 2.808-1.154l5.616-5.61 29.894-29.86c.77-.77 1.157-1.707 1.157-2.805 0-1.101-.385-2.036-1.156-2.805l-.001-.002z"/></svg>
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="49" viewBox="0 0 64 49"><title>correct9</title><path fill="#005EA2" fill-rule="evenodd" d="M62.843 6.764l-5.615-5.61C56.458.384 55.52 0 54.42 0c-1.1 0-2.037.385-2.808 1.154l-27.086 27.1-12.14-12.168c-.77-.77-1.706-1.156-2.808-1.156-1.1 0-2.037.385-2.807 1.155l-5.616 5.61C.385 22.465 0 23.401 0 24.501s.385 2.035 1.155 2.804l14.947 14.931 5.616 5.61c.77.77 1.707 1.154 2.807 1.154 1.102 0 2.038-.385 2.808-1.154l5.616-5.61 29.894-29.861c.77-.77 1.157-1.706 1.157-2.805 0-1.1-.385-2.035-1.155-2.804l-.002-.002z"/></svg>
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="55" viewBox="0 0 64 55"><title>external-link-alt-hover</title><path fill="#FFF" fill-rule="evenodd" d="M35.226 5c.333 0 .605.106.818.32.212.212.319.485.319.816v2.273c0 .332-.107.604-.32.817-.212.212-.484.32-.817.32H10.227c-1.562 0-2.9.555-4.013 1.668s-1.669 2.45-1.669 4.013v29.545c0 1.563.556 2.9 1.669 4.013s2.45 1.668 4.013 1.668h29.546c1.562 0 2.9-.555 4.013-1.668 1.112-1.113 1.668-2.45 1.668-4.013V33.41c0-.332.106-.604.32-.817.212-.213.484-.32.816-.32h2.273c.331 0 .604.107.817.32.214.213.32.485.32.818v11.363C50 47.591 49 50 46.999 52c-2 2-4.41 3.001-7.226 3.001H10.227C7.41 55 5.001 54 3 51.999c-2-2-3-4.41-3-7.226V15.227c0-2.817 1-5.226 3-7.226C5.001 6 7.41 5 10.227 5zm26.46-5c.627 0 1.17.229 1.627.686.457.458.687 1 .687 1.626v18.501c0 .626-.229 1.168-.687 1.626-.457.458-1 .687-1.626.687-.626 0-1.168-.23-1.626-.687l-6.36-6.36-23.558 23.56c-.24.24-.518.36-.831.36-.313 0-.59-.12-.831-.36l-4.12-4.12a1.142 1.142 0 0 1-.361-.831c0-.313.12-.59.361-.83l23.559-23.56-6.36-6.36c-.457-.457-.686-1-.686-1.626 0-.626.229-1.168.687-1.626.457-.457 1-.686 1.625-.686z"/></svg>
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="55" viewBox="0 0 64 55"><title>external-link-alt</title><path fill="#A9AEB1" fill-rule="evenodd" d="M35.226 5c.333 0 .605.106.818.32.212.212.319.485.319.816v2.273c0 .332-.107.604-.32.817-.212.212-.484.32-.817.32H10.227c-1.562 0-2.9.555-4.013 1.668s-1.669 2.45-1.669 4.013v29.545c0 1.563.556 2.9 1.669 4.013s2.45 1.668 4.013 1.668h29.546c1.562 0 2.9-.555 4.013-1.668 1.112-1.113 1.668-2.45 1.668-4.013V33.41c0-.332.106-.604.32-.817.212-.213.484-.32.816-.32h2.273c.331 0 .604.107.817.32.214.213.32.485.32.818v11.363C50 47.591 49 50 46.999 52c-2 2-4.41 3.001-7.226 3.001H10.227C7.41 55 5.001 54 3 51.999c-2-2-3-4.41-3-7.226V15.227c0-2.817 1-5.226 3-7.226C5.001 6 7.41 5 10.227 5zm26.46-5c.627 0 1.17.229 1.627.686.457.458.687 1 .687 1.626v18.501c0 .626-.229 1.168-.687 1.626-.457.458-1 .687-1.626.687-.626 0-1.168-.23-1.626-.687l-6.36-6.36-23.558 23.56c-.24.24-.518.36-.831.36-.313 0-.59-.12-.831-.36l-4.12-4.12a1.142 1.142 0 0 1-.361-.831c0-.313.12-.59.361-.83l23.559-23.56-6.36-6.36c-.457-.457-.686-1-.686-1.626 0-.626.229-1.168.687-1.626.457-.457 1-.686 1.625-.686z"/></svg>
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="55" viewBox="0 0 64 55"><title>external-link-hover</title><path fill="#1A4480" fill-rule="evenodd" d="M35.226 5c.333 0 .605.106.818.32.212.212.319.485.319.816v2.273c0 .332-.107.604-.32.817-.212.212-.484.32-.817.32H10.227c-1.562 0-2.9.555-4.013 1.668s-1.669 2.45-1.669 4.013v29.545c0 1.563.556 2.9 1.669 4.013s2.45 1.668 4.013 1.668h29.546c1.562 0 2.9-.555 4.013-1.668 1.112-1.113 1.668-2.45 1.668-4.013V33.41c0-.332.106-.604.32-.817.212-.213.484-.32.816-.32h2.273c.331 0 .604.107.817.32.214.213.32.485.32.818v11.363C50 47.591 49 50 46.999 52c-2 2-4.41 3.001-7.226 3.001H10.227C7.41 55 5.001 54 3 51.999c-2-2-3-4.41-3-7.226V15.227c0-2.817 1-5.226 3-7.226C5.001 6 7.41 5 10.227 5zm26.46-5c.627 0 1.17.229 1.627.686.457.458.687 1 .687 1.626v18.501c0 .626-.229 1.168-.687 1.626-.457.458-1 .687-1.626.687-.626 0-1.168-.23-1.626-.687l-6.36-6.36-23.558 23.56c-.24.24-.518.36-.831.36-.313 0-.59-.12-.831-.36l-4.12-4.12a1.142 1.142 0 0 1-.361-.831c0-.313.12-.59.361-.83l23.559-23.56-6.36-6.36c-.457-.457-.686-1-.686-1.626 0-.626.229-1.168.687-1.626.457-.457 1-.686 1.625-.686z"/></svg>
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="55" viewBox="0 0 64 55"><title>external-link</title><path fill="#005EA2" fill-rule="evenodd" d="M35.226 5c.333 0 .605.106.818.32.212.212.319.485.319.816v2.273c0 .332-.107.604-.32.817-.212.212-.484.32-.817.32H10.227c-1.562 0-2.9.555-4.013 1.668s-1.669 2.45-1.669 4.013v29.545c0 1.563.556 2.9 1.669 4.013s2.45 1.668 4.013 1.668h29.546c1.562 0 2.9-.555 4.013-1.668 1.112-1.113 1.668-2.45 1.668-4.013V33.41c0-.332.106-.604.32-.817.212-.213.484-.32.816-.32h2.273c.331 0 .604.107.817.32.214.213.32.485.32.818v11.363C50 47.591 49 50 46.999 52c-2 2-4.41 3.001-7.226 3.001H10.227C7.41 55 5.001 54 3 51.999c-2-2-3-4.41-3-7.226V15.227c0-2.817 1-5.226 3-7.226C5.001 6 7.41 5 10.227 5zm26.46-5c.627 0 1.17.229 1.627.686.457.458.687 1 .687 1.626v18.501c0 .626-.229 1.168-.687 1.626-.457.458-1 .687-1.626.687-.626 0-1.168-.23-1.626-.687l-6.36-6.36-23.558 23.56c-.24.24-.518.36-.831.36-.313 0-.59-.12-.831-.36l-4.12-4.12a1.142 1.142 0 0 1-.361-.831c0-.313.12-.59.361-.83l23.559-23.56-6.36-6.36c-.457-.457-.686-1-.686-1.626 0-.626.229-1.168.687-1.626.457-.457 1-.686 1.625-.686z"/></svg>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/assets/uswds/img/hero.png
CHANGED
Binary file
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><title>icon-dot-gov</title><path fill="#2378C3" fill-rule="evenodd" d="M32 0c17.673 0 32 14.327 32 32 0 17.673-14.327 32-32 32C14.327 64 0 49.673 0 32 0 14.327 14.327 0 32 0zm0 1.208C14.994 1.208 1.208 14.994 1.208 32S14.994 62.792 32 62.792 62.792 49.006 62.792 32 49.006 1.208 32 1.208zm10.59 38.858a.857.857 0 0 1 .882.822v1.642H18.886v-1.642a.857.857 0 0 1 .882-.822H42.59zM25.443 27.774v9.829h1.642v-9.83h3.273v9.83H32v-9.83h3.272v9.83h1.643v-9.83h3.272v9.83h.76a.857.857 0 0 1 .882.821v.821h-21.3v-.809a.857.857 0 0 1 .88-.82h.762v-9.842h3.272zm5.736-8.188l12.293 4.915v1.642h-1.63a.857.857 0 0 1-.882.822H21.41a.857.857 0 0 1-.882-.822h-1.642v-1.642l12.293-4.915z"/></svg>
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><title>icon-https</title><path fill="#719F2A" fill-rule="evenodd" d="M32 0c17.673 0 32 14.327 32 32 0 17.673-14.327 32-32 32C14.327 64 0 49.673 0 32 0 14.327 14.327 0 32 0zm0 1.208C14.994 1.208 1.208 14.994 1.208 32S14.994 62.792 32 62.792 62.792 49.006 62.792 32 49.006 1.208 32 1.208zm0 18.886a7.245 7.245 0 0 1 7.245 7.245v3.103h.52c.86 0 1.557.698 1.557 1.558v9.322c0 .86-.697 1.558-1.557 1.558h-15.53c-.86 0-1.557-.697-1.557-1.558V32c0-.86.697-1.558 1.557-1.558h.52V27.34A7.245 7.245 0 0 1 32 20.094zm0 3.103a4.142 4.142 0 0 0-4.142 4.142v3.103h8.284V27.34A4.142 4.142 0 0 0 32 23.197z"/></svg>
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="17" viewBox="0 0 64 17"><title>minus-alt</title><path fill="#565C65" fill-rule="evenodd" d="M62.726 1.195c-.848-.778-1.88-1.167-3.09-1.167H4.362c-1.211 0-2.242.389-3.09 1.167C.422 1.973 0 2.917 0 4.028v8.001c0 1.112.424 2.056 1.272 2.833.849.778 1.88 1.166 3.091 1.166h55.272c1.211 0 2.242-.388 3.091-1.166.847-.777 1.272-1.721 1.272-2.833v-8c0-1.112-.423-2.056-1.272-2.834z"/></svg>
|
data/assets/uswds/img/minus.svg
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="16" viewBox="0 0 64 16"><title>minus</title><path fill="#171717" fill-rule="evenodd" d="M62.726 1.167C61.878.389 60.846 0 59.636 0H4.362C3.151 0 2.12.388 1.272 1.166.422 1.944 0 2.888 0 4v8c0 1.112.424 2.056 1.272 2.833.849.778 1.88 1.167 3.091 1.167h55.272c1.211 0 2.242-.388 3.091-1.167.847-.777 1.272-1.72 1.272-2.832V4c0-1.111-.423-2.056-1.272-2.833z"/></svg>
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="65" viewBox="0 0 64 65"><title>plus-alt</title><path fill="#565C65" fill-rule="evenodd" d="M36 .03c1.111 0 2.056.424 2.833 1.271.778.85 1.166 1.88 1.166 3.092v19.635h19.636c1.125 0 2.095.336 2.907 1.007l.184.16c.849.778 1.272 1.722 1.272 2.834v8c0 1.112-.425 2.056-1.272 2.833-.849.778-1.88 1.166-3.091 1.166H39.999v19.636c0 1.126-.335 2.095-1.006 2.907l-.16.184c-.778.849-1.722 1.273-2.833 1.273h-8.001c-1.111 0-2.056-.424-2.834-1.273-.778-.848-1.166-1.879-1.166-3.09V40.027H4.363c-1.125 0-2.094-.334-2.906-1.005l-.185-.161C.424 38.085 0 37.14 0 36.029v-8c0-1.112.424-2.056 1.272-2.834.849-.778 1.88-1.167 3.091-1.167H24V4.393c0-1.126.335-2.095 1.006-2.907l.16-.185C25.944.453 26.889.03 28 .03z"/></svg>
|
data/assets/uswds/img/plus.svg
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><title>plus</title><path fill="#171717" fill-rule="evenodd" d="M36 0c1.111 0 2.056.425 2.833 1.272.778.849 1.166 1.88 1.166 3.091V24h19.636c1.125 0 2.095.335 2.907 1.006l.184.16c.849.778 1.272 1.723 1.272 2.834v8c0 1.112-.425 2.057-1.272 2.834-.849.778-1.88 1.166-3.091 1.166H39.999v19.636c0 1.125-.335 2.094-1.006 2.906l-.16.185c-.778.848-1.722 1.272-2.833 1.272h-8.001c-1.111 0-2.056-.424-2.834-1.272-.778-.849-1.166-1.88-1.166-3.09V39.998H4.363c-1.125 0-2.094-.335-2.906-1.006l-.185-.16C.424 38.054 0 37.11 0 36v-8.001c0-1.111.424-2.056 1.272-2.834C2.121 24.387 3.152 24 4.363 24H24V4.363c0-1.125.335-2.094 1.006-2.906l.16-.185C25.944.423 26.889 0 28 0z"/></svg>
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><title>search-alt</title><path fill="#565C65" fill-rule="evenodd" d="M39.25 39.25c3.37-3.372 5.06-7.425 5.06-12.174 0-4.74-1.686-8.798-5.06-12.173-3.372-3.37-7.425-5.056-12.174-5.056-4.74 0-8.798 1.686-12.173 5.056-3.37 3.371-5.056 7.433-5.056 12.173 0 4.745 1.686 8.802 5.056 12.173 3.371 3.37 7.433 5.06 12.173 5.06 4.745 0 8.802-1.685 12.173-5.06zm23.325 16.366c.951.947 1.425 2.103 1.425 3.46 0 1.336-.486 2.488-1.463 3.46a4.724 4.724 0 0 1-3.456 1.46c-1.391 0-2.54-.487-3.465-1.46L42.423 49.383a26.334 26.334 0 0 1-15.347 4.77c-3.665 0-7.168-.708-10.517-2.133a27.017 27.017 0 0 1-8.653-5.768 27.046 27.046 0 0 1-5.773-8.657A26.6 26.6 0 0 1 0 27.076c0-3.665.713-7.168 2.133-10.517a27.025 27.025 0 0 1 5.773-8.653 26.961 26.961 0 0 1 8.649-5.773A26.563 26.563 0 0 1 27.076 0c3.67 0 7.177.708 10.522 2.133a27.008 27.008 0 0 1 8.653 5.773 27.093 27.093 0 0 1 5.768 8.653 26.578 26.578 0 0 1 2.134 10.517c0 5.64-1.592 10.752-4.77 15.347l13.192 13.193z"/></svg>
|
@@ -1,12 +1 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"
|
2
|
-
<svg width="15px" height="15px" viewBox="0 0 15 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3
|
-
<!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
|
4
|
-
<title>Fill 200 Copy</title>
|
5
|
-
<desc>Created with Sketch.</desc>
|
6
|
-
<defs></defs>
|
7
|
-
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
8
|
-
<g id="UI-element-/-Icons-/-Search---blue" fill="#0071BC">
|
9
|
-
<path d="M9.19897377,9.19897377 C9.9895477,8.40935006 10.3848347,7.4581908 10.3848347,6.34644622 C10.3848347,5.23470163 9.9895477,4.28354238 9.19897377,3.49296845 C8.40935006,2.70334474 7.4581908,2.30805777 6.34644622,2.30805777 C5.23470163,2.30805777 4.28354238,2.70334474 3.49296845,3.49296845 C2.70334474,4.28354238 2.30805777,5.23470163 2.30805777,6.34644622 C2.30805777,7.4581908 2.70334474,8.40935006 3.49296845,9.19897377 C4.28354238,9.9895477 5.23470163,10.3848347 6.34644622,10.3848347 C7.4581908,10.3848347 8.40935006,9.9895477 9.19897377,9.19897377 L9.19897377,9.19897377 Z M14.6664766,13.0349677 C14.8888255,13.2573166 15,13.5281262 15,13.8464462 C15,14.159065 14.8859749,14.4289244 14.6569745,14.6569745 C14.4289244,14.8850247 14.159065,14.9990498 13.8464462,14.9990498 C13.5214747,14.9990498 13.2516154,14.8850247 13.0349677,14.6569745 L9.94298746,11.5744964 C8.86735082,12.3194603 7.66913721,12.6919422 6.34644622,12.6919422 C5.48745724,12.6919422 4.66552642,12.5256556 3.88065374,12.1911821 C3.09673128,11.8586089 2.42018244,11.4072596 1.85290764,10.8399848 C1.28468263,10.2717598 0.834283542,9.59616116 0.500760167,8.81128848 C0.167236792,8.02736602 0,7.2054352 0,6.34644622 C0,5.48745724 0.167236792,4.66552642 0.500760167,3.88065374 C0.834283542,3.09673128 1.28468263,2.42018244 1.85290764,1.85290764 C2.42018244,1.28468263 3.09673128,0.833333333 3.88065374,0.500760167 C4.66552642,0.166286583 5.48745724,0 6.34644622,0 C7.2054352,0 8.02831623,0.166286583 8.81223869,0.500760167 C9.59616116,0.833333333 10.2717598,1.28468263 10.8399848,1.85290764 C11.4072596,2.42018244 11.8586089,3.09673128 12.1921323,3.88065374 C12.5256556,4.66552642 12.6928924,5.48745724 12.6928924,6.34644622 C12.6928924,7.668187 12.3194603,8.86640061 11.5744964,9.94298746 L14.6664766,13.0349677 Z" id="Fill-200-Copy"></path>
|
10
|
-
</g>
|
11
|
-
</g>
|
12
|
-
</svg>
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><title>search-primary</title><path fill="#005EA2" fill-rule="evenodd" d="M39.25 39.25c3.37-3.372 5.06-7.425 5.06-12.174 0-4.74-1.686-8.798-5.06-12.173-3.372-3.37-7.425-5.056-12.174-5.056-4.74 0-8.798 1.686-12.173 5.056-3.37 3.371-5.056 7.433-5.056 12.173 0 4.745 1.686 8.802 5.056 12.173 3.371 3.37 7.433 5.06 12.173 5.06 4.745 0 8.802-1.685 12.173-5.06zm23.325 16.366c.951.947 1.425 2.103 1.425 3.46 0 1.336-.486 2.488-1.463 3.46a4.724 4.724 0 0 1-3.456 1.46c-1.391 0-2.54-.487-3.465-1.46L42.423 49.383a26.334 26.334 0 0 1-15.347 4.77c-3.665 0-7.168-.708-10.517-2.133a27.017 27.017 0 0 1-8.653-5.768 27.046 27.046 0 0 1-5.773-8.657A26.6 26.6 0 0 1 0 27.076c0-3.665.713-7.168 2.133-10.517a27.025 27.025 0 0 1 5.773-8.653 26.961 26.961 0 0 1 8.649-5.773A26.563 26.563 0 0 1 27.076 0c3.67 0 7.177.708 10.522 2.133a27.008 27.008 0 0 1 8.653 5.773 27.093 27.093 0 0 1 5.768 8.653 26.578 26.578 0 0 1 2.134 10.517c0 5.64-1.592 10.752-4.77 15.347l13.192 13.193z"/></svg>
|
data/assets/uswds/img/search.svg
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="65" height="64" viewBox="0 0 65 64"><title>search</title><path fill="#FFF" d="M62.672 55.618L49.48 42.426c3.18-4.59 4.77-9.706 4.77-15.347 0-3.666-.713-7.173-2.137-10.519-1.423-3.347-3.347-6.231-5.77-8.656-2.422-2.425-5.307-4.346-8.652-5.769A26.606 26.606 0 0 0 27.17 0a26.61 26.61 0 0 0-10.52 2.135c-3.347 1.423-6.231 3.346-8.654 5.769-2.423 2.424-4.346 5.309-5.769 8.655A26.6 26.6 0 0 0 .092 27.077c0 3.667.712 7.172 2.135 10.52 1.423 3.345 3.346 6.23 5.769 8.652 2.424 2.424 5.308 4.347 8.655 5.77a26.606 26.606 0 0 0 10.519 2.135c5.641 0 10.757-1.591 15.347-4.77l13.191 13.153c.923.974 2.076 1.462 3.462 1.462 1.333 0 2.487-.487 3.46-1.462.975-.974 1.462-2.128 1.462-3.461 0-1.358-.473-2.513-1.422-3.46l.002.002zM39.345 39.252c-3.372 3.372-7.429 5.057-12.173 5.057s-8.801-1.685-12.173-5.057c-3.373-3.372-5.058-7.43-5.058-12.174 0-4.743 1.686-8.8 5.058-12.172 3.371-3.372 7.43-5.058 12.173-5.058s8.8 1.686 12.173 5.058c3.372 3.371 5.059 7.43 5.059 12.173 0 4.744-1.687 8.803-5.059 12.175v-.002z"/></svg>
|
Binary file
|
@@ -1 +1 @@
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="216" height="146" viewBox="0 0 216 146"><path d="M118.348 49.86V38.293c0-1.737.08-3.082.243-4.032.165-.95.53-1.886 1.104-2.81.57-.923 1.494-1.56 2.77-1.914 1.277-.354 2.975-.53 5.094-.53h11.568V5.866H120.63c-10.702 0-18.387 2.54-23.058 7.617-4.67 5.08-7.006 12.56-7.006 22.446v13.93H76.714V73h13.85v67.134h27.784V73h18.494l2.444-23.14h-20.938z"/></svg>
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="216" height="146" viewBox="0 0 216 146"><path d="M118.348 49.86V38.293c0-1.737.08-3.082.243-4.032.165-.95.53-1.886 1.104-2.81.57-.923 1.494-1.56 2.77-1.914 1.277-.354 2.975-.53 5.094-.53h11.568V5.866H120.63c-10.702 0-18.387 2.54-23.058 7.617-4.67 5.08-7.006 12.56-7.006 22.446v13.93H76.714V73h13.85v67.134h27.784V73h18.494l2.444-23.14h-20.938z" fill="#1b1b1b"/></svg>
|
Binary file
|
@@ -1 +1 @@
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="216" height="146" viewBox="0 0 216 146"><path d="M66.28 99.072c-4.347 0-8.04 1.52-11.082 4.562-3.04 3.042-4.562 6.735-4.562 11.08 0 4.347 1.52 8.04 4.562 11.08 3.042 3.042 6.736 4.563 11.08 4.563 4.346 0 8.04-1.52 11.08-4.562 3.042-3.042 4.563-6.734 4.563-11.08s-1.52-8.04-4.56-11.08c-3.04-3.042-6.733-4.563-11.08-4.563zm36.01-20.37c-6.138-6.19-13.172-11.12-21.102-14.786-7.93-3.667-16.24-5.853-24.93-6.56h-.408c-1.412 0-2.58.463-3.503 1.386-1.14.977-1.71 2.254-1.71 3.83V73.57c0 1.357.447 2.525 1.343 3.503.896.98 2.023 1.522 3.38 1.63 12.44 1.195 23.07 6.206 31.897 15.032 8.826 8.825 13.837 19.458 15.032 31.896.106 1.36.65 2.488 1.63 3.384.975.897 2.142 1.346 3.5 1.346h11c1.574 0 2.85-.57 3.83-1.71 1.03-1.09 1.492-2.393 1.385-3.914-.707-8.69-2.894-17-6.56-24.93-3.666-7.93-8.595-14.964-14.787-21.102z"/><path d="M155.573 84.04c-5.812-13.01-13.796-24.565-23.953-34.668-10.103-10.157-21.658-18.14-34.667-23.953-13.008-5.814-26.628-9.074-40.86-9.78h-.243c-1.412 0-2.607.49-3.585 1.467-1.086.976-1.63 2.226-1.63 3.747v11.65c0 1.358.477 2.54 1.427 3.544s2.104 1.534 3.462 1.59c11.678.706 22.772 3.477 33.282 8.31 10.51 4.835 19.635 11.12 27.375 18.86 7.74 7.74 14.03 16.866 18.86 27.376 4.837 10.512 7.58 21.604 8.23 33.282.057 1.357.586 2.512 1.59 3.462 1.006.95 2.215 1.427 3.627 1.427h11.65c1.52 0 2.768-.544 3.747-1.632 1.087-1.086 1.574-2.36 1.468-3.828-.704-14.232-3.964-27.852-9.776-40.86z"/></svg>
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="216" height="146" viewBox="0 0 216 146"><path d="M66.28 99.072c-4.347 0-8.04 1.52-11.082 4.562-3.04 3.042-4.562 6.735-4.562 11.08 0 4.347 1.52 8.04 4.562 11.08 3.042 3.042 6.736 4.563 11.08 4.563 4.346 0 8.04-1.52 11.08-4.562 3.042-3.042 4.563-6.734 4.563-11.08s-1.52-8.04-4.56-11.08c-3.04-3.042-6.733-4.563-11.08-4.563zm36.01-20.37c-6.138-6.19-13.172-11.12-21.102-14.786-7.93-3.667-16.24-5.853-24.93-6.56h-.408c-1.412 0-2.58.463-3.503 1.386-1.14.977-1.71 2.254-1.71 3.83V73.57c0 1.357.447 2.525 1.343 3.503.896.98 2.023 1.522 3.38 1.63 12.44 1.195 23.07 6.206 31.897 15.032 8.826 8.825 13.837 19.458 15.032 31.896.106 1.36.65 2.488 1.63 3.384.975.897 2.142 1.346 3.5 1.346h11c1.574 0 2.85-.57 3.83-1.71 1.03-1.09 1.492-2.393 1.385-3.914-.707-8.69-2.894-17-6.56-24.93-3.666-7.93-8.595-14.964-14.787-21.102z" fill="#1b1b1b"/><path d="M155.573 84.04c-5.812-13.01-13.796-24.565-23.953-34.668-10.103-10.157-21.658-18.14-34.667-23.953-13.008-5.814-26.628-9.074-40.86-9.78h-.243c-1.412 0-2.607.49-3.585 1.467-1.086.976-1.63 2.226-1.63 3.747v11.65c0 1.358.477 2.54 1.427 3.544s2.104 1.534 3.462 1.59c11.678.706 22.772 3.477 33.282 8.31 10.51 4.835 19.635 11.12 27.375 18.86 7.74 7.74 14.03 16.866 18.86 27.376 4.837 10.512 7.58 21.604 8.23 33.282.057 1.357.586 2.512 1.59 3.462 1.006.95 2.215 1.427 3.627 1.427h11.65c1.52 0 2.768-.544 3.747-1.632 1.087-1.086 1.574-2.36 1.468-3.828-.704-14.232-3.964-27.852-9.776-40.86z" fill="#1b1b1b"/></svg>
|
Binary file
|
@@ -1 +1 @@
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="216" height="146" viewBox="0 0 216 146"><path d="M172.2 33.24c-5.05 2.174-10.103 3.53-15.152 4.076 5.703-3.422 9.56-8.256 11.57-14.502-5.216 3.095-10.783 5.213-16.703 6.354-5.215-5.54-11.623-8.31-19.228-8.31-7.278 0-13.483 2.565-18.617 7.698-5.133 5.133-7.7 11.338-7.7 18.616 0 1.955.218 3.965.653 6.03-10.755-.544-20.844-3.246-30.268-8.107-9.424-4.862-17.422-11.34-23.994-19.432-2.39 4.073-3.582 8.5-3.582 13.28 0 4.508 1.06 8.69 3.178 12.547 2.118 3.856 4.97 6.98 8.555 9.37-4.237-.164-8.202-1.278-11.895-3.342v.326c0 6.355 1.996 11.935 5.988 16.743 3.992 4.808 9.03 7.835 15.113 9.084-2.28.6-4.59.9-6.925.9-1.52 0-3.177-.137-4.97-.407 1.685 5.27 4.78 9.6 9.29 12.995 4.507 3.396 9.613 5.146 15.316 5.256-9.56 7.495-20.45 11.243-32.67 11.243-2.336 0-4.454-.107-6.355-.325 12.22 7.876 25.69 11.813 40.41 11.813 9.344 0 18.116-1.48 26.316-4.44 8.203-2.96 15.21-6.924 21.02-11.895 5.812-4.97 10.823-10.686 15.032-17.15 4.21-6.463 7.345-13.21 9.41-20.245 2.064-7.035 3.096-14.08 3.096-21.143 0-1.52-.027-2.66-.082-3.422 5.163-3.746 9.563-8.282 13.2-13.604z"/></svg>
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="216" height="146" viewBox="0 0 216 146"><path d="M172.2 33.24c-5.05 2.174-10.103 3.53-15.152 4.076 5.703-3.422 9.56-8.256 11.57-14.502-5.216 3.095-10.783 5.213-16.703 6.354-5.215-5.54-11.623-8.31-19.228-8.31-7.278 0-13.483 2.565-18.617 7.698-5.133 5.133-7.7 11.338-7.7 18.616 0 1.955.218 3.965.653 6.03-10.755-.544-20.844-3.246-30.268-8.107-9.424-4.862-17.422-11.34-23.994-19.432-2.39 4.073-3.582 8.5-3.582 13.28 0 4.508 1.06 8.69 3.178 12.547 2.118 3.856 4.97 6.98 8.555 9.37-4.237-.164-8.202-1.278-11.895-3.342v.326c0 6.355 1.996 11.935 5.988 16.743 3.992 4.808 9.03 7.835 15.113 9.084-2.28.6-4.59.9-6.925.9-1.52 0-3.177-.137-4.97-.407 1.685 5.27 4.78 9.6 9.29 12.995 4.507 3.396 9.613 5.146 15.316 5.256-9.56 7.495-20.45 11.243-32.67 11.243-2.336 0-4.454-.107-6.355-.325 12.22 7.876 25.69 11.813 40.41 11.813 9.344 0 18.116-1.48 26.316-4.44 8.203-2.96 15.21-6.924 21.02-11.895 5.812-4.97 10.823-10.686 15.032-17.15 4.21-6.463 7.345-13.21 9.41-20.245 2.064-7.035 3.096-14.08 3.096-21.143 0-1.52-.027-2.66-.082-3.422 5.163-3.746 9.563-8.282 13.2-13.604z" fill="#1b1b1b"/></svg>
|
Binary file
|
@@ -1 +1 @@
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="216" height="146" viewBox="0 0 216 146"><path d="M166.254 75.443c-.705-3.205-2.268-5.893-4.684-8.065-2.418-2.172-5.202-3.45-8.353-3.83-9.993-1.085-25.065-1.628-45.218-1.628-20.155 0-35.2.543-45.14 1.63-3.204.38-6 1.656-8.39 3.828-2.39 2.173-3.967 4.86-4.728 8.065-1.412 6.302-2.118 15.807-2.118 28.517 0 12.927.706 22.433 2.118 28.517.707 3.203 2.27 5.893 4.686 8.064 2.416 2.176 5.2 3.425 8.35 3.75C72.776 145.43 87.85 146 108 146s35.225-.57 45.217-1.71c3.15-.327 5.92-1.576 8.31-3.75 2.392-2.17 3.967-4.86 4.727-8.063 1.412-6.302 2.12-15.807 2.12-28.517-.002-12.927-.71-22.433-2.12-28.517zm-84.162 8.23h-8.718v46.358h-8.147V83.677h-8.555v-7.66h25.42v7.66zm21.997 46.358h-7.254v-4.4c-2.933 3.317-5.704 4.97-8.31 4.97-2.5 0-4.075-1.002-4.726-3.01-.433-1.305-.65-3.288-.65-5.95V89.783h7.25v29.656c0 1.737.027 2.688.082 2.85.163 1.142.733 1.712 1.71 1.712 1.467 0 3.016-1.14 4.645-3.422V89.783h7.25v40.248zm27.7-12.055c0 3.965-.246 6.682-.73 8.15-.928 2.984-2.855 4.478-5.788 4.478-2.607 0-5.133-1.493-7.578-4.478v3.91h-7.25v-54.02h7.25v17.68c2.337-2.93 4.86-4.4 7.578-4.4 2.933 0 4.86 1.523 5.785 4.564.486 1.41.73 4.1.73 8.063v16.048zm27.536-6.68h-14.583v7.088c0 3.75 1.248 5.622 3.747 5.622 1.793 0 2.88-.977 3.26-2.934.108-.542.163-2.2.163-4.97h7.414v1.06c0 2.663-.055 4.237-.163 4.728-.162 1.465-.73 2.932-1.71 4.398-1.956 2.88-4.89 4.318-8.8 4.318-3.748 0-6.68-1.384-8.8-4.153-1.574-2.01-2.362-5.16-2.362-9.45v-14.1c0-4.29.76-7.44 2.28-9.45 2.12-2.77 5.025-4.154 8.72-4.154 3.64 0 6.52 1.384 8.635 4.154 1.468 2.01 2.2 5.16 2.2 9.45v8.392z"/><path d="M121.36 95.895c-1.25 0-2.47.6-3.665 1.793v24.522c1.195 1.194 2.416 1.792 3.666 1.792 2.12 0 3.18-1.818 3.18-5.46v-17.188c0-3.64-1.06-5.46-3.18-5.46zm27.05 0c-2.443 0-3.665 1.847-3.665 5.54v3.747h7.332v-3.748c0-3.694-1.223-5.54-3.666-5.54zM77.368 32.508v22.08h8.147v-22.08L95.372 0h-8.31l-5.54 21.428L75.74 0h-8.636c1.52 4.563 3.286 9.64 5.296 15.236 2.553 7.495 4.21 13.253 4.97 17.272zm28.922 22.65c3.747 0 6.625-1.385 8.635-4.155 1.52-2.01 2.28-5.215 2.28-9.614V27.13c0-4.344-.76-7.522-2.28-9.532-2.01-2.77-4.888-4.155-8.636-4.155-3.64 0-6.495 1.385-8.558 4.155-1.52 2.01-2.28 5.188-2.28 9.533v14.26c0 4.346.76 7.55 2.28 9.615 2.064 2.77 4.915 4.155 8.555 4.155zm-3.505-29.494c0-3.748 1.168-5.622 3.504-5.622s3.5 1.874 3.5 5.622v17.11c0 3.802-1.167 5.702-3.503 5.702s-3.505-1.9-3.505-5.703v-17.11zm25.908 29.494c2.717 0 5.515-1.684 8.393-5.052v4.48h7.414V13.933h-7.414v31.04c-1.63 2.337-3.177 3.504-4.645 3.504-.976 0-1.546-.597-1.71-1.792-.053-.11-.08-1.06-.08-2.852v-29.9h-7.414v32.1c0 2.77.218 4.807.652 6.11.707 2.01 2.31 3.016 4.807 3.016z"/></svg>
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="216" height="146" viewBox="0 0 216 146"><path d="M166.254 75.443c-.705-3.205-2.268-5.893-4.684-8.065-2.418-2.172-5.202-3.45-8.353-3.83-9.993-1.085-25.065-1.628-45.218-1.628-20.155 0-35.2.543-45.14 1.63-3.204.38-6 1.656-8.39 3.828-2.39 2.173-3.967 4.86-4.728 8.065-1.412 6.302-2.118 15.807-2.118 28.517 0 12.927.706 22.433 2.118 28.517.707 3.203 2.27 5.893 4.686 8.064 2.416 2.176 5.2 3.425 8.35 3.75C72.776 145.43 87.85 146 108 146s35.225-.57 45.217-1.71c3.15-.327 5.92-1.576 8.31-3.75 2.392-2.17 3.967-4.86 4.727-8.063 1.412-6.302 2.12-15.807 2.12-28.517-.002-12.927-.71-22.433-2.12-28.517zm-84.162 8.23h-8.718v46.358h-8.147V83.677h-8.555v-7.66h25.42v7.66zm21.997 46.358h-7.254v-4.4c-2.933 3.317-5.704 4.97-8.31 4.97-2.5 0-4.075-1.002-4.726-3.01-.433-1.305-.65-3.288-.65-5.95V89.783h7.25v29.656c0 1.737.027 2.688.082 2.85.163 1.142.733 1.712 1.71 1.712 1.467 0 3.016-1.14 4.645-3.422V89.783h7.25v40.248zm27.7-12.055c0 3.965-.246 6.682-.73 8.15-.928 2.984-2.855 4.478-5.788 4.478-2.607 0-5.133-1.493-7.578-4.478v3.91h-7.25v-54.02h7.25v17.68c2.337-2.93 4.86-4.4 7.578-4.4 2.933 0 4.86 1.523 5.785 4.564.486 1.41.73 4.1.73 8.063v16.048zm27.536-6.68h-14.583v7.088c0 3.75 1.248 5.622 3.747 5.622 1.793 0 2.88-.977 3.26-2.934.108-.542.163-2.2.163-4.97h7.414v1.06c0 2.663-.055 4.237-.163 4.728-.162 1.465-.73 2.932-1.71 4.398-1.956 2.88-4.89 4.318-8.8 4.318-3.748 0-6.68-1.384-8.8-4.153-1.574-2.01-2.362-5.16-2.362-9.45v-14.1c0-4.29.76-7.44 2.28-9.45 2.12-2.77 5.025-4.154 8.72-4.154 3.64 0 6.52 1.384 8.635 4.154 1.468 2.01 2.2 5.16 2.2 9.45v8.392z" fill="#1b1b1b"/><path d="M121.36 95.895c-1.25 0-2.47.6-3.665 1.793v24.522c1.195 1.194 2.416 1.792 3.666 1.792 2.12 0 3.18-1.818 3.18-5.46v-17.188c0-3.64-1.06-5.46-3.18-5.46zm27.05 0c-2.443 0-3.665 1.847-3.665 5.54v3.747h7.332v-3.748c0-3.694-1.223-5.54-3.666-5.54zM77.368 32.508v22.08h8.147v-22.08L95.372 0h-8.31l-5.54 21.428L75.74 0h-8.636c1.52 4.563 3.286 9.64 5.296 15.236 2.553 7.495 4.21 13.253 4.97 17.272zm28.922 22.65c3.747 0 6.625-1.385 8.635-4.155 1.52-2.01 2.28-5.215 2.28-9.614V27.13c0-4.344-.76-7.522-2.28-9.532-2.01-2.77-4.888-4.155-8.636-4.155-3.64 0-6.495 1.385-8.558 4.155-1.52 2.01-2.28 5.188-2.28 9.533v14.26c0 4.346.76 7.55 2.28 9.615 2.064 2.77 4.915 4.155 8.555 4.155zm-3.505-29.494c0-3.748 1.168-5.622 3.504-5.622s3.5 1.874 3.5 5.622v17.11c0 3.802-1.167 5.702-3.503 5.702s-3.505-1.9-3.505-5.703v-17.11zm25.908 29.494c2.717 0 5.515-1.684 8.393-5.052v4.48h7.414V13.933h-7.414v31.04c-1.63 2.337-3.177 3.504-4.645 3.504-.976 0-1.546-.597-1.71-1.792-.053-.11-.08-1.06-.08-2.852v-29.9h-7.414v32.1c0 2.77.218 4.807.652 6.11.707 2.01 2.31 3.016 4.807 3.016z" fill="#1b1b1b"/></svg>
|
data/assets/uswds/js/uswds.js
CHANGED
@@ -1,56 +1,4 @@
|
|
1
|
-
(function e
|
2
|
-
'use strict';
|
3
|
-
|
4
|
-
/**
|
5
|
-
* Array#filter.
|
6
|
-
*
|
7
|
-
* @param {Array} arr
|
8
|
-
* @param {Function} fn
|
9
|
-
* @param {Object=} self
|
10
|
-
* @return {Array}
|
11
|
-
* @throw TypeError
|
12
|
-
*/
|
13
|
-
|
14
|
-
module.exports = function (arr, fn, self) {
|
15
|
-
if (arr.filter) return arr.filter(fn, self);
|
16
|
-
if (void 0 === arr || null === arr) throw new TypeError();
|
17
|
-
if ('function' != typeof fn) throw new TypeError();
|
18
|
-
var ret = [];
|
19
|
-
for (var i = 0; i < arr.length; i++) {
|
20
|
-
if (!hasOwn.call(arr, i)) continue;
|
21
|
-
var val = arr[i];
|
22
|
-
if (fn.call(self, val, i, arr)) ret.push(val);
|
23
|
-
}
|
24
|
-
return ret;
|
25
|
-
};
|
26
|
-
|
27
|
-
var hasOwn = Object.prototype.hasOwnProperty;
|
28
|
-
|
29
|
-
},{}],2:[function(require,module,exports){
|
30
|
-
/**
|
31
|
-
* array-foreach
|
32
|
-
* Array#forEach ponyfill for older browsers
|
33
|
-
* (Ponyfill: A polyfill that doesn't overwrite the native method)
|
34
|
-
*
|
35
|
-
* https://github.com/twada/array-foreach
|
36
|
-
*
|
37
|
-
* Copyright (c) 2015-2016 Takuto Wada
|
38
|
-
* Licensed under the MIT license.
|
39
|
-
* https://github.com/twada/array-foreach/blob/master/MIT-LICENSE
|
40
|
-
*/
|
41
|
-
'use strict';
|
42
|
-
|
43
|
-
module.exports = function forEach(ary, callback, thisArg) {
|
44
|
-
if (ary.forEach) {
|
45
|
-
ary.forEach(callback, thisArg);
|
46
|
-
return;
|
47
|
-
}
|
48
|
-
for (var i = 0; i < ary.length; i += 1) {
|
49
|
-
callback.call(thisArg, ary[i], i, ary);
|
50
|
-
}
|
51
|
-
};
|
52
|
-
|
53
|
-
},{}],3:[function(require,module,exports){
|
1
|
+
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
|
54
2
|
"use strict";
|
55
3
|
|
56
4
|
/*
|
@@ -65,223 +13,230 @@ module.exports = function forEach(ary, callback, thisArg) {
|
|
65
13
|
/*global self, document, DOMException */
|
66
14
|
|
67
15
|
/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */
|
68
|
-
|
69
16
|
if ("document" in window.self) {
|
17
|
+
// Full polyfill for browsers with no classList support
|
18
|
+
// Including IE < Edge missing SVGElement.classList
|
19
|
+
if (!("classList" in document.createElement("_")) || document.createElementNS && !("classList" in document.createElementNS("http://www.w3.org/2000/svg", "g"))) {
|
20
|
+
(function (view) {
|
21
|
+
"use strict";
|
22
|
+
|
23
|
+
if (!('Element' in view)) return;
|
24
|
+
|
25
|
+
var classListProp = "classList",
|
26
|
+
protoProp = "prototype",
|
27
|
+
elemCtrProto = view.Element[protoProp],
|
28
|
+
objCtr = Object,
|
29
|
+
strTrim = String[protoProp].trim || function () {
|
30
|
+
return this.replace(/^\s+|\s+$/g, "");
|
31
|
+
},
|
32
|
+
arrIndexOf = Array[protoProp].indexOf || function (item) {
|
33
|
+
var i = 0,
|
34
|
+
len = this.length;
|
35
|
+
|
36
|
+
for (; i < len; i++) {
|
37
|
+
if (i in this && this[i] === item) {
|
38
|
+
return i;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
return -1;
|
43
|
+
} // Vendors: please allow content code to instantiate DOMExceptions
|
44
|
+
,
|
45
|
+
DOMEx = function DOMEx(type, message) {
|
46
|
+
this.name = type;
|
47
|
+
this.code = DOMException[type];
|
48
|
+
this.message = message;
|
49
|
+
},
|
50
|
+
checkTokenAndGetIndex = function checkTokenAndGetIndex(classList, token) {
|
51
|
+
if (token === "") {
|
52
|
+
throw new DOMEx("SYNTAX_ERR", "An invalid or illegal string was specified");
|
53
|
+
}
|
54
|
+
|
55
|
+
if (/\s/.test(token)) {
|
56
|
+
throw new DOMEx("INVALID_CHARACTER_ERR", "String contains an invalid character");
|
57
|
+
}
|
58
|
+
|
59
|
+
return arrIndexOf.call(classList, token);
|
60
|
+
},
|
61
|
+
ClassList = function ClassList(elem) {
|
62
|
+
var trimmedClasses = strTrim.call(elem.getAttribute("class") || ""),
|
63
|
+
classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [],
|
64
|
+
i = 0,
|
65
|
+
len = classes.length;
|
66
|
+
|
67
|
+
for (; i < len; i++) {
|
68
|
+
this.push(classes[i]);
|
69
|
+
}
|
70
|
+
|
71
|
+
this._updateClassName = function () {
|
72
|
+
elem.setAttribute("class", this.toString());
|
73
|
+
};
|
74
|
+
},
|
75
|
+
classListProto = ClassList[protoProp] = [],
|
76
|
+
classListGetter = function classListGetter() {
|
77
|
+
return new ClassList(this);
|
78
|
+
}; // Most DOMException implementations don't allow calling DOMException's toString()
|
79
|
+
// on non-DOMExceptions. Error's toString() is sufficient here.
|
80
|
+
|
81
|
+
|
82
|
+
DOMEx[protoProp] = Error[protoProp];
|
83
|
+
|
84
|
+
classListProto.item = function (i) {
|
85
|
+
return this[i] || null;
|
86
|
+
};
|
87
|
+
|
88
|
+
classListProto.contains = function (token) {
|
89
|
+
token += "";
|
90
|
+
return checkTokenAndGetIndex(this, token) !== -1;
|
91
|
+
};
|
92
|
+
|
93
|
+
classListProto.add = function () {
|
94
|
+
var tokens = arguments,
|
95
|
+
i = 0,
|
96
|
+
l = tokens.length,
|
97
|
+
token,
|
98
|
+
updated = false;
|
99
|
+
|
100
|
+
do {
|
101
|
+
token = tokens[i] + "";
|
102
|
+
|
103
|
+
if (checkTokenAndGetIndex(this, token) === -1) {
|
104
|
+
this.push(token);
|
105
|
+
updated = true;
|
106
|
+
}
|
107
|
+
} while (++i < l);
|
108
|
+
|
109
|
+
if (updated) {
|
110
|
+
this._updateClassName();
|
111
|
+
}
|
112
|
+
};
|
113
|
+
|
114
|
+
classListProto.remove = function () {
|
115
|
+
var tokens = arguments,
|
116
|
+
i = 0,
|
117
|
+
l = tokens.length,
|
118
|
+
token,
|
119
|
+
updated = false,
|
120
|
+
index;
|
121
|
+
|
122
|
+
do {
|
123
|
+
token = tokens[i] + "";
|
124
|
+
index = checkTokenAndGetIndex(this, token);
|
125
|
+
|
126
|
+
while (index !== -1) {
|
127
|
+
this.splice(index, 1);
|
128
|
+
updated = true;
|
129
|
+
index = checkTokenAndGetIndex(this, token);
|
130
|
+
}
|
131
|
+
} while (++i < l);
|
132
|
+
|
133
|
+
if (updated) {
|
134
|
+
this._updateClassName();
|
135
|
+
}
|
136
|
+
};
|
137
|
+
|
138
|
+
classListProto.toggle = function (token, force) {
|
139
|
+
token += "";
|
140
|
+
var result = this.contains(token),
|
141
|
+
method = result ? force !== true && "remove" : force !== false && "add";
|
142
|
+
|
143
|
+
if (method) {
|
144
|
+
this[method](token);
|
145
|
+
}
|
146
|
+
|
147
|
+
if (force === true || force === false) {
|
148
|
+
return force;
|
149
|
+
} else {
|
150
|
+
return !result;
|
151
|
+
}
|
152
|
+
};
|
153
|
+
|
154
|
+
classListProto.toString = function () {
|
155
|
+
return this.join(" ");
|
156
|
+
};
|
157
|
+
|
158
|
+
if (objCtr.defineProperty) {
|
159
|
+
var classListPropDesc = {
|
160
|
+
get: classListGetter,
|
161
|
+
enumerable: true,
|
162
|
+
configurable: true
|
163
|
+
};
|
164
|
+
|
165
|
+
try {
|
166
|
+
objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
|
167
|
+
} catch (ex) {
|
168
|
+
// IE 8 doesn't support enumerable:true
|
169
|
+
// adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36
|
170
|
+
// modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected
|
171
|
+
if (ex.number === undefined || ex.number === -0x7FF5EC54) {
|
172
|
+
classListPropDesc.enumerable = false;
|
173
|
+
objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
|
174
|
+
}
|
175
|
+
}
|
176
|
+
} else if (objCtr[protoProp].__defineGetter__) {
|
177
|
+
elemCtrProto.__defineGetter__(classListProp, classListGetter);
|
178
|
+
}
|
179
|
+
})(window.self);
|
180
|
+
} // There is full or partial native classList support, so just check if we need
|
181
|
+
// to normalize the add/remove and toggle APIs.
|
182
|
+
|
183
|
+
|
184
|
+
(function () {
|
185
|
+
"use strict";
|
186
|
+
|
187
|
+
var testElement = document.createElement("_");
|
188
|
+
testElement.classList.add("c1", "c2"); // Polyfill for IE 10/11 and Firefox <26, where classList.add and
|
189
|
+
// classList.remove exist but support only one argument at a time.
|
190
|
+
|
191
|
+
if (!testElement.classList.contains("c2")) {
|
192
|
+
var createMethod = function createMethod(method) {
|
193
|
+
var original = DOMTokenList.prototype[method];
|
194
|
+
|
195
|
+
DOMTokenList.prototype[method] = function (token) {
|
196
|
+
var i,
|
197
|
+
len = arguments.length;
|
198
|
+
|
199
|
+
for (i = 0; i < len; i++) {
|
200
|
+
token = arguments[i];
|
201
|
+
original.call(this, token);
|
202
|
+
}
|
203
|
+
};
|
204
|
+
};
|
205
|
+
|
206
|
+
createMethod('add');
|
207
|
+
createMethod('remove');
|
208
|
+
}
|
209
|
+
|
210
|
+
testElement.classList.toggle("c3", false); // Polyfill for IE 10 and Firefox <24, where classList.toggle does not
|
211
|
+
// support the second argument.
|
70
212
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
strTrim = String[protoProp].trim || function () {
|
86
|
-
return this.replace(/^\s+|\s+$/g, "");
|
87
|
-
},
|
88
|
-
arrIndexOf = Array[protoProp].indexOf || function (item) {
|
89
|
-
var i = 0,
|
90
|
-
len = this.length;
|
91
|
-
for (; i < len; i++) {
|
92
|
-
if (i in this && this[i] === item) {
|
93
|
-
return i;
|
94
|
-
}
|
95
|
-
}
|
96
|
-
return -1;
|
97
|
-
}
|
98
|
-
// Vendors: please allow content code to instantiate DOMExceptions
|
99
|
-
,
|
100
|
-
DOMEx = function DOMEx(type, message) {
|
101
|
-
this.name = type;
|
102
|
-
this.code = DOMException[type];
|
103
|
-
this.message = message;
|
104
|
-
},
|
105
|
-
checkTokenAndGetIndex = function checkTokenAndGetIndex(classList, token) {
|
106
|
-
if (token === "") {
|
107
|
-
throw new DOMEx("SYNTAX_ERR", "An invalid or illegal string was specified");
|
108
|
-
}
|
109
|
-
if (/\s/.test(token)) {
|
110
|
-
throw new DOMEx("INVALID_CHARACTER_ERR", "String contains an invalid character");
|
111
|
-
}
|
112
|
-
return arrIndexOf.call(classList, token);
|
113
|
-
},
|
114
|
-
ClassList = function ClassList(elem) {
|
115
|
-
var trimmedClasses = strTrim.call(elem.getAttribute("class") || ""),
|
116
|
-
classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [],
|
117
|
-
i = 0,
|
118
|
-
len = classes.length;
|
119
|
-
for (; i < len; i++) {
|
120
|
-
this.push(classes[i]);
|
121
|
-
}
|
122
|
-
this._updateClassName = function () {
|
123
|
-
elem.setAttribute("class", this.toString());
|
124
|
-
};
|
125
|
-
},
|
126
|
-
classListProto = ClassList[protoProp] = [],
|
127
|
-
classListGetter = function classListGetter() {
|
128
|
-
return new ClassList(this);
|
129
|
-
};
|
130
|
-
// Most DOMException implementations don't allow calling DOMException's toString()
|
131
|
-
// on non-DOMExceptions. Error's toString() is sufficient here.
|
132
|
-
DOMEx[protoProp] = Error[protoProp];
|
133
|
-
classListProto.item = function (i) {
|
134
|
-
return this[i] || null;
|
135
|
-
};
|
136
|
-
classListProto.contains = function (token) {
|
137
|
-
token += "";
|
138
|
-
return checkTokenAndGetIndex(this, token) !== -1;
|
139
|
-
};
|
140
|
-
classListProto.add = function () {
|
141
|
-
var tokens = arguments,
|
142
|
-
i = 0,
|
143
|
-
l = tokens.length,
|
144
|
-
token,
|
145
|
-
updated = false;
|
146
|
-
do {
|
147
|
-
token = tokens[i] + "";
|
148
|
-
if (checkTokenAndGetIndex(this, token) === -1) {
|
149
|
-
this.push(token);
|
150
|
-
updated = true;
|
151
|
-
}
|
152
|
-
} while (++i < l);
|
153
|
-
|
154
|
-
if (updated) {
|
155
|
-
this._updateClassName();
|
156
|
-
}
|
157
|
-
};
|
158
|
-
classListProto.remove = function () {
|
159
|
-
var tokens = arguments,
|
160
|
-
i = 0,
|
161
|
-
l = tokens.length,
|
162
|
-
token,
|
163
|
-
updated = false,
|
164
|
-
index;
|
165
|
-
do {
|
166
|
-
token = tokens[i] + "";
|
167
|
-
index = checkTokenAndGetIndex(this, token);
|
168
|
-
while (index !== -1) {
|
169
|
-
this.splice(index, 1);
|
170
|
-
updated = true;
|
171
|
-
index = checkTokenAndGetIndex(this, token);
|
172
|
-
}
|
173
|
-
} while (++i < l);
|
174
|
-
|
175
|
-
if (updated) {
|
176
|
-
this._updateClassName();
|
177
|
-
}
|
178
|
-
};
|
179
|
-
classListProto.toggle = function (token, force) {
|
180
|
-
token += "";
|
181
|
-
|
182
|
-
var result = this.contains(token),
|
183
|
-
method = result ? force !== true && "remove" : force !== false && "add";
|
184
|
-
|
185
|
-
if (method) {
|
186
|
-
this[method](token);
|
187
|
-
}
|
188
|
-
|
189
|
-
if (force === true || force === false) {
|
190
|
-
return force;
|
191
|
-
} else {
|
192
|
-
return !result;
|
193
|
-
}
|
194
|
-
};
|
195
|
-
classListProto.toString = function () {
|
196
|
-
return this.join(" ");
|
197
|
-
};
|
198
|
-
|
199
|
-
if (objCtr.defineProperty) {
|
200
|
-
var classListPropDesc = {
|
201
|
-
get: classListGetter,
|
202
|
-
enumerable: true,
|
203
|
-
configurable: true
|
204
|
-
};
|
205
|
-
try {
|
206
|
-
objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
|
207
|
-
} catch (ex) {
|
208
|
-
// IE 8 doesn't support enumerable:true
|
209
|
-
// adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36
|
210
|
-
// modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected
|
211
|
-
if (ex.number === undefined || ex.number === -0x7FF5EC54) {
|
212
|
-
classListPropDesc.enumerable = false;
|
213
|
-
objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
|
214
|
-
}
|
215
|
-
}
|
216
|
-
} else if (objCtr[protoProp].__defineGetter__) {
|
217
|
-
elemCtrProto.__defineGetter__(classListProp, classListGetter);
|
218
|
-
}
|
219
|
-
})(window.self);
|
220
|
-
}
|
221
|
-
|
222
|
-
// There is full or partial native classList support, so just check if we need
|
223
|
-
// to normalize the add/remove and toggle APIs.
|
224
|
-
|
225
|
-
(function () {
|
226
|
-
"use strict";
|
227
|
-
|
228
|
-
var testElement = document.createElement("_");
|
229
|
-
|
230
|
-
testElement.classList.add("c1", "c2");
|
231
|
-
|
232
|
-
// Polyfill for IE 10/11 and Firefox <26, where classList.add and
|
233
|
-
// classList.remove exist but support only one argument at a time.
|
234
|
-
if (!testElement.classList.contains("c2")) {
|
235
|
-
var createMethod = function createMethod(method) {
|
236
|
-
var original = DOMTokenList.prototype[method];
|
237
|
-
|
238
|
-
DOMTokenList.prototype[method] = function (token) {
|
239
|
-
var i,
|
240
|
-
len = arguments.length;
|
241
|
-
|
242
|
-
for (i = 0; i < len; i++) {
|
243
|
-
token = arguments[i];
|
244
|
-
original.call(this, token);
|
245
|
-
}
|
246
|
-
};
|
247
|
-
};
|
248
|
-
createMethod('add');
|
249
|
-
createMethod('remove');
|
250
|
-
}
|
251
|
-
|
252
|
-
testElement.classList.toggle("c3", false);
|
253
|
-
|
254
|
-
// Polyfill for IE 10 and Firefox <24, where classList.toggle does not
|
255
|
-
// support the second argument.
|
256
|
-
if (testElement.classList.contains("c3")) {
|
257
|
-
var _toggle = DOMTokenList.prototype.toggle;
|
258
|
-
|
259
|
-
DOMTokenList.prototype.toggle = function (token, force) {
|
260
|
-
if (1 in arguments && !this.contains(token) === !force) {
|
261
|
-
return force;
|
262
|
-
} else {
|
263
|
-
return _toggle.call(this, token);
|
264
|
-
}
|
265
|
-
};
|
266
|
-
}
|
267
|
-
|
268
|
-
testElement = null;
|
269
|
-
})();
|
213
|
+
if (testElement.classList.contains("c3")) {
|
214
|
+
var _toggle = DOMTokenList.prototype.toggle;
|
215
|
+
|
216
|
+
DOMTokenList.prototype.toggle = function (token, force) {
|
217
|
+
if (1 in arguments && !this.contains(token) === !force) {
|
218
|
+
return force;
|
219
|
+
} else {
|
220
|
+
return _toggle.call(this, token);
|
221
|
+
}
|
222
|
+
};
|
223
|
+
}
|
224
|
+
|
225
|
+
testElement = null;
|
226
|
+
})();
|
270
227
|
}
|
271
228
|
|
272
|
-
},{}],
|
273
|
-
|
229
|
+
},{}],2:[function(require,module,exports){
|
230
|
+
"use strict";
|
274
231
|
|
275
|
-
|
232
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
276
233
|
|
277
234
|
/*!
|
278
235
|
* domready (c) Dustin Diaz 2014 - License MIT
|
279
236
|
*/
|
280
237
|
!function (name, definition) {
|
281
|
-
|
282
238
|
if (typeof module != 'undefined') module.exports = definition();else if (typeof define == 'function' && _typeof(define.amd) == 'object') define(definition);else this[name] = definition();
|
283
239
|
}('domready', function () {
|
284
|
-
|
285
240
|
var fns = [],
|
286
241
|
_listener,
|
287
242
|
doc = document,
|
@@ -292,116 +247,234 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
|
|
292
247
|
if (!loaded) doc.addEventListener(domContentLoaded, _listener = function listener() {
|
293
248
|
doc.removeEventListener(domContentLoaded, _listener);
|
294
249
|
loaded = 1;
|
250
|
+
|
295
251
|
while (_listener = fns.shift()) {
|
296
252
|
_listener();
|
297
253
|
}
|
298
254
|
});
|
299
|
-
|
300
255
|
return function (fn) {
|
301
256
|
loaded ? setTimeout(fn, 0) : fns.push(fn);
|
302
257
|
};
|
303
258
|
});
|
304
259
|
|
305
|
-
},{}],
|
306
|
-
'use strict';
|
307
|
-
|
308
|
-
// <3 Modernizr
|
260
|
+
},{}],3:[function(require,module,exports){
|
261
|
+
'use strict'; // <3 Modernizr
|
309
262
|
// https://raw.githubusercontent.com/Modernizr/Modernizr/master/feature-detects/dom/dataset.js
|
310
263
|
|
311
264
|
function useNative() {
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
return Boolean(elem.dataset && elem.dataset.aB === 'c');
|
265
|
+
var elem = document.createElement('div');
|
266
|
+
elem.setAttribute('data-a-b', 'c');
|
267
|
+
return Boolean(elem.dataset && elem.dataset.aB === 'c');
|
316
268
|
}
|
317
269
|
|
318
270
|
function nativeDataset(element) {
|
319
|
-
|
271
|
+
return element.dataset;
|
320
272
|
}
|
321
273
|
|
322
274
|
module.exports = useNative() ? nativeDataset : function (element) {
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
275
|
+
var map = {};
|
276
|
+
var attributes = element.attributes;
|
277
|
+
|
278
|
+
function getter() {
|
279
|
+
return this.value;
|
280
|
+
}
|
281
|
+
|
282
|
+
function setter(name, value) {
|
283
|
+
if (typeof value === 'undefined') {
|
284
|
+
this.removeAttribute(name);
|
285
|
+
} else {
|
286
|
+
this.setAttribute(name, value);
|
287
|
+
}
|
288
|
+
}
|
289
|
+
|
290
|
+
for (var i = 0, j = attributes.length; i < j; i++) {
|
291
|
+
var attribute = attributes[i];
|
292
|
+
|
293
|
+
if (attribute) {
|
294
|
+
var name = attribute.name;
|
295
|
+
|
296
|
+
if (name.indexOf('data-') === 0) {
|
297
|
+
var prop = name.slice(5).replace(/-./g, function (u) {
|
298
|
+
return u.charAt(1).toUpperCase();
|
299
|
+
});
|
300
|
+
var value = attribute.value;
|
301
|
+
Object.defineProperty(map, prop, {
|
302
|
+
enumerable: true,
|
303
|
+
get: getter.bind({
|
304
|
+
value: value || ''
|
305
|
+
}),
|
306
|
+
set: setter.bind(element, name)
|
307
|
+
});
|
308
|
+
}
|
309
|
+
}
|
310
|
+
}
|
311
|
+
|
312
|
+
return map;
|
361
313
|
};
|
362
314
|
|
363
|
-
},{}],
|
364
|
-
|
315
|
+
},{}],4:[function(require,module,exports){
|
316
|
+
"use strict";
|
365
317
|
|
366
318
|
// element-closest | CC0-1.0 | github.com/jonathantneal/closest
|
367
|
-
|
368
319
|
(function (ElementProto) {
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
320
|
+
if (typeof ElementProto.matches !== 'function') {
|
321
|
+
ElementProto.matches = ElementProto.msMatchesSelector || ElementProto.mozMatchesSelector || ElementProto.webkitMatchesSelector || function matches(selector) {
|
322
|
+
var element = this;
|
323
|
+
var elements = (element.document || element.ownerDocument).querySelectorAll(selector);
|
324
|
+
var index = 0;
|
325
|
+
|
326
|
+
while (elements[index] && elements[index] !== element) {
|
327
|
+
++index;
|
328
|
+
}
|
329
|
+
|
330
|
+
return Boolean(elements[index]);
|
331
|
+
};
|
332
|
+
}
|
333
|
+
|
334
|
+
if (typeof ElementProto.closest !== 'function') {
|
335
|
+
ElementProto.closest = function closest(selector) {
|
336
|
+
var element = this;
|
337
|
+
|
338
|
+
while (element && element.nodeType === 1) {
|
339
|
+
if (element.matches(selector)) {
|
340
|
+
return element;
|
341
|
+
}
|
342
|
+
|
343
|
+
element = element.parentNode;
|
344
|
+
}
|
345
|
+
|
346
|
+
return null;
|
347
|
+
};
|
348
|
+
}
|
398
349
|
})(window.Element.prototype);
|
399
350
|
|
400
|
-
},{}],
|
351
|
+
},{}],5:[function(require,module,exports){
|
352
|
+
"use strict";
|
353
|
+
|
354
|
+
/* global define, KeyboardEvent, module */
|
355
|
+
(function () {
|
356
|
+
var keyboardeventKeyPolyfill = {
|
357
|
+
polyfill: polyfill,
|
358
|
+
keys: {
|
359
|
+
3: 'Cancel',
|
360
|
+
6: 'Help',
|
361
|
+
8: 'Backspace',
|
362
|
+
9: 'Tab',
|
363
|
+
12: 'Clear',
|
364
|
+
13: 'Enter',
|
365
|
+
16: 'Shift',
|
366
|
+
17: 'Control',
|
367
|
+
18: 'Alt',
|
368
|
+
19: 'Pause',
|
369
|
+
20: 'CapsLock',
|
370
|
+
27: 'Escape',
|
371
|
+
28: 'Convert',
|
372
|
+
29: 'NonConvert',
|
373
|
+
30: 'Accept',
|
374
|
+
31: 'ModeChange',
|
375
|
+
32: ' ',
|
376
|
+
33: 'PageUp',
|
377
|
+
34: 'PageDown',
|
378
|
+
35: 'End',
|
379
|
+
36: 'Home',
|
380
|
+
37: 'ArrowLeft',
|
381
|
+
38: 'ArrowUp',
|
382
|
+
39: 'ArrowRight',
|
383
|
+
40: 'ArrowDown',
|
384
|
+
41: 'Select',
|
385
|
+
42: 'Print',
|
386
|
+
43: 'Execute',
|
387
|
+
44: 'PrintScreen',
|
388
|
+
45: 'Insert',
|
389
|
+
46: 'Delete',
|
390
|
+
48: ['0', ')'],
|
391
|
+
49: ['1', '!'],
|
392
|
+
50: ['2', '@'],
|
393
|
+
51: ['3', '#'],
|
394
|
+
52: ['4', '$'],
|
395
|
+
53: ['5', '%'],
|
396
|
+
54: ['6', '^'],
|
397
|
+
55: ['7', '&'],
|
398
|
+
56: ['8', '*'],
|
399
|
+
57: ['9', '('],
|
400
|
+
91: 'OS',
|
401
|
+
93: 'ContextMenu',
|
402
|
+
144: 'NumLock',
|
403
|
+
145: 'ScrollLock',
|
404
|
+
181: 'VolumeMute',
|
405
|
+
182: 'VolumeDown',
|
406
|
+
183: 'VolumeUp',
|
407
|
+
186: [';', ':'],
|
408
|
+
187: ['=', '+'],
|
409
|
+
188: [',', '<'],
|
410
|
+
189: ['-', '_'],
|
411
|
+
190: ['.', '>'],
|
412
|
+
191: ['/', '?'],
|
413
|
+
192: ['`', '~'],
|
414
|
+
219: ['[', '{'],
|
415
|
+
220: ['\\', '|'],
|
416
|
+
221: [']', '}'],
|
417
|
+
222: ["'", '"'],
|
418
|
+
224: 'Meta',
|
419
|
+
225: 'AltGraph',
|
420
|
+
246: 'Attn',
|
421
|
+
247: 'CrSel',
|
422
|
+
248: 'ExSel',
|
423
|
+
249: 'EraseEof',
|
424
|
+
250: 'Play',
|
425
|
+
251: 'ZoomOut'
|
426
|
+
}
|
427
|
+
}; // Function keys (F1-24).
|
428
|
+
|
429
|
+
var i;
|
430
|
+
|
431
|
+
for (i = 1; i < 25; i++) {
|
432
|
+
keyboardeventKeyPolyfill.keys[111 + i] = 'F' + i;
|
433
|
+
} // Printable ASCII characters.
|
434
|
+
|
435
|
+
|
436
|
+
var letter = '';
|
437
|
+
|
438
|
+
for (i = 65; i < 91; i++) {
|
439
|
+
letter = String.fromCharCode(i);
|
440
|
+
keyboardeventKeyPolyfill.keys[i] = [letter.toLowerCase(), letter.toUpperCase()];
|
441
|
+
}
|
442
|
+
|
443
|
+
function polyfill() {
|
444
|
+
if (!('KeyboardEvent' in window) || 'key' in KeyboardEvent.prototype) {
|
445
|
+
return false;
|
446
|
+
} // Polyfill `key` on `KeyboardEvent`.
|
447
|
+
|
448
|
+
|
449
|
+
var proto = {
|
450
|
+
get: function get(x) {
|
451
|
+
var key = keyboardeventKeyPolyfill.keys[this.which || this.keyCode];
|
452
|
+
|
453
|
+
if (Array.isArray(key)) {
|
454
|
+
key = key[+this.shiftKey];
|
455
|
+
}
|
456
|
+
|
457
|
+
return key;
|
458
|
+
}
|
459
|
+
};
|
460
|
+
Object.defineProperty(KeyboardEvent.prototype, 'key', proto);
|
461
|
+
return proto;
|
462
|
+
}
|
463
|
+
|
464
|
+
if (typeof define === 'function' && define.amd) {
|
465
|
+
define('keyboardevent-key-polyfill', keyboardeventKeyPolyfill);
|
466
|
+
} else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
|
467
|
+
module.exports = keyboardeventKeyPolyfill;
|
468
|
+
} else if (window) {
|
469
|
+
window.keyboardeventKeyPolyfill = keyboardeventKeyPolyfill;
|
470
|
+
}
|
471
|
+
})();
|
472
|
+
|
473
|
+
},{}],6:[function(require,module,exports){
|
401
474
|
(function (global){
|
402
|
-
|
475
|
+
"use strict";
|
403
476
|
|
404
|
-
|
477
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
405
478
|
|
406
479
|
/**
|
407
480
|
* lodash (Custom Build) <https://lodash.com/>
|
@@ -414,51 +487,50 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
|
|
414
487
|
|
415
488
|
/** Used as the `TypeError` message for "Functions" methods. */
|
416
489
|
var FUNC_ERROR_TEXT = 'Expected a function';
|
417
|
-
|
418
490
|
/** Used as references for various `Number` constants. */
|
419
|
-
var NAN = 0 / 0;
|
420
491
|
|
492
|
+
var NAN = 0 / 0;
|
421
493
|
/** `Object#toString` result references. */
|
422
|
-
var symbolTag = '[object Symbol]';
|
423
494
|
|
495
|
+
var symbolTag = '[object Symbol]';
|
424
496
|
/** Used to match leading and trailing whitespace. */
|
425
|
-
var reTrim = /^\s+|\s+$/g;
|
426
497
|
|
498
|
+
var reTrim = /^\s+|\s+$/g;
|
427
499
|
/** Used to detect bad signed hexadecimal string values. */
|
428
|
-
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
|
429
500
|
|
501
|
+
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
|
430
502
|
/** Used to detect binary string values. */
|
431
|
-
var reIsBinary = /^0b[01]+$/i;
|
432
503
|
|
504
|
+
var reIsBinary = /^0b[01]+$/i;
|
433
505
|
/** Used to detect octal string values. */
|
434
|
-
var reIsOctal = /^0o[0-7]+$/i;
|
435
506
|
|
507
|
+
var reIsOctal = /^0o[0-7]+$/i;
|
436
508
|
/** Built-in method references without a dependency on `root`. */
|
437
|
-
var freeParseInt = parseInt;
|
438
509
|
|
510
|
+
var freeParseInt = parseInt;
|
439
511
|
/** Detect free variable `global` from Node.js. */
|
440
|
-
var freeGlobal = (typeof global === 'undefined' ? 'undefined' : _typeof(global)) == 'object' && global && global.Object === Object && global;
|
441
512
|
|
513
|
+
var freeGlobal = (typeof global === "undefined" ? "undefined" : _typeof(global)) == 'object' && global && global.Object === Object && global;
|
442
514
|
/** Detect free variable `self`. */
|
443
|
-
var freeSelf = (typeof self === 'undefined' ? 'undefined' : _typeof(self)) == 'object' && self && self.Object === Object && self;
|
444
515
|
|
516
|
+
var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' && self && self.Object === Object && self;
|
445
517
|
/** Used as a reference to the global object. */
|
446
|
-
var root = freeGlobal || freeSelf || Function('return this')();
|
447
518
|
|
519
|
+
var root = freeGlobal || freeSelf || Function('return this')();
|
448
520
|
/** Used for built-in method references. */
|
449
|
-
var objectProto = Object.prototype;
|
450
521
|
|
522
|
+
var objectProto = Object.prototype;
|
451
523
|
/**
|
452
524
|
* Used to resolve the
|
453
525
|
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
454
526
|
* of values.
|
455
527
|
*/
|
456
|
-
var objectToString = objectProto.toString;
|
457
528
|
|
529
|
+
var objectToString = objectProto.toString;
|
458
530
|
/* Built-in method references for those with the same name as other `lodash` methods. */
|
531
|
+
|
459
532
|
var nativeMax = Math.max,
|
460
533
|
nativeMin = Math.min;
|
461
|
-
|
462
534
|
/**
|
463
535
|
* Gets the timestamp of the number of milliseconds that have elapsed since
|
464
536
|
* the Unix epoch (1 January 1970 00:00:00 UTC).
|
@@ -475,10 +547,10 @@ var nativeMax = Math.max,
|
|
475
547
|
* }, _.now());
|
476
548
|
* // => Logs the number of milliseconds it took for the deferred invocation.
|
477
549
|
*/
|
550
|
+
|
478
551
|
var now = function now() {
|
479
552
|
return root.Date.now();
|
480
553
|
};
|
481
|
-
|
482
554
|
/**
|
483
555
|
* Creates a debounced function that delays invoking `func` until after `wait`
|
484
556
|
* milliseconds have elapsed since the last time the debounced function was
|
@@ -533,6 +605,8 @@ var now = function now() {
|
|
533
605
|
* // Cancel the trailing debounced invocation.
|
534
606
|
* jQuery(window).on('popstate', debounced.cancel);
|
535
607
|
*/
|
608
|
+
|
609
|
+
|
536
610
|
function debounce(func, wait, options) {
|
537
611
|
var lastArgs,
|
538
612
|
lastThis,
|
@@ -548,7 +622,9 @@ function debounce(func, wait, options) {
|
|
548
622
|
if (typeof func != 'function') {
|
549
623
|
throw new TypeError(FUNC_ERROR_TEXT);
|
550
624
|
}
|
625
|
+
|
551
626
|
wait = toNumber(wait) || 0;
|
627
|
+
|
552
628
|
if (isObject(options)) {
|
553
629
|
leading = !!options.leading;
|
554
630
|
maxing = 'maxWait' in options;
|
@@ -559,7 +635,6 @@ function debounce(func, wait, options) {
|
|
559
635
|
function invokeFunc(time) {
|
560
636
|
var args = lastArgs,
|
561
637
|
thisArg = lastThis;
|
562
|
-
|
563
638
|
lastArgs = lastThis = undefined;
|
564
639
|
lastInvokeTime = time;
|
565
640
|
result = func.apply(thisArg, args);
|
@@ -568,10 +643,10 @@ function debounce(func, wait, options) {
|
|
568
643
|
|
569
644
|
function leadingEdge(time) {
|
570
645
|
// Reset any `maxWait` timer.
|
571
|
-
lastInvokeTime = time;
|
572
|
-
|
573
|
-
timerId = setTimeout(timerExpired, wait);
|
574
|
-
|
646
|
+
lastInvokeTime = time; // Start the timer for the trailing edge.
|
647
|
+
|
648
|
+
timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.
|
649
|
+
|
575
650
|
return leading ? invokeFunc(time) : result;
|
576
651
|
}
|
577
652
|
|
@@ -579,37 +654,37 @@ function debounce(func, wait, options) {
|
|
579
654
|
var timeSinceLastCall = time - lastCallTime,
|
580
655
|
timeSinceLastInvoke = time - lastInvokeTime,
|
581
656
|
result = wait - timeSinceLastCall;
|
582
|
-
|
583
657
|
return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;
|
584
658
|
}
|
585
659
|
|
586
660
|
function shouldInvoke(time) {
|
587
661
|
var timeSinceLastCall = time - lastCallTime,
|
588
|
-
timeSinceLastInvoke = time - lastInvokeTime;
|
589
|
-
|
590
|
-
// Either this is the first call, activity has stopped and we're at the
|
662
|
+
timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the
|
591
663
|
// trailing edge, the system time has gone backwards and we're treating
|
592
664
|
// it as the trailing edge, or we've hit the `maxWait` limit.
|
665
|
+
|
593
666
|
return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
|
594
667
|
}
|
595
668
|
|
596
669
|
function timerExpired() {
|
597
670
|
var time = now();
|
671
|
+
|
598
672
|
if (shouldInvoke(time)) {
|
599
673
|
return trailingEdge(time);
|
600
|
-
}
|
601
|
-
|
674
|
+
} // Restart the timer.
|
675
|
+
|
676
|
+
|
602
677
|
timerId = setTimeout(timerExpired, remainingWait(time));
|
603
678
|
}
|
604
679
|
|
605
680
|
function trailingEdge(time) {
|
606
|
-
timerId = undefined;
|
607
|
-
|
608
|
-
// Only invoke if we have `lastArgs` which means `func` has been
|
681
|
+
timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been
|
609
682
|
// debounced at least once.
|
683
|
+
|
610
684
|
if (trailing && lastArgs) {
|
611
685
|
return invokeFunc(time);
|
612
686
|
}
|
687
|
+
|
613
688
|
lastArgs = lastThis = undefined;
|
614
689
|
return result;
|
615
690
|
}
|
@@ -618,6 +693,7 @@ function debounce(func, wait, options) {
|
|
618
693
|
if (timerId !== undefined) {
|
619
694
|
clearTimeout(timerId);
|
620
695
|
}
|
696
|
+
|
621
697
|
lastInvokeTime = 0;
|
622
698
|
lastArgs = lastCallTime = lastThis = timerId = undefined;
|
623
699
|
}
|
@@ -629,7 +705,6 @@ function debounce(func, wait, options) {
|
|
629
705
|
function debounced() {
|
630
706
|
var time = now(),
|
631
707
|
isInvoking = shouldInvoke(time);
|
632
|
-
|
633
708
|
lastArgs = arguments;
|
634
709
|
lastThis = this;
|
635
710
|
lastCallTime = time;
|
@@ -638,22 +713,25 @@ function debounce(func, wait, options) {
|
|
638
713
|
if (timerId === undefined) {
|
639
714
|
return leadingEdge(lastCallTime);
|
640
715
|
}
|
716
|
+
|
641
717
|
if (maxing) {
|
642
718
|
// Handle invocations in a tight loop.
|
643
719
|
timerId = setTimeout(timerExpired, wait);
|
644
720
|
return invokeFunc(lastCallTime);
|
645
721
|
}
|
646
722
|
}
|
723
|
+
|
647
724
|
if (timerId === undefined) {
|
648
725
|
timerId = setTimeout(timerExpired, wait);
|
649
726
|
}
|
727
|
+
|
650
728
|
return result;
|
651
729
|
}
|
730
|
+
|
652
731
|
debounced.cancel = cancel;
|
653
732
|
debounced.flush = flush;
|
654
733
|
return debounced;
|
655
734
|
}
|
656
|
-
|
657
735
|
/**
|
658
736
|
* Checks if `value` is the
|
659
737
|
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
|
@@ -679,11 +757,13 @@ function debounce(func, wait, options) {
|
|
679
757
|
* _.isObject(null);
|
680
758
|
* // => false
|
681
759
|
*/
|
760
|
+
|
761
|
+
|
682
762
|
function isObject(value) {
|
683
|
-
var type =
|
763
|
+
var type = _typeof(value);
|
764
|
+
|
684
765
|
return !!value && (type == 'object' || type == 'function');
|
685
766
|
}
|
686
|
-
|
687
767
|
/**
|
688
768
|
* Checks if `value` is object-like. A value is object-like if it's not `null`
|
689
769
|
* and has a `typeof` result of "object".
|
@@ -708,10 +788,11 @@ function isObject(value) {
|
|
708
788
|
* _.isObjectLike(null);
|
709
789
|
* // => false
|
710
790
|
*/
|
791
|
+
|
792
|
+
|
711
793
|
function isObjectLike(value) {
|
712
|
-
return !!value &&
|
794
|
+
return !!value && _typeof(value) == 'object';
|
713
795
|
}
|
714
|
-
|
715
796
|
/**
|
716
797
|
* Checks if `value` is classified as a `Symbol` primitive or object.
|
717
798
|
*
|
@@ -729,10 +810,11 @@ function isObjectLike(value) {
|
|
729
810
|
* _.isSymbol('abc');
|
730
811
|
* // => false
|
731
812
|
*/
|
813
|
+
|
814
|
+
|
732
815
|
function isSymbol(value) {
|
733
|
-
return
|
816
|
+
return _typeof(value) == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag;
|
734
817
|
}
|
735
|
-
|
736
818
|
/**
|
737
819
|
* Converts `value` to a number.
|
738
820
|
*
|
@@ -756,20 +838,26 @@ function isSymbol(value) {
|
|
756
838
|
* _.toNumber('3.2');
|
757
839
|
* // => 3.2
|
758
840
|
*/
|
841
|
+
|
842
|
+
|
759
843
|
function toNumber(value) {
|
760
844
|
if (typeof value == 'number') {
|
761
845
|
return value;
|
762
846
|
}
|
847
|
+
|
763
848
|
if (isSymbol(value)) {
|
764
849
|
return NAN;
|
765
850
|
}
|
851
|
+
|
766
852
|
if (isObject(value)) {
|
767
853
|
var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
|
768
854
|
value = isObject(other) ? other + '' : other;
|
769
855
|
}
|
856
|
+
|
770
857
|
if (typeof value != 'string') {
|
771
858
|
return value === 0 ? value : +value;
|
772
859
|
}
|
860
|
+
|
773
861
|
value = value.replace(reTrim, '');
|
774
862
|
var isBinary = reIsBinary.test(value);
|
775
863
|
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
|
@@ -779,13 +867,12 @@ module.exports = debounce;
|
|
779
867
|
|
780
868
|
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
781
869
|
|
782
|
-
},{}],
|
870
|
+
},{}],7:[function(require,module,exports){
|
783
871
|
/*
|
784
872
|
object-assign
|
785
873
|
(c) Sindre Sorhus
|
786
874
|
@license MIT
|
787
875
|
*/
|
788
|
-
|
789
876
|
'use strict';
|
790
877
|
/* eslint-disable no-unused-vars */
|
791
878
|
|
@@ -794,90 +881,98 @@ var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
794
881
|
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
|
795
882
|
|
796
883
|
function toObject(val) {
|
797
|
-
|
798
|
-
|
799
|
-
|
884
|
+
if (val === null || val === undefined) {
|
885
|
+
throw new TypeError('Object.assign cannot be called with null or undefined');
|
886
|
+
}
|
800
887
|
|
801
|
-
|
888
|
+
return Object(val);
|
802
889
|
}
|
803
890
|
|
804
891
|
function shouldUseNative() {
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
892
|
+
try {
|
893
|
+
if (!Object.assign) {
|
894
|
+
return false;
|
895
|
+
} // Detect buggy property enumeration order in older V8 versions.
|
896
|
+
// https://bugs.chromium.org/p/v8/issues/detail?id=4118
|
897
|
+
|
898
|
+
|
899
|
+
var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
|
900
|
+
|
901
|
+
test1[5] = 'de';
|
902
|
+
|
903
|
+
if (Object.getOwnPropertyNames(test1)[0] === '5') {
|
904
|
+
return false;
|
905
|
+
} // https://bugs.chromium.org/p/v8/issues/detail?id=3056
|
906
|
+
|
907
|
+
|
908
|
+
var test2 = {};
|
909
|
+
|
910
|
+
for (var i = 0; i < 10; i++) {
|
911
|
+
test2['_' + String.fromCharCode(i)] = i;
|
912
|
+
}
|
913
|
+
|
914
|
+
var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
|
915
|
+
return test2[n];
|
916
|
+
});
|
917
|
+
|
918
|
+
if (order2.join('') !== '0123456789') {
|
919
|
+
return false;
|
920
|
+
} // https://bugs.chromium.org/p/v8/issues/detail?id=3056
|
921
|
+
|
922
|
+
|
923
|
+
var test3 = {};
|
924
|
+
'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
|
925
|
+
test3[letter] = letter;
|
926
|
+
});
|
927
|
+
|
928
|
+
if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {
|
929
|
+
return false;
|
930
|
+
}
|
931
|
+
|
932
|
+
return true;
|
933
|
+
} catch (err) {
|
934
|
+
// We don't expect any of the above to throw, but better to be safe.
|
935
|
+
return false;
|
936
|
+
}
|
845
937
|
}
|
846
938
|
|
847
939
|
module.exports = shouldUseNative() ? Object.assign : function (target, source) {
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
|
871
|
-
|
940
|
+
var from;
|
941
|
+
var to = toObject(target);
|
942
|
+
var symbols;
|
943
|
+
|
944
|
+
for (var s = 1; s < arguments.length; s++) {
|
945
|
+
from = Object(arguments[s]);
|
946
|
+
|
947
|
+
for (var key in from) {
|
948
|
+
if (hasOwnProperty.call(from, key)) {
|
949
|
+
to[key] = from[key];
|
950
|
+
}
|
951
|
+
}
|
952
|
+
|
953
|
+
if (getOwnPropertySymbols) {
|
954
|
+
symbols = getOwnPropertySymbols(from);
|
955
|
+
|
956
|
+
for (var i = 0; i < symbols.length; i++) {
|
957
|
+
if (propIsEnumerable.call(from, symbols[i])) {
|
958
|
+
to[symbols[i]] = from[symbols[i]];
|
959
|
+
}
|
960
|
+
}
|
961
|
+
}
|
962
|
+
}
|
963
|
+
|
964
|
+
return to;
|
872
965
|
};
|
873
966
|
|
874
|
-
},{}],
|
875
|
-
|
967
|
+
},{}],8:[function(require,module,exports){
|
968
|
+
"use strict";
|
876
969
|
|
877
|
-
|
970
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
878
971
|
|
879
972
|
var assign = require('object-assign');
|
973
|
+
|
880
974
|
var delegate = require('../delegate');
|
975
|
+
|
881
976
|
var delegateAll = require('../delegateAll');
|
882
977
|
|
883
978
|
var DELEGATE_PATTERN = /^(.+):delegate\((.+)\)$/;
|
@@ -886,13 +981,15 @@ var SPACE = ' ';
|
|
886
981
|
var getListeners = function getListeners(type, handler) {
|
887
982
|
var match = type.match(DELEGATE_PATTERN);
|
888
983
|
var selector;
|
984
|
+
|
889
985
|
if (match) {
|
890
986
|
type = match[1];
|
891
987
|
selector = match[2];
|
892
988
|
}
|
893
989
|
|
894
990
|
var options;
|
895
|
-
|
991
|
+
|
992
|
+
if (_typeof(handler) === 'object') {
|
896
993
|
options = {
|
897
994
|
capture: popKey(handler, 'capture'),
|
898
995
|
passive: popKey(handler, 'passive')
|
@@ -901,13 +998,15 @@ var getListeners = function getListeners(type, handler) {
|
|
901
998
|
|
902
999
|
var listener = {
|
903
1000
|
selector: selector,
|
904
|
-
delegate:
|
1001
|
+
delegate: _typeof(handler) === 'object' ? delegateAll(handler) : selector ? delegate(selector, handler) : handler,
|
905
1002
|
options: options
|
906
1003
|
};
|
907
1004
|
|
908
1005
|
if (type.indexOf(SPACE) > -1) {
|
909
1006
|
return type.split(SPACE).map(function (_type) {
|
910
|
-
return assign({
|
1007
|
+
return assign({
|
1008
|
+
type: _type
|
1009
|
+
}, listener);
|
911
1010
|
});
|
912
1011
|
} else {
|
913
1012
|
listener.type = type;
|
@@ -926,7 +1025,6 @@ module.exports = function behavior(events, props) {
|
|
926
1025
|
var listeners = getListeners(type, events[type]);
|
927
1026
|
return memo.concat(listeners);
|
928
1027
|
}, []);
|
929
|
-
|
930
1028
|
return assign({
|
931
1029
|
add: function addBehavior(element) {
|
932
1030
|
listeners.forEach(function (listener) {
|
@@ -941,7 +1039,7 @@ module.exports = function behavior(events, props) {
|
|
941
1039
|
}, props);
|
942
1040
|
};
|
943
1041
|
|
944
|
-
},{"../delegate":
|
1042
|
+
},{"../delegate":10,"../delegateAll":11,"object-assign":7}],9:[function(require,module,exports){
|
945
1043
|
"use strict";
|
946
1044
|
|
947
1045
|
module.exports = function compose(functions) {
|
@@ -952,8 +1050,8 @@ module.exports = function compose(functions) {
|
|
952
1050
|
};
|
953
1051
|
};
|
954
1052
|
|
955
|
-
},{}],
|
956
|
-
|
1053
|
+
},{}],10:[function(require,module,exports){
|
1054
|
+
"use strict";
|
957
1055
|
|
958
1056
|
// polyfill Element.prototype.closest
|
959
1057
|
require('element-closest');
|
@@ -961,26 +1059,27 @@ require('element-closest');
|
|
961
1059
|
module.exports = function delegate(selector, fn) {
|
962
1060
|
return function delegation(event) {
|
963
1061
|
var target = event.target.closest(selector);
|
1062
|
+
|
964
1063
|
if (target) {
|
965
1064
|
return fn.call(target, event);
|
966
1065
|
}
|
967
1066
|
};
|
968
1067
|
};
|
969
1068
|
|
970
|
-
},{"element-closest":
|
971
|
-
|
1069
|
+
},{"element-closest":4}],11:[function(require,module,exports){
|
1070
|
+
"use strict";
|
972
1071
|
|
973
1072
|
var delegate = require('../delegate');
|
1073
|
+
|
974
1074
|
var compose = require('../compose');
|
975
1075
|
|
976
1076
|
var SPLAT = '*';
|
977
1077
|
|
978
1078
|
module.exports = function delegateAll(selectors) {
|
979
|
-
var keys = Object.keys(selectors);
|
980
|
-
|
981
|
-
// XXX optimization: if there is only one handler and it applies to
|
1079
|
+
var keys = Object.keys(selectors); // XXX optimization: if there is only one handler and it applies to
|
982
1080
|
// all elements (the "*" CSS selector), then just return that
|
983
1081
|
// handler
|
1082
|
+
|
984
1083
|
if (keys.length === 1 && keys[0] === SPLAT) {
|
985
1084
|
return selectors[SPLAT];
|
986
1085
|
}
|
@@ -992,7 +1091,7 @@ module.exports = function delegateAll(selectors) {
|
|
992
1091
|
return compose(delegates);
|
993
1092
|
};
|
994
1093
|
|
995
|
-
},{"../compose":
|
1094
|
+
},{"../compose":9,"../delegate":10}],12:[function(require,module,exports){
|
996
1095
|
"use strict";
|
997
1096
|
|
998
1097
|
module.exports = function ignore(element, fn) {
|
@@ -1003,7 +1102,66 @@ module.exports = function ignore(element, fn) {
|
|
1003
1102
|
};
|
1004
1103
|
};
|
1005
1104
|
|
1006
|
-
},{}],
|
1105
|
+
},{}],13:[function(require,module,exports){
|
1106
|
+
"use strict";
|
1107
|
+
|
1108
|
+
module.exports = {
|
1109
|
+
behavior: require('./behavior'),
|
1110
|
+
delegate: require('./delegate'),
|
1111
|
+
delegateAll: require('./delegateAll'),
|
1112
|
+
ignore: require('./ignore'),
|
1113
|
+
keymap: require('./keymap')
|
1114
|
+
};
|
1115
|
+
|
1116
|
+
},{"./behavior":8,"./delegate":10,"./delegateAll":11,"./ignore":12,"./keymap":14}],14:[function(require,module,exports){
|
1117
|
+
"use strict";
|
1118
|
+
|
1119
|
+
require('keyboardevent-key-polyfill'); // these are the only relevant modifiers supported on all platforms,
|
1120
|
+
// according to MDN:
|
1121
|
+
// <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/getModifierState>
|
1122
|
+
|
1123
|
+
|
1124
|
+
var MODIFIERS = {
|
1125
|
+
'Alt': 'altKey',
|
1126
|
+
'Control': 'ctrlKey',
|
1127
|
+
'Ctrl': 'ctrlKey',
|
1128
|
+
'Shift': 'shiftKey'
|
1129
|
+
};
|
1130
|
+
var MODIFIER_SEPARATOR = '+';
|
1131
|
+
|
1132
|
+
var getEventKey = function getEventKey(event, hasModifiers) {
|
1133
|
+
var key = event.key;
|
1134
|
+
|
1135
|
+
if (hasModifiers) {
|
1136
|
+
for (var modifier in MODIFIERS) {
|
1137
|
+
if (event[MODIFIERS[modifier]] === true) {
|
1138
|
+
key = [modifier, key].join(MODIFIER_SEPARATOR);
|
1139
|
+
}
|
1140
|
+
}
|
1141
|
+
}
|
1142
|
+
|
1143
|
+
return key;
|
1144
|
+
};
|
1145
|
+
|
1146
|
+
module.exports = function keymap(keys) {
|
1147
|
+
var hasModifiers = Object.keys(keys).some(function (key) {
|
1148
|
+
return key.indexOf(MODIFIER_SEPARATOR) > -1;
|
1149
|
+
});
|
1150
|
+
return function (event) {
|
1151
|
+
var key = getEventKey(event, hasModifiers);
|
1152
|
+
return [key, key.toLowerCase()].reduce(function (result, _key) {
|
1153
|
+
if (_key in keys) {
|
1154
|
+
result = keys[key].call(this, event);
|
1155
|
+
}
|
1156
|
+
|
1157
|
+
return result;
|
1158
|
+
}, undefined);
|
1159
|
+
};
|
1160
|
+
};
|
1161
|
+
|
1162
|
+
module.exports.MODIFIERS = MODIFIERS;
|
1163
|
+
|
1164
|
+
},{"keyboardevent-key-polyfill":5}],15:[function(require,module,exports){
|
1007
1165
|
"use strict";
|
1008
1166
|
|
1009
1167
|
module.exports = function once(listener, options) {
|
@@ -1011,17 +1169,17 @@ module.exports = function once(listener, options) {
|
|
1011
1169
|
e.currentTarget.removeEventListener(e.type, wrapped, options);
|
1012
1170
|
return listener.call(this, e);
|
1013
1171
|
};
|
1172
|
+
|
1014
1173
|
return wrapped;
|
1015
1174
|
};
|
1016
1175
|
|
1017
|
-
},{}],
|
1176
|
+
},{}],16:[function(require,module,exports){
|
1018
1177
|
'use strict';
|
1019
1178
|
|
1020
|
-
|
1179
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
1021
1180
|
|
1022
1181
|
var RE_TRIM = /(^\s+)|(\s+$)/g;
|
1023
1182
|
var RE_SPLIT = /\s+/;
|
1024
|
-
|
1025
1183
|
var trim = String.prototype.trim ? function (str) {
|
1026
1184
|
return str.trim();
|
1027
1185
|
} : function (str) {
|
@@ -1034,7 +1192,7 @@ var queryById = function queryById(id) {
|
|
1034
1192
|
|
1035
1193
|
module.exports = function resolveIds(ids, doc) {
|
1036
1194
|
if (typeof ids !== 'string') {
|
1037
|
-
throw new Error('Expected a string but got ' +
|
1195
|
+
throw new Error('Expected a string but got ' + _typeof(ids));
|
1038
1196
|
}
|
1039
1197
|
|
1040
1198
|
if (!doc) {
|
@@ -1042,106 +1200,116 @@ module.exports = function resolveIds(ids, doc) {
|
|
1042
1200
|
}
|
1043
1201
|
|
1044
1202
|
var getElementById = doc.getElementById ? doc.getElementById.bind(doc) : queryById.bind(doc);
|
1045
|
-
|
1046
|
-
ids = trim(ids).split(RE_SPLIT);
|
1047
|
-
|
1048
|
-
// XXX we can short-circuit here because trimming and splitting a
|
1203
|
+
ids = trim(ids).split(RE_SPLIT); // XXX we can short-circuit here because trimming and splitting a
|
1049
1204
|
// string of just whitespace produces an array containing a single,
|
1050
1205
|
// empty string
|
1206
|
+
|
1051
1207
|
if (ids.length === 1 && ids[0] === '') {
|
1052
1208
|
return [];
|
1053
1209
|
}
|
1054
1210
|
|
1055
1211
|
return ids.map(function (id) {
|
1056
1212
|
var el = getElementById(id);
|
1213
|
+
|
1057
1214
|
if (!el) {
|
1058
1215
|
throw new Error('no element with id: "' + id + '"');
|
1059
1216
|
}
|
1217
|
+
|
1060
1218
|
return el;
|
1061
1219
|
});
|
1062
1220
|
};
|
1063
1221
|
|
1064
|
-
},{}],
|
1065
|
-
|
1222
|
+
},{}],17:[function(require,module,exports){
|
1223
|
+
"use strict";
|
1066
1224
|
|
1067
1225
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
1068
1226
|
|
1069
|
-
var
|
1070
|
-
|
1071
|
-
var
|
1072
|
-
|
1073
|
-
var
|
1227
|
+
var select = require("../utils/select");
|
1228
|
+
|
1229
|
+
var behavior = require("../utils/behavior");
|
1230
|
+
|
1231
|
+
var toggle = require("../utils/toggle");
|
1232
|
+
|
1233
|
+
var isElementInViewport = require("../utils/is-in-viewport");
|
1074
1234
|
|
1075
|
-
var
|
1076
|
-
|
1235
|
+
var _require = require("../events"),
|
1236
|
+
CLICK = _require.CLICK;
|
1077
1237
|
|
1078
|
-
|
1079
|
-
|
1080
|
-
var BUTTON = '.' + PREFIX + '-accordion-button[aria-controls]';
|
1081
|
-
var EXPANDED = 'aria-expanded';
|
1082
|
-
var MULTISELECTABLE = 'aria-multiselectable';
|
1238
|
+
var _require2 = require("../config"),
|
1239
|
+
PREFIX = _require2.prefix;
|
1083
1240
|
|
1241
|
+
var ACCORDION = ".".concat(PREFIX, "-accordion, .").concat(PREFIX, "-accordion--bordered");
|
1242
|
+
var BUTTON = ".".concat(PREFIX, "-accordion__button[aria-controls]");
|
1243
|
+
var EXPANDED = "aria-expanded";
|
1244
|
+
var MULTISELECTABLE = "aria-multiselectable";
|
1084
1245
|
/**
|
1085
|
-
*
|
1086
|
-
*
|
1087
|
-
*
|
1088
|
-
* @
|
1246
|
+
* Get an Array of button elements belonging directly to the given
|
1247
|
+
* accordion element.
|
1248
|
+
* @param {HTMLElement} accordion
|
1249
|
+
* @return {array<HTMLButtonElement>}
|
1250
|
+
*/
|
1251
|
+
|
1252
|
+
var getAccordionButtons = function getAccordionButtons(accordion) {
|
1253
|
+
var buttons = select(BUTTON, accordion);
|
1254
|
+
return buttons.filter(function (button) {
|
1255
|
+
return button.closest(ACCORDION) === accordion;
|
1256
|
+
});
|
1257
|
+
};
|
1258
|
+
/**
|
1259
|
+
* Toggle a button's "pressed" state, optionally providing a target
|
1260
|
+
* state.
|
1261
|
+
*
|
1262
|
+
* @param {HTMLButtonElement} button
|
1089
1263
|
* @param {boolean?} expanded If no state is provided, the current
|
1090
1264
|
* state will be toggled (from false to true, and vice-versa).
|
1091
1265
|
* @return {boolean} the resulting state
|
1092
1266
|
*/
|
1267
|
+
|
1268
|
+
|
1093
1269
|
var toggleButton = function toggleButton(button, expanded) {
|
1094
1270
|
var accordion = button.closest(ACCORDION);
|
1271
|
+
var safeExpanded = expanded;
|
1272
|
+
|
1095
1273
|
if (!accordion) {
|
1096
|
-
throw new Error(BUTTON
|
1274
|
+
throw new Error("".concat(BUTTON, " is missing outer ").concat(ACCORDION));
|
1097
1275
|
}
|
1098
1276
|
|
1099
|
-
|
1100
|
-
|
1101
|
-
var multiselectable = accordion.getAttribute(MULTISELECTABLE) ===
|
1277
|
+
safeExpanded = toggle(button, expanded); // XXX multiselectable is opt-in, to preserve legacy behavior
|
1278
|
+
|
1279
|
+
var multiselectable = accordion.getAttribute(MULTISELECTABLE) === "true";
|
1102
1280
|
|
1103
|
-
if (
|
1104
|
-
|
1281
|
+
if (safeExpanded && !multiselectable) {
|
1282
|
+
getAccordionButtons(accordion).forEach(function (other) {
|
1105
1283
|
if (other !== button) {
|
1106
1284
|
toggle(other, false);
|
1107
1285
|
}
|
1108
1286
|
});
|
1109
1287
|
}
|
1110
1288
|
};
|
1111
|
-
|
1112
1289
|
/**
|
1113
1290
|
* @param {HTMLButtonElement} button
|
1114
1291
|
* @return {boolean} true
|
1115
1292
|
*/
|
1293
|
+
|
1294
|
+
|
1116
1295
|
var showButton = function showButton(button) {
|
1117
1296
|
return toggleButton(button, true);
|
1118
1297
|
};
|
1119
|
-
|
1120
1298
|
/**
|
1121
1299
|
* @param {HTMLButtonElement} button
|
1122
1300
|
* @return {boolean} false
|
1123
1301
|
*/
|
1302
|
+
|
1303
|
+
|
1124
1304
|
var hideButton = function hideButton(button) {
|
1125
1305
|
return toggleButton(button, false);
|
1126
1306
|
};
|
1127
1307
|
|
1128
|
-
/**
|
1129
|
-
* Get an Array of button elements belonging directly to the given
|
1130
|
-
* accordion element.
|
1131
|
-
* @param {HTMLElement} accordion
|
1132
|
-
* @return {array<HTMLButtonElement>}
|
1133
|
-
*/
|
1134
|
-
var getAccordionButtons = function getAccordionButtons(accordion) {
|
1135
|
-
return filter(accordion.querySelectorAll(BUTTON), function (button) {
|
1136
|
-
return button.closest(ACCORDION) === accordion;
|
1137
|
-
});
|
1138
|
-
};
|
1139
|
-
|
1140
1308
|
var accordion = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, function (event) {
|
1141
1309
|
event.preventDefault();
|
1142
1310
|
toggleButton(this);
|
1143
1311
|
|
1144
|
-
if (this.getAttribute(EXPANDED) ===
|
1312
|
+
if (this.getAttribute(EXPANDED) === "true") {
|
1145
1313
|
// We were just expanded, but if another accordion was also just
|
1146
1314
|
// collapsed, we may no longer be in the viewport. This ensures
|
1147
1315
|
// that we are still visible, so the user isn't confused.
|
@@ -1149,8 +1317,8 @@ var accordion = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON,
|
|
1149
1317
|
}
|
1150
1318
|
})), {
|
1151
1319
|
init: function init(root) {
|
1152
|
-
|
1153
|
-
var expanded = button.getAttribute(EXPANDED) ===
|
1320
|
+
select(BUTTON, root).forEach(function (button) {
|
1321
|
+
var expanded = button.getAttribute(EXPANDED) === "true";
|
1154
1322
|
toggleButton(button, expanded);
|
1155
1323
|
});
|
1156
1324
|
},
|
@@ -1161,176 +1329,737 @@ var accordion = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON,
|
|
1161
1329
|
toggle: toggleButton,
|
1162
1330
|
getButtons: getAccordionButtons
|
1163
1331
|
});
|
1332
|
+
module.exports = accordion;
|
1333
|
+
|
1334
|
+
},{"../config":28,"../events":29,"../utils/behavior":34,"../utils/is-in-viewport":36,"../utils/select":37,"../utils/toggle":40}],18:[function(require,module,exports){
|
1335
|
+
"use strict";
|
1336
|
+
|
1337
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
1338
|
+
|
1339
|
+
var behavior = require("../utils/behavior");
|
1340
|
+
|
1341
|
+
var _require = require("../events"),
|
1342
|
+
CLICK = _require.CLICK;
|
1343
|
+
|
1344
|
+
var _require2 = require("../config"),
|
1345
|
+
PREFIX = _require2.prefix;
|
1346
|
+
|
1347
|
+
var HEADER = ".".concat(PREFIX, "-banner__header");
|
1348
|
+
var EXPANDED_CLASS = "".concat(PREFIX, "-banner__header--expanded");
|
1349
|
+
|
1350
|
+
var toggleBanner = function toggleEl(event) {
|
1351
|
+
event.preventDefault();
|
1352
|
+
this.closest(HEADER).classList.toggle(EXPANDED_CLASS);
|
1353
|
+
};
|
1354
|
+
|
1355
|
+
module.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, "".concat(HEADER, " [aria-controls]"), toggleBanner)));
|
1356
|
+
|
1357
|
+
},{"../config":28,"../events":29,"../utils/behavior":34}],19:[function(require,module,exports){
|
1358
|
+
"use strict";
|
1359
|
+
|
1360
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
1361
|
+
|
1362
|
+
var select = require("../utils/select");
|
1363
|
+
|
1364
|
+
var behavior = require("../utils/behavior");
|
1365
|
+
|
1366
|
+
var _require = require("../config"),
|
1367
|
+
PREFIX = _require.prefix;
|
1368
|
+
|
1369
|
+
var CHARACTER_COUNT = ".".concat(PREFIX, "-character-count");
|
1370
|
+
var INPUT = ".".concat(PREFIX, "-character-count__field");
|
1371
|
+
var MESSAGE = ".".concat(PREFIX, "-character-count__message");
|
1372
|
+
var VALIDATION_MESSAGE = "The content is too long.";
|
1373
|
+
var MESSAGE_INVALID_CLASS = "".concat(PREFIX, "-character-count__message--invalid");
|
1374
|
+
/**
|
1375
|
+
* The elements within the character count.
|
1376
|
+
* @typedef {Object} CharacterCountElements
|
1377
|
+
* @property {HTMLDivElement} characterCountEl
|
1378
|
+
* @property {HTMLSpanElement} messageEl
|
1379
|
+
*/
|
1164
1380
|
|
1165
1381
|
/**
|
1166
|
-
*
|
1167
|
-
*
|
1382
|
+
* Returns the root and message element
|
1383
|
+
* for an character count input
|
1168
1384
|
*
|
1169
|
-
*
|
1385
|
+
* @param {HTMLInputElement|HTMLTextAreaElement} inputEl The character count input element
|
1386
|
+
* @returns {CharacterCountElements} elements The root and message element.
|
1170
1387
|
*/
|
1171
|
-
|
1172
|
-
|
1173
|
-
|
1388
|
+
|
1389
|
+
var getCharacterCountElements = function getCharacterCountElements(inputEl) {
|
1390
|
+
var characterCountEl = inputEl.closest(CHARACTER_COUNT);
|
1391
|
+
|
1392
|
+
if (!characterCountEl) {
|
1393
|
+
throw new Error("".concat(INPUT, " is missing outer ").concat(CHARACTER_COUNT));
|
1394
|
+
}
|
1395
|
+
|
1396
|
+
var messageEl = characterCountEl.querySelector(MESSAGE);
|
1397
|
+
|
1398
|
+
if (!messageEl) {
|
1399
|
+
throw new Error("".concat(CHARACTER_COUNT, " is missing inner ").concat(MESSAGE));
|
1400
|
+
}
|
1401
|
+
|
1402
|
+
return {
|
1403
|
+
characterCountEl: characterCountEl,
|
1404
|
+
messageEl: messageEl
|
1405
|
+
};
|
1174
1406
|
};
|
1407
|
+
/**
|
1408
|
+
* Update the character count component
|
1409
|
+
*
|
1410
|
+
* @param {HTMLInputElement|HTMLTextAreaElement} inputEl The character count input element
|
1411
|
+
*/
|
1175
1412
|
|
1176
|
-
// copy all of the behavior methods and props to Accordion
|
1177
|
-
var assign = require('object-assign');
|
1178
|
-
assign(Accordion, accordion);
|
1179
1413
|
|
1180
|
-
|
1181
|
-
|
1414
|
+
var updateCountMessage = function updateCountMessage(inputEl) {
|
1415
|
+
var _getCharacterCountEle = getCharacterCountElements(inputEl),
|
1416
|
+
characterCountEl = _getCharacterCountEle.characterCountEl,
|
1417
|
+
messageEl = _getCharacterCountEle.messageEl;
|
1418
|
+
|
1419
|
+
var maxlength = parseInt(characterCountEl.getAttribute("data-maxlength"), 10);
|
1420
|
+
if (!maxlength) return;
|
1421
|
+
var newMessage = "";
|
1422
|
+
var currentLength = inputEl.value.length;
|
1423
|
+
var isOverLimit = currentLength && currentLength > maxlength;
|
1182
1424
|
|
1183
|
-
|
1184
|
-
|
1425
|
+
if (currentLength === 0) {
|
1426
|
+
newMessage = "".concat(maxlength, " characters allowed");
|
1427
|
+
} else {
|
1428
|
+
var difference = Math.abs(maxlength - currentLength);
|
1429
|
+
var characters = "character".concat(difference === 1 ? "" : "s");
|
1430
|
+
var guidance = isOverLimit ? "over limit" : "left";
|
1431
|
+
newMessage = "".concat(difference, " ").concat(characters, " ").concat(guidance);
|
1432
|
+
}
|
1433
|
+
|
1434
|
+
messageEl.classList.toggle(MESSAGE_INVALID_CLASS, isOverLimit);
|
1435
|
+
messageEl.innerHTML = newMessage;
|
1436
|
+
|
1437
|
+
if (isOverLimit && !inputEl.validationMessage) {
|
1438
|
+
inputEl.setCustomValidity(VALIDATION_MESSAGE);
|
1439
|
+
}
|
1440
|
+
|
1441
|
+
if (!isOverLimit && inputEl.validationMessage === VALIDATION_MESSAGE) {
|
1442
|
+
inputEl.setCustomValidity("");
|
1443
|
+
}
|
1185
1444
|
};
|
1445
|
+
/**
|
1446
|
+
* Setup the character count component
|
1447
|
+
*
|
1448
|
+
* @param {HTMLInputElement|HTMLTextAreaElement} inputEl The character count input element
|
1449
|
+
*/
|
1186
1450
|
|
1187
|
-
module.exports = Accordion;
|
1188
1451
|
|
1189
|
-
|
1190
|
-
|
1452
|
+
var setupAttributes = function setupAttributes(inputEl) {
|
1453
|
+
var _getCharacterCountEle2 = getCharacterCountElements(inputEl),
|
1454
|
+
characterCountEl = _getCharacterCountEle2.characterCountEl;
|
1455
|
+
|
1456
|
+
var maxlength = inputEl.getAttribute("maxlength");
|
1457
|
+
if (!maxlength) return;
|
1458
|
+
inputEl.removeAttribute("maxlength");
|
1459
|
+
characterCountEl.setAttribute("data-maxlength", maxlength);
|
1460
|
+
};
|
1461
|
+
|
1462
|
+
var characterCount = behavior({
|
1463
|
+
input: _defineProperty({}, INPUT, function () {
|
1464
|
+
updateCountMessage(this);
|
1465
|
+
})
|
1466
|
+
}, {
|
1467
|
+
init: function init(root) {
|
1468
|
+
select(INPUT, root).forEach(function (input) {
|
1469
|
+
setupAttributes(input);
|
1470
|
+
updateCountMessage(input);
|
1471
|
+
});
|
1472
|
+
},
|
1473
|
+
MESSAGE_INVALID_CLASS: MESSAGE_INVALID_CLASS,
|
1474
|
+
VALIDATION_MESSAGE: VALIDATION_MESSAGE
|
1475
|
+
});
|
1476
|
+
module.exports = characterCount;
|
1477
|
+
|
1478
|
+
},{"../config":28,"../utils/behavior":34,"../utils/select":37}],20:[function(require,module,exports){
|
1479
|
+
"use strict";
|
1480
|
+
|
1481
|
+
var _CLICK, _behavior;
|
1191
1482
|
|
1192
1483
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
1193
1484
|
|
1194
|
-
var
|
1195
|
-
var toggle = require('../utils/toggle');
|
1485
|
+
var keymap = require("receptor/keymap");
|
1196
1486
|
|
1197
|
-
var
|
1198
|
-
var PREFIX = require('../config').prefix;
|
1487
|
+
var select = require("../utils/select");
|
1199
1488
|
|
1200
|
-
var
|
1201
|
-
var EXPANDED_CLASS = PREFIX + '-banner-header-expanded';
|
1489
|
+
var behavior = require("../utils/behavior");
|
1202
1490
|
|
1203
|
-
var
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1491
|
+
var _require = require("../config"),
|
1492
|
+
PREFIX = _require.prefix;
|
1493
|
+
|
1494
|
+
var _require2 = require("../events"),
|
1495
|
+
CLICK = _require2.CLICK;
|
1496
|
+
|
1497
|
+
var COMBO_BOX = ".".concat(PREFIX, "-combo-box");
|
1498
|
+
var INPUT_CLASS = "".concat(PREFIX, "-combo-box__input");
|
1499
|
+
var LIST_CLASS = "".concat(PREFIX, "-combo-box__list");
|
1500
|
+
var LIST_OPTION_CLASS = "".concat(PREFIX, "-combo-box__list-option");
|
1501
|
+
var STATUS_CLASS = "".concat(PREFIX, "-combo-box__status");
|
1502
|
+
var LIST_OPTION_FOCUSED_CLASS = "".concat(LIST_OPTION_CLASS, "--focused");
|
1503
|
+
var SELECT = ".".concat(PREFIX, "-combo-box__select");
|
1504
|
+
var INPUT = ".".concat(INPUT_CLASS);
|
1505
|
+
var LIST = ".".concat(LIST_CLASS);
|
1506
|
+
var LIST_OPTION = ".".concat(LIST_OPTION_CLASS);
|
1507
|
+
var LIST_OPTION_FOCUSED = ".".concat(LIST_OPTION_FOCUSED_CLASS);
|
1508
|
+
var STATUS = ".".concat(STATUS_CLASS);
|
1509
|
+
/**
|
1510
|
+
* Determine if the key code of an event is printable
|
1511
|
+
*
|
1512
|
+
* @param {number} keyCode The key code of the event
|
1513
|
+
* @returns {boolean} true is the key code is printable
|
1514
|
+
*/
|
1515
|
+
|
1516
|
+
var isPrintableKeyCode = function isPrintableKeyCode(keyCode) {
|
1517
|
+
return keyCode > 47 && keyCode < 58 || // number keys
|
1518
|
+
keyCode === 32 || // space
|
1519
|
+
keyCode === 8 || // backspace
|
1520
|
+
keyCode > 64 && keyCode < 91 || // letter keys
|
1521
|
+
keyCode > 95 && keyCode < 112 || // numpad keys
|
1522
|
+
keyCode > 185 && keyCode < 193 || // ;=,-./` (in order)
|
1523
|
+
keyCode > 218 && keyCode < 223 // [\]' (in order)
|
1524
|
+
;
|
1207
1525
|
};
|
1526
|
+
/**
|
1527
|
+
* The elements within the combo box.
|
1528
|
+
* @typedef {Object} ComboBoxElements
|
1529
|
+
* @property {HTMLElement} comboBoxEl
|
1530
|
+
* @property {HTMLSelectElement} selectEl
|
1531
|
+
* @property {HTMLInputElement} inputEl
|
1532
|
+
* @property {HTMLUListElement} listEl
|
1533
|
+
* @property {HTMLDivElement} statusEl
|
1534
|
+
* @property {HTMLOptionElement} focusedOptionEl
|
1535
|
+
*/
|
1208
1536
|
|
1209
|
-
|
1537
|
+
/**
|
1538
|
+
* Get an object of elements belonging directly to the given
|
1539
|
+
* combo box component.
|
1540
|
+
*
|
1541
|
+
* @param {HTMLElement} el the element within the combo box
|
1542
|
+
* @returns {ComboBoxElements} elements
|
1543
|
+
*/
|
1210
1544
|
|
1211
|
-
},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/toggle":35}],18:[function(require,module,exports){
|
1212
|
-
'use strict';
|
1213
1545
|
|
1214
|
-
|
1546
|
+
var getComboBoxElements = function getComboBoxElements(el) {
|
1547
|
+
var comboBoxEl = el.closest(COMBO_BOX);
|
1215
1548
|
|
1216
|
-
|
1217
|
-
|
1218
|
-
|
1219
|
-
var forEach = require('array-foreach');
|
1220
|
-
var select = require('../utils/select');
|
1549
|
+
if (!comboBoxEl) {
|
1550
|
+
throw new Error("Element is missing outer ".concat(COMBO_BOX));
|
1551
|
+
}
|
1221
1552
|
|
1222
|
-
var
|
1223
|
-
var PREFIX = require('../config').prefix;
|
1553
|
+
var selectEl = comboBoxEl.querySelector(SELECT);
|
1224
1554
|
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1228
|
-
var BUTTON = NAV + ' .' + PREFIX + '-footer-primary-link';
|
1229
|
-
var LIST = NAV + ' ul';
|
1555
|
+
if (!selectEl) {
|
1556
|
+
throw new Error("".concat(COMBO_BOX, " is missing inner ").concat(SELECT));
|
1557
|
+
}
|
1230
1558
|
|
1231
|
-
var
|
1232
|
-
var
|
1559
|
+
var inputEl = comboBoxEl.querySelector(INPUT);
|
1560
|
+
var listEl = comboBoxEl.querySelector(LIST);
|
1561
|
+
var statusEl = comboBoxEl.querySelector(STATUS);
|
1562
|
+
var focusedOptionEl = comboBoxEl.querySelector(LIST_OPTION_FOCUSED);
|
1563
|
+
return {
|
1564
|
+
comboBoxEl: comboBoxEl,
|
1565
|
+
selectEl: selectEl,
|
1566
|
+
inputEl: inputEl,
|
1567
|
+
listEl: listEl,
|
1568
|
+
statusEl: statusEl,
|
1569
|
+
focusedOptionEl: focusedOptionEl
|
1570
|
+
};
|
1571
|
+
};
|
1572
|
+
/**
|
1573
|
+
* Enhance a select element into a combo box component.
|
1574
|
+
*
|
1575
|
+
* @param {HTMLElement} el The initial element within the combo box component
|
1576
|
+
*/
|
1577
|
+
|
1578
|
+
|
1579
|
+
var enhanceComboBox = function enhanceComboBox(el) {
|
1580
|
+
var _getComboBoxElements = getComboBoxElements(el),
|
1581
|
+
comboBoxEl = _getComboBoxElements.comboBoxEl,
|
1582
|
+
selectEl = _getComboBoxElements.selectEl;
|
1583
|
+
|
1584
|
+
var selectId = selectEl.id;
|
1585
|
+
var listId = "".concat(selectId, "--list");
|
1586
|
+
var assistiveHintID = "".concat(selectId, "--assistiveHint");
|
1587
|
+
var placeholder = "";
|
1588
|
+
var selectedOption;
|
1589
|
+
var additionalAttributes = [];
|
1233
1590
|
|
1234
|
-
var
|
1235
|
-
|
1236
|
-
list.classList.remove(HIDDEN);
|
1591
|
+
for (var i = 0, len = selectEl.options.length; i < len; i += 1) {
|
1592
|
+
var optionEl = selectEl.options[i];
|
1237
1593
|
|
1238
|
-
|
1239
|
-
|
1240
|
-
|
1594
|
+
if (!placeholder && !optionEl.value) {
|
1595
|
+
placeholder = "placeholder=\"".concat(optionEl.text, "\"");
|
1596
|
+
}
|
1597
|
+
|
1598
|
+
if (!selectedOption && optionEl.selected && optionEl.value) {
|
1599
|
+
selectedOption = optionEl;
|
1600
|
+
}
|
1241
1601
|
|
1242
|
-
|
1243
|
-
|
1244
|
-
|
1602
|
+
if (placeholder && selectedOption) {
|
1603
|
+
break;
|
1604
|
+
}
|
1605
|
+
}
|
1606
|
+
|
1607
|
+
selectEl.setAttribute("aria-hidden", "true");
|
1608
|
+
selectEl.setAttribute("tabindex", "-1");
|
1609
|
+
selectEl.classList.add("usa-sr-only");
|
1610
|
+
selectEl.id = "";
|
1611
|
+
["required", "aria-label", "aria-labelledby"].forEach(function (name) {
|
1612
|
+
if (selectEl.hasAttribute(name)) {
|
1613
|
+
var value = selectEl.getAttribute(name);
|
1614
|
+
additionalAttributes.push("".concat(name, "=\"").concat(value, "\""));
|
1615
|
+
selectEl.removeAttribute(name);
|
1245
1616
|
}
|
1246
1617
|
});
|
1618
|
+
comboBoxEl.insertAdjacentHTML("beforeend", ["<input\n aria-owns=\"".concat(listId, "\"\n aria-autocomplete=\"list\"\n aria-describedby=\"").concat(assistiveHintID, "\"\n aria-expanded=\"false\"\n autocapitalize=\"off\"\n ").concat(placeholder || "", "\n autocomplete=\"off\"\n id=\"").concat(selectId, "\"\n class=\"").concat(INPUT_CLASS, "\"\n type=\"text\"\n role=\"combobox\"\n ").concat(additionalAttributes.join(" "), "\n >"), "<ul\n id=\"".concat(listId, "\"\n class=\"").concat(LIST_CLASS, "\"\n role=\"listbox\"\n hidden>\n </ul>"), "<div class=\"".concat(STATUS_CLASS, " usa-sr-only\" role=\"status\">\n </div>"), "<span id=\"".concat(assistiveHintID, "\" class=\"usa-sr-only\">\n When autocomplete results are available use up and down arrows to review and enter to select.\n Touch device users, explore by touch or with swipe gestures.\n </span>")].join(""));
|
1619
|
+
|
1620
|
+
if (selectedOption) {
|
1621
|
+
var _getComboBoxElements2 = getComboBoxElements(el),
|
1622
|
+
inputEl = _getComboBoxElements2.inputEl;
|
1623
|
+
|
1624
|
+
selectEl.value = selectedOption.value;
|
1625
|
+
inputEl.value = selectedOption.text;
|
1626
|
+
}
|
1627
|
+
};
|
1628
|
+
/**
|
1629
|
+
* Display the option list of a combo box component.
|
1630
|
+
*
|
1631
|
+
* @param {HTMLElement} el An element within the combo box component
|
1632
|
+
*/
|
1633
|
+
|
1634
|
+
|
1635
|
+
var displayList = function displayList(el) {
|
1636
|
+
var _getComboBoxElements3 = getComboBoxElements(el),
|
1637
|
+
selectEl = _getComboBoxElements3.selectEl,
|
1638
|
+
inputEl = _getComboBoxElements3.inputEl,
|
1639
|
+
listEl = _getComboBoxElements3.listEl,
|
1640
|
+
statusEl = _getComboBoxElements3.statusEl;
|
1641
|
+
|
1642
|
+
var listOptionBaseId = "".concat(listEl.id, "--option-");
|
1643
|
+
var inputValue = (inputEl.value || "").toLowerCase();
|
1644
|
+
var options = [];
|
1645
|
+
|
1646
|
+
for (var i = 0, len = selectEl.options.length; i < len; i += 1) {
|
1647
|
+
var optionEl = selectEl.options[i];
|
1648
|
+
|
1649
|
+
if (optionEl.value && (!inputValue || optionEl.text.toLowerCase().indexOf(inputValue) !== -1)) {
|
1650
|
+
options.push(optionEl);
|
1651
|
+
}
|
1652
|
+
}
|
1653
|
+
|
1654
|
+
var numOptions = options.length;
|
1655
|
+
var optionHtml = options.map(function (option, index) {
|
1656
|
+
return "<li\n aria-selected=\"false\"\n aria-setsize=\"".concat(options.length, "\"\n aria-posinset=\"").concat(index + 1, "\"\n id=\"").concat(listOptionBaseId).concat(index, "\"\n class=\"").concat(LIST_OPTION_CLASS, "\"\n tabindex=\"-1\"\n role=\"option\"\n data-option-value=\"").concat(option.value, "\"\n >").concat(option.text, "</li>");
|
1657
|
+
}).join("");
|
1658
|
+
var noResults = "<li class=\"".concat(LIST_OPTION_CLASS, "--no-results\">No results found</li>");
|
1659
|
+
listEl.hidden = false;
|
1660
|
+
listEl.innerHTML = numOptions ? optionHtml : noResults;
|
1661
|
+
inputEl.setAttribute("aria-expanded", "true");
|
1662
|
+
statusEl.innerHTML = numOptions ? "".concat(numOptions, " result").concat(numOptions > 1 ? "s" : "", " available.") : "No results.";
|
1663
|
+
};
|
1664
|
+
/**
|
1665
|
+
* Hide the option list of a combo box component.
|
1666
|
+
*
|
1667
|
+
* @param {HTMLElement} el An element within the combo box component
|
1668
|
+
*/
|
1669
|
+
|
1670
|
+
|
1671
|
+
var hideList = function hideList(el) {
|
1672
|
+
var _getComboBoxElements4 = getComboBoxElements(el),
|
1673
|
+
inputEl = _getComboBoxElements4.inputEl,
|
1674
|
+
listEl = _getComboBoxElements4.listEl,
|
1675
|
+
statusEl = _getComboBoxElements4.statusEl;
|
1676
|
+
|
1677
|
+
statusEl.innerHTML = "";
|
1678
|
+
inputEl.setAttribute("aria-expanded", "false");
|
1679
|
+
inputEl.setAttribute("aria-activedescendant", "");
|
1680
|
+
listEl.innerHTML = "";
|
1681
|
+
listEl.hidden = true;
|
1682
|
+
};
|
1683
|
+
/**
|
1684
|
+
* Select an option list of the combo box component.
|
1685
|
+
*
|
1686
|
+
* @param {HTMLElement} listOptionEl The list option being selected
|
1687
|
+
*/
|
1688
|
+
|
1689
|
+
|
1690
|
+
var selectItem = function selectItem(listOptionEl) {
|
1691
|
+
var _getComboBoxElements5 = getComboBoxElements(listOptionEl),
|
1692
|
+
comboBoxEl = _getComboBoxElements5.comboBoxEl,
|
1693
|
+
selectEl = _getComboBoxElements5.selectEl,
|
1694
|
+
inputEl = _getComboBoxElements5.inputEl;
|
1695
|
+
|
1696
|
+
selectEl.value = listOptionEl.getAttribute("data-option-value");
|
1697
|
+
inputEl.value = listOptionEl.textContent;
|
1698
|
+
hideList(comboBoxEl);
|
1699
|
+
inputEl.focus();
|
1700
|
+
};
|
1701
|
+
/**
|
1702
|
+
* Select an option list of the combo box component based off of
|
1703
|
+
* having a current focused list option or
|
1704
|
+
* having test that completely matches a list option.
|
1705
|
+
* Otherwise it clears the input and select.
|
1706
|
+
*
|
1707
|
+
* @param {HTMLElement} el An element within the combo box component
|
1708
|
+
*/
|
1709
|
+
|
1710
|
+
|
1711
|
+
var completeSelection = function completeSelection(el) {
|
1712
|
+
var _getComboBoxElements6 = getComboBoxElements(el),
|
1713
|
+
selectEl = _getComboBoxElements6.selectEl,
|
1714
|
+
inputEl = _getComboBoxElements6.inputEl,
|
1715
|
+
statusEl = _getComboBoxElements6.statusEl,
|
1716
|
+
focusedOptionEl = _getComboBoxElements6.focusedOptionEl;
|
1717
|
+
|
1718
|
+
statusEl.textContent = "";
|
1719
|
+
|
1720
|
+
if (focusedOptionEl) {
|
1721
|
+
selectEl.value = focusedOptionEl.getAttribute("data-option-value");
|
1722
|
+
inputEl.value = focusedOptionEl.textContent;
|
1723
|
+
return;
|
1724
|
+
}
|
1725
|
+
|
1726
|
+
var inputValue = (inputEl.value || "").toLowerCase();
|
1727
|
+
|
1728
|
+
if (inputValue) {
|
1729
|
+
for (var i = 0, len = selectEl.options.length; i < len; i += 1) {
|
1730
|
+
var optionEl = selectEl.options[i];
|
1731
|
+
|
1732
|
+
if (optionEl.text.toLowerCase() === inputValue) {
|
1733
|
+
selectEl.value = optionEl.value;
|
1734
|
+
inputEl.value = optionEl.text;
|
1735
|
+
return;
|
1736
|
+
}
|
1737
|
+
}
|
1738
|
+
}
|
1739
|
+
|
1740
|
+
selectEl.value = "";
|
1741
|
+
|
1742
|
+
if (inputEl.value) {
|
1743
|
+
inputEl.value = "";
|
1744
|
+
}
|
1247
1745
|
};
|
1746
|
+
/**
|
1747
|
+
* Manage the focused element within the list options when
|
1748
|
+
* navigating via keyboard.
|
1749
|
+
*
|
1750
|
+
* @param {HTMLElement} el An element within the combo box component
|
1751
|
+
* @param {HTMLElement} currentEl An element within the combo box component
|
1752
|
+
* @param {HTMLElement} nextEl An element within the combo box component
|
1753
|
+
*/
|
1754
|
+
|
1755
|
+
|
1756
|
+
var highlightOption = function highlightOption(el, currentEl, nextEl) {
|
1757
|
+
var _getComboBoxElements7 = getComboBoxElements(el),
|
1758
|
+
inputEl = _getComboBoxElements7.inputEl,
|
1759
|
+
listEl = _getComboBoxElements7.listEl;
|
1760
|
+
|
1761
|
+
if (currentEl) {
|
1762
|
+
currentEl.classList.remove(LIST_OPTION_FOCUSED_CLASS);
|
1763
|
+
currentEl.setAttribute("aria-selected", "false");
|
1764
|
+
}
|
1765
|
+
|
1766
|
+
if (nextEl) {
|
1767
|
+
inputEl.setAttribute("aria-activedescendant", nextEl.id);
|
1768
|
+
nextEl.setAttribute("aria-selected", "true");
|
1769
|
+
nextEl.classList.add(LIST_OPTION_FOCUSED_CLASS);
|
1770
|
+
var optionBottom = nextEl.offsetTop + nextEl.offsetHeight;
|
1771
|
+
var currentBottom = listEl.scrollTop + listEl.offsetHeight;
|
1772
|
+
|
1773
|
+
if (optionBottom > currentBottom) {
|
1774
|
+
listEl.scrollTop = optionBottom - listEl.offsetHeight;
|
1775
|
+
}
|
1776
|
+
|
1777
|
+
if (nextEl.offsetTop < listEl.scrollTop) {
|
1778
|
+
listEl.scrollTop = nextEl.offsetTop;
|
1779
|
+
}
|
1780
|
+
|
1781
|
+
nextEl.focus();
|
1782
|
+
} else {
|
1783
|
+
inputEl.setAttribute("aria-activedescendant", "");
|
1784
|
+
inputEl.focus();
|
1785
|
+
}
|
1786
|
+
};
|
1787
|
+
/**
|
1788
|
+
* Handle the enter event within the combo box component.
|
1789
|
+
*
|
1790
|
+
* @param {KeyboardEvent} event An event within the combo box component
|
1791
|
+
*/
|
1792
|
+
|
1793
|
+
|
1794
|
+
var handleEnter = function handleEnter(event) {
|
1795
|
+
var _getComboBoxElements8 = getComboBoxElements(event.target),
|
1796
|
+
comboBoxEl = _getComboBoxElements8.comboBoxEl,
|
1797
|
+
inputEl = _getComboBoxElements8.inputEl,
|
1798
|
+
listEl = _getComboBoxElements8.listEl;
|
1799
|
+
|
1800
|
+
var listShown = !listEl.hidden;
|
1801
|
+
completeSelection(comboBoxEl);
|
1802
|
+
|
1803
|
+
if (listShown) {
|
1804
|
+
hideList(comboBoxEl);
|
1805
|
+
inputEl.focus();
|
1806
|
+
event.preventDefault();
|
1807
|
+
}
|
1808
|
+
};
|
1809
|
+
/**
|
1810
|
+
* Handle the down event within the combo box component.
|
1811
|
+
*
|
1812
|
+
* @param {KeyboardEvent} event An event within the combo box component
|
1813
|
+
*/
|
1814
|
+
|
1815
|
+
|
1816
|
+
var handleEscape = function handleEscape(event) {
|
1817
|
+
var _getComboBoxElements9 = getComboBoxElements(event.target),
|
1818
|
+
comboBoxEl = _getComboBoxElements9.comboBoxEl,
|
1819
|
+
inputEl = _getComboBoxElements9.inputEl;
|
1820
|
+
|
1821
|
+
hideList(comboBoxEl);
|
1822
|
+
inputEl.focus();
|
1823
|
+
};
|
1824
|
+
/**
|
1825
|
+
* Handle the up event within the combo box component.
|
1826
|
+
*
|
1827
|
+
* @param {KeyboardEvent} event An event within the combo box component
|
1828
|
+
*/
|
1829
|
+
|
1830
|
+
|
1831
|
+
var handleUp = function handleUp(event) {
|
1832
|
+
var _getComboBoxElements10 = getComboBoxElements(event.target),
|
1833
|
+
comboBoxEl = _getComboBoxElements10.comboBoxEl,
|
1834
|
+
listEl = _getComboBoxElements10.listEl,
|
1835
|
+
focusedOptionEl = _getComboBoxElements10.focusedOptionEl;
|
1836
|
+
|
1837
|
+
var nextOptionEl = focusedOptionEl && focusedOptionEl.previousSibling;
|
1838
|
+
var listShown = !listEl.hidden;
|
1839
|
+
highlightOption(comboBoxEl, focusedOptionEl, nextOptionEl);
|
1840
|
+
|
1841
|
+
if (listShown) {
|
1842
|
+
event.preventDefault();
|
1843
|
+
}
|
1844
|
+
|
1845
|
+
if (!nextOptionEl) {
|
1846
|
+
hideList(comboBoxEl);
|
1847
|
+
}
|
1848
|
+
};
|
1849
|
+
/**
|
1850
|
+
* Handle the down event within the combo box component.
|
1851
|
+
*
|
1852
|
+
* @param {KeyboardEvent} event An event within the combo box component
|
1853
|
+
*/
|
1854
|
+
|
1855
|
+
|
1856
|
+
var handleDown = function handleDown(event) {
|
1857
|
+
var _getComboBoxElements11 = getComboBoxElements(event.target),
|
1858
|
+
comboBoxEl = _getComboBoxElements11.comboBoxEl,
|
1859
|
+
listEl = _getComboBoxElements11.listEl,
|
1860
|
+
focusedOptionEl = _getComboBoxElements11.focusedOptionEl;
|
1861
|
+
|
1862
|
+
if (listEl.hidden) {
|
1863
|
+
displayList(comboBoxEl);
|
1864
|
+
}
|
1865
|
+
|
1866
|
+
var nextOptionEl = focusedOptionEl ? focusedOptionEl.nextSibling : listEl.querySelector(LIST_OPTION);
|
1867
|
+
|
1868
|
+
if (nextOptionEl) {
|
1869
|
+
highlightOption(comboBoxEl, focusedOptionEl, nextOptionEl);
|
1870
|
+
}
|
1871
|
+
|
1872
|
+
event.preventDefault();
|
1873
|
+
};
|
1874
|
+
|
1875
|
+
var comboBox = behavior((_behavior = {}, _defineProperty(_behavior, CLICK, (_CLICK = {}, _defineProperty(_CLICK, INPUT, function () {
|
1876
|
+
displayList(this);
|
1877
|
+
}), _defineProperty(_CLICK, LIST_OPTION, function () {
|
1878
|
+
selectItem(this);
|
1879
|
+
}), _CLICK)), _defineProperty(_behavior, "focusout", _defineProperty({}, COMBO_BOX, function (event) {
|
1880
|
+
var _getComboBoxElements12 = getComboBoxElements(event.target),
|
1881
|
+
comboBoxEl = _getComboBoxElements12.comboBoxEl;
|
1882
|
+
|
1883
|
+
if (!comboBoxEl.contains(event.relatedTarget)) {
|
1884
|
+
completeSelection(comboBoxEl);
|
1885
|
+
hideList(comboBoxEl);
|
1886
|
+
}
|
1887
|
+
})), _defineProperty(_behavior, "keydown", _defineProperty({}, COMBO_BOX, keymap({
|
1888
|
+
ArrowUp: handleUp,
|
1889
|
+
Up: handleUp,
|
1890
|
+
ArrowDown: handleDown,
|
1891
|
+
Down: handleDown,
|
1892
|
+
Escape: handleEscape,
|
1893
|
+
Enter: handleEnter
|
1894
|
+
}))), _defineProperty(_behavior, "keyup", _defineProperty({}, INPUT, function (event) {
|
1895
|
+
if (isPrintableKeyCode(event.keyCode)) {
|
1896
|
+
displayList(this);
|
1897
|
+
}
|
1898
|
+
})), _behavior), {
|
1899
|
+
init: function init(root) {
|
1900
|
+
select(SELECT, root).forEach(function (selectEl) {
|
1901
|
+
enhanceComboBox(selectEl);
|
1902
|
+
});
|
1903
|
+
}
|
1904
|
+
});
|
1905
|
+
module.exports = comboBox;
|
1906
|
+
|
1907
|
+
},{"../config":28,"../events":29,"../utils/behavior":34,"../utils/select":37,"receptor/keymap":14}],21:[function(require,module,exports){
|
1908
|
+
"use strict";
|
1248
1909
|
|
1910
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
1911
|
+
|
1912
|
+
var debounce = require("lodash.debounce");
|
1913
|
+
|
1914
|
+
var behavior = require("../utils/behavior");
|
1915
|
+
|
1916
|
+
var select = require("../utils/select");
|
1917
|
+
|
1918
|
+
var _require = require("../events"),
|
1919
|
+
CLICK = _require.CLICK;
|
1920
|
+
|
1921
|
+
var _require2 = require("../config"),
|
1922
|
+
PREFIX = _require2.prefix;
|
1923
|
+
|
1924
|
+
var HIDDEN = "hidden";
|
1925
|
+
var SCOPE = ".".concat(PREFIX, "-footer--big");
|
1926
|
+
var NAV = "".concat(SCOPE, " nav");
|
1927
|
+
var BUTTON = "".concat(NAV, " .").concat(PREFIX, "-footer__primary-link");
|
1928
|
+
var COLLAPSIBLE = ".".concat(PREFIX, "-footer__primary-content--collapsible");
|
1929
|
+
var HIDE_MAX_WIDTH = 480;
|
1930
|
+
var DEBOUNCE_RATE = 180;
|
1931
|
+
|
1932
|
+
function showPanel() {
|
1933
|
+
if (window.innerWidth < HIDE_MAX_WIDTH) {
|
1934
|
+
var collapseEl = this.closest(COLLAPSIBLE);
|
1935
|
+
collapseEl.classList.toggle(HIDDEN); // NB: this *should* always succeed because the button
|
1936
|
+
// selector is scoped to ".{prefix}-footer-big nav"
|
1937
|
+
|
1938
|
+
var collapsibleEls = select(COLLAPSIBLE, collapseEl.closest(NAV));
|
1939
|
+
collapsibleEls.forEach(function (el) {
|
1940
|
+
if (el !== collapseEl) {
|
1941
|
+
el.classList.add(HIDDEN);
|
1942
|
+
}
|
1943
|
+
});
|
1944
|
+
}
|
1945
|
+
}
|
1946
|
+
|
1947
|
+
var lastInnerWidth;
|
1249
1948
|
var resize = debounce(function () {
|
1949
|
+
if (lastInnerWidth === window.innerWidth) return;
|
1950
|
+
lastInnerWidth = window.innerWidth;
|
1250
1951
|
var hidden = window.innerWidth < HIDE_MAX_WIDTH;
|
1251
|
-
|
1252
|
-
list.classList.toggle(HIDDEN, hidden);
|
1952
|
+
select(COLLAPSIBLE).forEach(function (list) {
|
1953
|
+
return list.classList.toggle(HIDDEN, hidden);
|
1253
1954
|
});
|
1254
1955
|
}, DEBOUNCE_RATE);
|
1255
|
-
|
1256
1956
|
module.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, showPanel)), {
|
1257
1957
|
// export for use elsewhere
|
1258
1958
|
HIDE_MAX_WIDTH: HIDE_MAX_WIDTH,
|
1259
1959
|
DEBOUNCE_RATE: DEBOUNCE_RATE,
|
1260
|
-
|
1261
|
-
init: function init(target) {
|
1960
|
+
init: function init() {
|
1262
1961
|
resize();
|
1263
|
-
window.addEventListener(
|
1962
|
+
window.addEventListener("resize", resize);
|
1264
1963
|
},
|
1265
|
-
|
1266
|
-
|
1267
|
-
window.removeEventListener('resize', resize);
|
1964
|
+
teardown: function teardown() {
|
1965
|
+
window.removeEventListener("resize", resize);
|
1268
1966
|
}
|
1269
1967
|
});
|
1270
1968
|
|
1271
|
-
},{"../config":
|
1272
|
-
|
1969
|
+
},{"../config":28,"../events":29,"../utils/behavior":34,"../utils/select":37,"lodash.debounce":6}],22:[function(require,module,exports){
|
1970
|
+
"use strict";
|
1971
|
+
|
1972
|
+
var accordion = require("./accordion");
|
1973
|
+
|
1974
|
+
var banner = require("./banner");
|
1975
|
+
|
1976
|
+
var characterCount = require("./character-count");
|
1977
|
+
|
1978
|
+
var comboBox = require("./combo-box");
|
1979
|
+
|
1980
|
+
var footer = require("./footer");
|
1981
|
+
|
1982
|
+
var navigation = require("./navigation");
|
1983
|
+
|
1984
|
+
var password = require("./password");
|
1985
|
+
|
1986
|
+
var search = require("./search");
|
1987
|
+
|
1988
|
+
var skipnav = require("./skipnav");
|
1989
|
+
|
1990
|
+
var validator = require("./validator");
|
1273
1991
|
|
1274
1992
|
module.exports = {
|
1275
|
-
accordion:
|
1276
|
-
banner:
|
1277
|
-
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1993
|
+
accordion: accordion,
|
1994
|
+
banner: banner,
|
1995
|
+
characterCount: characterCount,
|
1996
|
+
comboBox: comboBox,
|
1997
|
+
footer: footer,
|
1998
|
+
navigation: navigation,
|
1999
|
+
password: password,
|
2000
|
+
search: search,
|
2001
|
+
skipnav: skipnav,
|
2002
|
+
validator: validator
|
1283
2003
|
};
|
1284
2004
|
|
1285
|
-
},{"./accordion":
|
1286
|
-
|
2005
|
+
},{"./accordion":17,"./banner":18,"./character-count":19,"./combo-box":20,"./footer":21,"./navigation":23,"./password":24,"./search":25,"./skipnav":26,"./validator":27}],23:[function(require,module,exports){
|
2006
|
+
"use strict";
|
1287
2007
|
|
1288
2008
|
var _CLICK;
|
1289
2009
|
|
1290
2010
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
1291
2011
|
|
1292
|
-
var behavior = require(
|
1293
|
-
|
1294
|
-
var select = require(
|
1295
|
-
|
2012
|
+
var behavior = require("../utils/behavior");
|
2013
|
+
|
2014
|
+
var select = require("../utils/select");
|
2015
|
+
|
2016
|
+
var toggle = require("../utils/toggle");
|
1296
2017
|
|
1297
|
-
var
|
1298
|
-
var PREFIX = require('../config').prefix;
|
2018
|
+
var FocusTrap = require("../utils/focus-trap");
|
1299
2019
|
|
1300
|
-
var
|
1301
|
-
var NAV_LINKS = NAV + ' a';
|
1302
|
-
var OPENERS = '.' + PREFIX + '-menu-btn';
|
1303
|
-
var CLOSE_BUTTON = '.' + PREFIX + '-nav-close';
|
1304
|
-
var OVERLAY = '.' + PREFIX + '-overlay';
|
1305
|
-
var CLOSERS = CLOSE_BUTTON + ', .' + PREFIX + '-overlay';
|
1306
|
-
var TOGGLES = [NAV, OVERLAY].join(', ');
|
2020
|
+
var accordion = require("./accordion");
|
1307
2021
|
|
1308
|
-
var
|
1309
|
-
|
2022
|
+
var _require = require("../events"),
|
2023
|
+
CLICK = _require.CLICK;
|
2024
|
+
|
2025
|
+
var _require2 = require("../config"),
|
2026
|
+
PREFIX = _require2.prefix;
|
2027
|
+
|
2028
|
+
var BODY = "body";
|
2029
|
+
var NAV = ".".concat(PREFIX, "-nav");
|
2030
|
+
var NAV_LINKS = "".concat(NAV, " a");
|
2031
|
+
var NAV_CONTROL = "button.".concat(PREFIX, "-nav__link");
|
2032
|
+
var OPENERS = ".".concat(PREFIX, "-menu-btn");
|
2033
|
+
var CLOSE_BUTTON = ".".concat(PREFIX, "-nav__close");
|
2034
|
+
var OVERLAY = ".".concat(PREFIX, "-overlay");
|
2035
|
+
var CLOSERS = "".concat(CLOSE_BUTTON, ", .").concat(PREFIX, "-overlay");
|
2036
|
+
var TOGGLES = [NAV, OVERLAY].join(", ");
|
2037
|
+
var ACTIVE_CLASS = "usa-js-mobile-nav--active";
|
2038
|
+
var VISIBLE_CLASS = "is-visible";
|
2039
|
+
var navigation;
|
2040
|
+
var navActive;
|
1310
2041
|
|
1311
2042
|
var isActive = function isActive() {
|
1312
2043
|
return document.body.classList.contains(ACTIVE_CLASS);
|
1313
2044
|
};
|
1314
2045
|
|
1315
2046
|
var toggleNav = function toggleNav(active) {
|
1316
|
-
var
|
1317
|
-
|
1318
|
-
|
1319
|
-
|
1320
|
-
|
1321
|
-
|
1322
|
-
forEach(select(TOGGLES), function (el) {
|
1323
|
-
el.classList.toggle(VISIBLE_CLASS, active);
|
2047
|
+
var _document = document,
|
2048
|
+
body = _document.body;
|
2049
|
+
var safeActive = typeof active === "boolean" ? active : !isActive();
|
2050
|
+
body.classList.toggle(ACTIVE_CLASS, safeActive);
|
2051
|
+
select(TOGGLES).forEach(function (el) {
|
2052
|
+
return el.classList.toggle(VISIBLE_CLASS, safeActive);
|
1324
2053
|
});
|
1325
|
-
|
2054
|
+
navigation.focusTrap.update(safeActive);
|
1326
2055
|
var closeButton = body.querySelector(CLOSE_BUTTON);
|
1327
2056
|
var menuButton = body.querySelector(OPENERS);
|
1328
2057
|
|
1329
|
-
if (
|
2058
|
+
if (safeActive && closeButton) {
|
1330
2059
|
// The mobile nav was just activated, so focus on the close button,
|
1331
2060
|
// which is just before all the nav elements in the tab order.
|
1332
2061
|
closeButton.focus();
|
1333
|
-
} else if (!
|
2062
|
+
} else if (!safeActive && document.activeElement === closeButton && menuButton) {
|
1334
2063
|
// The mobile nav was just deactivated, and focus was on the close
|
1335
2064
|
// button, which is no longer visible. We don't want the focus to
|
1336
2065
|
// disappear into the void, so focus on the menu button if it's
|
@@ -1339,109 +2068,134 @@ var toggleNav = function toggleNav(active) {
|
|
1339
2068
|
menuButton.focus();
|
1340
2069
|
}
|
1341
2070
|
|
1342
|
-
return
|
2071
|
+
return safeActive;
|
1343
2072
|
};
|
1344
2073
|
|
1345
2074
|
var resize = function resize() {
|
1346
2075
|
var closer = document.body.querySelector(CLOSE_BUTTON);
|
1347
2076
|
|
1348
2077
|
if (isActive() && closer && closer.getBoundingClientRect().width === 0) {
|
1349
|
-
//
|
1350
|
-
//
|
1351
|
-
//
|
1352
|
-
|
1353
|
-
toggleNav.call(closer, false);
|
2078
|
+
// When the mobile nav is active, and the close box isn't visible,
|
2079
|
+
// we know the user's viewport has been resized to be larger.
|
2080
|
+
// Let's make the page state consistent by deactivating the mobile nav.
|
2081
|
+
navigation.toggleNav.call(closer, false);
|
1354
2082
|
}
|
1355
2083
|
};
|
1356
2084
|
|
1357
|
-
var
|
2085
|
+
var onMenuClose = function onMenuClose() {
|
2086
|
+
return navigation.toggleNav.call(navigation, false);
|
2087
|
+
};
|
2088
|
+
|
2089
|
+
var hideActiveNavDropdown = function hideActiveNavDropdown() {
|
2090
|
+
toggle(navActive, false);
|
2091
|
+
navActive = null;
|
2092
|
+
};
|
2093
|
+
|
2094
|
+
navigation = behavior(_defineProperty({}, CLICK, (_CLICK = {}, _defineProperty(_CLICK, NAV_CONTROL, function () {
|
2095
|
+
// If another nav is open, close it
|
2096
|
+
if (navActive && navActive !== this) {
|
2097
|
+
hideActiveNavDropdown();
|
2098
|
+
} // store a reference to the last clicked nav link element, so we
|
2099
|
+
// can hide the dropdown if another element on the page is clicked
|
2100
|
+
|
2101
|
+
|
2102
|
+
if (navActive) {
|
2103
|
+
hideActiveNavDropdown();
|
2104
|
+
} else {
|
2105
|
+
navActive = this;
|
2106
|
+
toggle(navActive, true);
|
2107
|
+
} // Do this so the event handler on the body doesn't fire
|
2108
|
+
|
2109
|
+
|
2110
|
+
return false;
|
2111
|
+
}), _defineProperty(_CLICK, BODY, function () {
|
2112
|
+
if (navActive) {
|
2113
|
+
hideActiveNavDropdown();
|
2114
|
+
}
|
2115
|
+
}), _defineProperty(_CLICK, OPENERS, toggleNav), _defineProperty(_CLICK, CLOSERS, toggleNav), _defineProperty(_CLICK, NAV_LINKS, function () {
|
1358
2116
|
// A navigation link has been clicked! We want to collapse any
|
1359
2117
|
// hierarchical navigation UI it's a part of, so that the user
|
1360
2118
|
// can focus on whatever they've just selected.
|
1361
|
-
|
1362
2119
|
// Some navigation links are inside accordions; when they're
|
1363
2120
|
// clicked, we want to collapse those accordions.
|
1364
2121
|
var acc = this.closest(accordion.ACCORDION);
|
2122
|
+
|
1365
2123
|
if (acc) {
|
1366
2124
|
accordion.getButtons(acc).forEach(function (btn) {
|
1367
2125
|
return accordion.hide(btn);
|
1368
2126
|
});
|
1369
|
-
}
|
2127
|
+
} // If the mobile navigation menu is active, we want to hide it.
|
2128
|
+
|
1370
2129
|
|
1371
|
-
// If the mobile navigation menu is active, we want to hide it.
|
1372
2130
|
if (isActive()) {
|
1373
|
-
toggleNav.call(
|
2131
|
+
navigation.toggleNav.call(navigation, false);
|
1374
2132
|
}
|
1375
2133
|
}), _CLICK)), {
|
1376
|
-
init: function init() {
|
2134
|
+
init: function init(root) {
|
2135
|
+
var trapContainer = root.querySelector(NAV);
|
2136
|
+
|
2137
|
+
if (trapContainer) {
|
2138
|
+
navigation.focusTrap = FocusTrap(trapContainer, {
|
2139
|
+
Escape: onMenuClose
|
2140
|
+
});
|
2141
|
+
}
|
2142
|
+
|
1377
2143
|
resize();
|
1378
|
-
window.addEventListener(
|
2144
|
+
window.addEventListener("resize", resize, false);
|
1379
2145
|
},
|
1380
2146
|
teardown: function teardown() {
|
1381
|
-
window.removeEventListener(
|
1382
|
-
|
2147
|
+
window.removeEventListener("resize", resize, false);
|
2148
|
+
navActive = false;
|
2149
|
+
},
|
2150
|
+
focusTrap: null,
|
2151
|
+
toggleNav: toggleNav
|
1383
2152
|
});
|
2153
|
+
module.exports = navigation;
|
1384
2154
|
|
1385
|
-
|
1386
|
-
|
1387
|
-
*
|
1388
|
-
* module.exports = behavior({...});
|
1389
|
-
*/
|
1390
|
-
var assign = require('object-assign');
|
1391
|
-
module.exports = assign(function (el) {
|
1392
|
-
return navigation.on(el);
|
1393
|
-
}, navigation);
|
1394
|
-
|
1395
|
-
},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/select":32,"./accordion":16,"array-foreach":2,"object-assign":8}],21:[function(require,module,exports){
|
1396
|
-
'use strict';
|
2155
|
+
},{"../config":28,"../events":29,"../utils/behavior":34,"../utils/focus-trap":35,"../utils/select":37,"../utils/toggle":40,"./accordion":17}],24:[function(require,module,exports){
|
2156
|
+
"use strict";
|
1397
2157
|
|
1398
2158
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
1399
2159
|
|
1400
|
-
var behavior = require(
|
1401
|
-
|
2160
|
+
var behavior = require("../utils/behavior");
|
2161
|
+
|
2162
|
+
var toggleFormInput = require("../utils/toggle-form-input");
|
1402
2163
|
|
1403
|
-
var
|
1404
|
-
|
2164
|
+
var _require = require("../events"),
|
2165
|
+
CLICK = _require.CLICK;
|
1405
2166
|
|
1406
|
-
var
|
2167
|
+
var _require2 = require("../config"),
|
2168
|
+
PREFIX = _require2.prefix;
|
1407
2169
|
|
1408
|
-
var
|
2170
|
+
var LINK = ".".concat(PREFIX, "-show-password, .").concat(PREFIX, "-show-multipassword");
|
2171
|
+
|
2172
|
+
function toggle(event) {
|
1409
2173
|
event.preventDefault();
|
1410
2174
|
toggleFormInput(this);
|
1411
|
-
}
|
2175
|
+
}
|
1412
2176
|
|
1413
2177
|
module.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, LINK, toggle)));
|
1414
2178
|
|
1415
|
-
},{"../config":
|
1416
|
-
|
2179
|
+
},{"../config":28,"../events":29,"../utils/behavior":34,"../utils/toggle-form-input":39}],25:[function(require,module,exports){
|
2180
|
+
"use strict";
|
1417
2181
|
|
1418
2182
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
1419
2183
|
|
1420
|
-
var
|
1421
|
-
var forEach = require('array-foreach');
|
1422
|
-
var ignore = require('receptor/ignore');
|
1423
|
-
var select = require('../utils/select');
|
2184
|
+
var ignore = require("receptor/ignore");
|
1424
2185
|
|
1425
|
-
var
|
1426
|
-
var PREFIX = require('../config').prefix;
|
2186
|
+
var behavior = require("../utils/behavior");
|
1427
2187
|
|
1428
|
-
var
|
1429
|
-
var FORM = '.js-search-form';
|
1430
|
-
var INPUT = '[type=search]';
|
1431
|
-
var CONTEXT = 'header'; // XXX
|
1432
|
-
var VISUALLY_HIDDEN = PREFIX + '-sr-only';
|
2188
|
+
var select = require("../utils/select");
|
1433
2189
|
|
1434
|
-
var
|
2190
|
+
var _require = require("../events"),
|
2191
|
+
CLICK = _require.CLICK;
|
1435
2192
|
|
1436
|
-
var
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
2193
|
+
var BUTTON = ".js-search-button";
|
2194
|
+
var FORM = ".js-search-form";
|
2195
|
+
var INPUT = "[type=search]";
|
2196
|
+
var CONTEXT = "header"; // XXX
|
1440
2197
|
|
1441
|
-
var
|
1442
|
-
toggleSearch(this, false);
|
1443
|
-
lastButton = undefined;
|
1444
|
-
};
|
2198
|
+
var lastButton;
|
1445
2199
|
|
1446
2200
|
var getForm = function getForm(button) {
|
1447
2201
|
var context = button.closest(CONTEXT);
|
@@ -1450,125 +2204,133 @@ var getForm = function getForm(button) {
|
|
1450
2204
|
|
1451
2205
|
var toggleSearch = function toggleSearch(button, active) {
|
1452
2206
|
var form = getForm(button);
|
2207
|
+
|
1453
2208
|
if (!form) {
|
1454
|
-
throw new Error(
|
2209
|
+
throw new Error("No ".concat(FORM, " found for search toggle in ").concat(CONTEXT, "!"));
|
1455
2210
|
}
|
2211
|
+
/* eslint-disable no-param-reassign */
|
2212
|
+
|
1456
2213
|
|
1457
2214
|
button.hidden = active;
|
1458
|
-
form.
|
2215
|
+
form.hidden = !active;
|
2216
|
+
/* eslint-enable */
|
2217
|
+
|
2218
|
+
if (!active) {
|
2219
|
+
return;
|
2220
|
+
}
|
1459
2221
|
|
1460
|
-
|
1461
|
-
|
1462
|
-
|
1463
|
-
|
2222
|
+
var input = form.querySelector(INPUT);
|
2223
|
+
|
2224
|
+
if (input) {
|
2225
|
+
input.focus();
|
2226
|
+
} // when the user clicks _outside_ of the form w/ignore(): hide the
|
2227
|
+
// search, then remove the listener
|
2228
|
+
|
2229
|
+
|
2230
|
+
var listener = ignore(form, function () {
|
2231
|
+
if (lastButton) {
|
2232
|
+
hideSearch.call(lastButton); // eslint-disable-line no-use-before-define
|
1464
2233
|
}
|
1465
|
-
// when the user clicks _outside_ of the form w/ignore(): hide the
|
1466
|
-
// search, then remove the listener
|
1467
|
-
var listener = ignore(form, function (e) {
|
1468
|
-
if (lastButton) {
|
1469
|
-
hideSearch.call(lastButton);
|
1470
|
-
}
|
1471
|
-
document.body.removeEventListener(CLICK, listener);
|
1472
|
-
});
|
1473
2234
|
|
1474
|
-
|
1475
|
-
|
1476
|
-
|
1477
|
-
|
1478
|
-
|
1479
|
-
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
2235
|
+
document.body.removeEventListener(CLICK, listener);
|
2236
|
+
}); // Normally we would just run this code without a timeout, but
|
2237
|
+
// IE11 and Edge will actually call the listener *immediately* because
|
2238
|
+
// they are currently handling this exact type of event, so we'll
|
2239
|
+
// make sure the browser is done handling the current click event,
|
2240
|
+
// if any, before we attach the listener.
|
2241
|
+
|
2242
|
+
setTimeout(function () {
|
2243
|
+
document.body.addEventListener(CLICK, listener);
|
2244
|
+
}, 0);
|
1483
2245
|
};
|
1484
2246
|
|
2247
|
+
function showSearch() {
|
2248
|
+
toggleSearch(this, true);
|
2249
|
+
lastButton = this;
|
2250
|
+
}
|
2251
|
+
|
2252
|
+
function hideSearch() {
|
2253
|
+
toggleSearch(this, false);
|
2254
|
+
lastButton = undefined;
|
2255
|
+
}
|
2256
|
+
|
1485
2257
|
var search = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, showSearch)), {
|
1486
2258
|
init: function init(target) {
|
1487
|
-
|
2259
|
+
select(BUTTON, target).forEach(function (button) {
|
1488
2260
|
toggleSearch(button, false);
|
1489
2261
|
});
|
1490
2262
|
},
|
1491
|
-
teardown: function teardown(
|
2263
|
+
teardown: function teardown() {
|
1492
2264
|
// forget the last button clicked
|
1493
2265
|
lastButton = undefined;
|
1494
2266
|
}
|
1495
2267
|
});
|
2268
|
+
module.exports = search;
|
1496
2269
|
|
1497
|
-
|
1498
|
-
|
1499
|
-
*
|
1500
|
-
* module.exports = behavior({...});
|
1501
|
-
*/
|
1502
|
-
var assign = require('object-assign');
|
1503
|
-
module.exports = assign(function (el) {
|
1504
|
-
return search.on(el);
|
1505
|
-
}, search);
|
1506
|
-
|
1507
|
-
},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/select":32,"array-foreach":2,"object-assign":8,"receptor/ignore":13}],23:[function(require,module,exports){
|
1508
|
-
'use strict';
|
2270
|
+
},{"../events":29,"../utils/behavior":34,"../utils/select":37,"receptor/ignore":12}],26:[function(require,module,exports){
|
2271
|
+
"use strict";
|
1509
2272
|
|
1510
2273
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
1511
2274
|
|
1512
|
-
var
|
1513
|
-
|
2275
|
+
var once = require("receptor/once");
|
2276
|
+
|
2277
|
+
var behavior = require("../utils/behavior");
|
2278
|
+
|
2279
|
+
var _require = require("../events"),
|
2280
|
+
CLICK = _require.CLICK;
|
1514
2281
|
|
1515
|
-
var
|
1516
|
-
|
1517
|
-
var LINK = '.' + PREFIX + '-skipnav[href^="#"]';
|
2282
|
+
var _require2 = require("../config"),
|
2283
|
+
PREFIX = _require2.prefix;
|
1518
2284
|
|
1519
|
-
var
|
2285
|
+
var LINK = ".".concat(PREFIX, "-skipnav[href^=\"#\"], .").concat(PREFIX, "-footer__return-to-top [href^=\"#\"]");
|
2286
|
+
var MAINCONTENT = "main-content";
|
2287
|
+
|
2288
|
+
function setTabindex() {
|
1520
2289
|
// NB: we know because of the selector we're delegating to below that the
|
1521
2290
|
// href already begins with '#'
|
1522
|
-
var id = this.getAttribute(
|
1523
|
-
var target = document.getElementById(id);
|
2291
|
+
var id = this.getAttribute("href");
|
2292
|
+
var target = document.getElementById(id === "#" ? MAINCONTENT : id.slice(1));
|
2293
|
+
|
1524
2294
|
if (target) {
|
1525
|
-
target.
|
1526
|
-
target.
|
1527
|
-
|
2295
|
+
target.style.outline = "0";
|
2296
|
+
target.setAttribute("tabindex", 0);
|
2297
|
+
target.focus();
|
2298
|
+
target.addEventListener("blur", once(function () {
|
2299
|
+
target.setAttribute("tabindex", -1);
|
1528
2300
|
}));
|
1529
|
-
} else {
|
1530
|
-
// throw an error?
|
2301
|
+
} else {// throw an error?
|
1531
2302
|
}
|
1532
|
-
}
|
2303
|
+
}
|
1533
2304
|
|
1534
2305
|
module.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, LINK, setTabindex)));
|
1535
2306
|
|
1536
|
-
},{"../config":
|
1537
|
-
|
2307
|
+
},{"../config":28,"../events":29,"../utils/behavior":34,"receptor/once":15}],27:[function(require,module,exports){
|
2308
|
+
"use strict";
|
1538
2309
|
|
1539
|
-
var behavior = require(
|
1540
|
-
var validate = require('../utils/validate-input');
|
1541
|
-
var debounce = require('lodash.debounce');
|
2310
|
+
var behavior = require("../utils/behavior");
|
1542
2311
|
|
1543
|
-
var
|
1544
|
-
|
1545
|
-
|
2312
|
+
var validate = require("../utils/validate-input");
|
2313
|
+
|
2314
|
+
function change() {
|
2315
|
+
validate(this);
|
2316
|
+
}
|
1546
2317
|
|
1547
2318
|
var validator = behavior({
|
1548
|
-
|
1549
|
-
|
2319
|
+
"keyup change": {
|
2320
|
+
"input[data-validation-element]": change
|
1550
2321
|
}
|
1551
2322
|
});
|
2323
|
+
module.exports = validator;
|
1552
2324
|
|
1553
|
-
|
1554
|
-
|
1555
|
-
*
|
1556
|
-
* module.exports = behavior({...});
|
1557
|
-
*/
|
1558
|
-
var assign = require('object-assign');
|
1559
|
-
module.exports = assign(function (el) {
|
1560
|
-
return validator.on(el);
|
1561
|
-
}, validator);
|
1562
|
-
|
1563
|
-
},{"../utils/behavior":30,"../utils/validate-input":36,"lodash.debounce":7,"object-assign":8}],25:[function(require,module,exports){
|
1564
|
-
'use strict';
|
2325
|
+
},{"../utils/behavior":34,"../utils/validate-input":41}],28:[function(require,module,exports){
|
2326
|
+
"use strict";
|
1565
2327
|
|
1566
2328
|
module.exports = {
|
1567
|
-
prefix:
|
2329
|
+
prefix: "usa"
|
1568
2330
|
};
|
1569
2331
|
|
1570
|
-
},{}],
|
1571
|
-
|
2332
|
+
},{}],29:[function(require,module,exports){
|
2333
|
+
"use strict";
|
1572
2334
|
|
1573
2335
|
module.exports = {
|
1574
2336
|
// This used to be conditionally dependent on whether the
|
@@ -1583,14 +2345,14 @@ module.exports = {
|
|
1583
2345
|
// touch and clicks. This meant the conditional effectively dropped
|
1584
2346
|
// support for the user's mouse, frustrating users who preferred
|
1585
2347
|
// it on those systems.
|
1586
|
-
CLICK:
|
2348
|
+
CLICK: "click"
|
1587
2349
|
};
|
1588
2350
|
|
1589
|
-
},{}],
|
1590
|
-
|
2351
|
+
},{}],30:[function(require,module,exports){
|
2352
|
+
"use strict";
|
1591
2353
|
|
1592
2354
|
var elproto = window.HTMLElement.prototype;
|
1593
|
-
var HIDDEN =
|
2355
|
+
var HIDDEN = "hidden";
|
1594
2356
|
|
1595
2357
|
if (!(HIDDEN in elproto)) {
|
1596
2358
|
Object.defineProperty(elproto, HIDDEN, {
|
@@ -1599,7 +2361,7 @@ if (!(HIDDEN in elproto)) {
|
|
1599
2361
|
},
|
1600
2362
|
set: function set(value) {
|
1601
2363
|
if (value) {
|
1602
|
-
this.setAttribute(HIDDEN,
|
2364
|
+
this.setAttribute(HIDDEN, "");
|
1603
2365
|
} else {
|
1604
2366
|
this.removeAttribute(HIDDEN);
|
1605
2367
|
}
|
@@ -1607,93 +2369,185 @@ if (!(HIDDEN in elproto)) {
|
|
1607
2369
|
});
|
1608
2370
|
}
|
1609
2371
|
|
1610
|
-
},{}],
|
1611
|
-
|
2372
|
+
},{}],31:[function(require,module,exports){
|
2373
|
+
"use strict";
|
2374
|
+
|
1612
2375
|
// polyfills HTMLElement.prototype.classList and DOMTokenList
|
2376
|
+
require("classlist-polyfill"); // polyfills HTMLElement.prototype.hidden
|
1613
2377
|
|
1614
|
-
require('classlist-polyfill');
|
1615
|
-
// polyfills HTMLElement.prototype.hidden
|
1616
|
-
require('./element-hidden');
|
1617
2378
|
|
1618
|
-
|
1619
|
-
'use strict';
|
2379
|
+
require("./element-hidden");
|
1620
2380
|
|
1621
|
-
|
2381
|
+
},{"./element-hidden":30,"classlist-polyfill":1}],32:[function(require,module,exports){
|
2382
|
+
"use strict";
|
1622
2383
|
|
2384
|
+
var domready = require("domready");
|
1623
2385
|
/**
|
1624
2386
|
* The 'polyfills' define key ECMAScript 5 methods that may be missing from
|
1625
2387
|
* older browsers, so must be loaded first.
|
1626
2388
|
*/
|
1627
|
-
require('./polyfills');
|
1628
2389
|
|
1629
|
-
var uswds = require('./config');
|
1630
2390
|
|
1631
|
-
|
1632
|
-
|
2391
|
+
require("./polyfills");
|
2392
|
+
|
2393
|
+
var uswds = require("./config");
|
2394
|
+
|
2395
|
+
var components = require("./components");
|
1633
2396
|
|
2397
|
+
uswds.components = components;
|
1634
2398
|
domready(function () {
|
1635
2399
|
var target = document.body;
|
1636
|
-
|
1637
|
-
var behavior = components[
|
2400
|
+
Object.keys(components).forEach(function (key) {
|
2401
|
+
var behavior = components[key];
|
1638
2402
|
behavior.on(target);
|
1639
|
-
}
|
2403
|
+
});
|
1640
2404
|
});
|
1641
|
-
|
1642
2405
|
module.exports = uswds;
|
1643
2406
|
|
1644
|
-
},{"./components":
|
1645
|
-
|
2407
|
+
},{"./components":22,"./config":28,"./polyfills":31,"domready":2}],33:[function(require,module,exports){
|
2408
|
+
"use strict";
|
2409
|
+
|
2410
|
+
module.exports = function () {
|
2411
|
+
var htmlDocument = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;
|
2412
|
+
return htmlDocument.activeElement;
|
2413
|
+
};
|
2414
|
+
|
2415
|
+
},{}],34:[function(require,module,exports){
|
2416
|
+
"use strict";
|
2417
|
+
|
2418
|
+
var assign = require("object-assign");
|
2419
|
+
|
2420
|
+
var Behavior = require("receptor/behavior");
|
2421
|
+
/**
|
2422
|
+
* @name sequence
|
2423
|
+
* @param {...Function} seq an array of functions
|
2424
|
+
* @return { closure } callHooks
|
2425
|
+
*/
|
2426
|
+
// We use a named function here because we want it to inherit its lexical scope
|
2427
|
+
// from the behavior props object, not from the module
|
1646
2428
|
|
1647
|
-
var assign = require('object-assign');
|
1648
|
-
var forEach = require('array-foreach');
|
1649
|
-
var Behavior = require('receptor/behavior');
|
1650
2429
|
|
1651
2430
|
var sequence = function sequence() {
|
1652
|
-
var seq =
|
1653
|
-
|
2431
|
+
for (var _len = arguments.length, seq = new Array(_len), _key = 0; _key < _len; _key++) {
|
2432
|
+
seq[_key] = arguments[_key];
|
2433
|
+
}
|
2434
|
+
|
2435
|
+
return function callHooks() {
|
1654
2436
|
var _this = this;
|
1655
2437
|
|
1656
|
-
|
1657
|
-
|
1658
|
-
|
1659
|
-
forEach(seq, function (method) {
|
1660
|
-
if (typeof _this[method] === 'function') {
|
2438
|
+
var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.body;
|
2439
|
+
seq.forEach(function (method) {
|
2440
|
+
if (typeof _this[method] === "function") {
|
1661
2441
|
_this[method].call(_this, target);
|
1662
2442
|
}
|
1663
2443
|
});
|
1664
2444
|
};
|
1665
2445
|
};
|
1666
|
-
|
1667
2446
|
/**
|
1668
2447
|
* @name behavior
|
1669
2448
|
* @param {object} events
|
1670
2449
|
* @param {object?} props
|
1671
2450
|
* @return {receptor.behavior}
|
1672
2451
|
*/
|
2452
|
+
|
2453
|
+
|
1673
2454
|
module.exports = function (events, props) {
|
1674
2455
|
return Behavior(events, assign({
|
1675
|
-
on: sequence(
|
1676
|
-
off: sequence(
|
2456
|
+
on: sequence("init", "add"),
|
2457
|
+
off: sequence("teardown", "remove")
|
1677
2458
|
}, props));
|
1678
2459
|
};
|
1679
2460
|
|
1680
|
-
},{"
|
2461
|
+
},{"object-assign":7,"receptor/behavior":8}],35:[function(require,module,exports){
|
2462
|
+
"use strict";
|
2463
|
+
|
2464
|
+
var assign = require("object-assign");
|
2465
|
+
|
2466
|
+
var _require = require("receptor"),
|
2467
|
+
keymap = _require.keymap;
|
2468
|
+
|
2469
|
+
var behavior = require("./behavior");
|
2470
|
+
|
2471
|
+
var select = require("./select");
|
2472
|
+
|
2473
|
+
var activeElement = require("./active-element");
|
2474
|
+
|
2475
|
+
var FOCUSABLE = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex="0"], [contenteditable]';
|
2476
|
+
|
2477
|
+
var tabHandler = function tabHandler(context) {
|
2478
|
+
var focusableElements = select(FOCUSABLE, context);
|
2479
|
+
var firstTabStop = focusableElements[0];
|
2480
|
+
var lastTabStop = focusableElements[focusableElements.length - 1]; // Special rules for when the user is tabbing forward from the last focusable element,
|
2481
|
+
// or when tabbing backwards from the first focusable element
|
2482
|
+
|
2483
|
+
function tabAhead(event) {
|
2484
|
+
if (activeElement() === lastTabStop) {
|
2485
|
+
event.preventDefault();
|
2486
|
+
firstTabStop.focus();
|
2487
|
+
}
|
2488
|
+
}
|
2489
|
+
|
2490
|
+
function tabBack(event) {
|
2491
|
+
if (activeElement() === firstTabStop) {
|
2492
|
+
event.preventDefault();
|
2493
|
+
lastTabStop.focus();
|
2494
|
+
}
|
2495
|
+
}
|
2496
|
+
|
2497
|
+
return {
|
2498
|
+
firstTabStop: firstTabStop,
|
2499
|
+
lastTabStop: lastTabStop,
|
2500
|
+
tabAhead: tabAhead,
|
2501
|
+
tabBack: tabBack
|
2502
|
+
};
|
2503
|
+
};
|
2504
|
+
|
2505
|
+
module.exports = function (context) {
|
2506
|
+
var additionalKeyBindings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
2507
|
+
var tabEventHandler = tabHandler(context); // TODO: In the future, loop over additional keybindings and pass an array
|
2508
|
+
// of functions, if necessary, to the map keys. Then people implementing
|
2509
|
+
// the focus trap could pass callbacks to fire when tabbing
|
2510
|
+
|
2511
|
+
var keyMappings = keymap(assign({
|
2512
|
+
Tab: tabEventHandler.tabAhead,
|
2513
|
+
"Shift+Tab": tabEventHandler.tabBack
|
2514
|
+
}, additionalKeyBindings));
|
2515
|
+
var focusTrap = behavior({
|
2516
|
+
keydown: keyMappings
|
2517
|
+
}, {
|
2518
|
+
init: function init() {
|
2519
|
+
// TODO: is this desireable behavior? Should the trap always do this by default or should
|
2520
|
+
// the component getting decorated handle this?
|
2521
|
+
tabEventHandler.firstTabStop.focus();
|
2522
|
+
},
|
2523
|
+
update: function update(isActive) {
|
2524
|
+
if (isActive) {
|
2525
|
+
this.on();
|
2526
|
+
} else {
|
2527
|
+
this.off();
|
2528
|
+
}
|
2529
|
+
}
|
2530
|
+
});
|
2531
|
+
return focusTrap;
|
2532
|
+
};
|
2533
|
+
|
2534
|
+
},{"./active-element":33,"./behavior":34,"./select":37,"object-assign":7,"receptor":13}],36:[function(require,module,exports){
|
1681
2535
|
"use strict";
|
1682
2536
|
|
1683
2537
|
// https://stackoverflow.com/a/7557433
|
1684
2538
|
function isElementInViewport(el) {
|
1685
2539
|
var win = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;
|
1686
2540
|
var docEl = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document.documentElement;
|
1687
|
-
|
1688
2541
|
var rect = el.getBoundingClientRect();
|
1689
|
-
|
1690
2542
|
return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (win.innerHeight || docEl.clientHeight) && rect.right <= (win.innerWidth || docEl.clientWidth);
|
1691
2543
|
}
|
1692
2544
|
|
1693
2545
|
module.exports = isElementInViewport;
|
1694
2546
|
|
1695
|
-
},{}],
|
1696
|
-
|
2547
|
+
},{}],37:[function(require,module,exports){
|
2548
|
+
"use strict";
|
2549
|
+
|
2550
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
1697
2551
|
|
1698
2552
|
/**
|
1699
2553
|
* @name isElement
|
@@ -1701,13 +2555,9 @@ module.exports = isElementInViewport;
|
|
1701
2555
|
* @param {any} value
|
1702
2556
|
* @return {boolean}
|
1703
2557
|
*/
|
1704
|
-
|
1705
|
-
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
1706
|
-
|
1707
2558
|
var isElement = function isElement(value) {
|
1708
|
-
return value &&
|
2559
|
+
return value && _typeof(value) === "object" && value.nodeType === 1;
|
1709
2560
|
};
|
1710
|
-
|
1711
2561
|
/**
|
1712
2562
|
* @name select
|
1713
2563
|
* @desc selects elements from the DOM by class selector or ID selector.
|
@@ -1716,22 +2566,23 @@ var isElement = function isElement(value) {
|
|
1716
2566
|
* in. If not provided, it defaults to the document.
|
1717
2567
|
* @return {HTMLElement[]} - An array of DOM nodes or an empty array.
|
1718
2568
|
*/
|
1719
|
-
module.exports = function select(selector, context) {
|
1720
2569
|
|
1721
|
-
|
2570
|
+
|
2571
|
+
module.exports = function (selector, context) {
|
2572
|
+
if (typeof selector !== "string") {
|
1722
2573
|
return [];
|
1723
2574
|
}
|
1724
2575
|
|
1725
2576
|
if (!context || !isElement(context)) {
|
1726
|
-
context = window.document;
|
2577
|
+
context = window.document; // eslint-disable-line no-param-reassign
|
1727
2578
|
}
|
1728
2579
|
|
1729
2580
|
var selection = context.querySelectorAll(selector);
|
1730
2581
|
return Array.prototype.slice.call(selection);
|
1731
2582
|
};
|
1732
2583
|
|
1733
|
-
},{}],
|
1734
|
-
|
2584
|
+
},{}],38:[function(require,module,exports){
|
2585
|
+
"use strict";
|
1735
2586
|
|
1736
2587
|
/**
|
1737
2588
|
* Flips given INPUT elements between masked (hiding the field value) and unmasked
|
@@ -1739,35 +2590,33 @@ module.exports = function select(selector, context) {
|
|
1739
2590
|
* @param {Boolean} mask - Whether the mask should be applied, hiding the field value
|
1740
2591
|
*/
|
1741
2592
|
module.exports = function (field, mask) {
|
1742
|
-
field.setAttribute(
|
1743
|
-
field.setAttribute(
|
1744
|
-
field.setAttribute(
|
2593
|
+
field.setAttribute("autocapitalize", "off");
|
2594
|
+
field.setAttribute("autocorrect", "off");
|
2595
|
+
field.setAttribute("type", mask ? "password" : "text");
|
1745
2596
|
};
|
1746
2597
|
|
1747
|
-
},{}],
|
1748
|
-
|
2598
|
+
},{}],39:[function(require,module,exports){
|
2599
|
+
"use strict";
|
1749
2600
|
|
1750
|
-
var
|
1751
|
-
var resolveIdRefs = require('resolve-id-refs');
|
1752
|
-
var select = require('./select');
|
1753
|
-
var toggleFieldMask = require('./toggle-field-mask');
|
2601
|
+
var resolveIdRefs = require("resolve-id-refs");
|
1754
2602
|
|
1755
|
-
var
|
1756
|
-
var PRESSED = 'aria-pressed';
|
1757
|
-
var SHOW_ATTR = 'data-show-text';
|
1758
|
-
var HIDE_ATTR = 'data-hide-text';
|
2603
|
+
var toggleFieldMask = require("./toggle-field-mask");
|
1759
2604
|
|
2605
|
+
var CONTROLS = "aria-controls";
|
2606
|
+
var PRESSED = "aria-pressed";
|
2607
|
+
var SHOW_ATTR = "data-show-text";
|
2608
|
+
var HIDE_ATTR = "data-hide-text";
|
1760
2609
|
/**
|
1761
2610
|
* Replace the word "Show" (or "show") with "Hide" (or "hide") in a string.
|
1762
2611
|
* @param {string} showText
|
1763
2612
|
* @return {strong} hideText
|
1764
2613
|
*/
|
2614
|
+
|
1765
2615
|
var getHideText = function getHideText(showText) {
|
1766
2616
|
return showText.replace(/\bShow\b/i, function (show) {
|
1767
|
-
return (
|
2617
|
+
return "".concat(show[0] === "S" ? "H" : "h", "ide");
|
1768
2618
|
});
|
1769
2619
|
};
|
1770
|
-
|
1771
2620
|
/**
|
1772
2621
|
* Component that decorates an HTML element with the ability to toggle the
|
1773
2622
|
* masked state of an input field (like a password) when clicked.
|
@@ -1777,14 +2626,15 @@ var getHideText = function getHideText(showText) {
|
|
1777
2626
|
* @param {HTMLElement} el Parent element containing the fields to be masked
|
1778
2627
|
* @return {boolean}
|
1779
2628
|
*/
|
2629
|
+
|
2630
|
+
|
1780
2631
|
module.exports = function (el) {
|
1781
2632
|
// this is the *target* state:
|
1782
2633
|
// * if the element has the attr and it's !== "true", pressed is true
|
1783
2634
|
// * otherwise, pressed is false
|
1784
|
-
var pressed = el.hasAttribute(PRESSED) && el.getAttribute(PRESSED) !==
|
1785
|
-
|
2635
|
+
var pressed = el.hasAttribute(PRESSED) && el.getAttribute(PRESSED) !== "true";
|
1786
2636
|
var fields = resolveIdRefs(el.getAttribute(CONTROLS));
|
1787
|
-
forEach(
|
2637
|
+
fields.forEach(function (field) {
|
1788
2638
|
return toggleFieldMask(field, pressed);
|
1789
2639
|
});
|
1790
2640
|
|
@@ -1794,70 +2644,92 @@ module.exports = function (el) {
|
|
1794
2644
|
|
1795
2645
|
var showText = el.getAttribute(SHOW_ATTR);
|
1796
2646
|
var hideText = el.getAttribute(HIDE_ATTR) || getHideText(showText);
|
2647
|
+
el.textContent = pressed ? showText : hideText; // eslint-disable-line no-param-reassign
|
1797
2648
|
|
1798
|
-
el.textContent = pressed ? showText : hideText;
|
1799
2649
|
el.setAttribute(PRESSED, pressed);
|
1800
2650
|
return pressed;
|
1801
2651
|
};
|
1802
2652
|
|
1803
|
-
},{"./
|
1804
|
-
|
2653
|
+
},{"./toggle-field-mask":38,"resolve-id-refs":16}],40:[function(require,module,exports){
|
2654
|
+
"use strict";
|
1805
2655
|
|
1806
|
-
var EXPANDED =
|
1807
|
-
var CONTROLS =
|
1808
|
-
var HIDDEN =
|
2656
|
+
var EXPANDED = "aria-expanded";
|
2657
|
+
var CONTROLS = "aria-controls";
|
2658
|
+
var HIDDEN = "hidden";
|
1809
2659
|
|
1810
2660
|
module.exports = function (button, expanded) {
|
2661
|
+
var safeExpanded = expanded;
|
1811
2662
|
|
1812
|
-
if (typeof
|
1813
|
-
|
2663
|
+
if (typeof safeExpanded !== "boolean") {
|
2664
|
+
safeExpanded = button.getAttribute(EXPANDED) === "false";
|
1814
2665
|
}
|
1815
|
-
button.setAttribute(EXPANDED, expanded);
|
1816
2666
|
|
2667
|
+
button.setAttribute(EXPANDED, safeExpanded);
|
1817
2668
|
var id = button.getAttribute(CONTROLS);
|
1818
2669
|
var controls = document.getElementById(id);
|
2670
|
+
|
1819
2671
|
if (!controls) {
|
1820
|
-
throw new Error(
|
2672
|
+
throw new Error("No toggle target found with id: \"".concat(id, "\""));
|
1821
2673
|
}
|
1822
2674
|
|
1823
|
-
|
1824
|
-
|
2675
|
+
if (safeExpanded) {
|
2676
|
+
controls.removeAttribute(HIDDEN);
|
2677
|
+
} else {
|
2678
|
+
controls.setAttribute(HIDDEN, "");
|
2679
|
+
}
|
2680
|
+
|
2681
|
+
return safeExpanded;
|
1825
2682
|
};
|
1826
2683
|
|
1827
|
-
},{}],
|
1828
|
-
|
2684
|
+
},{}],41:[function(require,module,exports){
|
2685
|
+
"use strict";
|
2686
|
+
|
2687
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
|
2688
|
+
|
2689
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
|
1829
2690
|
|
1830
|
-
var
|
2691
|
+
function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
1831
2692
|
|
1832
|
-
|
1833
|
-
|
1834
|
-
var
|
2693
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
2694
|
+
|
2695
|
+
var dataset = require("elem-dataset");
|
2696
|
+
|
2697
|
+
var _require = require("../config"),
|
2698
|
+
PREFIX = _require.prefix;
|
2699
|
+
|
2700
|
+
var CHECKED = "aria-checked";
|
2701
|
+
var CHECKED_CLASS = "".concat(PREFIX, "-checklist__item--checked");
|
1835
2702
|
|
1836
2703
|
module.exports = function validate(el) {
|
1837
2704
|
var data = dataset(el);
|
1838
2705
|
var id = data.validationElement;
|
1839
|
-
var checkList = id.charAt(0) ===
|
2706
|
+
var checkList = id.charAt(0) === "#" ? document.querySelector(id) : document.getElementById(id);
|
1840
2707
|
|
1841
2708
|
if (!checkList) {
|
1842
|
-
throw new Error(
|
2709
|
+
throw new Error("No validation element found with id: \"".concat(id, "\""));
|
1843
2710
|
}
|
1844
2711
|
|
1845
|
-
|
1846
|
-
|
1847
|
-
|
1848
|
-
|
1849
|
-
|
2712
|
+
Object.entries(data).forEach(function (_ref) {
|
2713
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
2714
|
+
key = _ref2[0],
|
2715
|
+
value = _ref2[1];
|
2716
|
+
|
2717
|
+
if (key.startsWith("validate")) {
|
2718
|
+
var validatorName = key.substr("validate".length).toLowerCase();
|
2719
|
+
var validatorPattern = new RegExp(value);
|
2720
|
+
var validatorSelector = "[data-validator=\"".concat(validatorName, "\"]");
|
1850
2721
|
var validatorCheckbox = checkList.querySelector(validatorSelector);
|
2722
|
+
|
1851
2723
|
if (!validatorCheckbox) {
|
1852
|
-
throw new Error(
|
2724
|
+
throw new Error("No validator checkbox found for: \"".concat(validatorName, "\""));
|
1853
2725
|
}
|
1854
2726
|
|
1855
2727
|
var checked = validatorPattern.test(el.value);
|
1856
2728
|
validatorCheckbox.classList.toggle(CHECKED_CLASS, checked);
|
1857
2729
|
validatorCheckbox.setAttribute(CHECKED, checked);
|
1858
2730
|
}
|
1859
|
-
}
|
2731
|
+
});
|
1860
2732
|
};
|
1861
2733
|
|
1862
|
-
},{"../config":
|
1863
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYXJyYXktZmlsdGVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FycmF5LWZvcmVhY2gvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2xhc3NsaXN0LXBvbHlmaWxsL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kb21yZWFkeS9yZWFkeS5qcyIsIm5vZGVfbW9kdWxlcy9lbGVtLWRhdGFzZXQvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lbGVtZW50LWNsb3Nlc3QvZWxlbWVudC1jbG9zZXN0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC5kZWJvdW5jZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL2JlaGF2aW9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL2NvbXBvc2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVjZXB0b3IvZGVsZWdhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVjZXB0b3IvZGVsZWdhdGVBbGwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVjZXB0b3IvaWdub3JlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL29uY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb2x2ZS1pZC1yZWZzL2luZGV4LmpzIiwic3JjL2pzL2NvbXBvbmVudHMvYWNjb3JkaW9uLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvYmFubmVyLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvZm9vdGVyLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvaW5kZXguanMiLCJzcmMvanMvY29tcG9uZW50cy9uYXZpZ2F0aW9uLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvcGFzc3dvcmQuanMiLCJzcmMvanMvY29tcG9uZW50cy9zZWFyY2guanMiLCJzcmMvanMvY29tcG9uZW50cy9za2lwbmF2LmpzIiwic3JjL2pzL2NvbXBvbmVudHMvdmFsaWRhdG9yLmpzIiwic3JjL2pzL2NvbmZpZy5qcyIsInNyYy9qcy9ldmVudHMuanMiLCJzcmMvanMvcG9seWZpbGxzL2VsZW1lbnQtaGlkZGVuLmpzIiwic3JjL2pzL3BvbHlmaWxscy9pbmRleC5qcyIsInNyYy9qcy9zdGFydC5qcyIsInNyYy9qcy91dGlscy9iZWhhdmlvci5qcyIsInNyYy9qcy91dGlscy9pcy1pbi12aWV3cG9ydC5qcyIsInNyYy9qcy91dGlscy9zZWxlY3QuanMiLCJzcmMvanMvdXRpbHMvdG9nZ2xlLWZpZWxkLW1hc2suanMiLCJzcmMvanMvdXRpbHMvdG9nZ2xlLWZvcm0taW5wdXQuanMiLCJzcmMvanMvdXRpbHMvdG9nZ2xlLmpzIiwic3JjL2pzL3V0aWxzL3ZhbGlkYXRlLWlucHV0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNDQTs7Ozs7Ozs7OztBQVVBLE9BQU8sT0FBUCxHQUFpQixVQUFVLEdBQVYsRUFBZSxFQUFmLEVBQW1CLElBQW5CLEVBQXlCO0FBQ3hDLE1BQUksSUFBSSxNQUFSLEVBQWdCLE9BQU8sSUFBSSxNQUFKLENBQVcsRUFBWCxFQUFlLElBQWYsQ0FBUDtBQUNoQixNQUFJLEtBQUssQ0FBTCxLQUFXLEdBQVgsSUFBa0IsU0FBUyxHQUEvQixFQUFvQyxNQUFNLElBQUksU0FBSixFQUFOO0FBQ3BDLE1BQUksY0FBYyxPQUFPLEVBQXpCLEVBQTZCLE1BQU0sSUFBSSxTQUFKLEVBQU47QUFDN0IsTUFBSSxNQUFNLEVBQVY7QUFDQSxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUNuQyxRQUFJLENBQUMsT0FBTyxJQUFQLENBQVksR0FBWixFQUFpQixDQUFqQixDQUFMLEVBQTBCO0FBQzFCLFFBQUksTUFBTSxJQUFJLENBQUosQ0FBVjtBQUNBLFFBQUksR0FBRyxJQUFILENBQVEsSUFBUixF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QixXQUE5QixFQUF0QjtBQUNBLFVBQU0sbUJBQW1CLElBQUksTUFBSixDQUFXLEtBQU0sR0FBTixDQUFYLENBQXpCO0FBQ0EsVUFBTSwwQ0FBd0MsYUFBeEMsT0FBTjtBQUNBLFVBQU0sb0JBQW9CLFVBQVUsYUFBVixDQUF3QixpQkFBeEIsQ0FBMUI7QUFDQSxVQUFJLENBQUMsaUJBQUwsRUFBd0I7QUFDdEIsY0FBTSxJQUFJLEtBQUosd0NBQ2lDLGFBRGpDLE9BQU47QUFHRDs7QUFFRCxVQUFNLFVBQVUsaUJBQWlCLElBQWpCLENBQXNCLEdBQUcsS0FBekIsQ0FBaEI7QUFDQSx3QkFBa0IsU0FBbEIsQ0FBNEIsTUFBNUIsQ0FBbUMsYUFBbkMsRUFBa0QsT0FBbEQ7QUFDQSx3QkFBa0IsWUFBbEIsQ0FBK0IsT0FBL0IsRUFBd0MsT0FBeEM7QUFDRDtBQUNGO0FBQ0YsQ0E5QkQiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiXG4vKipcbiAqIEFycmF5I2ZpbHRlci5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge09iamVjdD19IHNlbGZcbiAqIEByZXR1cm4ge0FycmF5fVxuICogQHRocm93IFR5cGVFcnJvclxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyciwgZm4sIHNlbGYpIHtcbiAgaWYgKGFyci5maWx0ZXIpIHJldHVybiBhcnIuZmlsdGVyKGZuLCBzZWxmKTtcbiAgaWYgKHZvaWQgMCA9PT0gYXJyIHx8IG51bGwgPT09IGFycikgdGhyb3cgbmV3IFR5cGVFcnJvcjtcbiAgaWYgKCdmdW5jdGlvbicgIT0gdHlwZW9mIGZuKSB0aHJvdyBuZXcgVHlwZUVycm9yO1xuICB2YXIgcmV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFoYXNPd24uY2FsbChhcnIsIGkpKSBjb250aW51ZTtcbiAgICB2YXIgdmFsID0gYXJyW2ldO1xuICAgIGlmIChmbi5jYWxsKHNlbGYsIHZhbCwgaSwgYXJyKSkgcmV0LnB1c2godmFsKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufTtcblxudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4iLCIvKipcbiAqIGFycmF5LWZvcmVhY2hcbiAqICAgQXJyYXkjZm9yRWFjaCBwb255ZmlsbCBmb3Igb2xkZXIgYnJvd3NlcnNcbiAqICAgKFBvbnlmaWxsOiBBIHBvbHlmaWxsIHRoYXQgZG9lc24ndCBvdmVyd3JpdGUgdGhlIG5hdGl2ZSBtZXRob2QpXG4gKiBcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90d2FkYS9hcnJheS1mb3JlYWNoXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYgVGFrdXRvIFdhZGFcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqICAgaHR0cHM6Ly9naXRodWIuY29tL3R3YWRhL2FycmF5LWZvcmVhY2gvYmxvYi9tYXN0ZXIvTUlULUxJQ0VOU0VcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZvckVhY2ggKGFyeSwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBpZiAoYXJ5LmZvckVhY2gpIHtcbiAgICAgICAgYXJ5LmZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSs9MSkge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIGFyeVtpXSwgaSwgYXJ5KTtcbiAgICB9XG59O1xuIiwiLypcbiAqIGNsYXNzTGlzdC5qczogQ3Jvc3MtYnJvd3NlciBmdWxsIGVsZW1lbnQuY2xhc3NMaXN0IGltcGxlbWVudGF0aW9uLlxuICogMS4xLjIwMTcwNDI3XG4gKlxuICogQnkgRWxpIEdyZXksIGh0dHA6Ly9lbGlncmV5LmNvbVxuICogTGljZW5zZTogRGVkaWNhdGVkIHRvIHRoZSBwdWJsaWMgZG9tYWluLlxuICogICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsaWdyZXkvY2xhc3NMaXN0LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWRcbiAqL1xuXG4vKmdsb2JhbCBzZWxmLCBkb2N1bWVudCwgRE9NRXhjZXB0aW9uICovXG5cbi8qISBAc291cmNlIGh0dHA6Ly9wdXJsLmVsaWdyZXkuY29tL2dpdGh1Yi9jbGFzc0xpc3QuanMvYmxvYi9tYXN0ZXIvY2xhc3NMaXN0LmpzICovXG5cbmlmIChcImRvY3VtZW50XCIgaW4gd2luZG93LnNlbGYpIHtcblxuLy8gRnVsbCBwb2x5ZmlsbCBmb3IgYnJvd3NlcnMgd2l0aCBubyBjbGFzc0xpc3Qgc3VwcG9ydFxuLy8gSW5jbHVkaW5nIElFIDwgRWRnZSBtaXNzaW5nIFNWR0VsZW1lbnQuY2xhc3NMaXN0XG5pZiAoIShcImNsYXNzTGlzdFwiIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJfXCIpKSBcblx0fHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TICYmICEoXCJjbGFzc0xpc3RcIiBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZ1wiKSkpIHtcblxuKGZ1bmN0aW9uICh2aWV3KSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5pZiAoISgnRWxlbWVudCcgaW4gdmlldykpIHJldHVybjtcblxudmFyXG5cdCAgY2xhc3NMaXN0UHJvcCA9IFwiY2xhc3NMaXN0XCJcblx0LCBwcm90b1Byb3AgPSBcInByb3RvdHlwZVwiXG5cdCwgZWxlbUN0clByb3RvID0gdmlldy5FbGVtZW50W3Byb3RvUHJvcF1cblx0LCBvYmpDdHIgPSBPYmplY3Rcblx0LCBzdHJUcmltID0gU3RyaW5nW3Byb3RvUHJvcF0udHJpbSB8fCBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgXCJcIik7XG5cdH1cblx0LCBhcnJJbmRleE9mID0gQXJyYXlbcHJvdG9Qcm9wXS5pbmRleE9mIHx8IGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0dmFyXG5cdFx0XHQgIGkgPSAwXG5cdFx0XHQsIGxlbiA9IHRoaXMubGVuZ3RoXG5cdFx0O1xuXHRcdGZvciAoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChpIGluIHRoaXMgJiYgdGhpc1tpXSA9PT0gaXRlbSkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9XG5cdC8vIFZlbmRvcnM6IHBsZWFzZSBhbGxvdyBjb250ZW50IGNvZGUgdG8gaW5zdGFudGlhdGUgRE9NRXhjZXB0aW9uc1xuXHQsIERPTUV4ID0gZnVuY3Rpb24gKHR5cGUsIG1lc3NhZ2UpIHtcblx0XHR0aGlzLm5hbWUgPSB0eXBlO1xuXHRcdHRoaXMuY29kZSA9IERPTUV4Y2VwdGlvblt0eXBlXTtcblx0XHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXHR9XG5cdCwgY2hlY2tUb2tlbkFuZEdldEluZGV4ID0gZnVuY3Rpb24gKGNsYXNzTGlzdCwgdG9rZW4pIHtcblx0XHRpZiAodG9rZW4gPT09IFwiXCIpIHtcblx0XHRcdHRocm93IG5ldyBET01FeChcblx0XHRcdFx0ICBcIlNZTlRBWF9FUlJcIlxuXHRcdFx0XHQsIFwiQW4gaW52YWxpZCBvciBpbGxlZ2FsIHN0cmluZyB3YXMgc3BlY2lmaWVkXCJcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmICgvXFxzLy50ZXN0KHRva2VuKSkge1xuXHRcdFx0dGhyb3cgbmV3IERPTUV4KFxuXHRcdFx0XHQgIFwiSU5WQUxJRF9DSEFSQUNURVJfRVJSXCJcblx0XHRcdFx0LCBcIlN0cmluZyBjb250YWlucyBhbiBpbnZhbGlkIGNoYXJhY3RlclwiXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gYXJySW5kZXhPZi5jYWxsKGNsYXNzTGlzdCwgdG9rZW4pO1xuXHR9XG5cdCwgQ2xhc3NMaXN0ID0gZnVuY3Rpb24gKGVsZW0pIHtcblx0XHR2YXJcblx0XHRcdCAgdHJpbW1lZENsYXNzZXMgPSBzdHJUcmltLmNhbGwoZWxlbS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKVxuXHRcdFx0LCBjbGFzc2VzID0gdHJpbW1lZENsYXNzZXMgPyB0cmltbWVkQ2xhc3Nlcy5zcGxpdCgvXFxzKy8pIDogW11cblx0XHRcdCwgaSA9IDBcblx0XHRcdCwgbGVuID0gY2xhc3Nlcy5sZW5ndGhcblx0XHQ7XG5cdFx0Zm9yICg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0dGhpcy5wdXNoKGNsYXNzZXNbaV0pO1xuXHRcdH1cblx0XHR0aGlzLl91cGRhdGVDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMudG9TdHJpbmcoKSk7XG5cdFx0fTtcblx0fVxuXHQsIGNsYXNzTGlzdFByb3RvID0gQ2xhc3NMaXN0W3Byb3RvUHJvcF0gPSBbXVxuXHQsIGNsYXNzTGlzdEdldHRlciA9IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gbmV3IENsYXNzTGlzdCh0aGlzKTtcblx0fVxuO1xuLy8gTW9zdCBET01FeGNlcHRpb24gaW1wbGVtZW50YXRpb25zIGRvbid0IGFsbG93IGNhbGxpbmcgRE9NRXhjZXB0aW9uJ3MgdG9TdHJpbmcoKVxuLy8gb24gbm9uLURPTUV4Y2VwdGlvbnMuIEVycm9yJ3MgdG9TdHJpbmcoKSBpcyBzdWZmaWNpZW50IGhlcmUuXG5ET01FeFtwcm90b1Byb3BdID0gRXJyb3JbcHJvdG9Qcm9wXTtcbmNsYXNzTGlzdFByb3RvLml0ZW0gPSBmdW5jdGlvbiAoaSkge1xuXHRyZXR1cm4gdGhpc1tpXSB8fCBudWxsO1xufTtcbmNsYXNzTGlzdFByb3RvLmNvbnRhaW5zID0gZnVuY3Rpb24gKHRva2VuKSB7XG5cdHRva2VuICs9IFwiXCI7XG5cdHJldHVybiBjaGVja1Rva2VuQW5kR2V0SW5kZXgodGhpcywgdG9rZW4pICE9PSAtMTtcbn07XG5jbGFzc0xpc3RQcm90by5hZGQgPSBmdW5jdGlvbiAoKSB7XG5cdHZhclxuXHRcdCAgdG9rZW5zID0gYXJndW1lbnRzXG5cdFx0LCBpID0gMFxuXHRcdCwgbCA9IHRva2Vucy5sZW5ndGhcblx0XHQsIHRva2VuXG5cdFx0LCB1cGRhdGVkID0gZmFsc2Vcblx0O1xuXHRkbyB7XG5cdFx0dG9rZW4gPSB0b2tlbnNbaV0gKyBcIlwiO1xuXHRcdGlmIChjaGVja1Rva2VuQW5kR2V0SW5kZXgodGhpcywgdG9rZW4pID09PSAtMSkge1xuXHRcdFx0dGhpcy5wdXNoKHRva2VuKTtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXHR3aGlsZSAoKytpIDwgbCk7XG5cblx0aWYgKHVwZGF0ZWQpIHtcblx0XHR0aGlzLl91cGRhdGVDbGFzc05hbWUoKTtcblx0fVxufTtcbmNsYXNzTGlzdFByb3RvLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0dmFyXG5cdFx0ICB0b2tlbnMgPSBhcmd1bWVudHNcblx0XHQsIGkgPSAwXG5cdFx0LCBsID0gdG9rZW5zLmxlbmd0aFxuXHRcdCwgdG9rZW5cblx0XHQsIHVwZGF0ZWQgPSBmYWxzZVxuXHRcdCwgaW5kZXhcblx0O1xuXHRkbyB7XG5cdFx0dG9rZW4gPSB0b2tlbnNbaV0gKyBcIlwiO1xuXHRcdGluZGV4ID0gY2hlY2tUb2tlbkFuZEdldEluZGV4KHRoaXMsIHRva2VuKTtcblx0XHR3aGlsZSAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHR0aGlzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHRcdGluZGV4ID0gY2hlY2tUb2tlbkFuZEdldEluZGV4KHRoaXMsIHRva2VuKTtcblx0XHR9XG5cdH1cblx0d2hpbGUgKCsraSA8IGwpO1xuXG5cdGlmICh1cGRhdGVkKSB7XG5cdFx0dGhpcy5fdXBkYXRlQ2xhc3NOYW1lKCk7XG5cdH1cbn07XG5jbGFzc0xpc3RQcm90by50b2dnbGUgPSBmdW5jdGlvbiAodG9rZW4sIGZvcmNlKSB7XG5cdHRva2VuICs9IFwiXCI7XG5cblx0dmFyXG5cdFx0ICByZXN1bHQgPSB0aGlzLmNvbnRhaW5zKHRva2VuKVxuXHRcdCwgbWV0aG9kID0gcmVzdWx0ID9cblx0XHRcdGZvcmNlICE9PSB0cnVlICYmIFwicmVtb3ZlXCJcblx0XHQ6XG5cdFx0XHRmb3JjZSAhPT0gZmFsc2UgJiYgXCJhZGRcIlxuXHQ7XG5cblx0aWYgKG1ldGhvZCkge1xuXHRcdHRoaXNbbWV0aG9kXSh0b2tlbik7XG5cdH1cblxuXHRpZiAoZm9yY2UgPT09IHRydWUgfHwgZm9yY2UgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIGZvcmNlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAhcmVzdWx0O1xuXHR9XG59O1xuY2xhc3NMaXN0UHJvdG8udG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiB0aGlzLmpvaW4oXCIgXCIpO1xufTtcblxuaWYgKG9iakN0ci5kZWZpbmVQcm9wZXJ0eSkge1xuXHR2YXIgY2xhc3NMaXN0UHJvcERlc2MgPSB7XG5cdFx0ICBnZXQ6IGNsYXNzTGlzdEdldHRlclxuXHRcdCwgZW51bWVyYWJsZTogdHJ1ZVxuXHRcdCwgY29uZmlndXJhYmxlOiB0cnVlXG5cdH07XG5cdHRyeSB7XG5cdFx0b2JqQ3RyLmRlZmluZVByb3BlcnR5KGVsZW1DdHJQcm90bywgY2xhc3NMaXN0UHJvcCwgY2xhc3NMaXN0UHJvcERlc2MpO1xuXHR9IGNhdGNoIChleCkgeyAvLyBJRSA4IGRvZXNuJ3Qgc3VwcG9ydCBlbnVtZXJhYmxlOnRydWVcblx0XHQvLyBhZGRpbmcgdW5kZWZpbmVkIHRvIGZpZ2h0IHRoaXMgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL2VsaWdyZXkvY2xhc3NMaXN0LmpzL2lzc3Vlcy8zNlxuXHRcdC8vIG1vZGVybmllIElFOC1NU1c3IG1hY2hpbmUgaGFzIElFOCA4LjAuNjAwMS4xODcwMiBhbmQgaXMgYWZmZWN0ZWRcblx0XHRpZiAoZXgubnVtYmVyID09PSB1bmRlZmluZWQgfHwgZXgubnVtYmVyID09PSAtMHg3RkY1RUM1NCkge1xuXHRcdFx0Y2xhc3NMaXN0UHJvcERlc2MuZW51bWVyYWJsZSA9IGZhbHNlO1xuXHRcdFx0b2JqQ3RyLmRlZmluZVByb3BlcnR5KGVsZW1DdHJQcm90bywgY2xhc3NMaXN0UHJvcCwgY2xhc3NMaXN0UHJvcERlc2MpO1xuXHRcdH1cblx0fVxufSBlbHNlIGlmIChvYmpDdHJbcHJvdG9Qcm9wXS5fX2RlZmluZUdldHRlcl9fKSB7XG5cdGVsZW1DdHJQcm90by5fX2RlZmluZUdldHRlcl9fKGNsYXNzTGlzdFByb3AsIGNsYXNzTGlzdEdldHRlcik7XG59XG5cbn0od2luZG93LnNlbGYpKTtcblxufVxuXG4vLyBUaGVyZSBpcyBmdWxsIG9yIHBhcnRpYWwgbmF0aXZlIGNsYXNzTGlzdCBzdXBwb3J0LCBzbyBqdXN0IGNoZWNrIGlmIHdlIG5lZWRcbi8vIHRvIG5vcm1hbGl6ZSB0aGUgYWRkL3JlbW92ZSBhbmQgdG9nZ2xlIEFQSXMuXG5cbihmdW5jdGlvbiAoKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJfXCIpO1xuXG5cdHRlc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjMVwiLCBcImMyXCIpO1xuXG5cdC8vIFBvbHlmaWxsIGZvciBJRSAxMC8xMSBhbmQgRmlyZWZveCA8MjYsIHdoZXJlIGNsYXNzTGlzdC5hZGQgYW5kXG5cdC8vIGNsYXNzTGlzdC5yZW1vdmUgZXhpc3QgYnV0IHN1cHBvcnQgb25seSBvbmUgYXJndW1lbnQgYXQgYSB0aW1lLlxuXHRpZiAoIXRlc3RFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImMyXCIpKSB7XG5cdFx0dmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uKG1ldGhvZCkge1xuXHRcdFx0dmFyIG9yaWdpbmFsID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZVttZXRob2RdO1xuXG5cdFx0XHRET01Ub2tlbkxpc3QucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih0b2tlbikge1xuXHRcdFx0XHR2YXIgaSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0XHR0b2tlbiA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdFx0XHRvcmlnaW5hbC5jYWxsKHRoaXMsIHRva2VuKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9O1xuXHRcdGNyZWF0ZU1ldGhvZCgnYWRkJyk7XG5cdFx0Y3JlYXRlTWV0aG9kKCdyZW1vdmUnKTtcblx0fVxuXG5cdHRlc3RFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoXCJjM1wiLCBmYWxzZSk7XG5cblx0Ly8gUG9seWZpbGwgZm9yIElFIDEwIGFuZCBGaXJlZm94IDwyNCwgd2hlcmUgY2xhc3NMaXN0LnRvZ2dsZSBkb2VzIG5vdFxuXHQvLyBzdXBwb3J0IHRoZSBzZWNvbmQgYXJndW1lbnQuXG5cdGlmICh0ZXN0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJjM1wiKSkge1xuXHRcdHZhciBfdG9nZ2xlID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS50b2dnbGU7XG5cblx0XHRET01Ub2tlbkxpc3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKHRva2VuLCBmb3JjZSkge1xuXHRcdFx0aWYgKDEgaW4gYXJndW1lbnRzICYmICF0aGlzLmNvbnRhaW5zKHRva2VuKSA9PT0gIWZvcmNlKSB7XG5cdFx0XHRcdHJldHVybiBmb3JjZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBfdG9nZ2xlLmNhbGwodGhpcywgdG9rZW4pO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0fVxuXG5cdHRlc3RFbGVtZW50ID0gbnVsbDtcbn0oKSk7XG5cbn1cbiIsIi8qIVxuICAqIGRvbXJlYWR5IChjKSBEdXN0aW4gRGlheiAyMDE0IC0gTGljZW5zZSBNSVRcbiAgKi9cbiFmdW5jdGlvbiAobmFtZSwgZGVmaW5pdGlvbikge1xuXG4gIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnKSBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKVxuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcpIGRlZmluZShkZWZpbml0aW9uKVxuICBlbHNlIHRoaXNbbmFtZV0gPSBkZWZpbml0aW9uKClcblxufSgnZG9tcmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgdmFyIGZucyA9IFtdLCBsaXN0ZW5lclxuICAgICwgZG9jID0gZG9jdW1lbnRcbiAgICAsIGhhY2sgPSBkb2MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsXG4gICAgLCBkb21Db250ZW50TG9hZGVkID0gJ0RPTUNvbnRlbnRMb2FkZWQnXG4gICAgLCBsb2FkZWQgPSAoaGFjayA/IC9ebG9hZGVkfF5jLyA6IC9ebG9hZGVkfF5pfF5jLykudGVzdChkb2MucmVhZHlTdGF0ZSlcblxuXG4gIGlmICghbG9hZGVkKVxuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcihkb21Db250ZW50TG9hZGVkLCBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb21Db250ZW50TG9hZGVkLCBsaXN0ZW5lcilcbiAgICBsb2FkZWQgPSAxXG4gICAgd2hpbGUgKGxpc3RlbmVyID0gZm5zLnNoaWZ0KCkpIGxpc3RlbmVyKClcbiAgfSlcblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgbG9hZGVkID8gc2V0VGltZW91dChmbiwgMCkgOiBmbnMucHVzaChmbilcbiAgfVxuXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gPDMgTW9kZXJuaXpyXG4vLyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vTW9kZXJuaXpyL01vZGVybml6ci9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2RvbS9kYXRhc2V0LmpzXG5cbmZ1bmN0aW9uIHVzZU5hdGl2ZSgpIHtcblx0dmFyIGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0ZWxlbS5zZXRBdHRyaWJ1dGUoJ2RhdGEtYS1iJywgJ2MnKTtcblxuXHRyZXR1cm4gQm9vbGVhbihlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0LmFCID09PSAnYycpO1xufVxuXG5mdW5jdGlvbiBuYXRpdmVEYXRhc2V0KGVsZW1lbnQpIHtcblx0cmV0dXJuIGVsZW1lbnQuZGF0YXNldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1c2VOYXRpdmUoKSA/IG5hdGl2ZURhdGFzZXQgOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHR2YXIgbWFwID0ge307XG5cdHZhciBhdHRyaWJ1dGVzID0gZWxlbWVudC5hdHRyaWJ1dGVzO1xuXG5cdGZ1bmN0aW9uIGdldHRlcigpIHtcblx0XHRyZXR1cm4gdGhpcy52YWx1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldHRlcihuYW1lLCB2YWx1ZSkge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gYXR0cmlidXRlcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHR2YXIgYXR0cmlidXRlID0gYXR0cmlidXRlc1tpXTtcblxuXHRcdGlmIChhdHRyaWJ1dGUpIHtcblx0XHRcdHZhciBuYW1lID0gYXR0cmlidXRlLm5hbWU7XG5cblx0XHRcdGlmIChuYW1lLmluZGV4T2YoJ2RhdGEtJykgPT09IDApIHtcblx0XHRcdFx0dmFyIHByb3AgPSBuYW1lLnNsaWNlKDUpLnJlcGxhY2UoLy0uL2csIGZ1bmN0aW9uICh1KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHUuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHZhciB2YWx1ZSA9IGF0dHJpYnV0ZS52YWx1ZTtcblxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobWFwLCBwcm9wLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRnZXQ6IGdldHRlci5iaW5kKHsgdmFsdWU6IHZhbHVlIHx8ICcnIH0pLFxuXHRcdFx0XHRcdHNldDogc2V0dGVyLmJpbmQoZWxlbWVudCwgbmFtZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hcDtcbn07XG5cbiIsIi8vIGVsZW1lbnQtY2xvc2VzdCB8IENDMC0xLjAgfCBnaXRodWIuY29tL2pvbmF0aGFudG5lYWwvY2xvc2VzdFxuXG4oZnVuY3Rpb24gKEVsZW1lbnRQcm90bykge1xuXHRpZiAodHlwZW9mIEVsZW1lbnRQcm90by5tYXRjaGVzICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0RWxlbWVudFByb3RvLm1hdGNoZXMgPSBFbGVtZW50UHJvdG8ubXNNYXRjaGVzU2VsZWN0b3IgfHwgRWxlbWVudFByb3RvLm1vek1hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50UHJvdG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IGZ1bmN0aW9uIG1hdGNoZXMoc2VsZWN0b3IpIHtcblx0XHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRcdHZhciBlbGVtZW50cyA9IChlbGVtZW50LmRvY3VtZW50IHx8IGVsZW1lbnQub3duZXJEb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cdFx0XHR2YXIgaW5kZXggPSAwO1xuXG5cdFx0XHR3aGlsZSAoZWxlbWVudHNbaW5kZXhdICYmIGVsZW1lbnRzW2luZGV4XSAhPT0gZWxlbWVudCkge1xuXHRcdFx0XHQrK2luZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gQm9vbGVhbihlbGVtZW50c1tpbmRleF0pO1xuXHRcdH07XG5cdH1cblxuXHRpZiAodHlwZW9mIEVsZW1lbnRQcm90by5jbG9zZXN0ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0RWxlbWVudFByb3RvLmNsb3Nlc3QgPSBmdW5jdGlvbiBjbG9zZXN0KHNlbGVjdG9yKSB7XG5cdFx0XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cblx0XHRcdHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEpIHtcblx0XHRcdFx0aWYgKGVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH07XG5cdH1cbn0pKHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZSk7XG4iLCIvKipcbiAqIGxvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vanF1ZXJ5Lm9yZy8+XG4gKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKi9cblxuLyoqIFVzZWQgYXMgdGhlIGBUeXBlRXJyb3JgIG1lc3NhZ2UgZm9yIFwiRnVuY3Rpb25zXCIgbWV0aG9kcy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovXG52YXIgcmVUcmltID0gL15cXHMrfFxccyskL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbnZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgb2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4LFxuICAgIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IERhdGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApO1xuICogfSwgXy5ub3coKSk7XG4gKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICovXG52YXIgbm93ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiByb290LkRhdGUubm93KCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBkZWJvdW5jZWQgZnVuY3Rpb24gdGhhdCBkZWxheXMgaW52b2tpbmcgYGZ1bmNgIHVudGlsIGFmdGVyIGB3YWl0YFxuICogbWlsbGlzZWNvbmRzIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gd2FzXG4gKiBpbnZva2VkLiBUaGUgZGVib3VuY2VkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYCBtZXRob2QgdG8gY2FuY2VsXG4gKiBkZWxheWVkIGBmdW5jYCBpbnZvY2F0aW9ucyBhbmQgYSBgZmx1c2hgIG1ldGhvZCB0byBpbW1lZGlhdGVseSBpbnZva2UgdGhlbS5cbiAqIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1bmNgIHNob3VsZCBiZSBpbnZva2VkIG9uIHRoZVxuICogbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuICogd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbi4gU3Vic2VxdWVudFxuICogY2FsbHMgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2BcbiAqIGludm9jYXRpb24uXG4gKlxuICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpc1xuICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAqIGlzIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAqXG4gKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAqIHVudGlsIHRvIHRoZSBuZXh0IHRpY2ssIHNpbWlsYXIgdG8gYHNldFRpbWVvdXRgIHdpdGggYSB0aW1lb3V0IG9mIGAwYC5cbiAqXG4gKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8uZGVib3VuY2VgIGFuZCBgXy50aHJvdHRsZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWJvdW5jZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPWZhbHNlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XVxuICogIFRoZSBtYXhpbXVtIHRpbWUgYGZ1bmNgIGlzIGFsbG93ZWQgdG8gYmUgZGVsYXllZCBiZWZvcmUgaXQncyBpbnZva2VkLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmFpbGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBkZWJvdW5jZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIGNvc3RseSBjYWxjdWxhdGlvbnMgd2hpbGUgdGhlIHdpbmRvdyBzaXplIGlzIGluIGZsdXguXG4gKiBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgXy5kZWJvdW5jZShjYWxjdWxhdGVMYXlvdXQsIDE1MCkpO1xuICpcbiAqIC8vIEludm9rZSBgc2VuZE1haWxgIHdoZW4gY2xpY2tlZCwgZGVib3VuY2luZyBzdWJzZXF1ZW50IGNhbGxzLlxuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uZGVib3VuY2Uoc2VuZE1haWwsIDMwMCwge1xuICogICAnbGVhZGluZyc6IHRydWUsXG4gKiAgICd0cmFpbGluZyc6IGZhbHNlXG4gKiB9KSk7XG4gKlxuICogLy8gRW5zdXJlIGBiYXRjaExvZ2AgaXMgaW52b2tlZCBvbmNlIGFmdGVyIDEgc2Vjb25kIG9mIGRlYm91bmNlZCBjYWxscy5cbiAqIHZhciBkZWJvdW5jZWQgPSBfLmRlYm91bmNlKGJhdGNoTG9nLCAyNTAsIHsgJ21heFdhaXQnOiAxMDAwIH0pO1xuICogdmFyIHNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZSgnL3N0cmVhbScpO1xuICogalF1ZXJ5KHNvdXJjZSkub24oJ21lc3NhZ2UnLCBkZWJvdW5jZWQpO1xuICpcbiAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgZGVib3VuY2VkIGludm9jYXRpb24uXG4gKiBqUXVlcnkod2luZG93KS5vbigncG9wc3RhdGUnLCBkZWJvdW5jZWQuY2FuY2VsKTtcbiAqL1xuZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICB2YXIgbGFzdEFyZ3MsXG4gICAgICBsYXN0VGhpcyxcbiAgICAgIG1heFdhaXQsXG4gICAgICByZXN1bHQsXG4gICAgICB0aW1lcklkLFxuICAgICAgbGFzdENhbGxUaW1lLFxuICAgICAgbGFzdEludm9rZVRpbWUgPSAwLFxuICAgICAgbGVhZGluZyA9IGZhbHNlLFxuICAgICAgbWF4aW5nID0gZmFsc2UsXG4gICAgICB0cmFpbGluZyA9IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgd2FpdCA9IHRvTnVtYmVyKHdhaXQpIHx8IDA7XG4gIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgIGxlYWRpbmcgPSAhIW9wdGlvbnMubGVhZGluZztcbiAgICBtYXhpbmcgPSAnbWF4V2FpdCcgaW4gb3B0aW9ucztcbiAgICBtYXhXYWl0ID0gbWF4aW5nID8gbmF0aXZlTWF4KHRvTnVtYmVyKG9wdGlvbnMubWF4V2FpdCkgfHwgMCwgd2FpdCkgOiBtYXhXYWl0O1xuICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VGdW5jKHRpbWUpIHtcbiAgICB2YXIgYXJncyA9IGxhc3RBcmdzLFxuICAgICAgICB0aGlzQXJnID0gbGFzdFRoaXM7XG5cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBsZWFkaW5nRWRnZSh0aW1lKSB7XG4gICAgLy8gUmVzZXQgYW55IGBtYXhXYWl0YCB0aW1lci5cbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgLy8gU3RhcnQgdGhlIHRpbWVyIGZvciB0aGUgdHJhaWxpbmcgZWRnZS5cbiAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIC8vIEludm9rZSB0aGUgbGVhZGluZyBlZGdlLlxuICAgIHJldHVybiBsZWFkaW5nID8gaW52b2tlRnVuYyh0aW1lKSA6IHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbWFpbmluZ1dhaXQodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWUsXG4gICAgICAgIHJlc3VsdCA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgIHJldHVybiBtYXhpbmcgPyBuYXRpdmVNaW4ocmVzdWx0LCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCwgYWN0aXZpdHkgaGFzIHN0b3BwZWQgYW5kIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgIHJldHVybiAobGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgKHRpbWVTaW5jZUxhc3RDYWxsID49IHdhaXQpIHx8XG4gICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTtcbiAgICB9XG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCByZW1haW5pbmdXYWl0KHRpbWUpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG4gICAgdGltZXJJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cbiAgICBpZiAodHJhaWxpbmcgJiYgbGFzdEFyZ3MpIHtcbiAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgIH1cbiAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuXG4gICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7XG5cbiAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAgICAgcmV0dXJuIGludm9rZUZ1bmMobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBkZWJvdW5jZWQuY2FuY2VsID0gY2FuY2VsO1xuICBkZWJvdW5jZWQuZmx1c2ggPSBmbHVzaDtcbiAgcmV0dXJuIGRlYm91bmNlZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAhIXZhbHVlICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9OdW1iZXIoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IEluZmluaXR5XG4gKlxuICogXy50b051bWJlcignMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuICB9XG4gIHZhbHVlID0gdmFsdWUucmVwbGFjZShyZVRyaW0sICcnKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVib3VuY2U7XG4iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiY29uc3QgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuY29uc3QgZGVsZWdhdGUgPSByZXF1aXJlKCcuLi9kZWxlZ2F0ZScpO1xuY29uc3QgZGVsZWdhdGVBbGwgPSByZXF1aXJlKCcuLi9kZWxlZ2F0ZUFsbCcpO1xuXG5jb25zdCBERUxFR0FURV9QQVRURVJOID0gL14oLispOmRlbGVnYXRlXFwoKC4rKVxcKSQvO1xuY29uc3QgU1BBQ0UgPSAnICc7XG5cbmNvbnN0IGdldExpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUsIGhhbmRsZXIpIHtcbiAgdmFyIG1hdGNoID0gdHlwZS5tYXRjaChERUxFR0FURV9QQVRURVJOKTtcbiAgdmFyIHNlbGVjdG9yO1xuICBpZiAobWF0Y2gpIHtcbiAgICB0eXBlID0gbWF0Y2hbMV07XG4gICAgc2VsZWN0b3IgPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHZhciBvcHRpb25zO1xuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIGNhcHR1cmU6IHBvcEtleShoYW5kbGVyLCAnY2FwdHVyZScpLFxuICAgICAgcGFzc2l2ZTogcG9wS2V5KGhhbmRsZXIsICdwYXNzaXZlJylcbiAgICB9O1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0ge1xuICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICBkZWxlZ2F0ZTogKHR5cGVvZiBoYW5kbGVyID09PSAnb2JqZWN0JylcbiAgICAgID8gZGVsZWdhdGVBbGwoaGFuZGxlcilcbiAgICAgIDogc2VsZWN0b3JcbiAgICAgICAgPyBkZWxlZ2F0ZShzZWxlY3RvciwgaGFuZGxlcilcbiAgICAgICAgOiBoYW5kbGVyLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfTtcblxuICBpZiAodHlwZS5pbmRleE9mKFNQQUNFKSA+IC0xKSB7XG4gICAgcmV0dXJuIHR5cGUuc3BsaXQoU1BBQ0UpLm1hcChmdW5jdGlvbihfdHlwZSkge1xuICAgICAgcmV0dXJuIGFzc2lnbih7dHlwZTogX3R5cGV9LCBsaXN0ZW5lcik7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgbGlzdGVuZXIudHlwZSA9IHR5cGU7XG4gICAgcmV0dXJuIFtsaXN0ZW5lcl07XG4gIH1cbn07XG5cbnZhciBwb3BLZXkgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgZGVsZXRlIG9ialtrZXldO1xuICByZXR1cm4gdmFsdWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJlaGF2aW9yKGV2ZW50cywgcHJvcHMpIHtcbiAgY29uc3QgbGlzdGVuZXJzID0gT2JqZWN0LmtleXMoZXZlbnRzKVxuICAgIC5yZWR1Y2UoZnVuY3Rpb24obWVtbywgdHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0eXBlLCBldmVudHNbdHlwZV0pO1xuICAgICAgcmV0dXJuIG1lbW8uY29uY2F0KGxpc3RlbmVycyk7XG4gICAgfSwgW10pO1xuXG4gIHJldHVybiBhc3NpZ24oe1xuICAgIGFkZDogZnVuY3Rpb24gYWRkQmVoYXZpb3IoZWxlbWVudCkge1xuICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgIGxpc3RlbmVyLnR5cGUsXG4gICAgICAgICAgbGlzdGVuZXIuZGVsZWdhdGUsXG4gICAgICAgICAgbGlzdGVuZXIub3B0aW9uc1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZUJlaGF2aW9yKGVsZW1lbnQpIHtcbiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBsaXN0ZW5lci50eXBlLFxuICAgICAgICAgIGxpc3RlbmVyLmRlbGVnYXRlLFxuICAgICAgICAgIGxpc3RlbmVyLm9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgcHJvcHMpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tcG9zZShmdW5jdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25zLnNvbWUoZnVuY3Rpb24oZm4pIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGUpID09PSBmYWxzZTtcbiAgICB9LCB0aGlzKTtcbiAgfTtcbn07XG4iLCIvLyBwb2x5ZmlsbCBFbGVtZW50LnByb3RvdHlwZS5jbG9zZXN0XG5yZXF1aXJlKCdlbGVtZW50LWNsb3Nlc3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWxlZ2F0ZShzZWxlY3RvciwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlbGVnYXRpb24oZXZlbnQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQpO1xuICAgIH1cbiAgfVxufTtcbiIsImNvbnN0IGRlbGVnYXRlID0gcmVxdWlyZSgnLi4vZGVsZWdhdGUnKTtcbmNvbnN0IGNvbXBvc2UgPSByZXF1aXJlKCcuLi9jb21wb3NlJyk7XG5cbmNvbnN0IFNQTEFUID0gJyonO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlbGVnYXRlQWxsKHNlbGVjdG9ycykge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2VsZWN0b3JzKVxuXG4gIC8vIFhYWCBvcHRpbWl6YXRpb246IGlmIHRoZXJlIGlzIG9ubHkgb25lIGhhbmRsZXIgYW5kIGl0IGFwcGxpZXMgdG9cbiAgLy8gYWxsIGVsZW1lbnRzICh0aGUgXCIqXCIgQ1NTIHNlbGVjdG9yKSwgdGhlbiBqdXN0IHJldHVybiB0aGF0XG4gIC8vIGhhbmRsZXJcbiAgaWYgKGtleXMubGVuZ3RoID09PSAxICYmIGtleXNbMF0gPT09IFNQTEFUKSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yc1tTUExBVF07XG4gIH1cblxuICBjb25zdCBkZWxlZ2F0ZXMgPSBrZXlzLnJlZHVjZShmdW5jdGlvbihtZW1vLCBzZWxlY3Rvcikge1xuICAgIG1lbW8ucHVzaChkZWxlZ2F0ZShzZWxlY3Rvciwgc2VsZWN0b3JzW3NlbGVjdG9yXSkpO1xuICAgIHJldHVybiBtZW1vO1xuICB9LCBbXSk7XG4gIHJldHVybiBjb21wb3NlKGRlbGVnYXRlcyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpZ25vcmUoZWxlbWVudCwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlnbm9yYW5jZShlKSB7XG4gICAgaWYgKGVsZW1lbnQgIT09IGUudGFyZ2V0ICYmICFlbGVtZW50LmNvbnRhaW5zKGUudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZSk7XG4gICAgfVxuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gb25jZShsaXN0ZW5lciwgb3B0aW9ucykge1xuICB2YXIgd3JhcHBlZCA9IGZ1bmN0aW9uIHdyYXBwZWRPbmNlKGUpIHtcbiAgICBlLmN1cnJlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLnR5cGUsIHdyYXBwZWQsIG9wdGlvbnMpO1xuICAgIHJldHVybiBsaXN0ZW5lci5jYWxsKHRoaXMsIGUpO1xuICB9O1xuICByZXR1cm4gd3JhcHBlZDtcbn07XG5cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFJFX1RSSU0gPSAvKF5cXHMrKXwoXFxzKyQpL2c7XG52YXIgUkVfU1BMSVQgPSAvXFxzKy87XG5cbnZhciB0cmltID0gU3RyaW5nLnByb3RvdHlwZS50cmltXG4gID8gZnVuY3Rpb24oc3RyKSB7IHJldHVybiBzdHIudHJpbSgpOyB9XG4gIDogZnVuY3Rpb24oc3RyKSB7IHJldHVybiBzdHIucmVwbGFjZShSRV9UUklNLCAnJyk7IH07XG5cbnZhciBxdWVyeUJ5SWQgPSBmdW5jdGlvbihpZCkge1xuICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKCdbaWQ9XCInICsgaWQucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpICsgJ1wiXScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXNvbHZlSWRzKGlkcywgZG9jKSB7XG4gIGlmICh0eXBlb2YgaWRzICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcgYnV0IGdvdCAnICsgKHR5cGVvZiBpZHMpKTtcbiAgfVxuXG4gIGlmICghZG9jKSB7XG4gICAgZG9jID0gd2luZG93LmRvY3VtZW50O1xuICB9XG5cbiAgdmFyIGdldEVsZW1lbnRCeUlkID0gZG9jLmdldEVsZW1lbnRCeUlkXG4gICAgPyBkb2MuZ2V0RWxlbWVudEJ5SWQuYmluZChkb2MpXG4gICAgOiBxdWVyeUJ5SWQuYmluZChkb2MpO1xuXG4gIGlkcyA9IHRyaW0oaWRzKS5zcGxpdChSRV9TUExJVCk7XG5cbiAgLy8gWFhYIHdlIGNhbiBzaG9ydC1jaXJjdWl0IGhlcmUgYmVjYXVzZSB0cmltbWluZyBhbmQgc3BsaXR0aW5nIGFcbiAgLy8gc3RyaW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSBwcm9kdWNlcyBhbiBhcnJheSBjb250YWluaW5nIGEgc2luZ2xlLFxuICAvLyBlbXB0eSBzdHJpbmdcbiAgaWYgKGlkcy5sZW5ndGggPT09IDEgJiYgaWRzWzBdID09PSAnJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBpZHNcbiAgICAubWFwKGZ1bmN0aW9uKGlkKSB7XG4gICAgICB2YXIgZWwgPSBnZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gZWxlbWVudCB3aXRoIGlkOiBcIicgKyBpZCArICdcIicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsO1xuICAgIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGJlaGF2aW9yID0gcmVxdWlyZSgnLi4vdXRpbHMvYmVoYXZpb3InKTtcbmNvbnN0IGZpbHRlciA9IHJlcXVpcmUoJ2FycmF5LWZpbHRlcicpO1xuY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoJ2FycmF5LWZvcmVhY2gnKTtcbmNvbnN0IHRvZ2dsZSA9IHJlcXVpcmUoJy4uL3V0aWxzL3RvZ2dsZScpO1xuY29uc3QgaXNFbGVtZW50SW5WaWV3cG9ydCA9IHJlcXVpcmUoJy4uL3V0aWxzL2lzLWluLXZpZXdwb3J0Jyk7XG5cbmNvbnN0IENMSUNLID0gcmVxdWlyZSgnLi4vZXZlbnRzJykuQ0xJQ0s7XG5jb25zdCBQUkVGSVggPSByZXF1aXJlKCcuLi9jb25maWcnKS5wcmVmaXg7XG5cbi8vIFhYWCBtYXRjaCAudXNhLWFjY29yZGlvbiBhbmQgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWRcbmNvbnN0IEFDQ09SRElPTiA9IGAuJHtQUkVGSVh9LWFjY29yZGlvbiwgLiR7UFJFRklYfS1hY2NvcmRpb24tYm9yZGVyZWRgO1xuY29uc3QgQlVUVE9OID0gYC4ke1BSRUZJWH0tYWNjb3JkaW9uLWJ1dHRvblthcmlhLWNvbnRyb2xzXWA7XG5jb25zdCBFWFBBTkRFRCA9ICdhcmlhLWV4cGFuZGVkJztcbmNvbnN0IE1VTFRJU0VMRUNUQUJMRSA9ICdhcmlhLW11bHRpc2VsZWN0YWJsZSc7XG5cbi8qKlxuICogVG9nZ2xlIGEgYnV0dG9uJ3MgXCJwcmVzc2VkXCIgc3RhdGUsIG9wdGlvbmFsbHkgcHJvdmlkaW5nIGEgdGFyZ2V0XG4gKiBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0hUTUxCdXR0b25FbGVtZW50fSBidXR0b25cbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGV4cGFuZGVkIElmIG5vIHN0YXRlIGlzIHByb3ZpZGVkLCB0aGUgY3VycmVudFxuICogc3RhdGUgd2lsbCBiZSB0b2dnbGVkIChmcm9tIGZhbHNlIHRvIHRydWUsIGFuZCB2aWNlLXZlcnNhKS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHRpbmcgc3RhdGVcbiAqL1xuY29uc3QgdG9nZ2xlQnV0dG9uID0gKGJ1dHRvbiwgZXhwYW5kZWQpID0+IHtcbiAgdmFyIGFjY29yZGlvbiA9IGJ1dHRvbi5jbG9zZXN0KEFDQ09SRElPTik7XG4gIGlmICghYWNjb3JkaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke0JVVFRPTn0gaXMgbWlzc2luZyBvdXRlciAke0FDQ09SRElPTn1gKTtcbiAgfVxuXG4gIGV4cGFuZGVkID0gdG9nZ2xlKGJ1dHRvbiwgZXhwYW5kZWQpO1xuICAvLyBYWFggbXVsdGlzZWxlY3RhYmxlIGlzIG9wdC1pbiwgdG8gcHJlc2VydmUgbGVnYWN5IGJlaGF2aW9yXG4gIGNvbnN0IG11bHRpc2VsZWN0YWJsZSA9IGFjY29yZGlvbi5nZXRBdHRyaWJ1dGUoTVVMVElTRUxFQ1RBQkxFKSA9PT0gJ3RydWUnO1xuXG4gIGlmIChleHBhbmRlZCAmJiAhbXVsdGlzZWxlY3RhYmxlKSB7XG4gICAgZm9yRWFjaChnZXRBY2NvcmRpb25CdXR0b25zKGFjY29yZGlvbiksIG90aGVyID0+IHtcbiAgICAgIGlmIChvdGhlciAhPT0gYnV0dG9uKSB7XG4gICAgICAgIHRvZ2dsZShvdGhlciwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7SFRNTEJ1dHRvbkVsZW1lbnR9IGJ1dHRvblxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZVxuICovXG5jb25zdCBzaG93QnV0dG9uID0gYnV0dG9uID0+IHRvZ2dsZUJ1dHRvbihidXR0b24sIHRydWUpO1xuXG4vKipcbiAqIEBwYXJhbSB7SFRNTEJ1dHRvbkVsZW1lbnR9IGJ1dHRvblxuICogQHJldHVybiB7Ym9vbGVhbn0gZmFsc2VcbiAqL1xuY29uc3QgaGlkZUJ1dHRvbiA9IGJ1dHRvbiA9PiB0b2dnbGVCdXR0b24oYnV0dG9uLCBmYWxzZSk7XG5cbi8qKlxuICogR2V0IGFuIEFycmF5IG9mIGJ1dHRvbiBlbGVtZW50cyBiZWxvbmdpbmcgZGlyZWN0bHkgdG8gdGhlIGdpdmVuXG4gKiBhY2NvcmRpb24gZWxlbWVudC5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGFjY29yZGlvblxuICogQHJldHVybiB7YXJyYXk8SFRNTEJ1dHRvbkVsZW1lbnQ+fVxuICovXG5jb25zdCBnZXRBY2NvcmRpb25CdXR0b25zID0gYWNjb3JkaW9uID0+IHtcbiAgcmV0dXJuIGZpbHRlcihhY2NvcmRpb24ucXVlcnlTZWxlY3RvckFsbChCVVRUT04pLCBidXR0b24gPT4ge1xuICAgIHJldHVybiBidXR0b24uY2xvc2VzdChBQ0NPUkRJT04pID09PSBhY2NvcmRpb247XG4gIH0pO1xufTtcblxuY29uc3QgYWNjb3JkaW9uID0gYmVoYXZpb3Ioe1xuICBbIENMSUNLIF06IHtcbiAgICBbIEJVVFRPTiBdOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0b2dnbGVCdXR0b24odGhpcyk7XG5cbiAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZShFWFBBTkRFRCkgPT09ICd0cnVlJykge1xuICAgICAgICAvLyBXZSB3ZXJlIGp1c3QgZXhwYW5kZWQsIGJ1dCBpZiBhbm90aGVyIGFjY29yZGlvbiB3YXMgYWxzbyBqdXN0XG4gICAgICAgIC8vIGNvbGxhcHNlZCwgd2UgbWF5IG5vIGxvbmdlciBiZSBpbiB0aGUgdmlld3BvcnQuIFRoaXMgZW5zdXJlc1xuICAgICAgICAvLyB0aGF0IHdlIGFyZSBzdGlsbCB2aXNpYmxlLCBzbyB0aGUgdXNlciBpc24ndCBjb25mdXNlZC5cbiAgICAgICAgaWYgKCFpc0VsZW1lbnRJblZpZXdwb3J0KHRoaXMpKSB0aGlzLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbn0sIHtcbiAgaW5pdDogcm9vdCA9PiB7XG4gICAgZm9yRWFjaChyb290LnF1ZXJ5U2VsZWN0b3JBbGwoQlVUVE9OKSwgYnV0dG9uID0+IHtcbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gYnV0dG9uLmdldEF0dHJpYnV0ZShFWFBBTkRFRCkgPT09ICd0cnVlJztcbiAgICAgIHRvZ2dsZUJ1dHRvbihidXR0b24sIGV4cGFuZGVkKTtcbiAgICB9KTtcbiAgfSxcbiAgQUNDT1JESU9OLFxuICBCVVRUT04sXG4gIHNob3c6IHNob3dCdXR0b24sXG4gIGhpZGU6IGhpZGVCdXR0b24sXG4gIHRvZ2dsZTogdG9nZ2xlQnV0dG9uLFxuICBnZXRCdXR0b25zOiBnZXRBY2NvcmRpb25CdXR0b25zLFxufSk7XG5cbi8qKlxuICogVE9ETzogZm9yIDIuMCwgcmVtb3ZlIGV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyBjb21tZW50IGFuZCBleHBvcnQgdGhlXG4gKiBiZWhhdmlvciBkaXJlY3RseTpcbiAqXG4gKiBtb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHsuLi59KTtcbiAqL1xuY29uc3QgQWNjb3JkaW9uID0gZnVuY3Rpb24gKHJvb3QpIHtcbiAgdGhpcy5yb290ID0gcm9vdDtcbiAgYWNjb3JkaW9uLm9uKHRoaXMucm9vdCk7XG59O1xuXG4vLyBjb3B5IGFsbCBvZiB0aGUgYmVoYXZpb3IgbWV0aG9kcyBhbmQgcHJvcHMgdG8gQWNjb3JkaW9uXG5jb25zdCBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5hc3NpZ24oQWNjb3JkaW9uLCBhY2NvcmRpb24pO1xuXG5BY2NvcmRpb24ucHJvdG90eXBlLnNob3cgPSBzaG93QnV0dG9uO1xuQWNjb3JkaW9uLnByb3RvdHlwZS5oaWRlID0gaGlkZUJ1dHRvbjtcblxuQWNjb3JkaW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gIGFjY29yZGlvbi5vZmYodGhpcy5yb290KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQWNjb3JkaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKCcuLi91dGlscy9iZWhhdmlvcicpO1xuY29uc3QgdG9nZ2xlID0gcmVxdWlyZSgnLi4vdXRpbHMvdG9nZ2xlJyk7XG5cbmNvbnN0IENMSUNLID0gcmVxdWlyZSgnLi4vZXZlbnRzJykuQ0xJQ0s7XG5jb25zdCBQUkVGSVggPSByZXF1aXJlKCcuLi9jb25maWcnKS5wcmVmaXg7XG5cbmNvbnN0IEhFQURFUiA9IGAuJHtQUkVGSVh9LWJhbm5lci1oZWFkZXJgO1xuY29uc3QgRVhQQU5ERURfQ0xBU1MgPSBgJHtQUkVGSVh9LWJhbm5lci1oZWFkZXItZXhwYW5kZWRgO1xuXG5jb25zdCB0b2dnbGVCYW5uZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgdGhpcy5jbG9zZXN0KEhFQURFUikuY2xhc3NMaXN0LnRvZ2dsZShFWFBBTkRFRF9DTEFTUyk7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmVoYXZpb3Ioe1xuICBbIENMSUNLIF06IHtcbiAgICBbIGAke0hFQURFUn0gW2FyaWEtY29udHJvbHNdYCBdOiB0b2dnbGVCYW5uZXIsXG4gIH0sXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFjY29yZGlvbiA9IHJlcXVpcmUoJy4vYWNjb3JkaW9uJyk7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoJy4uL3V0aWxzL2JlaGF2aW9yJyk7XG5jb25zdCBkZWJvdW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC5kZWJvdW5jZScpO1xuY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoJ2FycmF5LWZvcmVhY2gnKTtcbmNvbnN0IHNlbGVjdCA9IHJlcXVpcmUoJy4uL3V0aWxzL3NlbGVjdCcpO1xuXG5jb25zdCBDTElDSyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpLkNMSUNLO1xuY29uc3QgUFJFRklYID0gcmVxdWlyZSgnLi4vY29uZmlnJykucHJlZml4O1xuXG5jb25zdCBISURERU4gPSAnaGlkZGVuJztcbmNvbnN0IFNDT1BFID0gYC4ke1BSRUZJWH0tZm9vdGVyLWJpZ2A7XG5jb25zdCBOQVYgPSBgJHtTQ09QRX0gbmF2YDtcbmNvbnN0IEJVVFRPTiA9IGAke05BVn0gLiR7UFJFRklYfS1mb290ZXItcHJpbWFyeS1saW5rYDtcbmNvbnN0IExJU1QgPSBgJHtOQVZ9IHVsYDtcblxuY29uc3QgSElERV9NQVhfV0lEVEggPSA2MDA7XG5jb25zdCBERUJPVU5DRV9SQVRFID0gMTgwO1xuXG5jb25zdCBzaG93UGFuZWwgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGxpc3QgPSB0aGlzLmNsb3Nlc3QoTElTVCk7XG4gIGxpc3QuY2xhc3NMaXN0LnJlbW92ZShISURERU4pO1xuXG4gIC8vIE5COiB0aGlzICpzaG91bGQqIGFsd2F5cyBzdWNjZWVkIGJlY2F1c2UgdGhlIGJ1dHRvblxuICAvLyBzZWxlY3RvciBpcyBzY29wZWQgdG8gXCIue3ByZWZpeH0tZm9vdGVyLWJpZyBuYXZcIlxuICBjb25zdCBsaXN0cyA9IGxpc3QuY2xvc2VzdChOQVYpXG4gICAgLnF1ZXJ5U2VsZWN0b3JBbGwoJ3VsJyk7XG5cbiAgZm9yRWFjaChsaXN0cywgZWwgPT4ge1xuICAgIGlmIChlbCAhPT0gbGlzdCkge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChISURERU4pO1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCByZXNpemUgPSBkZWJvdW5jZSgoKSA9PiB7XG4gIGNvbnN0IGhpZGRlbiA9IHdpbmRvdy5pbm5lcldpZHRoIDwgSElERV9NQVhfV0lEVEg7XG4gIGZvckVhY2goc2VsZWN0KExJU1QpLCBsaXN0ID0+IHtcbiAgICBsaXN0LmNsYXNzTGlzdC50b2dnbGUoSElEREVOLCBoaWRkZW4pO1xuICB9KTtcbn0sIERFQk9VTkNFX1JBVEUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHtcbiAgWyBDTElDSyBdOiB7XG4gICAgWyBCVVRUT04gXTogc2hvd1BhbmVsLFxuICB9LFxufSwge1xuICAvLyBleHBvcnQgZm9yIHVzZSBlbHNld2hlcmVcbiAgSElERV9NQVhfV0lEVEgsXG4gIERFQk9VTkNFX1JBVEUsXG5cbiAgaW5pdDogdGFyZ2V0ID0+IHtcbiAgICByZXNpemUoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplKTtcbiAgfSxcblxuICB0ZWFyZG93bjogdGFyZ2V0ID0+IHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplKTtcbiAgfSxcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFjY29yZGlvbjogIHJlcXVpcmUoJy4vYWNjb3JkaW9uJyksXG4gIGJhbm5lcjogICAgIHJlcXVpcmUoJy4vYmFubmVyJyksXG4gIGZvb3RlcjogICAgIHJlcXVpcmUoJy4vZm9vdGVyJyksXG4gIG5hdmlnYXRpb246IHJlcXVpcmUoJy4vbmF2aWdhdGlvbicpLFxuICBwYXNzd29yZDogICByZXF1aXJlKCcuL3Bhc3N3b3JkJyksXG4gIHNlYXJjaDogICAgIHJlcXVpcmUoJy4vc2VhcmNoJyksXG4gIHNraXBuYXY6ICAgIHJlcXVpcmUoJy4vc2tpcG5hdicpLFxuICB2YWxpZGF0b3I6ICByZXF1aXJlKCcuL3ZhbGlkYXRvcicpLFxufTtcblxuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKCcuLi91dGlscy9iZWhhdmlvcicpO1xuY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoJ2FycmF5LWZvcmVhY2gnKTtcbmNvbnN0IHNlbGVjdCA9IHJlcXVpcmUoJy4uL3V0aWxzL3NlbGVjdCcpO1xuY29uc3QgYWNjb3JkaW9uID0gcmVxdWlyZSgnLi9hY2NvcmRpb24nKTtcblxuY29uc3QgQ0xJQ0sgPSByZXF1aXJlKCcuLi9ldmVudHMnKS5DTElDSztcbmNvbnN0IFBSRUZJWCA9IHJlcXVpcmUoJy4uL2NvbmZpZycpLnByZWZpeDtcblxuY29uc3QgTkFWID0gYC4ke1BSRUZJWH0tbmF2YDtcbmNvbnN0IE5BVl9MSU5LUyA9IGAke05BVn0gYWA7XG5jb25zdCBPUEVORVJTID0gYC4ke1BSRUZJWH0tbWVudS1idG5gO1xuY29uc3QgQ0xPU0VfQlVUVE9OID0gYC4ke1BSRUZJWH0tbmF2LWNsb3NlYDtcbmNvbnN0IE9WRVJMQVkgPSBgLiR7UFJFRklYfS1vdmVybGF5YDtcbmNvbnN0IENMT1NFUlMgPSBgJHtDTE9TRV9CVVRUT059LCAuJHtQUkVGSVh9LW92ZXJsYXlgO1xuY29uc3QgVE9HR0xFUyA9IFsgTkFWLCBPVkVSTEFZIF0uam9pbignLCAnKTtcblxuY29uc3QgQUNUSVZFX0NMQVNTID0gJ3VzYS1tb2JpbGVfbmF2LWFjdGl2ZSc7XG5jb25zdCBWSVNJQkxFX0NMQVNTID0gJ2lzLXZpc2libGUnO1xuXG5jb25zdCBpc0FjdGl2ZSA9ICgpID0+IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKEFDVElWRV9DTEFTUyk7XG5cbmNvbnN0IHRvZ2dsZU5hdiA9IGZ1bmN0aW9uIChhY3RpdmUpIHtcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gIGlmICh0eXBlb2YgYWN0aXZlICE9PSAnYm9vbGVhbicpIHtcbiAgICBhY3RpdmUgPSAhaXNBY3RpdmUoKTtcbiAgfVxuICBib2R5LmNsYXNzTGlzdC50b2dnbGUoQUNUSVZFX0NMQVNTLCBhY3RpdmUpO1xuXG4gIGZvckVhY2goc2VsZWN0KFRPR0dMRVMpLCBlbCA9PiB7XG4gICAgZWwuY2xhc3NMaXN0LnRvZ2dsZShWSVNJQkxFX0NMQVNTLCBhY3RpdmUpO1xuICB9KTtcblxuICBjb25zdCBjbG9zZUJ1dHRvbiA9IGJvZHkucXVlcnlTZWxlY3RvcihDTE9TRV9CVVRUT04pO1xuICBjb25zdCBtZW51QnV0dG9uID0gYm9keS5xdWVyeVNlbGVjdG9yKE9QRU5FUlMpO1xuXG4gIGlmIChhY3RpdmUgJiYgY2xvc2VCdXR0b24pIHtcbiAgICAvLyBUaGUgbW9iaWxlIG5hdiB3YXMganVzdCBhY3RpdmF0ZWQsIHNvIGZvY3VzIG9uIHRoZSBjbG9zZSBidXR0b24sXG4gICAgLy8gd2hpY2ggaXMganVzdCBiZWZvcmUgYWxsIHRoZSBuYXYgZWxlbWVudHMgaW4gdGhlIHRhYiBvcmRlci5cbiAgICBjbG9zZUJ1dHRvbi5mb2N1cygpO1xuICB9IGVsc2UgaWYgKCFhY3RpdmUgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gY2xvc2VCdXR0b24gJiZcbiAgICAgICAgICAgICBtZW51QnV0dG9uKSB7XG4gICAgLy8gVGhlIG1vYmlsZSBuYXYgd2FzIGp1c3QgZGVhY3RpdmF0ZWQsIGFuZCBmb2N1cyB3YXMgb24gdGhlIGNsb3NlXG4gICAgLy8gYnV0dG9uLCB3aGljaCBpcyBubyBsb25nZXIgdmlzaWJsZS4gV2UgZG9uJ3Qgd2FudCB0aGUgZm9jdXMgdG9cbiAgICAvLyBkaXNhcHBlYXIgaW50byB0aGUgdm9pZCwgc28gZm9jdXMgb24gdGhlIG1lbnUgYnV0dG9uIGlmIGl0J3NcbiAgICAvLyB2aXNpYmxlICh0aGlzIG1heSBoYXZlIGJlZW4gd2hhdCB0aGUgdXNlciB3YXMganVzdCBmb2N1c2VkIG9uLFxuICAgIC8vIGlmIHRoZXkgdHJpZ2dlcmVkIHRoZSBtb2JpbGUgbmF2IGJ5IG1pc3Rha2UpLlxuICAgIG1lbnVCdXR0b24uZm9jdXMoKTtcbiAgfVxuXG4gIHJldHVybiBhY3RpdmU7XG59O1xuXG5jb25zdCByZXNpemUgPSAoKSA9PiB7XG4gIGNvbnN0IGNsb3NlciA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcihDTE9TRV9CVVRUT04pO1xuXG4gIGlmIChpc0FjdGl2ZSgpICYmIGNsb3NlciAmJiBjbG9zZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPT09IDApIHtcbiAgICAvLyBUaGUgbW9iaWxlIG5hdiBpcyBhY3RpdmUsIGJ1dCB0aGUgY2xvc2UgYm94IGlzbid0IHZpc2libGUsIHdoaWNoXG4gICAgLy8gbWVhbnMgdGhlIHVzZXIncyB2aWV3cG9ydCBoYXMgYmVlbiByZXNpemVkIHNvIHRoYXQgaXQgaXMgbm8gbG9uZ2VyXG4gICAgLy8gaW4gbW9iaWxlIG1vZGUuIExldCdzIG1ha2UgdGhlIHBhZ2Ugc3RhdGUgY29uc2lzdGVudCBieVxuICAgIC8vIGRlYWN0aXZhdGluZyB0aGUgbW9iaWxlIG5hdi5cbiAgICB0b2dnbGVOYXYuY2FsbChjbG9zZXIsIGZhbHNlKTtcbiAgfVxufTtcblxuY29uc3QgbmF2aWdhdGlvbiA9IGJlaGF2aW9yKHtcbiAgWyBDTElDSyBdOiB7XG4gICAgWyBPUEVORVJTIF06IHRvZ2dsZU5hdixcbiAgICBbIENMT1NFUlMgXTogdG9nZ2xlTmF2LFxuICAgIFsgTkFWX0xJTktTIF06IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEEgbmF2aWdhdGlvbiBsaW5rIGhhcyBiZWVuIGNsaWNrZWQhIFdlIHdhbnQgdG8gY29sbGFwc2UgYW55XG4gICAgICAvLyBoaWVyYXJjaGljYWwgbmF2aWdhdGlvbiBVSSBpdCdzIGEgcGFydCBvZiwgc28gdGhhdCB0aGUgdXNlclxuICAgICAgLy8gY2FuIGZvY3VzIG9uIHdoYXRldmVyIHRoZXkndmUganVzdCBzZWxlY3RlZC5cblxuICAgICAgLy8gU29tZSBuYXZpZ2F0aW9uIGxpbmtzIGFyZSBpbnNpZGUgYWNjb3JkaW9uczsgd2hlbiB0aGV5J3JlXG4gICAgICAvLyBjbGlja2VkLCB3ZSB3YW50IHRvIGNvbGxhcHNlIHRob3NlIGFjY29yZGlvbnMuXG4gICAgICBjb25zdCBhY2MgPSB0aGlzLmNsb3Nlc3QoYWNjb3JkaW9uLkFDQ09SRElPTik7XG4gICAgICBpZiAoYWNjKSB7XG4gICAgICAgIGFjY29yZGlvbi5nZXRCdXR0b25zKGFjYykuZm9yRWFjaChidG4gPT4gYWNjb3JkaW9uLmhpZGUoYnRuKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBtb2JpbGUgbmF2aWdhdGlvbiBtZW51IGlzIGFjdGl2ZSwgd2Ugd2FudCB0byBoaWRlIGl0LlxuICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgdG9nZ2xlTmF2LmNhbGwodGhpcywgZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG59LCB7XG4gIGluaXQgKCkge1xuICAgIHJlc2l6ZSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemUsIGZhbHNlKTtcbiAgfSxcbiAgdGVhcmRvd24gKCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemUsIGZhbHNlKTtcbiAgfSxcbn0pO1xuXG4vKipcbiAqIFRPRE8gZm9yIDIuMCwgcmVtb3ZlIHRoaXMgc3RhdGVtZW50IGFuZCBleHBvcnQgYG5hdmlnYXRpb25gIGRpcmVjdGx5OlxuICpcbiAqIG1vZHVsZS5leHBvcnRzID0gYmVoYXZpb3Ioey4uLn0pO1xuICovXG5jb25zdCBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbihcbiAgZWwgPT4gbmF2aWdhdGlvbi5vbihlbCksXG4gIG5hdmlnYXRpb25cbik7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoJy4uL3V0aWxzL2JlaGF2aW9yJyk7XG5jb25zdCB0b2dnbGVGb3JtSW5wdXQgPSByZXF1aXJlKCcuLi91dGlscy90b2dnbGUtZm9ybS1pbnB1dCcpO1xuXG5jb25zdCBDTElDSyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpLkNMSUNLO1xuY29uc3QgUFJFRklYID0gcmVxdWlyZSgnLi4vY29uZmlnJykucHJlZml4O1xuXG5jb25zdCBMSU5LID0gYC4ke1BSRUZJWH0tc2hvd19wYXNzd29yZCwgLiR7UFJFRklYfS1zaG93X211bHRpcGFzc3dvcmRgO1xuXG5jb25zdCB0b2dnbGUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgdG9nZ2xlRm9ybUlucHV0KHRoaXMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiZWhhdmlvcih7XG4gIFsgQ0xJQ0sgXToge1xuICAgIFsgTElOSyBdOiB0b2dnbGUsXG4gIH0sXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGJlaGF2aW9yID0gcmVxdWlyZSgnLi4vdXRpbHMvYmVoYXZpb3InKTtcbmNvbnN0IGZvckVhY2ggPSByZXF1aXJlKCdhcnJheS1mb3JlYWNoJyk7XG5jb25zdCBpZ25vcmUgPSByZXF1aXJlKCdyZWNlcHRvci9pZ25vcmUnKTtcbmNvbnN0IHNlbGVjdCA9IHJlcXVpcmUoJy4uL3V0aWxzL3NlbGVjdCcpO1xuXG5jb25zdCBDTElDSyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpLkNMSUNLO1xuY29uc3QgUFJFRklYID0gcmVxdWlyZSgnLi4vY29uZmlnJykucHJlZml4O1xuXG5jb25zdCBCVVRUT04gPSAnLmpzLXNlYXJjaC1idXR0b24nO1xuY29uc3QgRk9STSA9ICcuanMtc2VhcmNoLWZvcm0nO1xuY29uc3QgSU5QVVQgPSAnW3R5cGU9c2VhcmNoXSc7XG5jb25zdCBDT05URVhUID0gJ2hlYWRlcic7IC8vIFhYWFxuY29uc3QgVklTVUFMTFlfSElEREVOID0gYCR7UFJFRklYfS1zci1vbmx5YDtcblxubGV0IGxhc3RCdXR0b247XG5cbmNvbnN0IHNob3dTZWFyY2ggPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdG9nZ2xlU2VhcmNoKHRoaXMsIHRydWUpO1xuICBsYXN0QnV0dG9uID0gdGhpcztcbn07XG5cbmNvbnN0IGhpZGVTZWFyY2ggPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdG9nZ2xlU2VhcmNoKHRoaXMsIGZhbHNlKTtcbiAgbGFzdEJ1dHRvbiA9IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGdldEZvcm0gPSBidXR0b24gPT4ge1xuICBjb25zdCBjb250ZXh0ID0gYnV0dG9uLmNsb3Nlc3QoQ09OVEVYVCk7XG4gIHJldHVybiBjb250ZXh0XG4gICAgPyBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoRk9STSlcbiAgICA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoRk9STSk7XG59O1xuXG5jb25zdCB0b2dnbGVTZWFyY2ggPSAoYnV0dG9uLCBhY3RpdmUpID0+IHtcbiAgY29uc3QgZm9ybSA9IGdldEZvcm0oYnV0dG9uKTtcbiAgaWYgKCFmb3JtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyAke0ZPUk19IGZvdW5kIGZvciBzZWFyY2ggdG9nZ2xlIGluICR7Q09OVEVYVH0hYCk7XG4gIH1cblxuICBidXR0b24uaGlkZGVuID0gYWN0aXZlO1xuICBmb3JtLmNsYXNzTGlzdC50b2dnbGUoVklTVUFMTFlfSElEREVOLCAhYWN0aXZlKTtcblxuICBpZiAoYWN0aXZlKSB7XG4gICAgY29uc3QgaW5wdXQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoSU5QVVQpO1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gICAgLy8gd2hlbiB0aGUgdXNlciBjbGlja3MgX291dHNpZGVfIG9mIHRoZSBmb3JtIHcvaWdub3JlKCk6IGhpZGUgdGhlXG4gICAgLy8gc2VhcmNoLCB0aGVuIHJlbW92ZSB0aGUgbGlzdGVuZXJcbiAgICBjb25zdCBsaXN0ZW5lciA9IGlnbm9yZShmb3JtLCBlID0+IHtcbiAgICAgIGlmIChsYXN0QnV0dG9uKSB7XG4gICAgICAgIGhpZGVTZWFyY2guY2FsbChsYXN0QnV0dG9uKTtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihDTElDSywgbGlzdGVuZXIpO1xuICAgIH0pO1xuXG4gICAgLy8gTm9ybWFsbHkgd2Ugd291bGQganVzdCBydW4gdGhpcyBjb2RlIHdpdGhvdXQgYSB0aW1lb3V0LCBidXRcbiAgICAvLyBJRTExIGFuZCBFZGdlIHdpbGwgYWN0dWFsbHkgY2FsbCB0aGUgbGlzdGVuZXIgKmltbWVkaWF0ZWx5KiBiZWNhdXNlXG4gICAgLy8gdGhleSBhcmUgY3VycmVudGx5IGhhbmRsaW5nIHRoaXMgZXhhY3QgdHlwZSBvZiBldmVudCwgc28gd2UnbGxcbiAgICAvLyBtYWtlIHN1cmUgdGhlIGJyb3dzZXIgaXMgZG9uZSBoYW5kbGluZyB0aGUgY3VycmVudCBjbGljayBldmVudCxcbiAgICAvLyBpZiBhbnksIGJlZm9yZSB3ZSBhdHRhY2ggdGhlIGxpc3RlbmVyLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKENMSUNLLCBsaXN0ZW5lcik7XG4gICAgfSwgMCk7XG4gIH1cbn07XG5cbmNvbnN0IHNlYXJjaCA9IGJlaGF2aW9yKHtcbiAgWyBDTElDSyBdOiB7XG4gICAgWyBCVVRUT04gXTogc2hvd1NlYXJjaCxcbiAgfSxcbn0sIHtcbiAgaW5pdDogKHRhcmdldCkgPT4ge1xuICAgIGZvckVhY2goc2VsZWN0KEJVVFRPTiwgdGFyZ2V0KSwgYnV0dG9uID0+IHtcbiAgICAgIHRvZ2dsZVNlYXJjaChidXR0b24sIGZhbHNlKTtcbiAgICB9KTtcbiAgfSxcbiAgdGVhcmRvd246ICh0YXJnZXQpID0+IHtcbiAgICAvLyBmb3JnZXQgdGhlIGxhc3QgYnV0dG9uIGNsaWNrZWRcbiAgICBsYXN0QnV0dG9uID0gdW5kZWZpbmVkO1xuICB9LFxufSk7XG5cbi8qKlxuICogVE9ETyBmb3IgMi4wLCByZW1vdmUgdGhpcyBzdGF0ZW1lbnQgYW5kIGV4cG9ydCBgbmF2aWdhdGlvbmAgZGlyZWN0bHk6XG4gKlxuICogbW9kdWxlLmV4cG9ydHMgPSBiZWhhdmlvcih7Li4ufSk7XG4gKi9cbmNvbnN0IGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbm1vZHVsZS5leHBvcnRzID0gYXNzaWduKFxuICBlbCA9PiBzZWFyY2gub24oZWwpLFxuICBzZWFyY2hcbik7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoJy4uL3V0aWxzL2JlaGF2aW9yJyk7XG5jb25zdCBvbmNlID0gcmVxdWlyZSgncmVjZXB0b3Ivb25jZScpO1xuXG5jb25zdCBDTElDSyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpLkNMSUNLO1xuY29uc3QgUFJFRklYID0gcmVxdWlyZSgnLi4vY29uZmlnJykucHJlZml4O1xuY29uc3QgTElOSyA9IGAuJHtQUkVGSVh9LXNraXBuYXZbaHJlZl49XCIjXCJdYDtcblxuY29uc3Qgc2V0VGFiaW5kZXggPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gTkI6IHdlIGtub3cgYmVjYXVzZSBvZiB0aGUgc2VsZWN0b3Igd2UncmUgZGVsZWdhdGluZyB0byBiZWxvdyB0aGF0IHRoZVxuICAvLyBocmVmIGFscmVhZHkgYmVnaW5zIHdpdGggJyMnXG4gIGNvbnN0IGlkID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKS5zbGljZSgxKTtcbiAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAodGFyZ2V0KSB7XG4gICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAwKTtcbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uY2UoZXZlbnQgPT4ge1xuICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAtMSk7XG4gICAgfSkpO1xuICB9IGVsc2Uge1xuICAgIC8vIHRocm93IGFuIGVycm9yP1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHtcbiAgWyBDTElDSyBdOiB7XG4gICAgWyBMSU5LIF06IHNldFRhYmluZGV4LFxuICB9LFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoJy4uL3V0aWxzL2JlaGF2aW9yJyk7XG5jb25zdCB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL3ZhbGlkYXRlLWlucHV0Jyk7XG5jb25zdCBkZWJvdW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC5kZWJvdW5jZScpO1xuXG5jb25zdCBjaGFuZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKHRoaXMpO1xufTtcblxuY29uc3QgdmFsaWRhdG9yID0gYmVoYXZpb3Ioe1xuICAna2V5dXAgY2hhbmdlJzoge1xuICAgICdpbnB1dFtkYXRhLXZhbGlkYXRpb24tZWxlbWVudF0nOiBjaGFuZ2UsXG4gIH0sXG59KTtcblxuLyoqXG4gKiBUT0RPIGZvciAyLjAsIHJlbW92ZSB0aGlzIHN0YXRlbWVudCBhbmQgZXhwb3J0IGBuYXZpZ2F0aW9uYCBkaXJlY3RseTpcbiAqXG4gKiBtb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHsuLi59KTtcbiAqL1xuY29uc3QgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ24oXG4gIGVsID0+IHZhbGlkYXRvci5vbihlbCksXG4gIHZhbGlkYXRvclxuKTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBwcmVmaXg6ICd1c2EnLFxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBUaGlzIHVzZWQgdG8gYmUgY29uZGl0aW9uYWxseSBkZXBlbmRlbnQgb24gd2hldGhlciB0aGVcbiAgLy8gYnJvd3NlciBzdXBwb3J0ZWQgdG91Y2ggZXZlbnRzOyBpZiBpdCBkaWQsIGBDTElDS2Agd2FzIHNldCB0b1xuICAvLyBgdG91Y2hzdGFydGAuICBIb3dldmVyLCB0aGlzIGhhZCBkb3duc2lkZXM6XG4gIC8vXG4gIC8vICogSXQgcHJlLWVtcHRlZCBtb2JpbGUgYnJvd3NlcnMnIGRlZmF1bHQgYmVoYXZpb3Igb2YgZGV0ZWN0aW5nXG4gIC8vICAgd2hldGhlciBhIHRvdWNoIHR1cm5lZCBpbnRvIGEgc2Nyb2xsLCB0aGVyZWJ5IHByZXZlbnRpbmdcbiAgLy8gICB1c2VycyBmcm9tIHVzaW5nIHNvbWUgb2Ygb3VyIGNvbXBvbmVudHMgYXMgc2Nyb2xsIHN1cmZhY2VzLlxuICAvL1xuICAvLyAqIFNvbWUgZGV2aWNlcywgc3VjaCBhcyB0aGUgTWljcm9zb2Z0IFN1cmZhY2UgUHJvLCBzdXBwb3J0ICpib3RoKlxuICAvLyAgIHRvdWNoIGFuZCBjbGlja3MuIFRoaXMgbWVhbnQgdGhlIGNvbmRpdGlvbmFsIGVmZmVjdGl2ZWx5IGRyb3BwZWRcbiAgLy8gICBzdXBwb3J0IGZvciB0aGUgdXNlcidzIG1vdXNlLCBmcnVzdHJhdGluZyB1c2VycyB3aG8gcHJlZmVycmVkXG4gIC8vICAgaXQgb24gdGhvc2Ugc3lzdGVtcy5cbiAgQ0xJQ0s6ICdjbGljaycsXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgZWxwcm90byA9IHdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGU7XG5jb25zdCBISURERU4gPSAnaGlkZGVuJztcblxuaWYgKCEoSElEREVOIGluIGVscHJvdG8pKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbHByb3RvLCBISURERU4sIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShISURERU4pO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShISURERU4sICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKEhJRERFTik7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG4vLyBwb2x5ZmlsbHMgSFRNTEVsZW1lbnQucHJvdG90eXBlLmNsYXNzTGlzdCBhbmQgRE9NVG9rZW5MaXN0XG5yZXF1aXJlKCdjbGFzc2xpc3QtcG9seWZpbGwnKTtcbi8vIHBvbHlmaWxscyBIVE1MRWxlbWVudC5wcm90b3R5cGUuaGlkZGVuXG5yZXF1aXJlKCcuL2VsZW1lbnQtaGlkZGVuJyk7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBkb21yZWFkeSA9IHJlcXVpcmUoJ2RvbXJlYWR5Jyk7XG5cbi8qKlxuICogVGhlICdwb2x5ZmlsbHMnIGRlZmluZSBrZXkgRUNNQVNjcmlwdCA1IG1ldGhvZHMgdGhhdCBtYXkgYmUgbWlzc2luZyBmcm9tXG4gKiBvbGRlciBicm93c2Vycywgc28gbXVzdCBiZSBsb2FkZWQgZmlyc3QuXG4gKi9cbnJlcXVpcmUoJy4vcG9seWZpbGxzJyk7XG5cbmNvbnN0IHVzd2RzID0gcmVxdWlyZSgnLi9jb25maWcnKTtcblxuY29uc3QgY29tcG9uZW50cyA9IHJlcXVpcmUoJy4vY29tcG9uZW50cycpO1xudXN3ZHMuY29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG5cbmRvbXJlYWR5KCgpID0+IHtcbiAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuYm9keTtcbiAgZm9yIChsZXQgbmFtZSBpbiBjb21wb25lbnRzKSB7XG4gICAgY29uc3QgYmVoYXZpb3IgPSBjb21wb25lbnRzWyBuYW1lIF07XG4gICAgYmVoYXZpb3Iub24odGFyZ2V0KTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gdXN3ZHM7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5jb25zdCBmb3JFYWNoID0gcmVxdWlyZSgnYXJyYXktZm9yZWFjaCcpO1xuY29uc3QgQmVoYXZpb3IgPSByZXF1aXJlKCdyZWNlcHRvci9iZWhhdmlvcicpO1xuXG5jb25zdCBzZXF1ZW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VxID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICB0YXJnZXQgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cbiAgICBmb3JFYWNoKHNlcSwgbWV0aG9kID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpc1sgbWV0aG9kIF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpc1sgbWV0aG9kIF0uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufTtcblxuLyoqXG4gKiBAbmFtZSBiZWhhdmlvclxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50c1xuICogQHBhcmFtIHtvYmplY3Q/fSBwcm9wc1xuICogQHJldHVybiB7cmVjZXB0b3IuYmVoYXZpb3J9XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGV2ZW50cywgcHJvcHMpID0+IHtcbiAgcmV0dXJuIEJlaGF2aW9yKGV2ZW50cywgYXNzaWduKHtcbiAgICBvbjogICBzZXF1ZW5jZSgnaW5pdCcsICdhZGQnKSxcbiAgICBvZmY6ICBzZXF1ZW5jZSgndGVhcmRvd24nLCAncmVtb3ZlJyksXG4gIH0sIHByb3BzKSk7XG59O1xuIiwiLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzc1NTc0MzNcbmZ1bmN0aW9uIGlzRWxlbWVudEluVmlld3BvcnQgKGVsLCB3aW49d2luZG93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jRWw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIChcbiAgICByZWN0LnRvcCA+PSAwICYmXG4gICAgcmVjdC5sZWZ0ID49IDAgJiZcbiAgICByZWN0LmJvdHRvbSA8PSAod2luLmlubmVySGVpZ2h0IHx8IGRvY0VsLmNsaWVudEhlaWdodCkgJiZcbiAgICByZWN0LnJpZ2h0IDw9ICh3aW4uaW5uZXJXaWR0aCB8fCBkb2NFbC5jbGllbnRXaWR0aClcbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VsZW1lbnRJblZpZXdwb3J0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBuYW1lIGlzRWxlbWVudFxuICogQGRlc2MgcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gYXJndW1lbnQgaXMgYSBET00gZWxlbWVudC5cbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaXNFbGVtZW50ID0gdmFsdWUgPT4ge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5ub2RlVHlwZSA9PT0gMTtcbn07XG5cbi8qKlxuICogQG5hbWUgc2VsZWN0XG4gKiBAZGVzYyBzZWxlY3RzIGVsZW1lbnRzIGZyb20gdGhlIERPTSBieSBjbGFzcyBzZWxlY3RvciBvciBJRCBzZWxlY3Rvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFRoZSBzZWxlY3RvciB0byB0cmF2ZXJzZSB0aGUgRE9NIHdpdGguXG4gKiBAcGFyYW0ge0RvY3VtZW50fEhUTUxFbGVtZW50P30gY29udGV4dCAtIFRoZSBjb250ZXh0IHRvIHRyYXZlcnNlIHRoZSBET01cbiAqICAgaW4uIElmIG5vdCBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIGRvY3VtZW50LlxuICogQHJldHVybiB7SFRNTEVsZW1lbnRbXX0gLSBBbiBhcnJheSBvZiBET00gbm9kZXMgb3IgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2VsZWN0IChzZWxlY3RvciwgY29udGV4dCkge1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKCFjb250ZXh0IHx8ICFpc0VsZW1lbnQoY29udGV4dCkpIHtcbiAgICBjb250ZXh0ID0gd2luZG93LmRvY3VtZW50O1xuICB9XG5cbiAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHNlbGVjdGlvbik7XG59O1xuIiwiLyoqXG4gKiBGbGlwcyBnaXZlbiBJTlBVVCBlbGVtZW50cyBiZXR3ZWVuIG1hc2tlZCAoaGlkaW5nIHRoZSBmaWVsZCB2YWx1ZSkgYW5kIHVubWFza2VkXG4gKiBAcGFyYW0ge0FycmF5LkhUTUxFbGVtZW50fSBmaWVsZHMgLSBBbiBhcnJheSBvZiBJTlBVVCBlbGVtZW50c1xuICogQHBhcmFtIHtCb29sZWFufSBtYXNrIC0gV2hldGhlciB0aGUgbWFzayBzaG91bGQgYmUgYXBwbGllZCwgaGlkaW5nIHRoZSBmaWVsZCB2YWx1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IChmaWVsZCwgbWFzaykgPT4ge1xuICBmaWVsZC5zZXRBdHRyaWJ1dGUoJ2F1dG9jYXBpdGFsaXplJywgJ29mZicpO1xuICBmaWVsZC5zZXRBdHRyaWJ1dGUoJ2F1dG9jb3JyZWN0JywgJ29mZicpO1xuICBmaWVsZC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCBtYXNrID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0Jyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoJ2FycmF5LWZvcmVhY2gnKTtcbmNvbnN0IHJlc29sdmVJZFJlZnMgPSByZXF1aXJlKCdyZXNvbHZlLWlkLXJlZnMnKTtcbmNvbnN0IHNlbGVjdCA9IHJlcXVpcmUoJy4vc2VsZWN0Jyk7XG5jb25zdCB0b2dnbGVGaWVsZE1hc2sgPSByZXF1aXJlKCcuL3RvZ2dsZS1maWVsZC1tYXNrJyk7XG5cbmNvbnN0IENPTlRST0xTID0gJ2FyaWEtY29udHJvbHMnO1xuY29uc3QgUFJFU1NFRCA9ICdhcmlhLXByZXNzZWQnO1xuY29uc3QgU0hPV19BVFRSID0gJ2RhdGEtc2hvdy10ZXh0JztcbmNvbnN0IEhJREVfQVRUUiA9ICdkYXRhLWhpZGUtdGV4dCc7XG5cbi8qKlxuICogUmVwbGFjZSB0aGUgd29yZCBcIlNob3dcIiAob3IgXCJzaG93XCIpIHdpdGggXCJIaWRlXCIgKG9yIFwiaGlkZVwiKSBpbiBhIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzaG93VGV4dFxuICogQHJldHVybiB7c3Ryb25nfSBoaWRlVGV4dFxuICovXG5jb25zdCBnZXRIaWRlVGV4dCA9IHNob3dUZXh0ID0+IHtcbiAgcmV0dXJuIHNob3dUZXh0LnJlcGxhY2UoL1xcYlNob3dcXGIvaSwgc2hvdyA9PiB7XG4gICAgcmV0dXJuICgnUycgPT09IHNob3dbIDAgXSA/ICdIJyA6ICdoJykgKyAnaWRlJztcbiAgfSk7XG59O1xuXG4vKipcbiAqIENvbXBvbmVudCB0aGF0IGRlY29yYXRlcyBhbiBIVE1MIGVsZW1lbnQgd2l0aCB0aGUgYWJpbGl0eSB0byB0b2dnbGUgdGhlXG4gKiBtYXNrZWQgc3RhdGUgb2YgYW4gaW5wdXQgZmllbGQgKGxpa2UgYSBwYXNzd29yZCkgd2hlbiBjbGlja2VkLlxuICogVGhlIGlkcyBvZiB0aGUgZmllbGRzIHRvIGJlIG1hc2tlZCB3aWxsIGJlIHB1bGxlZCBkaXJlY3RseSBmcm9tIHRoZSBidXR0b24nc1xuICogYGFyaWEtY29udHJvbHNgIGF0dHJpYnV0ZS5cbiAqXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWwgICAgUGFyZW50IGVsZW1lbnQgY29udGFpbmluZyB0aGUgZmllbGRzIHRvIGJlIG1hc2tlZFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBlbCA9PiB7XG4gIC8vIHRoaXMgaXMgdGhlICp0YXJnZXQqIHN0YXRlOlxuICAvLyAqIGlmIHRoZSBlbGVtZW50IGhhcyB0aGUgYXR0ciBhbmQgaXQncyAhPT0gXCJ0cnVlXCIsIHByZXNzZWQgaXMgdHJ1ZVxuICAvLyAqIG90aGVyd2lzZSwgcHJlc3NlZCBpcyBmYWxzZVxuICBjb25zdCBwcmVzc2VkID0gZWwuaGFzQXR0cmlidXRlKFBSRVNTRUQpXG4gICAgJiYgZWwuZ2V0QXR0cmlidXRlKFBSRVNTRUQpICE9PSAndHJ1ZSc7XG5cbiAgY29uc3QgZmllbGRzID0gcmVzb2x2ZUlkUmVmcyhlbC5nZXRBdHRyaWJ1dGUoQ09OVFJPTFMpKTtcbiAgZm9yRWFjaChmaWVsZHMsIGZpZWxkID0+IHRvZ2dsZUZpZWxkTWFzayhmaWVsZCwgcHJlc3NlZCkpO1xuXG4gIGlmICghZWwuaGFzQXR0cmlidXRlKFNIT1dfQVRUUikpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoU0hPV19BVFRSLCBlbC50ZXh0Q29udGVudCk7XG4gIH1cblxuICBjb25zdCBzaG93VGV4dCA9IGVsLmdldEF0dHJpYnV0ZShTSE9XX0FUVFIpO1xuICBjb25zdCBoaWRlVGV4dCA9IGVsLmdldEF0dHJpYnV0ZShISURFX0FUVFIpIHx8IGdldEhpZGVUZXh0KHNob3dUZXh0KTtcblxuICBlbC50ZXh0Q29udGVudCA9IHByZXNzZWQgPyBzaG93VGV4dCA6IGhpZGVUZXh0O1xuICBlbC5zZXRBdHRyaWJ1dGUoUFJFU1NFRCwgcHJlc3NlZCk7XG4gIHJldHVybiBwcmVzc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IEVYUEFOREVEID0gJ2FyaWEtZXhwYW5kZWQnO1xuY29uc3QgQ09OVFJPTFMgPSAnYXJpYS1jb250cm9scyc7XG5jb25zdCBISURERU4gPSAnYXJpYS1oaWRkZW4nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChidXR0b24sIGV4cGFuZGVkKSA9PiB7XG5cbiAgaWYgKHR5cGVvZiBleHBhbmRlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgZXhwYW5kZWQgPSBidXR0b24uZ2V0QXR0cmlidXRlKEVYUEFOREVEKSA9PT0gJ2ZhbHNlJztcbiAgfVxuICBidXR0b24uc2V0QXR0cmlidXRlKEVYUEFOREVELCBleHBhbmRlZCk7XG5cbiAgY29uc3QgaWQgPSBidXR0b24uZ2V0QXR0cmlidXRlKENPTlRST0xTKTtcbiAgY29uc3QgY29udHJvbHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghY29udHJvbHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnTm8gdG9nZ2xlIHRhcmdldCBmb3VuZCB3aXRoIGlkOiBcIicgKyBpZCArICdcIidcbiAgICApO1xuICB9XG5cbiAgY29udHJvbHMuc2V0QXR0cmlidXRlKEhJRERFTiwgIWV4cGFuZGVkKTtcbiAgcmV0dXJuIGV4cGFuZGVkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGRhdGFzZXQgPSByZXF1aXJlKCdlbGVtLWRhdGFzZXQnKTtcblxuY29uc3QgUFJFRklYID0gcmVxdWlyZSgnLi4vY29uZmlnJykucHJlZml4O1xuY29uc3QgQ0hFQ0tFRCA9ICdhcmlhLWNoZWNrZWQnO1xuY29uc3QgQ0hFQ0tFRF9DTEFTUyA9IGAke1BSRUZJWH0tY2hlY2tsaXN0LWNoZWNrZWRgO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHZhbGlkYXRlIChlbCkge1xuICBjb25zdCBkYXRhID0gZGF0YXNldChlbCk7XG4gIGNvbnN0IGlkID0gZGF0YS52YWxpZGF0aW9uRWxlbWVudDtcbiAgY29uc3QgY2hlY2tMaXN0ID0gaWQuY2hhckF0KDApID09PSAnIydcbiAgICA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaWQpXG4gICAgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cbiAgaWYgKCFjaGVja0xpc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTm8gdmFsaWRhdGlvbiBlbGVtZW50IGZvdW5kIHdpdGggaWQ6IFwiJHtpZH1cImBcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aCgndmFsaWRhdGUnKSkge1xuICAgICAgY29uc3QgdmFsaWRhdG9yTmFtZSA9IGtleS5zdWJzdHIoJ3ZhbGlkYXRlJy5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB2YWxpZGF0b3JQYXR0ZXJuID0gbmV3IFJlZ0V4cChkYXRhWyBrZXkgXSk7XG4gICAgICBjb25zdCB2YWxpZGF0b3JTZWxlY3RvciA9IGBbZGF0YS12YWxpZGF0b3I9XCIke3ZhbGlkYXRvck5hbWV9XCJdYDtcbiAgICAgIGNvbnN0IHZhbGlkYXRvckNoZWNrYm94ID0gY2hlY2tMaXN0LnF1ZXJ5U2VsZWN0b3IodmFsaWRhdG9yU2VsZWN0b3IpO1xuICAgICAgaWYgKCF2YWxpZGF0b3JDaGVja2JveCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE5vIHZhbGlkYXRvciBjaGVja2JveCBmb3VuZCBmb3I6IFwiJHt2YWxpZGF0b3JOYW1lfVwiYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGVja2VkID0gdmFsaWRhdG9yUGF0dGVybi50ZXN0KGVsLnZhbHVlKTtcbiAgICAgIHZhbGlkYXRvckNoZWNrYm94LmNsYXNzTGlzdC50b2dnbGUoQ0hFQ0tFRF9DTEFTUywgY2hlY2tlZCk7XG4gICAgICB2YWxpZGF0b3JDaGVja2JveC5zZXRBdHRyaWJ1dGUoQ0hFQ0tFRCwgY2hlY2tlZCk7XG4gICAgfVxuICB9XG59O1xuIl19
|
2734
|
+
},{"../config":28,"elem-dataset":3}]},{},[32])
|
2735
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvY2xhc3NsaXN0LXBvbHlmaWxsL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kb21yZWFkeS9yZWFkeS5qcyIsIm5vZGVfbW9kdWxlcy9lbGVtLWRhdGFzZXQvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lbGVtZW50LWNsb3Nlc3QvZWxlbWVudC1jbG9zZXN0LmpzIiwibm9kZV9tb2R1bGVzL2tleWJvYXJkZXZlbnQta2V5LXBvbHlmaWxsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC5kZWJvdW5jZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL2JlaGF2aW9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL2NvbXBvc2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVjZXB0b3IvZGVsZWdhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVjZXB0b3IvZGVsZWdhdGVBbGwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVjZXB0b3IvaWdub3JlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL2tleW1hcC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWNlcHRvci9vbmNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc29sdmUtaWQtcmVmcy9pbmRleC5qcyIsInNyYy9qcy9jb21wb25lbnRzL2FjY29yZGlvbi5qcyIsInNyYy9qcy9jb21wb25lbnRzL2Jhbm5lci5qcyIsInNyYy9qcy9jb21wb25lbnRzL2NoYXJhY3Rlci1jb3VudC5qcyIsInNyYy9qcy9jb21wb25lbnRzL2NvbWJvLWJveC5qcyIsInNyYy9qcy9jb21wb25lbnRzL2Zvb3Rlci5qcyIsInNyYy9qcy9jb21wb25lbnRzL2luZGV4LmpzIiwic3JjL2pzL2NvbXBvbmVudHMvbmF2aWdhdGlvbi5qcyIsInNyYy9qcy9jb21wb25lbnRzL3Bhc3N3b3JkLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvc2VhcmNoLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvc2tpcG5hdi5qcyIsInNyYy9qcy9jb21wb25lbnRzL3ZhbGlkYXRvci5qcyIsInNyYy9qcy9jb25maWcuanMiLCJzcmMvanMvZXZlbnRzLmpzIiwic3JjL2pzL3BvbHlmaWxscy9lbGVtZW50LWhpZGRlbi5qcyIsInNyYy9qcy9wb2x5ZmlsbHMvaW5kZXguanMiLCJzcmMvanMvc3RhcnQuanMiLCJzcmMvanMvdXRpbHMvYWN0aXZlLWVsZW1lbnQuanMiLCJzcmMvanMvdXRpbHMvYmVoYXZpb3IuanMiLCJzcmMvanMvdXRpbHMvZm9jdXMtdHJhcC5qcyIsInNyYy9qcy91dGlscy9pcy1pbi12aWV3cG9ydC5qcyIsInNyYy9qcy91dGlscy9zZWxlY3QuanMiLCJzcmMvanMvdXRpbHMvdG9nZ2xlLWZpZWxkLW1hc2suanMiLCJzcmMvanMvdXRpbHMvdG9nZ2xlLWZvcm0taW5wdXQuanMiLCJzcmMvanMvdXRpbHMvdG9nZ2xlLmpzIiwic3JjL2pzL3V0aWxzL3ZhbGlkYXRlLWlucHV0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNBQTs7Ozs7Ozs7O0FBU0E7O0FBRUE7QUFFQSxJQUFJLGNBQWMsTUFBTSxDQUFDLElBQXpCLEVBQStCO0FBRS9CO0FBQ0E7QUFDQSxNQUFJLEVBQUUsZUFBZSxRQUFRLENBQUMsYUFBVCxDQUF1QixHQUF2QixDQUFqQixLQUNBLFFBQVEsQ0FBQyxlQUFULElBQTRCLEVBQUUsZUFBZSxRQUFRLENBQUMsZUFBVCxDQUF5Qiw0QkFBekIsRUFBc0QsR0FBdEQsQ0FBakIsQ0FEaEMsRUFDOEc7QUFFN0csZUFBVSxJQUFWLEVBQWdCO0FBRWpCOztBQUVBLFVBQUksRUFBRSxhQUFhLElBQWYsQ0FBSixFQUEwQjs7QUFFMUIs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QUE7QUFBQSxRQUFoQixHQUFnQjtBQUFBLFFBQVgsS0FBVzs7QUFDN0MsUUFBSSxHQUFHLENBQUMsVUFBSixDQUFlLFVBQWYsQ0FBSixFQUFnQztBQUM5QixVQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsTUFBSixDQUFXLFdBQVcsTUFBdEIsRUFBOEIsV0FBOUIsRUFBdEI7QUFDQSxVQUFNLGdCQUFnQixHQUFHLElBQUksTUFBSixDQUFXLEtBQVgsQ0FBekI7QUFDQSxVQUFNLGlCQUFpQiwrQkFBdUIsYUFBdkIsUUFBdkI7QUFDQSxVQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxhQUFWLENBQXdCLGlCQUF4QixDQUExQjs7QUFFQSxVQUFJLENBQUMsaUJBQUwsRUFBd0I7QUFDdEIsY0FBTSxJQUFJLEtBQUosOENBQStDLGFBQS9DLFFBQU47QUFDRDs7QUFFRCxVQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFqQixDQUFzQixFQUFFLENBQUMsS0FBekIsQ0FBaEI7QUFDQSxNQUFBLGlCQUFpQixDQUFDLFNBQWxCLENBQTRCLE1BQTVCLENBQW1DLGFBQW5DLEVBQWtELE9BQWxEO0FBQ0EsTUFBQSxpQkFBaUIsQ0FBQyxZQUFsQixDQUErQixPQUEvQixFQUF3QyxPQUF4QztBQUNEO0FBQ0YsR0FmRDtBQWdCRCxDQTVCRCIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qXG4gKiBjbGFzc0xpc3QuanM6IENyb3NzLWJyb3dzZXIgZnVsbCBlbGVtZW50LmNsYXNzTGlzdCBpbXBsZW1lbnRhdGlvbi5cbiAqIDEuMS4yMDE3MDQyN1xuICpcbiAqIEJ5IEVsaSBHcmV5LCBodHRwOi8vZWxpZ3JleS5jb21cbiAqIExpY2Vuc2U6IERlZGljYXRlZCB0byB0aGUgcHVibGljIGRvbWFpbi5cbiAqICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGlncmV5L2NsYXNzTGlzdC5qcy9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXG4gKi9cblxuLypnbG9iYWwgc2VsZiwgZG9jdW1lbnQsIERPTUV4Y2VwdGlvbiAqL1xuXG4vKiEgQHNvdXJjZSBodHRwOi8vcHVybC5lbGlncmV5LmNvbS9naXRodWIvY2xhc3NMaXN0LmpzL2Jsb2IvbWFzdGVyL2NsYXNzTGlzdC5qcyAqL1xuXG5pZiAoXCJkb2N1bWVudFwiIGluIHdpbmRvdy5zZWxmKSB7XG5cbi8vIEZ1bGwgcG9seWZpbGwgZm9yIGJyb3dzZXJzIHdpdGggbm8gY2xhc3NMaXN0IHN1cHBvcnRcbi8vIEluY2x1ZGluZyBJRSA8IEVkZ2UgbWlzc2luZyBTVkdFbGVtZW50LmNsYXNzTGlzdFxuaWYgKCEoXCJjbGFzc0xpc3RcIiBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiX1wiKSkgXG5cdHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyAmJiAhKFwiY2xhc3NMaXN0XCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImdcIikpKSB7XG5cbihmdW5jdGlvbiAodmlldykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuaWYgKCEoJ0VsZW1lbnQnIGluIHZpZXcpKSByZXR1cm47XG5cbnZhclxuXHQgIGNsYXNzTGlzdFByb3AgPSBcImNsYXNzTGlzdFwiXG5cdCwgcHJvdG9Qcm9wID0gXCJwcm90b3R5cGVcIlxuXHQsIGVsZW1DdHJQcm90byA9IHZpZXcuRWxlbWVudFtwcm90b1Byb3BdXG5cdCwgb2JqQ3RyID0gT2JqZWN0XG5cdCwgc3RyVHJpbSA9IFN0cmluZ1twcm90b1Byb3BdLnRyaW0gfHwgZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiB0aGlzLnJlcGxhY2UoL15cXHMrfFxccyskL2csIFwiXCIpO1xuXHR9XG5cdCwgYXJySW5kZXhPZiA9IEFycmF5W3Byb3RvUHJvcF0uaW5kZXhPZiB8fCBmdW5jdGlvbiAoaXRlbSkge1xuXHRcdHZhclxuXHRcdFx0ICBpID0gMFxuXHRcdFx0LCBsZW4gPSB0aGlzLmxlbmd0aFxuXHRcdDtcblx0XHRmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoaSBpbiB0aGlzICYmIHRoaXNbaV0gPT09IGl0ZW0pIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fVxuXHQvLyBWZW5kb3JzOiBwbGVhc2UgYWxsb3cgY29udGVudCBjb2RlIHRvIGluc3RhbnRpYXRlIERPTUV4Y2VwdGlvbnNcblx0LCBET01FeCA9IGZ1bmN0aW9uICh0eXBlLCBtZXNzYWdlKSB7XG5cdFx0dGhpcy5uYW1lID0gdHlwZTtcblx0XHR0aGlzLmNvZGUgPSBET01FeGNlcHRpb25bdHlwZV07XG5cdFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblx0fVxuXHQsIGNoZWNrVG9rZW5BbmRHZXRJbmRleCA9IGZ1bmN0aW9uIChjbGFzc0xpc3QsIHRva2VuKSB7XG5cdFx0aWYgKHRva2VuID09PSBcIlwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRE9NRXgoXG5cdFx0XHRcdCAgXCJTWU5UQVhfRVJSXCJcblx0XHRcdFx0LCBcIkFuIGludmFsaWQgb3IgaWxsZWdhbCBzdHJpbmcgd2FzIHNwZWNpZmllZFwiXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpZiAoL1xccy8udGVzdCh0b2tlbikpIHtcblx0XHRcdHRocm93IG5ldyBET01FeChcblx0XHRcdFx0ICBcIklOVkFMSURfQ0hBUkFDVEVSX0VSUlwiXG5cdFx0XHRcdCwgXCJTdHJpbmcgY29udGFpbnMgYW4gaW52YWxpZCBjaGFyYWN0ZXJcIlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFyckluZGV4T2YuY2FsbChjbGFzc0xpc3QsIHRva2VuKTtcblx0fVxuXHQsIENsYXNzTGlzdCA9IGZ1bmN0aW9uIChlbGVtKSB7XG5cdFx0dmFyXG5cdFx0XHQgIHRyaW1tZWRDbGFzc2VzID0gc3RyVHJpbS5jYWxsKGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIilcblx0XHRcdCwgY2xhc3NlcyA9IHRyaW1tZWRDbGFzc2VzID8gdHJpbW1lZENsYXNzZXMuc3BsaXQoL1xccysvKSA6IFtdXG5cdFx0XHQsIGkgPSAwXG5cdFx0XHQsIGxlbiA9IGNsYXNzZXMubGVuZ3RoXG5cdFx0O1xuXHRcdGZvciAoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdHRoaXMucHVzaChjbGFzc2VzW2ldKTtcblx0XHR9XG5cdFx0dGhpcy5fdXBkYXRlQ2xhc3NOYW1lID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLnRvU3RyaW5nKCkpO1xuXHRcdH07XG5cdH1cblx0LCBjbGFzc0xpc3RQcm90byA9IENsYXNzTGlzdFtwcm90b1Byb3BdID0gW11cblx0LCBjbGFzc0xpc3RHZXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIG5ldyBDbGFzc0xpc3QodGhpcyk7XG5cdH1cbjtcbi8vIE1vc3QgRE9NRXhjZXB0aW9uIGltcGxlbWVudGF0aW9ucyBkb24ndCBhbGxvdyBjYWxsaW5nIERPTUV4Y2VwdGlvbidzIHRvU3RyaW5nKClcbi8vIG9uIG5vbi1ET01FeGNlcHRpb25zLiBFcnJvcidzIHRvU3RyaW5nKCkgaXMgc3VmZmljaWVudCBoZXJlLlxuRE9NRXhbcHJvdG9Qcm9wXSA9IEVycm9yW3Byb3RvUHJvcF07XG5jbGFzc0xpc3RQcm90by5pdGVtID0gZnVuY3Rpb24gKGkpIHtcblx0cmV0dXJuIHRoaXNbaV0gfHwgbnVsbDtcbn07XG5jbGFzc0xpc3RQcm90by5jb250YWlucyA9IGZ1bmN0aW9uICh0b2tlbikge1xuXHR0b2tlbiArPSBcIlwiO1xuXHRyZXR1cm4gY2hlY2tUb2tlbkFuZEdldEluZGV4KHRoaXMsIHRva2VuKSAhPT0gLTE7XG59O1xuY2xhc3NMaXN0UHJvdG8uYWRkID0gZnVuY3Rpb24gKCkge1xuXHR2YXJcblx0XHQgIHRva2VucyA9IGFyZ3VtZW50c1xuXHRcdCwgaSA9IDBcblx0XHQsIGwgPSB0b2tlbnMubGVuZ3RoXG5cdFx0LCB0b2tlblxuXHRcdCwgdXBkYXRlZCA9IGZhbHNlXG5cdDtcblx0ZG8ge1xuXHRcdHRva2VuID0gdG9rZW5zW2ldICsgXCJcIjtcblx0XHRpZiAoY2hlY2tUb2tlbkFuZEdldEluZGV4KHRoaXMsIHRva2VuKSA9PT0gLTEpIHtcblx0XHRcdHRoaXMucHVzaCh0b2tlbik7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0d2hpbGUgKCsraSA8IGwpO1xuXG5cdGlmICh1cGRhdGVkKSB7XG5cdFx0dGhpcy5fdXBkYXRlQ2xhc3NOYW1lKCk7XG5cdH1cbn07XG5jbGFzc0xpc3RQcm90by5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdHZhclxuXHRcdCAgdG9rZW5zID0gYXJndW1lbnRzXG5cdFx0LCBpID0gMFxuXHRcdCwgbCA9IHRva2Vucy5sZW5ndGhcblx0XHQsIHRva2VuXG5cdFx0LCB1cGRhdGVkID0gZmFsc2Vcblx0XHQsIGluZGV4XG5cdDtcblx0ZG8ge1xuXHRcdHRva2VuID0gdG9rZW5zW2ldICsgXCJcIjtcblx0XHRpbmRleCA9IGNoZWNrVG9rZW5BbmRHZXRJbmRleCh0aGlzLCB0b2tlbik7XG5cdFx0d2hpbGUgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0dGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0dXBkYXRlZCA9IHRydWU7XG5cdFx0XHRpbmRleCA9IGNoZWNrVG9rZW5BbmRHZXRJbmRleCh0aGlzLCB0b2tlbik7XG5cdFx0fVxuXHR9XG5cdHdoaWxlICgrK2kgPCBsKTtcblxuXHRpZiAodXBkYXRlZCkge1xuXHRcdHRoaXMuX3VwZGF0ZUNsYXNzTmFtZSgpO1xuXHR9XG59O1xuY2xhc3NMaXN0UHJvdG8udG9nZ2xlID0gZnVuY3Rpb24gKHRva2VuLCBmb3JjZSkge1xuXHR0b2tlbiArPSBcIlwiO1xuXG5cdHZhclxuXHRcdCAgcmVzdWx0ID0gdGhpcy5jb250YWlucyh0b2tlbilcblx0XHQsIG1ldGhvZCA9IHJlc3VsdCA/XG5cdFx0XHRmb3JjZSAhPT0gdHJ1ZSAmJiBcInJlbW92ZVwiXG5cdFx0OlxuXHRcdFx0Zm9yY2UgIT09IGZhbHNlICYmIFwiYWRkXCJcblx0O1xuXG5cdGlmIChtZXRob2QpIHtcblx0XHR0aGlzW21ldGhvZF0odG9rZW4pO1xuXHR9XG5cblx0aWYgKGZvcmNlID09PSB0cnVlIHx8IGZvcmNlID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBmb3JjZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gIXJlc3VsdDtcblx0fVxufTtcbmNsYXNzTGlzdFByb3RvLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gdGhpcy5qb2luKFwiIFwiKTtcbn07XG5cbmlmIChvYmpDdHIuZGVmaW5lUHJvcGVydHkpIHtcblx0dmFyIGNsYXNzTGlzdFByb3BEZXNjID0ge1xuXHRcdCAgZ2V0OiBjbGFzc0xpc3RHZXR0ZXJcblx0XHQsIGVudW1lcmFibGU6IHRydWVcblx0XHQsIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHR9O1xuXHR0cnkge1xuXHRcdG9iakN0ci5kZWZpbmVQcm9wZXJ0eShlbGVtQ3RyUHJvdG8sIGNsYXNzTGlzdFByb3AsIGNsYXNzTGlzdFByb3BEZXNjKTtcblx0fSBjYXRjaCAoZXgpIHsgLy8gSUUgOCBkb2Vzbid0IHN1cHBvcnQgZW51bWVyYWJsZTp0cnVlXG5cdFx0Ly8gYWRkaW5nIHVuZGVmaW5lZCB0byBmaWdodCB0aGlzIGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGlncmV5L2NsYXNzTGlzdC5qcy9pc3N1ZXMvMzZcblx0XHQvLyBtb2Rlcm5pZSBJRTgtTVNXNyBtYWNoaW5lIGhhcyBJRTggOC4wLjYwMDEuMTg3MDIgYW5kIGlzIGFmZmVjdGVkXG5cdFx0aWYgKGV4Lm51bWJlciA9PT0gdW5kZWZpbmVkIHx8IGV4Lm51bWJlciA9PT0gLTB4N0ZGNUVDNTQpIHtcblx0XHRcdGNsYXNzTGlzdFByb3BEZXNjLmVudW1lcmFibGUgPSBmYWxzZTtcblx0XHRcdG9iakN0ci5kZWZpbmVQcm9wZXJ0eShlbGVtQ3RyUHJvdG8sIGNsYXNzTGlzdFByb3AsIGNsYXNzTGlzdFByb3BEZXNjKTtcblx0XHR9XG5cdH1cbn0gZWxzZSBpZiAob2JqQ3RyW3Byb3RvUHJvcF0uX19kZWZpbmVHZXR0ZXJfXykge1xuXHRlbGVtQ3RyUHJvdG8uX19kZWZpbmVHZXR0ZXJfXyhjbGFzc0xpc3RQcm9wLCBjbGFzc0xpc3RHZXR0ZXIpO1xufVxuXG59KHdpbmRvdy5zZWxmKSk7XG5cbn1cblxuLy8gVGhlcmUgaXMgZnVsbCBvciBwYXJ0aWFsIG5hdGl2ZSBjbGFzc0xpc3Qgc3VwcG9ydCwgc28ganVzdCBjaGVjayBpZiB3ZSBuZWVkXG4vLyB0byBub3JtYWxpemUgdGhlIGFkZC9yZW1vdmUgYW5kIHRvZ2dsZSBBUElzLlxuXG4oZnVuY3Rpb24gKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiX1wiKTtcblxuXHR0ZXN0RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiYzFcIiwgXCJjMlwiKTtcblxuXHQvLyBQb2x5ZmlsbCBmb3IgSUUgMTAvMTEgYW5kIEZpcmVmb3ggPDI2LCB3aGVyZSBjbGFzc0xpc3QuYWRkIGFuZFxuXHQvLyBjbGFzc0xpc3QucmVtb3ZlIGV4aXN0IGJ1dCBzdXBwb3J0IG9ubHkgb25lIGFyZ3VtZW50IGF0IGEgdGltZS5cblx0aWYgKCF0ZXN0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJjMlwiKSkge1xuXHRcdHZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbihtZXRob2QpIHtcblx0XHRcdHZhciBvcmlnaW5hbCA9IERPTVRva2VuTGlzdC5wcm90b3R5cGVbbWV0aG9kXTtcblxuXHRcdFx0RE9NVG9rZW5MaXN0LnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odG9rZW4pIHtcblx0XHRcdFx0dmFyIGksIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdFx0dG9rZW4gPSBhcmd1bWVudHNbaV07XG5cdFx0XHRcdFx0b3JpZ2luYWwuY2FsbCh0aGlzLCB0b2tlbik7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fTtcblx0XHRjcmVhdGVNZXRob2QoJ2FkZCcpO1xuXHRcdGNyZWF0ZU1ldGhvZCgncmVtb3ZlJyk7XG5cdH1cblxuXHR0ZXN0RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKFwiYzNcIiwgZmFsc2UpO1xuXG5cdC8vIFBvbHlmaWxsIGZvciBJRSAxMCBhbmQgRmlyZWZveCA8MjQsIHdoZXJlIGNsYXNzTGlzdC50b2dnbGUgZG9lcyBub3Rcblx0Ly8gc3VwcG9ydCB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuXHRpZiAodGVzdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYzNcIikpIHtcblx0XHR2YXIgX3RvZ2dsZSA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUudG9nZ2xlO1xuXG5cdFx0RE9NVG9rZW5MaXN0LnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbih0b2tlbiwgZm9yY2UpIHtcblx0XHRcdGlmICgxIGluIGFyZ3VtZW50cyAmJiAhdGhpcy5jb250YWlucyh0b2tlbikgPT09ICFmb3JjZSkge1xuXHRcdFx0XHRyZXR1cm4gZm9yY2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gX3RvZ2dsZS5jYWxsKHRoaXMsIHRva2VuKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdH1cblxuXHR0ZXN0RWxlbWVudCA9IG51bGw7XG59KCkpO1xuXG59XG4iLCIvKiFcbiAgKiBkb21yZWFkeSAoYykgRHVzdGluIERpYXogMjAxNCAtIExpY2Vuc2UgTUlUXG4gICovXG4hZnVuY3Rpb24gKG5hbWUsIGRlZmluaXRpb24pIHtcblxuICBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKClcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnKSBkZWZpbmUoZGVmaW5pdGlvbilcbiAgZWxzZSB0aGlzW25hbWVdID0gZGVmaW5pdGlvbigpXG5cbn0oJ2RvbXJlYWR5JywgZnVuY3Rpb24gKCkge1xuXG4gIHZhciBmbnMgPSBbXSwgbGlzdGVuZXJcbiAgICAsIGRvYyA9IGRvY3VtZW50XG4gICAgLCBoYWNrID0gZG9jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbFxuICAgICwgZG9tQ29udGVudExvYWRlZCA9ICdET01Db250ZW50TG9hZGVkJ1xuICAgICwgbG9hZGVkID0gKGhhY2sgPyAvXmxvYWRlZHxeYy8gOiAvXmxvYWRlZHxeaXxeYy8pLnRlc3QoZG9jLnJlYWR5U3RhdGUpXG5cblxuICBpZiAoIWxvYWRlZClcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoZG9tQ29udGVudExvYWRlZCwgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tQ29udGVudExvYWRlZCwgbGlzdGVuZXIpXG4gICAgbG9hZGVkID0gMVxuICAgIHdoaWxlIChsaXN0ZW5lciA9IGZucy5zaGlmdCgpKSBsaXN0ZW5lcigpXG4gIH0pXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIGxvYWRlZCA/IHNldFRpbWVvdXQoZm4sIDApIDogZm5zLnB1c2goZm4pXG4gIH1cblxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIDwzIE1vZGVybml6clxuLy8gaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL01vZGVybml6ci9Nb2Rlcm5penIvbWFzdGVyL2ZlYXR1cmUtZGV0ZWN0cy9kb20vZGF0YXNldC5qc1xuXG5mdW5jdGlvbiB1c2VOYXRpdmUoKSB7XG5cdHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdGVsZW0uc2V0QXR0cmlidXRlKCdkYXRhLWEtYicsICdjJyk7XG5cblx0cmV0dXJuIEJvb2xlYW4oZWxlbS5kYXRhc2V0ICYmIGVsZW0uZGF0YXNldC5hQiA9PT0gJ2MnKTtcbn1cblxuZnVuY3Rpb24gbmF0aXZlRGF0YXNldChlbGVtZW50KSB7XG5cdHJldHVybiBlbGVtZW50LmRhdGFzZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlTmF0aXZlKCkgPyBuYXRpdmVEYXRhc2V0IDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0dmFyIG1hcCA9IHt9O1xuXHR2YXIgYXR0cmlidXRlcyA9IGVsZW1lbnQuYXR0cmlidXRlcztcblxuXHRmdW5jdGlvbiBnZXR0ZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMudmFsdWU7XG5cdH1cblxuXHRmdW5jdGlvbiBzZXR0ZXIobmFtZSwgdmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0dmFyIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaV07XG5cblx0XHRpZiAoYXR0cmlidXRlKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGF0dHJpYnV0ZS5uYW1lO1xuXG5cdFx0XHRpZiAobmFtZS5pbmRleE9mKCdkYXRhLScpID09PSAwKSB7XG5cdFx0XHRcdHZhciBwcm9wID0gbmFtZS5zbGljZSg1KS5yZXBsYWNlKC8tLi9nLCBmdW5jdGlvbiAodSkge1xuXHRcdFx0XHRcdHJldHVybiB1LmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR2YXIgdmFsdWUgPSBhdHRyaWJ1dGUudmFsdWU7XG5cblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1hcCwgcHJvcCwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Z2V0OiBnZXR0ZXIuYmluZCh7IHZhbHVlOiB2YWx1ZSB8fCAnJyB9KSxcblx0XHRcdFx0XHRzZXQ6IHNldHRlci5iaW5kKGVsZW1lbnQsIG5hbWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXA7XG59O1xuXG4iLCIvLyBlbGVtZW50LWNsb3Nlc3QgfCBDQzAtMS4wIHwgZ2l0aHViLmNvbS9qb25hdGhhbnRuZWFsL2Nsb3Nlc3RcblxuKGZ1bmN0aW9uIChFbGVtZW50UHJvdG8pIHtcblx0aWYgKHR5cGVvZiBFbGVtZW50UHJvdG8ubWF0Y2hlcyAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdEVsZW1lbnRQcm90by5tYXRjaGVzID0gRWxlbWVudFByb3RvLm1zTWF0Y2hlc1NlbGVjdG9yIHx8IEVsZW1lbnRQcm90by5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgRWxlbWVudFByb3RvLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBmdW5jdGlvbiBtYXRjaGVzKHNlbGVjdG9yKSB7XG5cdFx0XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cdFx0XHR2YXIgZWxlbWVudHMgPSAoZWxlbWVudC5kb2N1bWVudCB8fCBlbGVtZW50Lm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuXHRcdFx0dmFyIGluZGV4ID0gMDtcblxuXHRcdFx0d2hpbGUgKGVsZW1lbnRzW2luZGV4XSAmJiBlbGVtZW50c1tpbmRleF0gIT09IGVsZW1lbnQpIHtcblx0XHRcdFx0KytpbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIEJvb2xlYW4oZWxlbWVudHNbaW5kZXhdKTtcblx0XHR9O1xuXHR9XG5cblx0aWYgKHR5cGVvZiBFbGVtZW50UHJvdG8uY2xvc2VzdCAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdEVsZW1lbnRQcm90by5jbG9zZXN0ID0gZnVuY3Rpb24gY2xvc2VzdChzZWxlY3Rvcikge1xuXHRcdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXG5cdFx0XHR3aGlsZSAoZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxKSB7XG5cdFx0XHRcdGlmIChlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9O1xuXHR9XG59KSh3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUpO1xuIiwiLyogZ2xvYmFsIGRlZmluZSwgS2V5Ym9hcmRFdmVudCwgbW9kdWxlICovXG5cbihmdW5jdGlvbiAoKSB7XG5cbiAgdmFyIGtleWJvYXJkZXZlbnRLZXlQb2x5ZmlsbCA9IHtcbiAgICBwb2x5ZmlsbDogcG9seWZpbGwsXG4gICAga2V5czoge1xuICAgICAgMzogJ0NhbmNlbCcsXG4gICAgICA2OiAnSGVscCcsXG4gICAgICA4OiAnQmFja3NwYWNlJyxcbiAgICAgIDk6ICdUYWInLFxuICAgICAgMTI6ICdDbGVhcicsXG4gICAgICAxMzogJ0VudGVyJyxcbiAgICAgIDE2OiAnU2hpZnQnLFxuICAgICAgMTc6ICdDb250cm9sJyxcbiAgICAgIDE4OiAnQWx0JyxcbiAgICAgIDE5OiAnUGF1c2UnLFxuICAgICAgMjA6ICdDYXBzTG9jaycsXG4gICAgICAyNzogJ0VzY2FwZScsXG4gICAgICAyODogJ0NvbnZlcnQnLFxuICAgICAgMjk6ICdOb25Db252ZXJ0JyxcbiAgICAgIDMwOiAnQWNjZXB0JyxcbiAgICAgIDMxOiAnTW9kZUNoYW5nZScsXG4gICAgICAzMjogJyAnLFxuICAgICAgMzM6ICdQYWdlVXAnLFxuICAgICAgMzQ6ICdQYWdlRG93bicsXG4gICAgICAzNTogJ0VuZCcsXG4gICAgICAzNjogJ0hvbWUnLFxuICAgICAgMzc6ICdBcnJvd0xlZnQnLFxuICAgICAgMzg6ICdBcnJvd1VwJyxcbiAgICAgIDM5OiAnQXJyb3dSaWdodCcsXG4gICAgICA0MDogJ0Fycm93RG93bicsXG4gICAgICA0MTogJ1NlbGVjdCcsXG4gICAgICA0MjogJ1ByaW50JyxcbiAgICAgIDQzOiAnRXhlY3V0ZScsXG4gICAgICA0NDogJ1ByaW50U2NyZWVuJyxcbiAgICAgIDQ1OiAnSW5zZXJ0JyxcbiAgICAgIDQ2OiAnRGVsZXRlJyxcbiAgICAgIDQ4OiBbJzAnLCAnKSddLFxuICAgICAgNDk6IFsnMScsICchJ10sXG4gICAgICA1MDogWycyJywgJ0AnXSxcbiAgICAgIDUxOiBbJzMnLCAnIyddLFxuICAgICAgNTI6IFsnNCcsICckJ10sXG4gICAgICA1MzogWyc1JywgJyUnXSxcbiAgICAgIDU0OiBbJzYnLCAnXiddLFxuICAgICAgNTU6IFsnNycsICcmJ10sXG4gICAgICA1NjogWyc4JywgJyonXSxcbiAgICAgIDU3OiBbJzknLCAnKCddLFxuICAgICAgOTE6ICdPUycsXG4gICAgICA5MzogJ0NvbnRleHRNZW51JyxcbiAgICAgIDE0NDogJ051bUxvY2snLFxuICAgICAgMTQ1OiAnU2Nyb2xsTG9jaycsXG4gICAgICAxODE6ICdWb2x1bWVNdXRlJyxcbiAgICAgIDE4MjogJ1ZvbHVtZURvd24nLFxuICAgICAgMTgzOiAnVm9sdW1lVXAnLFxuICAgICAgMTg2OiBbJzsnLCAnOiddLFxuICAgICAgMTg3OiBbJz0nLCAnKyddLFxuICAgICAgMTg4OiBbJywnLCAnPCddLFxuICAgICAgMTg5OiBbJy0nLCAnXyddLFxuICAgICAgMTkwOiBbJy4nLCAnPiddLFxuICAgICAgMTkxOiBbJy8nLCAnPyddLFxuICAgICAgMTkyOiBbJ2AnLCAnfiddLFxuICAgICAgMjE5OiBbJ1snLCAneyddLFxuICAgICAgMjIwOiBbJ1xcXFwnLCAnfCddLFxuICAgICAgMjIxOiBbJ10nLCAnfSddLFxuICAgICAgMjIyOiBbXCInXCIsICdcIiddLFxuICAgICAgMjI0OiAnTWV0YScsXG4gICAgICAyMjU6ICdBbHRHcmFwaCcsXG4gICAgICAyNDY6ICdBdHRuJyxcbiAgICAgIDI0NzogJ0NyU2VsJyxcbiAgICAgIDI0ODogJ0V4U2VsJyxcbiAgICAgIDI0OTogJ0VyYXNlRW9mJyxcbiAgICAgIDI1MDogJ1BsYXknLFxuICAgICAgMjUxOiAnWm9vbU91dCdcbiAgICB9XG4gIH07XG5cbiAgLy8gRnVuY3Rpb24ga2V5cyAoRjEtMjQpLlxuICB2YXIgaTtcbiAgZm9yIChpID0gMTsgaSA8IDI1OyBpKyspIHtcbiAgICBrZXlib2FyZGV2ZW50S2V5UG9seWZpbGwua2V5c1sxMTEgKyBpXSA9ICdGJyArIGk7XG4gIH1cblxuICAvLyBQcmludGFibGUgQVNDSUkgY2hhcmFjdGVycy5cbiAgdmFyIGxldHRlciA9ICcnO1xuICBmb3IgKGkgPSA2NTsgaSA8IDkxOyBpKyspIHtcbiAgICBsZXR0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpO1xuICAgIGtleWJvYXJkZXZlbnRLZXlQb2x5ZmlsbC5rZXlzW2ldID0gW2xldHRlci50b0xvd2VyQ2FzZSgpLCBsZXR0ZXIudG9VcHBlckNhc2UoKV07XG4gIH1cblxuICBmdW5jdGlvbiBwb2x5ZmlsbCAoKSB7XG4gICAgaWYgKCEoJ0tleWJvYXJkRXZlbnQnIGluIHdpbmRvdykgfHxcbiAgICAgICAgJ2tleScgaW4gS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBQb2x5ZmlsbCBga2V5YCBvbiBgS2V5Ym9hcmRFdmVudGAuXG4gICAgdmFyIHByb3RvID0ge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoeCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5Ym9hcmRldmVudEtleVBvbHlmaWxsLmtleXNbdGhpcy53aGljaCB8fCB0aGlzLmtleUNvZGVdO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICBrZXkgPSBrZXlbK3RoaXMuc2hpZnRLZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgJ2tleScsIHByb3RvKTtcbiAgICByZXR1cm4gcHJvdG87XG4gIH1cblxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKCdrZXlib2FyZGV2ZW50LWtleS1wb2x5ZmlsbCcsIGtleWJvYXJkZXZlbnRLZXlQb2x5ZmlsbCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBrZXlib2FyZGV2ZW50S2V5UG9seWZpbGw7XG4gIH0gZWxzZSBpZiAod2luZG93KSB7XG4gICAgd2luZG93LmtleWJvYXJkZXZlbnRLZXlQb2x5ZmlsbCA9IGtleWJvYXJkZXZlbnRLZXlQb2x5ZmlsbDtcbiAgfVxuXG59KSgpO1xuIiwiLyoqXG4gKiBsb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL2pxdWVyeS5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5cbi8qKiBVc2VkIGFzIHRoZSBgVHlwZUVycm9yYCBtZXNzYWdlIGZvciBcIkZ1bmN0aW9uc1wiIG1ldGhvZHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBEYXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAqIH0sIF8ubm93KCkpO1xuICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAqL1xudmFyIG5vdyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICByZXN1bHQgPSB3YWl0IC0gdGltZVNpbmNlTGFzdENhbGw7XG5cbiAgICByZXR1cm4gbWF4aW5nID8gbmF0aXZlTWluKHJlc3VsdCwgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAvLyB0cmFpbGluZyBlZGdlLCB0aGUgc3lzdGVtIHRpbWUgaGFzIGdvbmUgYmFja3dhcmRzIGFuZCB3ZSdyZSB0cmVhdGluZ1xuICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgKHRpbWVTaW5jZUxhc3RDYWxsIDwgMCkgfHwgKG1heGluZyAmJiB0aW1lU2luY2VMYXN0SW52b2tlID49IG1heFdhaXQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpO1xuICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgIHJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7XG4gICAgfVxuICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBPbmx5IGludm9rZSBpZiB3ZSBoYXZlIGBsYXN0QXJnc2Agd2hpY2ggbWVhbnMgYGZ1bmNgIGhhcyBiZWVuXG4gICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7XG4gICAgICByZXR1cm4gaW52b2tlRnVuYyh0aW1lKTtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICB9XG4gICAgbGFzdEludm9rZVRpbWUgPSAwO1xuICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgaWYgKGlzSW52b2tpbmcpIHtcbiAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDtcbiAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gIHJldHVybiBkZWJvdW5jZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocmVUcmltLCAnJyk7XG4gIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gIHJldHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKVxuICAgID8gZnJlZVBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCBpc0JpbmFyeSA/IDIgOiA4KVxuICAgIDogKHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYm91bmNlO1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsImNvbnN0IGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbmNvbnN0IGRlbGVnYXRlID0gcmVxdWlyZSgnLi4vZGVsZWdhdGUnKTtcbmNvbnN0IGRlbGVnYXRlQWxsID0gcmVxdWlyZSgnLi4vZGVsZWdhdGVBbGwnKTtcblxuY29uc3QgREVMRUdBVEVfUEFUVEVSTiA9IC9eKC4rKTpkZWxlZ2F0ZVxcKCguKylcXCkkLztcbmNvbnN0IFNQQUNFID0gJyAnO1xuXG5jb25zdCBnZXRMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlLCBoYW5kbGVyKSB7XG4gIHZhciBtYXRjaCA9IHR5cGUubWF0Y2goREVMRUdBVEVfUEFUVEVSTik7XG4gIHZhciBzZWxlY3RvcjtcbiAgaWYgKG1hdGNoKSB7XG4gICAgdHlwZSA9IG1hdGNoWzFdO1xuICAgIHNlbGVjdG9yID0gbWF0Y2hbMl07XG4gIH1cblxuICB2YXIgb3B0aW9ucztcbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBjYXB0dXJlOiBwb3BLZXkoaGFuZGxlciwgJ2NhcHR1cmUnKSxcbiAgICAgIHBhc3NpdmU6IHBvcEtleShoYW5kbGVyLCAncGFzc2l2ZScpXG4gICAgfTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IHtcbiAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgZGVsZWdhdGU6ICh0eXBlb2YgaGFuZGxlciA9PT0gJ29iamVjdCcpXG4gICAgICA/IGRlbGVnYXRlQWxsKGhhbmRsZXIpXG4gICAgICA6IHNlbGVjdG9yXG4gICAgICAgID8gZGVsZWdhdGUoc2VsZWN0b3IsIGhhbmRsZXIpXG4gICAgICAgIDogaGFuZGxlcixcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH07XG5cbiAgaWYgKHR5cGUuaW5kZXhPZihTUEFDRSkgPiAtMSkge1xuICAgIHJldHVybiB0eXBlLnNwbGl0KFNQQUNFKS5tYXAoZnVuY3Rpb24oX3R5cGUpIHtcbiAgICAgIHJldHVybiBhc3NpZ24oe3R5cGU6IF90eXBlfSwgbGlzdGVuZXIpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGxpc3RlbmVyLnR5cGUgPSB0eXBlO1xuICAgIHJldHVybiBbbGlzdGVuZXJdO1xuICB9XG59O1xuXG52YXIgcG9wS2V5ID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4gIGRlbGV0ZSBvYmpba2V5XTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiZWhhdmlvcihldmVudHMsIHByb3BzKSB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IE9iamVjdC5rZXlzKGV2ZW50cylcbiAgICAucmVkdWNlKGZ1bmN0aW9uKG1lbW8sIHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModHlwZSwgZXZlbnRzW3R5cGVdKTtcbiAgICAgIHJldHVybiBtZW1vLmNvbmNhdChsaXN0ZW5lcnMpO1xuICAgIH0sIFtdKTtcblxuICByZXR1cm4gYXNzaWduKHtcbiAgICBhZGQ6IGZ1bmN0aW9uIGFkZEJlaGF2aW9yKGVsZW1lbnQpIHtcbiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBsaXN0ZW5lci50eXBlLFxuICAgICAgICAgIGxpc3RlbmVyLmRlbGVnYXRlLFxuICAgICAgICAgIGxpc3RlbmVyLm9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmVCZWhhdmlvcihlbGVtZW50KSB7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgbGlzdGVuZXIudHlwZSxcbiAgICAgICAgICBsaXN0ZW5lci5kZWxlZ2F0ZSxcbiAgICAgICAgICBsaXN0ZW5lci5vcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHByb3BzKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbXBvc2UoZnVuY3Rpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9ucy5zb21lKGZ1bmN0aW9uKGZuKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBlKSA9PT0gZmFsc2U7XG4gICAgfSwgdGhpcyk7XG4gIH07XG59O1xuIiwiLy8gcG9seWZpbGwgRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdFxucmVxdWlyZSgnZWxlbWVudC1jbG9zZXN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVsZWdhdGUoc2VsZWN0b3IsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWxlZ2F0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0YXJnZXQsIGV2ZW50KTtcbiAgICB9XG4gIH1cbn07XG4iLCJjb25zdCBkZWxlZ2F0ZSA9IHJlcXVpcmUoJy4uL2RlbGVnYXRlJyk7XG5jb25zdCBjb21wb3NlID0gcmVxdWlyZSgnLi4vY29tcG9zZScpO1xuXG5jb25zdCBTUExBVCA9ICcqJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWxlZ2F0ZUFsbChzZWxlY3RvcnMpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNlbGVjdG9ycylcblxuICAvLyBYWFggb3B0aW1pemF0aW9uOiBpZiB0aGVyZSBpcyBvbmx5IG9uZSBoYW5kbGVyIGFuZCBpdCBhcHBsaWVzIHRvXG4gIC8vIGFsbCBlbGVtZW50cyAodGhlIFwiKlwiIENTUyBzZWxlY3RvciksIHRoZW4ganVzdCByZXR1cm4gdGhhdFxuICAvLyBoYW5kbGVyXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMSAmJiBrZXlzWzBdID09PSBTUExBVCkge1xuICAgIHJldHVybiBzZWxlY3RvcnNbU1BMQVRdO1xuICB9XG5cbiAgY29uc3QgZGVsZWdhdGVzID0ga2V5cy5yZWR1Y2UoZnVuY3Rpb24obWVtbywgc2VsZWN0b3IpIHtcbiAgICBtZW1vLnB1c2goZGVsZWdhdGUoc2VsZWN0b3IsIHNlbGVjdG9yc1tzZWxlY3Rvcl0pKTtcbiAgICByZXR1cm4gbWVtbztcbiAgfSwgW10pO1xuICByZXR1cm4gY29tcG9zZShkZWxlZ2F0ZXMpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaWdub3JlKGVsZW1lbnQsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpZ25vcmFuY2UoZSkge1xuICAgIGlmIChlbGVtZW50ICE9PSBlLnRhcmdldCAmJiAhZWxlbWVudC5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGUpO1xuICAgIH1cbiAgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgYmVoYXZpb3I6ICAgICByZXF1aXJlKCcuL2JlaGF2aW9yJyksXG4gIGRlbGVnYXRlOiAgICAgcmVxdWlyZSgnLi9kZWxlZ2F0ZScpLFxuICBkZWxlZ2F0ZUFsbDogIHJlcXVpcmUoJy4vZGVsZWdhdGVBbGwnKSxcbiAgaWdub3JlOiAgICAgICByZXF1aXJlKCcuL2lnbm9yZScpLFxuICBrZXltYXA6ICAgICAgIHJlcXVpcmUoJy4va2V5bWFwJyksXG59O1xuIiwicmVxdWlyZSgna2V5Ym9hcmRldmVudC1rZXktcG9seWZpbGwnKTtcblxuLy8gdGhlc2UgYXJlIHRoZSBvbmx5IHJlbGV2YW50IG1vZGlmaWVycyBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3Jtcyxcbi8vIGFjY29yZGluZyB0byBNRE46XG4vLyA8aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQvZ2V0TW9kaWZpZXJTdGF0ZT5cbmNvbnN0IE1PRElGSUVSUyA9IHtcbiAgJ0FsdCc6ICAgICAgJ2FsdEtleScsXG4gICdDb250cm9sJzogICdjdHJsS2V5JyxcbiAgJ0N0cmwnOiAgICAgJ2N0cmxLZXknLFxuICAnU2hpZnQnOiAgICAnc2hpZnRLZXknXG59O1xuXG5jb25zdCBNT0RJRklFUl9TRVBBUkFUT1IgPSAnKyc7XG5cbmNvbnN0IGdldEV2ZW50S2V5ID0gZnVuY3Rpb24oZXZlbnQsIGhhc01vZGlmaWVycykge1xuICB2YXIga2V5ID0gZXZlbnQua2V5O1xuICBpZiAoaGFzTW9kaWZpZXJzKSB7XG4gICAgZm9yICh2YXIgbW9kaWZpZXIgaW4gTU9ESUZJRVJTKSB7XG4gICAgICBpZiAoZXZlbnRbTU9ESUZJRVJTW21vZGlmaWVyXV0gPT09IHRydWUpIHtcbiAgICAgICAga2V5ID0gW21vZGlmaWVyLCBrZXldLmpvaW4oTU9ESUZJRVJfU0VQQVJBVE9SKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGtleTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ga2V5bWFwKGtleXMpIHtcbiAgY29uc3QgaGFzTW9kaWZpZXJzID0gT2JqZWN0LmtleXMoa2V5cykuc29tZShmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4ga2V5LmluZGV4T2YoTU9ESUZJRVJfU0VQQVJBVE9SKSA+IC0xO1xuICB9KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGtleSA9IGdldEV2ZW50S2V5KGV2ZW50LCBoYXNNb2RpZmllcnMpO1xuICAgIHJldHVybiBba2V5LCBrZXkudG9Mb3dlckNhc2UoKV1cbiAgICAgIC5yZWR1Y2UoZnVuY3Rpb24ocmVzdWx0LCBfa2V5KSB7XG4gICAgICAgIGlmIChfa2V5IGluIGtleXMpIHtcbiAgICAgICAgICByZXN1bHQgPSBrZXlzW2tleV0uY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sIHVuZGVmaW5lZCk7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5NT0RJRklFUlMgPSBNT0RJRklFUlM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG9uY2UobGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgdmFyIHdyYXBwZWQgPSBmdW5jdGlvbiB3cmFwcGVkT25jZShlKSB7XG4gICAgZS5jdXJyZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZS50eXBlLCB3cmFwcGVkLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbGlzdGVuZXIuY2FsbCh0aGlzLCBlKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59O1xuXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBSRV9UUklNID0gLyheXFxzKyl8KFxccyskKS9nO1xudmFyIFJFX1NQTElUID0gL1xccysvO1xuXG52YXIgdHJpbSA9IFN0cmluZy5wcm90b3R5cGUudHJpbVxuICA/IGZ1bmN0aW9uKHN0cikgeyByZXR1cm4gc3RyLnRyaW0oKTsgfVxuICA6IGZ1bmN0aW9uKHN0cikgeyByZXR1cm4gc3RyLnJlcGxhY2UoUkVfVFJJTSwgJycpOyB9O1xuXG52YXIgcXVlcnlCeUlkID0gZnVuY3Rpb24oaWQpIHtcbiAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcignW2lkPVwiJyArIGlkLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKSArICdcIl0nKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVzb2x2ZUlkcyhpZHMsIGRvYykge1xuICBpZiAodHlwZW9mIGlkcyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGEgc3RyaW5nIGJ1dCBnb3QgJyArICh0eXBlb2YgaWRzKSk7XG4gIH1cblxuICBpZiAoIWRvYykge1xuICAgIGRvYyA9IHdpbmRvdy5kb2N1bWVudDtcbiAgfVxuXG4gIHZhciBnZXRFbGVtZW50QnlJZCA9IGRvYy5nZXRFbGVtZW50QnlJZFxuICAgID8gZG9jLmdldEVsZW1lbnRCeUlkLmJpbmQoZG9jKVxuICAgIDogcXVlcnlCeUlkLmJpbmQoZG9jKTtcblxuICBpZHMgPSB0cmltKGlkcykuc3BsaXQoUkVfU1BMSVQpO1xuXG4gIC8vIFhYWCB3ZSBjYW4gc2hvcnQtY2lyY3VpdCBoZXJlIGJlY2F1c2UgdHJpbW1pbmcgYW5kIHNwbGl0dGluZyBhXG4gIC8vIHN0cmluZyBvZiBqdXN0IHdoaXRlc3BhY2UgcHJvZHVjZXMgYW4gYXJyYXkgY29udGFpbmluZyBhIHNpbmdsZSxcbiAgLy8gZW1wdHkgc3RyaW5nXG4gIGlmIChpZHMubGVuZ3RoID09PSAxICYmIGlkc1swXSA9PT0gJycpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gaWRzXG4gICAgLm1hcChmdW5jdGlvbihpZCkge1xuICAgICAgdmFyIGVsID0gZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgaWYgKCFlbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGVsZW1lbnQgd2l0aCBpZDogXCInICsgaWQgKyAnXCInKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbDtcbiAgICB9KTtcbn07XG4iLCJjb25zdCBzZWxlY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvc2VsZWN0XCIpO1xuY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKFwiLi4vdXRpbHMvYmVoYXZpb3JcIik7XG5jb25zdCB0b2dnbGUgPSByZXF1aXJlKFwiLi4vdXRpbHMvdG9nZ2xlXCIpO1xuY29uc3QgaXNFbGVtZW50SW5WaWV3cG9ydCA9IHJlcXVpcmUoXCIuLi91dGlscy9pcy1pbi12aWV3cG9ydFwiKTtcbmNvbnN0IHsgQ0xJQ0sgfSA9IHJlcXVpcmUoXCIuLi9ldmVudHNcIik7XG5jb25zdCB7IHByZWZpeDogUFJFRklYIH0gPSByZXF1aXJlKFwiLi4vY29uZmlnXCIpO1xuXG5jb25zdCBBQ0NPUkRJT04gPSBgLiR7UFJFRklYfS1hY2NvcmRpb24sIC4ke1BSRUZJWH0tYWNjb3JkaW9uLS1ib3JkZXJlZGA7XG5jb25zdCBCVVRUT04gPSBgLiR7UFJFRklYfS1hY2NvcmRpb25fX2J1dHRvblthcmlhLWNvbnRyb2xzXWA7XG5jb25zdCBFWFBBTkRFRCA9IFwiYXJpYS1leHBhbmRlZFwiO1xuY29uc3QgTVVMVElTRUxFQ1RBQkxFID0gXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiO1xuXG4vKipcbiAqIEdldCBhbiBBcnJheSBvZiBidXR0b24gZWxlbWVudHMgYmVsb25naW5nIGRpcmVjdGx5IHRvIHRoZSBnaXZlblxuICogYWNjb3JkaW9uIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBhY2NvcmRpb25cbiAqIEByZXR1cm4ge2FycmF5PEhUTUxCdXR0b25FbGVtZW50Pn1cbiAqL1xuY29uc3QgZ2V0QWNjb3JkaW9uQnV0dG9ucyA9IGFjY29yZGlvbiA9PiB7XG4gIGNvbnN0IGJ1dHRvbnMgPSBzZWxlY3QoQlVUVE9OLCBhY2NvcmRpb24pO1xuXG4gIHJldHVybiBidXR0b25zLmZpbHRlcihidXR0b24gPT4gYnV0dG9uLmNsb3Nlc3QoQUNDT1JESU9OKSA9PT0gYWNjb3JkaW9uKTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIGEgYnV0dG9uJ3MgXCJwcmVzc2VkXCIgc3RhdGUsIG9wdGlvbmFsbHkgcHJvdmlkaW5nIGEgdGFyZ2V0XG4gKiBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0hUTUxCdXR0b25FbGVtZW50fSBidXR0b25cbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGV4cGFuZGVkIElmIG5vIHN0YXRlIGlzIHByb3ZpZGVkLCB0aGUgY3VycmVudFxuICogc3RhdGUgd2lsbCBiZSB0b2dnbGVkIChmcm9tIGZhbHNlIHRvIHRydWUsIGFuZCB2aWNlLXZlcnNhKS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHRpbmcgc3RhdGVcbiAqL1xuY29uc3QgdG9nZ2xlQnV0dG9uID0gKGJ1dHRvbiwgZXhwYW5kZWQpID0+IHtcbiAgY29uc3QgYWNjb3JkaW9uID0gYnV0dG9uLmNsb3Nlc3QoQUNDT1JESU9OKTtcbiAgbGV0IHNhZmVFeHBhbmRlZCA9IGV4cGFuZGVkO1xuXG4gIGlmICghYWNjb3JkaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke0JVVFRPTn0gaXMgbWlzc2luZyBvdXRlciAke0FDQ09SRElPTn1gKTtcbiAgfVxuXG4gIHNhZmVFeHBhbmRlZCA9IHRvZ2dsZShidXR0b24sIGV4cGFuZGVkKTtcblxuICAvLyBYWFggbXVsdGlzZWxlY3RhYmxlIGlzIG9wdC1pbiwgdG8gcHJlc2VydmUgbGVnYWN5IGJlaGF2aW9yXG4gIGNvbnN0IG11bHRpc2VsZWN0YWJsZSA9IGFjY29yZGlvbi5nZXRBdHRyaWJ1dGUoTVVMVElTRUxFQ1RBQkxFKSA9PT0gXCJ0cnVlXCI7XG5cbiAgaWYgKHNhZmVFeHBhbmRlZCAmJiAhbXVsdGlzZWxlY3RhYmxlKSB7XG4gICAgZ2V0QWNjb3JkaW9uQnV0dG9ucyhhY2NvcmRpb24pLmZvckVhY2gob3RoZXIgPT4ge1xuICAgICAgaWYgKG90aGVyICE9PSBidXR0b24pIHtcbiAgICAgICAgdG9nZ2xlKG90aGVyLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtIVE1MQnV0dG9uRWxlbWVudH0gYnV0dG9uXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlXG4gKi9cbmNvbnN0IHNob3dCdXR0b24gPSBidXR0b24gPT4gdG9nZ2xlQnV0dG9uKGJ1dHRvbiwgdHJ1ZSk7XG5cbi8qKlxuICogQHBhcmFtIHtIVE1MQnV0dG9uRWxlbWVudH0gYnV0dG9uXG4gKiBAcmV0dXJuIHtib29sZWFufSBmYWxzZVxuICovXG5jb25zdCBoaWRlQnV0dG9uID0gYnV0dG9uID0+IHRvZ2dsZUJ1dHRvbihidXR0b24sIGZhbHNlKTtcblxuY29uc3QgYWNjb3JkaW9uID0gYmVoYXZpb3IoXG4gIHtcbiAgICBbQ0xJQ0tdOiB7XG4gICAgICBbQlVUVE9OXShldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHRvZ2dsZUJ1dHRvbih0aGlzKTtcblxuICAgICAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoRVhQQU5ERUQpID09PSBcInRydWVcIikge1xuICAgICAgICAgIC8vIFdlIHdlcmUganVzdCBleHBhbmRlZCwgYnV0IGlmIGFub3RoZXIgYWNjb3JkaW9uIHdhcyBhbHNvIGp1c3RcbiAgICAgICAgICAvLyBjb2xsYXBzZWQsIHdlIG1heSBubyBsb25nZXIgYmUgaW4gdGhlIHZpZXdwb3J0LiBUaGlzIGVuc3VyZXNcbiAgICAgICAgICAvLyB0aGF0IHdlIGFyZSBzdGlsbCB2aXNpYmxlLCBzbyB0aGUgdXNlciBpc24ndCBjb25mdXNlZC5cbiAgICAgICAgICBpZiAoIWlzRWxlbWVudEluVmlld3BvcnQodGhpcykpIHRoaXMuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGluaXQocm9vdCkge1xuICAgICAgc2VsZWN0KEJVVFRPTiwgcm9vdCkuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoRVhQQU5ERUQpID09PSBcInRydWVcIjtcbiAgICAgICAgdG9nZ2xlQnV0dG9uKGJ1dHRvbiwgZXhwYW5kZWQpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBBQ0NPUkRJT04sXG4gICAgQlVUVE9OLFxuICAgIHNob3c6IHNob3dCdXR0b24sXG4gICAgaGlkZTogaGlkZUJ1dHRvbixcbiAgICB0b2dnbGU6IHRvZ2dsZUJ1dHRvbixcbiAgICBnZXRCdXR0b25zOiBnZXRBY2NvcmRpb25CdXR0b25zXG4gIH1cbik7XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjb3JkaW9uO1xuIiwiY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKFwiLi4vdXRpbHMvYmVoYXZpb3JcIik7XG5jb25zdCB7IENMSUNLIH0gPSByZXF1aXJlKFwiLi4vZXZlbnRzXCIpO1xuY29uc3QgeyBwcmVmaXg6IFBSRUZJWCB9ID0gcmVxdWlyZShcIi4uL2NvbmZpZ1wiKTtcblxuY29uc3QgSEVBREVSID0gYC4ke1BSRUZJWH0tYmFubmVyX19oZWFkZXJgO1xuY29uc3QgRVhQQU5ERURfQ0xBU1MgPSBgJHtQUkVGSVh9LWJhbm5lcl9faGVhZGVyLS1leHBhbmRlZGA7XG5cbmNvbnN0IHRvZ2dsZUJhbm5lciA9IGZ1bmN0aW9uIHRvZ2dsZUVsKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIHRoaXMuY2xvc2VzdChIRUFERVIpLmNsYXNzTGlzdC50b2dnbGUoRVhQQU5ERURfQ0xBU1MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiZWhhdmlvcih7XG4gIFtDTElDS106IHtcbiAgICBbYCR7SEVBREVSfSBbYXJpYS1jb250cm9sc11gXTogdG9nZ2xlQmFubmVyXG4gIH1cbn0pO1xuIiwiY29uc3Qgc2VsZWN0ID0gcmVxdWlyZShcIi4uL3V0aWxzL3NlbGVjdFwiKTtcbmNvbnN0IGJlaGF2aW9yID0gcmVxdWlyZShcIi4uL3V0aWxzL2JlaGF2aW9yXCIpO1xuY29uc3QgeyBwcmVmaXg6IFBSRUZJWCB9ID0gcmVxdWlyZShcIi4uL2NvbmZpZ1wiKTtcblxuY29uc3QgQ0hBUkFDVEVSX0NPVU5UID0gYC4ke1BSRUZJWH0tY2hhcmFjdGVyLWNvdW50YDtcbmNvbnN0IElOUFVUID0gYC4ke1BSRUZJWH0tY2hhcmFjdGVyLWNvdW50X19maWVsZGA7XG5jb25zdCBNRVNTQUdFID0gYC4ke1BSRUZJWH0tY2hhcmFjdGVyLWNvdW50X19tZXNzYWdlYDtcbmNvbnN0IFZBTElEQVRJT05fTUVTU0FHRSA9IFwiVGhlIGNvbnRlbnQgaXMgdG9vIGxvbmcuXCI7XG5jb25zdCBNRVNTQUdFX0lOVkFMSURfQ0xBU1MgPSBgJHtQUkVGSVh9LWNoYXJhY3Rlci1jb3VudF9fbWVzc2FnZS0taW52YWxpZGA7XG5cbi8qKlxuICogVGhlIGVsZW1lbnRzIHdpdGhpbiB0aGUgY2hhcmFjdGVyIGNvdW50LlxuICogQHR5cGVkZWYge09iamVjdH0gQ2hhcmFjdGVyQ291bnRFbGVtZW50c1xuICogQHByb3BlcnR5IHtIVE1MRGl2RWxlbWVudH0gY2hhcmFjdGVyQ291bnRFbFxuICogQHByb3BlcnR5IHtIVE1MU3BhbkVsZW1lbnR9IG1lc3NhZ2VFbFxuICovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgcm9vdCBhbmQgbWVzc2FnZSBlbGVtZW50XG4gKiBmb3IgYW4gY2hhcmFjdGVyIGNvdW50IGlucHV0XG4gKlxuICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fEhUTUxUZXh0QXJlYUVsZW1lbnR9IGlucHV0RWwgVGhlIGNoYXJhY3RlciBjb3VudCBpbnB1dCBlbGVtZW50XG4gKiBAcmV0dXJucyB7Q2hhcmFjdGVyQ291bnRFbGVtZW50c30gZWxlbWVudHMgVGhlIHJvb3QgYW5kIG1lc3NhZ2UgZWxlbWVudC5cbiAqL1xuY29uc3QgZ2V0Q2hhcmFjdGVyQ291bnRFbGVtZW50cyA9IGlucHV0RWwgPT4ge1xuICBjb25zdCBjaGFyYWN0ZXJDb3VudEVsID0gaW5wdXRFbC5jbG9zZXN0KENIQVJBQ1RFUl9DT1VOVCk7XG5cbiAgaWYgKCFjaGFyYWN0ZXJDb3VudEVsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke0lOUFVUfSBpcyBtaXNzaW5nIG91dGVyICR7Q0hBUkFDVEVSX0NPVU5UfWApO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZUVsID0gY2hhcmFjdGVyQ291bnRFbC5xdWVyeVNlbGVjdG9yKE1FU1NBR0UpO1xuXG4gIGlmICghbWVzc2FnZUVsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke0NIQVJBQ1RFUl9DT1VOVH0gaXMgbWlzc2luZyBpbm5lciAke01FU1NBR0V9YCk7XG4gIH1cblxuICByZXR1cm4geyBjaGFyYWN0ZXJDb3VudEVsLCBtZXNzYWdlRWwgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBjaGFyYWN0ZXIgY291bnQgY29tcG9uZW50XG4gKlxuICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fEhUTUxUZXh0QXJlYUVsZW1lbnR9IGlucHV0RWwgVGhlIGNoYXJhY3RlciBjb3VudCBpbnB1dCBlbGVtZW50XG4gKi9cbmNvbnN0IHVwZGF0ZUNvdW50TWVzc2FnZSA9IGlucHV0RWwgPT4ge1xuICBjb25zdCB7IGNoYXJhY3RlckNvdW50RWwsIG1lc3NhZ2VFbCB9ID0gZ2V0Q2hhcmFjdGVyQ291bnRFbGVtZW50cyhpbnB1dEVsKTtcblxuICBjb25zdCBtYXhsZW5ndGggPSBwYXJzZUludChcbiAgICBjaGFyYWN0ZXJDb3VudEVsLmdldEF0dHJpYnV0ZShcImRhdGEtbWF4bGVuZ3RoXCIpLFxuICAgIDEwXG4gICk7XG5cbiAgaWYgKCFtYXhsZW5ndGgpIHJldHVybjtcblxuICBsZXQgbmV3TWVzc2FnZSA9IFwiXCI7XG4gIGNvbnN0IGN1cnJlbnRMZW5ndGggPSBpbnB1dEVsLnZhbHVlLmxlbmd0aDtcbiAgY29uc3QgaXNPdmVyTGltaXQgPSBjdXJyZW50TGVuZ3RoICYmIGN1cnJlbnRMZW5ndGggPiBtYXhsZW5ndGg7XG5cbiAgaWYgKGN1cnJlbnRMZW5ndGggPT09IDApIHtcbiAgICBuZXdNZXNzYWdlID0gYCR7bWF4bGVuZ3RofSBjaGFyYWN0ZXJzIGFsbG93ZWRgO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBNYXRoLmFicyhtYXhsZW5ndGggLSBjdXJyZW50TGVuZ3RoKTtcbiAgICBjb25zdCBjaGFyYWN0ZXJzID0gYGNoYXJhY3RlciR7ZGlmZmVyZW5jZSA9PT0gMSA/IFwiXCIgOiBcInNcIn1gO1xuICAgIGNvbnN0IGd1aWRhbmNlID0gaXNPdmVyTGltaXQgPyBcIm92ZXIgbGltaXRcIiA6IFwibGVmdFwiO1xuXG4gICAgbmV3TWVzc2FnZSA9IGAke2RpZmZlcmVuY2V9ICR7Y2hhcmFjdGVyc30gJHtndWlkYW5jZX1gO1xuICB9XG5cbiAgbWVzc2FnZUVsLmNsYXNzTGlzdC50b2dnbGUoTUVTU0FHRV9JTlZBTElEX0NMQVNTLCBpc092ZXJMaW1pdCk7XG4gIG1lc3NhZ2VFbC5pbm5lckhUTUwgPSBuZXdNZXNzYWdlO1xuXG4gIGlmIChpc092ZXJMaW1pdCAmJiAhaW5wdXRFbC52YWxpZGF0aW9uTWVzc2FnZSkge1xuICAgIGlucHV0RWwuc2V0Q3VzdG9tVmFsaWRpdHkoVkFMSURBVElPTl9NRVNTQUdFKTtcbiAgfVxuXG4gIGlmICghaXNPdmVyTGltaXQgJiYgaW5wdXRFbC52YWxpZGF0aW9uTWVzc2FnZSA9PT0gVkFMSURBVElPTl9NRVNTQUdFKSB7XG4gICAgaW5wdXRFbC5zZXRDdXN0b21WYWxpZGl0eShcIlwiKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTZXR1cCB0aGUgY2hhcmFjdGVyIGNvdW50IGNvbXBvbmVudFxuICpcbiAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudHxIVE1MVGV4dEFyZWFFbGVtZW50fSBpbnB1dEVsIFRoZSBjaGFyYWN0ZXIgY291bnQgaW5wdXQgZWxlbWVudFxuICovXG5jb25zdCBzZXR1cEF0dHJpYnV0ZXMgPSBpbnB1dEVsID0+IHtcbiAgY29uc3QgeyBjaGFyYWN0ZXJDb3VudEVsIH0gPSBnZXRDaGFyYWN0ZXJDb3VudEVsZW1lbnRzKGlucHV0RWwpO1xuXG4gIGNvbnN0IG1heGxlbmd0aCA9IGlucHV0RWwuZ2V0QXR0cmlidXRlKFwibWF4bGVuZ3RoXCIpO1xuXG4gIGlmICghbWF4bGVuZ3RoKSByZXR1cm47XG5cbiAgaW5wdXRFbC5yZW1vdmVBdHRyaWJ1dGUoXCJtYXhsZW5ndGhcIik7XG4gIGNoYXJhY3RlckNvdW50RWwuc2V0QXR0cmlidXRlKFwiZGF0YS1tYXhsZW5ndGhcIiwgbWF4bGVuZ3RoKTtcbn07XG5cbmNvbnN0IGNoYXJhY3RlckNvdW50ID0gYmVoYXZpb3IoXG4gIHtcbiAgICBpbnB1dDoge1xuICAgICAgW0lOUFVUXSgpIHtcbiAgICAgICAgdXBkYXRlQ291bnRNZXNzYWdlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGluaXQocm9vdCkge1xuICAgICAgc2VsZWN0KElOUFVULCByb290KS5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICAgICAgc2V0dXBBdHRyaWJ1dGVzKGlucHV0KTtcbiAgICAgICAgdXBkYXRlQ291bnRNZXNzYWdlKGlucHV0KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgTUVTU0FHRV9JTlZBTElEX0NMQVNTLFxuICAgIFZBTElEQVRJT05fTUVTU0FHRVxuICB9XG4pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNoYXJhY3RlckNvdW50O1xuIiwiY29uc3Qga2V5bWFwID0gcmVxdWlyZShcInJlY2VwdG9yL2tleW1hcFwiKTtcbmNvbnN0IHNlbGVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9zZWxlY3RcIik7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoXCIuLi91dGlscy9iZWhhdmlvclwiKTtcbmNvbnN0IHsgcHJlZml4OiBQUkVGSVggfSA9IHJlcXVpcmUoXCIuLi9jb25maWdcIik7XG5jb25zdCB7IENMSUNLIH0gPSByZXF1aXJlKFwiLi4vZXZlbnRzXCIpO1xuXG5jb25zdCBDT01CT19CT1ggPSBgLiR7UFJFRklYfS1jb21iby1ib3hgO1xuXG5jb25zdCBJTlBVVF9DTEFTUyA9IGAke1BSRUZJWH0tY29tYm8tYm94X19pbnB1dGA7XG5jb25zdCBMSVNUX0NMQVNTID0gYCR7UFJFRklYfS1jb21iby1ib3hfX2xpc3RgO1xuY29uc3QgTElTVF9PUFRJT05fQ0xBU1MgPSBgJHtQUkVGSVh9LWNvbWJvLWJveF9fbGlzdC1vcHRpb25gO1xuY29uc3QgU1RBVFVTX0NMQVNTID0gYCR7UFJFRklYfS1jb21iby1ib3hfX3N0YXR1c2A7XG5jb25zdCBMSVNUX09QVElPTl9GT0NVU0VEX0NMQVNTID0gYCR7TElTVF9PUFRJT05fQ0xBU1N9LS1mb2N1c2VkYDtcblxuY29uc3QgU0VMRUNUID0gYC4ke1BSRUZJWH0tY29tYm8tYm94X19zZWxlY3RgO1xuY29uc3QgSU5QVVQgPSBgLiR7SU5QVVRfQ0xBU1N9YDtcbmNvbnN0IExJU1QgPSBgLiR7TElTVF9DTEFTU31gO1xuY29uc3QgTElTVF9PUFRJT04gPSBgLiR7TElTVF9PUFRJT05fQ0xBU1N9YDtcbmNvbnN0IExJU1RfT1BUSU9OX0ZPQ1VTRUQgPSBgLiR7TElTVF9PUFRJT05fRk9DVVNFRF9DTEFTU31gO1xuY29uc3QgU1RBVFVTID0gYC4ke1NUQVRVU19DTEFTU31gO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB0aGUga2V5IGNvZGUgb2YgYW4gZXZlbnQgaXMgcHJpbnRhYmxlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGtleUNvZGUgVGhlIGtleSBjb2RlIG9mIHRoZSBldmVudFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaXMgdGhlIGtleSBjb2RlIGlzIHByaW50YWJsZVxuICovXG5jb25zdCBpc1ByaW50YWJsZUtleUNvZGUgPSBrZXlDb2RlID0+IHtcbiAgcmV0dXJuIChcbiAgICAoa2V5Q29kZSA+IDQ3ICYmIGtleUNvZGUgPCA1OCkgfHwgLy8gbnVtYmVyIGtleXNcbiAgICBrZXlDb2RlID09PSAzMiB8fCAvLyBzcGFjZVxuICAgIGtleUNvZGUgPT09IDggfHwgLy8gYmFja3NwYWNlXG4gICAgKGtleUNvZGUgPiA2NCAmJiBrZXlDb2RlIDwgOTEpIHx8IC8vIGxldHRlciBrZXlzXG4gICAgKGtleUNvZGUgPiA5NSAmJiBrZXlDb2RlIDwgMTEyKSB8fCAvLyBudW1wYWQga2V5c1xuICAgIChrZXlDb2RlID4gMTg1ICYmIGtleUNvZGUgPCAxOTMpIHx8IC8vIDs9LC0uL2AgKGluIG9yZGVyKVxuICAgIChrZXlDb2RlID4gMjE4ICYmIGtleUNvZGUgPCAyMjMpIC8vIFtcXF0nIChpbiBvcmRlcilcbiAgKTtcbn07XG5cbi8qKlxuICogVGhlIGVsZW1lbnRzIHdpdGhpbiB0aGUgY29tYm8gYm94LlxuICogQHR5cGVkZWYge09iamVjdH0gQ29tYm9Cb3hFbGVtZW50c1xuICogQHByb3BlcnR5IHtIVE1MRWxlbWVudH0gY29tYm9Cb3hFbFxuICogQHByb3BlcnR5IHtIVE1MU2VsZWN0RWxlbWVudH0gc2VsZWN0RWxcbiAqIEBwcm9wZXJ0eSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXRFbFxuICogQHByb3BlcnR5IHtIVE1MVUxpc3RFbGVtZW50fSBsaXN0RWxcbiAqIEBwcm9wZXJ0eSB7SFRNTERpdkVsZW1lbnR9IHN0YXR1c0VsXG4gKiBAcHJvcGVydHkge0hUTUxPcHRpb25FbGVtZW50fSBmb2N1c2VkT3B0aW9uRWxcbiAqL1xuXG4vKipcbiAqIEdldCBhbiBvYmplY3Qgb2YgZWxlbWVudHMgYmVsb25naW5nIGRpcmVjdGx5IHRvIHRoZSBnaXZlblxuICogY29tYm8gYm94IGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCB0aGUgZWxlbWVudCB3aXRoaW4gdGhlIGNvbWJvIGJveFxuICogQHJldHVybnMge0NvbWJvQm94RWxlbWVudHN9IGVsZW1lbnRzXG4gKi9cbmNvbnN0IGdldENvbWJvQm94RWxlbWVudHMgPSBlbCA9PiB7XG4gIGNvbnN0IGNvbWJvQm94RWwgPSBlbC5jbG9zZXN0KENPTUJPX0JPWCk7XG5cbiAgaWYgKCFjb21ib0JveEVsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFbGVtZW50IGlzIG1pc3Npbmcgb3V0ZXIgJHtDT01CT19CT1h9YCk7XG4gIH1cblxuICBjb25zdCBzZWxlY3RFbCA9IGNvbWJvQm94RWwucXVlcnlTZWxlY3RvcihTRUxFQ1QpO1xuXG4gIGlmICghc2VsZWN0RWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Q09NQk9fQk9YfSBpcyBtaXNzaW5nIGlubmVyICR7U0VMRUNUfWApO1xuICB9XG5cbiAgY29uc3QgaW5wdXRFbCA9IGNvbWJvQm94RWwucXVlcnlTZWxlY3RvcihJTlBVVCk7XG4gIGNvbnN0IGxpc3RFbCA9IGNvbWJvQm94RWwucXVlcnlTZWxlY3RvcihMSVNUKTtcbiAgY29uc3Qgc3RhdHVzRWwgPSBjb21ib0JveEVsLnF1ZXJ5U2VsZWN0b3IoU1RBVFVTKTtcbiAgY29uc3QgZm9jdXNlZE9wdGlvbkVsID0gY29tYm9Cb3hFbC5xdWVyeVNlbGVjdG9yKExJU1RfT1BUSU9OX0ZPQ1VTRUQpO1xuXG4gIHJldHVybiB7IGNvbWJvQm94RWwsIHNlbGVjdEVsLCBpbnB1dEVsLCBsaXN0RWwsIHN0YXR1c0VsLCBmb2N1c2VkT3B0aW9uRWwgfTtcbn07XG5cbi8qKlxuICogRW5oYW5jZSBhIHNlbGVjdCBlbGVtZW50IGludG8gYSBjb21ibyBib3ggY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIFRoZSBpbml0aWFsIGVsZW1lbnQgd2l0aGluIHRoZSBjb21ibyBib3ggY29tcG9uZW50XG4gKi9cbmNvbnN0IGVuaGFuY2VDb21ib0JveCA9IGVsID0+IHtcbiAgY29uc3QgeyBjb21ib0JveEVsLCBzZWxlY3RFbCB9ID0gZ2V0Q29tYm9Cb3hFbGVtZW50cyhlbCk7XG5cbiAgY29uc3Qgc2VsZWN0SWQgPSBzZWxlY3RFbC5pZDtcbiAgY29uc3QgbGlzdElkID0gYCR7c2VsZWN0SWR9LS1saXN0YDtcbiAgY29uc3QgYXNzaXN0aXZlSGludElEID0gYCR7c2VsZWN0SWR9LS1hc3Npc3RpdmVIaW50YDtcbiAgbGV0IHBsYWNlaG9sZGVyID0gXCJcIjtcbiAgbGV0IHNlbGVjdGVkT3B0aW9uO1xuICBjb25zdCBhZGRpdGlvbmFsQXR0cmlidXRlcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzZWxlY3RFbC5vcHRpb25zLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgY29uc3Qgb3B0aW9uRWwgPSBzZWxlY3RFbC5vcHRpb25zW2ldO1xuXG4gICAgaWYgKCFwbGFjZWhvbGRlciAmJiAhb3B0aW9uRWwudmFsdWUpIHtcbiAgICAgIHBsYWNlaG9sZGVyID0gYHBsYWNlaG9sZGVyPVwiJHtvcHRpb25FbC50ZXh0fVwiYDtcbiAgICB9XG5cbiAgICBpZiAoIXNlbGVjdGVkT3B0aW9uICYmIG9wdGlvbkVsLnNlbGVjdGVkICYmIG9wdGlvbkVsLnZhbHVlKSB7XG4gICAgICBzZWxlY3RlZE9wdGlvbiA9IG9wdGlvbkVsO1xuICAgIH1cblxuICAgIGlmIChwbGFjZWhvbGRlciAmJiBzZWxlY3RlZE9wdGlvbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0RWwuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBzZWxlY3RFbC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICBzZWxlY3RFbC5jbGFzc0xpc3QuYWRkKFwidXNhLXNyLW9ubHlcIik7XG4gIHNlbGVjdEVsLmlkID0gXCJcIjtcblxuICBbXCJyZXF1aXJlZFwiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIl0uZm9yRWFjaChuYW1lID0+IHtcbiAgICBpZiAoc2VsZWN0RWwuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHNlbGVjdEVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIGFkZGl0aW9uYWxBdHRyaWJ1dGVzLnB1c2goYCR7bmFtZX09XCIke3ZhbHVlfVwiYCk7XG4gICAgICBzZWxlY3RFbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgfVxuICB9KTtcblxuICBjb21ib0JveEVsLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIFtcbiAgICAgIGA8aW5wdXRcbiAgICAgICAgYXJpYS1vd25zPVwiJHtsaXN0SWR9XCJcbiAgICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCJcbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cIiR7YXNzaXN0aXZlSGludElEfVwiXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCJcbiAgICAgICAgJHtwbGFjZWhvbGRlciB8fCBcIlwifVxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBpZD1cIiR7c2VsZWN0SWR9XCJcbiAgICAgICAgY2xhc3M9XCIke0lOUFVUX0NMQVNTfVwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgICAgJHthZGRpdGlvbmFsQXR0cmlidXRlcy5qb2luKFwiIFwiKX1cbiAgICAgID5gLFxuICAgICAgYDx1bFxuICAgICAgICBpZD1cIiR7bGlzdElkfVwiXG4gICAgICAgIGNsYXNzPVwiJHtMSVNUX0NMQVNTfVwiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgaGlkZGVuPlxuICAgICAgPC91bD5gLFxuICAgICAgYDxkaXYgY2xhc3M9XCIke1NUQVRVU19DTEFTU30gdXNhLXNyLW9ubHlcIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICA8L2Rpdj5gLFxuICAgICAgYDxzcGFuIGlkPVwiJHthc3Npc3RpdmVIaW50SUR9XCIgY2xhc3M9XCJ1c2Etc3Itb25seVwiPlxuICAgICAgICBXaGVuIGF1dG9jb21wbGV0ZSByZXN1bHRzIGFyZSBhdmFpbGFibGUgdXNlIHVwIGFuZCBkb3duIGFycm93cyB0byByZXZpZXcgYW5kIGVudGVyIHRvIHNlbGVjdC5cbiAgICAgICAgVG91Y2ggZGV2aWNlIHVzZXJzLCBleHBsb3JlIGJ5IHRvdWNoIG9yIHdpdGggc3dpcGUgZ2VzdHVyZXMuXG4gICAgICA8L3NwYW4+YFxuICAgIF0uam9pbihcIlwiKVxuICApO1xuXG4gIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgIGNvbnN0IHsgaW5wdXRFbCB9ID0gZ2V0Q29tYm9Cb3hFbGVtZW50cyhlbCk7XG4gICAgc2VsZWN0RWwudmFsdWUgPSBzZWxlY3RlZE9wdGlvbi52YWx1ZTtcbiAgICBpbnB1dEVsLnZhbHVlID0gc2VsZWN0ZWRPcHRpb24udGV4dDtcbiAgfVxufTtcblxuLyoqXG4gKiBEaXNwbGF5IHRoZSBvcHRpb24gbGlzdCBvZiBhIGNvbWJvIGJveCBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgQW4gZWxlbWVudCB3aXRoaW4gdGhlIGNvbWJvIGJveCBjb21wb25lbnRcbiAqL1xuY29uc3QgZGlzcGxheUxpc3QgPSBlbCA9PiB7XG4gIGNvbnN0IHsgc2VsZWN0RWwsIGlucHV0RWwsIGxpc3RFbCwgc3RhdHVzRWwgfSA9IGdldENvbWJvQm94RWxlbWVudHMoZWwpO1xuXG4gIGNvbnN0IGxpc3RPcHRpb25CYXNlSWQgPSBgJHtsaXN0RWwuaWR9LS1vcHRpb24tYDtcblxuICBjb25zdCBpbnB1dFZhbHVlID0gKGlucHV0RWwudmFsdWUgfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcblxuICBjb25zdCBvcHRpb25zID0gW107XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzZWxlY3RFbC5vcHRpb25zLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgY29uc3Qgb3B0aW9uRWwgPSBzZWxlY3RFbC5vcHRpb25zW2ldO1xuICAgIGlmIChcbiAgICAgIG9wdGlvbkVsLnZhbHVlICYmXG4gICAgICAoIWlucHV0VmFsdWUgfHwgb3B0aW9uRWwudGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoaW5wdXRWYWx1ZSkgIT09IC0xKVxuICAgICkge1xuICAgICAgb3B0aW9ucy5wdXNoKG9wdGlvbkVsKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBudW1PcHRpb25zID0gb3B0aW9ucy5sZW5ndGg7XG4gIGNvbnN0IG9wdGlvbkh0bWwgPSBvcHRpb25zXG4gICAgLm1hcChcbiAgICAgIChvcHRpb24sIGluZGV4KSA9PlxuICAgICAgICBgPGxpXG4gICAgICAgICAgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCJcbiAgICAgICAgICBhcmlhLXNldHNpemU9XCIke29wdGlvbnMubGVuZ3RofVwiXG4gICAgICAgICAgYXJpYS1wb3NpbnNldD1cIiR7aW5kZXggKyAxfVwiXG4gICAgICAgICAgaWQ9XCIke2xpc3RPcHRpb25CYXNlSWR9JHtpbmRleH1cIlxuICAgICAgICAgIGNsYXNzPVwiJHtMSVNUX09QVElPTl9DTEFTU31cIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgIGRhdGEtb3B0aW9uLXZhbHVlPVwiJHtvcHRpb24udmFsdWV9XCJcbiAgICAgICAgPiR7b3B0aW9uLnRleHR9PC9saT5gXG4gICAgKVxuICAgIC5qb2luKFwiXCIpO1xuXG4gIGNvbnN0IG5vUmVzdWx0cyA9IGA8bGkgY2xhc3M9XCIke0xJU1RfT1BUSU9OX0NMQVNTfS0tbm8tcmVzdWx0c1wiPk5vIHJlc3VsdHMgZm91bmQ8L2xpPmA7XG5cbiAgbGlzdEVsLmhpZGRlbiA9IGZhbHNlO1xuICBsaXN0RWwuaW5uZXJIVE1MID0gbnVtT3B0aW9ucyA/IG9wdGlvbkh0bWwgOiBub1Jlc3VsdHM7XG5cbiAgaW5wdXRFbC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIsIFwidHJ1ZVwiKTtcblxuICBzdGF0dXNFbC5pbm5lckhUTUwgPSBudW1PcHRpb25zXG4gICAgPyBgJHtudW1PcHRpb25zfSByZXN1bHQke251bU9wdGlvbnMgPiAxID8gXCJzXCIgOiBcIlwifSBhdmFpbGFibGUuYFxuICAgIDogXCJObyByZXN1bHRzLlwiO1xufTtcblxuLyoqXG4gKiBIaWRlIHRoZSBvcHRpb24gbGlzdCBvZiBhIGNvbWJvIGJveCBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgQW4gZWxlbWVudCB3aXRoaW4gdGhlIGNvbWJvIGJveCBjb21wb25lbnRcbiAqL1xuY29uc3QgaGlkZUxpc3QgPSBlbCA9PiB7XG4gIGNvbnN0IHsgaW5wdXRFbCwgbGlzdEVsLCBzdGF0dXNFbCB9ID0gZ2V0Q29tYm9Cb3hFbGVtZW50cyhlbCk7XG5cbiAgc3RhdHVzRWwuaW5uZXJIVE1MID0gXCJcIjtcblxuICBpbnB1dEVsLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgXCJmYWxzZVwiKTtcbiAgaW5wdXRFbC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiwgXCJcIik7XG5cbiAgbGlzdEVsLmlubmVySFRNTCA9IFwiXCI7XG4gIGxpc3RFbC5oaWRkZW4gPSB0cnVlO1xufTtcblxuLyoqXG4gKiBTZWxlY3QgYW4gb3B0aW9uIGxpc3Qgb2YgdGhlIGNvbWJvIGJveCBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbGlzdE9wdGlvbkVsIFRoZSBsaXN0IG9wdGlvbiBiZWluZyBzZWxlY3RlZFxuICovXG5jb25zdCBzZWxlY3RJdGVtID0gbGlzdE9wdGlvbkVsID0+IHtcbiAgY29uc3QgeyBjb21ib0JveEVsLCBzZWxlY3RFbCwgaW5wdXRFbCB9ID0gZ2V0Q29tYm9Cb3hFbGVtZW50cyhsaXN0T3B0aW9uRWwpO1xuXG4gIHNlbGVjdEVsLnZhbHVlID0gbGlzdE9wdGlvbkVsLmdldEF0dHJpYnV0ZShcImRhdGEtb3B0aW9uLXZhbHVlXCIpO1xuICBpbnB1dEVsLnZhbHVlID0gbGlzdE9wdGlvbkVsLnRleHRDb250ZW50O1xuICBoaWRlTGlzdChjb21ib0JveEVsKTtcbiAgaW5wdXRFbC5mb2N1cygpO1xufTtcblxuLyoqXG4gKiBTZWxlY3QgYW4gb3B0aW9uIGxpc3Qgb2YgdGhlIGNvbWJvIGJveCBjb21wb25lbnQgYmFzZWQgb2ZmIG9mXG4gKiBoYXZpbmcgYSBjdXJyZW50IGZvY3VzZWQgbGlzdCBvcHRpb24gb3JcbiAqIGhhdmluZyB0ZXN0IHRoYXQgY29tcGxldGVseSBtYXRjaGVzIGEgbGlzdCBvcHRpb24uXG4gKiBPdGhlcndpc2UgaXQgY2xlYXJzIHRoZSBpbnB1dCBhbmQgc2VsZWN0LlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIEFuIGVsZW1lbnQgd2l0aGluIHRoZSBjb21ibyBib3ggY29tcG9uZW50XG4gKi9cbmNvbnN0IGNvbXBsZXRlU2VsZWN0aW9uID0gZWwgPT4ge1xuICBjb25zdCB7IHNlbGVjdEVsLCBpbnB1dEVsLCBzdGF0dXNFbCwgZm9jdXNlZE9wdGlvbkVsIH0gPSBnZXRDb21ib0JveEVsZW1lbnRzKFxuICAgIGVsXG4gICk7XG5cbiAgc3RhdHVzRWwudGV4dENvbnRlbnQgPSBcIlwiO1xuXG4gIGlmIChmb2N1c2VkT3B0aW9uRWwpIHtcbiAgICBzZWxlY3RFbC52YWx1ZSA9IGZvY3VzZWRPcHRpb25FbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9wdGlvbi12YWx1ZVwiKTtcbiAgICBpbnB1dEVsLnZhbHVlID0gZm9jdXNlZE9wdGlvbkVsLnRleHRDb250ZW50O1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGlucHV0VmFsdWUgPSAoaW5wdXRFbC52YWx1ZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdEVsLm9wdGlvbnMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IG9wdGlvbkVsID0gc2VsZWN0RWwub3B0aW9uc1tpXTtcbiAgICAgIGlmIChvcHRpb25FbC50ZXh0LnRvTG93ZXJDYXNlKCkgPT09IGlucHV0VmFsdWUpIHtcbiAgICAgICAgc2VsZWN0RWwudmFsdWUgPSBvcHRpb25FbC52YWx1ZTtcbiAgICAgICAgaW5wdXRFbC52YWx1ZSA9IG9wdGlvbkVsLnRleHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3RFbC52YWx1ZSA9IFwiXCI7XG5cbiAgaWYgKGlucHV0RWwudmFsdWUpIHtcbiAgICBpbnB1dEVsLnZhbHVlID0gXCJcIjtcbiAgfVxufTtcblxuLyoqXG4gKiBNYW5hZ2UgdGhlIGZvY3VzZWQgZWxlbWVudCB3aXRoaW4gdGhlIGxpc3Qgb3B0aW9ucyB3aGVuXG4gKiBuYXZpZ2F0aW5nIHZpYSBrZXlib2FyZC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCBBbiBlbGVtZW50IHdpdGhpbiB0aGUgY29tYm8gYm94IGNvbXBvbmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY3VycmVudEVsIEFuIGVsZW1lbnQgd2l0aGluIHRoZSBjb21ibyBib3ggY29tcG9uZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBuZXh0RWwgQW4gZWxlbWVudCB3aXRoaW4gdGhlIGNvbWJvIGJveCBjb21wb25lbnRcbiAqL1xuY29uc3QgaGlnaGxpZ2h0T3B0aW9uID0gKGVsLCBjdXJyZW50RWwsIG5leHRFbCkgPT4ge1xuICBjb25zdCB7IGlucHV0RWwsIGxpc3RFbCB9ID0gZ2V0Q29tYm9Cb3hFbGVtZW50cyhlbCk7XG5cbiAgaWYgKGN1cnJlbnRFbCkge1xuICAgIGN1cnJlbnRFbC5jbGFzc0xpc3QucmVtb3ZlKExJU1RfT1BUSU9OX0ZPQ1VTRURfQ0xBU1MpO1xuICAgIGN1cnJlbnRFbC5zZXRBdHRyaWJ1dGUoXCJhcmlhLXNlbGVjdGVkXCIsIFwiZmFsc2VcIik7XG4gIH1cblxuICBpZiAobmV4dEVsKSB7XG4gICAgaW5wdXRFbC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiwgbmV4dEVsLmlkKTtcbiAgICBuZXh0RWwuc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLCBcInRydWVcIik7XG4gICAgbmV4dEVsLmNsYXNzTGlzdC5hZGQoTElTVF9PUFRJT05fRk9DVVNFRF9DTEFTUyk7XG5cbiAgICBjb25zdCBvcHRpb25Cb3R0b20gPSBuZXh0RWwub2Zmc2V0VG9wICsgbmV4dEVsLm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBjdXJyZW50Qm90dG9tID0gbGlzdEVsLnNjcm9sbFRvcCArIGxpc3RFbC5vZmZzZXRIZWlnaHQ7XG5cbiAgICBpZiAob3B0aW9uQm90dG9tID4gY3VycmVudEJvdHRvbSkge1xuICAgICAgbGlzdEVsLnNjcm9sbFRvcCA9IG9wdGlvbkJvdHRvbSAtIGxpc3RFbC5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKG5leHRFbC5vZmZzZXRUb3AgPCBsaXN0RWwuc2Nyb2xsVG9wKSB7XG4gICAgICBsaXN0RWwuc2Nyb2xsVG9wID0gbmV4dEVsLm9mZnNldFRvcDtcbiAgICB9XG4gICAgbmV4dEVsLmZvY3VzKCk7XG4gIH0gZWxzZSB7XG4gICAgaW5wdXRFbC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiwgXCJcIik7XG4gICAgaW5wdXRFbC5mb2N1cygpO1xuICB9XG59O1xuXG4vKipcbiAqIEhhbmRsZSB0aGUgZW50ZXIgZXZlbnQgd2l0aGluIHRoZSBjb21ibyBib3ggY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgQW4gZXZlbnQgd2l0aGluIHRoZSBjb21ibyBib3ggY29tcG9uZW50XG4gKi9cbmNvbnN0IGhhbmRsZUVudGVyID0gZXZlbnQgPT4ge1xuICBjb25zdCB7IGNvbWJvQm94RWwsIGlucHV0RWwsIGxpc3RFbCB9ID0gZ2V0Q29tYm9Cb3hFbGVtZW50cyhldmVudC50YXJnZXQpO1xuICBjb25zdCBsaXN0U2hvd24gPSAhbGlzdEVsLmhpZGRlbjtcblxuICBjb21wbGV0ZVNlbGVjdGlvbihjb21ib0JveEVsKTtcblxuICBpZiAobGlzdFNob3duKSB7XG4gICAgaGlkZUxpc3QoY29tYm9Cb3hFbCk7XG4gICAgaW5wdXRFbC5mb2N1cygpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn07XG5cbi8qKlxuICogSGFuZGxlIHRoZSBkb3duIGV2ZW50IHdpdGhpbiB0aGUgY29tYm8gYm94IGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IEFuIGV2ZW50IHdpdGhpbiB0aGUgY29tYm8gYm94IGNvbXBvbmVudFxuICovXG5jb25zdCBoYW5kbGVFc2NhcGUgPSBldmVudCA9PiB7XG4gIGNvbnN0IHsgY29tYm9Cb3hFbCwgaW5wdXRFbCB9ID0gZ2V0Q29tYm9Cb3hFbGVtZW50cyhldmVudC50YXJnZXQpO1xuXG4gIGhpZGVMaXN0KGNvbWJvQm94RWwpO1xuICBpbnB1dEVsLmZvY3VzKCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZSB0aGUgdXAgZXZlbnQgd2l0aGluIHRoZSBjb21ibyBib3ggY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgQW4gZXZlbnQgd2l0aGluIHRoZSBjb21ibyBib3ggY29tcG9uZW50XG4gKi9cbmNvbnN0IGhhbmRsZVVwID0gZXZlbnQgPT4ge1xuICBjb25zdCB7IGNvbWJvQm94RWwsIGxpc3RFbCwgZm9jdXNlZE9wdGlvbkVsIH0gPSBnZXRDb21ib0JveEVsZW1lbnRzKFxuICAgIGV2ZW50LnRhcmdldFxuICApO1xuICBjb25zdCBuZXh0T3B0aW9uRWwgPSBmb2N1c2VkT3B0aW9uRWwgJiYgZm9jdXNlZE9wdGlvbkVsLnByZXZpb3VzU2libGluZztcbiAgY29uc3QgbGlzdFNob3duID0gIWxpc3RFbC5oaWRkZW47XG5cbiAgaGlnaGxpZ2h0T3B0aW9uKGNvbWJvQm94RWwsIGZvY3VzZWRPcHRpb25FbCwgbmV4dE9wdGlvbkVsKTtcblxuICBpZiAobGlzdFNob3duKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGlmICghbmV4dE9wdGlvbkVsKSB7XG4gICAgaGlkZUxpc3QoY29tYm9Cb3hFbCk7XG4gIH1cbn07XG5cbi8qKlxuICogSGFuZGxlIHRoZSBkb3duIGV2ZW50IHdpdGhpbiB0aGUgY29tYm8gYm94IGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IEFuIGV2ZW50IHdpdGhpbiB0aGUgY29tYm8gYm94IGNvbXBvbmVudFxuICovXG5jb25zdCBoYW5kbGVEb3duID0gZXZlbnQgPT4ge1xuICBjb25zdCB7IGNvbWJvQm94RWwsIGxpc3RFbCwgZm9jdXNlZE9wdGlvbkVsIH0gPSBnZXRDb21ib0JveEVsZW1lbnRzKFxuICAgIGV2ZW50LnRhcmdldFxuICApO1xuXG4gIGlmIChsaXN0RWwuaGlkZGVuKSB7XG4gICAgZGlzcGxheUxpc3QoY29tYm9Cb3hFbCk7XG4gIH1cblxuICBjb25zdCBuZXh0T3B0aW9uRWwgPSBmb2N1c2VkT3B0aW9uRWxcbiAgICA/IGZvY3VzZWRPcHRpb25FbC5uZXh0U2libGluZ1xuICAgIDogbGlzdEVsLnF1ZXJ5U2VsZWN0b3IoTElTVF9PUFRJT04pO1xuXG4gIGlmIChuZXh0T3B0aW9uRWwpIHtcbiAgICBoaWdobGlnaHRPcHRpb24oY29tYm9Cb3hFbCwgZm9jdXNlZE9wdGlvbkVsLCBuZXh0T3B0aW9uRWwpO1xuICB9XG5cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn07XG5cbmNvbnN0IGNvbWJvQm94ID0gYmVoYXZpb3IoXG4gIHtcbiAgICBbQ0xJQ0tdOiB7XG4gICAgICBbSU5QVVRdKCkge1xuICAgICAgICBkaXNwbGF5TGlzdCh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBbTElTVF9PUFRJT05dKCkge1xuICAgICAgICBzZWxlY3RJdGVtKHRoaXMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZm9jdXNvdXQ6IHtcbiAgICAgIFtDT01CT19CT1hdKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgY29tYm9Cb3hFbCB9ID0gZ2V0Q29tYm9Cb3hFbGVtZW50cyhldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAoIWNvbWJvQm94RWwuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICBjb21wbGV0ZVNlbGVjdGlvbihjb21ib0JveEVsKTtcbiAgICAgICAgICBoaWRlTGlzdChjb21ib0JveEVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAga2V5ZG93bjoge1xuICAgICAgW0NPTUJPX0JPWF06IGtleW1hcCh7XG4gICAgICAgIEFycm93VXA6IGhhbmRsZVVwLFxuICAgICAgICBVcDogaGFuZGxlVXAsXG4gICAgICAgIEFycm93RG93bjogaGFuZGxlRG93bixcbiAgICAgICAgRG93bjogaGFuZGxlRG93bixcbiAgICAgICAgRXNjYXBlOiBoYW5kbGVFc2NhcGUsXG4gICAgICAgIEVudGVyOiBoYW5kbGVFbnRlclxuICAgICAgfSlcbiAgICB9LFxuICAgIGtleXVwOiB7XG4gICAgICBbSU5QVVRdKGV2ZW50KSB7XG4gICAgICAgIGlmIChpc1ByaW50YWJsZUtleUNvZGUoZXZlbnQua2V5Q29kZSkpIHtcbiAgICAgICAgICBkaXNwbGF5TGlzdCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGluaXQocm9vdCkge1xuICAgICAgc2VsZWN0KFNFTEVDVCwgcm9vdCkuZm9yRWFjaChzZWxlY3RFbCA9PiB7XG4gICAgICAgIGVuaGFuY2VDb21ib0JveChzZWxlY3RFbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29tYm9Cb3g7XG4iLCJjb25zdCBkZWJvdW5jZSA9IHJlcXVpcmUoXCJsb2Rhc2guZGVib3VuY2VcIik7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoXCIuLi91dGlscy9iZWhhdmlvclwiKTtcbmNvbnN0IHNlbGVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9zZWxlY3RcIik7XG5jb25zdCB7IENMSUNLIH0gPSByZXF1aXJlKFwiLi4vZXZlbnRzXCIpO1xuY29uc3QgeyBwcmVmaXg6IFBSRUZJWCB9ID0gcmVxdWlyZShcIi4uL2NvbmZpZ1wiKTtcblxuY29uc3QgSElEREVOID0gXCJoaWRkZW5cIjtcbmNvbnN0IFNDT1BFID0gYC4ke1BSRUZJWH0tZm9vdGVyLS1iaWdgO1xuY29uc3QgTkFWID0gYCR7U0NPUEV9IG5hdmA7XG5jb25zdCBCVVRUT04gPSBgJHtOQVZ9IC4ke1BSRUZJWH0tZm9vdGVyX19wcmltYXJ5LWxpbmtgO1xuY29uc3QgQ09MTEFQU0lCTEUgPSBgLiR7UFJFRklYfS1mb290ZXJfX3ByaW1hcnktY29udGVudC0tY29sbGFwc2libGVgO1xuXG5jb25zdCBISURFX01BWF9XSURUSCA9IDQ4MDtcbmNvbnN0IERFQk9VTkNFX1JBVEUgPSAxODA7XG5cbmZ1bmN0aW9uIHNob3dQYW5lbCgpIHtcbiAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgSElERV9NQVhfV0lEVEgpIHtcbiAgICBjb25zdCBjb2xsYXBzZUVsID0gdGhpcy5jbG9zZXN0KENPTExBUFNJQkxFKTtcbiAgICBjb2xsYXBzZUVsLmNsYXNzTGlzdC50b2dnbGUoSElEREVOKTtcblxuICAgIC8vIE5COiB0aGlzICpzaG91bGQqIGFsd2F5cyBzdWNjZWVkIGJlY2F1c2UgdGhlIGJ1dHRvblxuICAgIC8vIHNlbGVjdG9yIGlzIHNjb3BlZCB0byBcIi57cHJlZml4fS1mb290ZXItYmlnIG5hdlwiXG4gICAgY29uc3QgY29sbGFwc2libGVFbHMgPSBzZWxlY3QoQ09MTEFQU0lCTEUsIGNvbGxhcHNlRWwuY2xvc2VzdChOQVYpKTtcblxuICAgIGNvbGxhcHNpYmxlRWxzLmZvckVhY2goZWwgPT4ge1xuICAgICAgaWYgKGVsICE9PSBjb2xsYXBzZUVsKSB7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoSElEREVOKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5sZXQgbGFzdElubmVyV2lkdGg7XG5cbmNvbnN0IHJlc2l6ZSA9IGRlYm91bmNlKCgpID0+IHtcbiAgaWYgKGxhc3RJbm5lcldpZHRoID09PSB3aW5kb3cuaW5uZXJXaWR0aCkgcmV0dXJuO1xuICBsYXN0SW5uZXJXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICBjb25zdCBoaWRkZW4gPSB3aW5kb3cuaW5uZXJXaWR0aCA8IEhJREVfTUFYX1dJRFRIO1xuICBzZWxlY3QoQ09MTEFQU0lCTEUpLmZvckVhY2gobGlzdCA9PiBsaXN0LmNsYXNzTGlzdC50b2dnbGUoSElEREVOLCBoaWRkZW4pKTtcbn0sIERFQk9VTkNFX1JBVEUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKFxuICB7XG4gICAgW0NMSUNLXToge1xuICAgICAgW0JVVFRPTl06IHNob3dQYW5lbFxuICAgIH1cbiAgfSxcbiAge1xuICAgIC8vIGV4cG9ydCBmb3IgdXNlIGVsc2V3aGVyZVxuICAgIEhJREVfTUFYX1dJRFRILFxuICAgIERFQk9VTkNFX1JBVEUsXG5cbiAgICBpbml0KCkge1xuICAgICAgcmVzaXplKCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemUpO1xuICAgIH0sXG5cbiAgICB0ZWFyZG93bigpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHJlc2l6ZSk7XG4gICAgfVxuICB9XG4pO1xuIiwiY29uc3QgYWNjb3JkaW9uID0gcmVxdWlyZShcIi4vYWNjb3JkaW9uXCIpO1xuY29uc3QgYmFubmVyID0gcmVxdWlyZShcIi4vYmFubmVyXCIpO1xuY29uc3QgY2hhcmFjdGVyQ291bnQgPSByZXF1aXJlKFwiLi9jaGFyYWN0ZXItY291bnRcIik7XG5jb25zdCBjb21ib0JveCA9IHJlcXVpcmUoXCIuL2NvbWJvLWJveFwiKTtcbmNvbnN0IGZvb3RlciA9IHJlcXVpcmUoXCIuL2Zvb3RlclwiKTtcbmNvbnN0IG5hdmlnYXRpb24gPSByZXF1aXJlKFwiLi9uYXZpZ2F0aW9uXCIpO1xuY29uc3QgcGFzc3dvcmQgPSByZXF1aXJlKFwiLi9wYXNzd29yZFwiKTtcbmNvbnN0IHNlYXJjaCA9IHJlcXVpcmUoXCIuL3NlYXJjaFwiKTtcbmNvbnN0IHNraXBuYXYgPSByZXF1aXJlKFwiLi9za2lwbmF2XCIpO1xuY29uc3QgdmFsaWRhdG9yID0gcmVxdWlyZShcIi4vdmFsaWRhdG9yXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWNjb3JkaW9uLFxuICBiYW5uZXIsXG4gIGNoYXJhY3RlckNvdW50LFxuICBjb21ib0JveCxcbiAgZm9vdGVyLFxuICBuYXZpZ2F0aW9uLFxuICBwYXNzd29yZCxcbiAgc2VhcmNoLFxuICBza2lwbmF2LFxuICB2YWxpZGF0b3Jcbn07XG4iLCJjb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoXCIuLi91dGlscy9iZWhhdmlvclwiKTtcbmNvbnN0IHNlbGVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9zZWxlY3RcIik7XG5jb25zdCB0b2dnbGUgPSByZXF1aXJlKFwiLi4vdXRpbHMvdG9nZ2xlXCIpO1xuY29uc3QgRm9jdXNUcmFwID0gcmVxdWlyZShcIi4uL3V0aWxzL2ZvY3VzLXRyYXBcIik7XG5jb25zdCBhY2NvcmRpb24gPSByZXF1aXJlKFwiLi9hY2NvcmRpb25cIik7XG5cbmNvbnN0IHsgQ0xJQ0sgfSA9IHJlcXVpcmUoXCIuLi9ldmVudHNcIik7XG5jb25zdCB7IHByZWZpeDogUFJFRklYIH0gPSByZXF1aXJlKFwiLi4vY29uZmlnXCIpO1xuXG5jb25zdCBCT0RZID0gXCJib2R5XCI7XG5jb25zdCBOQVYgPSBgLiR7UFJFRklYfS1uYXZgO1xuY29uc3QgTkFWX0xJTktTID0gYCR7TkFWfSBhYDtcbmNvbnN0IE5BVl9DT05UUk9MID0gYGJ1dHRvbi4ke1BSRUZJWH0tbmF2X19saW5rYDtcbmNvbnN0IE9QRU5FUlMgPSBgLiR7UFJFRklYfS1tZW51LWJ0bmA7XG5jb25zdCBDTE9TRV9CVVRUT04gPSBgLiR7UFJFRklYfS1uYXZfX2Nsb3NlYDtcbmNvbnN0IE9WRVJMQVkgPSBgLiR7UFJFRklYfS1vdmVybGF5YDtcbmNvbnN0IENMT1NFUlMgPSBgJHtDTE9TRV9CVVRUT059LCAuJHtQUkVGSVh9LW92ZXJsYXlgO1xuY29uc3QgVE9HR0xFUyA9IFtOQVYsIE9WRVJMQVldLmpvaW4oXCIsIFwiKTtcblxuY29uc3QgQUNUSVZFX0NMQVNTID0gXCJ1c2EtanMtbW9iaWxlLW5hdi0tYWN0aXZlXCI7XG5jb25zdCBWSVNJQkxFX0NMQVNTID0gXCJpcy12aXNpYmxlXCI7XG5cbmxldCBuYXZpZ2F0aW9uO1xubGV0IG5hdkFjdGl2ZTtcblxuY29uc3QgaXNBY3RpdmUgPSAoKSA9PiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhBQ1RJVkVfQ0xBU1MpO1xuXG5jb25zdCB0b2dnbGVOYXYgPSBhY3RpdmUgPT4ge1xuICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50O1xuICBjb25zdCBzYWZlQWN0aXZlID0gdHlwZW9mIGFjdGl2ZSA9PT0gXCJib29sZWFuXCIgPyBhY3RpdmUgOiAhaXNBY3RpdmUoKTtcblxuICBib2R5LmNsYXNzTGlzdC50b2dnbGUoQUNUSVZFX0NMQVNTLCBzYWZlQWN0aXZlKTtcblxuICBzZWxlY3QoVE9HR0xFUykuZm9yRWFjaChlbCA9PiBlbC5jbGFzc0xpc3QudG9nZ2xlKFZJU0lCTEVfQ0xBU1MsIHNhZmVBY3RpdmUpKTtcblxuICBuYXZpZ2F0aW9uLmZvY3VzVHJhcC51cGRhdGUoc2FmZUFjdGl2ZSk7XG5cbiAgY29uc3QgY2xvc2VCdXR0b24gPSBib2R5LnF1ZXJ5U2VsZWN0b3IoQ0xPU0VfQlVUVE9OKTtcbiAgY29uc3QgbWVudUJ1dHRvbiA9IGJvZHkucXVlcnlTZWxlY3RvcihPUEVORVJTKTtcblxuICBpZiAoc2FmZUFjdGl2ZSAmJiBjbG9zZUJ1dHRvbikge1xuICAgIC8vIFRoZSBtb2JpbGUgbmF2IHdhcyBqdXN0IGFjdGl2YXRlZCwgc28gZm9jdXMgb24gdGhlIGNsb3NlIGJ1dHRvbixcbiAgICAvLyB3aGljaCBpcyBqdXN0IGJlZm9yZSBhbGwgdGhlIG5hdiBlbGVtZW50cyBpbiB0aGUgdGFiIG9yZGVyLlxuICAgIGNsb3NlQnV0dG9uLmZvY3VzKCk7XG4gIH0gZWxzZSBpZiAoXG4gICAgIXNhZmVBY3RpdmUgJiZcbiAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBjbG9zZUJ1dHRvbiAmJlxuICAgIG1lbnVCdXR0b25cbiAgKSB7XG4gICAgLy8gVGhlIG1vYmlsZSBuYXYgd2FzIGp1c3QgZGVhY3RpdmF0ZWQsIGFuZCBmb2N1cyB3YXMgb24gdGhlIGNsb3NlXG4gICAgLy8gYnV0dG9uLCB3aGljaCBpcyBubyBsb25nZXIgdmlzaWJsZS4gV2UgZG9uJ3Qgd2FudCB0aGUgZm9jdXMgdG9cbiAgICAvLyBkaXNhcHBlYXIgaW50byB0aGUgdm9pZCwgc28gZm9jdXMgb24gdGhlIG1lbnUgYnV0dG9uIGlmIGl0J3NcbiAgICAvLyB2aXNpYmxlICh0aGlzIG1heSBoYXZlIGJlZW4gd2hhdCB0aGUgdXNlciB3YXMganVzdCBmb2N1c2VkIG9uLFxuICAgIC8vIGlmIHRoZXkgdHJpZ2dlcmVkIHRoZSBtb2JpbGUgbmF2IGJ5IG1pc3Rha2UpLlxuICAgIG1lbnVCdXR0b24uZm9jdXMoKTtcbiAgfVxuXG4gIHJldHVybiBzYWZlQWN0aXZlO1xufTtcblxuY29uc3QgcmVzaXplID0gKCkgPT4ge1xuICBjb25zdCBjbG9zZXIgPSBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoQ0xPU0VfQlVUVE9OKTtcblxuICBpZiAoaXNBY3RpdmUoKSAmJiBjbG9zZXIgJiYgY2xvc2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoID09PSAwKSB7XG4gICAgLy8gV2hlbiB0aGUgbW9iaWxlIG5hdiBpcyBhY3RpdmUsIGFuZCB0aGUgY2xvc2UgYm94IGlzbid0IHZpc2libGUsXG4gICAgLy8gd2Uga25vdyB0aGUgdXNlcidzIHZpZXdwb3J0IGhhcyBiZWVuIHJlc2l6ZWQgdG8gYmUgbGFyZ2VyLlxuICAgIC8vIExldCdzIG1ha2UgdGhlIHBhZ2Ugc3RhdGUgY29uc2lzdGVudCBieSBkZWFjdGl2YXRpbmcgdGhlIG1vYmlsZSBuYXYuXG4gICAgbmF2aWdhdGlvbi50b2dnbGVOYXYuY2FsbChjbG9zZXIsIGZhbHNlKTtcbiAgfVxufTtcblxuY29uc3Qgb25NZW51Q2xvc2UgPSAoKSA9PiBuYXZpZ2F0aW9uLnRvZ2dsZU5hdi5jYWxsKG5hdmlnYXRpb24sIGZhbHNlKTtcbmNvbnN0IGhpZGVBY3RpdmVOYXZEcm9wZG93biA9ICgpID0+IHtcbiAgdG9nZ2xlKG5hdkFjdGl2ZSwgZmFsc2UpO1xuICBuYXZBY3RpdmUgPSBudWxsO1xufTtcblxubmF2aWdhdGlvbiA9IGJlaGF2aW9yKFxuICB7XG4gICAgW0NMSUNLXToge1xuICAgICAgW05BVl9DT05UUk9MXSgpIHtcbiAgICAgICAgLy8gSWYgYW5vdGhlciBuYXYgaXMgb3BlbiwgY2xvc2UgaXRcbiAgICAgICAgaWYgKG5hdkFjdGl2ZSAmJiBuYXZBY3RpdmUgIT09IHRoaXMpIHtcbiAgICAgICAgICBoaWRlQWN0aXZlTmF2RHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSB0byB0aGUgbGFzdCBjbGlja2VkIG5hdiBsaW5rIGVsZW1lbnQsIHNvIHdlXG4gICAgICAgIC8vIGNhbiBoaWRlIHRoZSBkcm9wZG93biBpZiBhbm90aGVyIGVsZW1lbnQgb24gdGhlIHBhZ2UgaXMgY2xpY2tlZFxuICAgICAgICBpZiAobmF2QWN0aXZlKSB7XG4gICAgICAgICAgaGlkZUFjdGl2ZU5hdkRyb3Bkb3duKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmF2QWN0aXZlID0gdGhpcztcbiAgICAgICAgICB0b2dnbGUobmF2QWN0aXZlLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvIHRoaXMgc28gdGhlIGV2ZW50IGhhbmRsZXIgb24gdGhlIGJvZHkgZG9lc24ndCBmaXJlXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBbQk9EWV0oKSB7XG4gICAgICAgIGlmIChuYXZBY3RpdmUpIHtcbiAgICAgICAgICBoaWRlQWN0aXZlTmF2RHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtPUEVORVJTXTogdG9nZ2xlTmF2LFxuICAgICAgW0NMT1NFUlNdOiB0b2dnbGVOYXYsXG4gICAgICBbTkFWX0xJTktTXSgpIHtcbiAgICAgICAgLy8gQSBuYXZpZ2F0aW9uIGxpbmsgaGFzIGJlZW4gY2xpY2tlZCEgV2Ugd2FudCB0byBjb2xsYXBzZSBhbnlcbiAgICAgICAgLy8gaGllcmFyY2hpY2FsIG5hdmlnYXRpb24gVUkgaXQncyBhIHBhcnQgb2YsIHNvIHRoYXQgdGhlIHVzZXJcbiAgICAgICAgLy8gY2FuIGZvY3VzIG9uIHdoYXRldmVyIHRoZXkndmUganVzdCBzZWxlY3RlZC5cblxuICAgICAgICAvLyBTb21lIG5hdmlnYXRpb24gbGlua3MgYXJlIGluc2lkZSBhY2NvcmRpb25zOyB3aGVuIHRoZXkncmVcbiAgICAgICAgLy8gY2xpY2tlZCwgd2Ugd2FudCB0byBjb2xsYXBzZSB0aG9zZSBhY2NvcmRpb25zLlxuICAgICAgICBjb25zdCBhY2MgPSB0aGlzLmNsb3Nlc3QoYWNjb3JkaW9uLkFDQ09SRElPTik7XG5cbiAgICAgICAgaWYgKGFjYykge1xuICAgICAgICAgIGFjY29yZGlvbi5nZXRCdXR0b25zKGFjYykuZm9yRWFjaChidG4gPT4gYWNjb3JkaW9uLmhpZGUoYnRuKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgbW9iaWxlIG5hdmlnYXRpb24gbWVudSBpcyBhY3RpdmUsIHdlIHdhbnQgdG8gaGlkZSBpdC5cbiAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICBuYXZpZ2F0aW9uLnRvZ2dsZU5hdi5jYWxsKG5hdmlnYXRpb24sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGluaXQocm9vdCkge1xuICAgICAgY29uc3QgdHJhcENvbnRhaW5lciA9IHJvb3QucXVlcnlTZWxlY3RvcihOQVYpO1xuXG4gICAgICBpZiAodHJhcENvbnRhaW5lcikge1xuICAgICAgICBuYXZpZ2F0aW9uLmZvY3VzVHJhcCA9IEZvY3VzVHJhcCh0cmFwQ29udGFpbmVyLCB7XG4gICAgICAgICAgRXNjYXBlOiBvbk1lbnVDbG9zZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVzaXplKCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemUsIGZhbHNlKTtcbiAgICB9LFxuICAgIHRlYXJkb3duKCkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgcmVzaXplLCBmYWxzZSk7XG4gICAgICBuYXZBY3RpdmUgPSBmYWxzZTtcbiAgICB9LFxuICAgIGZvY3VzVHJhcDogbnVsbCxcbiAgICB0b2dnbGVOYXZcbiAgfVxuKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0aW9uO1xuIiwiY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKFwiLi4vdXRpbHMvYmVoYXZpb3JcIik7XG5jb25zdCB0b2dnbGVGb3JtSW5wdXQgPSByZXF1aXJlKFwiLi4vdXRpbHMvdG9nZ2xlLWZvcm0taW5wdXRcIik7XG5cbmNvbnN0IHsgQ0xJQ0sgfSA9IHJlcXVpcmUoXCIuLi9ldmVudHNcIik7XG5jb25zdCB7IHByZWZpeDogUFJFRklYIH0gPSByZXF1aXJlKFwiLi4vY29uZmlnXCIpO1xuXG5jb25zdCBMSU5LID0gYC4ke1BSRUZJWH0tc2hvdy1wYXNzd29yZCwgLiR7UFJFRklYfS1zaG93LW11bHRpcGFzc3dvcmRgO1xuXG5mdW5jdGlvbiB0b2dnbGUoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgdG9nZ2xlRm9ybUlucHV0KHRoaXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHtcbiAgW0NMSUNLXToge1xuICAgIFtMSU5LXTogdG9nZ2xlXG4gIH1cbn0pO1xuIiwiY29uc3QgaWdub3JlID0gcmVxdWlyZShcInJlY2VwdG9yL2lnbm9yZVwiKTtcbmNvbnN0IGJlaGF2aW9yID0gcmVxdWlyZShcIi4uL3V0aWxzL2JlaGF2aW9yXCIpO1xuY29uc3Qgc2VsZWN0ID0gcmVxdWlyZShcIi4uL3V0aWxzL3NlbGVjdFwiKTtcblxuY29uc3QgeyBDTElDSyB9ID0gcmVxdWlyZShcIi4uL2V2ZW50c1wiKTtcblxuY29uc3QgQlVUVE9OID0gXCIuanMtc2VhcmNoLWJ1dHRvblwiO1xuY29uc3QgRk9STSA9IFwiLmpzLXNlYXJjaC1mb3JtXCI7XG5jb25zdCBJTlBVVCA9IFwiW3R5cGU9c2VhcmNoXVwiO1xuY29uc3QgQ09OVEVYVCA9IFwiaGVhZGVyXCI7IC8vIFhYWFxuXG5sZXQgbGFzdEJ1dHRvbjtcblxuY29uc3QgZ2V0Rm9ybSA9IGJ1dHRvbiA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBidXR0b24uY2xvc2VzdChDT05URVhUKTtcbiAgcmV0dXJuIGNvbnRleHQgPyBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoRk9STSkgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEZPUk0pO1xufTtcblxuY29uc3QgdG9nZ2xlU2VhcmNoID0gKGJ1dHRvbiwgYWN0aXZlKSA9PiB7XG4gIGNvbnN0IGZvcm0gPSBnZXRGb3JtKGJ1dHRvbik7XG5cbiAgaWYgKCFmb3JtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyAke0ZPUk19IGZvdW5kIGZvciBzZWFyY2ggdG9nZ2xlIGluICR7Q09OVEVYVH0hYCk7XG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuICBidXR0b24uaGlkZGVuID0gYWN0aXZlO1xuICBmb3JtLmhpZGRlbiA9ICFhY3RpdmU7XG4gIC8qIGVzbGludC1lbmFibGUgKi9cblxuICBpZiAoIWFjdGl2ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGlucHV0ID0gZm9ybS5xdWVyeVNlbGVjdG9yKElOUFVUKTtcblxuICBpZiAoaW5wdXQpIHtcbiAgICBpbnB1dC5mb2N1cygpO1xuICB9XG4gIC8vIHdoZW4gdGhlIHVzZXIgY2xpY2tzIF9vdXRzaWRlXyBvZiB0aGUgZm9ybSB3L2lnbm9yZSgpOiBoaWRlIHRoZVxuICAvLyBzZWFyY2gsIHRoZW4gcmVtb3ZlIHRoZSBsaXN0ZW5lclxuICBjb25zdCBsaXN0ZW5lciA9IGlnbm9yZShmb3JtLCAoKSA9PiB7XG4gICAgaWYgKGxhc3RCdXR0b24pIHtcbiAgICAgIGhpZGVTZWFyY2guY2FsbChsYXN0QnV0dG9uKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIH1cblxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihDTElDSywgbGlzdGVuZXIpO1xuICB9KTtcblxuICAvLyBOb3JtYWxseSB3ZSB3b3VsZCBqdXN0IHJ1biB0aGlzIGNvZGUgd2l0aG91dCBhIHRpbWVvdXQsIGJ1dFxuICAvLyBJRTExIGFuZCBFZGdlIHdpbGwgYWN0dWFsbHkgY2FsbCB0aGUgbGlzdGVuZXIgKmltbWVkaWF0ZWx5KiBiZWNhdXNlXG4gIC8vIHRoZXkgYXJlIGN1cnJlbnRseSBoYW5kbGluZyB0aGlzIGV4YWN0IHR5cGUgb2YgZXZlbnQsIHNvIHdlJ2xsXG4gIC8vIG1ha2Ugc3VyZSB0aGUgYnJvd3NlciBpcyBkb25lIGhhbmRsaW5nIHRoZSBjdXJyZW50IGNsaWNrIGV2ZW50LFxuICAvLyBpZiBhbnksIGJlZm9yZSB3ZSBhdHRhY2ggdGhlIGxpc3RlbmVyLlxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoQ0xJQ0ssIGxpc3RlbmVyKTtcbiAgfSwgMCk7XG59O1xuXG5mdW5jdGlvbiBzaG93U2VhcmNoKCkge1xuICB0b2dnbGVTZWFyY2godGhpcywgdHJ1ZSk7XG4gIGxhc3RCdXR0b24gPSB0aGlzO1xufVxuXG5mdW5jdGlvbiBoaWRlU2VhcmNoKCkge1xuICB0b2dnbGVTZWFyY2godGhpcywgZmFsc2UpO1xuICBsYXN0QnV0dG9uID0gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBzZWFyY2ggPSBiZWhhdmlvcihcbiAge1xuICAgIFtDTElDS106IHtcbiAgICAgIFtCVVRUT05dOiBzaG93U2VhcmNoXG4gICAgfVxuICB9LFxuICB7XG4gICAgaW5pdCh0YXJnZXQpIHtcbiAgICAgIHNlbGVjdChCVVRUT04sIHRhcmdldCkuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgICB0b2dnbGVTZWFyY2goYnV0dG9uLCBmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHRlYXJkb3duKCkge1xuICAgICAgLy8gZm9yZ2V0IHRoZSBsYXN0IGJ1dHRvbiBjbGlja2VkXG4gICAgICBsYXN0QnV0dG9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZWFyY2g7XG4iLCJjb25zdCBvbmNlID0gcmVxdWlyZShcInJlY2VwdG9yL29uY2VcIik7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoXCIuLi91dGlscy9iZWhhdmlvclwiKTtcbmNvbnN0IHsgQ0xJQ0sgfSA9IHJlcXVpcmUoXCIuLi9ldmVudHNcIik7XG5jb25zdCB7IHByZWZpeDogUFJFRklYIH0gPSByZXF1aXJlKFwiLi4vY29uZmlnXCIpO1xuXG5jb25zdCBMSU5LID0gYC4ke1BSRUZJWH0tc2tpcG5hdltocmVmXj1cIiNcIl0sIC4ke1BSRUZJWH0tZm9vdGVyX19yZXR1cm4tdG8tdG9wIFtocmVmXj1cIiNcIl1gO1xuY29uc3QgTUFJTkNPTlRFTlQgPSBcIm1haW4tY29udGVudFwiO1xuXG5mdW5jdGlvbiBzZXRUYWJpbmRleCgpIHtcbiAgLy8gTkI6IHdlIGtub3cgYmVjYXVzZSBvZiB0aGUgc2VsZWN0b3Igd2UncmUgZGVsZWdhdGluZyB0byBiZWxvdyB0aGF0IHRoZVxuICAvLyBocmVmIGFscmVhZHkgYmVnaW5zIHdpdGggJyMnXG4gIGNvbnN0IGlkID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpO1xuICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICBpZCA9PT0gXCIjXCIgPyBNQUlOQ09OVEVOVCA6IGlkLnNsaWNlKDEpXG4gICk7XG5cbiAgaWYgKHRhcmdldCkge1xuICAgIHRhcmdldC5zdHlsZS5vdXRsaW5lID0gXCIwXCI7XG4gICAgdGFyZ2V0LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIDApO1xuICAgIHRhcmdldC5mb2N1cygpO1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJibHVyXCIsXG4gICAgICBvbmNlKCgpID0+IHtcbiAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIC0xKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aHJvdyBhbiBlcnJvcj9cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHtcbiAgW0NMSUNLXToge1xuICAgIFtMSU5LXTogc2V0VGFiaW5kZXhcbiAgfVxufSk7XG4iLCJjb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoXCIuLi91dGlscy9iZWhhdmlvclwiKTtcbmNvbnN0IHZhbGlkYXRlID0gcmVxdWlyZShcIi4uL3V0aWxzL3ZhbGlkYXRlLWlucHV0XCIpO1xuXG5mdW5jdGlvbiBjaGFuZ2UoKSB7XG4gIHZhbGlkYXRlKHRoaXMpO1xufVxuXG5jb25zdCB2YWxpZGF0b3IgPSBiZWhhdmlvcih7XG4gIFwia2V5dXAgY2hhbmdlXCI6IHtcbiAgICBcImlucHV0W2RhdGEtdmFsaWRhdGlvbi1lbGVtZW50XVwiOiBjaGFuZ2VcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRhdG9yO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIHByZWZpeDogXCJ1c2FcIlxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBUaGlzIHVzZWQgdG8gYmUgY29uZGl0aW9uYWxseSBkZXBlbmRlbnQgb24gd2hldGhlciB0aGVcbiAgLy8gYnJvd3NlciBzdXBwb3J0ZWQgdG91Y2ggZXZlbnRzOyBpZiBpdCBkaWQsIGBDTElDS2Agd2FzIHNldCB0b1xuICAvLyBgdG91Y2hzdGFydGAuICBIb3dldmVyLCB0aGlzIGhhZCBkb3duc2lkZXM6XG4gIC8vXG4gIC8vICogSXQgcHJlLWVtcHRlZCBtb2JpbGUgYnJvd3NlcnMnIGRlZmF1bHQgYmVoYXZpb3Igb2YgZGV0ZWN0aW5nXG4gIC8vICAgd2hldGhlciBhIHRvdWNoIHR1cm5lZCBpbnRvIGEgc2Nyb2xsLCB0aGVyZWJ5IHByZXZlbnRpbmdcbiAgLy8gICB1c2VycyBmcm9tIHVzaW5nIHNvbWUgb2Ygb3VyIGNvbXBvbmVudHMgYXMgc2Nyb2xsIHN1cmZhY2VzLlxuICAvL1xuICAvLyAqIFNvbWUgZGV2aWNlcywgc3VjaCBhcyB0aGUgTWljcm9zb2Z0IFN1cmZhY2UgUHJvLCBzdXBwb3J0ICpib3RoKlxuICAvLyAgIHRvdWNoIGFuZCBjbGlja3MuIFRoaXMgbWVhbnQgdGhlIGNvbmRpdGlvbmFsIGVmZmVjdGl2ZWx5IGRyb3BwZWRcbiAgLy8gICBzdXBwb3J0IGZvciB0aGUgdXNlcidzIG1vdXNlLCBmcnVzdHJhdGluZyB1c2VycyB3aG8gcHJlZmVycmVkXG4gIC8vICAgaXQgb24gdGhvc2Ugc3lzdGVtcy5cbiAgQ0xJQ0s6IFwiY2xpY2tcIlxufTtcbiIsImNvbnN0IGVscHJvdG8gPSB3aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlO1xuY29uc3QgSElEREVOID0gXCJoaWRkZW5cIjtcblxuaWYgKCEoSElEREVOIGluIGVscHJvdG8pKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbHByb3RvLCBISURERU4sIHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoSElEREVOKTtcbiAgICB9LFxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKEhJRERFTiwgXCJcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShISURERU4pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4iLCIvLyBwb2x5ZmlsbHMgSFRNTEVsZW1lbnQucHJvdG90eXBlLmNsYXNzTGlzdCBhbmQgRE9NVG9rZW5MaXN0XG5yZXF1aXJlKFwiY2xhc3NsaXN0LXBvbHlmaWxsXCIpO1xuLy8gcG9seWZpbGxzIEhUTUxFbGVtZW50LnByb3RvdHlwZS5oaWRkZW5cbnJlcXVpcmUoXCIuL2VsZW1lbnQtaGlkZGVuXCIpO1xuIiwiY29uc3QgZG9tcmVhZHkgPSByZXF1aXJlKFwiZG9tcmVhZHlcIik7XG5cbi8qKlxuICogVGhlICdwb2x5ZmlsbHMnIGRlZmluZSBrZXkgRUNNQVNjcmlwdCA1IG1ldGhvZHMgdGhhdCBtYXkgYmUgbWlzc2luZyBmcm9tXG4gKiBvbGRlciBicm93c2Vycywgc28gbXVzdCBiZSBsb2FkZWQgZmlyc3QuXG4gKi9cbnJlcXVpcmUoXCIuL3BvbHlmaWxsc1wiKTtcblxuY29uc3QgdXN3ZHMgPSByZXF1aXJlKFwiLi9jb25maWdcIik7XG5cbmNvbnN0IGNvbXBvbmVudHMgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzXCIpO1xuXG51c3dkcy5jb21wb25lbnRzID0gY29tcG9uZW50cztcblxuZG9tcmVhZHkoKCkgPT4ge1xuICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5ib2R5O1xuICBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgY29uc3QgYmVoYXZpb3IgPSBjb21wb25lbnRzW2tleV07XG4gICAgYmVoYXZpb3Iub24odGFyZ2V0KTtcbiAgfSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB1c3dkcztcbiIsIm1vZHVsZS5leHBvcnRzID0gKGh0bWxEb2N1bWVudCA9IGRvY3VtZW50KSA9PiBodG1sRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiIsImNvbnN0IGFzc2lnbiA9IHJlcXVpcmUoXCJvYmplY3QtYXNzaWduXCIpO1xuY29uc3QgQmVoYXZpb3IgPSByZXF1aXJlKFwicmVjZXB0b3IvYmVoYXZpb3JcIik7XG5cbi8qKlxuICogQG5hbWUgc2VxdWVuY2VcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IHNlcSBhbiBhcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm4geyBjbG9zdXJlIH0gY2FsbEhvb2tzXG4gKi9cbi8vIFdlIHVzZSBhIG5hbWVkIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB3ZSB3YW50IGl0IHRvIGluaGVyaXQgaXRzIGxleGljYWwgc2NvcGVcbi8vIGZyb20gdGhlIGJlaGF2aW9yIHByb3BzIG9iamVjdCwgbm90IGZyb20gdGhlIG1vZHVsZVxuY29uc3Qgc2VxdWVuY2UgPSAoLi4uc2VxKSA9PlxuICBmdW5jdGlvbiBjYWxsSG9va3ModGFyZ2V0ID0gZG9jdW1lbnQuYm9keSkge1xuICAgIHNlcS5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gICAgICBpZiAodHlwZW9mIHRoaXNbbWV0aG9kXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXNbbWV0aG9kXS5jYWxsKHRoaXMsIHRhcmdldCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogQG5hbWUgYmVoYXZpb3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudHNcbiAqIEBwYXJhbSB7b2JqZWN0P30gcHJvcHNcbiAqIEByZXR1cm4ge3JlY2VwdG9yLmJlaGF2aW9yfVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IChldmVudHMsIHByb3BzKSA9PlxuICBCZWhhdmlvcihcbiAgICBldmVudHMsXG4gICAgYXNzaWduKFxuICAgICAge1xuICAgICAgICBvbjogc2VxdWVuY2UoXCJpbml0XCIsIFwiYWRkXCIpLFxuICAgICAgICBvZmY6IHNlcXVlbmNlKFwidGVhcmRvd25cIiwgXCJyZW1vdmVcIilcbiAgICAgIH0sXG4gICAgICBwcm9wc1xuICAgIClcbiAgKTtcbiIsImNvbnN0IGFzc2lnbiA9IHJlcXVpcmUoXCJvYmplY3QtYXNzaWduXCIpO1xuY29uc3QgeyBrZXltYXAgfSA9IHJlcXVpcmUoXCJyZWNlcHRvclwiKTtcbmNvbnN0IGJlaGF2aW9yID0gcmVxdWlyZShcIi4vYmVoYXZpb3JcIik7XG5jb25zdCBzZWxlY3QgPSByZXF1aXJlKFwiLi9zZWxlY3RcIik7XG5jb25zdCBhY3RpdmVFbGVtZW50ID0gcmVxdWlyZShcIi4vYWN0aXZlLWVsZW1lbnRcIik7XG5cbmNvbnN0IEZPQ1VTQUJMRSA9XG4gICdhW2hyZWZdLCBhcmVhW2hyZWZdLCBpbnB1dDpub3QoW2Rpc2FibGVkXSksIHNlbGVjdDpub3QoW2Rpc2FibGVkXSksIHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSwgYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgaWZyYW1lLCBvYmplY3QsIGVtYmVkLCBbdGFiaW5kZXg9XCIwXCJdLCBbY29udGVudGVkaXRhYmxlXSc7XG5cbmNvbnN0IHRhYkhhbmRsZXIgPSBjb250ZXh0ID0+IHtcbiAgY29uc3QgZm9jdXNhYmxlRWxlbWVudHMgPSBzZWxlY3QoRk9DVVNBQkxFLCBjb250ZXh0KTtcbiAgY29uc3QgZmlyc3RUYWJTdG9wID0gZm9jdXNhYmxlRWxlbWVudHNbMF07XG4gIGNvbnN0IGxhc3RUYWJTdG9wID0gZm9jdXNhYmxlRWxlbWVudHNbZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMV07XG5cbiAgLy8gU3BlY2lhbCBydWxlcyBmb3Igd2hlbiB0aGUgdXNlciBpcyB0YWJiaW5nIGZvcndhcmQgZnJvbSB0aGUgbGFzdCBmb2N1c2FibGUgZWxlbWVudCxcbiAgLy8gb3Igd2hlbiB0YWJiaW5nIGJhY2t3YXJkcyBmcm9tIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudFxuICBmdW5jdGlvbiB0YWJBaGVhZChldmVudCkge1xuICAgIGlmIChhY3RpdmVFbGVtZW50KCkgPT09IGxhc3RUYWJTdG9wKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZmlyc3RUYWJTdG9wLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdGFiQmFjayhldmVudCkge1xuICAgIGlmIChhY3RpdmVFbGVtZW50KCkgPT09IGZpcnN0VGFiU3RvcCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGxhc3RUYWJTdG9wLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaXJzdFRhYlN0b3AsXG4gICAgbGFzdFRhYlN0b3AsXG4gICAgdGFiQWhlYWQsXG4gICAgdGFiQmFja1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAoY29udGV4dCwgYWRkaXRpb25hbEtleUJpbmRpbmdzID0ge30pID0+IHtcbiAgY29uc3QgdGFiRXZlbnRIYW5kbGVyID0gdGFiSGFuZGxlcihjb250ZXh0KTtcblxuICAvLyAgVE9ETzogSW4gdGhlIGZ1dHVyZSwgbG9vcCBvdmVyIGFkZGl0aW9uYWwga2V5YmluZGluZ3MgYW5kIHBhc3MgYW4gYXJyYXlcbiAgLy8gb2YgZnVuY3Rpb25zLCBpZiBuZWNlc3NhcnksIHRvIHRoZSBtYXAga2V5cy4gVGhlbiBwZW9wbGUgaW1wbGVtZW50aW5nXG4gIC8vIHRoZSBmb2N1cyB0cmFwIGNvdWxkIHBhc3MgY2FsbGJhY2tzIHRvIGZpcmUgd2hlbiB0YWJiaW5nXG4gIGNvbnN0IGtleU1hcHBpbmdzID0ga2V5bWFwKFxuICAgIGFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgVGFiOiB0YWJFdmVudEhhbmRsZXIudGFiQWhlYWQsXG4gICAgICAgIFwiU2hpZnQrVGFiXCI6IHRhYkV2ZW50SGFuZGxlci50YWJCYWNrXG4gICAgICB9LFxuICAgICAgYWRkaXRpb25hbEtleUJpbmRpbmdzXG4gICAgKVxuICApO1xuXG4gIGNvbnN0IGZvY3VzVHJhcCA9IGJlaGF2aW9yKFxuICAgIHtcbiAgICAgIGtleWRvd246IGtleU1hcHBpbmdzXG4gICAgfSxcbiAgICB7XG4gICAgICBpbml0KCkge1xuICAgICAgICAvLyBUT0RPOiBpcyB0aGlzIGRlc2lyZWFibGUgYmVoYXZpb3I/IFNob3VsZCB0aGUgdHJhcCBhbHdheXMgZG8gdGhpcyBieSBkZWZhdWx0IG9yIHNob3VsZFxuICAgICAgICAvLyB0aGUgY29tcG9uZW50IGdldHRpbmcgZGVjb3JhdGVkIGhhbmRsZSB0aGlzP1xuICAgICAgICB0YWJFdmVudEhhbmRsZXIuZmlyc3RUYWJTdG9wLmZvY3VzKCk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlKGlzQWN0aXZlKSB7XG4gICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgIHRoaXMub24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9mZigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIHJldHVybiBmb2N1c1RyYXA7XG59O1xuIiwiLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzc1NTc0MzNcbmZ1bmN0aW9uIGlzRWxlbWVudEluVmlld3BvcnQoXG4gIGVsLFxuICB3aW4gPSB3aW5kb3csXG4gIGRvY0VsID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4pIHtcbiAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIHJldHVybiAoXG4gICAgcmVjdC50b3AgPj0gMCAmJlxuICAgIHJlY3QubGVmdCA+PSAwICYmXG4gICAgcmVjdC5ib3R0b20gPD0gKHdpbi5pbm5lckhlaWdodCB8fCBkb2NFbC5jbGllbnRIZWlnaHQpICYmXG4gICAgcmVjdC5yaWdodCA8PSAod2luLmlubmVyV2lkdGggfHwgZG9jRWwuY2xpZW50V2lkdGgpXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFbGVtZW50SW5WaWV3cG9ydDtcbiIsIi8qKlxuICogQG5hbWUgaXNFbGVtZW50XG4gKiBAZGVzYyByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBhcmd1bWVudCBpcyBhIERPTSBlbGVtZW50LlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5jb25zdCBpc0VsZW1lbnQgPSB2YWx1ZSA9PlxuICB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUubm9kZVR5cGUgPT09IDE7XG5cbi8qKlxuICogQG5hbWUgc2VsZWN0XG4gKiBAZGVzYyBzZWxlY3RzIGVsZW1lbnRzIGZyb20gdGhlIERPTSBieSBjbGFzcyBzZWxlY3RvciBvciBJRCBzZWxlY3Rvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFRoZSBzZWxlY3RvciB0byB0cmF2ZXJzZSB0aGUgRE9NIHdpdGguXG4gKiBAcGFyYW0ge0RvY3VtZW50fEhUTUxFbGVtZW50P30gY29udGV4dCAtIFRoZSBjb250ZXh0IHRvIHRyYXZlcnNlIHRoZSBET01cbiAqICAgaW4uIElmIG5vdCBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIGRvY3VtZW50LlxuICogQHJldHVybiB7SFRNTEVsZW1lbnRbXX0gLSBBbiBhcnJheSBvZiBET00gbm9kZXMgb3IgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKHNlbGVjdG9yLCBjb250ZXh0KSA9PiB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAoIWNvbnRleHQgfHwgIWlzRWxlbWVudChjb250ZXh0KSkge1xuICAgIGNvbnRleHQgPSB3aW5kb3cuZG9jdW1lbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgfVxuXG4gIGNvbnN0IHNlbGVjdGlvbiA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChzZWxlY3Rpb24pO1xufTtcbiIsIi8qKlxuICogRmxpcHMgZ2l2ZW4gSU5QVVQgZWxlbWVudHMgYmV0d2VlbiBtYXNrZWQgKGhpZGluZyB0aGUgZmllbGQgdmFsdWUpIGFuZCB1bm1hc2tlZFxuICogQHBhcmFtIHtBcnJheS5IVE1MRWxlbWVudH0gZmllbGRzIC0gQW4gYXJyYXkgb2YgSU5QVVQgZWxlbWVudHNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWFzayAtIFdoZXRoZXIgdGhlIG1hc2sgc2hvdWxkIGJlIGFwcGxpZWQsIGhpZGluZyB0aGUgZmllbGQgdmFsdWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSAoZmllbGQsIG1hc2spID0+IHtcbiAgZmllbGQuc2V0QXR0cmlidXRlKFwiYXV0b2NhcGl0YWxpemVcIiwgXCJvZmZcIik7XG4gIGZpZWxkLnNldEF0dHJpYnV0ZShcImF1dG9jb3JyZWN0XCIsIFwib2ZmXCIpO1xuICBmaWVsZC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIG1hc2sgPyBcInBhc3N3b3JkXCIgOiBcInRleHRcIik7XG59O1xuIiwiY29uc3QgcmVzb2x2ZUlkUmVmcyA9IHJlcXVpcmUoXCJyZXNvbHZlLWlkLXJlZnNcIik7XG5jb25zdCB0b2dnbGVGaWVsZE1hc2sgPSByZXF1aXJlKFwiLi90b2dnbGUtZmllbGQtbWFza1wiKTtcblxuY29uc3QgQ09OVFJPTFMgPSBcImFyaWEtY29udHJvbHNcIjtcbmNvbnN0IFBSRVNTRUQgPSBcImFyaWEtcHJlc3NlZFwiO1xuY29uc3QgU0hPV19BVFRSID0gXCJkYXRhLXNob3ctdGV4dFwiO1xuY29uc3QgSElERV9BVFRSID0gXCJkYXRhLWhpZGUtdGV4dFwiO1xuXG4vKipcbiAqIFJlcGxhY2UgdGhlIHdvcmQgXCJTaG93XCIgKG9yIFwic2hvd1wiKSB3aXRoIFwiSGlkZVwiIChvciBcImhpZGVcIikgaW4gYSBzdHJpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2hvd1RleHRcbiAqIEByZXR1cm4ge3N0cm9uZ30gaGlkZVRleHRcbiAqL1xuY29uc3QgZ2V0SGlkZVRleHQgPSBzaG93VGV4dCA9PlxuICBzaG93VGV4dC5yZXBsYWNlKC9cXGJTaG93XFxiL2ksIHNob3cgPT4gYCR7c2hvd1swXSA9PT0gXCJTXCIgPyBcIkhcIiA6IFwiaFwifWlkZWApO1xuXG4vKipcbiAqIENvbXBvbmVudCB0aGF0IGRlY29yYXRlcyBhbiBIVE1MIGVsZW1lbnQgd2l0aCB0aGUgYWJpbGl0eSB0byB0b2dnbGUgdGhlXG4gKiBtYXNrZWQgc3RhdGUgb2YgYW4gaW5wdXQgZmllbGQgKGxpa2UgYSBwYXNzd29yZCkgd2hlbiBjbGlja2VkLlxuICogVGhlIGlkcyBvZiB0aGUgZmllbGRzIHRvIGJlIG1hc2tlZCB3aWxsIGJlIHB1bGxlZCBkaXJlY3RseSBmcm9tIHRoZSBidXR0b24nc1xuICogYGFyaWEtY29udHJvbHNgIGF0dHJpYnV0ZS5cbiAqXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWwgICAgUGFyZW50IGVsZW1lbnQgY29udGFpbmluZyB0aGUgZmllbGRzIHRvIGJlIG1hc2tlZFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBlbCA9PiB7XG4gIC8vIHRoaXMgaXMgdGhlICp0YXJnZXQqIHN0YXRlOlxuICAvLyAqIGlmIHRoZSBlbGVtZW50IGhhcyB0aGUgYXR0ciBhbmQgaXQncyAhPT0gXCJ0cnVlXCIsIHByZXNzZWQgaXMgdHJ1ZVxuICAvLyAqIG90aGVyd2lzZSwgcHJlc3NlZCBpcyBmYWxzZVxuICBjb25zdCBwcmVzc2VkID1cbiAgICBlbC5oYXNBdHRyaWJ1dGUoUFJFU1NFRCkgJiYgZWwuZ2V0QXR0cmlidXRlKFBSRVNTRUQpICE9PSBcInRydWVcIjtcblxuICBjb25zdCBmaWVsZHMgPSByZXNvbHZlSWRSZWZzKGVsLmdldEF0dHJpYnV0ZShDT05UUk9MUykpO1xuICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB0b2dnbGVGaWVsZE1hc2soZmllbGQsIHByZXNzZWQpKTtcblxuICBpZiAoIWVsLmhhc0F0dHJpYnV0ZShTSE9XX0FUVFIpKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKFNIT1dfQVRUUiwgZWwudGV4dENvbnRlbnQpO1xuICB9XG5cbiAgY29uc3Qgc2hvd1RleHQgPSBlbC5nZXRBdHRyaWJ1dGUoU0hPV19BVFRSKTtcbiAgY29uc3QgaGlkZVRleHQgPSBlbC5nZXRBdHRyaWJ1dGUoSElERV9BVFRSKSB8fCBnZXRIaWRlVGV4dChzaG93VGV4dCk7XG5cbiAgZWwudGV4dENvbnRlbnQgPSBwcmVzc2VkID8gc2hvd1RleHQgOiBoaWRlVGV4dDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBlbC5zZXRBdHRyaWJ1dGUoUFJFU1NFRCwgcHJlc3NlZCk7XG4gIHJldHVybiBwcmVzc2VkO1xufTtcbiIsImNvbnN0IEVYUEFOREVEID0gXCJhcmlhLWV4cGFuZGVkXCI7XG5jb25zdCBDT05UUk9MUyA9IFwiYXJpYS1jb250cm9sc1wiO1xuY29uc3QgSElEREVOID0gXCJoaWRkZW5cIjtcblxubW9kdWxlLmV4cG9ydHMgPSAoYnV0dG9uLCBleHBhbmRlZCkgPT4ge1xuICBsZXQgc2FmZUV4cGFuZGVkID0gZXhwYW5kZWQ7XG5cbiAgaWYgKHR5cGVvZiBzYWZlRXhwYW5kZWQgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgc2FmZUV4cGFuZGVkID0gYnV0dG9uLmdldEF0dHJpYnV0ZShFWFBBTkRFRCkgPT09IFwiZmFsc2VcIjtcbiAgfVxuXG4gIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoRVhQQU5ERUQsIHNhZmVFeHBhbmRlZCk7XG5cbiAgY29uc3QgaWQgPSBidXR0b24uZ2V0QXR0cmlidXRlKENPTlRST0xTKTtcbiAgY29uc3QgY29udHJvbHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghY29udHJvbHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHRvZ2dsZSB0YXJnZXQgZm91bmQgd2l0aCBpZDogXCIke2lkfVwiYCk7XG4gIH1cblxuICBpZiAoc2FmZUV4cGFuZGVkKSB7XG4gICAgY29udHJvbHMucmVtb3ZlQXR0cmlidXRlKEhJRERFTik7XG4gIH0gZWxzZSB7XG4gICAgY29udHJvbHMuc2V0QXR0cmlidXRlKEhJRERFTiwgXCJcIik7XG4gIH1cblxuICByZXR1cm4gc2FmZUV4cGFuZGVkO1xufTtcbiIsImNvbnN0IGRhdGFzZXQgPSByZXF1aXJlKFwiZWxlbS1kYXRhc2V0XCIpO1xuXG5jb25zdCB7IHByZWZpeDogUFJFRklYIH0gPSByZXF1aXJlKFwiLi4vY29uZmlnXCIpO1xuXG5jb25zdCBDSEVDS0VEID0gXCJhcmlhLWNoZWNrZWRcIjtcbmNvbnN0IENIRUNLRURfQ0xBU1MgPSBgJHtQUkVGSVh9LWNoZWNrbGlzdF9faXRlbS0tY2hlY2tlZGA7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdmFsaWRhdGUoZWwpIHtcbiAgY29uc3QgZGF0YSA9IGRhdGFzZXQoZWwpO1xuICBjb25zdCBpZCA9IGRhdGEudmFsaWRhdGlvbkVsZW1lbnQ7XG4gIGNvbnN0IGNoZWNrTGlzdCA9XG4gICAgaWQuY2hhckF0KDApID09PSBcIiNcIlxuICAgICAgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGlkKVxuICAgICAgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cbiAgaWYgKCFjaGVja0xpc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHZhbGlkYXRpb24gZWxlbWVudCBmb3VuZCB3aXRoIGlkOiBcIiR7aWR9XCJgKTtcbiAgfVxuXG4gIE9iamVjdC5lbnRyaWVzKGRhdGEpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcInZhbGlkYXRlXCIpKSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JOYW1lID0ga2V5LnN1YnN0cihcInZhbGlkYXRlXCIubGVuZ3RoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdmFsaWRhdG9yUGF0dGVybiA9IG5ldyBSZWdFeHAodmFsdWUpO1xuICAgICAgY29uc3QgdmFsaWRhdG9yU2VsZWN0b3IgPSBgW2RhdGEtdmFsaWRhdG9yPVwiJHt2YWxpZGF0b3JOYW1lfVwiXWA7XG4gICAgICBjb25zdCB2YWxpZGF0b3JDaGVja2JveCA9IGNoZWNrTGlzdC5xdWVyeVNlbGVjdG9yKHZhbGlkYXRvclNlbGVjdG9yKTtcblxuICAgICAgaWYgKCF2YWxpZGF0b3JDaGVja2JveCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHZhbGlkYXRvciBjaGVja2JveCBmb3VuZCBmb3I6IFwiJHt2YWxpZGF0b3JOYW1lfVwiYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoZWNrZWQgPSB2YWxpZGF0b3JQYXR0ZXJuLnRlc3QoZWwudmFsdWUpO1xuICAgICAgdmFsaWRhdG9yQ2hlY2tib3guY2xhc3NMaXN0LnRvZ2dsZShDSEVDS0VEX0NMQVNTLCBjaGVja2VkKTtcbiAgICAgIHZhbGlkYXRvckNoZWNrYm94LnNldEF0dHJpYnV0ZShDSEVDS0VELCBjaGVja2VkKTtcbiAgICB9XG4gIH0pO1xufTtcbiJdfQ==
|