From 048c7919b0175c79baca1a418851653864c5114f Mon Sep 17 00:00:00 2001 From: eduardo Date: Sun, 12 Feb 2017 16:56:15 +0000 Subject: [PATCH] latest from edu home --- composer.json | 2 - composer.lock | 48 +- docs/demo/about-us-1024x533.jpg | Bin 0 -> 40313 bytes docs/demo/about-us-150x150.jpg | Bin 0 -> 4635 bytes docs/demo/about-us-272x182.jpg | Bin 0 -> 7322 bytes docs/demo/about-us-300x156.jpg | Bin 0 -> 7228 bytes docs/demo/about-us-768x400.jpg | Bin 0 -> 25979 bytes docs/demo/about-us.jpg | Bin 0 -> 40791 bytes docs/demo/masterswp.wordpress.2017-02-12.xml | 5635 +++++++++++++++++ docs/demo/mstile-144x144.png | Bin 0 -> 8040 bytes .../demo/oe-brixton-hands-stide1-1024x533.jpg | Bin 0 -> 97114 bytes docs/demo/oe-brixton-hands-stide1-150x150.jpg | Bin 0 -> 7887 bytes docs/demo/oe-brixton-hands-stide1-272x182.jpg | Bin 0 -> 14281 bytes docs/demo/oe-brixton-hands-stide1-300x156.jpg | Bin 0 -> 13404 bytes docs/demo/oe-brixton-hands-stide1-768x400.jpg | Bin 0 -> 59769 bytes docs/demo/oe-brixton-hands-stide1.jpg | Bin 0 -> 117131 bytes ...ecommerce-website-design-london-150x90.png | Bin 0 -> 1587 bytes ...ecommerce-website-design-london-272x90.png | Bin 0 -> 2317 bytes ...ecommerce-website-design-london-300x72.png | Bin 0 -> 9679 bytes .../open-ecommerce-website-design-london.png | Bin 0 -> 3008 bytes web/app/themes/oe-brixton/.babelrc | 0 web/app/themes/oe-brixton/.bowerrc | 0 web/app/themes/oe-brixton/.gitignore | 5 +- web/app/themes/oe-brixton/.travis.yml | 8 +- web/app/themes/oe-brixton/404.php | 0 web/app/themes/oe-brixton/CHANGELOG.md | 278 +- web/app/themes/oe-brixton/archive.php | 9 +- .../oe-brixton/assets/fonts/FontAwesome.otf | Bin .../assets/fonts/fontawesome-webfont.eot | Bin .../assets/fonts/fontawesome-webfont.svg | 0 .../assets/fonts/fontawesome-webfont.ttf | Bin .../assets/fonts/fontawesome-webfont.woff | Bin .../assets/fonts/fontawesome-webfont.woff2 | Bin .../assets/images/demo/customizable.svg | 54 - .../demo/hero-bg-foundation-6-large.svg | 1321 ---- .../demo/hero-bg-foundation-6-small.svg | 1309 ---- .../assets/images/demo/professional.svg | 139 - .../assets/images/demo/responsive.svg | 75 - .../assets/images/demo/semantic.svg | 47 - .../images/icons/android-chrome-144x144.png | Bin 8790 -> 8021 bytes .../images/icons/android-chrome-192x192.png | Bin 10720 -> 10744 bytes .../images/icons/android-chrome-36x36.png | Bin 1905 -> 1908 bytes .../images/icons/android-chrome-48x48.png | Bin 2630 -> 2647 bytes .../images/icons/android-chrome-72x72.png | Bin 4082 -> 4036 bytes .../images/icons/android-chrome-96x96.png | Bin 5676 -> 5405 bytes .../images/icons/apple-touch-icon-114x114.png | Bin 6751 -> 6464 bytes .../images/icons/apple-touch-icon-120x120.png | Bin 7145 -> 6679 bytes .../images/icons/apple-touch-icon-144x144.png | Bin 8790 -> 8021 bytes .../images/icons/apple-touch-icon-152x152.png | Bin 9297 -> 8546 bytes .../images/icons/apple-touch-icon-180x180.png | Bin 11537 -> 10020 bytes .../images/icons/apple-touch-icon-57x57.png | Bin 3143 -> 3148 bytes .../images/icons/apple-touch-icon-60x60.png | Bin 3334 -> 3289 bytes .../images/icons/apple-touch-icon-72x72.png | Bin 4082 -> 4036 bytes .../images/icons/apple-touch-icon-76x76.png | Bin 4374 -> 4319 bytes .../icons/apple-touch-icon-precomposed.png | Bin 11497 -> 10095 bytes .../assets/images/icons/apple-touch-icon.png | Bin 11537 -> 10020 bytes .../assets/images/icons/favicon-16x16.png | Bin 1106 -> 1144 bytes .../assets/images/icons/favicon-32x32.png | Bin 1662 -> 1693 bytes .../assets/images/icons/favicon-96x96.png | Bin 5676 -> 5405 bytes .../assets/images/icons/favicon.ico | Bin 15086 -> 15086 bytes .../assets/images/icons/manifest.json | 2 +- .../assets/images/icons/mstile-144x144.png | Bin 8769 -> 8040 bytes .../assets/images/icons/mstile-150x150.png | Bin 8266 -> 7837 bytes .../assets/images/icons/mstile-310x150.png | Bin 8954 -> 8501 bytes .../assets/images/icons/mstile-310x310.png | Bin 12185 -> 16997 bytes .../assets/images/icons/mstile-70x70.png | Bin 5708 -> 5553 bytes .../assets/images/icons/safari-pinned-tab.svg | 42 +- .../open-ecommerce-website-design-london.png | Bin .../logos/powered-by-open-ecommerce-org.png | Bin .../assets/javascript/custom/flex-video.js | 0 .../javascript/custom/init-foundation.js | 0 .../assets/javascript/custom/joyride-demo.js | 0 .../assets/javascript/custom/offCanvas.js | 0 .../assets/javascript/custom/preloader.js | 0 .../javascript/custom/responsive-video.js | 8 + .../assets/javascript/custom/stickyfooter.js | 0 .../assets/javascript/foundation.js | 2498 +++++--- .../assets/scss/components/_buttons.scss | 13 - .../assets/scss/components/_cards.scss | 29 + .../assets/scss/components/_dividers.scss | 0 .../scss/components/_featured-image.scss | 28 +- .../assets/scss/components/_links.scss | 8 +- .../assets/scss/components/_page-builder.scss | 46 - .../assets/scss/components/_preloader | 10 - .../oe-brixton/assets/scss/foundation.scss | 21 +- .../assets/scss/global/_accessibility.scss | 29 + .../assets/scss/global/_settings.scss | 242 +- .../assets/scss/global/_wp-admin.scss | 8 +- .../assets/scss/global/_wp-overrides.scss | 29 +- .../assets/scss/modules/_editor-style.scss | 5 + .../assets/scss/modules/_footer.scss | 95 +- .../assets/scss/modules/_navigation.scss | 150 +- .../assets/scss/modules/_sidebar.scss | 0 .../assets/scss/site/_featured.scss | 20 - .../assets/scss/templates/_front.scss | 275 +- .../assets/scss/templates/_kitchen-sink.scss | 15 +- .../assets/scss/templates/_list-posts.scss | 12 - .../assets/scss/templates/_page-default.scss | 1 - .../scss/templates/_page-full-width.scss | 2 - .../scss/templates/_page-sidebar-left.scss | 0 .../assets/scss/templates/_single-post.scss | 70 - .../assets/scss/typography/_base.scss | 11 - .../assets/stylesheets/foundation.css | 4153 ++++++------ .../assets/stylesheets/foundation.css.map | 2 +- web/app/themes/oe-brixton/bower.json | 2 +- .../themes/oe-brixton/codesniffer.ruleset.xml | 3 + web/app/themes/oe-brixton/comments.php | 6 +- web/app/themes/oe-brixton/composer.json | 0 web/app/themes/oe-brixton/composer.lock | 0 web/app/themes/oe-brixton/footer.php | 15 +- web/app/themes/oe-brixton/functions.php | 8 +- web/app/themes/oe-brixton/gulpfile.js | 25 +- web/app/themes/oe-brixton/header.php | 0 web/app/themes/oe-brixton/index.php | 10 +- .../oe-brixton/languages/FoundationPress.pot | 2 +- web/app/themes/oe-brixton/languages/ca.mo | Bin 4994 -> 5002 bytes web/app/themes/oe-brixton/languages/ca.po | 8 +- web/app/themes/oe-brixton/languages/cs_CZ.mo | Bin 0 -> 5564 bytes web/app/themes/oe-brixton/languages/cs_CZ.po | 317 + web/app/themes/oe-brixton/languages/da_DK.mo | Bin 0 -> 4820 bytes web/app/themes/oe-brixton/languages/da_DK.po | 281 + web/app/themes/oe-brixton/languages/de_DE.mo | Bin 4239 -> 4879 bytes web/app/themes/oe-brixton/languages/de_DE.po | 345 +- .../oe-brixton/languages/de_DE_formal.mo | Bin 0 -> 4890 bytes .../oe-brixton/languages/de_DE_formal.po | 333 + web/app/themes/oe-brixton/languages/es_ES.mo | Bin 4962 -> 4971 bytes web/app/themes/oe-brixton/languages/es_ES.po | 8 +- web/app/themes/oe-brixton/languages/fi.mo | Bin 4914 -> 4901 bytes web/app/themes/oe-brixton/languages/fi.po | 37 +- web/app/themes/oe-brixton/languages/fr_FR.mo | Bin 4777 -> 4785 bytes web/app/themes/oe-brixton/languages/fr_FR.po | 8 +- web/app/themes/oe-brixton/languages/gl_ES.mo | Bin 4996 -> 5004 bytes web/app/themes/oe-brixton/languages/gl_ES.po | 8 +- web/app/themes/oe-brixton/languages/he_IL.mo | Bin 0 -> 5407 bytes web/app/themes/oe-brixton/languages/he_IL.po | 272 + web/app/themes/oe-brixton/languages/it_IT.mo | Bin 4927 -> 4935 bytes web/app/themes/oe-brixton/languages/it_IT.po | 8 +- web/app/themes/oe-brixton/languages/ja.mo | Bin 5290 -> 5298 bytes web/app/themes/oe-brixton/languages/ja.po | 16 +- web/app/themes/oe-brixton/languages/nb_NO.mo | Bin 4829 -> 4837 bytes web/app/themes/oe-brixton/languages/nb_NO.po | 8 +- web/app/themes/oe-brixton/languages/nl_NL.mo | Bin 4720 -> 4727 bytes web/app/themes/oe-brixton/languages/nl_NL.po | 8 +- web/app/themes/oe-brixton/languages/pl.mo | Bin 4549 -> 4557 bytes web/app/themes/oe-brixton/languages/pl.po | 8 +- web/app/themes/oe-brixton/languages/pt_BR.mo | Bin 4966 -> 4974 bytes web/app/themes/oe-brixton/languages/pt_BR.po | 8 +- web/app/themes/oe-brixton/languages/pt_PT.mo | Bin 5319 -> 5403 bytes web/app/themes/oe-brixton/languages/pt_PT.po | 228 +- web/app/themes/oe-brixton/languages/ro.mo | Bin 4921 -> 4929 bytes web/app/themes/oe-brixton/languages/ro.po | 8 +- web/app/themes/oe-brixton/languages/sv_SE.mo | Bin 5364 -> 5181 bytes web/app/themes/oe-brixton/languages/sv_SE.po | 8 +- web/app/themes/oe-brixton/languages/tr_TR.mo | Bin 0 -> 4941 bytes web/app/themes/oe-brixton/languages/tr_TR.po | 278 + web/app/themes/oe-brixton/library/cleanup.php | 169 +- .../themes/oe-brixton/library/custom-nav.php | 4 +- .../oe-brixton/library/enqueue-scripts.php | 4 +- .../themes/oe-brixton/library/entry-meta.php | 4 +- .../themes/oe-brixton/library/foundation.php | 8 +- .../oe-brixton/library/menu-walkers.php | 0 .../themes/oe-brixton/library/navigation.php | 26 +- .../library/{oe-brixton.php => oe-ben.php} | 0 .../protocol-relative-theme-assets.php | 6 +- .../oe-brixton/library/responsive-images.php | 62 + .../library/site-origin-extension.php | 29 + .../oe-brixton/library/sticky-posts.php | 0 .../oe-brixton/library/theme-support.php | 14 +- .../oe-brixton/library/theme_customizer.php | 14 +- .../to-delete-theme_customizer-sample.php | 138 - .../oe-brixton/library/widget-areas.php | 4 +- web/app/themes/oe-brixton/package.json | 8 +- .../oe-brixton/page-templates/angular.php | 50 - .../page-templates/blog-sidebar-right.php | 43 - .../oe-brixton/page-templates/front.php | 15 +- .../page-templates/kitchen-sink.php | 86 +- .../page-templates/page-full-width.php | 42 +- .../page-templates/page-sidebar-left.php | 0 web/app/themes/oe-brixton/page.php | 64 +- web/app/themes/oe-brixton/screenshot.png | Bin web/app/themes/oe-brixton/search.php | 8 +- web/app/themes/oe-brixton/searchform.php | 14 +- web/app/themes/oe-brixton/sidebar.php | 0 web/app/themes/oe-brixton/single.php | 28 +- web/app/themes/oe-brixton/style.css | 1 - .../template-parts/check-if-sidebar-exist.php | 0 .../template-parts/content-none.php | 0 .../oe-brixton/template-parts/content.php | 10 +- .../template-parts/featured-image.php | 0 .../template-parts/mobile-off-canvas.php | 2 +- .../template-parts/mobile-top-bar.php | 0 web/app/themes/oe-brixton/woocommerce.php | 0 192 files changed, 12482 insertions(+), 7391 deletions(-) create mode 100644 docs/demo/about-us-1024x533.jpg create mode 100644 docs/demo/about-us-150x150.jpg create mode 100644 docs/demo/about-us-272x182.jpg create mode 100644 docs/demo/about-us-300x156.jpg create mode 100644 docs/demo/about-us-768x400.jpg create mode 100644 docs/demo/about-us.jpg create mode 100644 docs/demo/masterswp.wordpress.2017-02-12.xml create mode 100644 docs/demo/mstile-144x144.png create mode 100644 docs/demo/oe-brixton-hands-stide1-1024x533.jpg create mode 100644 docs/demo/oe-brixton-hands-stide1-150x150.jpg create mode 100644 docs/demo/oe-brixton-hands-stide1-272x182.jpg create mode 100644 docs/demo/oe-brixton-hands-stide1-300x156.jpg create mode 100644 docs/demo/oe-brixton-hands-stide1-768x400.jpg create mode 100644 docs/demo/oe-brixton-hands-stide1.jpg create mode 100644 docs/demo/open-ecommerce-website-design-london-150x90.png create mode 100644 docs/demo/open-ecommerce-website-design-london-272x90.png create mode 100644 docs/demo/open-ecommerce-website-design-london-300x72.png create mode 100644 docs/demo/open-ecommerce-website-design-london.png mode change 100755 => 100644 web/app/themes/oe-brixton/.babelrc mode change 100755 => 100644 web/app/themes/oe-brixton/.bowerrc mode change 100755 => 100644 web/app/themes/oe-brixton/.gitignore mode change 100755 => 100644 web/app/themes/oe-brixton/.travis.yml mode change 100755 => 100644 web/app/themes/oe-brixton/404.php mode change 100755 => 100644 web/app/themes/oe-brixton/CHANGELOG.md mode change 100755 => 100644 web/app/themes/oe-brixton/archive.php mode change 100755 => 100644 web/app/themes/oe-brixton/assets/fonts/FontAwesome.otf mode change 100755 => 100644 web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.eot mode change 100755 => 100644 web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.svg mode change 100755 => 100644 web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.ttf mode change 100755 => 100644 web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.woff mode change 100755 => 100644 web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.woff2 delete mode 100755 web/app/themes/oe-brixton/assets/images/demo/customizable.svg delete mode 100755 web/app/themes/oe-brixton/assets/images/demo/hero-bg-foundation-6-large.svg delete mode 100755 web/app/themes/oe-brixton/assets/images/demo/hero-bg-foundation-6-small.svg delete mode 100755 web/app/themes/oe-brixton/assets/images/demo/professional.svg delete mode 100755 web/app/themes/oe-brixton/assets/images/demo/responsive.svg delete mode 100755 web/app/themes/oe-brixton/assets/images/demo/semantic.svg mode change 100755 => 100644 web/app/themes/oe-brixton/assets/images/logos/open-ecommerce-website-design-london.png mode change 100755 => 100644 web/app/themes/oe-brixton/assets/images/logos/powered-by-open-ecommerce-org.png mode change 100755 => 100644 web/app/themes/oe-brixton/assets/javascript/custom/flex-video.js mode change 100755 => 100644 web/app/themes/oe-brixton/assets/javascript/custom/init-foundation.js mode change 100755 => 100644 web/app/themes/oe-brixton/assets/javascript/custom/joyride-demo.js mode change 100755 => 100644 web/app/themes/oe-brixton/assets/javascript/custom/offCanvas.js delete mode 100755 web/app/themes/oe-brixton/assets/javascript/custom/preloader.js create mode 100644 web/app/themes/oe-brixton/assets/javascript/custom/responsive-video.js mode change 100755 => 100644 web/app/themes/oe-brixton/assets/javascript/custom/stickyfooter.js mode change 100755 => 100644 web/app/themes/oe-brixton/assets/javascript/foundation.js mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/components/_buttons.scss create mode 100644 web/app/themes/oe-brixton/assets/scss/components/_cards.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/components/_dividers.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/components/_featured-image.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/components/_links.scss delete mode 100755 web/app/themes/oe-brixton/assets/scss/components/_page-builder.scss delete mode 100755 web/app/themes/oe-brixton/assets/scss/components/_preloader mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/foundation.scss create mode 100644 web/app/themes/oe-brixton/assets/scss/global/_accessibility.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/global/_settings.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/global/_wp-admin.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/global/_wp-overrides.scss create mode 100644 web/app/themes/oe-brixton/assets/scss/modules/_editor-style.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/modules/_footer.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/modules/_navigation.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/modules/_sidebar.scss delete mode 100755 web/app/themes/oe-brixton/assets/scss/site/_featured.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/templates/_front.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/templates/_kitchen-sink.scss delete mode 100755 web/app/themes/oe-brixton/assets/scss/templates/_list-posts.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/templates/_page-default.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/templates/_page-full-width.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/templates/_page-sidebar-left.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/scss/templates/_single-post.scss delete mode 100755 web/app/themes/oe-brixton/assets/scss/typography/_base.scss mode change 100755 => 100644 web/app/themes/oe-brixton/assets/stylesheets/foundation.css mode change 100755 => 100644 web/app/themes/oe-brixton/assets/stylesheets/foundation.css.map mode change 100755 => 100644 web/app/themes/oe-brixton/bower.json mode change 100755 => 100644 web/app/themes/oe-brixton/codesniffer.ruleset.xml mode change 100755 => 100644 web/app/themes/oe-brixton/comments.php mode change 100755 => 100644 web/app/themes/oe-brixton/composer.json mode change 100755 => 100644 web/app/themes/oe-brixton/composer.lock mode change 100755 => 100644 web/app/themes/oe-brixton/footer.php mode change 100755 => 100644 web/app/themes/oe-brixton/functions.php mode change 100755 => 100644 web/app/themes/oe-brixton/gulpfile.js mode change 100755 => 100644 web/app/themes/oe-brixton/header.php mode change 100755 => 100644 web/app/themes/oe-brixton/index.php mode change 100755 => 100644 web/app/themes/oe-brixton/languages/FoundationPress.pot mode change 100755 => 100644 web/app/themes/oe-brixton/languages/ca.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/ca.po create mode 100644 web/app/themes/oe-brixton/languages/cs_CZ.mo create mode 100644 web/app/themes/oe-brixton/languages/cs_CZ.po create mode 100644 web/app/themes/oe-brixton/languages/da_DK.mo create mode 100644 web/app/themes/oe-brixton/languages/da_DK.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/de_DE.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/de_DE.po create mode 100644 web/app/themes/oe-brixton/languages/de_DE_formal.mo create mode 100644 web/app/themes/oe-brixton/languages/de_DE_formal.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/es_ES.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/es_ES.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/fi.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/fi.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/fr_FR.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/fr_FR.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/gl_ES.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/gl_ES.po create mode 100644 web/app/themes/oe-brixton/languages/he_IL.mo create mode 100644 web/app/themes/oe-brixton/languages/he_IL.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/it_IT.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/it_IT.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/ja.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/ja.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/nb_NO.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/nb_NO.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/nl_NL.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/nl_NL.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/pl.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/pl.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/pt_BR.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/pt_BR.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/pt_PT.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/pt_PT.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/ro.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/ro.po mode change 100755 => 100644 web/app/themes/oe-brixton/languages/sv_SE.mo mode change 100755 => 100644 web/app/themes/oe-brixton/languages/sv_SE.po create mode 100644 web/app/themes/oe-brixton/languages/tr_TR.mo create mode 100644 web/app/themes/oe-brixton/languages/tr_TR.po mode change 100755 => 100644 web/app/themes/oe-brixton/library/cleanup.php mode change 100755 => 100644 web/app/themes/oe-brixton/library/custom-nav.php mode change 100755 => 100644 web/app/themes/oe-brixton/library/enqueue-scripts.php mode change 100755 => 100644 web/app/themes/oe-brixton/library/entry-meta.php mode change 100755 => 100644 web/app/themes/oe-brixton/library/foundation.php mode change 100755 => 100644 web/app/themes/oe-brixton/library/menu-walkers.php mode change 100755 => 100644 web/app/themes/oe-brixton/library/navigation.php rename web/app/themes/oe-brixton/library/{oe-brixton.php => oe-ben.php} (100%) mode change 100755 => 100644 mode change 100755 => 100644 web/app/themes/oe-brixton/library/protocol-relative-theme-assets.php create mode 100644 web/app/themes/oe-brixton/library/responsive-images.php create mode 100644 web/app/themes/oe-brixton/library/site-origin-extension.php mode change 100755 => 100644 web/app/themes/oe-brixton/library/sticky-posts.php mode change 100755 => 100644 web/app/themes/oe-brixton/library/theme-support.php mode change 100755 => 100644 web/app/themes/oe-brixton/library/theme_customizer.php delete mode 100755 web/app/themes/oe-brixton/library/to-delete-theme_customizer-sample.php mode change 100755 => 100644 web/app/themes/oe-brixton/library/widget-areas.php mode change 100755 => 100644 web/app/themes/oe-brixton/package.json delete mode 100755 web/app/themes/oe-brixton/page-templates/angular.php delete mode 100755 web/app/themes/oe-brixton/page-templates/blog-sidebar-right.php mode change 100755 => 100644 web/app/themes/oe-brixton/page-templates/front.php mode change 100755 => 100644 web/app/themes/oe-brixton/page-templates/kitchen-sink.php mode change 100755 => 100644 web/app/themes/oe-brixton/page-templates/page-full-width.php mode change 100755 => 100644 web/app/themes/oe-brixton/page-templates/page-sidebar-left.php mode change 100755 => 100644 web/app/themes/oe-brixton/page.php mode change 100755 => 100644 web/app/themes/oe-brixton/screenshot.png mode change 100755 => 100644 web/app/themes/oe-brixton/search.php mode change 100755 => 100644 web/app/themes/oe-brixton/searchform.php mode change 100755 => 100644 web/app/themes/oe-brixton/sidebar.php mode change 100755 => 100644 web/app/themes/oe-brixton/single.php mode change 100755 => 100644 web/app/themes/oe-brixton/style.css mode change 100755 => 100644 web/app/themes/oe-brixton/template-parts/check-if-sidebar-exist.php mode change 100755 => 100644 web/app/themes/oe-brixton/template-parts/content-none.php mode change 100755 => 100644 web/app/themes/oe-brixton/template-parts/content.php mode change 100755 => 100644 web/app/themes/oe-brixton/template-parts/featured-image.php mode change 100755 => 100644 web/app/themes/oe-brixton/template-parts/mobile-off-canvas.php mode change 100755 => 100644 web/app/themes/oe-brixton/template-parts/mobile-top-bar.php mode change 100755 => 100644 web/app/themes/oe-brixton/woocommerce.php diff --git a/composer.json b/composer.json index 97e65f7..a4dfbf8 100755 --- a/composer.json +++ b/composer.json @@ -38,9 +38,7 @@ "johnpbloch/wordpress": "4.7.2", "oscarotero/env": "^1.0", "roots/wp-password-bcrypt": "1.0.0", - "wpackagist-plugin/captcha":"~4.2", "wpackagist-plugin/wordpress-importer": "~0.6", - "wpackagist-plugin/wordpress-seo":"*", "wpackagist-plugin/vimeography": "~1.4", "wpackagist-plugin/siteorigin-panels": "dev-trunk", "wpackagist-plugin/so-widgets-bundle": "~1.8", diff --git a/composer.lock b/composer.lock index 8835454..1f92603 100755 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "9b655ce57a5a4335653ad821351a8bda", - "content-hash": "54e592fc9c4df308c50dad55cb3d9b8b", + "hash": "395dd6f4cdc4f87152c2a13f00464f5a", + "content-hash": "4b69e1ec15f2a4c96ded109b24a8cfec", "packages": [ { "name": "composer/installers", @@ -352,7 +352,7 @@ "dist": { "type": "zip", "url": "https://downloads.wordpress.org/plugin/angularjs-for-wp.zip", - "reference": "trunk", + "reference": null, "shasum": null }, "require": { @@ -362,26 +362,6 @@ "homepage": "https://wordpress.org/plugins/angularjs-for-wp/", "time": "2015-08-27 00:41:16" }, - { - "name": "wpackagist-plugin/captcha", - "version": "4.2.8", - "source": { - "type": "svn", - "url": "https://plugins.svn.wordpress.org/captcha/", - "reference": "tags/4.2.8" - }, - "dist": { - "type": "zip", - "url": "https://downloads.wordpress.org/plugin/captcha.4.2.8.zip", - "reference": "tags/4.2.8", - "shasum": null - }, - "require": { - "composer/installers": "~1.0" - }, - "type": "wordpress-plugin", - "homepage": "https://wordpress.org/plugins/captcha/" - }, { "name": "wpackagist-plugin/rest-api", "version": "2.0-beta15", @@ -393,7 +373,7 @@ "dist": { "type": "zip", "url": "https://downloads.wordpress.org/plugin/rest-api.2.0-beta15.zip", - "reference": "tags/2.0-beta15", + "reference": null, "shasum": null }, "require": { @@ -502,26 +482,6 @@ }, "type": "wordpress-plugin", "homepage": "https://wordpress.org/plugins/wordpress-importer/" - }, - { - "name": "wpackagist-plugin/wordpress-seo", - "version": "4.2.1", - "source": { - "type": "svn", - "url": "https://plugins.svn.wordpress.org/wordpress-seo/", - "reference": "tags/4.2.1" - }, - "dist": { - "type": "zip", - "url": "https://downloads.wordpress.org/plugin/wordpress-seo.4.2.1.zip", - "reference": "tags/4.2.1", - "shasum": null - }, - "require": { - "composer/installers": "~1.0" - }, - "type": "wordpress-plugin", - "homepage": "https://wordpress.org/plugins/wordpress-seo/" } ], "packages-dev": [ diff --git a/docs/demo/about-us-1024x533.jpg b/docs/demo/about-us-1024x533.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf35f04e39136d618aefe28095b85c3cde6507d9 GIT binary patch literal 40313 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 literal 0 HcmV?d00001 diff --git a/docs/demo/about-us-768x400.jpg b/docs/demo/about-us-768x400.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ad05d35a24ff53d12edb7a99f8af7634a0aa7e3 GIT binary patch literal 25979 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 Gf&ba(P+s@| literal 0 HcmV?d00001 diff --git a/docs/demo/about-us.jpg b/docs/demo/about-us.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf366e6ca89277556b6d5261dc054909ed519320 GIT binary patch literal 40791 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 literal 0 HcmV?d00001 diff --git a/docs/demo/masterswp.wordpress.2017-02-12.xml b/docs/demo/masterswp.wordpress.2017-02-12.xml new file mode 100644 index 0000000..21b433c --- /dev/null +++ b/docs/demo/masterswp.wordpress.2017-02-12.xml @@ -0,0 +1,5635 @@ + + + + + + + + + + + + + + + + + + + + + + + Masters Wp + http://masters-wp.dev + Just another WordPress site + Sun, 12 Feb 2017 16:54:50 +0000 + en-US + 1.2 + http://masters-wp.dev + http://masters-wp.dev + + 1 + + + 3 + + + + + + + 4 + + + + + + + 5 + + + + + + + 6 + + + + + + + 7 + + + + + + + 8 + + + + + + + 9 + + + + + + + 10 + + + + + + + 11 + + + + + + + 12 + + + + + + + 13 + + + + + + + 14 + + + + + + + 15 + + + + + + + 16 + + + + + + + 17 + + + + + + + 18 + + + + + + + 19 + + + + + + + 20 + + + + + + + 21 + + + + + + + 22 + + + + + + + 23 + + + + + + + 24 + + + + + + + 25 + + + + + + + 26 + + + + + + + 27 + + + + + + + 28 + + + + + + + 29 + + + + + + + 30 + + + + + + + 31 + + + + + + 32 + + + + + + + 33 + + + + + + + 34 + + + + + + + 1 + + + + + + 35 + + + + + + + 36 + + + + + + + 37 + + + + + + + 38 + + + + + + + 39 + + + + + + + 40 + + + + + + + 41 + + + + + + + 42 + + + + + + + 43 + + + + + + + 44 + + + + + + 45 + + + + + + 46 + + + + + + 47 + + + + + + 48 + + + + + 49 + + + + + + 50 + + + + + + 51 + + + + + + 52 + + + + + + 53 + + + + + + 54 + + + + + 55 + + + + + + 56 + + + + + + 57 + + + + + + 58 + + + + + + 59 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 62nav_menu + + 60nav_menu + + 2nav_menu + + 61nav_menu + + + + + + + http://masters-wp.dev/2017/02/12/6/ + Sun, 12 Feb 2017 12:53:00 +0000 + + http://masters-wp.dev/2017/02/12/6/ + + + + 6 + + + + + + + 0 + 2 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/11/ + Sun, 12 Feb 2017 13:14:45 +0000 + + http://masters-wp.dev/2017/02/12/11/ + + + + 11 + + + + + + + 0 + 1 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + about-us + http://masters-wp.dev/about-us/ + Sun, 12 Feb 2017 16:25:24 +0000 + + http://masters-wp.dev/app/uploads/2017/02/about-us.jpg + + + + 16 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + about-us-150x150 + http://masters-wp.dev/about-us-150x150/ + Sun, 12 Feb 2017 16:25:26 +0000 + + http://masters-wp.dev/app/uploads/2017/02/about-us-150x150-1.jpg + + + + 17 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + about-us-272x182 + http://masters-wp.dev/about-us-272x182/ + Sun, 12 Feb 2017 16:25:26 +0000 + + http://masters-wp.dev/app/uploads/2017/02/about-us-272x182-1.jpg + + + + 18 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + about-us-300x156 + http://masters-wp.dev/about-us-300x156/ + Sun, 12 Feb 2017 16:25:27 +0000 + + http://masters-wp.dev/app/uploads/2017/02/about-us-300x156-1.jpg + + + + 19 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + about-us-768x400 + http://masters-wp.dev/about-us-768x400/ + Sun, 12 Feb 2017 16:25:27 +0000 + + http://masters-wp.dev/app/uploads/2017/02/about-us-768x400-1.jpg + + + + 20 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + about-us-1024x533 + http://masters-wp.dev/about-us-1024x533/ + Sun, 12 Feb 2017 16:25:28 +0000 + + http://masters-wp.dev/app/uploads/2017/02/about-us-1024x533-1.jpg + + + + 21 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + mstile-144x144 + http://masters-wp.dev/mstile-144x144/ + Sun, 12 Feb 2017 16:25:29 +0000 + + http://masters-wp.dev/app/uploads/2017/02/mstile-144x144.png + + + + 22 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + oe-brixton-hands-stide1 + http://masters-wp.dev/oe-brixton-hands-stide1/ + Sun, 12 Feb 2017 16:25:30 +0000 + + http://masters-wp.dev/app/uploads/2017/02/oe-brixton-hands-stide1.jpg + + + + 23 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + oe-brixton-hands-stide1-150x150 + http://masters-wp.dev/oe-brixton-hands-stide1-150x150/ + Sun, 12 Feb 2017 16:25:31 +0000 + + http://masters-wp.dev/app/uploads/2017/02/oe-brixton-hands-stide1-150x150-1.jpg + + + + 24 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + oe-brixton-hands-stide1-272x182 + http://masters-wp.dev/oe-brixton-hands-stide1-272x182/ + Sun, 12 Feb 2017 16:25:32 +0000 + + http://masters-wp.dev/app/uploads/2017/02/oe-brixton-hands-stide1-272x182-1.jpg + + + + 25 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + oe-brixton-hands-stide1-300x156 + http://masters-wp.dev/oe-brixton-hands-stide1-300x156/ + Sun, 12 Feb 2017 16:25:33 +0000 + + http://masters-wp.dev/app/uploads/2017/02/oe-brixton-hands-stide1-300x156-1.jpg + + + + 26 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + oe-brixton-hands-stide1-768x400 + http://masters-wp.dev/oe-brixton-hands-stide1-768x400/ + Sun, 12 Feb 2017 16:25:33 +0000 + + http://masters-wp.dev/app/uploads/2017/02/oe-brixton-hands-stide1-768x400-1.jpg + + + + 27 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + oe-brixton-hands-stide1-1024x533 + http://masters-wp.dev/oe-brixton-hands-stide1-1024x533/ + Sun, 12 Feb 2017 16:25:34 +0000 + + http://masters-wp.dev/app/uploads/2017/02/oe-brixton-hands-stide1-1024x533-1.jpg + + + + 28 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + open-ecommerce-website-design-london + http://masters-wp.dev/open-ecommerce-website-design-london/ + Sun, 12 Feb 2017 16:25:35 +0000 + + http://masters-wp.dev/app/uploads/2017/02/open-ecommerce-website-design-london.png + + + + 29 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + open-ecommerce-website-design-london-150x90 + http://masters-wp.dev/open-ecommerce-website-design-london-150x90/ + Sun, 12 Feb 2017 16:25:36 +0000 + + http://masters-wp.dev/app/uploads/2017/02/open-ecommerce-website-design-london-150x90-1.png + + + + 30 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + open-ecommerce-website-design-london-272x90 + http://masters-wp.dev/open-ecommerce-website-design-london-272x90/ + Sun, 12 Feb 2017 16:25:36 +0000 + + http://masters-wp.dev/app/uploads/2017/02/open-ecommerce-website-design-london-272x90-1.png + + + + 31 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + open-ecommerce-website-design-london-300x72 + http://masters-wp.dev/open-ecommerce-website-design-london-300x72/ + Sun, 12 Feb 2017 16:25:37 +0000 + + http://masters-wp.dev/app/uploads/2017/02/open-ecommerce-website-design-london-300x72-1.png + + + + 32 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1243/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1243 + + + + 1243 + + + + + + + 0 + 7 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Amazon Store + http://masters-wp.dev/amazon-store/ + Fri, 15 Mar 2013 22:48:51 +0000 + + http://wptest.io/demo/?page_id=1062 + + ]]> + + 1062 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + Blog + http://masters-wp.dev/blog/ + Fri, 15 Mar 2013 22:59:55 +0000 + + http://wptest.io/demo/?page_id=1066 + + Home page. + +To test this page: +
    +
  • Navigate to Settings > Reading in the WordPress admin.
  • +
  • Then use the settings in the screenshot below.
  • +
+Static Pages + +A few things to check once this is done. +
    +
  • Navigating to the Blog page does not display this page. It should display blog posts.
  • +
  • Check that the browser window / tab name is what you intend it to show.
  • +
  • If your theme displays breadcrumbs, they should probably not show when this is the posts page.
  • +
]]>
+ + 1066 + + + + + + + 0 + 0 + + + 0 + + + + + + + + +
+ + Page Comments Disabled + http://masters-wp.dev/page-comments-disabled/ + Fri, 15 Mar 2013 23:15:14 +0000 + + http://wptest.io/demo/?page_id=1075 + + + + 1075 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + Page Comments + http://masters-wp.dev/page-comments/ + Fri, 15 Mar 2013 23:16:08 +0000 + + http://wptest.io/demo/?page_id=1077 + + + + 1077 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + 2 + + + http://chrisam.es/ + + + + + + + 0 + 0 + + + + Page Image Alignment + http://masters-wp.dev/page-image-alignment/ + Fri, 15 Mar 2013 23:19:23 +0000 + + http://wptest.io/demo/?page_id=1080 + + None, LeftRight, and Center. In addition, they also get the options of ThumbnailMediumLarge & Fullsize. +

Image Alignment 580x300

+The image above happens to be centered. + +Image Alignment 150x150The rest of this paragraph is filler for the sake of seeing the text wrap around the 150x150 image, which is left aligned + +As you can see the should be some space above, below, and to the right of the image. The text should not be creeping on the image. Creeping is just not right. Images need breathing room too. Let them speak like you words. Let them do their jobs without any hassle from the text. In about one more sentence here, we'll see that the text moves from the right of the image down below the image in seamless transition. Again, letting the do it's thang. Mission accomplished! + +And now for a massively large image. It also has no alignment. + +Image Alignment 1200x400 + +The image above, though 1200px wide, should not overflow the content area. It should remain contained with no visible disruption to the flow of content. + +Image Alignment 300x200 + +And now we're going to shift things to the right align. Again, there should be plenty of room above, below, and to the left of the image. Just look at him there... Hey guy! Way to rock that right side. I don't care what the left aligned image says, you look great. Don't let anyone else tell you differently. + +In just a bit here, you should see the text start to wrap below the right aligned image and settle in nicely. There should still be plenty of room and everything should be sitting pretty. Yeah... Just like that. It never felt so good to be right. + +And just when you thought we were done, we're going to do them all over again with captions! + +[caption id="attachment_906" align="aligncenter" width="580"]Image Alignment 580x300 Look at 580x300 getting some
caption love.[/caption] + +The image above happens to be centered. The caption also has a link in it, just to see if it does anything funky. + +[caption id="attachment_904" align="alignleft" width="150"]Image Alignment 150x150 Itty-bitty caption.[/caption] + +The rest of this paragraph is filler for the sake of seeing the text wrap around the 150x150 image, which is left aligned + +As you can see the should be some space above, below, and to the right of the image. The text should not be creeping on the image. Creeping is just not right. Images need breathing room too. Let them speak like you words. Let them do their jobs without any hassle from the text. In about one more sentence here, we'll see that the text moves from the right of the image down below the image in seamless transition. Again, letting the do it's thang. Mission accomplished! + +And now for a massively large image. It also has no alignment. + +[caption id="attachment_907" align="alignnone" width="1200"]Image Alignment 1200x400 Massive image comment for your eyeballs.[/caption] + +The image above, though 1200px wide, should not overflow the content area. It should remain contained with no visible disruption to the flow of content. + +[caption id="attachment_905" align="alignright" width="300"]Image Alignment 300x200 Feels good to be right all the time.[/caption] + +And now we're going to shift things to the right align. Again, there should be plenty of room above, below, and to the left of the image. Just look at him there... Hey guy! Way to rock that right side. I don't care what the left aligned image says, you look great. Don't let anyone else tell you differently. + +In just a bit here, you should see the text start to wrap below the right aligned image and settle in nicely. There should still be plenty of room and everything should be sitting pretty. Yeah... Just like that. It never felt so good to be right. + +And that's a wrap, yo! You survived the tumultuous waters of alignment. Image alignment achievement unlocked!]]> + + 1080 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + Page Markup And Formatting + http://masters-wp.dev/page-markup-and-formatting/ + Fri, 15 Mar 2013 23:20:05 +0000 + + http://wptest.io/demo/?page_id=1083 + + Headings +

Header one

+

Header two

+

Header three

+

Header four

+
Header five
+
Header six
+

Blockquotes

+Single line blockquote: +
Stay hungry. Stay foolish.
+Multi line blockquote with a cite reference: +
People think focus means saying yes to the thing you've got to focus on. But that's not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I'm actually as proud of the things we haven't done as the things I have done. Innovation is saying no to 1,000 things. Steve Jobs - Apple Worldwide Developers' Conference, 1997
+

Tables

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EmployeeSalary
John Saddington$1Because that's all Steve Job' needed for a salary.
Tom McFarlin$100KFor all the blogging he does.
Jared Erickson$100MPictures are worth a thousand words, right? So Tom x 1,000.
Chris Ames$100BWith hair like that?! Enough said...
+

Definition Lists

+
Definition List Title
Definition list division.
Startup
A startup company or startup is a company or temporary organization designed to search for a repeatable and scalable business model.
#dowork
Coined by Rob Dyrdek and his personal body guard Christopher "Big Black" Boykins, "Do Work" works as a self motivator, to motivating your friends.
Do It Live
I'll let Bill O'Reilly will explain this one.
+

Unordered Lists (Nested)

+
    +
  • List item one +
      +
    • List item one +
        +
      • List item one
      • +
      • List item two
      • +
      • List item three
      • +
      • List item four
      • +
      +
    • +
    • List item two
    • +
    • List item three
    • +
    • List item four
    • +
    +
  • +
  • List item two
  • +
  • List item three
  • +
  • List item four
  • +
+

Ordered List (Nested)

+
    +
  1. List item one +
      +
    1. List item one +
        +
      1. List item one
      2. +
      3. List item two
      4. +
      5. List item three
      6. +
      7. List item four
      8. +
      +
    2. +
    3. List item two
    4. +
    5. List item three
    6. +
    7. List item four
    8. +
    +
  2. +
  3. List item two
  4. +
  5. List item three
  6. +
  7. List item four
  8. +
+

HTML Tags

+These supported tags come from the WordPress.com code FAQ. + +Address Tag + +
1 Infinite Loop +Cupertino, CA 95014 +United States
Anchor Tag (aka. Link) + +This is an example of a link. + +Abbreviation Tag + +The abbreviation srsly stands for "seriously". + +Acronym Tag + +The acronym ftw stands for "for the win". + +Big Tag + +These tests are a big deal, but this tag is no longer supported in HTML5. + +Cite Tag + +"Code is poetry." --Automattic + +Code Tag + +You will learn later on in these tests that word-wrap: break-word; will be your best friend. + +Delete Tag + +This tag will let you strikeout text, but this tag is no longer supported in HTML5 (use the <strike> instead). + +Emphasize Tag + +The emphasize tag should italicize text. + +Insert Tag + +This tag should denote inserted text. + +Keyboard Tag + +This scarsly known tag emulates keyboard text, which is usually styled like the <code> tag. + +Preformatted Tag + +This tag styles large blocks of code. +
.post-title {
+	margin: 0 0 5px;
+	font-weight: bold;
+	font-size: 38px;
+	line-height: 1.2;
+}
+Quote Tag + +Developers, developers, developers... --Steve Ballmer + +Strong Tag + +This tag shows bold text. + +Subscript Tag + +Getting our science styling on with H2O, which should push the "2" down. + +Superscript Tag + +Still sticking with science and Albert Einstein's E = MC2, which should lift the "2" up. + +Teletype Tag + +This rarely used tag emulates teletype text, which is usually styled like the <code> tag. + +Variable Tag + +This allows you to denote variables.]]>
+ + 1083 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + +
+ + About + http://masters-wp.dev/about/ + Fri, 15 Mar 2013 23:21:12 +0000 + + http://wptest.io/demo/?page_id=1086 + + WP Test is a fantastically exhaustive set of test data to measure the integrity of your plugins and themes. + +The foundation of these tests are derived from WordPress’ Theme Unit Test Codex data. It’s paired with lessons learned from over three years of theme and plugin support, and baffling corner cases, to create a potent cocktail of simulated, quirky user content. + +The word "comprehensive" was purposely left off this description. It's not. There will always be something new squarely scenario to test. That's where you come in. Let us know of a test we're not covering. We'd love to squash it. + +Let’s make WordPress testing easier and resilient together.]]> + + 1086 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + Parent Page + http://masters-wp.dev/parent-page/ + Fri, 15 Mar 2013 23:24:09 +0000 + + http://wptest.io/demo/?page_id=1088 + + + + 1088 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1244/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1244 + + + + 1244 + + + + + + + 1088 + 13 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1245/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1245 + + + + 1245 + + + + + + + 1088 + 12 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1246/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1246 + + + + 1246 + + + + + + + 1088 + 11 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1247/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1247 + + + + 1247 + + + + + + + 1094 + 10 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1248/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1248 + + + + 1248 + + + + + + + 1088 + 9 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1249/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1249 + + + + 1249 + + + + + + + 1088 + 8 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1250/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1250 + + + + 1250 + + + + + + + 0 + 14 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1251/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1251 + + + + 1251 + + + + + + + 0 + 3 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1252/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1252 + + + + 1252 + + + + + + + 0 + 4 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1253/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1253 + + + + 1253 + + + + + + + 0 + 5 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1254/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1254 + + + + 1254 + + + + + + + 0 + 6 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://masters-wp.dev/2017/02/12/1255/ + Sun, 12 Feb 2017 16:50:31 +0000 + + http://masters-wp.dev/?p=1255 + + + + 1255 + + + + + + + 0 + 15 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sample Page + http://masters-wp.dev/sample-page/ + Sat, 11 Feb 2017 21:28:05 +0000 + + http://masters-wp.dev/?page_id=2 + + Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin' caught in the rain.) + +...or something like this: + +
The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.
+ +As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!]]>
+ + 2 + + + + + + + 0 + 0 + + + 0 + + + + +
+ + Home + http://masters-wp.dev/ + Sun, 12 Feb 2017 13:12:27 +0000 + + http://masters-wp.dev/?page_id=7 + + + + 7 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + Many Tags + http://masters-wp.dev/2012/11/01/many-tags/ + Thu, 01 Nov 2012 06:00:34 +0000 + + http://wpthemetestdata.wordpress.com/2007/11/24/many-tags/ + + + + 167 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + Many Categories + http://masters-wp.dev/2012/11/02/many-categories/ + Fri, 02 Nov 2012 07:00:03 +0000 + + http://wpthemetestdata.wordpress.com/2007/11/24/many-categories/ + + + + 168 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Scheduled + http://masters-wp.dev/?p=418 + Sat, 01 Jan 2050 18:00:18 +0000 + + http://wpthemetestdata.wordpress.com/?p=418 + + + + 418 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + Post Format: Image + http://masters-wp.dev/2012/12/05/post-format-image/ + Wed, 05 Dec 2012 11:00:39 +0000 + + http://wpthemetestdata.wordpress.com/?p=568 + +
Unicorn Wallpaper + +I really love this wallpaper. It makes me think fondly of Chris Ames.]]>
+ + 568 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + +
+ + Post Format: Quote + http://masters-wp.dev/2012/12/04/post-format-quote/ + Tue, 04 Dec 2012 10:00:15 +0000 + + http://wpthemetestdata.wordpress.com/?p=575 + + I suggest a new strategy to you... Let the Wookie win. + +C-3PO]]> + + 575 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + Post Format: Status + http://masters-wp.dev/2012/12/03/post-format-status/ + Mon, 03 Dec 2012 09:00:24 +0000 + + http://wpthemetestdata.wordpress.com/?p=579 + + + + 579 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + Post Format: Video + http://masters-wp.dev/2012/12/02/post-format-video/ + Sun, 02 Dec 2012 08:00:58 +0000 + + http://wpthemetestdata.wordpress.com/?p=582 + + Eddy's Start An Uproar! EP. + +Learn more about WordPress Embeds.]]> + + 582 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + ]]> + + + + Post Format: Audio + http://masters-wp.dev/2012/12/01/post-format-audio/ + Sat, 01 Dec 2012 07:00:44 +0000 + + http://wpthemetestdata.wordpress.com/?p=587 + + Eddy - Need (Remix) + +Shortcode: + +[audio http://wptest.io/demo/wp-content/uploads/2013/03/Eddy-Need-Remix.mp3]]]> + + 587 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + Post Format: Image (Caption) + http://masters-wp.dev/2012/12/06/post-format-image-caption/ + Thu, 06 Dec 2012 12:00:19 +0000 + + http://wpthemetestdata.wordpress.com/?p=674 + + It's dangerous to go alone! Take this.[/caption]]]> + + 674 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + Draft + http://masters-wp.dev/?p=922 + Mon, 30 Nov -0001 00:00:00 +0000 + + http://wptest.io/demo/?p=922 + + + + 922 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + Post Format: Video (VideoPress) + http://masters-wp.dev/2012/12/02/post-format-video-videopress/ + Sun, 02 Dec 2012 09:00:34 +0000 + + http://wptest.io/demo/?p=1005 + + VideoPress, especially as a video post format, usually provides some unique styling issues. + +You will need to install Jetpack or Slim Jetpack plugin to turn the shortcode into a viewable video.]]> + + 1005 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + Home + http://masters-wp.dev/home-2__trashed/ + Fri, 15 Mar 2013 22:56:11 +0000 + + http://wptest.io/demo/?page_id=1064 + + Blog page. + +To test this page: +
    +
  • Navigate to Settings > Reading in the WordPress admin.
  • +
  • Then use the settings in the screenshot below.
  • +
+Static Pages + +A few things to check once this is done. +
    +
  • Navigating to the root URL loads this page.
  • +
  • The site title should be an H1 and the page title should be an H2 (if displayed).
  • +
  • Check that the browser window / tab name is what you intend it to show.
  • +
  • If your theme displays breadcrumbs, they should probably not show when this page is the front page.
  • +
]]>
+ + 1064 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + +
+ + Child Page 01 + http://masters-wp.dev/parent-page/child-page-01/ + Fri, 15 Mar 2013 23:25:40 +0000 + + http://wptest.io/demo/?page_id=1090 + + + + 1090 + + + + + + + 1088 + 0 + + + 0 + + + + + + + + + + + Child Page 02 + http://masters-wp.dev/parent-page/child-page-02/ + Fri, 15 Mar 2013 23:25:51 +0000 + + http://wptest.io/demo/?page_id=1092 + + + + 1092 + + + + + + + 1088 + 0 + + + 0 + + + + + + + + + + + Child Page 03 + http://masters-wp.dev/parent-page/child-page-03/ + Fri, 15 Mar 2013 23:26:23 +0000 + + http://wptest.io/demo/?page_id=1094 + + + + 1094 + + + + + + + 1088 + 0 + + + 0 + + + + + + + + + + + Child Page 04 + http://masters-wp.dev/parent-page/child-page-04/ + Fri, 15 Mar 2013 23:26:40 +0000 + + http://wptest.io/demo/?page_id=1096 + + + + 1096 + + + + + + + 1088 + 0 + + + 0 + + + + + + + + + + + Child Page 05 + http://masters-wp.dev/parent-page/child-page-05/ + Fri, 15 Mar 2013 23:27:40 +0000 + + http://wptest.io/demo/?page_id=1098 + + + + 1098 + + + + + + + 1088 + 0 + + + 0 + + + + + + + + + + + Grandchild Page + http://masters-wp.dev/parent-page/child-page-03/grandchild-page/ + Fri, 15 Mar 2013 23:28:48 +0000 + + http://wptest.io/demo/?page_id=1102 + + + + 1102 + + + + + + + 1094 + 0 + + + 0 + + + + + + + + + + + Password Protected (the password is "enter") + http://masters-wp.dev/2013/01/04/password-protected/ + Fri, 04 Jan 2013 15:38:05 +0000 + + http://wpthemetestdata.wordpress.com/2007/09/04/test-with-secret-password/ + + + + 131 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + 29 + + + http://tommcfarlin.com/ + + + + + + + 0 + 0 + + + + + http://masters-wp.dev/2013/01/05/no-title/ + Sat, 05 Jan 2013 15:00:23 +0000 + + http://wpthemetestdata.wordpress.com/2007/09/04/14/ + + + + 133 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + No Content + http://masters-wp.dev/2013/01/06/no-content/ + Sun, 06 Jan 2013 15:39:56 +0000 + + http://wpthemetestdata.wordpress.com/2007/09/04/this-post-has-no-body/ + + + + 134 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + 30 + + + http://chrisam.es + + + + + + + 0 + 0 + + + + Comments + http://masters-wp.dev/2013/01/03/comments/ + Thu, 03 Jan 2013 16:11:37 +0000 + + http://wpthemetestdata.wordpress.com/2007/09/04/comment-test/ + + +
  • Threaded comments up to 10 levels deep
  • +
  • Paginated comments (set Settings > Discussion > Break comments into pages to 5 top level comments per page)
  • +
  • Comment markup / formatting
  • +
  • Comment images
  • +
  • Comment videos
  • +
  • Author comments
  • +
  • Gravatars and default fallbacks
  • + + ]]>
    + + 149 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + 3 + + + http://chrisam.es + + + + +
  • The commenter's gravatar. Optional, but a best practice. Use get_comment_author_email.
  • +
  • The commenter's name. Use comment_author.
  • +
  • The commenter's URL. Usually applied as a link to the commenter's name. Use comment_author_url
  • +
  • The date / time the comment was made. Use get_comment_date.
  • +
  • A permalink to the comment. Usually applied as a link to the date / time of the comment. Use get_comment_link
  • +
  • Indication of a comment left by the post author. Style the .bypostauthor class.
  • +
  • The comment text. Use comment_text.
  • +
  • An edit comment link. Use edit_comment_link.
  • +
  • A comment reply link. Used for threaded comments. Use comment_reply_link.
  • +]]>
    + + + 0 + 0 +
    + + 4 + + + http://tommcfarlin.com + + + + Headings + +

    Header one

    + +

    Header two

    + +

    Header three

    + +

    Header four

    + +
    Header five
    + +
    Header six
    + +

    Blockquotes

    + +Single line blockquote: + +
    Stay hungry. Stay foolish.
    + +Multi line blockquote with a cite reference: + +
    People think focus means saying yes to the thing you've got to focus on. But that's not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I'm actually as proud of the things we haven't done as the things I have done. Innovation is saying no to 1,000 things. Steve Jobs - Apple Worldwide Developers' Conference, 1997
    + +

    Tables

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    EmployeeSalary
    John Saddington$1Because that's all Steve Job' needed for a salary.
    Tom McFarlin$100KFor all the blogging he does.
    Jared Erickson$100MPictures are worth a thousand words, right? So Tom x 1,000.
    Chris Ames$100BWith hair like that?! Enough said...
    + +

    Definition Lists

    + +
    +
    Definition List Title
    +
    Definition list division.
    +
    Startup
    +
    A startup company or startup is a company or temporary organization designed to search for a repeatable and scalable business model.
    +
    #dowork
    +
    Coined by Rob Dyrdek and his personal body guard Christopher "Big Black" Boykins, "Do Work" works as a self motivator, to motivating your friends.
    +
    Do It Live
    +
    I'll let Bill O'Reilly will explain this one.
    +
    + +

    Unordered Lists (Nested)

    + +
      +
    • List item one +
        +
      • List item one +
          +
        • List item one
        • +
        • List item two
        • +
        • List item three
        • +
        • List item four
        • +
        +
      • +
      • List item two
      • +
      • List item three
      • +
      • List item four
      • +
      +
    • +
    • List item two
    • +
    • List item three
    • +
    • List item four
    • +
    + +

    Ordered List (Nested)

    + +
      +
    1. List item one +
        +
      1. List item one +
          +
        1. List item one
        2. +
        3. List item two
        4. +
        5. List item three
        6. +
        7. List item four
        8. +
        +
      2. +
      3. List item two
      4. +
      5. List item three
      6. +
      7. List item four
      8. +
      +
    2. +
    3. List item two
    4. +
    5. List item three
    6. +
    7. List item four
    8. +
    + +

    HTML Tags

    + +These supported tags come from the WordPress.com code FAQ. + +Address Tag + +
    +1 Infinite Loop +Cupertino, CA 95014 +United States +
    + +Anchor Tag (aka. Link) + +This is an example of a link. + +Abbreviation Tag + +The abbreviation srsly stands for "seriously". + +Acronym Tag + +The acronym ftw stands for "for the win". + +Big Tag + +These tests are a big deal, but this tag is no longer supported in HTML5. + +Cite Tag + +"Code is poetry." --Automattic + +Code Tag + +You will learn later on in these tests that word-wrap: break-word; will be your best friend. + +Delete Tag + +This tag will let you strikeout text, but this tag is no longer supported in HTML5 (use the <strike> instead). + +Emphasize Tag + +The emphasize tag should italicize text. + +Insert Tag + +This tag should denote inserted text. + +Keyboard Tag + +This scarsly known tag emulates keyboard text, which is usually styled like the <code> tag. + +Preformatted Tag + +This tag styles large blocks of code. + +
    +.post-title {
    +	margin: 0 0 5px;
    +	font-weight: bold;
    +	font-size: 38px;
    +	line-height: 1.2;
    +}
    +
    + +Quote Tag + +Developers, developers, developers... --Steve Ballmer + +Strong Tag + +This tag shows bold text. + +Subscript Tag + +Getting our science styling on with H2O, which should push the "2" down. + +Superscript Tag + +Still sticking with science and Albert Einstein's E = MC2, which should lift the "2" up. + +Teletype Tag + +This rarely used tag emulates teletype text, which is usually styled like the <code> tag. + +Variable Tag + +This allows you to denote variables.]]>
    + + + 0 + 0 +
    + + 5 + + + + + + + +
  • They used a fake email, so there should be no Gravatar associated with it.
  • +
  • They did not speify a website, so there should be no link to it in the comment.
  • +]]>
    + + + 0 + 0 +
    + + 6 + + + http://everchangingmedia.com/ + + + + + + + 0 + 0 + + + 7 + + + http://ma.tt/ + + + + + + + 0 + 0 + + + 8 + + + + + + + + + + 0 + 2 + + + 9 + + + http://jarederickson.com/ + + + + + + + 0 + 0 + + + 10 + + + http://chrisam.es/ + + + + + + + 9 + 0 + + + 11 + + + http://john.do/ + + + + + + + 10 + 0 + + + 12 + + + http://tommcfarlin.com/ + + + + + + + 11 + 0 + + + 13 + + + http://manovotny.com/ + + + + + + + 12 + 2 + + + 14 + + + http://everchangingmedia.com/ + + + + + + + 13 + 0 + + + 15 + + + http://jarederickson.com/ + + + + + + + 14 + 0 + + + 16 + + + http://chrisam.es/ + + + + + + + 15 + 0 + + + 17 + + + http://john.do/ + + + + + + + 16 + 0 + + + 18 + + + http://manovotny.com/ + + + + + + + 17 + 2 + + + 19 + + + http://john.do/ + + + + ]]> + + + 0 + 0 + + + 20 + + + http://soworthloving.com/ + + + + ]]> + + + 0 + 0 + + + 21 + + + http://wpdaily.co/ + + + + + + + 0 + 0 + + + 22 + + + http://8bit.io/ + + + + + + + 0 + 0 + + + 23 + + + http://manovotny.com/ + + + + + + + 0 + 2 + +
    + + Pingbacks And Trackbacks + http://masters-wp.dev/2013/01/01/pingbacks-an-trackbacks/ + Tue, 01 Jan 2013 16:17:18 +0000 + + http://wpthemetestdata.wordpress.com/2007/09/04/many-trackbacks/ + + +
  • Above the comments
  • +
  • Below the comments
  • +
  • Included within the normal flow of comments
  • +]]>
    + + 151 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + 24 + + + http://tellyworth.wordpress.com/2007/11/21/ping-1/ + + + + + + + 0 + 0 + + + 25 + + + http://tellyworth.wordpress.com/2007/11/21/ping-2-with-a-much-longer-title-than-the-previous-ping-which-was-called-ping-1/ + + + + + + + 0 + 0 + + + 26 + + + http://tellyworth.wordpress.com/2007/11/21/ping-4/ + + + + + + + 0 + 0 + + + 27 + + + http://tellyworth.wordpress.com/2007/11/21/ping-3/ + + + + + + + 0 + 0 + + + 28 + + + http://tommcfarlin.com + + + + + + + 0 + 0 + +
    + + Comments Disabled + http://masters-wp.dev/2013/01/02/comments-disabled/ + Wed, 02 Jan 2013 16:21:15 +0000 + + http://wpthemetestdata.wordpress.com/2007/09/04/no-comments/ + + + + 152 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + Paginated + http://masters-wp.dev/2013/01/08/paginated/ + Tue, 08 Jan 2013 16:00:20 +0000 + + http://noeltest.wordpress.com/?p=188 + + + +Post Page 2 + + + +Post Page 3]]> + + 188 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + Post Format: Gallery + http://masters-wp.dev/2012/12/10/post-format-gallery/ + Mon, 10 Dec 2012 16:00:14 +0000 + + http://wpthemetestdata.wordpress.com/?p=555 + + + +You can use this page to test the Theme's handling of the[gallery] + +shortcode, including the columns parameter, from 1 to 10 columns. Themes are only required to support the default setting (3 columns), so this page is entirely optional. +

    One Column

    +[gallery columns="1"] +

    Two Columns

    +[gallery columns="2"] +

    Three Columns

    +[gallery columns="3"] +

    Four Columns

    +[gallery columns="4"] +

    Five Columns

    +[gallery columns="5"] +

    Six Columns

    +[gallery columns="6"] +

    Seven Columns

    +[gallery columns="7"] +

    Eight Columns

    +[gallery columns="8"] +

    Nine Columns

    +[gallery columns="9"] +

    Ten Columns

    +[gallery columns="10"]]]>
    + + 555 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + +
    + + Post Format: Aside + http://masters-wp.dev/2012/12/09/post-format-aside/ + Sun, 09 Dec 2012 15:00:54 +0000 + + http://wpthemetestdata.wordpress.com/?p=559 + + + + 559 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + Post Format: Chat + http://masters-wp.dev/2012/12/08/post-format-chat/ + Sat, 08 Dec 2012 14:00:31 +0000 + + http://wpthemetestdata.wordpress.com/?p=562 + + + + 562 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + Post Format: Link + http://masters-wp.dev/2012/12/07/post-format-link/ + Fri, 07 Dec 2012 13:00:53 +0000 + + http://wpthemetestdata.wordpress.com/?p=565 + + 8BIT's Office - Video Game Inspired Mural]]> + + 565 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + Title With Markup + http://masters-wp.dev/2013/01/05/title-with-markup/ + Sat, 05 Jan 2013 16:00:49 +0000 + + http://wptest.io/demo/?p=861 + + +
  • The post title renders the word "with" in italics and the word "markup" in bold.
  • +
  • The post title markup should be removed from the browser window / tab.
  • +]]>
    + + 861 + + + + + + + 0 + 0 + + + 0 + + + + + + +
    + + Title With Special Characters ~`!@#$%^&*()-_=+{}[]/\;:'"?,.> + http://masters-wp.dev/2013/01/05/title-with-special-characters/ + Sat, 05 Jan 2013 17:00:20 +0000 + + http://wptest.io/demo/?p=867 + + + + 867 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + Super/Duper/Long/NonBreaking/Path/Name/To/A/File/That/Is/Way/Deep/Down/In/Some/Mysterious/Remote/Desolate/Part/Of/The/Operating/System/To/A/File/That/Just/So/Happens/To/Be/Strangely/Named/Supercalifragilisticexpialidocious.txt + http://masters-wp.dev/2013/01/05/non-breaking-text/ + Sat, 05 Jan 2013 18:00:59 +0000 + + http://wptest.io/demo/?p=877 + + +
  • Non-breaking text in the title, content, and comments should have no adverse effects on layout or functionality.
  • +
  • Check the browser window / tab title.
  • +
  • If you are a plugin or widget developer, check that this text does not break anything.
  • + +The following CSS properties will help you support non-breaking text. +
    -ms-word-wrap: break-word;
    +word-wrap: break-word;
    ]]>
    + + 877 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + 31 + + + http://jarederickson.com/ + + + + + + + 0 + 0 + +
    + + Text Alignment + http://masters-wp.dev/2013/01/09/text-alignment/ + Wed, 09 Jan 2013 15:00:39 +0000 + + http://wptest.io/demo/?p=895 + + Default +This is a paragraph. It should not have any alignment of any kind. It should just flow like you would normally expect. Nothing fancy. Just straight up text, free flowing, with love. Completely neutral and not picking a side or sitting on the fence. It just is. It just freaking is. It likes where it is. It does not feel compelled to pick a side. Leave him be. It will just be better that way. Trust me. +

    Left Align

    +

    This is a paragraph. It is left aligned. Because of this, it is a bit more liberal in it's views. It's favorite color is green. Left align tends to be more eco-friendly, but it provides no concrete evidence that it really is. Even though it likes share the wealth evenly, it leaves the equal distribution up to justified alignment.

    + +

    Center Align

    +

    This is a paragraph. It is center aligned. Center is, but nature, a fence sitter. A flip flopper. It has a difficult time making up its mind. It wants to pick a side. Really, it does. It has the best intentions, but it tends to complicate matters more than help. The best you can do is try to win it over and hope for the best. I hear center align does take bribes.

    + +

    Right Align

    +

    This is a paragraph. It is right aligned. It is a bit more conservative in it's views. It's prefers to not be told what to do or how to do it. Right align totally owns a slew of guns and loves to head to the range for some practice. Which is cool and all. I mean, it's a pretty good shot from at least four or five football fields away. Dead on. So boss.

    + +

    Justify Align

    +

    This is a paragraph. It is justify aligned. It gets really mad when people associate it with Justin Timberlake. Typically, justified is pretty straight laced. It likes everything to be in it's place and not all cattywampus like the rest of the aligns. I am not saying that makes it better than the rest of the aligns, but it does tend to put off more of an elitist attitude.

    ]]>
    + + 895 + + + + + + + 0 + 0 + + + 0 + + + + + + + +
    + + Image Alignment + http://masters-wp.dev/2013/01/10/image-alignment/ + Fri, 11 Jan 2013 02:15:40 +0000 + + http://wptest.io/demo/?p=903 + + None, LeftRight, and Center. In addition, they also get the options of ThumbnailMediumLarge & Fullsize. +

    Image Alignment 580x300

    +The image above happens to be centered. + +Image Alignment 150x150The rest of this paragraph is filler for the sake of seeing the text wrap around the 150x150 image, which is left aligned + +As you can see the should be some space above, below, and to the right of the image. The text should not be creeping on the image. Creeping is just not right. Images need breathing room too. Let them speak like you words. Let them do their jobs without any hassle from the text. In about one more sentence here, we'll see that the text moves from the right of the image down below the image in seamless transition. Again, letting the do it's thang. Mission accomplished! + +And now for a massively large image. It also has no alignment. + +Image Alignment 1200x400 + +The image above, though 1200px wide, should not overflow the content area. It should remain contained with no visible disruption to the flow of content. + +Image Alignment 300x200 + +And now we're going to shift things to the right align. Again, there should be plenty of room above, below, and to the left of the image. Just look at him there... Hey guy! Way to rock that right side. I don't care what the left aligned image says, you look great. Don't let anyone else tell you differently. + +In just a bit here, you should see the text start to wrap below the right aligned image and settle in nicely. There should still be plenty of room and everything should be sitting pretty. Yeah... Just like that. It never felt so good to be right. + +And just when you thought we were done, we're going to do them all over again with captions! + +[caption id="attachment_906" align="aligncenter" width="580"]Image Alignment 580x300 Look at 580x300 getting some caption love.[/caption] + +The image above happens to be centered. The caption also has a link in it, just to see if it does anything funky. + +[caption id="attachment_904" align="alignleft" width="150"]Image Alignment 150x150 Itty-bitty caption.[/caption] + +The rest of this paragraph is filler for the sake of seeing the text wrap around the 150x150 image, which is left aligned + +As you can see the should be some space above, below, and to the right of the image. The text should not be creeping on the image. Creeping is just not right. Images need breathing room too. Let them speak like you words. Let them do their jobs without any hassle from the text. In about one more sentence here, we'll see that the text moves from the right of the image down below the image in seamless transition. Again, letting the do it's thang. Mission accomplished! + +And now for a massively large image. It also has no alignment. + +[caption id="attachment_907" align="alignnone" width="1200"]Image Alignment 1200x400 Massive image comment for your eyeballs.[/caption] + +The image above, though 1200px wide, should not overflow the content area. It should remain contained with no visible disruption to the flow of content. + +[caption id="attachment_905" align="alignright" width="300"]Image Alignment 300x200 Feels good to be right all the time.[/caption] + +And now we're going to shift things to the right align. Again, there should be plenty of room above, below, and to the left of the image. Just look at him there... Hey guy! Way to rock that right side. I don't care what the left aligned image says, you look great. Don't let anyone else tell you differently. + +In just a bit here, you should see the text start to wrap below the right aligned image and settle in nicely. There should still be plenty of room and everything should be sitting pretty. Yeah... Just like that. It never felt so good to be right. + +And that's a wrap, yo! You survived the tumultuous waters of alignment. Image alignment achievement unlocked!]]>
    + + 903 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + +
    + + Markup And Formatting + http://masters-wp.dev/2013/01/11/markup-and-formatting/ + Sat, 12 Jan 2013 02:22:19 +0000 + + http://wptest.io/demo/?p=919 + + Headings +

    Header one

    +

    Header two

    +

    Header three

    +

    Header four

    +
    Header five
    +
    Header six
    +

    Blockquotes

    +Single line blockquote: +
    Stay hungry. Stay foolish.
    +Multi line blockquote with a cite reference: +
    People think focus means saying yes to the thing you've got to focus on. But that's not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I'm actually as proud of the things we haven't done as the things I have done. Innovation is saying no to 1,000 things. Steve Jobs - Apple Worldwide Developers' Conference, 1997
    +

    Tables

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    EmployeeSalary
    John Saddington$1Because that's all Steve Job' needed for a salary.
    Tom McFarlin$100KFor all the blogging he does.
    Jared Erickson$100MPictures are worth a thousand words, right? So Tom x 1,000.
    Chris Ames$100BWith hair like that?! Enough said...
    +

    Definition Lists

    +
    Definition List Title
    Definition list division.
    Startup
    A startup company or startup is a company or temporary organization designed to search for a repeatable and scalable business model.
    #dowork
    Coined by Rob Dyrdek and his personal body guard Christopher "Big Black" Boykins, "Do Work" works as a self motivator, to motivating your friends.
    Do It Live
    I'll let Bill O'Reilly will explain this one.
    +

    Unordered Lists (Nested)

    +
      +
    • List item one +
        +
      • List item one +
          +
        • List item one
        • +
        • List item two
        • +
        • List item three
        • +
        • List item four
        • +
        +
      • +
      • List item two
      • +
      • List item three
      • +
      • List item four
      • +
      +
    • +
    • List item two
    • +
    • List item three
    • +
    • List item four
    • +
    +

    Ordered List (Nested)

    +
      +
    1. List item one +
        +
      1. List item one +
          +
        1. List item one
        2. +
        3. List item two
        4. +
        5. List item three
        6. +
        7. List item four
        8. +
        +
      2. +
      3. List item two
      4. +
      5. List item three
      6. +
      7. List item four
      8. +
      +
    2. +
    3. List item two
    4. +
    5. List item three
    6. +
    7. List item four
    8. +
    +

    HTML Tags

    +These supported tags come from the WordPress.com code FAQ. + +Address Tag + +
    1 Infinite Loop +Cupertino, CA 95014 +United States
    Anchor Tag (aka. Link) + +This is an example of a link. + +Abbreviation Tag + +The abbreviation srsly stands for "seriously". + +Acronym Tag + +The acronym ftw stands for "for the win". + +Big Tag + +These tests are a big deal, but this tag is no longer supported in HTML5. + +Cite Tag + +"Code is poetry." --Automattic + +Code Tag + +You will learn later on in these tests that word-wrap: break-word; will be your best friend. + +Delete Tag + +This tag will let you strikeout text, but this tag is no longer supported in HTML5 (use the <strike> instead). + +Emphasize Tag + +The emphasize tag should italicize text. + +Insert Tag + +This tag should denote inserted text. + +Keyboard Tag + +This scarsly known tag emulates keyboard text, which is usually styled like the <code> tag. + +Preformatted Tag + +This tag styles large blocks of code. +
    .post-title {
    +	margin: 0 0 5px;
    +	font-weight: bold;
    +	font-size: 38px;
    +	line-height: 1.2;
    +}
    +Quote Tag + +Developers, developers, developers... --Steve Ballmer + +Strong Tag + +This tag shows bold text. + +Subscript Tag + +Getting our science styling on with H2O, which should push the "2" down. + +Superscript Tag + +Still sticking with science and Albert Einstein's E = MC2, which should lift the "2" up. + +Teletype Tag + +This rarely used tag emulates teletype text, which is usually styled like the <code> tag. + +Variable Tag + +This allows you to denote variables.]]>
    + + 919 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + +
    + + Post Format: Standard + http://masters-wp.dev/2012/12/11/post-format-standard/ + Tue, 11 Dec 2012 17:00:11 +0000 + + http://wptest.io/demo/?p=946 + + This is an example of a standard post format
    . + +Inspiration is a spark. A flash of light. Ignition. But without the proper mixture of oxygen and fuel, inspiration both lives and dies in the same instant. My life, my experiences, my research; these things are fertile soil for the great blog posts hidden within me. I carry them always and they are present when I sit down to do my work. + +But all too often, it’s a struggle. The raw material is there, but the inspiration is not. The oxygen is abundant, but the fuel is scarce. And I’m left wondering, “How?” + +How do I harvest? How do I sift and pan? How do I mine the caverns within me for intellectual and emotional gems? How do I… write? + +Or perhaps a better question is, how do you? Yes, you, my kindred blog reader. Surely, you are similar. Surely, you’ve wrestled the Great Muse down to the dusty earth, and won. + +I know this: it starts before I sit down to type. Great posts begin with significant life challenges. With weighty problems to solve. With an urgent need or a mature discontent with the way things are today. Yes, I think all great posts begin before words are written. + +So get up, reader. Walk away from your keyboard, and live. + +Only then can you give life… to words.]]> + + 946 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + Excerpt + http://masters-wp.dev/2013/03/15/excerpt/ + Fri, 15 Mar 2013 19:38:08 +0000 + + http://wptest.io/demo/?p=993 + + + + 993 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + Sticky + http://masters-wp.dev/2013/01/07/sticky/ + Mon, 07 Jan 2013 13:07:21 +0000 + + http://wptest.io/demo/?p=1241 + + +
  • The sticky post should be distinctly recognizable in some way in comparison to normal posts. You can style the .sticky class if you are using the post_class() function to generate your post classes, which is a best practice.
  • +
  • They should show at the very top of the blog index page, even though they could be several posts back chronologically.
  • +
  • They should still show up again in their chronologically correct postion in time, but without the sticky indicator.
  • +
  • If you have a plugin or widget that lists popular posts or comments, make sure that this sticky post is not always at the top of those lists unless it really is popular.
  • +]]>
    + + 1241 + + + + + + + 0 + 0 + + + 1 + + + + + + + + + + + + + + + + + + +
    + + Hello world! + http://masters-wp.dev/2017/02/11/hello-world/ + Sat, 11 Feb 2017 21:28:05 +0000 + + http://masters-wp.dev/?p=1 + + + + 1 + + + + + + + 0 + 0 + + + 0 + + + 1 + + + https://wordpress.org/ + + + + Gravatar.]]> + + + 0 + 0 + + + + More Tag + http://masters-wp.dev/2013/03/15/more-tag/ + Fri, 15 Mar 2013 19:41:11 +0000 + + http://wptest.io/demo/?p=996 + + more tag. + +Right after this sentence should be a "continue reading" button of some sort. + + + +And this content is after the more tag.]]> + + 996 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + Nested And Mixed Lists + http://masters-wp.dev/2013/03/15/nested-and-mixed-lists/ + Fri, 15 Mar 2013 19:48:32 +0000 + + http://wptest.io/demo/?p=1000 + + +
  • Lists within lists do not break the ordered list numbering order
  • +
  • Your list styles go deep enough
  • + +

    Ordered - Unordered - Ordered

    +
      +
    1. ordered item
    2. +
    3. ordered item +
        +
      • unordered
      • +
      • unordered +
          +
        1. ordered item
        2. +
        3. ordered item
        4. +
        +
      • +
      +
    4. +
    5. ordered item
    6. +
    7. ordered item
    8. +
    +

    Ordered - Unordered - Unordered

    +
      +
    1. ordered item
    2. +
    3. ordered item +
        +
      • unordered
      • +
      • unordered +
          +
        • unordered item
        • +
        • unordered item
        • +
        +
      • +
      +
    4. +
    5. ordered item
    6. +
    7. ordered item
    8. +
    +

    Unordered - Ordered - Unordered

    +
      +
    • unordered item
    • +
    • unordered item +
        +
      1. ordered
      2. +
      3. ordered +
          +
        • unordered item
        • +
        • unordered item
        • +
        +
      4. +
      +
    • +
    • unordered item
    • +
    • unordered item
    • +
    +

    Unordered - Unordered - Ordered

    +
      +
    • unordered item
    • +
    • unordered item +
        +
      • unordered
      • +
      • unordered +
          +
        1. ordered item
        2. +
        3. ordered item
        4. +
        +
      • +
      +
    • +
    • unordered item
    • +
    • unordered item
    • +
    ]]>
    + + 1000 + + + + + + + 0 + 0 + + + 0 + + + + + + + +
    + + Featured Image (Horizontal) + http://masters-wp.dev/2013/03/15/featured-image-horizontal/ + Fri, 15 Mar 2013 20:15:12 +0000 + + http://wptest.io/demo/?p=1011 + + featured image, if the theme supports it. + +Non-square images can provide some unique styling issues. + +This post tests a horizontal featured image.]]> + + 1011 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Featured Image (Vertical) + http://masters-wp.dev/2013/03/15/featured-image-vertical/ + Fri, 15 Mar 2013 20:36:32 +0000 + + http://wptest.io/demo/?p=1016 + + featured image, if the theme supports it. + +Non-square images can provide some unique styling issues. + +This post tests a vertical featured image.]]> + + 1016 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + Twitter Embeds + http://masters-wp.dev/2013/03/15/twitter-embeds/ + Fri, 15 Mar 2013 20:47:16 +0000 + + http://wptest.io/demo/?p=1027 + + Twitter Embeds feature.]]> + + 1027 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + +

    Doing what you “know” locks you in a prison of the past. Uncertainty is the path to an innovative future.

    — Carl Smith (@carlsmith) October 16, 2012]]>
    +
    + + +

    Doing what you “know” locks you in a prison of the past. Uncertainty is the path to an innovative future.

    — Carl Smith (@carlsmith) October 16, 2012]]>
    +
    + + + + +
    + + Tiled Gallery + http://masters-wp.dev/2013/03/15/tiled-gallery/ + Fri, 15 Mar 2013 22:23:27 +0000 + + http://wptest.io/demo/?p=1031 + + Jetpack or Slim Jetpack to test it out. + +[gallery type="rectangular" columns="4" ids="1261,1038,1039,1040,1041,1042" orderby="rand"] + +This is some text after the Tiled Gallery just to make sure that everything spaces nicely.]]> + + 1031 + + + + + + + 0 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/demo/mstile-144x144.png b/docs/demo/mstile-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..aa0503469390db683ff7b021a430c9b1a1edcaca GIT binary patch literal 8040 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 C3J3-O literal 0 HcmV?d00001 diff --git a/docs/demo/oe-brixton-hands-stide1-1024x533.jpg b/docs/demo/oe-brixton-hands-stide1-1024x533.jpg new file mode 100644 index 0000000000000000000000000000000000000000..482f4580da910ce5da49d5999514566df1c50009 GIT binary patch literal 97114 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%0DSnEM6qH5S52V3f{_xA7+RBOu zgugMHTAN!mea_;^sH|oABSldTeRxgpb z^+?)fLtxzV5-2EjnB(u$u*q8N^Ow)vfDu0|wGhJ;Y@4$L=7eQy{ADBA8{+r4+9MA# zt9nv+YQ5?5B5OJ63mHIk!A6uzIO|-~y3?!z*Qj62JQ4BY zpNs2S|1wr}|9k6bL3&`0n5a;0rOXxnB?6!E7dUlE<*<|JN+jSkH*~ zQ`ZQCqugMj#RbSk7?+;ZnhIo@DZeD?bPS4##o%OEwY3~$x~CB~rf(=OVvj`P;)!K| zw$gb;{s&6Rrko}uuGQ&9xG}ffa>N^~qU#LnrelUvb4yd`l*9-_h{FDzM|YJUXdRU) zw@!FhY#(+0%IT~(=}X2PKFi#}{v}k&kq!Of|0?%a{dB_VEKQQ`U zYYhcNj63Z!Ka{?=LvwtCuN>ru}fKgdVa~hA)Xx3 zJE#i{B55T-ButI+KI&qRaZo8V=dcrVT$rwI3

    U6=Pr0hfldc6Y>Jes^T{)5)vm< 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�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 D5!uSu literal 0 HcmV?d00001 diff --git a/docs/demo/oe-brixton-hands-stide1-150x150.jpg b/docs/demo/oe-brixton-hands-stide1-150x150.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c44acdd72be41b5862a328b68b6ec9671fe73866 GIT binary patch literal 7887 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 H7nA=5eIX(O literal 0 HcmV?d00001 diff --git a/docs/demo/oe-brixton-hands-stide1-272x182.jpg b/docs/demo/oe-brixton-hands-stide1-272x182.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45d8c52353b204fc39ff79c357ff5f5f9abef5d4 GIT binary patch literal 14281 zcmbVycQ{<%xA%xn2x5dpH^OMqjn1eu7>tRYh^T`ZWkiimBv02tufFl_({2?;>= z>H=IY0$8>D(2f8A3?>Ai0{pjJE|OxMy}dmY?%l)U#BA-|A3KQIxnu76*?QcQ5EH)# zQ1$b$wR3gw=6>wpgvKiK{%ZTc%Z;{I<~5Ts5I6A9aBxQJ26#D`1Rzj$0j_rP_PnYp z+)925ei#pogSRcWAI1%fQ}9#f{SRz~tLJ~J@9}c~hl#hVGOzkSq}=8PM%)_iUJl$c zVp5`Z;t~?vva(_l(lWBL5+dA^;u4bg#IJ5yQ3+`U8CeBMIqrW6?-iSuy`utBQ~O_B zS0!cMf3?Zi*H_F}O3dBM>7InVy!<~Hl9HlV7NR(RthcS7C>F=}Zv;&ToShfi!yE06 z<^BiJ_ObgDZ)M)ANdL157!L!3{{sGBI}3yPr(OSHjq^r2{C61tt2GYg@8NI{>40;8 z;$`P>WzP3+=c~T^zZ3mqcomI;p%?mUP;A{a-R+)W9I)OnO=aFIjhH>!UO`g^0?`nc zlF$^_me7)skWiPERo9f0lY`1>%Sp&XrT>lbzxj&G$V$sYe z+1-O%!$g)_&J9enDNI{-jJMoRME3j~0Il#HAbaEf{dJ$ z{L1(mDH(vAk%EawLj5MMu`MODC!b_kQXvqEeB1Gjie+~X#4q)DQN!ewofj@V~!j3f#h+!NBR008-}d+eniODztvgK1=; zzh00Aopl>(l}amZ-qlnqAmNQy;qIiheF5WuNb|e$SY^qKzL-V$zqYscW-cR)7K=-a zq-Wgf^yT){Yn)i|{%WZ?%~VkKb3TEp9CGV7m0k={%Vi6S^eYjw8kCAd61i;OS*1wM zaN6P}VqP{>LZTu;K+vPW`{rND8LY`cc)?BGIeR_m`v>_PtIf}>)FCvUI-~-JuTB04 zLH&V(sN6s{|3glKu0RAV zHbRdEX)5R8<*Ye(D~_(iM&0W5N_|s3cBs@vL><0X{;e|{23g9~{m?|-18k$EX5&6A zqu8O{?FFT#^zjx{|AsRBAlvB<*o!fU7nXUy8JJpLq9mv1BESagCKtO~HjsEb6&^C12%9{u8(=0aNQ0|g&SUU%GOrO z<0J-ueCgS>nRCt(UcK%k?-Jae3mY@7w6@p4iHdgr?dYacai2v{y%{edX!&{vCEwXh z|I-EWC%F#1*H7^Mbx_8kTrR_2@F4|rBNDWO?55_-EUun3yZgxj2F*6f{GLC@S5}l9 zL>ieseG`}3Qo~{);Epr@qWxIf^yf1zS)WBtCfOod9I=QqiP!7h=g3o-X>1YzJ zqui#bTPzs*vIyTVs`0^ z(G;x-zIL}Ti_S`3Ldu?MyB|Q{W2@>v3%BKVKvKCe@*dQ&^FbdhPIDFki)-1 zQZ7j7GjhgAyRw3Gn89rBiw}>ZfT4?Um^{F@@T>?d%0`e@cgR(LJ;C zDLEHEN+O5uD89dt{~`78{T?T(EYW2TnLGuM`^aVKDyEBsb>Gjcr<&^%CgDz|2%tY? z3-YEKTp$^KoJu>t0Opb5DzjDYakZcsPPwzm+8M^OFG#aayqWC1xkGyyjxyO?R*wtjFaw ze{XnbW-D~|H}SF5GQ{vjPTXIGm=`Ub$$#@D!Y3B|L_bC*KmC;QCx-ij?ls!@Dgk+l z7r`_NToYgigQ&*liajPB06orVsR+Y|@JfcgkHNHAy)Yy4s~wY}BAo&3Ne@iQy&vX| zbr}yB?T6Eh$SOnyM4)`$4mWY!5-&cASrYl1y}?Encs3HNf7_YMQPNUPehr@u7LoL4 zldeccj@qx^E#wzPG8^v1H1@HoEaeA*hd`4$mw;y#q?nQi)1Ps<&p|$1f2wg!lI3R1 zg?s`K;B*M>*4++5;oGqGv8ZI_pAz_myERDz|Un zoh`pbIhs6Jm zvIfx+lkRZ|U8_h!dN1c}7NI=TCG7dcd@#iKH%pM4BnsH@05dx-=UpGbqmcp^o;?GC&3Noxso{T@klx5 z&*`CCPMsrxmw@U+CIV^dLXPiY;kLY&i71OH;*PQ5f^!r-zq$Fka=UBE*79rKU(_Z^ zN0DKP>KY{Kpm5x_*5uuOd?j5$+~HCL5dSl5%f;T3+Pj2d<}+#dncrXZa2FqkYn&q1!!P(#Sx9N% ziT|KBT9#R#=TPL2r2MwQFU?4a=7@FB`i7Mi$Mm4moVM%0dgk>NKxJNj6i?j94>etw zjGTR5YK=>`j@$75qZQ9CJxy0EmC~sZ$!uUOPhq%Jf~!SV76`SUpm>`p*e;&W85th! z64nBHG7CzxKYG0)CV02mg+*+aaH1;+=E|4xItPp*bQ<-?BvYSdT)pPw*f*Pw(-Lt# zi}%+%haxiKO-qWuJl|xg>OcTFD*WjCD02cQ^}w_d^h$#807!z8bmL4Q6QvsD;IPXH zY(cQobbWKb0YPX*HUP`PYIlNmwIq{V0-id^zMAdDuF}9qS1E@hMmJ3i;dxu#roWj} zWyQsH1b+9G{$_vnNilf=U#uX<07s^rpc)~s!X{M79SiC8>-g1fNWKzWk2n`NybkDPDYf{C_-4YVH$jJtw!;E+^xRBhsFATUZF~kl_PC!&51-7aJRGQ*B`yzF4iq|cz#dJO{eMn=EK&pLDV8|;3 zb3DT#vYT2sYJU#5CwRNng#EIzvi9`Cmy&oXFw>;!!1J?4?&{OhQlt5H`Kk;ux?U+T z+t)Yt=kAUWRtUI+0956z(WNqR_#IA@LEMgkw)Nz_HKU(1Bsmy0LjlhGKQ%n>sWGpr z;%}Trv#0#pR;%Q9`C-aD<5s!MBP_tZ+`RLw9cD5r`#YjU0pn@HStCAJ(EDXZ?y&~gYu%(H{@DAFRYTN**lf}G71QvcK%?= zb*tHPMs!Sa9}A1;OiQUp zW6Wvv&}i;;t|~}nR$M=Io2~|Q){vZO6 zt|DT`uUma{Q%eD7-0LMg)JdW5^9;zi{C47gLe3%ZX11Z$a(GZqJ7<^gD5FiHPZKPIkta`jOd-ryb(0+O{1M`hHAHS+J|6CVsjxDq8YqY+7$28gsV$3lT7(+R(P;qqB zo0MG0CLn}t7FLBXey)R~dk^XY7`n$?&v+lVcJ^!NTBzjZ9cF~0_`*chtwhQn~lxpR(XDqe3vNXod- zYFh1Cr}o$i0VrH!(tOb_>Eh30_`^Dr6n$dHx3cFjy32-^(kyGbliayVM*ji{=-J%R zoA*YwX-$8H`HnW~4MYX=B{WVxtM_IvRrFAXaUKMDj_Cs>(+90EY8*w8E8a(k=itcg z``50^+4w;3FI{6w<3v&Q$qx!C8|1hSG*%QIWrzzz&hfr0S!~U3{gq@;(W>aZaWM}0 zN}OmK>xt_Zr%;;Oyw6``)O1VlwN)Rry}pr?$2tjz#0=|sUpbv(nUbDA`dh>KjwQ+? zC~?&|+1g@rv8RvHH+uAr*R;72sSgfcn5U&#^yz70x}f%!Fd%GbZ+rm~pBdyVIM zqIeIlw3_CQsBK!Hm>gh4c-`sYg1Xsv1N=F;T zIr$bL;K*b;(oO5aS*|(}{{EKQ?l(rUvU`t}%o6u*KRd|=4n<$L7CC|;lpi(Yo3~nv zS~AqhO7pxVZ#1h~CJonFKZfYV18>J$O4ZlN~c+a?J zzY_iJF8p>}Rai^LA?LJv?B4Rc&qbSVvCPx}@H4uMBY|Z(P69Jo zUllCnTz_t5WQt1W(iPJ)YjR*B(z9^kw7 z(7{{Qj-K|V-Fjx1Fzdr z<^}o`#3pta*j|HqO|{&U4GXR6n@QBqVr_Nidg0?_mBib{@9bcOry-4CJK(aMm&$pS zcHlKYFM{(*bboWY7+~eKaCh82kuELH{UfHyG&R2gsYVJpDxXt+DpvfN`0!5@1b5dy zRLxW47^$py|DNiDhfIXd_ZGv&wUs9ba#{6LV_@AaaE zEGoUz)8B#=y?f|}vUV_}!W5G&nFz620?*Zsna4M4`M<9k==Foq@@kX`0N}&fCy0!9 zkc`MKnR~WS+80QpptK&|b}gbcRm@asD~F0xw&`MG6+|^x(yQZ;qo%{jAe!{SbZ)~u zQSY^$715V85PnF}(z)kwKW6jpwO-3i3tgihg;N*2H5`gh^{rf!SL7QE0g>2c(w0lW z!!)6I#ZrER6KWt~;1@!L_a#8YTPj!E~+=*-HPW`6iVtRFQ}kn~b2 zN2$*|k!cXSw`PNS^pk3jL7uHAc#fnBG-okH*5Y~hyh%|b{xxX||GQd(;5AeZyB99b z)2OLX?BsZmXamQ({f+D8SBnHgNYH(3l&t4~ud=v@1C6i;?}fEiDH>&wk~idOAnS#H z1>yE5ub&hnxOjLKU;A%_b*8oCc~Fu$CZ|0}6R|Gmg$IqI@)=t^s=4_;H)@~-;i#gI z5H+Rs;dQf9%{01M#m!H>b5`tyY0R)M08cu)ow4p+!tb8tG?>%Y z@bn-z9*#6%SvwB4C{LVgtzEnEayg6$>Rgu|cw zv26WC^T`e!!oy|`S8nc4Z25Qzu#kSbS|XizjpkKvrgCH=LoL*YbgH6Q_gwzO_lDj~ z@+KX*u4TWq=L0{`0_=b3co0IN^Ehg<~y#NMx=c9=*`>75=@DT!Ql)s)O2s$(XR zzcZ=L7u9e>>j;?<=Fw5dueF33nUMT&w36o>fAissbb+peN&C%aQ@gq#1oZW?x-;Og@JBG&MCMK!%ttv(8iTEaFSjXSx1j;pM zuRj$#L!!+cRL*!gyPQjai?1u(-2jtwYU$8)Ej`ChWo3-NLI{z6ds^nztLlJ=E-GCp z@B<|T6nFi?X|H^e_xUm48Is+C+EkIGx3DkZl&<(K(={u&Boi~GO=%TuT85(?Bc=|I zCE%J@(t<)7OcL9u3|_}@WIVQfB?O(L2fLa?u7u^iR82D_mOj+;`N10clZ8<4YrkB6 zyg5>QNd9^m=!zdm&`bE;a%PkoUerTbs*+~&-Hjw8HIo*;zIv|;+>3h z$73h(ULjau;)VBNhr7B8?^rkyo-MD4B-uC|3JFL{M?7_2`I^kSS57>SJA9a`_d+A% z%*xj_fc;Dptod$!d7PesYRhx@pbx?fQvDQP^4HCv^IKqm0>>N&6$BpR%OH2dFd+2XBvoBx@3x+&NH34BeX>!t?yMw)Z{YB!mh;Nr15Oq5RU1UV z8R{wRIMI*NB4(~%*k46N3k$gfY;XQ?tSIx<%Z-6XI?Xz$EgF=0=6kr-PdD_vRho^q z#u&?{w!KNpNs3||jbRwiveSO}%k^)C>m!9~+71XZfl{6$@JaFD!I5{F>BR(&5Tp?_ z&cq1R)1El*pOVOG-mXpY9;KMy%%k0oFUTu1DtlmDC~65*T@%)b`~(l@atDQndnV+HJJ!366rcP+%qC&p#Q&q`&P7%F*>sM6527ryG3l9YP_8EIcr4 z9EzMBl(&!Mcx-y1RnQhPh6~p203MVtht9BBK0g*HIDh?hM0N3*eN_{Otv6%VS-&l9 z|A)Wn0l{3kmH{r~*m`v15_$&bGcggi)aS8i(F0MwKg4!kez)d(JtjnolRH}y0=7tB z6fHzAL?*1qT>bYyM!r9~1WfMokuDZTBf9ZNNfFe4t5%Qm1AB+r_~8O6U93-)>SqpR zs&4sUE5F7xFh};lbZKB6lpd4^g>63hA@{8aKb?QiJFT&)iQ^YE;9JlS{Pgn6yJaEK zwFS;I5yP0t`u*V7}d^nq`X71FTQRZ66J4(}Su;CP~P4%A~Z#-W@Xu&JK?-W$wy`Q0B@lV?NSN z)av^~p?z+xrXI=Eq$rWUpD$$6bqsa1f&HpRbH~>2zV0Ru*X_rzb~)(GG%!y~_b(6F zev|3RGA0%a{xW>78v9c~)K*w-XWqDxfoZAIOuPgL4Nddg zC0C#Pin-&>7~X1^S@+8Fr3>%!v;Hw^B8;|6R{LFJ7qX~)i4euiZxvwIz!MlN9?h&| z%$`uhrgjN; z;YKv8hU;zPn;sZU zB<^(w|NPLP)cieth2o{7y2iWWan5C~iCQ$V=#`{_-b*c27{3G?ek=WfgNnT{cJ>m` zuHRWJ8>=u29bHaM#w%RAL3&Uyos~O~n;VOJR8W95<4eh-2)W($@UCW~umJk`(nH7s zNlpl#M(dPT=Z-4bVduFDMpPCxLnA7!QT}mHZe{rcz(iS>xFc7?2)CE*`~7aJ7j8Hw zv|a+E+%%RuJF9aN=P67}H?p^ViZ#gp{PW(17C~jk9@4Lnl4sCRKC~IO<#ar; zc<1^&+>B>Th8<99FHB0k8Mfp3@!YxYe&^`zHn<|D2}}-C*P}*j;*zOVnz>UBj+qy- zr`c}DEFp_bU$Y;ZH#5O+HYhSvgHlpL1ME1Y^lBcc+0vL~sMguw>k%U)ha8&&-P!F# zOx>%V^sy60ejzD|b%D=dYNF(=&ajny!_J89TR%35NrR5)G%H!6cI znqJd8f9lo0K>SNN5FGrrnOT<0i%-$C!OvxCBw&Zzo87lVwd`&p&()rr-T4P$H$lzN z<+3%{p-M!xN`v+MXbo?}V&f<*lGz$%dS@yb_Oo#84AYnwkczH{v9w^jsT>_{Lh`-cT+;!9<)FC|UtQYUT*48W;P zhCG)7@iFlj01m|dFsVcU8RD@_zVdVkyJNkVlm|uZmg@PuIT71-We;wX=q48cWt=`? zZ2ZFg{!+NS`U5H>ogJO&F3K-oFWiW|Vzyv%EuY4#snOFFAId ziTfUCEy+i#KWhGDo3jmuc%O~rd-sqZG{(k!FI%2TjC~TsWaa;%PFMw%G|r24oP6Brp4`KnssII}g7n8^1TpTY z@fJF2Tx3Pe%6856d`r0Ys`_&Zu|Pzj@%x!WtoDnBY(ft;@1iI<@sKMEjX!-6?T`QN>V!X-*n;_%|QmB~X2%!|ay>VmbxOpVYhkr@xvA*Z$ zRFXDQeBs|RxZG#OH|jJ=K+%Ff%)3*lyiYNsa<$z=iO=>WO4gSKBS?A$5`tcf8f4yse7K(5 zPfRY%NwiF>$}kvV>-QBj=HU@O(`xpk*1dqn)n5WWZrl!6G&6I2vtnkH!9>#M?E%#( zP#)UoGHG2$)}P2)xrWw%|La6@)^nnMP#t>-pbrS^J7sLHPA=9od!`am>?|zT zw0rA(zLja3@RAb_jNCyie$y!AOw&A{nlwGol(Oq;7LPA%8V|itU?`f;LK&1WerhQO zd+`wj>%Ee4PM&X}59DQkAN2qiqXfKQKU|7a$7c*+bSlgPZJt-ZHVEZi6zkfVV7pXnfBYP*A88rBjK_-aCS2Lq;OAoZ|=>2SFJ>rpMD5!)GO7=#hA!Z z%e?Qh^i%z4_u8ZujY93SQ6d+~CJD?xs!-N`4*v7cJ{8>LqaFKqX2 zF-%DQv4#tG>BW~blzsN6w-3NiK1R2hD(a(=s+?3!0k1jWZ%DlF2%jHBU^VBY4)YbJ4Y6@JQS#yNTicQ{CH7o^L*JQ)D3L zp$CY+(P0Ts&*fbR@o45wdHOln$o=kZIz%3NDsH_#KaQ#?opgDJqNRT0Kz$mKh z#~e^LU?|>pwRqzk-_;r?K1ziw3a^a4>=ak8K$vw}F`wL%aj`CIVh%5ft#-$JItSVD zsWh1Kr!^MK{vg&frGfI)IkeE%lk&CM#0R)$dAP|N)pl;c?cCnaZoigTdJko;X)eUy zXn6Zo2=Re>aKW5!_%`kY{w;9a@cJI<8?DGWubWs(l0c2{` z3YPsh{V$Et8DL-ESzbhpW#Vu1+s~wkj+@sUGn_;TiEMZF+9>5gdCPnW&H<+vF{m}- zxN%KJV8wc%m}En9hNbau=5UXcGXnj>#M=w*23+JalHp}V2Mi2aNer=Zi5fZ0Ekmj< z%|AQe44C!d`qG-7-k5QmlG3Sb$}BY#tT4WmlSi;ySq_IAiI}POexSn$$Gq^WOxdZ7 zN)z-OVbxinGCV#tdX^nqNX#Rk+rIYyJii2-pua%+$E+Qk$o;1P$oo+%dEKEq$D8&8 z?<(TE^-hzQjx*5-uf|N@epBq7El_5noXF|AbvEGaqW^qizy>d-4p*+a5j!0W%xFBg>fF!rM+yZ- zWU~#xupc60$=m5Z$r%LMk(+Ulx}gPf)6;AldF7~%`eHX7Q;kI7sAgr#g1^p|Pr4s` zJA~z&&U@tiNi;0xO(UI&A+jdV$a^_?jd>?pB~ZScM1(}GxW5@f1So{ys~zW2ej5*9 z7c7O4co|uEbW%^k_hHjgdAdEQ)4+z=h~am#;Iyx`6dw&Y%|3L)Hn9C;PyeI_+~=&{ zF;rShzH|H912rK~e!%{ts#*Ke9ri$^n5aghGWxltbkl+gXTr~H^B+jh815HUr0=b= zX^_1$%e6i^fe8oF9!TKSL}(Oeni%-V+DY)h`Zk3X5~QC*|1>(%c^SvptM}Ti49mw? z_Oasi9L`H?JW>b0Hj$X=s`BKzCq7R(-izbazCsTeS@nzM0g~2!ft_&3{%tVnBx=cJr{pFU;!S@dp;b~h|fr` z$++YUX3t}k)ap9l2W;9F#Uah`_ujrBw|i_usO$SV`|t;hEK0>JSdsK&Adf_CdRC7b zOHms8@%E`{T|=rVL3HC*sZA13L8ch!7brnI@C7|Y<*-}hQyy-hW zt$tY1+UDi88_LcCD3{C(>foDF-%SJ&^T5!e*%&LNtIV7o?;Ls2Z5j&M^)DZ)X!CTd zBsv?v)HxV#Jl_$5_or8;{B-$#Vj#($EgxD+>Xr3GZ>pMRBrwsMJ?8Zz5Cx3yb-YU4 z(j5zOglvJY?52HqR51I(=s@gPB9r*)!D{c1PrNc&!cA;gikG&EF_RxpZ-U|q3{`8*CT$P${CO-g&%%l4dTJjMhbhX7e7+{*z$h^)^aiAepbZB+A z8C4b&;(TJ_nJX>5XRdZ<%rimCOu4Gpup34~svZrisb)f$YeN(cNsQ+dTbL99WXWQ%^p1QO#KR z04k|=s0xqpI_4>@u6_%NYAwdbcEH~?!=vDeLPLs(PT_YaQY8j@^g7i2sZ;92WE}nm z`|07Pr5)mE(4E&Oz3g3mL&9XKXxa7V&oAZ~%q>W%U@HJhb?b^fMdJ@%lfD)<;tQUL zPzv2$e9oi1WuVLFlQ!qk0E_07YSDp~Zgtyk;=`r2Z;`(#OGwUL!p0__A5*)t3R=1K z^7QD1x+B{q6$n1(U%mOB|NdJc=KF{KSCDQT%BMb2kgsv;iK=BZ+|xYi>Qo0elLQnc zJF~S1ZKpmcCbh;{HHK0cGJm%BVO|R5Fz~(6smC5jAKj$==z95^;-uN6ubwDe1Gz?6 zLc>f5ZF<9xna8Ox{?xqSRFW_GtPXw|6ns%m&V#Bnm9wxxEw*#RASYCn@DTO#exXcL z3n&7vOm`${aj3#Cjp99|{jkLq*_qv3rNLg#NDPY@bOr{g4 z=Fo)5tm$qR;(iKzW+YhaT|kZrq2V1l@PU}8+WR3LZnIU8r+a8o==c++JdWDy?{!F5Ow>IzPZ11#u8sROjwBVUN&Fx zCd8;M43nM(zkX+BYWk%Im{<6z?ayd=z|JoTZisoW{NT`z3!?!eG1=;A0BSdW?zTwX z>soE?qLzNXr@0?4r1`meP54_kU(YVbdOmy&%5r-}@No5(59=#Q)|CBjH}Rs!a&{5* zP0a2C@a+?rVJee>1bsMQ?cE+eYWvrGy}d}0*C4qcQ)p$_$uMbTtEori#oZ%;tl{U6sQ#8_iFk_^%-D3CXI@Hcos5yQFWxhnP$fgj}vZ4&$!~BCEu}i1EneOE+<`AZF zO#$|!Bqc1%*(hGUGt0C|-7!!~^n^Ealm0^C>V-;Tv<>buNcyei7LQeWQ@p9Y!5emc zY(k!r;+^1*mV#%L9dA8&Jt+&|z8En`QUzoe{;-b7q2~5?HImJ@1UT~UuPM5Az0rXO zix+eHoIQT?ws}2iCoew@pu+>o)50t|G)bMyb5521d_)qT{ZVPVWPdDD$J~uMjU5mW zIZRq%HQm&d=g*sS($CGqy>B3*b@%SLJy}h)kaj?pd#8yD0@fi-vSgS0-ZQ`IF)vw8 zLTW_@>jq-DKCdUsu_B9vng(EWt$H!-dcxoGR5{;F66+PG!y0@2*<_NTb~&^atH;6) z(t|?z2MKXxek57G#9drRuqqq9u5z3jGV2NFuf00CE4=ZsfTGWIu|bE-r&5=O%lmaM z%dmf^$pP?HKVUsYjn0fK#QMfWz4+*CmKQ3JB*xH7wrv3n(k%4I>})Rep)u#J*5#;(Rr%&QD!k| zbtb;=um-LkPmQ*;!f@jQa?EIXR@3Y~lFXV;f=^(} z^;Iyw9|G(C?s8Q&x(DVa+{|&zvS!u*k+TQfzN+(g^pL_*6I0rCK!lrCt@s6Yxk;r) zVPQd%n>}jZF9Bbr>qxsGNQ>o50O21@lsFL{{Ya{lNm#9_4+)XrQ)4!sN6U4c&YcrKN@6eigdDxW?p|=l!Y_^)oxGlbtNPv6z;imWQ&vqZ2g9%U(Z7+rT!+#a7aeU0#k=CO|3x z>4CKOv0)8By1IEw1<11h2e#CG`k&$_?5zKx;^QLAuJ{irtBIB_tFpV7J*$|22*0hM zkPxf5xPXwTn7FtQAFHsSknj`1`&XP_NK{HpTuNAi^9_&B+{vHpW- z^UU4XN0$BG)BkJ&(nCw@zkvV8&O##pY1e;fd;1{l|J#lKQQO-f(8K--!rt56*UQ%a zUY+CL#`k^qe<%7!@!lIL9WST*k7DDh;%@7Uw0HA?smQY5*9h1-*-5F0K_JS4B0?&H zYC@`FLPCn-;)*H~5)w)hY7#<{N}~V9_@8VA#l%G=l_Vj8!osRTLaO2rH9<)w6^Njs zxUiUnu%g7jZDDTSJ~nQ)_W$N}y663ut;GM;R!Z5+-p0q>%fQ{;_1_Vo>*(&|?(OLA z!K$n;&dP1<r}J{}$(K0ZDH5h)Q7At4dv!-vGA)RZ(d)Ra_IkLlSM zAJekXQBg60m{{03I5|0K7{PqpKwdT=C-5H-tb0=;LLv$xA_^ca6)o`pS?)Rk6oi0m zEIu48b^ta777hj0-4_580Dz5+^UuWbZ^6UICBViZ!~ziAS1XbOuyAm2uyJwlad8N6 zaR2};Y#dww9tA!nn~);GBRv}`c25prrI#uBgw)ktB8X=+kAYqjYsa+81t+!@iZCoh0=ds@RQ_qMmfxS!3U{Q7l_dN$;WZISU8CA7ku$9BBlXjvp zHByilq3$^~kydH#h^S;yPC{D0uK=0$c?Z)gnP#n64U#lw#T}Q5iO5wiBd1CFz(JHA zf2Xpe^vm<|ubb0-4Knnp<95HC3URBXbUVFc)gh56jk1}C*S5Bt{$H?@_Gi5X5XJi=%j zLWFy^0a{5tH&3lF_OJMAVU3y;if?Xpk}b~_-s+jZ1K^_Nbd*!CyDlbP>EUAs2PR_Y z$;A$ST)jk}Im{;>^x4U*{f@gnGA}9^k#iLHi+C@^iP^wE_ zO^xg;X^l;#y&-v|*=MDw&B7tGxaN&^HZxGB-zzE_FXF(nABBT09|t`F+1o5|7mEC@ z;Z%Om*0Ndv`zHxtVZ04%qEe}hwy&z>26NQhsD`Htj_f7fu4OG+M6*?b2~QhBh z9U;-oJ*U*NN#q*gTm}1Lc%KePtTJ>^XtT-qBI$^ABQL*F zlFO^ZOG!t8Hz7hLvk`H^*GJ1FVx=5aP%%6jx*ysx_X}I~u|APg_O)+5uM}Yu(mtF( z-^l-X*NM`X<1{@Rlin})sw}hoG8U|)Ls$9kFVorB>FpEty*)W6(AK~KZ@4Tx5w*MM zom0^KrXR%k!XVIGn?Z+q+UbWAPJWqj|1C9}8`sZ=(IvJI7DZm}Tja0KOi6yTwdrD< z)l~O9509dLG*8SrQbDNeWtRB;G_fc_`EzGPF2DG={*>&FTLMJJP$H1Cm;R|4<&=#V zsr*#7!T1gEq`E`a&@8*j?0Gh4zlrHVN80hHx}B9YyvT1nt8+9Xlh?PN`pm#(%TU#Z zez}OKkw%SB6CN-}LPuIQo`nE05s{`(=w=Ctok8$yae{+7dX(u!vUX5#m|7YZcDDZD?jN!?)?I&75^j*QIV(dAvx@$SuSzJEPxFns z^vsFc116`VQ8YR>78Pa4-MYPurHE>_gfDm;DRD(0Gd9`i?C_Y2wgCd!GINhtU9D4D z<}o2b98p-O+sVOt`zr6!{yMXnuQjusXXEBe-iG2?qd0q0?7A20pBg;bDo`G&Pc+KQ zou0V^6oudm2!Bn0NfXPwt^N~C9dye*T01VK0dw3>=#zc_SvLK6IF1JqF$UPoN*!k4 zKOW?DkZGi7Ey@El@2Mh9H67oVkatQv*<@aQGN4n>|RGzAYR@#sQu#sltgFV=8)`o-b z3uyBXH9v?hmOx>c$^}@fEQp-x9bii(ed9BEb?Q(OUGIZD zyG_6%6oC@@skXAzALHU_4+19h;AV6@^G>oD?_!4qd#nHW`MzVio?3D6ji)7X z$xz{uO#qBRQTj6v7Q+@)PgWA+y2r$CU$a2qE?bMx%CDz*nLTa}Os>b^DNu}wZqw#N z;jub-R69l_Zo`bX?+zk$1@uyw*C!beH)yd_HaHMxOi>dxM^X5GG#|n=!u`$ao0lV- z>c|co&^t9}T8eOfKIB2uN*+j8A%j};t4>aO1{%FxGNxVkUP9|@^;aQKpE+r9O$)^y znWv@vvuNQi3_ne$VSCfAFqVSuAfAeMe-K?cpWmSto=~MA{P7*29-JS|aUFS9QW`dN za?5xzsT=ha>pb6Bve+G+G@5zthH7=f@Lj=E$sn4q`V{T}Z~a7bHdJaFi8e`QB(0Su z3P$L>j~tzFywG_m=Q76byM&H4POk;Ylf{LT)nv<)Z+I^Kd}Z6OpbwA;Yz4XY@MTEs1j@f3^(>-^bh&AcpP{K*!gwV^MN9RDFjgdl#Q4p$=m9(c0Ed-EdTXHc&cB3 zP0^##@7@+`0;H95h&j)uwmttGk)?TJW8j--(XG!1jw^^my`H1x)~5{+5a{3`qNhPZ z3H4epA}o7cQtt8hEXBa$*+Q}}irDFH6z(*}8VKEWzu!#U@dYE9GHoe_)X=b$qK_HC zhZUUB%JAJlbfO;3|0vBD+Dz0L zalgc$Zh327P=sr5e=-9*kmaF4Px7|QaE|hTL2}!>3j7H?hko$vp_fK5*}bz#3i`My z4P6$Ht~|yrb)(Q)9(5Dzm7!5cG1VeYWsoOHA%9wGu`xYG=`&54#)$#EoQ|43;f8b8 zQRUmSV(o?U*!jU3-w<+VQ01c&H}3$8ugebx!TRHA!N=!sh8W>l%Te*0AELsgQWw+f ztY6iB6nIf@w6Obj+R5>$YU2An-+GeNK;rM{2PFmQ0Zu#-$Hh`}Bn7j5Uu zB#2coN7Nuogrlu6<#)l{B+CdCo+o^u=zgQF?m;HkHr1;KhM$2i--kWx#Q^b2ij;TQ z9_AER--=i)&$MiLp<|w^h4wZD5W>W!lgvgI=9qHEQ#of){y=h6FefM~k$_rC4AVf9 z-d40^rp`kI)xjCp2U$KaF4DhN@BEW?$*y`{_i4Use(t;OZ&^GGGj9!%;_7L!icJ`0XDu* z$EAfOkeV&@AOu7{j5ch7BRXXWknVTF9pzAH7Px7=07He)5b@JNy-vMDeRikvm9$H= z6+dFN1bz6VP6@W1zvCzxQ27m1`;ce8nH2LWbg;A1DsiesbhI7FR4Uo4csV1t?%l~% zsn#Yx={G<48rkh~%b3d68}VTe8wv=kH+No=ZRrZNaQyqsj3Y?cJIOgp=C!tkUPzAU zNk2LPG<>NVwaM!QOneUx#eEqEL6J!K9rg7@1mp`Xn8$T$hnDquA=`DV1HiKTn(Ulwd}DNTvkY<;fN zDV3kgrp|5LbXFcaEya_8aizXou!tWLUKkRquHP5M|iGp zugRkaka*mi{2hlSzASLq;v#QS{NE}~H8)C`nQG4NNyA@2^l@mZxzWzf8=Ecsn;G5+ z!`ssI-%=DI9nq)I6=~b0$q&o9%JG#vjJQz|5kW5#)827hBwXg9N?m_QZ^ieaHjuz0 zq&?5ZSp|t2y2plXGUsvx;@rzlQ<%JHkVZgB_3=~$ewqzm0aD6E#x2m9QLIH+OfASm zMbR*g_i$*r*A$-!3zz^bt?;`{t;_S22~f@$pH+tx=}wNW!%*`p9Nq!I{bt!47b0pJ ziEl`k*Y)_QKN1)$AQV6Ff96DRF5BYqncE5=ZaSLaL1aM&@t=7qJFZS6)IVd#D$R~L znrkiYO?l?ND$I{DGb4_hZJ%ch2L7E^f$g{-k9{eX2=4E5miBoQoWT%;o|>dz%;ZLz z;xflX^X|hIwUiD6nyje#`F8L(LVE zDHR})MUSw|k{o&(e!mlrY&CnZcHp4w?&j_TJlE=jatrFxg_1=^*uzrg;#rLF!s$1P z_v$&TAf8Q5*{y=taku-_H;h-RWlj+;(JakV(Cu=*59uYT!xjm z47M3dCRmc*XifzO0y%WAOOVvU>C|5i2k&<+M~8oO|G<}?F=mb;S5o3%CRJVJT?gsc z+QSe=)$K2Y8&(}ATUMguLSnt2XxDPt`2t02IxN230UFfZr%o}$N5y{p%da>Ik4gzi zO4Sc$0b8K!>tE_m{OAOh* zUWn);7lPhQFmIJCv@Xt3UlON*GvOY!bTxagD6^}wfgqM2ofW8~3=Q^*N$c7b{zI^R z!}JD!Q#cAmXw*xIPYRVWwD$M1N^WlZQrOnr{aT57fx0PbE)zc+^fGbQHti zMpZJbb`;w+R68cuU6sUM_S|B=D9f|#LTX@Ie9MYsao)`!UYyZQqcWK|V@QekB?CSo zhhHdGulAJ0?-@zH`a1w|BYfHA1^<9{5XGey+Y{qEK%E|_Xgr0Iw*;(f9)($ETq6V? z(4C!&{m5z>Mv#BX$QnX0Xa6K+F%Zw~mfZ!V=xGMLFSbnox?hs{_V*L;Pcb^dOjii8 zjuJfD;5xV4v8K`~1B0n|ZK+c(deDE6t=n~FAop|pFIfqt(Eh#p0d4A4$h5U zQq$)UAF=%MQxNo>2MhahH=-briQuAA-SJ50!{67783rR$r54}KHx zs2Y!c^*i^rSg^&jq?9Iu?^LKGlPW|bCxCSsg=`LM7B?^>e8Etj!U<+N%X)*FM#`t= zCVFH;z7QOOvm15D;i8(48&hisSg#8d3~7P#&6(K9%>!3FjQCI z)?fu&aH`**rtHoe+6$BSWyb5-HZC7}&fC0hC=@v%$p-@YdmV_4y#o5THRm2$(^Y|; zbd~u%0*N~N-N${(%Jtx{82_4jp&R}_G&gCgS$u;mwN0NUfSkz&9O@=!=22QzQJ*fxvt zo)!@CP6BW~k?Gdm43ErS>K>;uD=^o&w^1bZ2(7kwzdMAmUOy%E zA~1V8-oTq2e^J~by0-~6IejZ1sH#phHl01G15dCLU`g^9PFnBS9ht*qEE4mD1Z^L&n(= zx~o^@C`pKN3Bs&kN_=u&2DD{q~j~fPD#0YQiq>0GB*0@9ES3#gf+dFl>HQrW86Ns?+D`4XELXI^mfzK!}i zl$u&?S%d9)>(r|CO;2ikX|&{MQIVhnLRDK{#3fA(ry?h7R5WRL&s+gkg<|UWcb;7g zO=6?)rmAIkE1KG9uw2`t*DqfI=ljWo~f#UCd&*q+mR<&8p6^x*+yT%!~PYo z;L=|A!KG;kNhtlv+?ONB!^1P_g;}vrSOxM2E}ag|?1u{%P*nN%`I$6_X_`6F$dYNk zyfV(2408coH2+fv#`7V690aTgVK7nL$J-`r^E|eM--d0@OvSe?vN6~pf>a8f^5>61 z0;>kiYE(;IKC+M^J~doj-XhE7#7&rgQvW9Uv%rXV=#wiPw3<)oVWAKFmylxg2bgEWazY<{Uf~TV2MVap+@fTih>QK5$FI6<5RV0F%Yv>CM^R1#3r@ zLST%HIiIJ`KXN&@Y6cR;VsX-D< zy1AqeD3oulFd7L<*lptc(W7;1W*4ylquk%blh(at;%+3p6TPSG+b~v!&_{b zbK1F$Fdec_J^JmFZA*!CvZ(;@=7Hb)sTM_XYEHYj?m=bLn7#*N96=Hr{*_a^KjWAM zwBR&+7~XoESfkAkRoc{E~Mb%^H^llsC^4zw(6?rVi4comY(4Kd3hKC@{+u z5Zh|Xz+bJNlGmHe)G+#j7SQ4{cc16W*oWJF6WlSwmZ;+4k&9(M%k}@ua@LmDCKTxO zU=Y4UsAf2}*5~+WJ6|Mx0z3Ps)U1p?S&9%3Si4LR{gOeYuz?Ov>80jpI3u! z$n*EekSJ^(hYQ8{!xKWjx|rw$?&zF>7$}z?lck z)QcG(T_Zw`kEe#bejfhqPXA24&K~kW1(bYzqYaF=I~Uy!nsqfTyy3~z(6ewjxH!(X z%?|!idMNoJXQ~#c+*-Xk!s0lYI)G632u*UfZTik(ahMRBU!Sh+RU1#C`@+<0Q9?h5 zC&(_nDz&Huqp-5?wEC!%MPE-$pb8zcc-c5X^u<=7KA{{ZpXj{M+azMIWIF&*V#=`$&>ho75O53*%JyNi-q~!_+B2;$1j4~L^ri$3oCdmv*xfD(cJm{ zn@mS`jEsqee|;-|`!!jz>5wdKj4_+(6Ys4;k;PPU*2$ZXP=bM#m|9fEY;*$4Dy9b4 zfm3j}k-!`eW|oqiddt)0W}jJPLDrPc0L8NDiHMMT8tNGHYVn6f1wY-puOjpt416+F z;R~iZSizp(m*P}TWH0r^l#RIz7Bm|Ye_TiLgDRyT-Iin{jJ&CqLX_rM9xX(ay0R0Z zUYE^VYUKHidU(R7Wb`c8;TEwp%1`q(OVFOJl1x&^5BV$@V#400MO7;A=|V}uv1B7+ z*RwwwNeUIJNBdv;ErkMwO<4p@HXU}MSqC2wH%blWt_g2)_M^4X@iwN*UffaNB(b+y zg6&iTK|eUEj|fYQe^b*DB~t0u{c6s(8Joj^%6CJEtJ+gmY4{3rEq_Iy@cDV5w=oa zc3_!`%jVc9#Smyut0oEI01qC?mI(Q3xHkR0DW|2ok^IOXraI)xbwQ9y&t`@KzTI>) z`q?2JvcXmy&-@OCJbiL&2%Bcq%EVn;8b0-PIw*~~bQLvw; z#Yb_8lNxc?24^DZ?YMFKq6;b5alu;a!Djx%k&rptrF01TBN-dfIY`WvGbKyHVaR|o zc-9)F7N_cNdrTG2v%#<4LBIZXd*_{fjAmPJXWN3 zSMsSb@RN2U8ZYpml=d7_*{9V?T^RSE*9pIik87Z=wHQ+>pa!KoMN2h!k0-A5CG9e) zOs=UY#brN$APl@4f0Y=k(9x^z>}q&}K2c3Km9JL0FPqyItx6SlK+XzpaeR=6$15=S zWB~4JlCzU4jHx%J+vttaG`sdY)&Y+?OCxhuJ5IUvq=EYH)<}}8owUbpl(gOq?E@I7 z7enJ9a`OowbhR??MGzZ-(QE&ov3jt$a3yS^`%xL(PHkb<>_;`#Kr}LfpxJmC$iu0g zx2p!S)W;WIhjV+B_LDcv4H9)pe=gpKA6NZ~o*0ajW-(^a!GUyQ*IArnKVL-kyjJ>A z(L<-9w~b|i3XA-m|JPiae&ZbE9H2E2w(`oCCRzwtmRO`UyjE#iAEC8cEu*C zbEOuXBme9EqM&~ zC4GZoiet{a-R=MK9^~Al^n4ey)yUY3)P|&^(%78fFf4_ncOa(V=cTuXM1L3?raY@f zKh>+M`g{a9B+E*p{#PtJ^@RhqERgN!SB zp~!;PMj}w)#(q@)U8X%Lpb*GN&CBBRG)F4SB#3_ov&eVR&Z;ut6w0$e00k&S(?>(MN?6?E`R#$4R%Jf^__onlbLL?^} zB`S?+QtZa5Htmb?tlyuHzCK;jr6rOL*hIUE^Gybs zSK~O`TStYyv0^Ah(yl70*sQ-(OUey(89LVg%u2^A2p(0|I9+-BncuA`|I-uNPFeim zTf9)46FS|xcj>5w?~E0^4;ixMu)~b6918F^Vz+c z7`T39>uDC?gmQnmO-bz3uE5#`dSLAr>{zgh! zmGzL7(!dZEX4^lq_{yBWQHQdsER$`k+7-qo^lnQb2y9h6ZSehf;Im1s82426r7Tt? zDPu*?Uo_d0pW_-&rzS$u`(YMm7RVIprot z+wLVcM`hP!^xBK{@-hR0d|Juhc>>xo89(^>O>^H+Uy#@mn$(xN^Yf?8^bT@EQN>dXf8fB(gV$$CQpQN=>`7C~zV`RQ8COA6O zia(-$Qs{p@z=1yNObT*u7I1-ndG0aD= zpV}4KN8T2Z8t+wk2ROUk;p;D0T<7uWP0w@ElaRiI-2pI`T=4N-(#x;22pZizlpikvD~qnD!HOY$sky_ zOmon(#Z=I)^b6}2F?f-z1N^F|YI6ygzsr|D13D>unp*+P`=e@$dZO9P6j-jzZ2OXw z^DAY_K>yTSHe$5!HM|3&_KQ6wS|kx6KPr2F)8>*|_O`9xSyR2OZz{fVMr)f%-Gi6z z_u%7LZ~~nh2Lxa6T zyeHbu8`$H(Xp$>uCt!t2P}CjZ++f3;b!%8%!L6GItA+0e!MnS&;d|}!#g&S6tTmVplsQ7`Y*dwX@mxARL!)T*%PPaeaN~=Y zbc36|V)#a%JPTXB{9FT^v^Rx^qo@Je9+K-dCml(OcAf@<8Rb;ZE1t837SHB2ESu>N zb%KC~lqH?pP6N2%p-v6ID<*FUo|?~M_-`<7XGGe8ILp@)KS_MP60E%t$)#?#ch*O; zb)gGMiTb^>3SLlIWahYRqvGM$51{I})7^P;7M@uRz72_WU#BSDD4q)8+u>g2drs6z z#h<2;W}b;5Fh3NDI88yc{Xvy7an2JY^Hvg?bYk0UFgHyHs;S5VlvAzNyntD6G^|N` ziMl!sCo1wB^QI?IiIBF4pRL?hCE~Em^Hg`wFUGr5)Ly&d;mb-x_OaS|*A|$NN#dUe z=uf$^8tS}V2pG6uCqr~CFwyllw6^ZLgN9PC0gkAlQXKnAcJ)c;2T!THv3jFe=Ri^3rW4P-9s}5jauS<(D+!{M!PtW%H#w0aN-BXS|9;XjFzOKJ_<#tKNRK$g}W>n z$CSqpQ*LUIJtj2MmN+oBZjnl|FgPS~NqyG(I=$5=II=>jsF24zc+ndGAkV%T#Yxt| z*`m6tQmuliy!u<9L~js-E;-p~pe(xFJ*8SD3pwA1uCGj(*y$Mpxt9e!>4`% zBXU98bO)X@^6ypZhQl`a`ve|x7NNYLP~61+xM+`#?z*Of6Hgo6BAbiZ9nM~yK0!%Y zS@2`M%Sf(uYMSXZmBax3_l(|uBZ_I|QVLAj;D{H;kiGY|&+CTx^R0p_;_(+Zb4w2m zE3R)P5JRLewg$bw41|A5SeE~ce@r>jLAZ#Pyfk_x_J~V!H0VtH(k$wO2tyjx0=`94_bhgx#tQCj?-1QY$G8k~5eI0!ku;&8{3<%sD}z ztoR#`z+M0;p(2F6+Q48t<&QxwtJ{b@I#FsI4_b)yiPw8$MX9QQ3TNKc&x=6u0uzL2 zCDuB)HH+oE^%1qTR07YAYaC+-iNm;uh0anhA-vKq*>-gXa`4s=`zER-4iy5dUb`9L z>d1J{eY0nZ$-hY{)kt|M6$hx>zi_JKdYe7Kt3P5)JnJXR480sBF!4q5%TlFAYMB|E z-teD3$cW1C!+Gm@VB?5u>)#=g^S)Hpg)N}hAzaPd!bxtlRBU3h<;52U*VAYo#1Ap5 zgI|7!q$z!eAM#~pKT{leoIk9jp2bNl@^-f$_{!2akD`JZuhHVXwD^T=)2eMNW`mlm z+B$b@W5?tdxjcC-u=MQ-b*aGlp!UtJjv36$`t`1wb!z_NhE!i8$$-aUY{sVwWO8IX zlLe4j7(eJ&4!UDnTC=W1c+iGh(L@2MAsiHvchL_5t<+iG7@O}9KVzhZa%9BY9qEkc zoK+q*wmdf4P;Hp~c$<$0->%}y60%78wFRDmp z+oUEB2}T=^+466&5Ur6dF*;@ogOBLz^5to8hUpw`6b!vlqN9@9c~eG5K$YCDy-*OC z{h^m~RjjGx`l;cYy!tYq0}*^5`*tdbK?Xgbv>=#bnfY@Co4NVb{1D-4&*rFT`z%C`b+!i3^v}4C8A$U2mu# zh*Nax4bOQiljuDjmNu~A?<)MLenXtzq}`LG9nw+A{37zFg8e%-HU#R-~hU}I(W zw1n6;%FNC#E~|zZrS{XERg9G5ad7N#WB>e1OTqMBOTtSjhcBLY+-^<}*Nu9}x+i3o zZq~hF{Zlb57S0?&?!Kkj;wNrw>D`Bsy`<>BUmo?6XMaLJ(irQI;09ah;`(!;F1%mv zn#KkmDz7XScPP0CQ}0_SaJ03bDiowlVk=@Uvh`5jId#ZlIbB}91R*X0H6D_&cUj9R zX~v@xP5K-tuskhin&o=Gyf62Nv0H=RHluz_g7NdT5;OZk`@Ym@3Rr>$u^Nq_j;(Q$ zirMp;*+A+F<$4WP=Clf}N0V<6^y6t9JhWmMOWEEe>sbU)s3U~?8*0N+bQf#RLcRa3=Fz@J&wn$&osFCxuO zOi5H&a?^r6aR8RwKL+)}jN44D1`Hytwvfn6i(Z{y=sX4mnQ{DR*)49*&QcPYG?Fv1 z(}JJ0*4Ac&LJhz_x&%?ttdYqEP*J8?LJ&uOS80v){Dy*^jj34mv_!kTGPCVVsiRm_SPvD7F#(L*w52&FCIc|8dLCx&04l6?j&G&$?P0~jtQB-OIOx2o1^`stq+rFbRp zVb81eCF@AaYWYHFwebLCO?G*4dT$vYSPwZZT>OsAdML$%56i>71H|)7{&El#dW?UO z=&f71gBRfHU*hv->oDIc!nt`(1*e*83z1%i>AfHi1>3vCdeMFbb!Ni^5p6N&5n5}A}< z6i)2@(u8Iz5zWX>QY`bl29Djg{AMxoc{H>}?oaH-lkX0?2F>w?!{?xf21evlw# zObpDzo?4gVVv%E}C+j&I&S64ck%Y&lf`_fmU09r{{IQg-U)58OPeb1`XTCs!&w-$d z8vOMmNomN7l5v763q%L`Qp_D-dfHpoWng|){xs{iS8Z~AYZ zD_o2`cNOUA!_lX;S;^#67V%hm7NNEfF`_F0vR(yzl9U`?0&644{?cM}udj=l*T>C? z1%A*P;-eRDx?@jF7V;Xjs|AzR`u6rc#TMHaZc409-J^&8G>M-9IEjZ;lh(E&MN<)O)f3 literal 0 HcmV?d00001 diff --git a/docs/demo/oe-brixton-hands-stide1-768x400.jpg b/docs/demo/oe-brixton-hands-stide1-768x400.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6324f0cf7a23febbda8c798608cdb289e47750f GIT binary patch literal 59769 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

    PPcS#Q9h+>y~}d<7x$qk>lCjc3$_*75@)I=ivy2 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�GV@)4*>X}`svgK-xfM#~v8gQMjrQ*npr(@@@u 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 literal 0 HcmV?d00001 diff --git a/docs/demo/open-ecommerce-website-design-london-272x90.png b/docs/demo/open-ecommerce-website-design-london-272x90.png new file mode 100644 index 0000000000000000000000000000000000000000..a7dce645abcfcdcd35fb4ac195cce8f654b1f8dc GIT binary patch literal 2317 zcma)7doZMf(hCGQ-Ka&&b3Bl!P48pUOO&$(*x@-?xxnG{(6o*mEO(iq3 zZl7%hOIGhKn}{Hr6b0g+)~)SNZ`tVZgTBu>=BVcF4hmJx#$(Q&re+SD|Gsskztj}v zSOWm0RU5F9wn^Pq0)XtV7sUH;SB^Si74kJ<@oDoW+2vuRv{!qY7)9|_!M>+uC5_Th zz2MhMozgGGpn83M#z+uk7V=>E>(JoU`IK;BG7bdKrK4hun_f7UsbUot`CG5{^GN0p zyO%Jk>r&V_*<+uGM1eyZUOG@{){23$eWuSF@3|ZHKlz>scFh)pc%9um=RkB2Q$dw2 ze2QkqU4s_2X$+#U)LXWORJ-2IvlVvp5pg}rxY5~(9Zg8HnsDr+8AMm`i-Y6Z`ILc(_Sy09>Tm~@J)jdGV5 zv~wK9oV(+Ck|eG2FcG3QY%1lc;OkAtIAvTMu^fNQGRE>Y zrbrCiK@M;xa$L2^q>q>fDaR!6>0WK$C^5bY86uygm`BU`vQ_620t$Byu^xApY!ywx zSW;NwUsxGf6chSGWu@kFu>cVQL-(32loq*lj`jCmQH*R43E9Y5kyJ7-A)`nq`W%e& z%AmO5Ift>a*}D{L*S!QERZvh&X&nb=7Sc%{5vAM4c)n*8hOs2Rk7Aa;4&QWVg^i8%OaVsa%Gw*y)f3buVX?gv$`QhqOmi z5l2p4QKrX=Fj$WVO1f|Up{xw3&b<)bzgzzIT(tvroIaYQd z5?&+)vk|pTMgVFgd9EjAj)=yI86 z4wM>c#JmS)F{(p$4(!Ct+nJpJaLQuExxsTpCNOa&GBc*v+oI8XG5IOox(9WQH(Hzr zegYP_8q^KnC^0bGV8(?o~;$!n3+DQ28HGUR@hNUeEp?W5-m>xGA{M*{9GcuJn}-SaDId} z*fY_u>9L$iJT71#2TnVY6$xUEp!Jr9{kw6+!i+v`^f#m*^Ud?ra2uQ35J~>cX(v(D z>f?c0lQ|=@c0-)t$vl7%F)H$G@uCr6GI+kle3Os-&@9}LuE5N@>$zHuCm1*8^xT?? zSF7SI=WI1`p8FDZw;9&NdX;GffL{q%dgNA+B0u7K0LV85Xm-5l>3BZK1c07)2}>Pt zeNxAxW?%rUFnEw%$mF4bQ1&|>;P}KbIU`{E3s*&;NeG~k0G}VfBsHOvrr`m#sHuXV z(Mj|d?tJ9>CMY0;p`vF1747Yy?Gt1?{oun?$I=r2K(H)S6LF@DZUbSUG-YCHKCc*~>l0++OJ)+EnDm@JFKfh_Mjj3p9 zv`?-#+FJ^N?$ z6-@lBm&%B=`hEgUac8q0t&CsKxD^^Uwp5bQ{(yBzWra7@hiy2r^HTL@=;(+KneYS> z*5jV6=M?r#kQN%YrWsksEuTxw?@Z88BP3U~3C;@b>bG$=eB6EufSpW8yh oErgya0wI6bD)YYx5m7-GLlVDFxY)C8$Rz;wHcsH9Q~uZg14{1k8~^|S literal 0 HcmV?d00001 diff --git a/docs/demo/open-ecommerce-website-design-london-300x72.png b/docs/demo/open-ecommerce-website-design-london-300x72.png new file mode 100644 index 0000000000000000000000000000000000000000..280b06b5235e1d869c447dcc07123cc5333eb521 GIT binary patch literal 9679 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 P07F$#Q=vxA>iz!!2B*?# literal 0 HcmV?d00001 diff --git a/docs/demo/open-ecommerce-website-design-london.png b/docs/demo/open-ecommerce-website-design-london.png new file mode 100644 index 0000000000000000000000000000000000000000..676095c883546ff7583f8ac09f8c6312b2b79a62 GIT binary patch literal 3008 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 N5K`YvuTBU3{GT@Y#!mnM literal 0 HcmV?d00001 diff --git a/web/app/themes/oe-brixton/.babelrc b/web/app/themes/oe-brixton/.babelrc old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/.bowerrc b/web/app/themes/oe-brixton/.bowerrc old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/.gitignore b/web/app/themes/oe-brixton/.gitignore old mode 100755 new mode 100644 index 24fa578..d4fc935 --- a/web/app/themes/oe-brixton/.gitignore +++ b/web/app/themes/oe-brixton/.gitignore @@ -2,7 +2,10 @@ *.sass-cache* *.log node_modules/ +assets/stylesheets/ assets/components/ assets/javascript/vendor/ +assets/javascript/foundation.js +assets/javascript/custom/demosite.js packaged/ -wpcs/ +wpcs/ \ No newline at end of file diff --git a/web/app/themes/oe-brixton/.travis.yml b/web/app/themes/oe-brixton/.travis.yml old mode 100755 new mode 100644 index eeb2ea1..a029c71 --- a/web/app/themes/oe-brixton/.travis.yml +++ b/web/app/themes/oe-brixton/.travis.yml @@ -1,8 +1,8 @@ # Travis CI (MIT License) configuration file for the FoundationPress WordPress theme. # @link https://travis-ci.org/ -# For use with the oe-brixton (based in foundationPress by ole fredrick) WordPress theme. -# @link https://github.com/open-ecommerce/masters-wp +# For use with the FoundationPress WordPress theme. +# @link https://github.com/olefredrik/foundationpress # Declare project language. # @link http://about.travis-ci.org/docs/user/languages/php/ @@ -75,9 +75,9 @@ before_script: # Create WordPress database. - mysql -e 'CREATE DATABASE wordpress_test;' -uroot # Install CodeSniffer for WordPress Coding Standards checks. - - git clone https://github.com/squizlabs/PHP_CodeSniffer.git php-codesniffer + - git clone https://github.com/squizlabs/PHP_CodeSniffer.git php-codesniffer --depth=1 # Install WordPress Coding Standards. - - git clone https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git wordpress-coding-standards + - git clone https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git wordpress-coding-standards --depth=1 # Hop into CodeSniffer directory. - cd php-codesniffer # Set install path for WordPress Coding Standards. diff --git a/web/app/themes/oe-brixton/404.php b/web/app/themes/oe-brixton/404.php old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/CHANGELOG.md b/web/app/themes/oe-brixton/CHANGELOG.md old mode 100755 new mode 100644 index 1784979..14b783a --- a/web/app/themes/oe-brixton/CHANGELOG.md +++ b/web/app/themes/oe-brixton/CHANGELOG.md @@ -1,11 +1,267 @@ # Change Log +## [v2.9.0](https://github.com/olefredrik/FoundationPress/tree/v2.9.0) (2016-12-15) +[Full Changelog](https://github.com/olefredrik/FoundationPress/compare/v2.8.0...v2.9.0) + +**Closed issues:** + +- how to @import absolute path write? [\#924](https://github.com/olefredrik/FoundationPress/issues/924) +- Version number on files not updated to 2.8.0 [\#918](https://github.com/olefredrik/FoundationPress/issues/918) +- Is FoundationPress Updated? [\#916](https://github.com/olefredrik/FoundationPress/issues/916) +- jQuery error from 'source' folder [\#910](https://github.com/olefredrik/FoundationPress/issues/910) +- Sudden error when running "npm run watch" [\#890](https://github.com/olefredrik/FoundationPress/issues/890) +- node.js [\#882](https://github.com/olefredrik/FoundationPress/issues/882) +- Error: Cannot find module 'sparkles' [\#867](https://github.com/olefredrik/FoundationPress/issues/867) +- Error during npm run build [\#866](https://github.com/olefredrik/FoundationPress/issues/866) +- data-equalize-on not working [\#813](https://github.com/olefredrik/FoundationPress/issues/813) +- using xlarge and xxlarge causes warnings [\#801](https://github.com/olefredrik/FoundationPress/issues/801) +- Modify topbar to accordion menu [\#715](https://github.com/olefredrik/FoundationPress/issues/715) + +**Merged pull requests:** + +- Foundation v6.3.0 [\#926](https://github.com/olefredrik/FoundationPress/pull/926) ([olefredrik](https://github.com/olefredrik)) +- Added XLarge [\#917](https://github.com/olefredrik/FoundationPress/pull/917) ([alexbohariuc](https://github.com/alexbohariuc)) +- Order placeholders [\#913](https://github.com/olefredrik/FoundationPress/pull/913) ([olefredrik](https://github.com/olefredrik)) +- Update navigation.php [\#911](https://github.com/olefredrik/FoundationPress/pull/911) ([mrsWeasel](https://github.com/mrsWeasel)) + +## [v2.8.0](https://github.com/olefredrik/FoundationPress/tree/v2.8.0) (2016-10-21) +[Full Changelog](https://github.com/olefredrik/FoundationPress/compare/v2.7.1...v2.8.0) + +**Closed issues:** + +- Theme has many PHPCS warnings [\#907](https://github.com/olefredrik/FoundationPress/issues/907) +- Getting error in npm start [\#906](https://github.com/olefredrik/FoundationPress/issues/906) +- Is interchange broken? [\#902](https://github.com/olefredrik/FoundationPress/issues/902) +- npm run watch fails [\#899](https://github.com/olefredrik/FoundationPress/issues/899) +- "Unexpected character '`'" running npm run production or package [\#898](https://github.com/olefredrik/FoundationPress/issues/898) +- git clone error [\#892](https://github.com/olefredrik/FoundationPress/issues/892) +- Cannot find open [\#889](https://github.com/olefredrik/FoundationPress/issues/889) +- Drop Down Menu Vertical Class can't be removed [\#888](https://github.com/olefredrik/FoundationPress/issues/888) +- Installing FoundationPress Issues [\#878](https://github.com/olefredrik/FoundationPress/issues/878) +- Scss import failing [\#804](https://github.com/olefredrik/FoundationPress/issues/804) +- How to apply styles for different screen sizes [\#791](https://github.com/olefredrik/FoundationPress/issues/791) + +**Merged pull requests:** + +- Featured image optimization [\#909](https://github.com/olefredrik/FoundationPress/pull/909) ([EricRihlmann](https://github.com/EricRihlmann)) +- Reformat code to fit WP PHPCS standards [\#908](https://github.com/olefredrik/FoundationPress/pull/908) ([Leland](https://github.com/Leland)) +- Added Interchange on featured Images [\#905](https://github.com/olefredrik/FoundationPress/pull/905) ([alexbohariuc](https://github.com/alexbohariuc)) +- Fix 'Posted on ...' for all languages [\#901](https://github.com/olefredrik/FoundationPress/pull/901) ([Martin4ndersen](https://github.com/Martin4ndersen)) +- Add Danish language and fix translation issue with "Posted on ..." [\#900](https://github.com/olefredrik/FoundationPress/pull/900) ([Martin4ndersen](https://github.com/Martin4ndersen)) +- Typo in dropdown font size setting [\#897](https://github.com/olefredrik/FoundationPress/pull/897) ([conor-hc](https://github.com/conor-hc)) +- Fix Travis CI Build Errors [\#896](https://github.com/olefredrik/FoundationPress/pull/896) ([EricRihlmann](https://github.com/EricRihlmann)) +- Normalize SCSS [\#894](https://github.com/olefredrik/FoundationPress/pull/894) ([EricRihlmann](https://github.com/EricRihlmann)) +- Turkish language files added [\#891](https://github.com/olefredrik/FoundationPress/pull/891) ([nurdankiratlioglu](https://github.com/nurdankiratlioglu)) +- Updated README.md with info on packaging the theme to a zip file [\#864](https://github.com/olefredrik/FoundationPress/pull/864) ([colin-marshall](https://github.com/colin-marshall)) + +## [v2.7.1](https://github.com/olefredrik/FoundationPress/tree/v2.7.1) (2016-09-07) +[Full Changelog](https://github.com/olefredrik/FoundationPress/compare/v2.7.0...v2.7.1) + +**Closed issues:** + +- Disable body top padding when using fixed on top bar? [\#885](https://github.com/olefredrik/FoundationPress/issues/885) +- FP FontAwesome not working/not active? [\#884](https://github.com/olefredrik/FoundationPress/issues/884) +- Infinite Scroll [\#880](https://github.com/olefredrik/FoundationPress/issues/880) +- JS error in Safari [\#874](https://github.com/olefredrik/FoundationPress/issues/874) + +**Merged pull requests:** + +- Use System UI fonts [\#886](https://github.com/olefredrik/FoundationPress/pull/886) ([olefredrik](https://github.com/olefredrik)) +- Update cs\_CZ.po [\#883](https://github.com/olefredrik/FoundationPress/pull/883) ([vladodriver](https://github.com/vladodriver)) + +## [v2.7.0](https://github.com/olefredrik/FoundationPress/tree/v2.7.0) (2016-09-04) +[Full Changelog](https://github.com/olefredrik/FoundationPress/compare/v2.6.2...v2.7.0) + +**Implemented enhancements:** + +- Responsive images with FoundationPress and Interchange? [\#876](https://github.com/olefredrik/FoundationPress/issues/876) + +**Fixed bugs:** + +- Blog pagination issue w/ woocommerce - links shift from /blog to /store pages [\#836](https://github.com/olefredrik/FoundationPress/issues/836) + +**Closed issues:** + +- Building a source project using the packaged archive. [\#881](https://github.com/olefredrik/FoundationPress/issues/881) +- Install issue [\#877](https://github.com/olefredrik/FoundationPress/issues/877) +- Caret-down or down arrow not showing when navigation has submenus [\#873](https://github.com/olefredrik/FoundationPress/issues/873) +- Error: Cannot find module './\_assignValue' [\#870](https://github.com/olefredrik/FoundationPress/issues/870) +- SSL with FoundationPress [\#868](https://github.com/olefredrik/FoundationPress/issues/868) +- README.md FoundationPSD link dead [\#865](https://github.com/olefredrik/FoundationPress/issues/865) +- Layout glitch [\#863](https://github.com/olefredrik/FoundationPress/issues/863) +- npm install issues [\#861](https://github.com/olefredrik/FoundationPress/issues/861) +- Browser Sync expects different task handle in Gulpfile [\#860](https://github.com/olefredrik/FoundationPress/issues/860) +- ACF / Repeater Image Gallery / Light Box conflict [\#853](https://github.com/olefredrik/FoundationPress/issues/853) +- Current steps to create offcanvas menu on the right? Removed from Customizer? [\#852](https://github.com/olefredrik/FoundationPress/issues/852) +- How can I get the mobile menu to be on tablet devices as well? [\#847](https://github.com/olefredrik/FoundationPress/issues/847) +- Only a portion of styles from \_front.scss are compiling. [\#846](https://github.com/olefredrik/FoundationPress/issues/846) +- Invalid CSS after "}": expected "}", was "" [\#845](https://github.com/olefredrik/FoundationPress/issues/845) +- Having The Mobile Menu Top Bar Active On iPads [\#844](https://github.com/olefredrik/FoundationPress/issues/844) +- npm install and npm run watch errors [\#843](https://github.com/olefredrik/FoundationPress/issues/843) +- npm run watch issue [\#841](https://github.com/olefredrik/FoundationPress/issues/841) +- fullPage.js npm error [\#838](https://github.com/olefredrik/FoundationPress/issues/838) +- .. [\#837](https://github.com/olefredrik/FoundationPress/issues/837) +- Colin's centered menu with logo \(zurb building block\) [\#834](https://github.com/olefredrik/FoundationPress/issues/834) +- Suggestion: Move template-parts inside page-templates [\#833](https://github.com/olefredrik/FoundationPress/issues/833) +- Autoprefixer missing -webkit prefixes [\#826](https://github.com/olefredrik/FoundationPress/issues/826) +- What is the workflow for moving a local dev site to a new computer? [\#817](https://github.com/olefredrik/FoundationPress/issues/817) +- Toggle search box not working on desktop view [\#802](https://github.com/olefredrik/FoundationPress/issues/802) +- NPM Error When Using "npm install" [\#790](https://github.com/olefredrik/FoundationPress/issues/790) +- Paragraph Font Size in \_settings.scss [\#786](https://github.com/olefredrik/FoundationPress/issues/786) +- Search by author of post? [\#785](https://github.com/olefredrik/FoundationPress/issues/785) +- \_settings.scss and custom CSS [\#781](https://github.com/olefredrik/FoundationPress/issues/781) +- NPM errors after migrating project to a new Mac [\#773](https://github.com/olefredrik/FoundationPress/issues/773) +- WordPress Site Icon [\#766](https://github.com/olefredrik/FoundationPress/issues/766) +- localhost:3000 issue [\#749](https://github.com/olefredrik/FoundationPress/issues/749) +- Sticky Footer [\#674](https://github.com/olefredrik/FoundationPress/issues/674) +- Bower install js compile errors [\#673](https://github.com/olefredrik/FoundationPress/issues/673) +- Errors on installation [\#665](https://github.com/olefredrik/FoundationPress/issues/665) + +**Merged pull requests:** + +- Fix broken link [\#879](https://github.com/olefredrik/FoundationPress/pull/879) ([olefredrik](https://github.com/olefredrik)) +- Add missing comment on variable [\#869](https://github.com/olefredrik/FoundationPress/pull/869) ([olefredrik](https://github.com/olefredrik)) +- Remove executable permissions for files [\#858](https://github.com/olefredrik/FoundationPress/pull/858) ([pmodin](https://github.com/pmodin)) +- Add an .editorconfig file [\#857](https://github.com/olefredrik/FoundationPress/pull/857) ([Benjaminsson](https://github.com/Benjaminsson)) +- Fix WP coding standards violations [\#855](https://github.com/olefredrik/FoundationPress/pull/855) ([olefredrik](https://github.com/olefredrik)) +- Hebrew translations [\#850](https://github.com/olefredrik/FoundationPress/pull/850) ([elicohenator](https://github.com/elicohenator)) +- Bugfix for figure tag [\#842](https://github.com/olefredrik/FoundationPress/pull/842) ([derweili](https://github.com/derweili)) +- Introducing the\_post\_navigation and edit\_post\_link [\#839](https://github.com/olefredrik/FoundationPress/pull/839) ([Eccola](https://github.com/Eccola)) +- Update theme-support.php [\#835](https://github.com/olefredrik/FoundationPress/pull/835) ([Gilmoursa](https://github.com/Gilmoursa)) +- Switch to gulp-clean-css from deprecated gulp-minify-css [\#824](https://github.com/olefredrik/FoundationPress/pull/824) ([jmbarlow](https://github.com/jmbarlow)) + +## [v2.6.2](https://github.com/olefredrik/FoundationPress/tree/v2.6.2) (2016-06-09) +[Full Changelog](https://github.com/olefredrik/FoundationPress/compare/v2.6.1...v2.6.2) + +**Closed issues:** + +- Advice on Excessively Large File Size? [\#831](https://github.com/olefredrik/FoundationPress/issues/831) +- no styles [\#830](https://github.com/olefredrik/FoundationPress/issues/830) +- OffCanvas menu -webkit- prefixes in Safari [\#829](https://github.com/olefredrik/FoundationPress/issues/829) +- npm install error [\#827](https://github.com/olefredrik/FoundationPress/issues/827) +- Responsive Menu not toggling [\#825](https://github.com/olefredrik/FoundationPress/issues/825) +- Mobile Menu Accordion Menu - Expand "active" submenu parent automatically [\#822](https://github.com/olefredrik/FoundationPress/issues/822) +- Google Fonts are being added automatically [\#818](https://github.com/olefredrik/FoundationPress/issues/818) +- NPM run production not working with node.js 6.1.0 \(Solved\) [\#815](https://github.com/olefredrik/FoundationPress/issues/815) +- Extra Question For Issues [\#811](https://github.com/olefredrik/FoundationPress/issues/811) +- \ not showing any pages [\#810](https://github.com/olefredrik/FoundationPress/issues/810) +- npm install error [\#809](https://github.com/olefredrik/FoundationPress/issues/809) +- php CodeSniffer not working - Windows 10 [\#808](https://github.com/olefredrik/FoundationPress/issues/808) +- path.js throw error, Path must be a string. Received ' + inspect\(path\); [\#807](https://github.com/olefredrik/FoundationPress/issues/807) +- Logged in to my WP install via Browser Sync [\#806](https://github.com/olefredrik/FoundationPress/issues/806) +- FoundationPress installation via npm failed [\#805](https://github.com/olefredrik/FoundationPress/issues/805) +- Working with an "old" FoundationPress [\#800](https://github.com/olefredrik/FoundationPress/issues/800) +- Every little project requires 70,000 files? [\#797](https://github.com/olefredrik/FoundationPress/issues/797) +- Error trying to compile foundation.scss [\#796](https://github.com/olefredrik/FoundationPress/issues/796) +- can't upload on external save via SFTP [\#794](https://github.com/olefredrik/FoundationPress/issues/794) +- top-bar fixed [\#787](https://github.com/olefredrik/FoundationPress/issues/787) +- Strange character \( ` \) appearing in site text - this theme only [\#782](https://github.com/olefredrik/FoundationPress/issues/782) +- Missing modules when running npm run build or npm install [\#780](https://github.com/olefredrik/FoundationPress/issues/780) +- BwoserSync not working on older project after installing new project [\#779](https://github.com/olefredrik/FoundationPress/issues/779) +- about template page-sidebar-right [\#778](https://github.com/olefredrik/FoundationPress/issues/778) +- Component loading issue when building SCSS. [\#776](https://github.com/olefredrik/FoundationPress/issues/776) +- Significance of this return after running "watch"? [\#775](https://github.com/olefredrik/FoundationPress/issues/775) +- More info on Motion UI [\#772](https://github.com/olefredrik/FoundationPress/issues/772) +- Install foundationPress twice in one themes directory? [\#769](https://github.com/olefredrik/FoundationPress/issues/769) +- Sass Mixins with FoundationPress [\#765](https://github.com/olefredrik/FoundationPress/issues/765) +- errors in sitemap.xml due to functions.php [\#753](https://github.com/olefredrik/FoundationPress/issues/753) +- Adding a second menu to mobile nav? [\#728](https://github.com/olefredrik/FoundationPress/issues/728) +- Fonts issues. [\#703](https://github.com/olefredrik/FoundationPress/issues/703) +- Noob question regarding fonts and how to set them up [\#702](https://github.com/olefredrik/FoundationPress/issues/702) +- Push changes to server with Git, but with whole assets? [\#700](https://github.com/olefredrik/FoundationPress/issues/700) +- Reveal does not display properly on a page with right sidebar layout [\#696](https://github.com/olefredrik/FoundationPress/issues/696) +- Off canvas menu won't open/reveal left [\#682](https://github.com/olefredrik/FoundationPress/issues/682) +- SCSS Not Compiling Because [\#676](https://github.com/olefredrik/FoundationPress/issues/676) +- PostInstall issues [\#672](https://github.com/olefredrik/FoundationPress/issues/672) +- How to make a sticky nav? [\#653](https://github.com/olefredrik/FoundationPress/issues/653) + +**Merged pull requests:** + +- Autoprefixer compability [\#832](https://github.com/olefredrik/FoundationPress/pull/832) ([olefredrik](https://github.com/olefredrik)) +- Add foundation.css as editor styles [\#828](https://github.com/olefredrik/FoundationPress/pull/828) ([derweili](https://github.com/derweili)) +- Update cs\_CZ.po [\#823](https://github.com/olefredrik/FoundationPress/pull/823) ([vladodriver](https://github.com/vladodriver)) +- Updated Issue Template with New Questions [\#821](https://github.com/olefredrik/FoundationPress/pull/821) ([LukePettway](https://github.com/LukePettway)) +- Add missing argument to fix travis CI build [\#795](https://github.com/olefredrik/FoundationPress/pull/795) ([minihays](https://github.com/minihays)) +- Fix typo in gulpfile [\#793](https://github.com/olefredrik/FoundationPress/pull/793) ([perryst5](https://github.com/perryst5)) +- Update german translation [\#789](https://github.com/olefredrik/FoundationPress/pull/789) ([jgierer12](https://github.com/jgierer12)) +- fix missing \ tag [\#788](https://github.com/olefredrik/FoundationPress/pull/788) ([jgierer12](https://github.com/jgierer12)) +- remove favicon [\#784](https://github.com/olefredrik/FoundationPress/pull/784) ([15emedoctor](https://github.com/15emedoctor)) +- Create cs\_CZ.po [\#777](https://github.com/olefredrik/FoundationPress/pull/777) ([vladodriver](https://github.com/vladodriver)) +- Take 2: Optimize responsive images for 3/4 and full width templates [\#771](https://github.com/olefredrik/FoundationPress/pull/771) ([EricRihlmann](https://github.com/EricRihlmann)) +- No download historical file by Travis [\#770](https://github.com/olefredrik/FoundationPress/pull/770) ([mik-laj](https://github.com/mik-laj)) +- Portuguese update \(pt\_PT\) [\#768](https://github.com/olefredrik/FoundationPress/pull/768) ([pedro-mendonca](https://github.com/pedro-mendonca)) + +## [v2.6.1](https://github.com/olefredrik/FoundationPress/tree/v2.6.1) (2016-03-10) +[Full Changelog](https://github.com/olefredrik/FoundationPress/compare/v2.6.0...v2.6.1) + +**Fixed bugs:** + +- Responsive images WP 4.4 [\#607](https://github.com/olefredrik/FoundationPress/issues/607) +- Stripping Image Classes [\#532](https://github.com/olefredrik/FoundationPress/issues/532) + +**Closed issues:** + +- Essential Grid Plugin on Mobile [\#578](https://github.com/olefredrik/FoundationPress/issues/578) +- Mobile Menu doesn't load [\#485](https://github.com/olefredrik/FoundationPress/issues/485) + +**Merged pull requests:** + +- Remove local server url from gulpfile [\#764](https://github.com/olefredrik/FoundationPress/pull/764) ([olefredrik](https://github.com/olefredrik)) + +## [v2.6.0](https://github.com/olefredrik/FoundationPress/tree/v2.6.0) (2016-03-10) +[Full Changelog](https://github.com/olefredrik/FoundationPress/compare/v2.5.1...v2.6.0) + +**Implemented enhancements:** + +- Responsive images [\#657](https://github.com/olefredrik/FoundationPress/pull/657) ([olefredrik](https://github.com/olefredrik)) + +**Closed issues:** + +- bower components \_global overriding scss/global/\_setting [\#762](https://github.com/olefredrik/FoundationPress/issues/762) +- Fresh install changes to \_settings.scss not cascading consistently [\#760](https://github.com/olefredrik/FoundationPress/issues/760) +- foundation.css file throw an 404 error on childthemes [\#758](https://github.com/olefredrik/FoundationPress/issues/758) +- Homepage replicate across all pages [\#755](https://github.com/olefredrik/FoundationPress/issues/755) +- Error messages always displayed when using Abide validation [\#719](https://github.com/olefredrik/FoundationPress/issues/719) + +**Merged pull requests:** + +- Bug fix settings file [\#763](https://github.com/olefredrik/FoundationPress/pull/763) ([EricRihlmann](https://github.com/EricRihlmann)) +- Add the new foundation color palette mixin [\#761](https://github.com/olefredrik/FoundationPress/pull/761) ([olefredrik](https://github.com/olefredrik)) + +## [v2.5.1](https://github.com/olefredrik/FoundationPress/tree/v2.5.1) (2016-03-08) +[Full Changelog](https://github.com/olefredrik/FoundationPress/compare/v2.5.0...v2.5.1) + +**Fixed bugs:** + +- Dropdown Menu Arrows [\#752](https://github.com/olefredrik/FoundationPress/issues/752) + +**Closed issues:** + +- FoundationPress Grid [\#751](https://github.com/olefredrik/FoundationPress/issues/751) +- Git Ignores Files Inside FoundationPress Theme Folder. [\#750](https://github.com/olefredrik/FoundationPress/issues/750) +- gulp file errors, FP 2.5, npm run watch, Windows 7 x64 [\#748](https://github.com/olefredrik/FoundationPress/issues/748) +- Npm installation stop working... [\#744](https://github.com/olefredrik/FoundationPress/issues/744) +- Flexbox grid? [\#741](https://github.com/olefredrik/FoundationPress/issues/741) +- Incorrect GCC [\#739](https://github.com/olefredrik/FoundationPress/issues/739) +- Can't add or style elements of main content [\#736](https://github.com/olefredrik/FoundationPress/issues/736) +- adding the UNCSS task in my gulpfile.js [\#727](https://github.com/olefredrik/FoundationPress/issues/727) +- Offcanvas menu not working [\#720](https://github.com/olefredrik/FoundationPress/issues/720) +- jquery.js conflict with popular wordpress plugins [\#645](https://github.com/olefredrik/FoundationPress/issues/645) + +**Merged pull requests:** + +- Feature/child theme support [\#759](https://github.com/olefredrik/FoundationPress/pull/759) ([olefredrik](https://github.com/olefredrik)) +- fix sidebar search to use input-group [\#757](https://github.com/olefredrik/FoundationPress/pull/757) ([ryanfrawley](https://github.com/ryanfrawley)) +- Fix dropdown menu arrows [\#754](https://github.com/olefredrik/FoundationPress/pull/754) ([olefredrik](https://github.com/olefredrik)) +- Change off-canvas menu height to affect all menus [\#747](https://github.com/olefredrik/FoundationPress/pull/747) ([bej-soan](https://github.com/bej-soan)) +- Separate javascript files with semi-colon when concatenating [\#746](https://github.com/olefredrik/FoundationPress/pull/746) ([jontro](https://github.com/jontro)) +- Remove duplicate line from foundation.scss [\#743](https://github.com/olefredrik/FoundationPress/pull/743) ([fourhexagons](https://github.com/fourhexagons)) + ## [v2.5.0](https://github.com/olefredrik/FoundationPress/tree/v2.5.0) (2016-03-02) [Full Changelog](https://github.com/olefredrik/FoundationPress/compare/v2.4.0...v2.5.0) **Closed issues:** -- Flexbox grid? [\#741](https://github.com/olefredrik/FoundationPress/issues/741) - Block Grid Not Working [\#738](https://github.com/olefredrik/FoundationPress/issues/738) - Clean Install Problem [\#737](https://github.com/olefredrik/FoundationPress/issues/737) - npm WARN package.json foundationpress@5.5.1 No license field. [\#734](https://github.com/olefredrik/FoundationPress/issues/734) @@ -125,8 +381,8 @@ - Spelling changes [\#632](https://github.com/olefredrik/FoundationPress/pull/632) ([alexanderlperez](https://github.com/alexanderlperez)) - Added button for TinyMCE shortcodes with popup window [\#630](https://github.com/olefredrik/FoundationPress/pull/630) ([colin-marshall](https://github.com/colin-marshall)) - Added missing angle bracket [\#629](https://github.com/olefredrik/FoundationPress/pull/629) ([colin-marshall](https://github.com/colin-marshall)) -- Added Wordpress Coding Standards Sniffs to Gulp [\#626](https://github.com/olefredrik/FoundationPress/pull/626) ([josh-rathke](https://github.com/josh-rathke)) -- Shortcode implementation [\#625](https://github.com/olefredrik/FoundationPress/pull/625) ([josh-rathke](https://github.com/josh-rathke)) +- Added Wordpress Coding Standards Sniffs to Gulp [\#626](https://github.com/olefredrik/FoundationPress/pull/626) ([joshrathke](https://github.com/joshrathke)) +- Shortcode implementation [\#625](https://github.com/olefredrik/FoundationPress/pull/625) ([joshrathke](https://github.com/joshrathke)) - Wrap youtube and vimeo vids in flex-video [\#620](https://github.com/olefredrik/FoundationPress/pull/620) ([olefredrik](https://github.com/olefredrik)) - Changed WP sticky post class to .wp-sticky [\#618](https://github.com/olefredrik/FoundationPress/pull/618) ([colin-marshall](https://github.com/colin-marshall)) - Fixed more instances of duplicate class attributes in templates [\#617](https://github.com/olefredrik/FoundationPress/pull/617) ([colin-marshall](https://github.com/colin-marshall)) @@ -138,7 +394,7 @@ **Implemented enhancements:** -- Added Size Class Back Into Image Tag Within Content Body [\#574](https://github.com/olefredrik/FoundationPress/pull/574) ([josh-rathke](https://github.com/josh-rathke)) +- Added Size Class Back Into Image Tag Within Content Body [\#574](https://github.com/olefredrik/FoundationPress/pull/574) ([joshrathke](https://github.com/joshrathke)) **Fixed bugs:** @@ -169,7 +425,7 @@ - Improved foundation.scss file [\#606](https://github.com/olefredrik/FoundationPress/pull/606) ([colin-marshall](https://github.com/colin-marshall)) - Duplicate $global-margin variable [\#603](https://github.com/olefredrik/FoundationPress/pull/603) ([jcallery](https://github.com/jcallery)) - Update featured-image.php [\#600](https://github.com/olefredrik/FoundationPress/pull/600) ([bej-soan](https://github.com/bej-soan)) -- Fixed Undefined Variable Bug Found in \#594 [\#597](https://github.com/olefredrik/FoundationPress/pull/597) ([josh-rathke](https://github.com/josh-rathke)) +- Fixed Undefined Variable Bug Found in \#594 [\#597](https://github.com/olefredrik/FoundationPress/pull/597) ([joshrathke](https://github.com/joshrathke)) - Gulp package task added [\#593](https://github.com/olefredrik/FoundationPress/pull/593) ([colin-marshall](https://github.com/colin-marshall)) - Remove wp versions filter to support cdn caching [\#592](https://github.com/olefredrik/FoundationPress/pull/592) ([KLVTZ](https://github.com/KLVTZ)) - Fixed JavaScript minify [\#591](https://github.com/olefredrik/FoundationPress/pull/591) ([colin-marshall](https://github.com/colin-marshall)) @@ -736,11 +992,11 @@ - Add Brazilian Portuguese translation [\#316](https://github.com/olefredrik/FoundationPress/pull/316) ([igarcez](https://github.com/igarcez)) - Bugfix/update text domain [\#315](https://github.com/olefredrik/FoundationPress/pull/315) ([olefredrik](https://github.com/olefredrik)) - Updated docs [\#310](https://github.com/olefredrik/FoundationPress/pull/310) ([olefredrik](https://github.com/olefredrik)) -- Improved Method to Check For Direct Access to a File [\#309](https://github.com/olefredrik/FoundationPress/pull/309) ([josh-rathke](https://github.com/josh-rathke)) +- Improved Method to Check For Direct Access to a File [\#309](https://github.com/olefredrik/FoundationPress/pull/309) ([joshrathke](https://github.com/joshrathke)) - Added link to integration guide for Sensei LMS from WooThemes [\#307](https://github.com/olefredrik/FoundationPress/pull/307) ([olefredrik](https://github.com/olefredrik)) -- Updated Action Hooks and Classes for Wordpress Coding Standards [\#298](https://github.com/olefredrik/FoundationPress/pull/298) ([josh-rathke](https://github.com/josh-rathke)) -- Wordpress Coding Standards & Unit Testing Setup via Travis CI [\#288](https://github.com/olefredrik/FoundationPress/pull/288) ([josh-rathke](https://github.com/josh-rathke)) -- Enqueue Main Stylesheet Using wp\_enqueue\_style For WP Coding Standards [\#285](https://github.com/olefredrik/FoundationPress/pull/285) ([josh-rathke](https://github.com/josh-rathke)) +- Updated Action Hooks and Classes for Wordpress Coding Standards [\#298](https://github.com/olefredrik/FoundationPress/pull/298) ([joshrathke](https://github.com/joshrathke)) +- Wordpress Coding Standards & Unit Testing Setup via Travis CI [\#288](https://github.com/olefredrik/FoundationPress/pull/288) ([joshrathke](https://github.com/joshrathke)) +- Enqueue Main Stylesheet Using wp\_enqueue\_style For WP Coding Standards [\#285](https://github.com/olefredrik/FoundationPress/pull/285) ([joshrathke](https://github.com/joshrathke)) - Multi-level off-canvas menu [\#282](https://github.com/olefredrik/FoundationPress/pull/282) ([Tralapo](https://github.com/Tralapo)) - Shorter header for UI-toolkits in docs [\#279](https://github.com/olefredrik/FoundationPress/pull/279) ([olefredrik](https://github.com/olefredrik)) - Updated docs with tutorial for responsive images [\#278](https://github.com/olefredrik/FoundationPress/pull/278) ([olefredrik](https://github.com/olefredrik)) @@ -799,7 +1055,7 @@ - Spelling correction [\#93](https://github.com/olefredrik/FoundationPress/pull/93) ([jmotes](https://github.com/jmotes)) - child theme function override for navigation.php [\#88](https://github.com/olefredrik/FoundationPress/pull/88) ([fourhexagons](https://github.com/fourhexagons)) - Spanish language files added [\#87](https://github.com/olefredrik/FoundationPress/pull/87) ([afermon](https://github.com/afermon)) -- Update navigation.php [\#85](https://github.com/olefredrik/FoundationPress/pull/85) ([gthapar](https://github.com/gthapar)) +- Update navigation.php [\#85](https://github.com/olefredrik/FoundationPress/pull/85) ([thewebsitedev](https://github.com/thewebsitedev)) - Sidebar on the left - with no file changes! [\#80](https://github.com/olefredrik/FoundationPress/pull/80) ([jmbarlow](https://github.com/jmbarlow)) - Convert spaces to tabs, fix indention, remove trailing whitespace, ensure newline at EOF. [\#79](https://github.com/olefredrik/FoundationPress/pull/79) ([fk](https://github.com/fk)) - Removed extra commas, easier child theming [\#78](https://github.com/olefredrik/FoundationPress/pull/78) ([grantnorwood](https://github.com/grantnorwood)) @@ -819,4 +1075,4 @@ -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file diff --git a/web/app/themes/oe-brixton/archive.php b/web/app/themes/oe-brixton/archive.php old mode 100755 new mode 100644 index f7ea4b0..d14bdc7 --- a/web/app/themes/oe-brixton/archive.php +++ b/web/app/themes/oe-brixton/archive.php @@ -16,6 +16,7 @@ */ get_header(); ?> +

    @@ -31,12 +32,16 @@ - + - +
    diff --git a/web/app/themes/oe-brixton/assets/fonts/FontAwesome.otf b/web/app/themes/oe-brixton/assets/fonts/FontAwesome.otf old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.eot b/web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.eot old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.svg b/web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.svg old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.ttf b/web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.ttf old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.woff b/web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.woff old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.woff2 b/web/app/themes/oe-brixton/assets/fonts/fontawesome-webfont.woff2 old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/images/demo/customizable.svg b/web/app/themes/oe-brixton/assets/images/demo/customizable.svg deleted file mode 100755 index 202f600..0000000 --- a/web/app/themes/oe-brixton/assets/images/demo/customizable.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/app/themes/oe-brixton/assets/images/demo/hero-bg-foundation-6-large.svg b/web/app/themes/oe-brixton/assets/images/demo/hero-bg-foundation-6-large.svg deleted file mode 100755 index 56dae96..0000000 --- a/web/app/themes/oe-brixton/assets/images/demo/hero-bg-foundation-6-large.svg +++ /dev/null @@ -1,1321 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/app/themes/oe-brixton/assets/images/demo/hero-bg-foundation-6-small.svg b/web/app/themes/oe-brixton/assets/images/demo/hero-bg-foundation-6-small.svg deleted file mode 100755 index 7bb9030..0000000 --- a/web/app/themes/oe-brixton/assets/images/demo/hero-bg-foundation-6-small.svg +++ /dev/null @@ -1,1309 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/app/themes/oe-brixton/assets/images/demo/professional.svg b/web/app/themes/oe-brixton/assets/images/demo/professional.svg deleted file mode 100755 index ce4beed..0000000 --- a/web/app/themes/oe-brixton/assets/images/demo/professional.svg +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/app/themes/oe-brixton/assets/images/demo/responsive.svg b/web/app/themes/oe-brixton/assets/images/demo/responsive.svg deleted file mode 100755 index 173ea9f..0000000 --- a/web/app/themes/oe-brixton/assets/images/demo/responsive.svg +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/app/themes/oe-brixton/assets/images/demo/semantic.svg b/web/app/themes/oe-brixton/assets/images/demo/semantic.svg deleted file mode 100755 index 29c3647..0000000 --- a/web/app/themes/oe-brixton/assets/images/demo/semantic.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/app/themes/oe-brixton/assets/images/icons/android-chrome-144x144.png b/web/app/themes/oe-brixton/assets/images/icons/android-chrome-144x144.png index 1e124e5536aeef2c3b74af7f08fc91f25c5dbda7..48d337e586c61c3e85b55e6985ea4754f53b98ba 100755 GIT binary patch delta 7810 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 delta 109 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 diff --git a/web/app/themes/oe-brixton/assets/images/icons/android-chrome-48x48.png b/web/app/themes/oe-brixton/assets/images/icons/android-chrome-48x48.png index bdd221f1591f3a8368e2ffb85d9c530bbf5842a1..e98e821e4f19506b430df47b70c314f570b77197 100755 GIT binary patch delta 2393 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
    g=}2)dDgAC7hTu!xIKd=8jgh6 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 ZEEMV&5p?oGHI)DW002ovPDHLkV1jX!=wJW< delta 5524 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 KMNUMnLSTY{QP1Q6 delta 6558 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 ZGCD9YkW;DblYkj32>?k&PDHLkV1jHOLGb_p diff --git a/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon-144x144.png b/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon-144x144.png index f175d833a9b60b0d2fb38e8a36e9967277c5661e..c2a5e0b4921d761e085ecd0eb17f7b0465bb3ce3 100755 GIT binary patch delta 7810 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 delta 8589 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 BIWGVJ diff --git a/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon-180x180.png b/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon-180x180.png index 56a0df77b3befac3cefb41edf9e3baba05491df7..b938ed012697bb299125be319af46b9706903d87 100755 GIT binary patch delta 9824 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 F{Xe9>vZVk3 delta 11364 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 Ubn-$ql>h($07*qoM6N<$f;`-Kr2qf` delta 2946 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 diff --git a/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon-60x60.png b/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon-60x60.png index 98451addce366b3acdeb8f6b72951c4f0e9fa16a..9d997ecadf61caf411760af4cdc2be388f24df6b 100755 GIT binary patch delta 3040 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 diff --git a/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon-72x72.png b/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon-72x72.png index 9c619f09cc473f9f2c8aae89dec34b63773bdb33..efe469d5bd8276b9b2c2e47ca481e25d180fe417 100755 GIT binary patch delta 3793 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 GLSTXchCogL diff --git a/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon-76x76.png b/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon-76x76.png index 658ee505ff4f1522ec4e0e90fbadd74eabc27434..f57d7b8f0b9a06e8b8c613adf0fc69bbed224c5d 100755 GIT binary patch delta 4088 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 diff --git a/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon-precomposed.png b/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon-precomposed.png index 50ea7132476cd06f28b39f54972780ebb0cf0899..89bf02b65b3c2e47474cfa8f13d3c067b7833873 100755 GIT binary patch delta 9949 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 delta 11367 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 tDIN5f_22JoVNi1jPuu zt<%eXB^bXPXb zQb;44+-*{V2UYghnW=CpGA9gR>j<(ZGBTfT$dAS$S#mD2%{YrO+7K@#J$O5x!uHdm zC(iuO#?(WdsE>SX-1Q|r(3sXzb*H_miqS+8Z7`)TQ~Ik{!Ai#-tK<8{cMDSUH(0{N z$>_w&F?d&3Z}ut{1_s9xN6;!nB*aP9P@Vz2nY@vB+gs2q1^t|gJKI_{k9e%&MtKxj zI;!6HHQfTJ04QqnwnQp95+bK9|lk0>qJuZRT!DnBLrsOFnN&VWuo7_1ai;j!Kh zj@zdVORu7NkOJN!Owo9K=mZpKgSgf&LFJKN^s5g2h@phU~gdwW!L93s~K_|v@P0Td|T+}LI{ z$gq*viXWzj41@s9DVT;9fRhxs-4lp1H^fCNPi7(wOB@#8GNOM+Lg`p}zl>-!f%7pJ zbnx}(ymI#=z(~(t6>*2z-~PmBu?<7sFg66#q~rb=GqC^nZ{a1nvR3LEzR&i9H(3Ku zsU>}Xtg0rQ5c`)Fz*X5_tAzBdtxq;An~+mb+W0vY#MmGhVMEa&t6t!dL!b1&-2b^( z?~e|lUtMt1RZTPBS6)>rIq!P#BF$ce{uYHq{g)zPXOp8$jqMp`uTqd+;K9|L#8$60 z?0S%zV`tW8f@sgWMwdb=k(vQpN_Ae67p*=r1KTIKx#Nzlbgj-)7o&0rx5WY5qyQ2l zBqsQqIa$}7MiF>KrD!B>A@fDes7R~ju(Q6lQb5cvQ8eWRQ$@R<=J21kWa-1y%d5L3 zbuL`3*epA!eC5}5By)cD0s%qMA>MUx%;vd#5%`J|&=7D_CGRB!&CT`$#Lh!PKY$M1 z6`6-W9>@}7Ss2g@0WFJyfuM~4B*=dqnJ5b6l=)$p;JX3X(UPi@DZPx4+<1{WF+1&} z*z5_PFed1i;cMlPp5N~gp{_)vAGdtpV^^d(rt2lqB3Cg*+t3r0IG=Ge0ra7`|1u2V zcue&%b0>C+{79jwcR`)^lZh>MXw>mRnsk`YU754XN_@hCQ@a-XWK<_ZUT@R($3}Lq z%8fpP`S;Re=!CUIF2ej$uHA$7!dwp-4&1Gd^D1GGKB*1 z`L9bI(lgo}vOeXvB0SJ24w2a@dIEzWq&R^e(@e44l_L-DqLKqcL@8c!mm}&EYB&lN z(p2M45Qm_tn(sjc+3Ws9s-80>@>#O<@SE9+*lr7bQT40cFRb89*e%2xakXwtK&7RW zBqk9beLI=)mFqlm^6lwC%}|M8G@`@ojs@)c7vQ8{qhBA$$W(V6*HA0gPIx1@8LaH8 z4=HU>!qyRyIki%G3QdFBGH`&4iop?4qrr^0E#C&JU*pM^TUb*_iSU6)W#mdmv?C*p-|09W!X2fI_BaUTHLAu8EE` z$tXfHW_67dC2c03aCED*3$po(B4sYIp5@98*qaejD!udV3Cf?eEn(wcR1W=u3zCe{ z0feF`s*uP>Q86otxRPs5sc08bw2o~n>=eKS2t1Xw|mN9FFFg^tVH>T(d?ZmI{ccu>7Lu zhs3LQW=tiNEYM#WqfeNchVI8|6}<41@TVYk?=FGJvngqmpMSmG{C_& zz)`~9&k^`R5a8n%;pP+K<`*&K7ncwck`NZ>J)Es9n RvT&j!s3~bHHiB#-{|~$sm*)Tg diff --git a/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon.png b/web/app/themes/oe-brixton/assets/images/icons/apple-touch-icon.png index 56a0df77b3befac3cefb41edf9e3baba05491df7..b938ed012697bb299125be319af46b9706903d87 100755 GIT binary patch delta 9824 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 F{Xe9>vZVk3 delta 11364 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 diff --git a/web/app/themes/oe-brixton/assets/images/icons/favicon-96x96.png b/web/app/themes/oe-brixton/assets/images/icons/favicon-96x96.png index 0ca02ff509f11ddf964bc0b2e8aa33d0649d852f..a83690c3f430e521a4e87ec965e939c24b9d4053 100755 GIT binary patch delta 5215 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 ZEEMV&5p?oGHI)DW002ovPDHLkV1jX!=wJW< delta 5524 zcmV;F6>I99Dy%G!B#|^*FAx(fJLyy3-T(jqPkK~XbW&k=AaHVTW@&6?Aar?fWguyA zbYlPjc%0+PEGS9llid_7e<+m><0>L;9{>Ops7XXYRCwC$oq2Rr*L}x7Z+2-k(nv_4 z1q1>i76E2+S#0nE#sn{5J5JoxaauR0Y2CVYlXH@uwmCUXecE%n*~y8M)8j0S@i{JK|zvZGx(n04!21(0b8AW683kOQ}+v45{Y z`jWo{dh+o8e@V!P2B>HRrGp~$?Ysly2neM4iKbk00gp2(e2^Nk3Ai2duLTp401x^E zxG<0N1Edo$4Op*pZ!wa9ybMIO$QJ=2lg~W{?ebu*0VAW&(^G@?yPLAtZl!UZ^WuKO`gLkQAIbz)9H5c6<& zTwn&%1`ad?XrApiX|K?ErVE+AHbM~djxa8;(gaNf zz5)CjfACe{yT}o!UaW1V`Y!Z)`XtN=7)iNS$o~fdG{U_X*uba*odY~Tx9MN6vat)40Pb4R9joW>b6aLi8gSGux}D0d~xLvz}QiMUr3yy^-^{ z!zuzC1}{4eX*$LNC+YFI6Z75->7k>p zJLx$Z59an04=IXx5Z|vZzsLC7h*h%7Jr`B2|F>5n)F7_d4W{~n2l~HlOELsG4}zf_TGzm z<}%d;IWYGbH=G85u|Ox2Zqp+s_bbSVM{Bmcm`60J&vId&IlbXDz%0dFiuq)^9{eOb zP#@-btJL3jV@^OqWAa@YVI=`ZJ*t?oe-Fk=Ne&@15ulRn0}9AYz=WtFvXTI!K}`YX zX<vWndYU(4OS9hKgPCZn!Jf}1Ns1?Fw{Z% zV9bg6*r1frD8^3aJW!Nm4J^exYSK$x->RUi~HYPKAVJ&H;tJQX)20V5d4_ESiXN-~v_Ym0Q zA#Okd%rcx6Bu7FX%n7g~S3=s5+Tb5UJG{u1G@06ZLq$QLUzZbypJYdzO-LE9Tq_|n z0S?VGtB~u?%n;%RBp{420fmg3e+32e5HXI~NYW}WPep^&m^cB8fXWQ_PZ$EMtP3)m z<#HnHG~?B1*$^-lcsO=%CIW1+cX1(?ux5Jxgz*7Z5@2S6Kvqc<#$Mc;#q-?2-ysRh z)XoBA33@H?i7eZi_o6Jac(IIl_1Q!5iIWiK1T-L{q03~yoU|y*`#i{6f24T%N+ygj zhWTL4N}G7)b`XeIk;t>!1ep;~gIu24MdpFkN5NPUep!{IXlCRlBNvFr&D#m!#m!GG zI|kR5Q5`QQ46-+GKswe;PBPa>tR*mlM)=c#ZvxLDw@J7k_%d?YQ+>+4V}{ilkf~Q~ zMmp3Q3xD^cAlss>5~OK+f0*>nx*ECE>6_Qm5UZVVCdXET+@ip65GI5`2muIC6l{tu z?Yg4aP?T#b?KdsT()8$00gs?>DICba!jZ*$8^UT0$fhB>l8Xzs&{M>eNi|egOsArB z3Ppv**c2OqV1VBKF0OR7(AIT{-hmz>(Flr7K^glxiy<;s#mz)+f16+yu|>JY+M@B+ zfHVjM2q-J5VClTotXOaxbv1J+F7o4YxKQF6fFK%;Fgy~Vy}N}E&K_p}2fH|P@k4^) zk%XpXi9rkq(DeSzz)dF42qSlRxu)tmt2JOuqe~$KZl{~&jceF+>!)a#z5tg~KWVC< z;IKRKc}wtlOPEzVf1lfyZDilEU2NO)G8fv;WUC1(DVu@lpb~g6gM3M+&kktfa zJ;@=2ir+Vh&38P?hLsOcRH#2RP}L|x2y8ZclHFHOC@n5$B>U>FMj_ zTjpe+NB$@*+y-5N6!^@AAX&8j_jnh z;{qeW0IC{We@mxG6I4=E%DlRpShwPS7S=CMn5=UD6#i(_6ZG_VaqP@NGoKK}+yvDE zw`6#YbHEtxU29ei-+5F1uK!2P#ignGlr^A*>iXY-+B38Xgd2Is!*}njN|+` zDSd-Iyz<5i{CMkk7#QkHe7>-LIV%_4Y1WJpj7^XmSciEX>L9QUi?XR!6A&=^PzZtF zH;H@Je|(w}-)O$<=&5&k@wMk@@4lSW+l3IQs){P)Un&&EMkE?x=exh=x9|L%s4AmD zr^CgqOYWk?R~8#vq+u9i0_un@EHptAupg|cshI`0~*Y974vb1ZIHfz6g)>aQpYf1yZ_?R#ILx#eWy`i$xZX4W(ygl?$c zkMW*#t1+L>6u|F@?e1s=tn>j<40@Ijf}%nnw=Q0f+v!PM+x_0_96xs?t>@QP)$`E0 z&#`>|8j1>wx!ie?|NPNEaQb3Xnsc=&Haf3f;b7D6sh>6vMN#m2ikLNRK8H{2(`!yI zfBKs0MP@tAsy8}-*RgPInUxx#B72uE0kxI&)YmqSzDdtzcE9&Jkw{o`pUTuJGx)+o zU*Y!U_aw#!<^D>lE2e|KNkLVkoVwV=a8SxsQ532xYH>JpD^t4Agv%*AIj+v|j{AWl zU|mtK)hlFr(diwEqA+L1LVVuQb#_f>e-G2raSoeJI$MFjV|~*h(yAC*!&*BP%vSBgesU(HJh6ktWA7#Bs9#P!`s=h@0Xl!J!P8je^E65 z3t&_1dXZEZIhm50ziB|``OSvVr+{5xZAp7B2neGgKnN&s7gAAHmAGkWWROd3%_NOj z6_{Pyh~GClv9N{z@pe+3rkFprbk>QEj|`_e_RDg=4UX_NAKX(B$HxOY)mez!X6WJC>-Lw<9iv* zAbbG3%})Kad5QD{$OtPE38yCLjz-n!$rQ6xkDTc;`;jiB`LTQ=-)arGip-BB=6nU< zbh>dlMy=9tFhDRgoFp6tQUooG!pJ13LS=GU70VmfBuq{y9HhDB1W`4re~qvrs!(_Q z`WuG_03It^PybM_9Vz_A3_r6MI0V+OsL6#B?n}EWgv|S!3R2M9-<@!pE~lG0GZx`= zxD3B5guvx+ao5TRm^F27;`-&zi=4XHq){+|!{O}u;-gPj0M7!Czwq?$yiql}5II9< z*84}0n~e9716ZvA14wmEe?UR@$Y5wR@F;K>;&v4v5D6_1LZ!L&Bts*E6cxxsq z5C(AK{88RKuoYE}q9`_mP?=m>#l34EDR#RODIVW}rrl52Y_=-QBOev`6>!ON$>)fG zU}|F(MPWENOnY}Le+y?X2cWQ^i0PH}9B)37bYK5aFWcV!8Fe*t@W=8+RTa~CeDmLO z*UBwiYHMaVI7G3xl)9P*Dks$>`Hi-&7GB!^Jnh}BQuqj*4mX=_eVF-mixc;C^|mQ* z9(b)$6{?b9D)W4d05w;uDXsPaD$qce#l^8biCtox|ua~F1Ih=#3ycfm|GUFr@EpxN%*ZD7x=-e&v4}A{?Yhfz=}n; zvwr24#J$mIgdO`{<;3};nS>9p6*=#lGvs2gh;yXoS_GWD@Bvo`x)YZgXD*?xx&fhT z9jrn)5@y?;f0z0GtIu%Z${AGEe9k)*4sz(jJ$&n>e`fy&ZzZm)LZxAPBcI;zd5XRM z#Py@653pnJD@3Cir?0O7KPAUSyq2A!baLO7_$fyYgLBcKSeK0tTchimDOLx1QqI>4WqQ_F%W!<+P=ue;|ZPI1-|Fu!j$u-{;j`KjxJ; zUf^O|bK)7QP^qby&f{CY#GL616U}JrZsiBRdWQ2?&SXgS* zEp2i^zyNRzc_vJfP>-EH$f4tJvv%o50DRsOK6TgU>Ac#;iE~Gj($ZR?_7C>bH*hr; zw#vbsf|8iFj6)SFQzy^hv3sB74;J2*_$(X=f3xlFpRw!UR#c&8Q&qPWc`#hgw=%Hw zAh(za639yBO=wms#wSm%_I0tKei^<(nVRtX%9u8#j!W(5=<01x+?zyRe12H5p(wW4 ze@BHcgg{Xg8fPux@hx9u$=p>5@}g>#HxInVOWU6(Fg%!z@LPd@L~3!)4~4Uo0F57r ze<&^1(^3qCX*ETW`=%b^%m2e~s3KyTV~IMq%fqZ`^H@4>H8ZMbQ|$HQa=LLiT)3QWyahhW{Zp7dy^*!ce>U>q zy3cX<>IbQ?%N?I(vSz*@jz~1j(C{FGfqq6p!`N+h3Oz*>6&6$AE=V&es!+Lb`3$eT z`2u^7yg?`&%(jd@1Uv(L9SDr)e;z_PIZZXD1^vi1VQbMLT53X=vn?lRzH}UKfsaZ4 z$q8)$nV$Bz3MlsaDJw3=@0*0Tz=zY}N)oIPg6_T!cE0;7Ui{5-96fV@s2a^y_$u%d z;Gclr@!r5GCj`Wtu|QT4+=2e)tuX-!+IueZ{>lAZY&(n1X2a_#!sYU0e>5Gz&@ip- z7kKN?HeP!Dd3GIqjh=xn86{<>+yZzFx#Xxd-uCfC&Q6ffO!xgY@UNIxo5_eKwm@U* zlo>SCE}*Wufr_#!e1*k09CCtvBp9G~poiAZ3!J(5A!l1o(AC>UBoc{D@Mrx>0y)k2 zH^_P7ylh{V(<3}$Bvc?5f4DuIl~m$OkrZ&+ow!{d+^zx~b_c3Z35P=jLnDO3L85BB zhIGs+EfqP~`Z91F^0#-~cpT%@2|SIgI$n|KX6*ngszwa&}WJ#Q1^dxTU3IjR2dNT)lJZ^6frQw@kCMH6-*C%Eg7DeGKz0s&k=9_0B|;B9i8 zULGsP{TwaLdGd>a$AJ5g2R&HX8N$e!x!(Z)i%ctp}F z4D03~!qSaf7zbY(hYa%Ew3WdJfTF*YqQNHi@mHdHY=Iy5voH90FV zGCD9Y;SLc{0000bbVXQnWMOn=I&E)cX=ZrzwxxaFR$8^I6+{qJDpW-j*;Ej%3t+3U0$~%dAOzW^3Ie6# z!lIy{LS-!|AOcdM3hpcwNB~J#5)8-^Ajx^ZzsWQAeYnkX$qjt?qxbXqF*E0xIp@sG znKLtILJ(96ss!hq7m!vD9{NTQTp0vG_3B0CY0xJ?t64KFUlIg2em4kyK^;EPqKHls z1k@|*SG!Bg%C)+*_*Ko+ruTuATAiCWx}r-9u`2U-Ww%=^Q$L0J>5clfJ<_EA{rPpf z-?sPi&dugQyP_-xm!~$XbybhnS%Y64YcIY1cN_oKYc_8FE7okl1ID*c;PLCycwE-8 zNw=O8huN4pFWMhQKWhD78D)du_3}HjtZ~0~h92YLQQ|1n>3Zw)&-~+M>+npPOoH-N)BBp9ci3O&PPY3-Jd#Dd-l`*x72wWdEPO8+Mf@7HJC>~voG)5d^deM4AwzA z1X`&LXgZD1nU0Y-u>a9@0zXqoTd2dltCKsxpUTR?yC1$Z!8KR(a* zAA-f871#vYf(@WI_y}~4Zxb!^{VdQ1XpA<4W?&7F9!o&)X#JA%)T;&5Uh}mSJPO8w zhf8V`rBm-`U=Fw#%mQiPJK)@Cy^`|O`v#~6Dua8$O(oS8-7E<58U#V^g#ZZ|!p}q0 zCFPs2OIQ*FM?9>kt^7=N&=AN!xnDxwqNr+V|Au|2LRzV`dKLK%SsH82{a`Q!yapzK zzCdf}{EC$4dBIoxY!3bjv|hDti_oRHsSFN*6+m`c)wivP6n=Mu9ANk%yRzGDcEe-$ z+0AM9+qJ#!bb8)hD{%5b2Q9dFsfS?4Fnz8bhSOZp!8_VMaKoBp!B+Xny1jrSnVJd&w1$hvKt+}W!} zr&~-qW$oE*nkV$hquq@_KI?U$F*pdCmP7sswU^9Sm(R0}nOm&Y(2mak=4b=yoLiyFnZwzTVcl;z#`P8ihUJl#3_0*KJ?(}!(+jeYU zYhCyxW4-f3@{PVOX`fKO_W5xky@0gsamd&F&4{$sxvx-j(R|>8#yQgN`b!sU@aNx0 z*SgnXsFy?gI$&GKr=O>nl~P}4X59_MQ)lZzK(^)PL;DbCQ9tIQYyb1|M|=LzG>$ic zq2QOEURFw7`QC*`OQvM&X1xUX7`(5D2OLmjg*@yO$|0&o3ehRJx z-u@mW|81}qNdBAPoG?{cceSL>f3!aXXk4|E z{zjnnpgE}r65eOy<&;#0r}pxH0j=!|LiruYOMV9UaY=0}f)0P}W9nlpzC&Ij|IUXL!)EVI_knp}*9Dma<7rb+!S^uhp9jZ7K29>OkP(l$-Cp|kY-{G7F`GH4O z@>Q4QH>_&;H#9E7yQIPg{|_T?AEbmxGg|`+0YAklYJzqk7N@wF!he6ojsWvr6?_k9 zU(h~y5vT^_1Cu&;6f3X-i0JiApgpWFm5HW&qN1w_hEjUT$`?DHb< z_c{5T(jY&%8axb6NK7h`kwLb6Rx6-8_T6o>FJu`?K#XBSMh!$*(U zp~HE$VD&N=r)x1N#f^8Xp&hL6l#y;uj^rP8btWyEVfA~pDXtF-;p@&HQJEE)hySHO z=YDtB9!T8h@X^DTP5d#9cQeg}Y+ZM7;$wChF(9FS&o(YLvTJXS6%-V>cd~1G+!5c0 zeE2367cHx=@YnsIKyjPq15+$x=a-gusRYQsbZF`hjp@hp6cf2L2E?)>Nu{y zi+APIhq3b}yEv1^B7)DzUs#qN<^2xtCnZbkaOBJh&faA+8h7a~d+Ix7gnhW_bIU!j z&kp7ta&gxQ3#Z$Syk#mT*Nr%E?*4tY@8Et@T)LPw-J`tvmDUcuPXn{1zkH-(#07-~ z&fYb)q7R?(oEw0?LJ9gZ+j1X?fUud+7F6+5c8vVO0DV7w|=1*cVV1w)!n>8 z?^x;=JkJMfBu`l@`jk)^4`>V5i;=b-JLYAEX(r^p1P-Ok?kv9s95pV-I>lVv_?~(9l(4Py12RC zanw)Qy<*vINA_@QT>Wi5tfN~CcMR*ah&i~Pckk->vXv42)sF?>tn%ntQXBXw&XOa& z^e!*m{rF4&4y?`mf_!IJ@;6bNP;Bx|-Ujqzyq*4x!-h*c-25ZSgKun4Aus)Pmuy&) zF6E)auK_p!?CKt^ZRLiK(6_+7TS$5XNye4Z!($?X8)6cG~{DgYF&0pV9PpBZ}ec zoS?ei{`HomwZ`tizJ8p@>n!f}#_*f=vv&S_vMIb$LcUJ6?0dw_@y>>H){$RV zteqY)_FefU5yy9#X60d~o`p^NB-S>X!Nqb;SZ?`we=Ck(fa=O2_{zLzc6V-pB*Iz08b+2)A9Lmys)QHw8 zZyr9nA4X-n^;w@j=-jM#IQ_IQ9cBO0-lpIFLkDdpZ$Ww|(z=P`F@tg}9!_3&=8U*H z-OHiN$#_@H!ct0t>{`9O#_{rt$O&{9gkN;`Uzxk@(E#3JdV)M~H$j`^@gM4M+ zV}HJ$_WW-~btz9C9!~?$Q|UgSyN9D`Y<2Fe!`ojy&KFt>p62TmlP-gH%sxf=mtbwA z?p*Q}q5rrDPwA{!XumjGw10`@-={r)eRJ#&S_7bahWgj!*stX)!Dk|f>ePvH%%?`a zX$wuc6fi4**Y7x*b#pEr7fGlZvkR+(n6xWcg|$qbiWE^Exde zuRh6!WJ{hdeWa&iTY3-j^epmOibqMZjmj?lGUu1-XUWa=P8Z@4Q% zx$>8{hx#`nAGQB!Azi*kF?6qg4tbrAH8;y6boISqGP)(w78%liRVY_>;l_+q`bYOF z_xBmlWGC|NUVmpNlq&3NZl-;er*I#%JE&Ub!Zv_`HEzoka#`u>3DccN2dod#m(De~H< zqUWEUUI*yofY)C(c5|rzo#dl?oAYJ9-N{VRZIWa=E1 zg&u7qIv!&S(7Q&yX}s?W_5V3}oikKlboV!nQNAZDkL(9SJ*0~}dwSWFTRoyExO zY$v~|xe*?ZwmlW{==41>4`_dV7M$+&BCqp~`sDR@zSVy}RZ{f30Q?5HJ8ElZ&{=J+7EN;86>L0o#F%I^e$PtOg@VOphXQMt;{FdZ1C%a2VfEiEcn z+7eCs2bD5ZCe2kkAgFX$>5x#rA;Is=m8-Q+C>;^jD=XbxudCx%7@yV;>9I7es9ybW T9P1aAEk8{42U_UsenIemY|(il literal 15086 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 Z#QFGcQPOQw3jdFV7&G4al%EW){{uxZ*xLXA delta 8565 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 Ld0PG0=FR^CMc&Zu literal 8266 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 F_&+|Aro{jN literal 12185 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 W+wOZ$L=wOyAWBcw6iS|$2LB(2cGDdI diff --git a/web/app/themes/oe-brixton/assets/images/icons/mstile-70x70.png b/web/app/themes/oe-brixton/assets/images/icons/mstile-70x70.png index 2c4a0e7fe22a9664380dfff868f431929fba39bf..9526bed9a519497f96d9c42c7bc0ce9164fa431d 100755 GIT binary patch delta 5324 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 RUj6?Jyl{~CnLf)D@PEUR{(S%d delta 5480 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 diff --git a/web/app/themes/oe-brixton/assets/images/icons/safari-pinned-tab.svg b/web/app/themes/oe-brixton/assets/images/icons/safari-pinned-tab.svg index 71d5850..39665b8 100755 --- a/web/app/themes/oe-brixton/assets/images/icons/safari-pinned-tab.svg +++ b/web/app/themes/oe-brixton/assets/images/icons/safari-pinned-tab.svg @@ -2,27 +2,35 @@ Created by potrace 1.11, written by Peter Selinger 2001-2013 - - + diff --git a/web/app/themes/oe-brixton/assets/images/logos/open-ecommerce-website-design-london.png b/web/app/themes/oe-brixton/assets/images/logos/open-ecommerce-website-design-london.png old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/images/logos/powered-by-open-ecommerce-org.png b/web/app/themes/oe-brixton/assets/images/logos/powered-by-open-ecommerce-org.png old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/javascript/custom/flex-video.js b/web/app/themes/oe-brixton/assets/javascript/custom/flex-video.js old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/javascript/custom/init-foundation.js b/web/app/themes/oe-brixton/assets/javascript/custom/init-foundation.js old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/javascript/custom/joyride-demo.js b/web/app/themes/oe-brixton/assets/javascript/custom/joyride-demo.js old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/javascript/custom/offCanvas.js b/web/app/themes/oe-brixton/assets/javascript/custom/offCanvas.js old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/javascript/custom/preloader.js b/web/app/themes/oe-brixton/assets/javascript/custom/preloader.js deleted file mode 100755 index e69de29..0000000 diff --git a/web/app/themes/oe-brixton/assets/javascript/custom/responsive-video.js b/web/app/themes/oe-brixton/assets/javascript/custom/responsive-video.js new file mode 100644 index 0000000..144a2ad --- /dev/null +++ b/web/app/themes/oe-brixton/assets/javascript/custom/responsive-video.js @@ -0,0 +1,8 @@ +$(document).ready(function () { + var videos = $('iframe[src*="vimeo.com"], iframe[src*="youtube.com"]'); + + videos.each(function () { + var el = $(this); + el.wrap('
    '); + }); +}); diff --git a/web/app/themes/oe-brixton/assets/javascript/custom/stickyfooter.js b/web/app/themes/oe-brixton/assets/javascript/custom/stickyfooter.js old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/javascript/foundation.js b/web/app/themes/oe-brixton/assets/javascript/foundation.js old mode 100755 new mode 100644 index f825bf0..1888ad1 --- a/web/app/themes/oe-brixton/assets/javascript/foundation.js +++ b/web/app/themes/oe-brixton/assets/javascript/foundation.js @@ -1,285 +1,10 @@ 'use strict'; -window.whatInput = function () { - - 'use strict'; - - /* - --------------- - variables - --------------- - */ - - // array of actively pressed keys - - var activeKeys = []; - - // cache document.body - var body; - - // boolean: true if touch buffer timer is running - var buffer = false; - - // the last used input type - var currentInput = null; - - // `input` types that don't accept text - var nonTypingInputs = ['button', 'checkbox', 'file', 'image', 'radio', 'reset', 'submit']; - - // detect version of mouse wheel event to use - // via https://developer.mozilla.org/en-US/docs/Web/Events/wheel - var mouseWheel = detectWheel(); - - // list of modifier keys commonly used with the mouse and - // can be safely ignored to prevent false keyboard detection - var ignoreMap = [16, // shift - 17, // control - 18, // alt - 91, // Windows key / left Apple cmd - 93 // Windows menu / right Apple cmd - ]; - - // mapping of events to input types - var inputMap = { - 'keydown': 'keyboard', - 'keyup': 'keyboard', - 'mousedown': 'mouse', - 'mousemove': 'mouse', - 'MSPointerDown': 'pointer', - 'MSPointerMove': 'pointer', - 'pointerdown': 'pointer', - 'pointermove': 'pointer', - 'touchstart': 'touch' - }; - - // add correct mouse wheel event mapping to `inputMap` - inputMap[detectWheel()] = 'mouse'; - - // array of all used input types - var inputTypes = []; - - // mapping of key codes to a common name - var keyMap = { - 9: 'tab', - 13: 'enter', - 16: 'shift', - 27: 'esc', - 32: 'space', - 37: 'left', - 38: 'up', - 39: 'right', - 40: 'down' - }; - - // map of IE 10 pointer events - var pointerMap = { - 2: 'touch', - 3: 'touch', // treat pen like touch - 4: 'mouse' - }; - - // touch buffer timer - var timer; - - /* - --------------- - functions - --------------- - */ - - // allows events that are also triggered to be filtered out for `touchstart` - function eventBuffer() { - clearTimer(); - setInput(event); - - buffer = true; - timer = window.setTimeout(function () { - buffer = false; - }, 650); - } - - function bufferedEvent(event) { - if (!buffer) setInput(event); - } - - function unBufferedEvent(event) { - clearTimer(); - setInput(event); - } - - function clearTimer() { - window.clearTimeout(timer); - } - - function setInput(event) { - var eventKey = key(event); - var value = inputMap[event.type]; - if (value === 'pointer') value = pointerType(event); - - // don't do anything if the value matches the input type already set - if (currentInput !== value) { - var eventTarget = target(event); - var eventTargetNode = eventTarget.nodeName.toLowerCase(); - var eventTargetType = eventTargetNode === 'input' ? eventTarget.getAttribute('type') : null; - - if ( // only if the user flag to allow typing in form fields isn't set - !body.hasAttribute('data-whatinput-formtyping') && - - // only if currentInput has a value - currentInput && - - // only if the input is `keyboard` - value === 'keyboard' && - - // not if the key is `TAB` - keyMap[eventKey] !== 'tab' && ( - - // only if the target is a form input that accepts text - eventTargetNode === 'textarea' || eventTargetNode === 'select' || eventTargetNode === 'input' && nonTypingInputs.indexOf(eventTargetType) < 0) || - // ignore modifier keys - ignoreMap.indexOf(eventKey) > -1) { - // ignore keyboard typing - } else { - switchInput(value); - } - } - - if (value === 'keyboard') logKeys(eventKey); - } - - function switchInput(string) { - currentInput = string; - body.setAttribute('data-whatinput', currentInput); - - if (inputTypes.indexOf(currentInput) === -1) inputTypes.push(currentInput); - } - - function key(event) { - return event.keyCode ? event.keyCode : event.which; - } - - function target(event) { - return event.target || event.srcElement; - } - - function pointerType(event) { - if (typeof event.pointerType === 'number') { - return pointerMap[event.pointerType]; - } else { - return event.pointerType === 'pen' ? 'touch' : event.pointerType; // treat pen like touch - } - } - - // keyboard logging - function logKeys(eventKey) { - if (activeKeys.indexOf(keyMap[eventKey]) === -1 && keyMap[eventKey]) activeKeys.push(keyMap[eventKey]); - } - - function unLogKeys(event) { - var eventKey = key(event); - var arrayPos = activeKeys.indexOf(keyMap[eventKey]); - - if (arrayPos !== -1) activeKeys.splice(arrayPos, 1); - } - - function bindEvents() { - body = document.body; - - // pointer events (mouse, pen, touch) - if (window.PointerEvent) { - body.addEventListener('pointerdown', bufferedEvent); - body.addEventListener('pointermove', bufferedEvent); - } else if (window.MSPointerEvent) { - body.addEventListener('MSPointerDown', bufferedEvent); - body.addEventListener('MSPointerMove', bufferedEvent); - } else { - - // mouse events - body.addEventListener('mousedown', bufferedEvent); - body.addEventListener('mousemove', bufferedEvent); - - // touch events - if ('ontouchstart' in window) { - body.addEventListener('touchstart', eventBuffer); - } - } - - // mouse wheel - body.addEventListener(mouseWheel, bufferedEvent); - - // keyboard events - body.addEventListener('keydown', unBufferedEvent); - body.addEventListener('keyup', unBufferedEvent); - document.addEventListener('keyup', unLogKeys); - } - - /* - --------------- - utilities - --------------- - */ - - // detect version of mouse wheel event to use - // via https://developer.mozilla.org/en-US/docs/Web/Events/wheel - function detectWheel() { - return mouseWheel = 'onwheel' in document.createElement('div') ? 'wheel' : // Modern browsers support "wheel" - - document.onmousewheel !== undefined ? 'mousewheel' : // Webkit and IE support at least "mousewheel" - 'DOMMouseScroll'; // let's assume that remaining browsers are older Firefox - } - - /* - --------------- - init - don't start script unless browser cuts the mustard, - also passes if polyfills are used - --------------- - */ - - if ('addEventListener' in window && Array.prototype.indexOf) { - - // if the dom is already ready already (script was placed at bottom of ) - if (document.body) { - bindEvents(); - - // otherwise wait for the dom to load (script was placed in the ) - } else { - document.addEventListener('DOMContentLoaded', bindEvents); - } - } - - /* - --------------- - api - --------------- - */ - - return { - - // returns string: the current input type - ask: function () { - return currentInput; - }, - - // returns array: currently pressed keys - keys: function () { - return activeKeys; - }, - - // returns array: all the detected input types - types: function () { - return inputTypes; - }, - - // accepts string: manually set the input type - set: switchInput - }; -}(); -;!function ($) { +!function ($) { "use strict"; - var FOUNDATION_VERSION = '6.2.1'; + var FOUNDATION_VERSION = '6.3.0'; // Global Foundation object // This is attached to the window, or used as a module for AMD/Browserify @@ -321,7 +46,7 @@ window.whatInput = function () { * @function * Populates the _uuids array with pointers to each individual plugin instance. * Adds the `zfPlugin` data-attribute to programmatically created plugins to allow use of $(selector).foundation(method) calls. - * Also fires the initialization event for each plugin, consolidating repeditive code. + * Also fires the initialization event for each plugin, consolidating repetitive code. * @param {Object} plugin - an instance of a plugin, usually `this` in context. * @param {String} name - the name of the plugin, passed as a camelCased string. * @fires Plugin#init @@ -350,7 +75,7 @@ window.whatInput = function () { * @function * Removes the plugins uuid from the _uuids array. * Removes the zfPlugin data attribute, as well as the data-plugin-name attribute. - * Also fires the destroyed event for the plugin, consolidating repeditive code. + * Also fires the destroyed event for the plugin, consolidating repetitive code. * @param {Object} plugin - an instance of a plugin, usually `this` in context. * @fires Plugin#destroyed */ @@ -652,7 +377,7 @@ window.whatInput = function () { } } function parseValue(str) { - if (/true/.test(str)) return true;else if (/false/.test(str)) return false;else if (!isNaN(str * 1)) return parseFloat(str); + if ('true' === str) return true;else if ('false' === str) return false;else if (!isNaN(str * 1)) return parseFloat(str); return str; } // Convert PascalCase to kebab-case @@ -694,7 +419,7 @@ window.whatInput = function () { bottom = eleDims.offset.top + eleDims.height <= parDims.height + parDims.offset.top; top = eleDims.offset.top >= parDims.offset.top; left = eleDims.offset.left >= parDims.offset.left; - right = eleDims.offset.left + eleDims.width <= parDims.width; + right = eleDims.offset.left + eleDims.width <= parDims.width + parDims.offset.left; } else { bottom = eleDims.offset.top + eleDims.height <= eleDims.windowDims.height + eleDims.windowDims.offset.top; top = eleDims.offset.top >= eleDims.windowDims.offset.top; @@ -839,19 +564,19 @@ window.whatInput = function () { break; case 'left bottom': return { - left: $anchorDims.offset.left - ($eleDims.width + hOffset), - top: $anchorDims.offset.top + $anchorDims.height + left: $anchorDims.offset.left, + top: $anchorDims.offset.top + $anchorDims.height + vOffset }; break; case 'right bottom': return { left: $anchorDims.offset.left + $anchorDims.width + hOffset - $eleDims.width, - top: $anchorDims.offset.top + $anchorDims.height + top: $anchorDims.offset.top + $anchorDims.height + vOffset }; break; default: return { - left: Foundation.rtl() ? $anchorDims.offset.left - $eleDims.width + $anchorDims.width : $anchorDims.offset.left, + left: Foundation.rtl() ? $anchorDims.offset.left - $eleDims.width + $anchorDims.width : $anchorDims.offset.left + hOffset, top: $anchorDims.offset.top + $anchorDims.height + vOffset }; } @@ -893,9 +618,17 @@ window.whatInput = function () { */ parseKey: function (event) { var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase(); + + // Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events + key = key.replace(/\W+/, ''); + if (event.shiftKey) key = 'SHIFT_' + key; if (event.ctrlKey) key = 'CTRL_' + key; if (event.altKey) key = 'ALT_' + key; + + // Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`) + key = key.replace(/_$/, ''); + return key; }, @@ -919,23 +652,23 @@ window.whatInput = function () { // this component does not differentiate between ltr and rtl cmds = commandList; // use plain list } else { - // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa - if (Foundation.rtl()) cmds = $.extend({}, commandList.ltr, commandList.rtl);else cmds = $.extend({}, commandList.rtl, commandList.ltr); - } + // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa + if (Foundation.rtl()) cmds = $.extend({}, commandList.ltr, commandList.rtl);else cmds = $.extend({}, commandList.rtl, commandList.ltr); + } command = cmds[keyCode]; fn = functions[command]; if (fn && typeof fn === 'function') { // execute function if exists - fn.apply(); + var returnValue = fn.apply(); if (functions.handled || typeof functions.handled === 'function') { // execute function when event was handled - functions.handled.apply(); + functions.handled(returnValue); } } else { if (functions.unhandled || typeof functions.unhandled === 'function') { // execute function when event was not handled - functions.unhandled.apply(); + functions.unhandled(); } } }, @@ -947,6 +680,9 @@ window.whatInput = function () { * @return {jQuery} $focusable - all focusable elements within `$element` */ findFocusable: function ($element) { + if (!$element) { + return false; + } return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function () { if (!$(this).is(':visible') || $(this).attr('tabindex') < 0) { return false; @@ -964,6 +700,35 @@ window.whatInput = function () { register: function (componentName, cmds) { commands[componentName] = cmds; + }, + + + /** + * Traps the focus in the given element. + * @param {jQuery} $element jQuery object to trap the foucs into. + */ + trapFocus: function ($element) { + var $focusable = Foundation.Keyboard.findFocusable($element), + $firstFocusable = $focusable.eq(0), + $lastFocusable = $focusable.eq(-1); + + $element.on('keydown.zf.trapfocus', function (event) { + if (event.target === $lastFocusable[0] && Foundation.Keyboard.parseKey(event) === 'TAB') { + event.preventDefault(); + $firstFocusable.focus(); + } else if (event.target === $firstFocusable[0] && Foundation.Keyboard.parseKey(event) === 'SHIFT_TAB') { + event.preventDefault(); + $lastFocusable.focus(); + } + }); + }, + + /** + * Releases the trapped focus from the given element. + * @param {jQuery} $element jQuery object to release the focus for. + */ + releaseFocus: function ($element) { + $element.off('keydown.zf.trapfocus'); } }; @@ -1010,10 +775,12 @@ window.whatInput = function () { namedQueries = parseStyleToObject(extractedStyles); for (var key in namedQueries) { - self.queries.push({ - name: key, - value: 'only screen and (min-width: ' + namedQueries[key] + ')' - }); + if (namedQueries.hasOwnProperty(key)) { + self.queries.push({ + name: key, + value: 'only screen and (min-width: ' + namedQueries[key] + ')' + }); + } } this.current = this._getCurrentSize(); @@ -1039,6 +806,23 @@ window.whatInput = function () { }, + /** + * Checks if the screen matches to a breakpoint. + * @function + * @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method. + * @returns {Boolean} `true` if the breakpoint matches, `false` if it does not. + */ + is: function (size) { + size = size.trim().split(' '); + if (size.length > 1 && size[1] === 'only') { + if (size[0] === this._getCurrentSize()) return true; + } else { + return this.atLeast(size[0]); + } + return false; + }, + + /** * Gets the media query of a breakpoint. * @function @@ -1047,8 +831,10 @@ window.whatInput = function () { */ get: function (size) { for (var i in this.queries) { - var query = this.queries[i]; - if (size === query.name) return query.value; + if (this.queries.hasOwnProperty(i)) { + var query = this.queries[i]; + if (size === query.name) return query.value; + } } return null; @@ -1089,14 +875,15 @@ window.whatInput = function () { var _this = this; $(window).on('resize.zf.mediaquery', function () { - var newSize = _this._getCurrentSize(); - - if (newSize !== _this.current) { - // Broadcast the media query change on the window - $(window).trigger('changed.zf.mediaquery', [newSize, _this.current]); + var newSize = _this._getCurrentSize(), + currentSize = _this.current; + if (newSize !== currentSize) { // Change the current media query _this.current = newSize; + + // Broadcast the media query change on the window + $(window).trigger('changed.zf.mediaquery', [newSize, currentSize]); } }); } @@ -1122,7 +909,7 @@ window.whatInput = function () { style.type = 'text/css'; style.id = 'matchmediajs-test'; - script.parentNode.insertBefore(style, script); + script && script.parentNode && script.parentNode.insertBefore(style, script); // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers info = 'getComputedStyle' in window && window.getComputedStyle(style, null) || style.currentStyle; @@ -1219,8 +1006,14 @@ window.whatInput = function () { start = null; // console.log('called'); + if (duration === 0) { + fn.apply(elem); + elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]); + return; + } + function move(ts) { - if (!start) start = window.performance.now(); + if (!start) start = ts; // console.log(start, ts); prog = ts - start; fn.apply(elem); @@ -1294,7 +1087,7 @@ window.whatInput = function () { var Nest = { Feather: function (menu) { - var type = arguments.length <= 1 || arguments[1] === undefined ? 'zf' : arguments[1]; + var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'zf'; menu.attr('role', 'menubar'); @@ -1303,8 +1096,6 @@ window.whatInput = function () { subItemClass = subMenuClass + '-item', hasSubClass = 'is-' + type + '-submenu-parent'; - menu.find('a:first').attr('tabindex', 0); - items.each(function () { var $item = $(this), $sub = $item.children('ul'); @@ -1312,15 +1103,22 @@ window.whatInput = function () { if ($sub.length) { $item.addClass(hasSubClass).attr({ 'aria-haspopup': true, - 'aria-expanded': false, 'aria-label': $item.children('a:first').text() }); + // Note: Drilldowns behave differently in how they hide, and so need + // additional attributes. We should look if this possibly over-generalized + // utility (Nest) is appropriate when we rework menus in 6.4 + if (type === 'drilldown') { + $item.attr({ 'aria-expanded': false }); + } $sub.addClass('submenu ' + subMenuClass).attr({ 'data-submenu': '', - 'aria-hidden': true, 'role': 'menu' }); + if (type === 'drilldown') { + $sub.attr({ 'aria-hidden': true }); + } } if ($item.parent('[data-submenu]').length) { @@ -1331,12 +1129,12 @@ window.whatInput = function () { return; }, Burn: function (menu, type) { - var items = menu.find('li').removeAttr('tabindex'), - subMenuClass = 'is-' + type + '-submenu', + var //items = menu.find('li'), + subMenuClass = 'is-' + type + '-submenu', subItemClass = subMenuClass + '-item', hasSubClass = 'is-' + type + '-submenu-parent'; - menu.find('*').removeClass(subMenuClass + ' ' + subItemClass + ' ' + hasSubClass + ' is-submenu-item submenu is-active').removeAttr('data-submenu').css('display', ''); + menu.find('>li, .menu, .menu > li').removeClass(subMenuClass + ' ' + subItemClass + ' ' + hasSubClass + ' is-submenu-item submenu is-active').removeAttr('data-submenu').css('display', ''); // console.log( menu.find('.' + subMenuClass + ', .' + subItemClass + ', .has-submenu, .is-submenu-item, .submenu, [data-submenu]') // .removeClass(subMenuClass + ' ' + subItemClass + ' has-submenu is-submenu-item submenu') @@ -1389,7 +1187,9 @@ window.whatInput = function () { if (options.infinite) { _this.restart(); //rerun the timer. } - cb(); + if (cb && typeof cb === 'function') { + cb(); + } }, remain); elem.trigger('timerstart.zf.' + nameSpace); }; @@ -1419,15 +1219,19 @@ window.whatInput = function () { } images.each(function () { - if (this.complete) { - singleImageLoaded(); - } else if (typeof this.naturalWidth !== 'undefined' && this.naturalWidth > 0) { + // Check if image is loaded + if (this.complete || this.readyState === 4 || this.readyState === 'complete') { singleImageLoaded(); - } else { - $(this).one('load', function () { - singleImageLoaded(); - }); } + // Force load the image + else { + // fix for IE. See https://css-tricks.com/snippets/jquery/fixing-load-in-ie-for-cached-images/ + var src = $(this).attr('src'); + $(this).attr('src', src + '?' + new Date().getTime()); + $(this).one('load', function () { + singleImageLoaded(); + }); + } }); function singleImageLoaded() { @@ -1441,7 +1245,9 @@ window.whatInput = function () { Foundation.Timer = Timer; Foundation.onImagesLoaded = onImagesLoaded; }(jQuery); -;//************************************************** +;'use strict'; + +//************************************************** //**Work inspired by multiple jquery swipe plugins** //**Done by Yohai Ararat *************************** //************************************************** @@ -1545,7 +1351,7 @@ window.whatInput = function () { simulatedEvent; if ('MouseEvent' in window && typeof window.MouseEvent === 'function') { - simulatedEvent = window.MouseEvent(type, { + simulatedEvent = new window.MouseEvent(type, { 'bubbles': true, 'cancelable': true, 'screenX': first.screenX, @@ -1830,7 +1636,12 @@ window.whatInput = function () { // Elements with [data-toggle] will toggle a plugin that supports it when clicked. $(document).on('click.zf.trigger', '[data-toggle]', function () { - triggers($(this), 'toggle'); + var id = $(this).data('toggle'); + if (id) { + triggers($(this), 'toggle'); + } else { + $(this).trigger('toggle.zf.trigger'); + } }); // Elements with [data-closable] will respond to close.zf.trigger events. @@ -1857,7 +1668,7 @@ window.whatInput = function () { * @function * @private */ - $(window).load(function () { + $(window).on('load', function () { checkListeners(); }); @@ -1865,6 +1676,7 @@ window.whatInput = function () { eventsListener(); resizeListener(); scrollListener(); + mutateListener(); closemeListener(); } @@ -1948,6 +1760,17 @@ window.whatInput = function () { } } + function mutateListener(debounce) { + var $nodes = $('[data-mutate]'); + if ($nodes.length && MutationObserver) { + //trigger all listening elements and signal a mutate event + //no IE 9 or 10 + $nodes.each(function () { + $(this).triggerHandler('mutateme.zf.trigger'); + }); + } + } + function eventsListener() { if (!MutationObserver) { return false; @@ -1957,27 +1780,28 @@ window.whatInput = function () { //element callback var listeningElementsMutation = function (mutationRecordsList) { var $target = $(mutationRecordsList[0].target); + //trigger the event handler for the element depending on type - switch ($target.attr("data-events")) { + switch (mutationRecordsList[0].type) { - case "resize": - $target.triggerHandler('resizeme.zf.trigger', [$target]); + case "attributes": + if ($target.attr("data-events") === "scroll" && mutationRecordsList[0].attributeName === "data-events") { + $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]); + } + if ($target.attr("data-events") === "resize" && mutationRecordsList[0].attributeName === "data-events") { + $target.triggerHandler('resizeme.zf.trigger', [$target]); + } + if (mutationRecordsList[0].attributeName === "style") { + $target.closest("[data-mutate]").attr("data-events", "mutate"); + $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]); + } break; - case "scroll": - $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]); + case "childList": + $target.closest("[data-mutate]").attr("data-events", "mutate"); + $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]); break; - // case "mutate" : - // console.log('mutate', $target); - // $target.triggerHandler('mutate.zf.trigger'); - // - // //make sure we don't get stuck in an infinite loop from sloppy codeing - // if ($target.index('[data-mutate]') == $("[data-mutate]").length-1) { - // domMutationObserver(); - // } - // break; - default: return false; //nothing @@ -1985,10 +1809,10 @@ window.whatInput = function () { }; if (nodes.length) { - //for each element that needs to listen for resizing, scrolling, (or coming soon mutation) add a single observer + //for each element that needs to listen for resizing, scrolling, or mutation add a single observer for (var i = 0; i <= nodes.length - 1; i++) { var elementObserver = new MutationObserver(listeningElementsMutation); - elementObserver.observe(nodes[i], { attributes: true, childList: false, characterData: false, subtree: false, attributeFilter: ["data-events"] }); + elementObserver.observe(nodes[i], { attributes: true, childList: true, characterData: false, subtree: true, attributeFilter: ["data-events", "style"] }); } } } @@ -2057,9 +1881,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {Object} element - jQuery object to add the trigger to. * @param {Object} options - Overrides to the default plugin settings. */ - function Abide(element) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck(this, Abide); @@ -2080,7 +1903,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _createClass(Abide, [{ key: '_init', value: function _init() { - this.$inputs = this.$element.find('input, textarea, select').not('[data-abide-ignore]'); + this.$inputs = this.$element.find('input, textarea, select'); this._events(); } @@ -2112,6 +1935,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _this2.validateInput($(e.target)); }); } + + if (this.options.validateOnBlur) { + this.$inputs.off('blur.zf.abide').on('blur.zf.abide', function (e) { + _this2.validateInput($(e.target)); + }); + } } /** @@ -2139,6 +1968,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var isGood = true; switch ($el[0].type) { + case 'checkbox': + isGood = $el[0].checked; + break; + case 'select': case 'select-one': case 'select-multiple': @@ -2309,12 +2142,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: 'validateInput', value: function validateInput($el) { + var _this4 = this; + var clearRequire = this.requiredCheck($el), validated = false, customValidator = true, validator = $el.attr('data-validator'), equalTo = true; + // don't validate ignored inputs or hidden inputs + if ($el.is('[data-abide-ignore]') || $el.is('[type="hidden"]')) { + return true; + } + switch ($el[0].type) { case 'radio': validated = this.validateRadio($el.attr('name')); @@ -2345,6 +2185,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var goodToGo = [clearRequire, validated, customValidator, equalTo].indexOf(false) === -1; var message = (goodToGo ? 'valid' : 'invalid') + '.zf.abide'; + if (goodToGo) { + // Re-validate inputs that depend on this one with equalto + var dependentElements = this.$element.find('[data-equalto="' + $el.attr('id') + '"]'); + if (dependentElements.length) { + (function () { + var _this = _this4; + dependentElements.each(function () { + if ($(this).val()) { + _this.validateInput($(this)); + } + }); + })(); + } + } + this[goodToGo ? 'removeErrorClasses' : 'addErrorClasses']($el); /** @@ -2437,19 +2292,25 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons // If at least one radio in the group has the `required` attribute, the group is considered required // Per W3C spec, all radio buttons in a group should have `required`, but we're being nice var $group = this.$element.find(':radio[name="' + groupName + '"]'); - var valid = false; - - // .attr() returns undefined if no elements in $group have the attribute "required" - if ($group.attr('required') === undefined) { - valid = true; - } + var valid = false, + required = false; - // For the group to be valid, at least one radio needs to be checked + // For the group to be required, at least one radio needs to be required $group.each(function (i, e) { - if ($(e).prop('checked')) { - valid = true; + if ($(e).attr('required')) { + required = true; } }); + if (!required) valid = true; + + if (!valid) { + // For the group to be valid, at least one radio needs to be checked + $group.each(function (i, e) { + if ($(e).prop('checked')) { + valid = true; + } + }); + }; return valid; } @@ -2465,12 +2326,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: 'matchValidation', value: function matchValidation($el, validators, required) { - var _this4 = this; + var _this5 = this; required = required ? true : false; var clear = validators.split(' ').map(function (v) { - return _this4.options.validators[v]($el, required, $el.parent()); + return _this5.options.validators[v]($el, required, $el.parent()); }); return clear.indexOf(false) === -1; } @@ -2490,7 +2351,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons $('.' + opts.inputErrorClass, $form).not('small').removeClass(opts.inputErrorClass); $(opts.formErrorSelector + '.' + opts.formErrorClass).removeClass(opts.formErrorClass); $form.find('[data-abide-error]').css('display', 'none'); - $(':input', $form).not(':button, :submit, :reset, :hidden, [data-abide-ignore]').val('').removeAttr('data-invalid'); + $(':input', $form).not(':button, :submit, :reset, :hidden, :radio, :checkbox, [data-abide-ignore]').val('').removeAttr('data-invalid'); + $(':input:radio', $form).not('[data-abide-ignore]').prop('checked', false).removeAttr('data-invalid'); + $(':input:checkbox', $form).not('[data-abide-ignore]').prop('checked', false).removeAttr('data-invalid'); /** * Fires when the form has been reset. * @event Abide#formreset @@ -2569,6 +2432,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ liveValidate: false, + /** + * Set to true to validate inputs on blur. + * @option + * @example false + */ + validateOnBlur: false, + patterns: { alpha: /^[a-zA-Z]+$/, alpha_numeric: /^[a-zA-Z0-9]+$/, @@ -2642,7 +2512,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {jQuery} element - jQuery object to make into an accordion. * @param {Object} options - a plain object with settings to override the default options. */ - function Accordion(element, options) { _classCallCheck(this, Accordion); @@ -2670,7 +2539,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons key: '_init', value: function _init() { this.$element.attr('role', 'tablist'); - this.$tabs = this.$element.children('li, [data-accordion-item]'); + this.$tabs = this.$element.children('[data-accordion-item]'); this.$tabs.each(function (idx, el) { var $el = $(el), @@ -2710,15 +2579,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var $tabContent = $elem.children('[data-tab-content]'); if ($tabContent.length) { $elem.children('a').off('click.zf.accordion keydown.zf.accordion').on('click.zf.accordion', function (e) { - // $(this).children('a').on('click.zf.accordion', function(e) { e.preventDefault(); - if ($elem.hasClass('is-active')) { - if (_this.options.allowAllClosed || $elem.siblings().hasClass('is-active')) { - _this.up($tabContent); - } - } else { - _this.down($tabContent); - } + _this.toggle($tabContent); }).on('keydown.zf.accordion', function (e) { Foundation.Keyboard.handleKey(e, 'Accordion', { toggle: function () { @@ -2748,7 +2610,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /** * Toggles the selected content pane's open/close state. - * @param {jQuery} $target - jQuery object of the pane to toggle. + * @param {jQuery} $target - jQuery object of the pane to toggle (`.accordion-content`). * @function */ @@ -2756,11 +2618,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons key: 'toggle', value: function toggle($target) { if ($target.parent().hasClass('is-active')) { - if (this.options.allowAllClosed || $target.parent().siblings().hasClass('is-active')) { - this.up($target); - } else { - return; - } + this.up($target); } else { this.down($target); } @@ -2768,7 +2626,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /** * Opens the accordion tab defined by `$target`. - * @param {jQuery} $target - Accordion pane to open. + * @param {jQuery} $target - Accordion pane to open (`.accordion-content`). * @param {Boolean} firstTime - flag to determine if reflow should happen. * @fires Accordion#down * @function @@ -2779,15 +2637,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function down($target, firstTime) { var _this2 = this; + $target.attr('aria-hidden', false).parent('[data-tab-content]').addBack().parent().addClass('is-active'); + if (!this.options.multiExpand && !firstTime) { var $currentActive = this.$element.children('.is-active').children('[data-tab-content]'); if ($currentActive.length) { - this.up($currentActive); + this.up($currentActive.not($target)); } } - $target.attr('aria-hidden', false).parent('[data-tab-content]').addBack().parent().addClass('is-active'); - $target.slideDown(this.options.slideSpeed, function () { /** * Fires when the tab is done opening. @@ -2804,7 +2662,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /** * Closes the tab defined by `$target`. - * @param {jQuery} $target - Accordion tab to close. + * @param {jQuery} $target - Accordion tab to close (`.accordion-content`). * @fires Accordion#up * @function */ @@ -2814,9 +2672,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function up($target) { var $aunts = $target.parent().siblings(), _this = this; - var canClose = this.options.multiExpand ? $aunts.hasClass('is-active') : $target.parent().hasClass('is-active'); - if (!this.options.allowAllClosed && !canClose) { + if (!this.options.allowAllClosed && !$aunts.hasClass('is-active') || !$target.parent().hasClass('is-active')) { return; } @@ -2847,7 +2704,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: 'destroy', value: function destroy() { - this.$element.find('[data-tab-content]').slideUp(0).css('display', ''); + this.$element.find('[data-tab-content]').stop(true).slideUp(0).css('display', ''); this.$element.find('a').off('.zf.accordion'); Foundation.unregisterPlugin(this); @@ -2905,7 +2762,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {jQuery} element - jQuery object to make into an accordion menu. * @param {Object} options - Overrides to the default plugin settings. */ - function AccordionMenu(element, options) { _classCallCheck(this, AccordionMenu); @@ -2924,9 +2780,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 'ARROW_UP': 'up', 'ARROW_DOWN': 'down', 'ARROW_LEFT': 'close', - 'ESCAPE': 'closeAll', - 'TAB': 'down', - 'SHIFT_TAB': 'up' + 'ESCAPE': 'closeAll' }); } @@ -2941,7 +2795,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function _init() { this.$element.find('[data-submenu]').not('.is-active').slideUp(0); //.find('a').css('padding-left', '1rem'); this.$element.attr({ - 'role': 'tablist', + 'role': 'menu', 'aria-multiselectable': this.options.multiOpen }); @@ -2955,13 +2809,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons $elem.attr({ 'aria-controls': subId, 'aria-expanded': isActive, - 'role': 'tab', + 'role': 'menuitem', 'id': linkId }); $sub.attr({ 'aria-labelledby': linkId, 'aria-hidden': !isActive, - 'role': 'tabpanel', + 'role': 'menu', 'id': subId }); }); @@ -3014,9 +2868,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if ($(this).is(':first-child')) { // is first element of sub menu $prevElement = $element.parents('li').first().find('a').first(); - } else if ($prevElement.children('[data-submenu]:visible').length) { + } else if ($prevElement.parents('li').first().children('[data-submenu]:visible').length) { // if previous element has open sub menu - $prevElement = $prevElement.find('li:last-child').find('a').first(); + $prevElement = $prevElement.parents('li').find('li:last-child').find('a').first(); } if ($(this).is(':last-child')) { // is last element of sub menu @@ -3026,6 +2880,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return; } }); + Foundation.Keyboard.handleKey(e, 'AccordionMenu', { open: function () { if ($target.is(':hidden')) { @@ -3044,12 +2899,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } }, up: function () { - $prevElement.attr('tabindex', -1).focus(); - e.preventDefault(); + $prevElement.focus(); + return true; }, down: function () { - $nextElement.attr('tabindex', -1).focus(); - e.preventDefault(); + $nextElement.focus(); + return true; }, toggle: function () { if ($element.children('[data-submenu]').length) { @@ -3059,7 +2914,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons closeAll: function () { _this.hideAll(); }, - handled: function () { + handled: function (preventDefault) { + if (preventDefault) { + e.preventDefault(); + } e.stopImmediatePropagation(); } }); @@ -3074,7 +2932,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: 'hideAll', value: function hideAll() { - this.$element.find('[data-submenu]').slideUp(this.options.slideSpeed); + this.up(this.$element.find('[data-submenu]')); + } + + /** + * Opens all panes of the menu. + * @function + */ + + }, { + key: 'showAll', + value: function showAll() { + this.down(this.$element.find('[data-submenu]')); } /** @@ -3112,15 +2981,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons $target.addClass('is-active').attr({ 'aria-hidden': false }).parent('.is-accordion-submenu-parent').attr({ 'aria-expanded': true }); - Foundation.Move(this.options.slideSpeed, $target, function () { - $target.slideDown(_this.options.slideSpeed, function () { - /** - * Fires when the menu is done opening. - * @event AccordionMenu#down - */ - _this.$element.trigger('down.zf.accordionMenu', [$target]); - }); + //Foundation.Move(this.options.slideSpeed, $target, function() { + $target.slideDown(_this.options.slideSpeed, function () { + /** + * Fires when the menu is done opening. + * @event AccordionMenu#down + */ + _this.$element.trigger('down.zf.accordionMenu', [$target]); }); + //}); } /** @@ -3133,15 +3002,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons key: 'up', value: function up($target) { var _this = this; - Foundation.Move(this.options.slideSpeed, $target, function () { - $target.slideUp(_this.options.slideSpeed, function () { - /** - * Fires when the menu is done collapsing up. - * @event AccordionMenu#up - */ - _this.$element.trigger('up.zf.accordionMenu', [$target]); - }); + //Foundation.Move(this.options.slideSpeed, $target, function(){ + $target.slideUp(_this.options.slideSpeed, function () { + /** + * Fires when the menu is done collapsing up. + * @event AccordionMenu#up + */ + _this.$element.trigger('up.zf.accordionMenu', [$target]); }); + //}); var $menus = $target.find('[data-submenu]').slideUp(0).addBack().attr('aria-hidden', true); @@ -3208,7 +3077,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {jQuery} element - jQuery object to make into an accordion menu. * @param {Object} options - Overrides to the default plugin settings. */ - function Drilldown(element, options) { _classCallCheck(this, Drilldown); @@ -3245,8 +3113,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.$submenuAnchors = this.$element.find('li.is-drilldown-submenu-parent').children('a'); this.$submenus = this.$submenuAnchors.parent('li').children('[data-submenu]'); this.$menuItems = this.$element.find('li').not('.js-drilldown-back').attr('role', 'menuitem').find('a'); + this.$element.attr('data-mutate', this.$element.attr('data-drilldown') || Foundation.GetYoDigits(6, 'drilldown')); this._prepareMenu(); + this._registerEvents(); this._keyboardEvents(); } @@ -3267,32 +3137,54 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons // this._menuLinkEvents(); // } this.$submenuAnchors.each(function () { - var $sub = $(this); - var $link = $sub.find('a:first'); + var $link = $(this); + var $sub = $link.parent(); if (_this.options.parentLink) { $link.clone().prependTo($sub.children('[data-submenu]')).wrap('
  • '); } - $link.data('savedHref', $link.attr('href')).removeAttr('href'); - $sub.children('[data-submenu]').attr({ + $link.data('savedHref', $link.attr('href')).removeAttr('href').attr('tabindex', 0); + $link.children('[data-submenu]').attr({ 'aria-hidden': true, 'tabindex': 0, 'role': 'menu' }); - _this._events($sub); + _this._events($link); }); this.$submenus.each(function () { var $menu = $(this), $back = $menu.find('.js-drilldown-back'); if (!$back.length) { - $menu.prepend(_this.options.backButton); + switch (_this.options.backButtonPosition) { + case "bottom": + $menu.append(_this.options.backButton); + break; + case "top": + $menu.prepend(_this.options.backButton); + break; + default: + console.error("Unsupported backButtonPosition value '" + _this.options.backButtonPosition + "'"); + } } _this._back($menu); }); + + if (!this.options.autoHeight) { + this.$submenus.addClass('drilldown-submenu-cover-previous'); + } + if (!this.$element.parent().hasClass('is-drilldown')) { - this.$wrapper = $(this.options.wrapper).addClass('is-drilldown').css(this._getMaxDims()); - this.$element.wrap(this.$wrapper); + this.$wrapper = $(this.options.wrapper).addClass('is-drilldown'); + if (this.options.animateHeight) this.$wrapper.addClass('animate-height'); + this.$wrapper = this.$element.wrap(this.$wrapper).parent().css(this._getMaxDims()); } } + }, { + key: '_resize', + value: function _resize() { + this.$wrapper.css({ 'max-width': 'none', 'min-height': 'none' }); + // _getMaxDims has side effects (boo) but calling it should update all other necessary heights & widths + this.$wrapper.css(this._getMaxDims()); + } /** * Adds event handlers to elements in the menu. @@ -3318,28 +3210,67 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _this._show($elem.parent('li')); if (_this.options.closeOnClick) { - var $body = $('body').not(_this.$wrapper); + var $body = $('body'); $body.off('.zf.drilldown').on('click.zf.drilldown', function (e) { + if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target)) { + return; + } e.preventDefault(); _this._hideAll(); $body.off('.zf.drilldown'); }); } }); + this.$element.on('mutateme.zf.trigger', this._resize.bind(this)); } /** - * Adds keydown event listener to `li`'s in the menu. + * Adds event handlers to the menu element. + * @function * @private */ }, { - key: '_keyboardEvents', - value: function _keyboardEvents() { - var _this = this; + key: '_registerEvents', + value: function _registerEvents() { + if (this.options.scrollTop) { + this._bindHandler = this._scrollTop.bind(this); + this.$element.on('open.zf.drilldown hide.zf.drilldown closed.zf.drilldown', this._bindHandler); + } + } - this.$menuItems.add(this.$element.find('.js-drilldown-back > a')).on('keydown.zf.drilldown', function (e) { + /** + * Scroll to Top of Element or data-scroll-top-element + * @function + * @fires Drilldown#scrollme + */ + + }, { + key: '_scrollTop', + value: function _scrollTop() { + var _this = this; + var $scrollTopElement = _this.options.scrollTopElement != '' ? $(_this.options.scrollTopElement) : _this.$element, + scrollPos = parseInt($scrollTopElement.offset().top + _this.options.scrollTopOffset); + $('html, body').stop(true).animate({ scrollTop: scrollPos }, _this.options.animationDuration, _this.options.animationEasing, function () { + /** + * Fires after the menu has scrolled + * @event Drilldown#scrollme + */ + if (this === $('html')[0]) _this.$element.trigger('scrollme.zf.drilldown'); + }); + } + + /** + * Adds keydown event listener to `li`'s in the menu. + * @private + */ + }, { + key: '_keyboardEvents', + value: function _keyboardEvents() { + var _this = this; + + this.$menuItems.add(this.$element.find('.js-drilldown-back > a, .is-submenu-parent-item > a')).on('keydown.zf.drilldown', function (e) { var $element = $(this), $elements = $element.parent('li').parent('ul').children('li').children('a'), $prevElement, @@ -3360,7 +3291,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons $element.parent('li').one(Foundation.transitionend($element), function () { $element.parent('li').find('ul li a').filter(_this.$menuItems).first().focus(); }); - e.preventDefault(); + return true; } }, previous: function () { @@ -3370,15 +3301,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons $element.parent('li').parent('ul').parent('li').children('a').first().focus(); }, 1); }); - e.preventDefault(); + return true; }, up: function () { $prevElement.focus(); - e.preventDefault(); + return true; }, down: function () { $nextElement.focus(); - e.preventDefault(); + return true; }, close: function () { _this._back(); @@ -3393,16 +3324,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons $element.parent('li').parent('ul').parent('li').children('a').first().focus(); }, 1); }); - e.preventDefault(); + return true; } else if ($element.is(_this.$submenuAnchors)) { _this._show($element.parent('li')); $element.parent('li').one(Foundation.transitionend($element), function () { $element.parent('li').find('ul li a').filter(_this.$menuItems).first().focus(); }); - e.preventDefault(); + return true; } }, - handled: function () { + handled: function (preventDefault) { + if (preventDefault) { + e.preventDefault(); + } e.stopImmediatePropagation(); } }); @@ -3419,6 +3353,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons key: '_hideAll', value: function _hideAll() { var $elem = this.$element.find('.is-drilldown-submenu.is-active').addClass('is-closing'); + if (this.options.autoHeight) this.$wrapper.css({ height: $elem.parent().closest('ul').data('calcHeight') }); $elem.one(Foundation.transitionend($elem), function (e) { $elem.removeClass('is-active is-closing'); }); @@ -3445,6 +3380,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons e.stopImmediatePropagation(); // console.log('mouseup on back'); _this._hide($elem); + + // If there is a parent submenu, call show + var parentSubMenu = $elem.parent('li').parent('ul').parent('li'); + if (parentSubMenu.length) { + _this._show(parentSubMenu); + } }); } @@ -3476,8 +3417,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_show', value: function _show($elem) { - $elem.children('[data-submenu]').addClass('is-active'); - + if (this.options.autoHeight) this.$wrapper.css({ height: $elem.children('[data-submenu]').data('calcHeight') }); + $elem.attr('aria-expanded', true); + $elem.children('[data-submenu]').addClass('is-active').attr('aria-hidden', false); + /** + * Fires when the submenu has opened. + * @event Drilldown#open + */ this.$element.trigger('open.zf.drilldown', [$elem]); } }, { @@ -3491,13 +3437,16 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {jQuery} $elem - the current sub-menu to hide, i.e. the `ul` tag. */ value: function _hide($elem) { + if (this.options.autoHeight) this.$wrapper.css({ height: $elem.parent().closest('ul').data('calcHeight') }); var _this = this; + $elem.parent('li').attr('aria-expanded', false); + $elem.attr('aria-hidden', true).addClass('is-closing'); $elem.addClass('is-closing').one(Foundation.transitionend($elem), function () { $elem.removeClass('is-active is-closing'); $elem.blur(); }); /** - * Fires when the submenu is has closed. + * Fires when the submenu has closed. * @event Drilldown#hide */ $elem.trigger('hide.zf.drilldown', [$elem]); @@ -3513,14 +3462,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_getMaxDims', value: function _getMaxDims() { - var max = 0, - result = {}; + var maxHeight = 0, + result = {}, + _this = this; this.$submenus.add(this.$element).each(function () { var numOfElems = $(this).children('li').length; - max = numOfElems > max ? numOfElems : max; + var height = Foundation.Box.GetDimensions(this).height; + maxHeight = height > maxHeight ? height : maxHeight; + if (_this.options.autoHeight) { + $(this).data('calcHeight', height); + if (!$(this).hasClass('is-drilldown-submenu')) result['height'] = height; + } }); - result['min-height'] = max * this.$menuItems[0].getBoundingClientRect().height + 'px'; + if (!this.options.autoHeight) result['min-height'] = maxHeight + 'px'; + result['max-width'] = this.$element[0].getBoundingClientRect().width + 'px'; return result; @@ -3534,11 +3490,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: 'destroy', value: function destroy() { + if (this.options.scrollTop) this.$element.off('.zf.drilldown', this._bindHandler); this._hideAll(); + this.$element.off('mutateme.zf.trigger'); Foundation.Nest.Burn(this.$element, 'drilldown'); - this.$element.unwrap().find('.js-drilldown-back, .is-submenu-parent-item').remove().end().find('.is-active, .is-closing, .is-drilldown-submenu').removeClass('is-active is-closing is-drilldown-submenu').end().find('[data-submenu]').removeAttr('aria-hidden tabindex role').off('.zf.drilldown').end().off('zf.drilldown'); + this.$element.unwrap().find('.js-drilldown-back, .is-submenu-parent-item').remove().end().find('.is-active, .is-closing, .is-drilldown-submenu').removeClass('is-active is-closing is-drilldown-submenu').end().find('[data-submenu]').removeAttr('aria-hidden tabindex role'); + this.$submenuAnchors.each(function () { + $(this).off('.zf.drilldown'); + }); + + this.$submenus.removeClass('drilldown-submenu-cover-previous'); + this.$element.find('a').each(function () { var $link = $(this); + $link.removeAttr('tabindex'); if ($link.data('savedHref')) { $link.attr('href', $link.data('savedHref')).removeData('savedHref'); } else { @@ -3554,11 +3519,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons Drilldown.defaults = { /** - * Markup used for JS generated back button. Prepended to submenu lists and deleted on `destroy` method, 'js-drilldown-back' class required. Remove the backslash (`\`) if copy and pasting. + * Markup used for JS generated back button. Prepended or appended (see backButtonPosition) to submenu lists and deleted on `destroy` method, 'js-drilldown-back' class required. Remove the backslash (`\`) if copy and pasting. * @option * @example '<\li><\a>Back<\/a><\/li>' */ backButton: '
  • Back
  • ', + /** + * Position the back button either at the top or bottom of drilldown submenus. + * @option + * @example bottom + */ + backButtonPosition: 'top', /** * Markup used to wrap drilldown menu. Use a class name for independent styling; the JS applied class: `is-drilldown` is required. Remove the backslash (`\`) if copy and pasting. * @option @@ -3576,7 +3547,49 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @option * @example false */ - closeOnClick: false + closeOnClick: false, + /** + * Allow the menu to auto adjust height. + * @option + * @example false + */ + autoHeight: false, + /** + * Animate the auto adjust height. + * @option + * @example false + */ + animateHeight: false, + /** + * Scroll to the top of the menu after opening a submenu or navigating back using the menu back button + * @option + * @example false + */ + scrollTop: false, + /** + * String jquery selector (for example 'body') of element to take offset().top from, if empty string the drilldown menu offset().top is taken + * @option + * @example '' + */ + scrollTopElement: '', + /** + * ScrollTop offset + * @option + * @example 100 + */ + scrollTopOffset: 0, + /** + * Scroll animation duration + * @option + * @example 500 + */ + animationDuration: 500, + /** + * Scroll animation easing + * @option + * @example 'swing' + */ + animationEasing: 'swing' // holdOpen: false }; @@ -3607,7 +3620,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * Object should be of the dropdown panel, rather than its anchor. * @param {Object} options - Overrides to the default plugin settings. */ - function Dropdown(element, options) { _classCallCheck(this, Dropdown); @@ -3619,9 +3631,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons Foundation.Keyboard.register('Dropdown', { 'ENTER': 'open', 'SPACE': 'open', - 'ESCAPE': 'close', - 'TAB': 'tab_forward', - 'SHIFT_TAB': 'tab_backward' + 'ESCAPE': 'close' }); } @@ -3637,7 +3647,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function _init() { var $id = this.$element.attr('id'); - this.$anchor = $('[data-toggle="' + $id + '"]') || $('[data-open="' + $id + '"]'); + this.$anchor = $('[data-toggle="' + $id + '"]').length ? $('[data-toggle="' + $id + '"]') : $('[data-open="' + $id + '"]'); this.$anchor.attr({ 'aria-controls': $id, 'data-is-focus': false, @@ -3647,6 +3657,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); + if (this.options.parentClass) { + this.$parent = this.$element.parents('.' + this.options.parentClass); + } else { + this.$parent = null; + } this.options.positionClass = this.getPositionClass(); this.counter = 4; this.usedPositions = []; @@ -3670,9 +3685,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function getPositionClass() { var verticalPosition = this.$element[0].className.match(/(top|left|right|bottom)/g); verticalPosition = verticalPosition ? verticalPosition[0] : ''; - var horizontalPosition = /float-(.+)\s/.exec(this.$anchor[0].className); + var horizontalPosition = /float-(\S+)/.exec(this.$anchor[0].className); horizontalPosition = horizontalPosition ? horizontalPosition[1] : ''; var position = horizontalPosition ? horizontalPosition + ' ' + verticalPosition : verticalPosition; + return position; } @@ -3737,9 +3753,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons param = direction === 'top' ? 'height' : 'width', offset = param === 'height' ? this.options.vOffset : this.options.hOffset; - if ($eleDims.width >= $eleDims.windowDims.width || !this.counter && !Foundation.Box.ImNotTouchingYou(this.$element)) { - this.$element.offset(Foundation.Box.GetOffsets(this.$element, this.$anchor, 'center bottom', this.options.vOffset, this.options.hOffset, true)).css({ - 'width': $eleDims.windowDims.width - this.options.hOffset * 2, + if ($eleDims.width >= $eleDims.windowDims.width || !this.counter && !Foundation.Box.ImNotTouchingYou(this.$element, this.$parent)) { + var newWidth = $eleDims.windowDims.width, + parentHOffset = 0; + if (this.$parent) { + var $parentDims = Foundation.Box.GetDimensions(this.$parent), + parentHOffset = $parentDims.offset.left; + if ($parentDims.width < newWidth) { + newWidth = $parentDims.width; + } + } + + this.$element.offset(Foundation.Box.GetOffsets(this.$element, this.$anchor, 'center bottom', this.options.vOffset, this.options.hOffset + parentHOffset, true)).css({ + 'width': newWidth - this.options.hOffset * 2, 'height': 'auto' }); this.classChanged = true; @@ -3748,7 +3774,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.$element.offset(Foundation.Box.GetOffsets(this.$element, this.$anchor, position, this.options.vOffset, this.options.hOffset)); - while (!Foundation.Box.ImNotTouchingYou(this.$element, false, true) && this.counter) { + while (!Foundation.Box.ImNotTouchingYou(this.$element, this.$parent, true) && this.counter) { this._reposition(position); this._setPosition(); } @@ -3773,11 +3799,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (this.options.hover) { this.$anchor.off('mouseenter.zf.dropdown mouseleave.zf.dropdown').on('mouseenter.zf.dropdown', function () { - clearTimeout(_this.timeout); - _this.timeout = setTimeout(function () { - _this.open(); - _this.$anchor.data('hover', true); - }, _this.options.hoverDelay); + var bodyData = $('body').data(); + if (typeof bodyData.whatinput === 'undefined' || bodyData.whatinput === 'mouse') { + clearTimeout(_this.timeout); + _this.timeout = setTimeout(function () { + _this.open(); + _this.$anchor.data('hover', true); + }, _this.options.hoverDelay); + } }).on('mouseleave.zf.dropdown', function () { clearTimeout(_this.timeout); _this.timeout = setTimeout(function () { @@ -3803,32 +3832,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons visibleFocusableElements = Foundation.Keyboard.findFocusable(_this.$element); Foundation.Keyboard.handleKey(e, 'Dropdown', { - tab_forward: function () { - if (_this.$element.find(':focus').is(visibleFocusableElements.eq(-1))) { - // left modal downwards, setting focus to first element - if (_this.options.trapFocus) { - // if focus shall be trapped - visibleFocusableElements.eq(0).focus(); - e.preventDefault(); - } else { - // if focus is not trapped, close dropdown on focus out - _this.close(); - } - } - }, - tab_backward: function () { - if (_this.$element.find(':focus').is(visibleFocusableElements.eq(0)) || _this.$element.is(':focus')) { - // left modal upwards, setting focus to last element - if (_this.options.trapFocus) { - // if focus shall be trapped - visibleFocusableElements.eq(-1).focus(); - e.preventDefault(); - } else { - // if focus is not trapped, close dropdown on focus out - _this.close(); - } - } - }, open: function () { if ($target.is(_this.$anchor)) { _this.open(); @@ -3899,6 +3902,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this._addBodyHandler(); } + if (this.options.trapFocus) { + Foundation.Keyboard.trapFocus(this.$element); + } + /** * Fires once the dropdown is visible. * @event Dropdown#show @@ -3934,6 +3941,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.usedPositions.length = 0; } this.$element.trigger('hide.zf.dropdown', [this.$element]); + + if (this.options.trapFocus) { + Foundation.Keyboard.releaseFocus(this.$element); + } } /** @@ -3971,6 +3982,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }(); Dropdown.defaults = { + /** + * Class that designates bounding container of Dropdown (Default: window) + * @option + * @example 'dropdown-parent' + */ + parentClass: null, /** * Amount of time to delay opening a submenu on hover event. * @option @@ -4054,7 +4071,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {jQuery} element - jQuery object to make into a dropdown menu. * @param {Object} options - Overrides to the default plugin settings. */ - function DropdownMenu(element, options) { _classCallCheck(this, DropdownMenu); @@ -4103,57 +4119,74 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this._events(); } }, { - key: '_events', + key: '_isVertical', + value: function _isVertical() { + return this.$tabs.css('display') === 'block'; + } /** * Adds event listeners to elements within the menu * @private * @function */ + + }, { + key: '_events', value: function _events() { var _this = this, hasTouch = 'ontouchstart' in window || typeof window.ontouchstart !== 'undefined', parClass = 'is-dropdown-submenu-parent'; - if (this.options.clickOpen || hasTouch) { - this.$menuItems.on('click.zf.dropdownmenu touchstart.zf.dropdownmenu', function (e) { - var $elem = $(e.target).parentsUntil('ul', '.' + parClass), - hasSub = $elem.hasClass(parClass), - hasClicked = $elem.attr('data-is-click') === 'true', - $sub = $elem.children('.is-dropdown-submenu'); - - if (hasSub) { - if (hasClicked) { - if (!_this.options.closeOnClick || !_this.options.clickOpen && !hasTouch || _this.options.forceFollow && hasTouch) { - return; - } else { - e.stopImmediatePropagation(); - e.preventDefault(); - _this._hide($elem); - } + // used for onClick and in the keyboard handlers + var handleClickFn = function (e) { + var $elem = $(e.target).parentsUntil('ul', '.' + parClass), + hasSub = $elem.hasClass(parClass), + hasClicked = $elem.attr('data-is-click') === 'true', + $sub = $elem.children('.is-dropdown-submenu'); + + if (hasSub) { + if (hasClicked) { + if (!_this.options.closeOnClick || !_this.options.clickOpen && !hasTouch || _this.options.forceFollow && hasTouch) { + return; } else { - e.preventDefault(); e.stopImmediatePropagation(); - _this._show($elem.children('.is-dropdown-submenu')); - $elem.add($elem.parentsUntil(_this.$element, '.' + parClass)).attr('data-is-click', true); + e.preventDefault(); + _this._hide($elem); } } else { - return; + e.preventDefault(); + e.stopImmediatePropagation(); + _this._show($sub); + $elem.add($elem.parentsUntil(_this.$element, '.' + parClass)).attr('data-is-click', true); + } + } + }; + + if (this.options.clickOpen || hasTouch) { + this.$menuItems.on('click.zf.dropdownmenu touchstart.zf.dropdownmenu', handleClickFn); + } + + // Handle Leaf element Clicks + if (_this.options.closeOnClickInside) { + this.$menuItems.on('click.zf.dropdownmenu touchend.zf.dropdownmenu', function (e) { + var $elem = $(this), + hasSub = $elem.hasClass(parClass); + if (!hasSub) { + _this._hide(); } }); } if (!this.options.disableHover) { this.$menuItems.on('mouseenter.zf.dropdownmenu', function (e) { - e.stopImmediatePropagation(); var $elem = $(this), hasSub = $elem.hasClass(parClass); if (hasSub) { - clearTimeout(_this.delay); - _this.delay = setTimeout(function () { + clearTimeout($elem.data('_delay')); + $elem.data('_delay', setTimeout(function () { _this._show($elem.children('.is-dropdown-submenu')); - }, _this.options.hoverDelay); + }, _this.options.hoverDelay)); } }).on('mouseleave.zf.dropdownmenu', function (e) { var $elem = $(this), @@ -4163,10 +4196,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return false; } - clearTimeout(_this.delay); - _this.delay = setTimeout(function () { + clearTimeout($elem.data('_delay')); + $elem.data('_delay', setTimeout(function () { _this._hide($elem); - }, _this.options.closingTime); + }, _this.options.closingTime)); } }); } @@ -4186,16 +4219,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); var nextSibling = function () { - if (!$element.is(':last-child')) $nextElement.children('a:first').focus(); + if (!$element.is(':last-child')) { + $nextElement.children('a:first').focus(); + e.preventDefault(); + } }, prevSibling = function () { $prevElement.children('a:first').focus(); + e.preventDefault(); }, openSub = function () { var $sub = $element.children('ul.is-dropdown-submenu'); if ($sub.length) { _this._show($sub); $element.find('li > a:first').focus(); + e.preventDefault(); } else { return; } @@ -4205,6 +4243,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var close = $element.parent('ul').parent('li'); close.children('a:first').focus(); _this._hide(close); + e.preventDefault(); //} }; var functions = { @@ -4212,57 +4251,68 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons close: function () { _this._hide(_this.$element); _this.$menuItems.find('a:first').focus(); // focus to first element + e.preventDefault(); }, handled: function () { - e.preventDefault(); e.stopImmediatePropagation(); } }; if (isTab) { - if (_this.vertical) { + if (_this._isVertical()) { // vertical menu - if (_this.options.alignment === 'left') { - // left aligned + if (Foundation.rtl()) { + // right aligned $.extend(functions, { down: nextSibling, up: prevSibling, - next: openSub, - previous: closeSub + next: closeSub, + previous: openSub }); } else { - // right aligned + // left aligned $.extend(functions, { down: nextSibling, up: prevSibling, - next: closeSub, - previous: openSub + next: openSub, + previous: closeSub }); } } else { // horizontal menu - $.extend(functions, { - next: nextSibling, - previous: prevSibling, - down: openSub, - up: closeSub - }); + if (Foundation.rtl()) { + // right aligned + $.extend(functions, { + next: prevSibling, + previous: nextSibling, + down: openSub, + up: closeSub + }); + } else { + // left aligned + $.extend(functions, { + next: nextSibling, + previous: prevSibling, + down: openSub, + up: closeSub + }); + } } } else { // not tabs -> one sub - if (_this.options.alignment === 'left') { - // left aligned + if (Foundation.rtl()) { + // right aligned $.extend(functions, { - next: openSub, - previous: closeSub, + next: closeSub, + previous: openSub, down: nextSibling, up: prevSibling }); } else { - // right aligned + // left aligned $.extend(functions, { - next: closeSub, - previous: openSub, + next: openSub, + previous: closeSub, down: nextSibling, up: prevSibling }); @@ -4310,7 +4360,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons })); var $sibs = $sub.parent('li.is-dropdown-submenu-parent').siblings('li.is-dropdown-submenu-parent'); this._hide($sibs, idx); - $sub.css('visibility', 'hidden').addClass('js-dropdown-active').attr({ 'aria-hidden': false }).parent('li.is-dropdown-submenu-parent').addClass('is-active').attr({ 'aria-expanded': true }); + $sub.css('visibility', 'hidden').addClass('js-dropdown-active').parent('li.is-dropdown-submenu-parent').addClass('is-active'); var clear = Foundation.Box.ImNotTouchingYou($sub, null, true); if (!clear) { var oldClass = this.options.alignment === 'left' ? '-right' : '-left', @@ -4358,13 +4408,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (somethingToClose) { $toClose.find('li.is-active').add($toClose).attr({ - 'aria-expanded': false, 'data-is-click': false }).removeClass('is-active'); - $toClose.find('ul.js-dropdown-active').attr({ - 'aria-hidden': true - }).removeClass('js-dropdown-active'); + $toClose.find('ul.js-dropdown-active').removeClass('js-dropdown-active'); if (this.changed || $toClose.find('opens-inner').length) { var oldClass = this.options.alignment === 'left' ? 'right' : 'left'; @@ -4446,6 +4493,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @example true */ closeOnClick: true, + /** + * Allow clicks on leaf anchor links to close any open submenus. + * @option + * @example true + */ + closeOnClickInside: true, /** * Class applied to vertical oriented menus, Foundation default is `vertical`. Update this if using your own class. * @option @@ -4480,6 +4533,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /** * Equalizer module. * @module foundation.equalizer + * @requires foundation.util.mediaQuery + * @requires foundation.util.timerAndImageLoader if equalizer contains images */ var Equalizer = function () { @@ -4490,7 +4545,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {Object} element - jQuery object to add the trigger to. * @param {Object} options - Overrides to the default plugin settings. */ - function Equalizer(element, options) { _classCallCheck(this, Equalizer); @@ -4516,10 +4570,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.$watched = $watched.length ? $watched : this.$element.find('[data-equalizer-watch]'); this.$element.attr('data-resize', eqId || Foundation.GetYoDigits(6, 'eq')); + this.$element.attr('data-mutate', eqId || Foundation.GetYoDigits(6, 'eq')); this.hasNested = this.$element.find('[data-equalizer]').length > 0; this.isNested = this.$element.parentsUntil(document.body, '[data-equalizer]').length > 0; this.isOn = false; + this._bindHandler = { + onResizeMeBound: this._onResizeMe.bind(this), + onPostEqualizedBound: this._onPostEqualized.bind(this) + }; var imgs = this.$element.find('img'); var tooSmall; @@ -4547,7 +4606,35 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons key: '_pauseEvents', value: function _pauseEvents() { this.isOn = false; - this.$element.off('.zf.equalizer resizeme.zf.trigger'); + this.$element.off({ + '.zf.equalizer': this._bindHandler.onPostEqualizedBound, + 'resizeme.zf.trigger': this._bindHandler.onResizeMeBound, + 'mutateme.zf.trigger': this._bindHandler.onResizeMeBound + }); + } + + /** + * function to handle $elements resizeme.zf.trigger, with bound this on _bindHandler.onResizeMeBound + * @private + */ + + }, { + key: '_onResizeMe', + value: function _onResizeMe(e) { + this._reflow(); + } + + /** + * function to handle $elements postequalized.zf.equalizer, with bound this on _bindHandler.onPostEqualizedBound + * @private + */ + + }, { + key: '_onPostEqualized', + value: function _onPostEqualized(e) { + if (e.target !== this.$element[0]) { + this._reflow(); + } } /** @@ -4561,13 +4648,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _this = this; this._pauseEvents(); if (this.hasNested) { - this.$element.on('postequalized.zf.equalizer', function (e) { - if (e.target !== _this.$element[0]) { - _this._reflow(); - } - }); + this.$element.on('postequalized.zf.equalizer', this._bindHandler.onPostEqualizedBound); } else { - this.$element.on('resizeme.zf.trigger', this._reflow.bind(this)); + this.$element.on('resizeme.zf.trigger', this._bindHandler.onResizeMeBound); + this.$element.on('mutateme.zf.trigger', this._bindHandler.onResizeMeBound); } this.isOn = true; } @@ -4580,7 +4664,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_checkMQ', value: function _checkMQ() { - var tooSmall = !Foundation.MediaQuery.atLeast(this.options.equalizeOn); + var tooSmall = !Foundation.MediaQuery.is(this.options.equalizeOn); if (tooSmall) { if (this.isOn) { this._pauseEvents(); @@ -4634,7 +4718,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_isStacked', value: function _isStacked() { - return this.$watched[0].offsetTop !== this.$watched[1].offsetTop; + if (!this.$watched[0] || !this.$watched[1]) { + return true; + } + return this.$watched[0].getBoundingClientRect().top !== this.$watched[1].getBoundingClientRect().top; } /** @@ -4720,8 +4807,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * Changes the CSS height property of each child in an Equalizer parent to match the tallest by row * @param {array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child * @fires Equalizer#preequalized - * @fires Equalizer#preequalizedRow - * @fires Equalizer#postequalizedRow + * @fires Equalizer#preequalizedrow + * @fires Equalizer#postequalizedrow * @fires Equalizer#postequalized */ @@ -4741,7 +4828,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } /** * Fires before the heights per row are applied - * @event Equalizer#preequalizedRow + * @event Equalizer#preequalizedrow */ this.$element.trigger('preequalizedrow.zf.equalizer'); for (var j = 0, lenJ = groupsILength - 1; j < lenJ; j++) { @@ -4749,7 +4836,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } /** * Fires when the heights per row have been applied - * @event Equalizer#postequalizedRow + * @event Equalizer#postequalizedrow */ this.$element.trigger('postequalizedrow.zf.equalizer'); } @@ -4788,7 +4875,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @option * @example true */ - equalizeOnStack: true, + equalizeOnStack: false, /** * Enable height equalization row by row. * @option @@ -4829,7 +4916,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {Object} element - jQuery object to add the trigger to. * @param {Object} options - Overrides to the default plugin settings. */ - function Interchange(element, options) { _classCallCheck(this, Interchange); @@ -4868,7 +4954,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_events', value: function _events() { - $(window).on('resize.zf.interchange', Foundation.util.throttle(this._reflow.bind(this), 50)); + var _this2 = this; + + $(window).on('resize.zf.interchange', Foundation.util.throttle(function () { + _this2._reflow(); + }, 50)); } /** @@ -4884,10 +4974,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons // Iterate through each rule, but only save the last match for (var i in this.rules) { - var rule = this.rules[i]; - - if (window.matchMedia(rule.query).matches) { - match = rule; + if (this.rules.hasOwnProperty(i)) { + var rule = this.rules[i]; + if (window.matchMedia(rule.query).matches) { + match = rule; + } } } @@ -4906,8 +4997,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons key: '_addBreakpoints', value: function _addBreakpoints() { for (var i in Foundation.MediaQuery.queries) { - var query = Foundation.MediaQuery.queries[i]; - Interchange.SPECIAL_QUERIES[query.name] = query.value; + if (Foundation.MediaQuery.queries.hasOwnProperty(i)) { + var query = Foundation.MediaQuery.queries[i]; + Interchange.SPECIAL_QUERIES[query.name] = query.value; + } } } @@ -4932,18 +5025,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } for (var i in rules) { - var rule = rules[i].slice(1, -1).split(', '); - var path = rule.slice(0, -1).join(''); - var query = rule[rule.length - 1]; + if (rules.hasOwnProperty(i)) { + var rule = rules[i].slice(1, -1).split(', '); + var path = rule.slice(0, -1).join(''); + var query = rule[rule.length - 1]; - if (Interchange.SPECIAL_QUERIES[query]) { - query = Interchange.SPECIAL_QUERIES[query]; - } + if (Interchange.SPECIAL_QUERIES[query]) { + query = Interchange.SPECIAL_QUERIES[query]; + } - rulesList.push({ - path: path, - query: query - }); + rulesList.push({ + path: path, + query: query + }); + } } this.rules = rulesList; @@ -4966,7 +5061,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons // Replacing images if (this.$element[0].nodeName === 'IMG') { - this.$element.attr('src', path).load(function () { + this.$element.attr('src', path).on('load', function () { _this.currentPath = path; }).trigger(trigger); } @@ -5048,7 +5143,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {Object} element - jQuery object to add the trigger to. * @param {Object} options - Overrides to the default plugin settings. */ - function Magellan(element, options) { _classCallCheck(this, Magellan); @@ -5056,6 +5150,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.options = $.extend({}, Magellan.defaults, this.$element.data(), options); this._init(); + this.calcPoints(); Foundation.registerPlugin(this, 'Magellan'); } @@ -5141,6 +5236,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var arrival = this.getAttribute('href'); _this.scrollToLoc(arrival); }); + $(window).on('popstate', function (e) { + if (_this.options.deepLinking) { + _this.scrollToLoc(window.location.hash); + } + }); } /** @@ -5152,9 +5252,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: 'scrollToLoc', value: function scrollToLoc(loc) { - var scrollPos = Math.round($(loc).offset().top - this.options.threshold / 2 - this.options.barOffset); + // Do nothing if target does not exist to prevent errors + if (!$(loc).length) { + return false; + } + this._inTransition = true; + var _this = this, + scrollPos = Math.round($(loc).offset().top - this.options.threshold / 2 - this.options.barOffset); - $('html, body').stop(true).animate({ scrollTop: scrollPos }, this.options.animationDuration, this.options.animationEasing); + $('html, body').stop(true).animate({ scrollTop: scrollPos }, this.options.animationDuration, this.options.animationEasing, function () { + _this._inTransition = false;_this._updateActive(); + }); } /** @@ -5179,31 +5287,39 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_updateActive', value: function _updateActive() /*evt, elem, scrollPos*/{ + if (this._inTransition) { + return; + } var winPos = /*scrollPos ||*/parseInt(window.pageYOffset, 10), curIdx; if (winPos + this.winHeight === this.docHeight) { curIdx = this.points.length - 1; } else if (winPos < this.points[0]) { - curIdx = 0; + curIdx = undefined; } else { var isDown = this.scrollPos < winPos, _this = this, curVisible = this.points.filter(function (p, i) { - return isDown ? p <= winPos : p - _this.options.threshold <= winPos; //&& winPos >= _this.points[i -1] - _this.options.threshold; + return isDown ? p - _this.options.barOffset <= winPos : p - _this.options.barOffset - _this.options.threshold <= winPos; }); curIdx = curVisible.length ? curVisible.length - 1 : 0; } this.$active.removeClass(this.options.activeClass); - this.$active = this.$links.eq(curIdx).addClass(this.options.activeClass); + this.$active = this.$links.filter('[href="#' + this.$targets.eq(curIdx).data('magellan-target') + '"]').addClass(this.options.activeClass); if (this.options.deepLinking) { - var hash = this.$active[0].getAttribute('href'); - if (window.history.pushState) { - window.history.pushState(null, null, hash); - } else { - window.location.hash = hash; + var hash = ""; + if (curIdx != undefined) { + hash = this.$active[0].getAttribute('href'); + } + if (hash !== window.location.hash) { + if (window.history.pushState) { + window.history.pushState(null, null, hash); + } else { + window.location.hash = hash; + } } } @@ -5308,18 +5424,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {Object} element - jQuery object to initialize. * @param {Object} options - Overrides to the default plugin settings. */ - function OffCanvas(element, options) { _classCallCheck(this, OffCanvas); this.$element = element; this.options = $.extend({}, OffCanvas.defaults, this.$element.data(), options); this.$lastTrigger = $(); + this.$triggers = $(); this._init(); this._events(); Foundation.registerPlugin(this, 'OffCanvas'); + Foundation.Keyboard.register('OffCanvas', { + 'ESCAPE': 'close' + }); } /** @@ -5336,30 +5455,32 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.$element.attr('aria-hidden', 'true'); - // Find triggers that affect this element and add aria-expanded to them - $(document).find('[data-open="' + id + '"], [data-close="' + id + '"], [data-toggle="' + id + '"]').attr('aria-expanded', 'false').attr('aria-controls', id); + this.$element.addClass('is-transition-' + this.options.transition); - // Add a close trigger over the body if necessary - if (this.options.closeOnClick) { - if ($('.js-off-canvas-exit').length) { - this.$exiter = $('.js-off-canvas-exit'); + // Find triggers that affect this element and add aria-expanded to them + this.$triggers = $(document).find('[data-open="' + id + '"], [data-close="' + id + '"], [data-toggle="' + id + '"]').attr('aria-expanded', 'false').attr('aria-controls', id); + + // Add an overlay over the content if necessary + if (this.options.contentOverlay === true) { + var overlay = document.createElement('div'); + var overlayPosition = $(this.$element).css("position") === 'fixed' ? 'is-overlay-fixed' : 'is-overlay-absolute'; + overlay.setAttribute('class', 'js-off-canvas-overlay ' + overlayPosition); + this.$overlay = $(overlay); + if (overlayPosition === 'is-overlay-fixed') { + $('body').append(this.$overlay); } else { - var exiter = document.createElement('div'); - exiter.setAttribute('class', 'js-off-canvas-exit'); - $('[data-off-canvas-content]').append(exiter); - - this.$exiter = $(exiter); + this.$element.siblings('[data-off-canvas-content]').append(this.$overlay); } } this.options.isRevealed = this.options.isRevealed || new RegExp(this.options.revealClass, 'g').test(this.$element[0].className); - if (this.options.isRevealed) { + if (this.options.isRevealed === true) { this.options.revealOn = this.options.revealOn || this.$element[0].className.match(/(reveal-for-medium|reveal-for-large)/g)[0].split('-')[2]; this._setMQChecker(); } - if (!this.options.transitionTime) { - this.options.transitionTime = parseFloat(window.getComputedStyle($('[data-off-canvas-wrapper]')[0]).transitionDuration) * 1000; + if (!this.options.transitionTime === true) { + this.options.transitionTime = parseFloat(window.getComputedStyle($('[data-off-canvas]')[0]).transitionDuration) * 1000; } } @@ -5379,8 +5500,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 'keydown.zf.offcanvas': this._handleKeyboard.bind(this) }); - if (this.options.closeOnClick && this.$exiter.length) { - this.$exiter.on({ 'click.zf.offcanvas': this.close.bind(this) }); + if (this.options.closeOnClick === true) { + var $target = this.options.contentOverlay ? this.$overlay : $('[data-off-canvas-content]'); + $target.on({ 'click.zf.offcanvas': this.close.bind(this) }); } } @@ -5420,21 +5542,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (isRevealed) { this.close(); this.isRevealed = true; - // if (!this.options.forceTop) { - // var scrollPos = parseInt(window.pageYOffset); - // this.$element[0].style.transform = 'translate(0,' + scrollPos + 'px)'; - // } - // if (this.options.isSticky) { this._stick(); } + this.$element.attr('aria-hidden', 'false'); this.$element.off('open.zf.trigger toggle.zf.trigger'); if ($closer.length) { $closer.hide(); } } else { this.isRevealed = false; - // if (this.options.isSticky || !this.options.forceTop) { - // this.$element[0].style.transform = ''; - // $(window).off('scroll.zf.offcanvas'); - // } + this.$element.attr('aria-hidden', 'true'); this.$element.on({ 'open.zf.trigger': this.open.bind(this), 'toggle.zf.trigger': this.toggle.bind(this) @@ -5445,6 +5560,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } + /** + * Stops scrolling of the body when offcanvas is open on mobile Safari and other troublesome browsers. + * @private + */ + + }, { + key: '_stopScrolling', + value: function _stopScrolling(event) { + return false; + } + /** * Opens the off-canvas menu. * @function @@ -5459,101 +5585,52 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (this.$element.hasClass('is-open') || this.isRevealed) { return; } - var _this = this, - $body = $(document.body); + var _this = this; - if (this.options.forceTop) { - $('body').scrollTop(0); + if (trigger) { + this.$lastTrigger = trigger; + } + + if (this.options.forceTo === 'top') { + window.scrollTo(0, 0); + } else if (this.options.forceTo === 'bottom') { + window.scrollTo(0, document.body.scrollHeight); } - // window.pageYOffset = 0; - // if (!this.options.forceTop) { - // var scrollPos = parseInt(window.pageYOffset); - // this.$element[0].style.transform = 'translate(0,' + scrollPos + 'px)'; - // if (this.$exiter.length) { - // this.$exiter[0].style.transform = 'translate(0,' + scrollPos + 'px)'; - // } - // } /** * Fires when the off-canvas menu opens. * @event OffCanvas#opened */ - Foundation.Move(this.options.transitionTime, this.$element, function () { - $('[data-off-canvas-wrapper]').addClass('is-off-canvas-open is-open-' + _this.options.position); + _this.$element.addClass('is-open'); - _this.$element.addClass('is-open'); - - // if (_this.options.isSticky) { - // _this._stick(); - // } - }); + this.$triggers.attr('aria-expanded', 'true'); this.$element.attr('aria-hidden', 'false').trigger('opened.zf.offcanvas'); - if (this.options.closeOnClick) { - this.$exiter.addClass('is-visible'); + // If `contentScroll` is set to false, add class and disable scrolling on touch devices. + if (this.options.contentScroll === false) { + $('body').addClass('is-off-canvas-open').on('touchmove', this._stopScrolling); } - if (trigger) { - this.$lastTrigger = trigger.attr('aria-expanded', 'true'); + if (this.options.contentOverlay === true) { + this.$overlay.addClass('is-visible'); } - if (this.options.autoFocus) { + if (this.options.closeOnClick === true && this.options.contentOverlay === true) { + this.$overlay.addClass('is-closable'); + } + + if (this.options.autoFocus === true) { this.$element.one(Foundation.transitionend(this.$element), function () { _this.$element.find('a, button').eq(0).focus(); }); } - if (this.options.trapFocus) { - $('[data-off-canvas-content]').attr('tabindex', '-1'); - this._trapFocus(); + if (this.options.trapFocus === true) { + this.$element.siblings('[data-off-canvas-content]').attr('tabindex', '-1'); + Foundation.Keyboard.trapFocus(this.$element); } } - /** - * Traps focus within the offcanvas on open. - * @private - */ - - }, { - key: '_trapFocus', - value: function _trapFocus() { - var focusable = Foundation.Keyboard.findFocusable(this.$element), - first = focusable.eq(0), - last = focusable.eq(-1); - - focusable.off('.zf.offcanvas').on('keydown.zf.offcanvas', function (e) { - if (e.which === 9 || e.keycode === 9) { - if (e.target === last[0] && !e.shiftKey) { - e.preventDefault(); - first.focus(); - } - if (e.target === first[0] && e.shiftKey) { - e.preventDefault(); - last.focus(); - } - } - }); - } - - /** - * Allows the offcanvas to appear sticky utilizing translate properties. - * @private - */ - // OffCanvas.prototype._stick = function() { - // var elStyle = this.$element[0].style; - // - // if (this.options.closeOnClick) { - // var exitStyle = this.$exiter[0].style; - // } - // - // $(window).on('scroll.zf.offcanvas', function(e) { - // console.log(e); - // var pageY = window.pageYOffset; - // elStyle.transform = 'translate(0,' + pageY + 'px)'; - // if (exitStyle !== undefined) { exitStyle.transform = 'translate(0,' + pageY + 'px)'; } - // }); - // // this.$element.trigger('stuck.zf.offcanvas'); - // }; /** * Closes the off-canvas menu. * @function @@ -5570,30 +5647,33 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _this = this; - // Foundation.Move(this.options.transitionTime, this.$element, function() { - $('[data-off-canvas-wrapper]').removeClass('is-off-canvas-open is-open-' + _this.options.position); _this.$element.removeClass('is-open'); - // Foundation._reflow(); - // }); + this.$element.attr('aria-hidden', 'true') /** * Fires when the off-canvas menu opens. * @event OffCanvas#closed */ .trigger('closed.zf.offcanvas'); - // if (_this.options.isSticky || !_this.options.forceTop) { - // setTimeout(function() { - // _this.$element[0].style.transform = ''; - // $(window).off('scroll.zf.offcanvas'); - // }, this.options.transitionTime); - // } - if (this.options.closeOnClick) { - this.$exiter.removeClass('is-visible'); + + // If `contentScroll` is set to false, remove class and re-enable scrolling on touch devices. + if (this.options.contentScroll === false) { + $('body').removeClass('is-off-canvas-open').off('touchmove', this._stopScrolling); } - this.$lastTrigger.attr('aria-expanded', 'false'); - if (this.options.trapFocus) { - $('[data-off-canvas-content]').removeAttr('tabindex'); + if (this.options.contentOverlay === true) { + this.$overlay.removeClass('is-visible'); + } + + if (this.options.closeOnClick === true && this.options.contentOverlay === true) { + this.$overlay.removeClass('is-closable'); + } + + this.$triggers.attr('aria-expanded', 'false'); + + if (this.options.trapFocus === true) { + this.$element.siblings('[data-off-canvas-content]').removeAttr('tabindex'); + Foundation.Keyboard.releaseFocus(this.$element); } } @@ -5622,13 +5702,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_handleKeyboard', - value: function _handleKeyboard(event) { - if (event.which !== 27) return; + value: function _handleKeyboard(e) { + var _this2 = this; - event.stopPropagation(); - event.preventDefault(); - this.close(); - this.$lastTrigger.focus(); + Foundation.Keyboard.handleKey(e, 'OffCanvas', { + close: function () { + _this2.close(); + _this2.$lastTrigger.focus(); + return true; + }, + handled: function () { + e.stopPropagation(); + e.preventDefault(); + } + }); } /** @@ -5641,7 +5728,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function destroy() { this.close(); this.$element.off('.zf.trigger .zf.offcanvas'); - this.$exiter.off('.zf.offcanvas'); + this.$overlay.off('.zf.offcanvas'); Foundation.unregisterPlugin(this); } @@ -5658,6 +5745,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ closeOnClick: true, + /** + * Adds an overlay on top of `[data-off-canvas-content]`. + * @option + * @example true + */ + contentOverlay: true, + + /** + * Enable/disable scrolling of the main content when an off canvas panel is open. + * @option + * @example true + */ + contentScroll: true, + /** * Amount of time in ms the open and close transition requires. If none selected, pulls from body style. * @option @@ -5666,18 +5767,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons transitionTime: 0, /** - * Direction the offcanvas opens from. Determines class applied to body. + * Type of transition for the offcanvas menu. Options are 'push', 'detached' or 'slide'. * @option - * @example left + * @example push */ - position: 'left', + transition: 'push', /** - * Force the page to scroll to top on open. + * Force the page to scroll to top or bottom on open. * @option - * @example true + * @example top */ - forceTop: true, + forceTo: null, /** * Allow the offcanvas to remain open for certain breakpoints. @@ -5743,7 +5844,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {jQuery} element - jQuery object to make into an Orbit Carousel. * @param {Object} options - Overrides to the default plugin settings. */ - function Orbit(element, options) { _classCallCheck(this, Orbit); @@ -5775,10 +5875,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _createClass(Orbit, [{ key: '_init', value: function _init() { + // @TODO: consider discussion on PR #9278 about DOM pollution by changeSlide + this._reset(); + this.$wrapper = this.$element.find('.' + this.options.containerClass); this.$slides = this.$element.find('.' + this.options.slideClass); + var $images = this.$element.find('img'), - initActive = this.$slides.filter('.is-active'); + initActive = this.$slides.filter('.is-active'), + id = this.$element[0].id || Foundation.GetYoDigits(6, 'orbit'); + + this.$element.attr({ + 'data-resize': id, + 'id': id + }); if (!initActive.length) { this.$slides.eq(0).addClass('is-active'); @@ -5850,9 +5960,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons key: '_prepareForOrbit', value: function _prepareForOrbit() { var _this = this; - this._setWrapperHeight(function (max) { - _this._setSlideHeight(max); - }); + this._setWrapperHeight(); } /** @@ -5868,14 +5976,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons //rewrite this to `for` loop var max = 0, temp, - counter = 0; + counter = 0, + _this = this; this.$slides.each(function () { temp = this.getBoundingClientRect().height; $(this).attr('data-slide', counter); - if (counter) { - //if not the first slide, set css position and display property + if (_this.$slides.filter('.is-active')[0] !== _this.$slides.eq(counter)[0]) { + //if not the active slide, set css position and display property $(this).css({ 'position': 'relative', 'display': 'none' }); } max = temp > max ? temp : max; @@ -5884,7 +5993,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (counter === this.$slides.length) { this.$wrapper.css({ 'height': max }); //only change the wrapper height property once. - cb(max); //fire callback with max height dimension. + if (cb) { + cb(max); + } //fire callback with max height dimension. } } @@ -5917,6 +6028,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons //**Now using custom event - thanks to:** //** Yohai Ararat of Toronto ** //*************************************** + // + this.$element.off('.resizeme.zf.trigger').on({ + 'resizeme.zf.trigger': this._prepareForOrbit.bind(this) + }); if (this.$slides.length > 1) { if (this.options.swipe) { @@ -5970,23 +6085,64 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); } - this.$wrapper.add(this.$bullets).on('keydown.zf.orbit', function (e) { - // handle keyboard event with keyboard util - Foundation.Keyboard.handleKey(e, 'Orbit', { - next: function () { - _this.changeSlide(true); - }, - previous: function () { - _this.changeSlide(false); - }, - handled: function () { - // if bullet is focused, make sure focus moves - if ($(e.target).is(_this.$bullets)) { - _this.$bullets.filter('.is-active').focus(); + if (this.options.accessible) { + this.$wrapper.add(this.$bullets).on('keydown.zf.orbit', function (e) { + // handle keyboard event with keyboard util + Foundation.Keyboard.handleKey(e, 'Orbit', { + next: function () { + _this.changeSlide(true); + }, + previous: function () { + _this.changeSlide(false); + }, + handled: function () { + // if bullet is focused, make sure focus moves + if ($(e.target).is(_this.$bullets)) { + _this.$bullets.filter('.is-active').focus(); + } } - } + }); }); + } + } + } + + /** + * Resets Orbit so it can be reinitialized + */ + + }, { + key: '_reset', + value: function _reset() { + // Don't do anything if there are no slides (first run) + if (typeof this.$slides == 'undefined') { + return; + } + + if (this.$slides.length > 1) { + // Remove old events + this.$element.off('.zf.orbit').find('*').off('.zf.orbit'); + + // Restart timer if autoPlay is enabled + if (this.options.autoPlay) { + this.timer.restart(); + } + + // Reset all sliddes + this.$slides.each(function (el) { + $(el).removeClass('is-active is-active is-in').removeAttr('aria-live').hide(); }); + + // Show the first slide + this.$slides.first().addClass('is-active').show(); + + // Triggers when the slide has finished animating + this.$element.trigger('slidechange.zf.orbit', [this.$slides.first()]); + + // Select first bullet if bullets are present + if (this.options.bullets) { + this._updateBullets(0); + } } } @@ -6002,6 +6158,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: 'changeSlide', value: function changeSlide(isLTR, chosenSlide, idx) { + if (!this.$slides) { + return; + } // Don't freak out if we're in the middle of cleanup var $curSlide = this.$slides.filter('.is-active').eq(0); if (/mui/g.test($curSlide[0].className)) { @@ -6021,16 +6180,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.options.infiniteWrap ? $curSlide.next('.' + this.options.slideClass).length ? $curSlide.next('.' + this.options.slideClass) : $firstSlide : $curSlide.next('.' + this.options.slideClass) : //pick next slide if moving left to right this.options.infiniteWrap ? $curSlide.prev('.' + this.options.slideClass).length ? $curSlide.prev('.' + this.options.slideClass) : $lastSlide : $curSlide.prev('.' + this.options.slideClass); //pick prev slide if moving right to left } else { - $newSlide = chosenSlide; - } + $newSlide = chosenSlide; + } if ($newSlide.length) { + /** + * Triggers before the next slide starts animating in and only if a next slide has been found. + * @event Orbit#beforeslidechange + */ + this.$element.trigger('beforeslidechange.zf.orbit', [$curSlide, $newSlide]); + if (this.options.bullets) { idx = idx || this.$slides.index($newSlide); //grab index to update bullets this._updateBullets(idx); } - if (this.options.useMUI) { + if (this.options.useMUI && !this.$element.is(':hidden')) { Foundation.Motion.animateIn($newSlide.addClass('is-active').css({ 'position': 'absolute', 'top': 0 }), this.options['animInFrom' + dirIn], function () { $newSlide.css({ 'position': 'relative', 'display': 'block' }).attr('aria-live', 'polite'); }); @@ -6043,12 +6208,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons //do stuff? }); } else { - $curSlide.removeClass('is-active is-in').removeAttr('aria-live').hide(); - $newSlide.addClass('is-active is-in').attr('aria-live', 'polite').show(); - if (this.options.autoPlay && !this.timer.isPaused) { - this.timer.restart(); - } + $curSlide.removeClass('is-active is-in').removeAttr('aria-live').hide(); + $newSlide.addClass('is-active is-in').attr('aria-live', 'polite').show(); + if (this.options.autoPlay && !this.timer.isPaused) { + this.timer.restart(); } + } /** * Triggers when the slide has finished animating in. * @event Orbit#slidechange @@ -6229,7 +6394,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {jQuery} element - jQuery object to make into a dropdown menu. * @param {Object} options - Overrides to the default plugin settings. */ - function ResponsiveMenu(element, options) { _classCallCheck(this, ResponsiveMenu); @@ -6278,6 +6442,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!$.isEmptyObject(this.rules)) { this._checkMediaQueries(); } + // Add data-mutate since children may need it. + this.$element.attr('data-mutate', this.$element.attr('data-mutate') || Foundation.GetYoDigits(6, 'responsive-menu')); } /** @@ -6396,7 +6562,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {jQuery} element - jQuery object to attach tab bar functionality to. * @param {Object} options - Overrides to the default plugin settings. */ - function ResponsiveToggle(element, options) { _classCallCheck(this, ResponsiveToggle); @@ -6426,6 +6591,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.$targetMenu = $('#' + targetID); this.$toggler = this.$element.find('[data-toggle]'); + this.options = $.extend({}, this.options, this.$targetMenu.data()); + + // If they were set, parse the animation classes + if (this.options.animate) { + var input = this.options.animate.split(' '); + + this.animationIn = input[0]; + this.animationOut = input[1] || null; + } this._update(); } @@ -6441,7 +6615,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function _events() { var _this = this; - $(window).on('changed.zf.mediaquery', this._update.bind(this)); + this._updateMqHandler = this._update.bind(this); + + $(window).on('changed.zf.mediaquery', this._updateMqHandler); this.$toggler.on('click.zf.responsiveToggle', this.toggleMenu.bind(this)); } @@ -6477,20 +6653,49 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: 'toggleMenu', value: function toggleMenu() { + var _this2 = this; + if (!Foundation.MediaQuery.atLeast(this.options.hideFor)) { - this.$targetMenu.toggle(0); + if (this.options.animate) { + if (this.$targetMenu.is(':hidden')) { + Foundation.Motion.animateIn(this.$targetMenu, this.animationIn, function () { + /** + * Fires when the element attached to the tab bar toggles. + * @event ResponsiveToggle#toggled + */ + _this2.$element.trigger('toggled.zf.responsiveToggle'); + _this2.$targetMenu.find('[data-mutate]').triggerHandler('mutateme.zf.trigger'); + }); + } else { + Foundation.Motion.animateOut(this.$targetMenu, this.animationOut, function () { + /** + * Fires when the element attached to the tab bar toggles. + * @event ResponsiveToggle#toggled + */ + _this2.$element.trigger('toggled.zf.responsiveToggle'); + }); + } + } else { + this.$targetMenu.toggle(0); + this.$targetMenu.find('[data-mutate]').trigger('mutateme.zf.trigger'); - /** - * Fires when the element attached to the tab bar toggles. - * @event ResponsiveToggle#toggled - */ - this.$element.trigger('toggled.zf.responsiveToggle'); + /** + * Fires when the element attached to the tab bar toggles. + * @event ResponsiveToggle#toggled + */ + this.$element.trigger('toggled.zf.responsiveToggle'); + } } } }, { key: 'destroy', value: function destroy() { - //TODO this... + this.$element.off('.zf.responsiveToggle'); + this.$toggler.off('.zf.responsiveToggle'); + + $(window).off('changed.zf.mediaquery', this._updateMqHandler); + + Foundation.unregisterPlugin(this); } }]); @@ -6503,7 +6708,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @option * @example 'medium' */ - hideFor: 'medium' + hideFor: 'medium', + + /** + * To decide if the toggle should be animated or not. + * @option + * @example false + */ + animate: false }; // Window exports @@ -6534,7 +6746,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {jQuery} element - jQuery object to use for the modal. * @param {Object} options - optional parameters. */ - function Reveal(element, options) { _classCallCheck(this, Reveal); @@ -6546,9 +6757,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons Foundation.Keyboard.register('Reveal', { 'ENTER': 'open', 'SPACE': 'open', - 'ESCAPE': 'close', - 'TAB': 'tab_forward', - 'SHIFT_TAB': 'tab_backward' + 'ESCAPE': 'close' }); } @@ -6564,25 +6773,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.id = this.$element.attr('id'); this.isActive = false; this.cached = { mq: Foundation.MediaQuery.current }; - this.isiOS = iPhoneSniff(); - - if (this.isiOS) { - this.$element.addClass('is-ios'); - } + this.isMobile = mobileSniff(); this.$anchor = $('[data-open="' + this.id + '"]').length ? $('[data-open="' + this.id + '"]') : $('[data-toggle="' + this.id + '"]'); - - if (this.$anchor.length) { - var anchorId = this.$anchor[0].id || Foundation.GetYoDigits(6, 'reveal'); - - this.$anchor.attr({ - 'aria-controls': this.id, - 'id': anchorId, - 'aria-haspopup': true, - 'tabindex': 0 - }); - this.$element.attr({ 'aria-labelledby': anchorId }); - } + this.$anchor.attr({ + 'aria-controls': this.id, + 'aria-haspopup': true, + 'tabindex': 0 + }); if (this.options.fullScreen || this.$element.hasClass('full')) { this.options.fullScreen = true; @@ -6602,7 +6800,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (this.$overlay) { this.$element.detach().appendTo(this.$overlay); } else { - this.$element.detach().appendTo($('body')); + this.$element.detach().appendTo($(this.options.appendTo)); this.$element.addClass('without-overlay'); } this._events(); @@ -6618,9 +6816,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_makeOverlay', - value: function _makeOverlay(id) { - var $overlay = $('
    ').addClass('reveal-overlay').attr({ 'tabindex': -1, 'aria-hidden': true }).appendTo('body'); - return $overlay; + value: function _makeOverlay() { + return $('
    ').addClass('reveal-overlay').appendTo(this.options.appendTo); } /** @@ -6668,11 +6865,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_events', value: function _events() { + var _this2 = this; + var _this = this; this.$element.on({ 'open.zf.trigger': this.open.bind(this), - 'close.zf.trigger': this.close.bind(this), + 'close.zf.trigger': function (event, $element) { + if (event.target === _this.$element[0] || $(event.target).parents('[data-closable]')[0] === $element) { + // only close reveal when it's explicitly called + return _this2.close.apply(_this2); + } + }, 'toggle.zf.trigger': this.toggle.bind(this), 'resizeme.zf.trigger': function () { _this._updatePosition(); @@ -6691,7 +6895,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (this.options.closeOnClick && this.options.overlay) { this.$overlay.off('.zf.reveal').on('click.zf.reveal', function (e) { - if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target)) { + if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target) || !$.contains(document, e.target)) { return; } _this.close(); @@ -6727,7 +6931,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: 'open', value: function open() { - var _this2 = this; + var _this3 = this; if (this.options.deepLink) { var hash = '#' + this.id; @@ -6753,6 +6957,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (this.$overlay) { this.$overlay.css({ 'visibility': '' }).hide(); + if (this.$element.hasClass('fast')) { + this.$overlay.addClass('fast'); + } else if (this.$element.hasClass('slow')) { + this.$overlay.addClass('slow'); + } } if (!this.options.multipleOpened) { @@ -6764,14 +6973,41 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.$element.trigger('closeme.zf.reveal', this.id); } + var _this = this; + + function addRevealOpenClasses() { + if (_this.isMobile) { + if (!_this.originalScrollPos) { + _this.originalScrollPos = window.pageYOffset; + } + $('html, body').addClass('is-reveal-open'); + } else { + $('body').addClass('is-reveal-open'); + } + } // Motion UI method of reveal if (this.options.animationIn) { - if (this.options.overlay) { - Foundation.Motion.animateIn(this.$overlay, 'fade-in'); - } - Foundation.Motion.animateIn(this.$element, this.options.animationIn, function () { - _this2.focusableElements = Foundation.Keyboard.findFocusable(_this2.$element); - }); + (function () { + var afterAnimation = function () { + _this.$element.attr({ + 'aria-hidden': false, + 'tabindex': -1 + }).focus(); + addRevealOpenClasses(); + Foundation.Keyboard.trapFocus(_this.$element); + }; + + if (_this3.options.overlay) { + Foundation.Motion.animateIn(_this3.$overlay, 'fade-in'); + } + Foundation.Motion.animateIn(_this3.$element, _this3.options.animationIn, function () { + if (_this3.$element) { + // protect against object having been removed + _this3.focusableElements = Foundation.Keyboard.findFocusable(_this3.$element); + afterAnimation(); + } + }); + })(); } // jQuery method of reveal else { @@ -6786,6 +7022,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 'aria-hidden': false, 'tabindex': -1 }).focus(); + Foundation.Keyboard.trapFocus(this.$element); /** * Fires when the modal has successfully opened. @@ -6793,17 +7030,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ this.$element.trigger('open.zf.reveal'); - if (this.isiOS) { - var scrollPos = window.pageYOffset; - $('html, body').addClass('is-reveal-open').scrollTop(scrollPos); - } else { - $('body').addClass('is-reveal-open'); - } - - $('body').addClass('is-reveal-open').attr('aria-hidden', this.options.overlay || this.options.fullScreen ? true : false); + addRevealOpenClasses(); setTimeout(function () { - _this2._extraHandlers(); + _this3._extraHandlers(); }, 0); } @@ -6816,11 +7046,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons key: '_extraHandlers', value: function _extraHandlers() { var _this = this; + if (!this.$element) { + return; + } // If we're in the middle of cleanup, don't freak out this.focusableElements = Foundation.Keyboard.findFocusable(this.$element); if (!this.options.overlay && this.options.closeOnClick && !this.options.fullScreen) { $('body').on('click.zf.reveal', function (e) { - if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target)) { + if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target) || !$.contains(document, e.target)) { return; } _this.close(); @@ -6836,37 +7069,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _this.$anchor.focus(); } } - }); - }); - } - - // lock focus within modal while tabbing - this.$element.on('keydown.zf.reveal', function (e) { - var $target = $(this); - // handle keyboard event with keyboard util - Foundation.Keyboard.handleKey(e, 'Reveal', { - tab_forward: function () { - if (_this.$element.find(':focus').is(_this.focusableElements.eq(-1))) { - // left modal downwards, setting focus to first element - _this.focusableElements.eq(0).focus(); - e.preventDefault(); - } - if (_this.focusableElements.length === 0) { - // no focusable elements inside the modal at all, prevent tabbing in general - e.preventDefault(); - } - }, - tab_backward: function () { - if (_this.$element.find(':focus').is(_this.focusableElements.eq(0)) || _this.$element.is(':focus')) { - // left modal upwards, setting focus to last element - _this.focusableElements.eq(-1).focus(); - e.preventDefault(); - } - if (_this.focusableElements.length === 0) { - // no focusable elements inside the modal at all, prevent tabbing in general - e.preventDefault(); - } - }, + }); + }); + } + + // lock focus within modal while tabbing + this.$element.on('keydown.zf.reveal', function (e) { + var $target = $(this); + // handle keyboard event with keyboard util + Foundation.Keyboard.handleKey(e, 'Reveal', { open: function () { if (_this.$element.find(':focus').is(_this.$element.find('[data-close]'))) { setTimeout(function () { @@ -6883,6 +7094,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _this.close(); _this.$anchor.focus(); } + }, + handled: function (preventDefault) { + if (preventDefault) { + e.preventDefault(); + } } }); }); @@ -6935,16 +7151,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.$element.off('keydown.zf.reveal'); function finishUp() { - if (_this.isiOS) { + if (_this.isMobile) { $('html, body').removeClass('is-reveal-open'); + if (_this.originalScrollPos) { + $('body').scrollTop(_this.originalScrollPos); + _this.originalScrollPos = null; + } } else { $('body').removeClass('is-reveal-open'); } - $('body').attr({ - 'aria-hidden': false, - 'tabindex': '' - }); + Foundation.Keyboard.releaseFocus(_this.$element); _this.$element.attr('aria-hidden', true); @@ -6966,7 +7183,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.isActive = false; if (_this.options.deepLink) { if (window.history.replaceState) { - window.history.replaceState("", document.title, window.location.pathname); + window.history.replaceState('', document.title, window.location.href.replace('#' + this.id, '')); } else { window.location.hash = ''; } @@ -6997,7 +7214,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ value: function destroy() { if (this.options.overlay) { - this.$element.appendTo($('body')); // move $element outside of $overlay to prevent error unregisterPlugin() + this.$element.appendTo($(this.options.appendTo)); // move $element outside of $overlay to prevent error unregisterPlugin() this.$overlay.hide().off().remove(); } this.$element.hide().off(); @@ -7095,7 +7312,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @option * @example false */ - deepLink: false + deepLink: false, + /** + * Allows the modal to append to custom div. + * @option + * @example false + */ + appendTo: "body" + }; // Window exports @@ -7105,6 +7329,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return (/iP(ad|hone|od).*OS/.test(window.navigator.userAgent) ); } + + function androidSniff() { + return (/Android/.test(window.navigator.userAgent) + ); + } + + function mobileSniff() { + return iPhoneSniff() || androidSniff(); + } }(jQuery); ;'use strict'; @@ -7125,12 +7358,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var Slider = function () { /** - * Creates a new instance of a drilldown menu. + * Creates a new instance of a slider control. * @class - * @param {jQuery} element - jQuery object to make into an accordion menu. + * @param {jQuery} element - jQuery object to make into a slider control. * @param {Object} options - Overrides to the default plugin settings. */ - function Slider(element, options) { _classCallCheck(this, Slider); @@ -7187,8 +7419,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.inputs = $().add(this.$input); this.options.binding = true; } + this._setInitAttr(0); - this._events(this.$handle); if (this.handles[1]) { this.options.doubleSided = true; @@ -7200,18 +7432,100 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } isDbl = true; - this._setHandlePos(this.$handle, this.options.initialStart, true, function () { - - _this._setHandlePos(_this.$handle2, _this.options.initialEnd, true); - }); // this.$handle.triggerHandler('click.zf.slider'); this._setInitAttr(1); - this._events(this.$handle2); } - if (!isDbl) { - this._setHandlePos(this.$handle, this.options.initialStart, true); + // Set handle positions + this.setHandles(); + + this._events(); + } + }, { + key: 'setHandles', + value: function setHandles() { + var _this2 = this; + + if (this.handles[1]) { + this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true, function () { + _this2._setHandlePos(_this2.$handle2, _this2.inputs.eq(1).val(), true); + }); + } else { + this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true); + } + } + }, { + key: '_reflow', + value: function _reflow() { + this.setHandles(); + } + /** + * @function + * @private + * @param {Number} value - floating point (the value) to be transformed using to a relative position on the slider (the inverse of _value) + */ + + }, { + key: '_pctOfBar', + value: function _pctOfBar(value) { + var pctOfBar = percent(value - this.options.start, this.options.end - this.options.start); + + switch (this.options.positionValueFunction) { + case "pow": + pctOfBar = this._logTransform(pctOfBar); + break; + case "log": + pctOfBar = this._powTransform(pctOfBar); + break; + } + + return pctOfBar.toFixed(2); + } + + /** + * @function + * @private + * @param {Number} pctOfBar - floating point, the relative position of the slider (typically between 0-1) to be transformed to a value + */ + + }, { + key: '_value', + value: function _value(pctOfBar) { + switch (this.options.positionValueFunction) { + case "pow": + pctOfBar = this._powTransform(pctOfBar); + break; + case "log": + pctOfBar = this._logTransform(pctOfBar); + break; } + var value = (this.options.end - this.options.start) * pctOfBar + this.options.start; + + return value; + } + + /** + * @function + * @private + * @param {Number} value - floating point (typically between 0-1) to be transformed using the log function + */ + + }, { + key: '_logTransform', + value: function _logTransform(value) { + return baseLog(this.options.nonLinearBase, value * (this.options.nonLinearBase - 1) + 1); + } + + /** + * @function + * @private + * @param {Number} value - floating point (typically between 0-1) to be transformed using the power function + */ + + }, { + key: '_powTransform', + value: function _powTransform(value) { + return (Math.pow(this.options.nonLinearBase, value) - 1) / (this.options.nonLinearBase - 1); } /** @@ -7228,6 +7542,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_setHandlePos', value: function _setHandlePos($hndl, location, noInvert, cb) { + // don't move if the slider has been disabled since its initialization + if (this.$element.hasClass(this.options.disabledClass)) { + return; + } //might need to alter that slightly for bars that will have odd number selections. location = parseFloat(location); //on input change events, convert string to number...grumble. @@ -7265,7 +7583,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons elemDim = this.$element[0].getBoundingClientRect()[hOrW], //percentage of bar min/max value based on click or drag point - pctOfBar = percent(location - this.options.start, this.options.end - this.options.start).toFixed(2), + pctOfBar = this._pctOfBar(location), //number of actual pixels to shift the handle, based on the percentage obtained above pxToMove = (elemDim - handleDim) * pctOfBar, @@ -7287,7 +7605,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons dim, //percentage w/h of the handle compared to the slider bar - handlePct = ~ ~(percent(handleDim, elemDim) * 100); + handlePct = ~~(percent(handleDim, elemDim) * 100); //if left handle, the math is slightly different than if it's the right handle, and the left/top property needs to be changed for the fill bar if (isLeftHndl) { //left or top percentage value to apply to the fill bar. @@ -7300,12 +7618,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons cb(); } //this is only needed for the initialization of 2 handled sliders } else { - //just caching the value of the left/bottom handle's left/top property - var handlePos = parseFloat(this.$handle[0].style[lOrT]); - //calculate the new min-height/width for the fill bar. Use isNaN to prevent false positives for numbers <= 0 - //based on the percentage of movement of the handle being manipulated, less the opposing handle's left/top position, plus the percentage w/h of the handle itself - dim = movement - (isNaN(handlePos) ? this.options.initialStart / ((this.options.end - this.options.start) / 100) : handlePos) + handlePct; - } + //just caching the value of the left/bottom handle's left/top property + var handlePos = parseFloat(this.$handle[0].style[lOrT]); + //calculate the new min-height/width for the fill bar. Use isNaN to prevent false positives for numbers <= 0 + //based on the percentage of movement of the handle being manipulated, less the opposing handle's left/top position, plus the percentage w/h of the handle itself + dim = movement - (isNaN(handlePos) ? (this.options.initialStart - this.options.start) / ((this.options.end - this.options.start) / 100) : handlePos) + handlePct; + } // assign the min-height/width to our css object css['min-' + hOrW] = dim + '%'; } @@ -7322,8 +7640,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var moveTime = this.$element.data('dragging') ? 1000 / 60 : this.options.moveTime; Foundation.Move(moveTime, $hndl, function () { - //adjusting the left/top property of the handle, based on the percentage calculated above - $hndl.css(lOrT, movement + '%'); + // adjusting the left/top property of the handle, based on the percentage calculated above + // if movement isNaN, that is because the slider is hidden and we cannot determine handle width, + // fall back to next best guess. + if (isNaN(movement)) { + $hndl.css(lOrT, pctOfBar * 100 + '%'); + } else { + $hndl.css(lOrT, movement + '%'); + } if (!_this.options.doubleSided) { //if single-handled, a simple method to expand the fill bar @@ -7354,6 +7678,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_setInitAttr', value: function _setInitAttr(idx) { + var initVal = idx === 0 ? this.options.initialStart : this.options.initialEnd; var id = this.inputs.eq(idx).attr('id') || Foundation.GetYoDigits(6, 'slider'); this.inputs.eq(idx).attr({ 'id': id, @@ -7361,12 +7686,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 'min': this.options.start, 'step': this.options.step }); + this.inputs.eq(idx).val(initVal); this.handles.eq(idx).attr({ 'role': 'slider', 'aria-controls': id, 'aria-valuemax': this.options.end, 'aria-valuemin': this.options.start, - 'aria-valuenow': idx === 0 ? this.options.initialStart : this.options.initialEnd, + 'aria-valuenow': initVal, 'aria-orientation': this.options.vertical ? 'vertical' : 'horizontal', 'tabindex': 0 }); @@ -7411,15 +7737,30 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons vertical = this.options.vertical, param = vertical ? 'height' : 'width', direction = vertical ? 'top' : 'left', - pageXY = vertical ? e.pageY : e.pageX, + eventOffset = vertical ? e.pageY : e.pageX, halfOfHandle = this.$handle[0].getBoundingClientRect()[param] / 2, barDim = this.$element[0].getBoundingClientRect()[param], - barOffset = this.$element.offset()[direction] - pageXY, + windowScroll = vertical ? $(window).scrollTop() : $(window).scrollLeft(); - //if the cursor position is less than or greater than the elements bounding coordinates, set coordinates within those bounds - barXY = barOffset > 0 ? -halfOfHandle : barOffset - halfOfHandle < -barDim ? barDim : Math.abs(barOffset), - offsetPct = percent(barXY, barDim); - value = (this.options.end - this.options.start) * offsetPct + this.options.start; + var elemOffset = this.$element.offset()[direction]; + + // touch events emulated by the touch util give position relative to screen, add window.scroll to event coordinates... + // best way to guess this is simulated is if clientY == pageY + if (e.clientY === e.pageY) { + eventOffset = eventOffset + windowScroll; + } + var eventFromBar = eventOffset - elemOffset; + var barXY; + if (eventFromBar < 0) { + barXY = 0; + } else if (eventFromBar > barDim) { + barXY = barDim; + } else { + barXY = eventFromBar; + } + var offsetPct = percent(barXY, barDim); + + value = this._value(offsetPct); // turn everything around for RTL, yay math! if (Foundation.rtl() && !this.options.vertical) { @@ -7481,16 +7822,27 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * Adds event listeners to the slider elements. * @function * @private - * @param {jQuery} $handle - the current handle to apply listeners to. */ }, { key: '_events', - value: function _events($handle) { - if (this.options.disabled) { - return false; + value: function _events() { + this._eventsForHandle(this.$handle); + if (this.handles[1]) { + this._eventsForHandle(this.$handle2); } + } + + /** + * Adds event listeners a particular handle + * @function + * @private + * @param {jQuery} $handle - the current handle to apply listeners to. + */ + }, { + key: '_eventsForHandle', + value: function _eventsForHandle($handle) { var _this = this, curHandle, timer; @@ -7529,7 +7881,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons $body.on('mousemove.zf.slider', function (e) { e.preventDefault(); - _this._handleEvent(e, curHandle); }).on('mouseup.zf.slider', function (e) { _this._handleEvent(e, curHandle); @@ -7540,6 +7891,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons $body.off('mousemove.zf.slider mouseup.zf.slider'); }); + }) + // prevent events triggered by touch + .on('selectstart.zf.slider touchmove.zf.slider', function (e) { + e.preventDefault(); }); } @@ -7587,6 +7942,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.inputs.off('.zf.slider'); this.$element.off('.zf.slider'); + clearTimeout(this.timeout); + Foundation.unregisterPlugin(this); } }]); @@ -7694,11 +8051,23 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ invertVertical: false, /** - * Milliseconds before the `changed.zf-slider` event is triggered after value change. + * Milliseconds before the `changed.zf-slider` event is triggered after value change. * @option * @example 500 */ - changedDelay: 500 + changedDelay: 500, + /** + * Basevalue for non-linear sliders + * @option + * @example 5 + */ + nonLinearBase: 5, + /** + * Basevalue for non-linear sliders, possible values are: 'linear', 'pow' & 'log'. Pow and Log use the nonLinearBase setting. + * @option + * @example 'linear' + */ + positionValueFunction: 'linear' }; function percent(frac, num) { @@ -7707,35 +8076,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function absPosition($handle, dir, clickPos, param) { return Math.abs($handle.position()[dir] + $handle[param]() / 2 - clickPos); } + function baseLog(base, value) { + return Math.log(value) / Math.log(base); + } // Window exports Foundation.plugin(Slider, 'Slider'); }(jQuery); - -//*********this is in case we go to static, absolute positions instead of dynamic positioning******** -// this.setSteps(function() { -// _this._events(); -// var initStart = _this.options.positions[_this.options.initialStart - 1] || null; -// var initEnd = _this.options.initialEnd ? _this.options.position[_this.options.initialEnd - 1] : null; -// if (initStart || initEnd) { -// _this._handleEvent(initStart, initEnd); -// } -// }); - -//***********the other part of absolute positions************* -// Slider.prototype.setSteps = function(cb) { -// var posChange = this.$element.outerWidth() / this.options.steps; -// var counter = 0 -// while(counter < this.options.steps) { -// if (counter) { -// this.options.positions.push(this.options.positions[counter - 1] + posChange); -// } else { -// this.options.positions.push(posChange); -// } -// counter++; -// } -// cb(); -// }; ;'use strict'; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); @@ -7758,7 +8105,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {jQuery} element - jQuery object to make sticky. * @param {Object} options - options object passed when creating the element programmatically. */ - function Sticky(element, options) { _classCallCheck(this, Sticky); @@ -7795,6 +8141,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.scrollCount = this.options.checkEvery; this.isStuck = false; $(window).one('load.zf.sticky', function () { + //We calculate the container height to have correct values for anchor points offset calculation. + _this.containerHeight = _this.$element.css("display") == "none" ? 0 : _this.$element[0].getBoundingClientRect().height; + _this.$container.css('height', _this.containerHeight); + _this.elemHeight = _this.containerHeight; if (_this.options.anchor !== '') { _this.$anchor = $('#' + _this.options.anchor); } else { @@ -7802,7 +8152,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } _this._setSizes(function () { - _this._calc(false); + var scroll = window.pageYOffset; + _this._calc(false, scroll); + //Unstick the element will ensure that proper classes are set. + if (!_this.isStuck) { + _this._removeSticky(scroll >= _this.topPoint ? false : true); + } }); _this._events(id.split('-').reverse().join('-')); }); @@ -7817,29 +8172,24 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_parsePoints', value: function _parsePoints() { - var top = this.options.topAnchor, - btm = this.options.btmAnchor, + var top = this.options.topAnchor == "" ? 1 : this.options.topAnchor, + btm = this.options.btmAnchor == "" ? document.documentElement.scrollHeight : this.options.btmAnchor, pts = [top, btm], breaks = {}; - if (top && btm) { - - for (var i = 0, len = pts.length; i < len && pts[i]; i++) { - var pt; - if (typeof pts[i] === 'number') { - pt = pts[i]; - } else { - var place = pts[i].split(':'), - anchor = $('#' + place[0]); + for (var i = 0, len = pts.length; i < len && pts[i]; i++) { + var pt; + if (typeof pts[i] === 'number') { + pt = pts[i]; + } else { + var place = pts[i].split(':'), + anchor = $('#' + place[0]); - pt = anchor.offset().top; - if (place[1] && place[1].toLowerCase() === 'bottom') { - pt += anchor[0].getBoundingClientRect().height; - } + pt = anchor.offset().top; + if (place[1] && place[1].toLowerCase() === 'bottom') { + pt += anchor[0].getBoundingClientRect().height; } - breaks[i] = pt; } - } else { - breaks = { 0: 1, 1: document.documentElement.scrollHeight }; + breaks[i] = pt; } this.points = breaks; @@ -7962,7 +8312,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_setSticky', value: function _setSticky() { - var stickTo = this.options.stickTo, + var _this = this, + stickTo = this.options.stickTo, mrgn = stickTo === 'top' ? 'marginTop' : 'marginBottom', notStuckTo = stickTo === 'top' ? 'bottom' : 'top', css = {}; @@ -7970,7 +8321,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons css[mrgn] = this.options[mrgn] + 'em'; css[stickTo] = 0; css[notStuckTo] = 'auto'; - css['left'] = this.$container.offset().left + parseInt(window.getComputedStyle(this.$container[0])["padding-left"], 10); this.isStuck = true; this.$element.removeClass('is-anchored is-at-' + notStuckTo).addClass('is-stuck is-at-' + stickTo).css(css) /** @@ -7979,6 +8329,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @event Sticky#stuckto */ .trigger('sticky.zf.stuckto:' + stickTo); + this.$element.on("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd", function () { + _this._setSizes(); + }); } /** @@ -8003,15 +8356,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons css[mrgn] = 0; - if (isTop && !stickToTop || stickToTop && !isTop) { - css[stickTo] = anchorPt; - css[notStuckTo] = 0; + css['bottom'] = 'auto'; + if (isTop) { + css['top'] = 0; } else { - css[stickTo] = 0; - css[notStuckTo] = anchorPt; + css['top'] = anchorPt; } - css['left'] = ''; this.isStuck = false; this.$element.removeClass('is-stuck is-at-' + stickTo).addClass('is-anchored is-at-' + topOrBottom).css(css) /** @@ -8032,14 +8383,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_setSizes', value: function _setSizes(cb) { - this.canStick = Foundation.MediaQuery.atLeast(this.options.stickyOn); + this.canStick = Foundation.MediaQuery.is(this.options.stickyOn); if (!this.canStick) { - cb(); + if (cb && typeof cb === 'function') { + cb(); + } } var _this = this, newElemWidth = this.$container[0].getBoundingClientRect().width, comp = window.getComputedStyle(this.$container[0]), - pdng = parseInt(comp['padding-right'], 10); + pdngl = parseInt(comp['padding-left'], 10), + pdngr = parseInt(comp['padding-right'], 10); if (this.$anchor && this.$anchor.length) { this.anchorHeight = this.$anchor[0].getBoundingClientRect().height; @@ -8048,22 +8402,28 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } this.$element.css({ - 'max-width': newElemWidth - pdng + 'px' + 'max-width': newElemWidth - pdngl - pdngr + 'px' }); var newContainerHeight = this.$element[0].getBoundingClientRect().height || this.containerHeight; + if (this.$element.css("display") == "none") { + newContainerHeight = 0; + } this.containerHeight = newContainerHeight; this.$container.css({ height: newContainerHeight }); this.elemHeight = newContainerHeight; - if (this.isStuck) { - this.$element.css({ "left": this.$container.offset().left + parseInt(comp['padding-left'], 10) }); + if (!this.isStuck) { + if (this.$element.hasClass('is-at-bottom')) { + var anchorPt = (this.points ? this.points[1] - this.$container.offset().top : this.anchorHeight) - this.elemHeight; + this.$element.css('top', anchorPt); + } } this._setBreakPoints(newContainerHeight, function () { - if (cb) { + if (cb && typeof cb === 'function') { cb(); } }); @@ -8080,7 +8440,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons key: '_setBreakPoints', value: function _setBreakPoints(elemHeight, cb) { if (!this.canStick) { - if (cb) { + if (cb && typeof cb === 'function') { cb(); } else { return false; @@ -8108,7 +8468,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.topPoint = topPoint; this.bottomPoint = bottomPoint; - if (cb) { + if (cb && typeof cb === 'function') { cb(); } } @@ -8131,8 +8491,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons bottom: '', 'max-width': '' }).off('resizeme.zf.trigger'); - - this.$anchor.off('change.zf.sticky'); + if (this.$anchor && this.$anchor.length) { + this.$anchor.off('change.zf.sticky'); + } $(window).off(this.scrollListener); if (this.wasWrapped) { @@ -8252,7 +8613,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {jQuery} element - jQuery object to make into tabs. * @param {Object} options - Overrides to the default plugin settings. */ - function Tabs(element, options) { _classCallCheck(this, Tabs); @@ -8284,13 +8644,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function _init() { var _this = this; + this.$element.attr({ 'role': 'tablist' }); this.$tabTitles = this.$element.find('.' + this.options.linkClass); this.$tabContent = $('[data-tabs-content="' + this.$element[0].id + '"]'); this.$tabTitles.each(function () { var $elem = $(this), $link = $elem.find('a'), - isActive = $elem.hasClass('is-active'), + isActive = $elem.hasClass('' + _this.options.linkActiveClass), hash = $link[0].hash.slice(1), linkId = $link[0].id ? $link[0].id : hash + '-label', $tabContent = $('#' + hash); @@ -8311,7 +8672,37 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); if (isActive && _this.options.autoFocus) { - $link.focus(); + $(window).load(function () { + $('html, body').animate({ scrollTop: $elem.offset().top }, _this.options.deepLinkSmudgeDelay, function () { + $link.focus(); + }); + }); + } + + //use browser to open a tab, if it exists in this tabset + if (_this.options.deepLink) { + var anchor = window.location.hash; + //need a hash and a relevant anchor in this tabset + if (anchor.length) { + var $link = $elem.find('[href="' + anchor + '"]'); + if ($link.length) { + _this.selectTab($(anchor)); + + //roll up a little to show the titles + if (_this.options.deepLinkSmudge) { + $(window).load(function () { + var offset = $elem.offset(); + $('html, body').animate({ scrollTop: offset.top }, _this.options.deepLinkSmudgeDelay); + }); + } + + /** + * Fires when the zplugin has deeplinked at pageload + * @event Tabs#deeplink + */ + $elem.trigger('deeplink.zf.tabs', [$link, $(anchor)]); + } + } } }); @@ -8338,9 +8729,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function _events() { this._addKeyHandler(); this._addClickHandler(); + this._setHeightMqHandler = null; if (this.options.matchHeight) { - $(window).on('changed.zf.mediaquery', this._setHeight.bind(this)); + this._setHeightMqHandler = this._setHeight.bind(this); + + $(window).on('changed.zf.mediaquery', this._setHeightMqHandler); } } @@ -8357,9 +8751,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.$element.off('click.zf.tabs').on('click.zf.tabs', '.' + this.options.linkClass, function (e) { e.preventDefault(); e.stopPropagation(); - if ($(this).hasClass('is-active')) { - return; - } _this._handleTabChange($(this)); }); } @@ -8373,13 +8764,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons key: '_addKeyHandler', value: function _addKeyHandler() { var _this = this; - var $firstTab = _this.$element.find('li:first-of-type'); - var $lastTab = _this.$element.find('li:last-of-type'); this.$tabTitles.off('keydown.zf.tabs').on('keydown.zf.tabs', function (e) { if (e.which === 9) return; - e.stopPropagation(); - e.preventDefault(); var $element = $(this), $elements = $element.parent('ul').children('li'), @@ -8412,13 +8799,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons next: function () { $nextElement.find('[role="tab"]').focus(); _this._handleTabChange($nextElement); + }, + handled: function () { + e.stopPropagation(); + e.preventDefault(); } }); }); } /** - * Opens the tab `$targetContent` defined by `$target`. + * Opens the tab `$targetContent` defined by `$target`. Collapses active tab. * @param {jQuery} $target - Tab to open. * @fires Tabs#change * @function @@ -8427,24 +8818,87 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: '_handleTabChange', value: function _handleTabChange($target) { - var $tabLink = $target.find('[role="tab"]'), + + /** + * Check for active class on target. Collapse if exists. + */ + if ($target.hasClass('' + this.options.linkActiveClass)) { + if (this.options.activeCollapse) { + this._collapseTab($target); + + /** + * Fires when the zplugin has successfully collapsed tabs. + * @event Tabs#collapse + */ + this.$element.trigger('collapse.zf.tabs', [$target]); + } + return; + } + + var $oldTab = this.$element.find('.' + this.options.linkClass + '.' + this.options.linkActiveClass), + $tabLink = $target.find('[role="tab"]'), hash = $tabLink[0].hash, - $targetContent = this.$tabContent.find(hash), - $oldTab = this.$element.find('.' + this.options.linkClass + '.is-active').removeClass('is-active').find('[role="tab"]').attr({ 'aria-selected': 'false' }); + $targetContent = this.$tabContent.find(hash); - $('#' + $oldTab.attr('aria-controls')).removeClass('is-active').attr({ 'aria-hidden': 'true' }); + //close old tab + this._collapseTab($oldTab); - $target.addClass('is-active'); + //open new tab + this._openTab($target); - $tabLink.attr({ 'aria-selected': 'true' }); + //either replace or update browser history + if (this.options.deepLink) { + var anchor = $target.find('a').attr('href'); - $targetContent.addClass('is-active').attr({ 'aria-hidden': 'false' }); + if (this.options.updateHistory) { + history.pushState({}, '', anchor); + } else { + history.replaceState({}, '', anchor); + } + } /** * Fires when the plugin has successfully changed tabs. * @event Tabs#change */ - this.$element.trigger('change.zf.tabs', [$target]); + this.$element.trigger('change.zf.tabs', [$target, $targetContent]); + + //fire to children a mutation event + $targetContent.find("[data-mutate]").trigger("mutateme.zf.trigger"); + } + + /** + * Opens the tab `$targetContent` defined by `$target`. + * @param {jQuery} $target - Tab to Open. + * @function + */ + + }, { + key: '_openTab', + value: function _openTab($target) { + var $tabLink = $target.find('[role="tab"]'), + hash = $tabLink[0].hash, + $targetContent = this.$tabContent.find(hash); + + $target.addClass('' + this.options.linkActiveClass); + + $tabLink.attr({ 'aria-selected': 'true' }); + + $targetContent.addClass('' + this.options.panelActiveClass).attr({ 'aria-hidden': 'false' }); + } + + /** + * Collapses `$targetContent` defined by `$target`. + * @param {jQuery} $target - Tab to Open. + * @function + */ + + }, { + key: '_collapseTab', + value: function _collapseTab($target) { + var $target_anchor = $target.removeClass('' + this.options.linkActiveClass).find('[role="tab"]').attr({ 'aria-selected': 'false' }); + + $('#' + $target_anchor.attr('aria-controls')).removeClass('' + this.options.panelActiveClass).attr({ 'aria-hidden': 'true' }); } /** @@ -8486,7 +8940,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var max = 0; this.$tabContent.find('.' + this.options.panelClass).css('height', '').each(function () { var panel = $(this), - isActive = panel.hasClass('is-active'); + isActive = panel.hasClass('' + this.options.panelActiveClass); if (!isActive) { panel.css({ 'visibility': 'hidden', 'display': 'block' }); @@ -8516,7 +8970,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.$element.find('.' + this.options.linkClass).off('.zf.tabs').hide().end().find('.' + this.options.panelClass).hide(); if (this.options.matchHeight) { - $(window).off('changed.zf.mediaquery'); + if (this._setHeightMqHandler != null) { + $(window).off('changed.zf.mediaquery', this._setHeightMqHandler); + } } Foundation.unregisterPlugin(this); @@ -8527,8 +8983,37 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }(); Tabs.defaults = { + /** + * Allows the window to scroll to content of pane specified by hash anchor + * @option + * @example false + */ + deepLink: false, + + /** + * Adjust the deep link scroll to make sure the top of the tab panel is visible + * @option + * @example false + */ + deepLinkSmudge: false, + + /** + * Animation time (ms) for the deep link adjustment + * @option + * @example 300 + */ + deepLinkSmudgeDelay: 300, + + /** + * Update the browser history with the open tab + * @option + * @example false + */ + updateHistory: false, + /** * Allows the window to scroll to content of active pane on load if set to true. + * Not recommended if more than one tab panel per page. * @option * @example false */ @@ -8548,6 +9033,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ matchHeight: false, + /** + * Allows active tabs to collapse when clicked. + * @option + * @example false + */ + activeCollapse: false, + /** * Class applied to `li`'s in tab link list. * @option @@ -8555,17 +9047,27 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ linkClass: 'tabs-title', + /** + * Class applied to the active `li` in tab link list. + * @option + * @example 'is-active' + */ + linkActiveClass: 'is-active', + /** * Class applied to the content containers. * @option * @example 'tabs-panel' */ - panelClass: 'tabs-panel' - }; + panelClass: 'tabs-panel', - function checkClass($elem) { - return $elem.hasClass('is-active'); - } + /** + * Class applied to the active content container. + * @option + * @example 'is-active' + */ + panelActiveClass: 'is-active' + }; // Window exports Foundation.plugin(Tabs, 'Tabs'); @@ -8593,7 +9095,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {Object} element - jQuery object to add the trigger to. * @param {Object} options - Overrides to the default plugin settings. */ - function Toggler(element, options) { _classCallCheck(this, Toggler); @@ -8684,6 +9185,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } this._updateARIA(isOn); + this.$element.find('[data-mutate]').trigger('mutateme.zf.trigger'); } }, { key: '_toggleAnimate', @@ -8694,11 +9196,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons Foundation.Motion.animateIn(this.$element, this.animationIn, function () { _this._updateARIA(true); this.trigger('on.zf.toggler'); + this.find('[data-mutate]').trigger('mutateme.zf.trigger'); }); } else { Foundation.Motion.animateOut(this.$element, this.animationOut, function () { _this._updateARIA(false); this.trigger('off.zf.toggler'); + this.find('[data-mutate]').trigger('mutateme.zf.trigger'); }); } } @@ -8748,6 +9252,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * Tooltip module. * @module foundation.tooltip * @requires foundation.util.box + * @requires foundation.util.mediaQuery * @requires foundation.util.triggers */ @@ -8759,7 +9264,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param {jQuery} element - jQuery object to attach a tooltip to. * @param {Object} options - object to extend the default configuration. */ - function Tooltip(element, options) { _classCallCheck(this, Tooltip); @@ -8784,11 +9288,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function _init() { var elemId = this.$element.attr('aria-describedby') || Foundation.GetYoDigits(6, 'tooltip'); - this.options.positionClass = this._getPositionClass(this.$element); + this.options.positionClass = this.options.positionClass || this._getPositionClass(this.$element); this.options.tipText = this.options.tipText || this.$element.attr('title'); this.template = this.options.template ? $(this.options.template) : this._buildTemplate(elemId); - this.template.appendTo(document.body).text(this.options.tipText).hide(); + if (this.options.allowHtml) { + this.template.appendTo(document.body).html(this.options.tipText).hide(); + } else { + this.template.appendTo(document.body).text(this.options.tipText).hide(); + } this.$element.attr({ 'title': '', @@ -8796,7 +9304,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 'data-yeti-box': elemId, 'data-toggle': elemId, 'data-resize': elemId - }).addClass(this.triggerClass); + }).addClass(this.options.triggerClass); //helper variables to track movement on collisions this.usedPositions = []; @@ -8925,7 +9433,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: 'show', value: function show() { - if (this.options.showOn !== 'all' && !Foundation.MediaQuery.atLeast(this.options.showOn)) { + if (this.options.showOn !== 'all' && !Foundation.MediaQuery.is(this.options.showOn)) { // console.error('The screen is too small to display this tooltip'); return false; } @@ -9011,7 +9519,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } }).on('mouseleave.zf.tooltip', function (e) { clearTimeout(_this.timeout); - if (!isFocus || !_this.isClick && _this.options.clickOpen) { + if (!isFocus || _this.isClick && !_this.options.clickOpen) { _this.hide(); } }); @@ -9021,14 +9529,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.$element.on('mousedown.zf.tooltip', function (e) { e.stopImmediatePropagation(); if (_this.isClick) { - _this.hide(); + //_this.hide(); // _this.isClick = false; } else { - _this.isClick = true; - if ((_this.options.disableHover || !_this.$element.attr('tabindex')) && !_this.isActive) { - _this.show(); - } + _this.isClick = true; + if ((_this.options.disableHover || !_this.$element.attr('tabindex')) && !_this.isActive) { + _this.show(); } + } + }); + } else { + this.$element.on('mousedown.zf.tooltip', function (e) { + e.stopImmediatePropagation(); + _this.isClick = true; }); } @@ -9046,11 +9559,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.$element.on('focus.zf.tooltip', function (e) { isFocus = true; - // console.log(_this.isClick); if (_this.isClick) { + // If we're not showing open on clicks, we need to pretend a click-launched focus isn't + // a real focus, otherwise on hover and come back we get bad behavior + if (!_this.options.clickOpen) { + isFocus = false; + } return false; } else { - // $(window) _this.show(); } }).on('focusout.zf.tooltip', function (e) { @@ -9087,9 +9603,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: 'destroy', value: function destroy() { - this.$element.attr('title', this.template.text()).off('.zf.trigger .zf.tootip') - // .removeClass('has-tip') - .removeAttr('aria-describedby').removeAttr('data-yeti-box').removeAttr('data-toggle').removeAttr('data-resize'); + this.$element.attr('title', this.template.text()).off('.zf.trigger .zf.tooltip').removeClass('has-tip top right left').removeAttr('aria-describedby aria-haspopup data-disable-hover data-resize data-toggle data-tooltip data-yeti-box'); this.template.remove(); @@ -9186,7 +9700,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @option * @example 12 */ - hOffset: 12 + hOffset: 12, + /** + * Allow HTML in tooltip. Warning: If you are loading user-generated content into tooltips, + * allowing HTML may open yourself up to XSS attacks. + * @option + * @example false + */ + allowHtml: false }; /** @@ -9316,7 +9837,16 @@ $('#start-jr').on('click', function () { $(document).foundation('joyride', 'start'); }); ;"use strict"; -;"use strict"; +;'use strict'; + +$(document).ready(function () { + var videos = $('iframe[src*="vimeo.com"], iframe[src*="youtube.com"]'); + + videos.each(function () { + var el = $(this); + el.wrap('
    '); + }); +}); ;'use strict'; $(window).bind(' load resize orientationChange ', function () { @@ -9336,4 +9866,4 @@ $(window).bind(' load resize orientationChange ', function () { stickyFooter(); } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndoYXQtaW5wdXQuanMiLCJmb3VuZGF0aW9uLmNvcmUuanMiLCJmb3VuZGF0aW9uLnV0aWwuYm94LmpzIiwiZm91bmRhdGlvbi51dGlsLmtleWJvYXJkLmpzIiwiZm91bmRhdGlvbi51dGlsLm1lZGlhUXVlcnkuanMiLCJmb3VuZGF0aW9uLnV0aWwubW90aW9uLmpzIiwiZm91bmRhdGlvbi51dGlsLm5lc3QuanMiLCJmb3VuZGF0aW9uLnV0aWwudGltZXJBbmRJbWFnZUxvYWRlci5qcyIsImZvdW5kYXRpb24udXRpbC50b3VjaC5qcyIsImZvdW5kYXRpb24udXRpbC50cmlnZ2Vycy5qcyIsImZvdW5kYXRpb24uYWJpZGUuanMiLCJmb3VuZGF0aW9uLmFjY29yZGlvbi5qcyIsImZvdW5kYXRpb24uYWNjb3JkaW9uTWVudS5qcyIsImZvdW5kYXRpb24uZHJpbGxkb3duLmpzIiwiZm91bmRhdGlvbi5kcm9wZG93bi5qcyIsImZvdW5kYXRpb24uZHJvcGRvd25NZW51LmpzIiwiZm91bmRhdGlvbi5lcXVhbGl6ZXIuanMiLCJmb3VuZGF0aW9uLmludGVyY2hhbmdlLmpzIiwiZm91bmRhdGlvbi5tYWdlbGxhbi5qcyIsImZvdW5kYXRpb24ub2ZmY2FudmFzLmpzIiwiZm91bmRhdGlvbi5vcmJpdC5qcyIsImZvdW5kYXRpb24ucmVzcG9uc2l2ZU1lbnUuanMiLCJmb3VuZGF0aW9uLnJlc3BvbnNpdmVUb2dnbGUuanMiLCJmb3VuZGF0aW9uLnJldmVhbC5qcyIsImZvdW5kYXRpb24uc2xpZGVyLmpzIiwiZm91bmRhdGlvbi5zdGlja3kuanMiLCJmb3VuZGF0aW9uLnRhYnMuanMiLCJmb3VuZGF0aW9uLnRvZ2dsZXIuanMiLCJmb3VuZGF0aW9uLnRvb2x0aXAuanMiLCJtb3Rpb24tdWkuanMiLCJmbGV4LXZpZGVvLmpzIiwiaW5pdC1mb3VuZGF0aW9uLmpzIiwiam95cmlkZS1kZW1vLmpzIiwib2ZmQ2FudmFzLmpzIiwicHJlbG9hZGVyLmpzIiwic3RpY2t5Zm9vdGVy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QUFSLEVBQWMsT0FBZCxFQUF1QixTQUF2QixFQUFrQyxFQUFsQyxFQUQwQztHQUFqQzs7QUFJWCxjQUFZLFVBQVMsT0FBVCxFQUFrQixTQUFsQixFQUE2QixFQUE3QixFQUFpQztBQUMzQyxZQUFRLEtBQVIsRUFBZSxPQUFmLEVBQXdCLFNBQXhCLEVBQW1DLEVBQW5DLEVBRDJDO0dBQWpDO0NBTFY7OztBQ2hHSixPQUFRLDRCQUFSLEVBQXNDLElBQXRDLENBQTJDLHNDQUEzQztBQUNBLE9BQVEsMEJBQVIsRUFBb0MsSUFBcEMsQ0FBeUMsNENBQXpDOzs7QUNEQSxPQUFPLFFBQVAsRUFBaUIsVUFBakI7Ozs7QUNDQSxFQUFFLFdBQUYsRUFBZSxFQUFmLENBQWtCLE9BQWxCLEVBQTJCLFlBQVc7QUFDcEMsSUFBRSxRQUFGLEVBQVksVUFBWixDQUF1QixTQUF2QixFQUFpQyxPQUFqQyxFQURvQztDQUFYLENBQTNCO0NDREE7RUNBQTs7O0FDQ0EsRUFBRSxNQUFGLEVBQVUsSUFBVixDQUFlLGlDQUFmLEVBQWtELFlBQVk7QUFDM0QsTUFBSSxTQUFTLEVBQUUsbUJBQUYsQ0FBVCxDQUR1RDtBQUUzRCxNQUFJLE1BQU0sT0FBTyxRQUFQLEVBQU4sQ0FGdUQ7QUFHM0QsTUFBSSxTQUFTLEVBQUUsTUFBRixFQUFVLE1BQVYsRUFBVCxDQUh1RDtBQUkzRCxXQUFTLFNBQVMsSUFBSSxHQUFKLENBSnlDO0FBSzNELFdBQVMsU0FBUyxPQUFPLE1BQVAsRUFBVCxHQUEwQixDQUExQixDQUxrRDs7QUFPM0QsV0FBUyxZQUFULEdBQXdCO0FBQ3RCLFdBQU8sR0FBUCxDQUFXO0FBQ1Asb0JBQWMsU0FBUyxJQUFUO0tBRGxCLEVBRHNCO0dBQXhCOztBQU1BLE1BQUksU0FBUyxDQUFULEVBQVk7QUFDZCxtQkFEYztHQUFoQjtDQWIrQyxDQUFsRCIsImZpbGUiOiJmb3VuZGF0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsid2luZG93LndoYXRJbnB1dCA9IChmdW5jdGlvbigpIHtcblxuICAndXNlIHN0cmljdCc7XG5cbiAgLypcbiAgICAtLS0tLS0tLS0tLS0tLS1cbiAgICB2YXJpYWJsZXNcbiAgICAtLS0tLS0tLS0tLS0tLS1cbiAgKi9cblxuICAvLyBhcnJheSBvZiBhY3RpdmVseSBwcmVzc2VkIGtleXNcbiAgdmFyIGFjdGl2ZUtleXMgPSBbXTtcblxuICAvLyBjYWNoZSBkb2N1bWVudC5ib2R5XG4gIHZhciBib2R5O1xuXG4gIC8vIGJvb2xlYW46IHRydWUgaWYgdG91Y2ggYnVmZmVyIHRpbWVyIGlzIHJ1bm5pbmdcbiAgdmFyIGJ1ZmZlciA9IGZhbHNlO1xuXG4gIC8vIHRoZSBsYXN0IHVzZWQgaW5wdXQgdHlwZVxuICB2YXIgY3VycmVudElucHV0ID0gbnVsbDtcblxuICAvLyBgaW5wdXRgIHR5cGVzIHRoYXQgZG9uJ3QgYWNjZXB0IHRleHRcbiAgdmFyIG5vblR5cGluZ0lucHV0cyA9IFtcbiAgICAnYnV0dG9uJyxcbiAgICAnY2hlY2tib3gnLFxuICAgICdmaWxlJyxcbiAgICAnaW1hZ2UnLFxuICAgICdyYWRpbycsXG4gICAgJ3Jlc2V0JyxcbiAgICAnc3VibWl0J1xuICBdO1xuXG4gIC8vIGRldGVjdCB2ZXJzaW9uIG9mIG1vdXNlIHdoZWVsIGV2ZW50IHRvIHVzZVxuICAvLyB2aWEgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL3doZWVsXG4gIHZhciBtb3VzZVdoZWVsID0gZGV0ZWN0V2hlZWwoKTtcblxuICAvLyBsaXN0IG9mIG1vZGlmaWVyIGtleXMgY29tbW9ubHkgdXNlZCB3aXRoIHRoZSBtb3VzZSBhbmRcbiAgLy8gY2FuIGJlIHNhZmVseSBpZ25vcmVkIHRvIHByZXZlbnQgZmFsc2Uga2V5Ym9hcmQgZGV0ZWN0aW9uXG4gIHZhciBpZ25vcmVNYXAgPSBbXG4gICAgMTYsIC8vIHNoaWZ0XG4gICAgMTcsIC8vIGNvbnRyb2xcbiAgICAxOCwgLy8gYWx0XG4gICAgOTEsIC8vIFdpbmRvd3Mga2V5IC8gbGVmdCBBcHBsZSBjbWRcbiAgICA5MyAgLy8gV2luZG93cyBtZW51IC8gcmlnaHQgQXBwbGUgY21kXG4gIF07XG5cbiAgLy8gbWFwcGluZyBvZiBldmVudHMgdG8gaW5wdXQgdHlwZXNcbiAgdmFyIGlucHV0TWFwID0ge1xuICAgICdrZXlkb3duJzogJ2tleWJvYXJkJyxcbiAgICAna2V5dXAnOiAna2V5Ym9hcmQnLFxuICAgICdtb3VzZWRvd24nOiAnbW91c2UnLFxuICAgICdtb3VzZW1vdmUnOiAnbW91c2UnLFxuICAgICdNU1BvaW50ZXJEb3duJzogJ3BvaW50ZXInLFxuICAgICdNU1BvaW50ZXJNb3ZlJzogJ3BvaW50ZXInLFxuICAgICdwb2ludGVyZG93bic6ICdwb2ludGVyJyxcbiAgICAncG9pbnRlcm1vdmUnOiAncG9pbnRlcicsXG4gICAgJ3RvdWNoc3RhcnQnOiAndG91Y2gnXG4gIH07XG5cbiAgLy8gYWRkIGNvcnJlY3QgbW91c2Ugd2hlZWwgZXZlbnQgbWFwcGluZyB0byBgaW5wdXRNYXBgXG4gIGlucHV0TWFwW2RldGVjdFdoZWVsKCldID0gJ21vdXNlJztcblxuICAvLyBhcnJheSBvZiBhbGwgdXNlZCBpbnB1dCB0eXBlc1xuICB2YXIgaW5wdXRUeXBlcyA9IFtdO1xuXG4gIC8vIG1hcHBpbmcgb2Yga2V5IGNvZGVzIHRvIGEgY29tbW9uIG5hbWVcbiAgdmFyIGtleU1hcCA9IHtcbiAgICA5OiAndGFiJyxcbiAgICAxMzogJ2VudGVyJyxcbiAgICAxNjogJ3NoaWZ0JyxcbiAgICAyNzogJ2VzYycsXG4gICAgMzI6ICdzcGFjZScsXG4gICAgMzc6ICdsZWZ0JyxcbiAgICAzODogJ3VwJyxcbiAgICAzOTogJ3JpZ2h0JyxcbiAgICA0MDogJ2Rvd24nXG4gIH07XG5cbiAgLy8gbWFwIG9mIElFIDEwIHBvaW50ZXIgZXZlbnRzXG4gIHZhciBwb2ludGVyTWFwID0ge1xuICAgIDI6ICd0b3VjaCcsXG4gICAgMzogJ3RvdWNoJywgLy8gdHJlYXQgcGVuIGxpa2UgdG91Y2hcbiAgICA0OiAnbW91c2UnXG4gIH07XG5cbiAgLy8gdG91Y2ggYnVmZmVyIHRpbWVyXG4gIHZhciB0aW1lcjtcblxuXG4gIC8qXG4gICAgLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb25zXG4gICAgLS0tLS0tLS0tLS0tLS0tXG4gICovXG5cbiAgLy8gYWxsb3dzIGV2ZW50cyB0aGF0IGFyZSBhbHNvIHRyaWdnZXJlZCB0byBiZSBmaWx0ZXJlZCBvdXQgZm9yIGB0b3VjaHN0YXJ0YFxuICBmdW5jdGlvbiBldmVudEJ1ZmZlcigpIHtcbiAgICBjbGVhclRpbWVyKCk7XG4gICAgc2V0SW5wdXQoZXZlbnQpO1xuXG4gICAgYnVmZmVyID0gdHJ1ZTtcbiAgICB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgYnVmZmVyID0gZmFsc2U7XG4gICAgfSwgNjUwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlcmVkRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWJ1ZmZlcikgc2V0SW5wdXQoZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5CdWZmZXJlZEV2ZW50KGV2ZW50KSB7XG4gICAgY2xlYXJUaW1lcigpO1xuICAgIHNldElucHV0KGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyVGltZXIoKSB7XG4gICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcik7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRJbnB1dChldmVudCkge1xuICAgIHZhciBldmVudEtleSA9IGtleShldmVudCk7XG4gICAgdmFyIHZhbHVlID0gaW5wdXRNYXBbZXZlbnQudHlwZV07XG4gICAgaWYgKHZhbHVlID09PSAncG9pbnRlcicpIHZhbHVlID0gcG9pbnRlclR5cGUoZXZlbnQpO1xuXG4gICAgLy8gZG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIHZhbHVlIG1hdGNoZXMgdGhlIGlucHV0IHR5cGUgYWxyZWFkeSBzZXRcbiAgICBpZiAoY3VycmVudElucHV0ICE9PSB2YWx1ZSkge1xuICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gdGFyZ2V0KGV2ZW50KTtcbiAgICAgIHZhciBldmVudFRhcmdldE5vZGUgPSBldmVudFRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIGV2ZW50VGFyZ2V0VHlwZSA9IChldmVudFRhcmdldE5vZGUgPT09ICdpbnB1dCcpID8gZXZlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCd0eXBlJykgOiBudWxsO1xuXG4gICAgICBpZiAoXG4gICAgICAgICgvLyBvbmx5IGlmIHRoZSB1c2VyIGZsYWcgdG8gYWxsb3cgdHlwaW5nIGluIGZvcm0gZmllbGRzIGlzbid0IHNldFxuICAgICAgICAhYm9keS5oYXNBdHRyaWJ1dGUoJ2RhdGEtd2hhdGlucHV0LWZvcm10eXBpbmcnKSAmJlxuXG4gICAgICAgIC8vIG9ubHkgaWYgY3VycmVudElucHV0IGhhcyBhIHZhbHVlXG4gICAgICAgIGN1cnJlbnRJbnB1dCAmJlxuXG4gICAgICAgIC8vIG9ubHkgaWYgdGhlIGlucHV0IGlzIGBrZXlib2FyZGBcbiAgICAgICAgdmFsdWUgPT09ICdrZXlib2FyZCcgJiZcblxuICAgICAgICAvLyBub3QgaWYgdGhlIGtleSBpcyBgVEFCYFxuICAgICAgICBrZXlNYXBbZXZlbnRLZXldICE9PSAndGFiJyAmJlxuXG4gICAgICAgIC8vIG9ubHkgaWYgdGhlIHRhcmdldCBpcyBhIGZvcm0gaW5wdXQgdGhhdCBhY2NlcHRzIHRleHRcbiAgICAgICAgKFxuICAgICAgICAgICBldmVudFRhcmdldE5vZGUgPT09ICd0ZXh0YXJlYScgfHxcbiAgICAgICAgICAgZXZlbnRUYXJnZXROb2RlID09PSAnc2VsZWN0JyB8fFxuICAgICAgICAgICAoZXZlbnRUYXJnZXROb2RlID09PSAnaW5wdXQnICYmIG5vblR5cGluZ0lucHV0cy5pbmRleE9mKGV2ZW50VGFyZ2V0VHlwZSkgPCAwKVxuICAgICAgICApKSB8fCAoXG4gICAgICAgICAgLy8gaWdub3JlIG1vZGlmaWVyIGtleXNcbiAgICAgICAgICBpZ25vcmVNYXAuaW5kZXhPZihldmVudEtleSkgPiAtMVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgLy8gaWdub3JlIGtleWJvYXJkIHR5cGluZ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoSW5wdXQodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gJ2tleWJvYXJkJykgbG9nS2V5cyhldmVudEtleSk7XG4gIH1cblxuICBmdW5jdGlvbiBzd2l0Y2hJbnB1dChzdHJpbmcpIHtcbiAgICBjdXJyZW50SW5wdXQgPSBzdHJpbmc7XG4gICAgYm9keS5zZXRBdHRyaWJ1dGUoJ2RhdGEtd2hhdGlucHV0JywgY3VycmVudElucHV0KTtcblxuICAgIGlmIChpbnB1dFR5cGVzLmluZGV4T2YoY3VycmVudElucHV0KSA9PT0gLTEpIGlucHV0VHlwZXMucHVzaChjdXJyZW50SW5wdXQpO1xuICB9XG5cbiAgZnVuY3Rpb24ga2V5KGV2ZW50KSB7XG4gICAgcmV0dXJuIChldmVudC5rZXlDb2RlKSA/IGV2ZW50LmtleUNvZGUgOiBldmVudC53aGljaDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRhcmdldChldmVudCkge1xuICAgIHJldHVybiBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvaW50ZXJUeXBlKGV2ZW50KSB7XG4gICAgaWYgKHR5cGVvZiBldmVudC5wb2ludGVyVHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBwb2ludGVyTWFwW2V2ZW50LnBvaW50ZXJUeXBlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChldmVudC5wb2ludGVyVHlwZSA9PT0gJ3BlbicpID8gJ3RvdWNoJyA6IGV2ZW50LnBvaW50ZXJUeXBlOyAvLyB0cmVhdCBwZW4gbGlrZSB0b3VjaFxuICAgIH1cbiAgfVxuXG4gIC8vIGtleWJvYXJkIGxvZ2dpbmdcbiAgZnVuY3Rpb24gbG9nS2V5cyhldmVudEtleSkge1xuICAgIGlmIChhY3RpdmVLZXlzLmluZGV4T2Yoa2V5TWFwW2V2ZW50S2V5XSkgPT09IC0xICYmIGtleU1hcFtldmVudEtleV0pIGFjdGl2ZUtleXMucHVzaChrZXlNYXBbZXZlbnRLZXldKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuTG9nS2V5cyhldmVudCkge1xuICAgIHZhciBldmVudEtleSA9IGtleShldmVudCk7XG4gICAgdmFyIGFycmF5UG9zID0gYWN0aXZlS2V5cy5pbmRleE9mKGtleU1hcFtldmVudEtleV0pO1xuXG4gICAgaWYgKGFycmF5UG9zICE9PSAtMSkgYWN0aXZlS2V5cy5zcGxpY2UoYXJyYXlQb3MsIDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gYmluZEV2ZW50cygpIHtcbiAgICBib2R5ID0gZG9jdW1lbnQuYm9keTtcblxuICAgIC8vIHBvaW50ZXIgZXZlbnRzIChtb3VzZSwgcGVuLCB0b3VjaClcbiAgICBpZiAod2luZG93LlBvaW50ZXJFdmVudCkge1xuICAgICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIGJ1ZmZlcmVkRXZlbnQpO1xuICAgICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIGJ1ZmZlcmVkRXZlbnQpO1xuICAgIH0gZWxzZSBpZiAod2luZG93Lk1TUG9pbnRlckV2ZW50KSB7XG4gICAgICBib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ01TUG9pbnRlckRvd24nLCBidWZmZXJlZEV2ZW50KTtcbiAgICAgIGJvZHkuYWRkRXZlbnRMaXN0ZW5lcignTVNQb2ludGVyTW92ZScsIGJ1ZmZlcmVkRXZlbnQpO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIG1vdXNlIGV2ZW50c1xuICAgICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBidWZmZXJlZEV2ZW50KTtcbiAgICAgIGJvZHkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgYnVmZmVyZWRFdmVudCk7XG5cbiAgICAgIC8vIHRvdWNoIGV2ZW50c1xuICAgICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdykge1xuICAgICAgICBib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBldmVudEJ1ZmZlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbW91c2Ugd2hlZWxcbiAgICBib2R5LmFkZEV2ZW50TGlzdGVuZXIobW91c2VXaGVlbCwgYnVmZmVyZWRFdmVudCk7XG5cbiAgICAvLyBrZXlib2FyZCBldmVudHNcbiAgICBib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB1bkJ1ZmZlcmVkRXZlbnQpO1xuICAgIGJvZHkuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB1bkJ1ZmZlcmVkRXZlbnQpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdW5Mb2dLZXlzKTtcbiAgfVxuXG5cbiAgLypcbiAgICAtLS0tLS0tLS0tLS0tLS1cbiAgICB1dGlsaXRpZXNcbiAgICAtLS0tLS0tLS0tLS0tLS1cbiAgKi9cblxuICAvLyBkZXRlY3QgdmVyc2lvbiBvZiBtb3VzZSB3aGVlbCBldmVudCB0byB1c2VcbiAgLy8gdmlhIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy93aGVlbFxuICBmdW5jdGlvbiBkZXRlY3RXaGVlbCgpIHtcbiAgICByZXR1cm4gbW91c2VXaGVlbCA9ICdvbndoZWVsJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSA/XG4gICAgICAnd2hlZWwnIDogLy8gTW9kZXJuIGJyb3dzZXJzIHN1cHBvcnQgXCJ3aGVlbFwiXG5cbiAgICAgIGRvY3VtZW50Lm9ubW91c2V3aGVlbCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgJ21vdXNld2hlZWwnIDogLy8gV2Via2l0IGFuZCBJRSBzdXBwb3J0IGF0IGxlYXN0IFwibW91c2V3aGVlbFwiXG4gICAgICAgICdET01Nb3VzZVNjcm9sbCc7IC8vIGxldCdzIGFzc3VtZSB0aGF0IHJlbWFpbmluZyBicm93c2VycyBhcmUgb2xkZXIgRmlyZWZveFxuICB9XG5cblxuICAvKlxuICAgIC0tLS0tLS0tLS0tLS0tLVxuICAgIGluaXRcblxuICAgIGRvbid0IHN0YXJ0IHNjcmlwdCB1bmxlc3MgYnJvd3NlciBjdXRzIHRoZSBtdXN0YXJkLFxuICAgIGFsc28gcGFzc2VzIGlmIHBvbHlmaWxscyBhcmUgdXNlZFxuICAgIC0tLS0tLS0tLS0tLS0tLVxuICAqL1xuXG4gIGlmIChcbiAgICAnYWRkRXZlbnRMaXN0ZW5lcicgaW4gd2luZG93ICYmXG4gICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZcbiAgKSB7XG5cbiAgICAvLyBpZiB0aGUgZG9tIGlzIGFscmVhZHkgcmVhZHkgYWxyZWFkeSAoc2NyaXB0IHdhcyBwbGFjZWQgYXQgYm90dG9tIG9mIDxib2R5PilcbiAgICBpZiAoZG9jdW1lbnQuYm9keSkge1xuICAgICAgYmluZEV2ZW50cygpO1xuXG4gICAgLy8gb3RoZXJ3aXNlIHdhaXQgZm9yIHRoZSBkb20gdG8gbG9hZCAoc2NyaXB0IHdhcyBwbGFjZWQgaW4gdGhlIDxoZWFkPilcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGJpbmRFdmVudHMpO1xuICAgIH1cbiAgfVxuXG5cbiAgLypcbiAgICAtLS0tLS0tLS0tLS0tLS1cbiAgICBhcGlcbiAgICAtLS0tLS0tLS0tLS0tLS1cbiAgKi9cblxuICByZXR1cm4ge1xuXG4gICAgLy8gcmV0dXJucyBzdHJpbmc6IHRoZSBjdXJyZW50IGlucHV0IHR5cGVcbiAgICBhc2s6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY3VycmVudElucHV0OyB9LFxuXG4gICAgLy8gcmV0dXJucyBhcnJheTogY3VycmVudGx5IHByZXNzZWQga2V5c1xuICAgIGtleXM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gYWN0aXZlS2V5czsgfSxcblxuICAgIC8vIHJldHVybnMgYXJyYXk6IGFsbCB0aGUgZGV0ZWN0ZWQgaW5wdXQgdHlwZXNcbiAgICB0eXBlczogZnVuY3Rpb24oKSB7IHJldHVybiBpbnB1dFR5cGVzOyB9LFxuXG4gICAgLy8gYWNjZXB0cyBzdHJpbmc6IG1hbnVhbGx5IHNldCB0aGUgaW5wdXQgdHlwZVxuICAgIHNldDogc3dpdGNoSW5wdXRcbiAgfTtcblxufSgpKTtcbiIsIiFmdW5jdGlvbigkKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgRk9VTkRBVElPTl9WRVJTSU9OID0gJzYuMi4xJztcblxuLy8gR2xvYmFsIEZvdW5kYXRpb24gb2JqZWN0XG4vLyBUaGlzIGlzIGF0dGFjaGVkIHRvIHRoZSB3aW5kb3csIG9yIHVzZWQgYXMgYSBtb2R1bGUgZm9yIEFNRC9Ccm93c2VyaWZ5XG52YXIgRm91bmRhdGlvbiA9IHtcbiAgdmVyc2lvbjogRk9VTkRBVElPTl9WRVJTSU9OLFxuXG4gIC8qKlxuICAgKiBTdG9yZXMgaW5pdGlhbGl6ZWQgcGx1Z2lucy5cbiAgICovXG4gIF9wbHVnaW5zOiB7fSxcblxuICAvKipcbiAgICogU3RvcmVzIGdlbmVyYXRlZCB1bmlxdWUgaWRzIGZvciBwbHVnaW4gaW5zdGFuY2VzXG4gICAqL1xuICBfdXVpZHM6IFtdLFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBmb3IgUlRMIHN1cHBvcnRcbiAgICovXG4gIHJ0bDogZnVuY3Rpb24oKXtcbiAgICByZXR1cm4gJCgnaHRtbCcpLmF0dHIoJ2RpcicpID09PSAncnRsJztcbiAgfSxcbiAgLyoqXG4gICAqIERlZmluZXMgYSBGb3VuZGF0aW9uIHBsdWdpbiwgYWRkaW5nIGl0IHRvIHRoZSBgRm91bmRhdGlvbmAgbmFtZXNwYWNlIGFuZCB0aGUgbGlzdCBvZiBwbHVnaW5zIHRvIGluaXRpYWxpemUgd2hlbiByZWZsb3dpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwbHVnaW4gLSBUaGUgY29uc3RydWN0b3Igb2YgdGhlIHBsdWdpbi5cbiAgICovXG4gIHBsdWdpbjogZnVuY3Rpb24ocGx1Z2luLCBuYW1lKSB7XG4gICAgLy8gT2JqZWN0IGtleSB0byB1c2Ugd2hlbiBhZGRpbmcgdG8gZ2xvYmFsIEZvdW5kYXRpb24gb2JqZWN0XG4gICAgLy8gRXhhbXBsZXM6IEZvdW5kYXRpb24uUmV2ZWFsLCBGb3VuZGF0aW9uLk9mZkNhbnZhc1xuICAgIHZhciBjbGFzc05hbWUgPSAobmFtZSB8fCBmdW5jdGlvbk5hbWUocGx1Z2luKSk7XG4gICAgLy8gT2JqZWN0IGtleSB0byB1c2Ugd2hlbiBzdG9yaW5nIHRoZSBwbHVnaW4sIGFsc28gdXNlZCB0byBjcmVhdGUgdGhlIGlkZW50aWZ5aW5nIGRhdGEgYXR0cmlidXRlIGZvciB0aGUgcGx1Z2luXG4gICAgLy8gRXhhbXBsZXM6IGRhdGEtcmV2ZWFsLCBkYXRhLW9mZi1jYW52YXNcbiAgICB2YXIgYXR0ck5hbWUgID0gaHlwaGVuYXRlKGNsYXNzTmFtZSk7XG5cbiAgICAvLyBBZGQgdG8gdGhlIEZvdW5kYXRpb24gb2JqZWN0IGFuZCB0aGUgcGx1Z2lucyBsaXN0IChmb3IgcmVmbG93aW5nKVxuICAgIHRoaXMuX3BsdWdpbnNbYXR0ck5hbWVdID0gdGhpc1tjbGFzc05hbWVdID0gcGx1Z2luO1xuICB9LFxuICAvKipcbiAgICogQGZ1bmN0aW9uXG4gICAqIFBvcHVsYXRlcyB0aGUgX3V1aWRzIGFycmF5IHdpdGggcG9pbnRlcnMgdG8gZWFjaCBpbmRpdmlkdWFsIHBsdWdpbiBpbnN0YW5jZS5cbiAgICogQWRkcyB0aGUgYHpmUGx1Z2luYCBkYXRhLWF0dHJpYnV0ZSB0byBwcm9ncmFtbWF0aWNhbGx5IGNyZWF0ZWQgcGx1Z2lucyB0byBhbGxvdyB1c2Ugb2YgJChzZWxlY3RvcikuZm91bmRhdGlvbihtZXRob2QpIGNhbGxzLlxuICAgKiBBbHNvIGZpcmVzIHRoZSBpbml0aWFsaXphdGlvbiBldmVudCBmb3IgZWFjaCBwbHVnaW4sIGNvbnNvbGlkYXRpbmcgcmVwZWRpdGl2ZSBjb2RlLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGx1Z2luIC0gYW4gaW5zdGFuY2Ugb2YgYSBwbHVnaW4sIHVzdWFsbHkgYHRoaXNgIGluIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHBsdWdpbiwgcGFzc2VkIGFzIGEgY2FtZWxDYXNlZCBzdHJpbmcuXG4gICAqIEBmaXJlcyBQbHVnaW4jaW5pdFxuICAgKi9cbiAgcmVnaXN0ZXJQbHVnaW46IGZ1bmN0aW9uKHBsdWdpbiwgbmFtZSl7XG4gICAgdmFyIHBsdWdpbk5hbWUgPSBuYW1lID8gaHlwaGVuYXRlKG5hbWUpIDogZnVuY3Rpb25OYW1lKHBsdWdpbi5jb25zdHJ1Y3RvcikudG9Mb3dlckNhc2UoKTtcbiAgICBwbHVnaW4udXVpZCA9IHRoaXMuR2V0WW9EaWdpdHMoNiwgcGx1Z2luTmFtZSk7XG5cbiAgICBpZighcGx1Z2luLiRlbGVtZW50LmF0dHIoYGRhdGEtJHtwbHVnaW5OYW1lfWApKXsgcGx1Z2luLiRlbGVtZW50LmF0dHIoYGRhdGEtJHtwbHVnaW5OYW1lfWAsIHBsdWdpbi51dWlkKTsgfVxuICAgIGlmKCFwbHVnaW4uJGVsZW1lbnQuZGF0YSgnemZQbHVnaW4nKSl7IHBsdWdpbi4kZWxlbWVudC5kYXRhKCd6ZlBsdWdpbicsIHBsdWdpbik7IH1cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBwbHVnaW4gaGFzIGluaXRpYWxpemVkLlxuICAgICAgICAgICAqIEBldmVudCBQbHVnaW4jaW5pdFxuICAgICAgICAgICAqL1xuICAgIHBsdWdpbi4kZWxlbWVudC50cmlnZ2VyKGBpbml0LnpmLiR7cGx1Z2luTmFtZX1gKTtcblxuICAgIHRoaXMuX3V1aWRzLnB1c2gocGx1Z2luLnV1aWQpO1xuXG4gICAgcmV0dXJuO1xuICB9LFxuICAvKipcbiAgICogQGZ1bmN0aW9uXG4gICAqIFJlbW92ZXMgdGhlIHBsdWdpbnMgdXVpZCBmcm9tIHRoZSBfdXVpZHMgYXJyYXkuXG4gICAqIFJlbW92ZXMgdGhlIHpmUGx1Z2luIGRhdGEgYXR0cmlidXRlLCBhcyB3ZWxsIGFzIHRoZSBkYXRhLXBsdWdpbi1uYW1lIGF0dHJpYnV0ZS5cbiAgICogQWxzbyBmaXJlcyB0aGUgZGVzdHJveWVkIGV2ZW50IGZvciB0aGUgcGx1Z2luLCBjb25zb2xpZGF0aW5nIHJlcGVkaXRpdmUgY29kZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHBsdWdpbiAtIGFuIGluc3RhbmNlIG9mIGEgcGx1Z2luLCB1c3VhbGx5IGB0aGlzYCBpbiBjb250ZXh0LlxuICAgKiBAZmlyZXMgUGx1Z2luI2Rlc3Ryb3llZFxuICAgKi9cbiAgdW5yZWdpc3RlclBsdWdpbjogZnVuY3Rpb24ocGx1Z2luKXtcbiAgICB2YXIgcGx1Z2luTmFtZSA9IGh5cGhlbmF0ZShmdW5jdGlvbk5hbWUocGx1Z2luLiRlbGVtZW50LmRhdGEoJ3pmUGx1Z2luJykuY29uc3RydWN0b3IpKTtcblxuICAgIHRoaXMuX3V1aWRzLnNwbGljZSh0aGlzLl91dWlkcy5pbmRleE9mKHBsdWdpbi51dWlkKSwgMSk7XG4gICAgcGx1Z2luLiRlbGVtZW50LnJlbW92ZUF0dHIoYGRhdGEtJHtwbHVnaW5OYW1lfWApLnJlbW92ZURhdGEoJ3pmUGx1Z2luJylcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBwbHVnaW4gaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgICAgICAgICAqIEBldmVudCBQbHVnaW4jZGVzdHJveWVkXG4gICAgICAgICAgICovXG4gICAgICAgICAgLnRyaWdnZXIoYGRlc3Ryb3llZC56Zi4ke3BsdWdpbk5hbWV9YCk7XG4gICAgZm9yKHZhciBwcm9wIGluIHBsdWdpbil7XG4gICAgICBwbHVnaW5bcHJvcF0gPSBudWxsOy8vY2xlYW4gdXAgc2NyaXB0IHRvIHByZXAgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAZnVuY3Rpb25cbiAgICogQ2F1c2VzIG9uZSBvciBtb3JlIGFjdGl2ZSBwbHVnaW5zIHRvIHJlLWluaXRpYWxpemUsIHJlc2V0dGluZyBldmVudCBsaXN0ZW5lcnMsIHJlY2FsY3VsYXRpbmcgcG9zaXRpb25zLCBldGMuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5zIC0gb3B0aW9uYWwgc3RyaW5nIG9mIGFuIGluZGl2aWR1YWwgcGx1Z2luIGtleSwgYXR0YWluZWQgYnkgY2FsbGluZyBgJChlbGVtZW50KS5kYXRhKCdwbHVnaW5OYW1lJylgLCBvciBzdHJpbmcgb2YgYSBwbHVnaW4gY2xhc3MgaS5lLiBgJ2Ryb3Bkb3duJ2BcbiAgICogQGRlZmF1bHQgSWYgbm8gYXJndW1lbnQgaXMgcGFzc2VkLCByZWZsb3cgYWxsIGN1cnJlbnRseSBhY3RpdmUgcGx1Z2lucy5cbiAgICovXG4gICByZUluaXQ6IGZ1bmN0aW9uKHBsdWdpbnMpe1xuICAgICB2YXIgaXNKUSA9IHBsdWdpbnMgaW5zdGFuY2VvZiAkO1xuICAgICB0cnl7XG4gICAgICAgaWYoaXNKUSl7XG4gICAgICAgICBwbHVnaW5zLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgICAgJCh0aGlzKS5kYXRhKCd6ZlBsdWdpbicpLl9pbml0KCk7XG4gICAgICAgICB9KTtcbiAgICAgICB9ZWxzZXtcbiAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHBsdWdpbnMsXG4gICAgICAgICBfdGhpcyA9IHRoaXMsXG4gICAgICAgICBmbnMgPSB7XG4gICAgICAgICAgICdvYmplY3QnOiBmdW5jdGlvbihwbGdzKXtcbiAgICAgICAgICAgICBwbGdzLmZvckVhY2goZnVuY3Rpb24ocCl7XG4gICAgICAgICAgICAgICBwID0gaHlwaGVuYXRlKHApO1xuICAgICAgICAgICAgICAgJCgnW2RhdGEtJysgcCArJ10nKS5mb3VuZGF0aW9uKCdfaW5pdCcpO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICB9LFxuICAgICAgICAgICAnc3RyaW5nJzogZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICBwbHVnaW5zID0gaHlwaGVuYXRlKHBsdWdpbnMpO1xuICAgICAgICAgICAgICQoJ1tkYXRhLScrIHBsdWdpbnMgKyddJykuZm91bmRhdGlvbignX2luaXQnKTtcbiAgICAgICAgICAgfSxcbiAgICAgICAgICAgJ3VuZGVmaW5lZCc6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgdGhpc1snb2JqZWN0J10oT2JqZWN0LmtleXMoX3RoaXMuX3BsdWdpbnMpKTtcbiAgICAgICAgICAgfVxuICAgICAgICAgfTtcbiAgICAgICAgIGZuc1t0eXBlXShwbHVnaW5zKTtcbiAgICAgICB9XG4gICAgIH1jYXRjaChlcnIpe1xuICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgfWZpbmFsbHl7XG4gICAgICAgcmV0dXJuIHBsdWdpbnM7XG4gICAgIH1cbiAgIH0sXG5cbiAgLyoqXG4gICAqIHJldHVybnMgYSByYW5kb20gYmFzZS0zNiB1aWQgd2l0aCBuYW1lc3BhY2luZ1xuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aCAtIG51bWJlciBvZiByYW5kb20gYmFzZS0zNiBkaWdpdHMgZGVzaXJlZC4gSW5jcmVhc2UgZm9yIG1vcmUgcmFuZG9tIHN0cmluZ3MuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgLSBuYW1lIG9mIHBsdWdpbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW4gdWlkLCBvcHRpb25hbC5cbiAgICogQGRlZmF1bHQge1N0cmluZ30gJycgLSBpZiBubyBwbHVnaW4gbmFtZSBpcyBwcm92aWRlZCwgbm90aGluZyBpcyBhcHBlbmRlZCB0byB0aGUgdWlkLlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSAtIHVuaXF1ZSBpZFxuICAgKi9cbiAgR2V0WW9EaWdpdHM6IGZ1bmN0aW9uKGxlbmd0aCwgbmFtZXNwYWNlKXtcbiAgICBsZW5ndGggPSBsZW5ndGggfHwgNjtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgoTWF0aC5wb3coMzYsIGxlbmd0aCArIDEpIC0gTWF0aC5yYW5kb20oKSAqIE1hdGgucG93KDM2LCBsZW5ndGgpKSkudG9TdHJpbmcoMzYpLnNsaWNlKDEpICsgKG5hbWVzcGFjZSA/IGAtJHtuYW1lc3BhY2V9YCA6ICcnKTtcbiAgfSxcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgcGx1Z2lucyBvbiBhbnkgZWxlbWVudHMgd2l0aGluIGBlbGVtYCAoYW5kIGBlbGVtYCBpdHNlbGYpIHRoYXQgYXJlbid0IGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtIC0galF1ZXJ5IG9iamVjdCBjb250YWluaW5nIHRoZSBlbGVtZW50IHRvIGNoZWNrIGluc2lkZS4gQWxzbyBjaGVja3MgdGhlIGVsZW1lbnQgaXRzZWxmLCB1bmxlc3MgaXQncyB0aGUgYGRvY3VtZW50YCBvYmplY3QuXG4gICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBwbHVnaW5zIC0gQSBsaXN0IG9mIHBsdWdpbnMgdG8gaW5pdGlhbGl6ZS4gTGVhdmUgdGhpcyBvdXQgdG8gaW5pdGlhbGl6ZSBldmVyeXRoaW5nLlxuICAgKi9cbiAgcmVmbG93OiBmdW5jdGlvbihlbGVtLCBwbHVnaW5zKSB7XG5cbiAgICAvLyBJZiBwbHVnaW5zIGlzIHVuZGVmaW5lZCwganVzdCBncmFiIGV2ZXJ5dGhpbmdcbiAgICBpZiAodHlwZW9mIHBsdWdpbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwbHVnaW5zID0gT2JqZWN0LmtleXModGhpcy5fcGx1Z2lucyk7XG4gICAgfVxuICAgIC8vIElmIHBsdWdpbnMgaXMgYSBzdHJpbmcsIGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBvbmUgaXRlbVxuICAgIGVsc2UgaWYgKHR5cGVvZiBwbHVnaW5zID09PSAnc3RyaW5nJykge1xuICAgICAgcGx1Z2lucyA9IFtwbHVnaW5zXTtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggcGx1Z2luXG4gICAgJC5lYWNoKHBsdWdpbnMsIGZ1bmN0aW9uKGksIG5hbWUpIHtcbiAgICAgIC8vIEdldCB0aGUgY3VycmVudCBwbHVnaW5cbiAgICAgIHZhciBwbHVnaW4gPSBfdGhpcy5fcGx1Z2luc1tuYW1lXTtcblxuICAgICAgLy8gTG9jYWxpemUgdGhlIHNlYXJjaCB0byBhbGwgZWxlbWVudHMgaW5zaWRlIGVsZW0sIGFzIHdlbGwgYXMgZWxlbSBpdHNlbGYsIHVubGVzcyBlbGVtID09PSBkb2N1bWVudFxuICAgICAgdmFyICRlbGVtID0gJChlbGVtKS5maW5kKCdbZGF0YS0nK25hbWUrJ10nKS5hZGRCYWNrKCdbZGF0YS0nK25hbWUrJ10nKTtcblxuICAgICAgLy8gRm9yIGVhY2ggcGx1Z2luIGZvdW5kLCBpbml0aWFsaXplIGl0XG4gICAgICAkZWxlbS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJGVsID0gJCh0aGlzKSxcbiAgICAgICAgICAgIG9wdHMgPSB7fTtcbiAgICAgICAgLy8gRG9uJ3QgZG91YmxlLWRpcCBvbiBwbHVnaW5zXG4gICAgICAgIGlmICgkZWwuZGF0YSgnemZQbHVnaW4nKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIlRyaWVkIHRvIGluaXRpYWxpemUgXCIrbmFtZStcIiBvbiBhbiBlbGVtZW50IHRoYXQgYWxyZWFkeSBoYXMgYSBGb3VuZGF0aW9uIHBsdWdpbi5cIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoJGVsLmF0dHIoJ2RhdGEtb3B0aW9ucycpKXtcbiAgICAgICAgICB2YXIgdGhpbmcgPSAkZWwuYXR0cignZGF0YS1vcHRpb25zJykuc3BsaXQoJzsnKS5mb3JFYWNoKGZ1bmN0aW9uKGUsIGkpe1xuICAgICAgICAgICAgdmFyIG9wdCA9IGUuc3BsaXQoJzonKS5tYXAoZnVuY3Rpb24oZWwpeyByZXR1cm4gZWwudHJpbSgpOyB9KTtcbiAgICAgICAgICAgIGlmKG9wdFswXSkgb3B0c1tvcHRbMF1dID0gcGFyc2VWYWx1ZShvcHRbMV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAkZWwuZGF0YSgnemZQbHVnaW4nLCBuZXcgcGx1Z2luKCQodGhpcyksIG9wdHMpKTtcbiAgICAgICAgfWNhdGNoKGVyKXtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyKTtcbiAgICAgICAgfWZpbmFsbHl7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSxcbiAgZ2V0Rm5OYW1lOiBmdW5jdGlvbk5hbWUsXG4gIHRyYW5zaXRpb25lbmQ6IGZ1bmN0aW9uKCRlbGVtKXtcbiAgICB2YXIgdHJhbnNpdGlvbnMgPSB7XG4gICAgICAndHJhbnNpdGlvbic6ICd0cmFuc2l0aW9uZW5kJyxcbiAgICAgICdXZWJraXRUcmFuc2l0aW9uJzogJ3dlYmtpdFRyYW5zaXRpb25FbmQnLFxuICAgICAgJ01velRyYW5zaXRpb24nOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgICAnT1RyYW5zaXRpb24nOiAnb3RyYW5zaXRpb25lbmQnXG4gICAgfTtcbiAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuICAgICAgICBlbmQ7XG5cbiAgICBmb3IgKHZhciB0IGluIHRyYW5zaXRpb25zKXtcbiAgICAgIGlmICh0eXBlb2YgZWxlbS5zdHlsZVt0XSAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICBlbmQgPSB0cmFuc2l0aW9uc1t0XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoZW5kKXtcbiAgICAgIHJldHVybiBlbmQ7XG4gICAgfWVsc2V7XG4gICAgICBlbmQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICRlbGVtLnRyaWdnZXJIYW5kbGVyKCd0cmFuc2l0aW9uZW5kJywgWyRlbGVtXSk7XG4gICAgICB9LCAxKTtcbiAgICAgIHJldHVybiAndHJhbnNpdGlvbmVuZCc7XG4gICAgfVxuICB9XG59O1xuXG5Gb3VuZGF0aW9uLnV0aWwgPSB7XG4gIC8qKlxuICAgKiBGdW5jdGlvbiBmb3IgYXBwbHlpbmcgYSBkZWJvdW5jZSBlZmZlY3QgdG8gYSBmdW5jdGlvbiBjYWxsLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCBlbmQgb2YgdGltZW91dC5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGRlbGF5IC0gVGltZSBpbiBtcyB0byBkZWxheSB0aGUgY2FsbCBvZiBgZnVuY2AuXG4gICAqIEByZXR1cm5zIGZ1bmN0aW9uXG4gICAqL1xuICB0aHJvdHRsZTogZnVuY3Rpb24gKGZ1bmMsIGRlbGF5KSB7XG4gICAgdmFyIHRpbWVyID0gbnVsbDtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgICAgIGlmICh0aW1lciA9PT0gbnVsbCkge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxuLy8gVE9ETzogY29uc2lkZXIgbm90IG1ha2luZyB0aGlzIGEgalF1ZXJ5IGZ1bmN0aW9uXG4vLyBUT0RPOiBuZWVkIHdheSB0byByZWZsb3cgdnMuIHJlLWluaXRpYWxpemVcbi8qKlxuICogVGhlIEZvdW5kYXRpb24galF1ZXJ5IG1ldGhvZC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBtZXRob2QgLSBBbiBhY3Rpb24gdG8gcGVyZm9ybSBvbiB0aGUgY3VycmVudCBqUXVlcnkgb2JqZWN0LlxuICovXG52YXIgZm91bmRhdGlvbiA9IGZ1bmN0aW9uKG1ldGhvZCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBtZXRob2QsXG4gICAgICAkbWV0YSA9ICQoJ21ldGEuZm91bmRhdGlvbi1tcScpLFxuICAgICAgJG5vSlMgPSAkKCcubm8tanMnKTtcblxuICBpZighJG1ldGEubGVuZ3RoKXtcbiAgICAkKCc8bWV0YSBjbGFzcz1cImZvdW5kYXRpb24tbXFcIj4nKS5hcHBlbmRUbyhkb2N1bWVudC5oZWFkKTtcbiAgfVxuICBpZigkbm9KUy5sZW5ndGgpe1xuICAgICRub0pTLnJlbW92ZUNsYXNzKCduby1qcycpO1xuICB9XG5cbiAgaWYodHlwZSA9PT0gJ3VuZGVmaW5lZCcpey8vbmVlZHMgdG8gaW5pdGlhbGl6ZSB0aGUgRm91bmRhdGlvbiBvYmplY3QsIG9yIGFuIGluZGl2aWR1YWwgcGx1Z2luLlxuICAgIEZvdW5kYXRpb24uTWVkaWFRdWVyeS5faW5pdCgpO1xuICAgIEZvdW5kYXRpb24ucmVmbG93KHRoaXMpO1xuICB9ZWxzZSBpZih0eXBlID09PSAnc3RyaW5nJyl7Ly9hbiBpbmRpdmlkdWFsIG1ldGhvZCB0byBpbnZva2Ugb24gYSBwbHVnaW4gb3IgZ3JvdXAgb2YgcGx1Z2luc1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsvL2NvbGxlY3QgYWxsIHRoZSBhcmd1bWVudHMsIGlmIG5lY2Vzc2FyeVxuICAgIHZhciBwbHVnQ2xhc3MgPSB0aGlzLmRhdGEoJ3pmUGx1Z2luJyk7Ly9kZXRlcm1pbmUgdGhlIGNsYXNzIG9mIHBsdWdpblxuXG4gICAgaWYocGx1Z0NsYXNzICE9PSB1bmRlZmluZWQgJiYgcGx1Z0NsYXNzW21ldGhvZF0gIT09IHVuZGVmaW5lZCl7Ly9tYWtlIHN1cmUgYm90aCB0aGUgY2xhc3MgYW5kIG1ldGhvZCBleGlzdFxuICAgICAgaWYodGhpcy5sZW5ndGggPT09IDEpey8vaWYgdGhlcmUncyBvbmx5IG9uZSwgY2FsbCBpdCBkaXJlY3RseS5cbiAgICAgICAgICBwbHVnQ2xhc3NbbWV0aG9kXS5hcHBseShwbHVnQ2xhc3MsIGFyZ3MpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbihpLCBlbCl7Ly9vdGhlcndpc2UgbG9vcCB0aHJvdWdoIHRoZSBqUXVlcnkgY29sbGVjdGlvbiBhbmQgaW52b2tlIHRoZSBtZXRob2Qgb24gZWFjaFxuICAgICAgICAgIHBsdWdDbGFzc1ttZXRob2RdLmFwcGx5KCQoZWwpLmRhdGEoJ3pmUGx1Z2luJyksIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9ZWxzZXsvL2Vycm9yIGZvciBubyBjbGFzcyBvciBubyBtZXRob2RcbiAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcIldlJ3JlIHNvcnJ5LCAnXCIgKyBtZXRob2QgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBtZXRob2QgZm9yIFwiICsgKHBsdWdDbGFzcyA/IGZ1bmN0aW9uTmFtZShwbHVnQ2xhc3MpIDogJ3RoaXMgZWxlbWVudCcpICsgJy4nKTtcbiAgICB9XG4gIH1lbHNley8vZXJyb3IgZm9yIGludmFsaWQgYXJndW1lbnQgdHlwZVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFdlJ3JlIHNvcnJ5LCAke3R5cGV9IGlzIG5vdCBhIHZhbGlkIHBhcmFtZXRlci4gWW91IG11c3QgdXNlIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbWV0aG9kIHlvdSB3aXNoIHRvIGludm9rZS5gKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbndpbmRvdy5Gb3VuZGF0aW9uID0gRm91bmRhdGlvbjtcbiQuZm4uZm91bmRhdGlvbiA9IGZvdW5kYXRpb247XG5cbi8vIFBvbHlmaWxsIGZvciByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbihmdW5jdGlvbigpIHtcbiAgaWYgKCFEYXRlLm5vdyB8fCAhd2luZG93LkRhdGUubm93KVxuICAgIHdpbmRvdy5EYXRlLm5vdyA9IERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsgfTtcblxuICB2YXIgdmVuZG9ycyA9IFsnd2Via2l0JywgJ21veiddO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvcnMubGVuZ3RoICYmICF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK2kpIHtcbiAgICAgIHZhciB2cCA9IHZlbmRvcnNbaV07XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93W3ZwKydSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9ICh3aW5kb3dbdnArJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHdpbmRvd1t2cCsnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10pO1xuICB9XG4gIGlmICgvaVAoYWR8aG9uZXxvZCkuKk9TIDYvLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpXG4gICAgfHwgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgIXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIHZhciBsYXN0VGltZSA9IDA7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICB2YXIgbmV4dFRpbWUgPSBNYXRoLm1heChsYXN0VGltZSArIDE2LCBub3cpO1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2sobGFzdFRpbWUgPSBuZXh0VGltZSk7IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUaW1lIC0gbm93KTtcbiAgICB9O1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGNsZWFyVGltZW91dDtcbiAgfVxuICAvKipcbiAgICogUG9seWZpbGwgZm9yIHBlcmZvcm1hbmNlLm5vdywgcmVxdWlyZWQgYnkgckFGXG4gICAqL1xuICBpZighd2luZG93LnBlcmZvcm1hbmNlIHx8ICF3aW5kb3cucGVyZm9ybWFuY2Uubm93KXtcbiAgICB3aW5kb3cucGVyZm9ybWFuY2UgPSB7XG4gICAgICBzdGFydDogRGF0ZS5ub3coKSxcbiAgICAgIG5vdzogZnVuY3Rpb24oKXsgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLnN0YXJ0OyB9XG4gICAgfTtcbiAgfVxufSkoKTtcbmlmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHtcbiAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihvVGhpcykge1xuICAgIGlmICh0eXBlb2YgdGhpcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gY2xvc2VzdCB0aGluZyBwb3NzaWJsZSB0byB0aGUgRUNNQVNjcmlwdCA1XG4gICAgICAvLyBpbnRlcm5hbCBJc0NhbGxhYmxlIGZ1bmN0aW9uXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAtIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGJvdW5kIGlzIG5vdCBjYWxsYWJsZScpO1xuICAgIH1cblxuICAgIHZhciBhQXJncyAgID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcbiAgICAgICAgZlRvQmluZCA9IHRoaXMsXG4gICAgICAgIGZOT1AgICAgPSBmdW5jdGlvbigpIHt9LFxuICAgICAgICBmQm91bmQgID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGZUb0JpbmQuYXBwbHkodGhpcyBpbnN0YW5jZW9mIGZOT1BcbiAgICAgICAgICAgICAgICAgPyB0aGlzXG4gICAgICAgICAgICAgICAgIDogb1RoaXMsXG4gICAgICAgICAgICAgICAgIGFBcmdzLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgICAgIH07XG5cbiAgICBpZiAodGhpcy5wcm90b3R5cGUpIHtcbiAgICAgIC8vIG5hdGl2ZSBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSBhIHByb3RvdHlwZVxuICAgICAgZk5PUC5wcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcbiAgICB9XG4gICAgZkJvdW5kLnByb3RvdHlwZSA9IG5ldyBmTk9QKCk7XG5cbiAgICByZXR1cm4gZkJvdW5kO1xuICB9O1xufVxuLy8gUG9seWZpbGwgdG8gZ2V0IHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gSUU5XG5mdW5jdGlvbiBmdW5jdGlvbk5hbWUoZm4pIHtcbiAgaWYgKEZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZnVuY05hbWVSZWdleCA9IC9mdW5jdGlvblxccyhbXihdezEsfSlcXCgvO1xuICAgIHZhciByZXN1bHRzID0gKGZ1bmNOYW1lUmVnZXgpLmV4ZWMoKGZuKS50b1N0cmluZygpKTtcbiAgICByZXR1cm4gKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAxKSA/IHJlc3VsdHNbMV0udHJpbSgpIDogXCJcIjtcbiAgfVxuICBlbHNlIGlmIChmbi5wcm90b3R5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmbi5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiBmbi5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxufVxuZnVuY3Rpb24gcGFyc2VWYWx1ZShzdHIpe1xuICBpZigvdHJ1ZS8udGVzdChzdHIpKSByZXR1cm4gdHJ1ZTtcbiAgZWxzZSBpZigvZmFsc2UvLnRlc3Qoc3RyKSkgcmV0dXJuIGZhbHNlO1xuICBlbHNlIGlmKCFpc05hTihzdHIgKiAxKSkgcmV0dXJuIHBhcnNlRmxvYXQoc3RyKTtcbiAgcmV0dXJuIHN0cjtcbn1cbi8vIENvbnZlcnQgUGFzY2FsQ2FzZSB0byBrZWJhYi1jYXNlXG4vLyBUaGFuayB5b3U6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg5NTU1ODBcbmZ1bmN0aW9uIGh5cGhlbmF0ZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpO1xufVxuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbkZvdW5kYXRpb24uQm94ID0ge1xuICBJbU5vdFRvdWNoaW5nWW91OiBJbU5vdFRvdWNoaW5nWW91LFxuICBHZXREaW1lbnNpb25zOiBHZXREaW1lbnNpb25zLFxuICBHZXRPZmZzZXRzOiBHZXRPZmZzZXRzXG59XG5cbi8qKlxuICogQ29tcGFyZXMgdGhlIGRpbWVuc2lvbnMgb2YgYW4gZWxlbWVudCB0byBhIGNvbnRhaW5lciBhbmQgZGV0ZXJtaW5lcyBjb2xsaXNpb24gZXZlbnRzIHdpdGggY29udGFpbmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gdGVzdCBmb3IgY29sbGlzaW9ucy5cbiAqIEBwYXJhbSB7alF1ZXJ5fSBwYXJlbnQgLSBqUXVlcnkgb2JqZWN0IHRvIHVzZSBhcyBib3VuZGluZyBjb250YWluZXIuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGxyT25seSAtIHNldCB0byB0cnVlIHRvIGNoZWNrIGxlZnQgYW5kIHJpZ2h0IHZhbHVlcyBvbmx5LlxuICogQHBhcmFtIHtCb29sZWFufSB0Yk9ubHkgLSBzZXQgdG8gdHJ1ZSB0byBjaGVjayB0b3AgYW5kIGJvdHRvbSB2YWx1ZXMgb25seS5cbiAqIEBkZWZhdWx0IGlmIG5vIHBhcmVudCBvYmplY3QgcGFzc2VkLCBkZXRlY3RzIGNvbGxpc2lvbnMgd2l0aCBgd2luZG93YC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSAtIHRydWUgaWYgY29sbGlzaW9uIGZyZWUsIGZhbHNlIGlmIGEgY29sbGlzaW9uIGluIGFueSBkaXJlY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIEltTm90VG91Y2hpbmdZb3UoZWxlbWVudCwgcGFyZW50LCBsck9ubHksIHRiT25seSkge1xuICB2YXIgZWxlRGltcyA9IEdldERpbWVuc2lvbnMoZWxlbWVudCksXG4gICAgICB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQ7XG5cbiAgaWYgKHBhcmVudCkge1xuICAgIHZhciBwYXJEaW1zID0gR2V0RGltZW5zaW9ucyhwYXJlbnQpO1xuXG4gICAgYm90dG9tID0gKGVsZURpbXMub2Zmc2V0LnRvcCArIGVsZURpbXMuaGVpZ2h0IDw9IHBhckRpbXMuaGVpZ2h0ICsgcGFyRGltcy5vZmZzZXQudG9wKTtcbiAgICB0b3AgICAgPSAoZWxlRGltcy5vZmZzZXQudG9wID49IHBhckRpbXMub2Zmc2V0LnRvcCk7XG4gICAgbGVmdCAgID0gKGVsZURpbXMub2Zmc2V0LmxlZnQgPj0gcGFyRGltcy5vZmZzZXQubGVmdCk7XG4gICAgcmlnaHQgID0gKGVsZURpbXMub2Zmc2V0LmxlZnQgKyBlbGVEaW1zLndpZHRoIDw9IHBhckRpbXMud2lkdGgpO1xuICB9XG4gIGVsc2Uge1xuICAgIGJvdHRvbSA9IChlbGVEaW1zLm9mZnNldC50b3AgKyBlbGVEaW1zLmhlaWdodCA8PSBlbGVEaW1zLndpbmRvd0RpbXMuaGVpZ2h0ICsgZWxlRGltcy53aW5kb3dEaW1zLm9mZnNldC50b3ApO1xuICAgIHRvcCAgICA9IChlbGVEaW1zLm9mZnNldC50b3AgPj0gZWxlRGltcy53aW5kb3dEaW1zLm9mZnNldC50b3ApO1xuICAgIGxlZnQgICA9IChlbGVEaW1zLm9mZnNldC5sZWZ0ID49IGVsZURpbXMud2luZG93RGltcy5vZmZzZXQubGVmdCk7XG4gICAgcmlnaHQgID0gKGVsZURpbXMub2Zmc2V0LmxlZnQgKyBlbGVEaW1zLndpZHRoIDw9IGVsZURpbXMud2luZG93RGltcy53aWR0aCk7XG4gIH1cblxuICB2YXIgYWxsRGlycyA9IFtib3R0b20sIHRvcCwgbGVmdCwgcmlnaHRdO1xuXG4gIGlmIChsck9ubHkpIHtcbiAgICByZXR1cm4gbGVmdCA9PT0gcmlnaHQgPT09IHRydWU7XG4gIH1cblxuICBpZiAodGJPbmx5KSB7XG4gICAgcmV0dXJuIHRvcCA9PT0gYm90dG9tID09PSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGFsbERpcnMuaW5kZXhPZihmYWxzZSkgPT09IC0xO1xufTtcblxuLyoqXG4gKiBVc2VzIG5hdGl2ZSBtZXRob2RzIHRvIHJldHVybiBhbiBvYmplY3Qgb2YgZGltZW5zaW9uIHZhbHVlcy5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtqUXVlcnkgfHwgSFRNTH0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3Qgb3IgRE9NIGVsZW1lbnQgZm9yIHdoaWNoIHRvIGdldCB0aGUgZGltZW5zaW9ucy4gQ2FuIGJlIGFueSBlbGVtZW50IG90aGVyIHRoYXQgZG9jdW1lbnQgb3Igd2luZG93LlxuICogQHJldHVybnMge09iamVjdH0gLSBuZXN0ZWQgb2JqZWN0IG9mIGludGVnZXIgcGl4ZWwgdmFsdWVzXG4gKiBUT0RPIC0gaWYgZWxlbWVudCBpcyB3aW5kb3csIHJldHVybiBvbmx5IHRob3NlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gR2V0RGltZW5zaW9ucyhlbGVtLCB0ZXN0KXtcbiAgZWxlbSA9IGVsZW0ubGVuZ3RoID8gZWxlbVswXSA6IGVsZW07XG5cbiAgaWYgKGVsZW0gPT09IHdpbmRvdyB8fCBlbGVtID09PSBkb2N1bWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkknbSBzb3JyeSwgRGF2ZS4gSSdtIGFmcmFpZCBJIGNhbid0IGRvIHRoYXQuXCIpO1xuICB9XG5cbiAgdmFyIHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgcGFyUmVjdCA9IGVsZW0ucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHdpblJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgd2luWSA9IHdpbmRvdy5wYWdlWU9mZnNldCxcbiAgICAgIHdpblggPSB3aW5kb3cucGFnZVhPZmZzZXQ7XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgIG9mZnNldDoge1xuICAgICAgdG9wOiByZWN0LnRvcCArIHdpblksXG4gICAgICBsZWZ0OiByZWN0LmxlZnQgKyB3aW5YXG4gICAgfSxcbiAgICBwYXJlbnREaW1zOiB7XG4gICAgICB3aWR0aDogcGFyUmVjdC53aWR0aCxcbiAgICAgIGhlaWdodDogcGFyUmVjdC5oZWlnaHQsXG4gICAgICBvZmZzZXQ6IHtcbiAgICAgICAgdG9wOiBwYXJSZWN0LnRvcCArIHdpblksXG4gICAgICAgIGxlZnQ6IHBhclJlY3QubGVmdCArIHdpblhcbiAgICAgIH1cbiAgICB9LFxuICAgIHdpbmRvd0RpbXM6IHtcbiAgICAgIHdpZHRoOiB3aW5SZWN0LndpZHRoLFxuICAgICAgaGVpZ2h0OiB3aW5SZWN0LmhlaWdodCxcbiAgICAgIG9mZnNldDoge1xuICAgICAgICB0b3A6IHdpblksXG4gICAgICAgIGxlZnQ6IHdpblhcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCBvZiB0b3AgYW5kIGxlZnQgaW50ZWdlciBwaXhlbCB2YWx1ZXMgZm9yIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGVsZW1lbnRzLFxuICogc3VjaCBhczogVG9vbHRpcCwgUmV2ZWFsLCBhbmQgRHJvcGRvd25cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgZWxlbWVudCBiZWluZyBwb3NpdGlvbmVkLlxuICogQHBhcmFtIHtqUXVlcnl9IGFuY2hvciAtIGpRdWVyeSBvYmplY3QgZm9yIHRoZSBlbGVtZW50J3MgYW5jaG9yIHBvaW50LlxuICogQHBhcmFtIHtTdHJpbmd9IHBvc2l0aW9uIC0gYSBzdHJpbmcgcmVsYXRpbmcgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQsIHJlbGF0aXZlIHRvIGl0J3MgYW5jaG9yXG4gKiBAcGFyYW0ge051bWJlcn0gdk9mZnNldCAtIGludGVnZXIgcGl4ZWwgdmFsdWUgb2YgZGVzaXJlZCB2ZXJ0aWNhbCBzZXBhcmF0aW9uIGJldHdlZW4gYW5jaG9yIGFuZCBlbGVtZW50LlxuICogQHBhcmFtIHtOdW1iZXJ9IGhPZmZzZXQgLSBpbnRlZ2VyIHBpeGVsIHZhbHVlIG9mIGRlc2lyZWQgaG9yaXpvbnRhbCBzZXBhcmF0aW9uIGJldHdlZW4gYW5jaG9yIGFuZCBlbGVtZW50LlxuICogQHBhcmFtIHtCb29sZWFufSBpc092ZXJmbG93IC0gaWYgYSBjb2xsaXNpb24gZXZlbnQgaXMgZGV0ZWN0ZWQsIHNldHMgdG8gdHJ1ZSB0byBkZWZhdWx0IHRoZSBlbGVtZW50IHRvIGZ1bGwgd2lkdGggLSBhbnkgZGVzaXJlZCBvZmZzZXQuXG4gKiBUT0RPIGFsdGVyL3Jld3JpdGUgdG8gd29yayB3aXRoIGBlbWAgdmFsdWVzIGFzIHdlbGwvaW5zdGVhZCBvZiBwaXhlbHNcbiAqL1xuZnVuY3Rpb24gR2V0T2Zmc2V0cyhlbGVtZW50LCBhbmNob3IsIHBvc2l0aW9uLCB2T2Zmc2V0LCBoT2Zmc2V0LCBpc092ZXJmbG93KSB7XG4gIHZhciAkZWxlRGltcyA9IEdldERpbWVuc2lvbnMoZWxlbWVudCksXG4gICAgICAkYW5jaG9yRGltcyA9IGFuY2hvciA/IEdldERpbWVuc2lvbnMoYW5jaG9yKSA6IG51bGw7XG5cbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAoRm91bmRhdGlvbi5ydGwoKSA/ICRhbmNob3JEaW1zLm9mZnNldC5sZWZ0IC0gJGVsZURpbXMud2lkdGggKyAkYW5jaG9yRGltcy53aWR0aCA6ICRhbmNob3JEaW1zLm9mZnNldC5sZWZ0KSxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wIC0gKCRlbGVEaW1zLmhlaWdodCArIHZPZmZzZXQpXG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6ICRhbmNob3JEaW1zLm9mZnNldC5sZWZ0IC0gKCRlbGVEaW1zLndpZHRoICsgaE9mZnNldCksXG4gICAgICAgIHRvcDogJGFuY2hvckRpbXMub2Zmc2V0LnRvcFxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgKyAkYW5jaG9yRGltcy53aWR0aCArIGhPZmZzZXQsXG4gICAgICAgIHRvcDogJGFuY2hvckRpbXMub2Zmc2V0LnRvcFxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2VudGVyIHRvcCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAoJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgKyAoJGFuY2hvckRpbXMud2lkdGggLyAyKSkgLSAoJGVsZURpbXMud2lkdGggLyAyKSxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wIC0gKCRlbGVEaW1zLmhlaWdodCArIHZPZmZzZXQpXG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjZW50ZXIgYm90dG9tJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGlzT3ZlcmZsb3cgPyBoT2Zmc2V0IDogKCgkYW5jaG9yRGltcy5vZmZzZXQubGVmdCArICgkYW5jaG9yRGltcy53aWR0aCAvIDIpKSAtICgkZWxlRGltcy53aWR0aCAvIDIpKSxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wICsgJGFuY2hvckRpbXMuaGVpZ2h0ICsgdk9mZnNldFxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2VudGVyIGxlZnQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgLSAoJGVsZURpbXMud2lkdGggKyBoT2Zmc2V0KSxcbiAgICAgICAgdG9wOiAoJGFuY2hvckRpbXMub2Zmc2V0LnRvcCArICgkYW5jaG9yRGltcy5oZWlnaHQgLyAyKSkgLSAoJGVsZURpbXMuaGVpZ2h0IC8gMilcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NlbnRlciByaWdodCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAkYW5jaG9yRGltcy5vZmZzZXQubGVmdCArICRhbmNob3JEaW1zLndpZHRoICsgaE9mZnNldCArIDEsXG4gICAgICAgIHRvcDogKCRhbmNob3JEaW1zLm9mZnNldC50b3AgKyAoJGFuY2hvckRpbXMuaGVpZ2h0IC8gMikpIC0gKCRlbGVEaW1zLmhlaWdodCAvIDIpXG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogKCRlbGVEaW1zLndpbmRvd0RpbXMub2Zmc2V0LmxlZnQgKyAoJGVsZURpbXMud2luZG93RGltcy53aWR0aCAvIDIpKSAtICgkZWxlRGltcy53aWR0aCAvIDIpLFxuICAgICAgICB0b3A6ICgkZWxlRGltcy53aW5kb3dEaW1zLm9mZnNldC50b3AgKyAoJGVsZURpbXMud2luZG93RGltcy5oZWlnaHQgLyAyKSkgLSAoJGVsZURpbXMuaGVpZ2h0IC8gMilcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JldmVhbCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAoJGVsZURpbXMud2luZG93RGltcy53aWR0aCAtICRlbGVEaW1zLndpZHRoKSAvIDIsXG4gICAgICAgIHRvcDogJGVsZURpbXMud2luZG93RGltcy5vZmZzZXQudG9wICsgdk9mZnNldFxuICAgICAgfVxuICAgIGNhc2UgJ3JldmVhbCBmdWxsJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6ICRlbGVEaW1zLndpbmRvd0RpbXMub2Zmc2V0LmxlZnQsXG4gICAgICAgIHRvcDogJGVsZURpbXMud2luZG93RGltcy5vZmZzZXQudG9wXG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0IGJvdHRvbSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAkYW5jaG9yRGltcy5vZmZzZXQubGVmdCAtICgkZWxlRGltcy53aWR0aCArIGhPZmZzZXQpLFxuICAgICAgICB0b3A6ICRhbmNob3JEaW1zLm9mZnNldC50b3AgKyAkYW5jaG9yRGltcy5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCBib3R0b20nOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgKyAkYW5jaG9yRGltcy53aWR0aCArIGhPZmZzZXQgLSAkZWxlRGltcy53aWR0aCxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wICsgJGFuY2hvckRpbXMuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IChGb3VuZGF0aW9uLnJ0bCgpID8gJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgLSAkZWxlRGltcy53aWR0aCArICRhbmNob3JEaW1zLndpZHRoIDogJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQpLFxuICAgICAgICB0b3A6ICRhbmNob3JEaW1zLm9mZnNldC50b3AgKyAkYW5jaG9yRGltcy5oZWlnaHQgKyB2T2Zmc2V0XG4gICAgICB9XG4gIH1cbn1cblxufShqUXVlcnkpO1xuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKiBUaGlzIHV0aWwgd2FzIGNyZWF0ZWQgYnkgTWFyaXVzIE9sYmVydHogKlxuICogUGxlYXNlIHRoYW5rIE1hcml1cyBvbiBHaXRIdWIgL293bGJlcnR6ICpcbiAqIG9yIHRoZSB3ZWIgaHR0cDovL3d3dy5tYXJpdXNvbGJlcnR6LmRlLyAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG5jb25zdCBrZXlDb2RlcyA9IHtcbiAgOTogJ1RBQicsXG4gIDEzOiAnRU5URVInLFxuICAyNzogJ0VTQ0FQRScsXG4gIDMyOiAnU1BBQ0UnLFxuICAzNzogJ0FSUk9XX0xFRlQnLFxuICAzODogJ0FSUk9XX1VQJyxcbiAgMzk6ICdBUlJPV19SSUdIVCcsXG4gIDQwOiAnQVJST1dfRE9XTidcbn1cblxudmFyIGNvbW1hbmRzID0ge31cblxudmFyIEtleWJvYXJkID0ge1xuICBrZXlzOiBnZXRLZXlDb2RlcyhrZXlDb2RlcyksXG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgKGtleWJvYXJkKSBldmVudCBhbmQgcmV0dXJucyBhIFN0cmluZyB0aGF0IHJlcHJlc2VudHMgaXRzIGtleVxuICAgKiBDYW4gYmUgdXNlZCBsaWtlIEZvdW5kYXRpb24ucGFyc2VLZXkoZXZlbnQpID09PSBGb3VuZGF0aW9uLmtleXMuU1BBQ0VcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSB0aGUgZXZlbnQgZ2VuZXJhdGVkIGJ5IHRoZSBldmVudCBoYW5kbGVyXG4gICAqIEByZXR1cm4gU3RyaW5nIGtleSAtIFN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGtleSBwcmVzc2VkXG4gICAqL1xuICBwYXJzZUtleShldmVudCkge1xuICAgIHZhciBrZXkgPSBrZXlDb2Rlc1tldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXSB8fCBTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LndoaWNoKS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmIChldmVudC5zaGlmdEtleSkga2V5ID0gYFNISUZUXyR7a2V5fWA7XG4gICAgaWYgKGV2ZW50LmN0cmxLZXkpIGtleSA9IGBDVFJMXyR7a2V5fWA7XG4gICAgaWYgKGV2ZW50LmFsdEtleSkga2V5ID0gYEFMVF8ke2tleX1gO1xuICAgIHJldHVybiBrZXk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGdpdmVuIChrZXlib2FyZCkgZXZlbnRcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSB0aGUgZXZlbnQgZ2VuZXJhdGVkIGJ5IHRoZSBldmVudCBoYW5kbGVyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb21wb25lbnQgLSBGb3VuZGF0aW9uIGNvbXBvbmVudCdzIG5hbWUsIGUuZy4gU2xpZGVyIG9yIFJldmVhbFxuICAgKiBAcGFyYW0ge09iamVjdHN9IGZ1bmN0aW9ucyAtIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb25zIHRoYXQgYXJlIHRvIGJlIGV4ZWN1dGVkXG4gICAqL1xuICBoYW5kbGVLZXkoZXZlbnQsIGNvbXBvbmVudCwgZnVuY3Rpb25zKSB7XG4gICAgdmFyIGNvbW1hbmRMaXN0ID0gY29tbWFuZHNbY29tcG9uZW50XSxcbiAgICAgIGtleUNvZGUgPSB0aGlzLnBhcnNlS2V5KGV2ZW50KSxcbiAgICAgIGNtZHMsXG4gICAgICBjb21tYW5kLFxuICAgICAgZm47XG5cbiAgICBpZiAoIWNvbW1hbmRMaXN0KSByZXR1cm4gY29uc29sZS53YXJuKCdDb21wb25lbnQgbm90IGRlZmluZWQhJyk7XG5cbiAgICBpZiAodHlwZW9mIGNvbW1hbmRMaXN0Lmx0ciA9PT0gJ3VuZGVmaW5lZCcpIHsgLy8gdGhpcyBjb21wb25lbnQgZG9lcyBub3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGx0ciBhbmQgcnRsXG4gICAgICAgIGNtZHMgPSBjb21tYW5kTGlzdDsgLy8gdXNlIHBsYWluIGxpc3RcbiAgICB9IGVsc2UgeyAvLyBtZXJnZSBsdHIgYW5kIHJ0bDogaWYgZG9jdW1lbnQgaXMgcnRsLCBydGwgb3ZlcndyaXRlcyBsdHIgYW5kIHZpY2UgdmVyc2FcbiAgICAgICAgaWYgKEZvdW5kYXRpb24ucnRsKCkpIGNtZHMgPSAkLmV4dGVuZCh7fSwgY29tbWFuZExpc3QubHRyLCBjb21tYW5kTGlzdC5ydGwpO1xuXG4gICAgICAgIGVsc2UgY21kcyA9ICQuZXh0ZW5kKHt9LCBjb21tYW5kTGlzdC5ydGwsIGNvbW1hbmRMaXN0Lmx0cik7XG4gICAgfVxuICAgIGNvbW1hbmQgPSBjbWRzW2tleUNvZGVdO1xuXG4gICAgZm4gPSBmdW5jdGlvbnNbY29tbWFuZF07XG4gICAgaWYgKGZuICYmIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGZ1bmN0aW9uICBpZiBleGlzdHNcbiAgICAgIGZuLmFwcGx5KCk7XG4gICAgICBpZiAoZnVuY3Rpb25zLmhhbmRsZWQgfHwgdHlwZW9mIGZ1bmN0aW9ucy5oYW5kbGVkID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgZnVuY3Rpb24gd2hlbiBldmVudCB3YXMgaGFuZGxlZFxuICAgICAgICAgIGZ1bmN0aW9ucy5oYW5kbGVkLmFwcGx5KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmdW5jdGlvbnMudW5oYW5kbGVkIHx8IHR5cGVvZiBmdW5jdGlvbnMudW5oYW5kbGVkID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgZnVuY3Rpb24gd2hlbiBldmVudCB3YXMgbm90IGhhbmRsZWRcbiAgICAgICAgICBmdW5jdGlvbnMudW5oYW5kbGVkLmFwcGx5KCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbGwgZm9jdXNhYmxlIGVsZW1lbnRzIHdpdGhpbiB0aGUgZ2l2ZW4gYCRlbGVtZW50YFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIHNlYXJjaCB3aXRoaW5cbiAgICogQHJldHVybiB7alF1ZXJ5fSAkZm9jdXNhYmxlIC0gYWxsIGZvY3VzYWJsZSBlbGVtZW50cyB3aXRoaW4gYCRlbGVtZW50YFxuICAgKi9cbiAgZmluZEZvY3VzYWJsZSgkZWxlbWVudCkge1xuICAgIHJldHVybiAkZWxlbWVudC5maW5kKCdhW2hyZWZdLCBhcmVhW2hyZWZdLCBpbnB1dDpub3QoW2Rpc2FibGVkXSksIHNlbGVjdDpub3QoW2Rpc2FibGVkXSksIHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSwgYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgaWZyYW1lLCBvYmplY3QsIGVtYmVkLCAqW3RhYmluZGV4XSwgKltjb250ZW50ZWRpdGFibGVdJykuZmlsdGVyKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCEkKHRoaXMpLmlzKCc6dmlzaWJsZScpIHx8ICQodGhpcykuYXR0cigndGFiaW5kZXgnKSA8IDApIHsgcmV0dXJuIGZhbHNlOyB9IC8vb25seSBoYXZlIHZpc2libGUgZWxlbWVudHMgYW5kIHRob3NlIHRoYXQgaGF2ZSBhIHRhYmluZGV4IGdyZWF0ZXIgb3IgZXF1YWwgMFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbXBvbmVudCBuYW1lIG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbXBvbmVudCAtIEZvdW5kYXRpb24gY29tcG9uZW50LCBlLmcuIFNsaWRlciBvciBSZXZlYWxcbiAgICogQHJldHVybiBTdHJpbmcgY29tcG9uZW50TmFtZVxuICAgKi9cblxuICByZWdpc3Rlcihjb21wb25lbnROYW1lLCBjbWRzKSB7XG4gICAgY29tbWFuZHNbY29tcG9uZW50TmFtZV0gPSBjbWRzO1xuICB9XG59XG5cbi8qXG4gKiBDb25zdGFudHMgZm9yIGVhc2llciBjb21wYXJpbmcuXG4gKiBDYW4gYmUgdXNlZCBsaWtlIEZvdW5kYXRpb24ucGFyc2VLZXkoZXZlbnQpID09PSBGb3VuZGF0aW9uLmtleXMuU1BBQ0VcbiAqL1xuZnVuY3Rpb24gZ2V0S2V5Q29kZXMoa2NzKSB7XG4gIHZhciBrID0ge307XG4gIGZvciAodmFyIGtjIGluIGtjcykga1trY3Nba2NdXSA9IGtjc1trY107XG4gIHJldHVybiBrO1xufVxuXG5Gb3VuZGF0aW9uLktleWJvYXJkID0gS2V5Ym9hcmQ7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLy8gRGVmYXVsdCBzZXQgb2YgbWVkaWEgcXVlcmllc1xuY29uc3QgZGVmYXVsdFF1ZXJpZXMgPSB7XG4gICdkZWZhdWx0JyA6ICdvbmx5IHNjcmVlbicsXG4gIGxhbmRzY2FwZSA6ICdvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpJyxcbiAgcG9ydHJhaXQgOiAnb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpJyxcbiAgcmV0aW5hIDogJ29ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwnICtcbiAgICAnb25seSBzY3JlZW4gYW5kIChtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCcgK1xuICAgICdvbmx5IHNjcmVlbiBhbmQgKC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIvMSksJyArXG4gICAgJ29ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS1waXhlbC1yYXRpbzogMiksJyArXG4gICAgJ29ubHkgc2NyZWVuIGFuZCAobWluLXJlc29sdXRpb246IDE5MmRwaSksJyArXG4gICAgJ29ubHkgc2NyZWVuIGFuZCAobWluLXJlc29sdXRpb246IDJkcHB4KSdcbn07XG5cbnZhciBNZWRpYVF1ZXJ5ID0ge1xuICBxdWVyaWVzOiBbXSxcblxuICBjdXJyZW50OiAnJyxcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIG1lZGlhIHF1ZXJ5IGhlbHBlciwgYnkgZXh0cmFjdGluZyB0aGUgYnJlYWtwb2ludCBsaXN0IGZyb20gdGhlIENTUyBhbmQgYWN0aXZhdGluZyB0aGUgYnJlYWtwb2ludCB3YXRjaGVyLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZXh0cmFjdGVkU3R5bGVzID0gJCgnLmZvdW5kYXRpb24tbXEnKS5jc3MoJ2ZvbnQtZmFtaWx5Jyk7XG4gICAgdmFyIG5hbWVkUXVlcmllcztcblxuICAgIG5hbWVkUXVlcmllcyA9IHBhcnNlU3R5bGVUb09iamVjdChleHRyYWN0ZWRTdHlsZXMpO1xuXG4gICAgZm9yICh2YXIga2V5IGluIG5hbWVkUXVlcmllcykge1xuICAgICAgc2VsZi5xdWVyaWVzLnB1c2goe1xuICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgIHZhbHVlOiBgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICR7bmFtZWRRdWVyaWVzW2tleV19KWBcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuX2dldEN1cnJlbnRTaXplKCk7XG5cbiAgICB0aGlzLl93YXRjaGVyKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgc2NyZWVuIGlzIGF0IGxlYXN0IGFzIHdpZGUgYXMgYSBicmVha3BvaW50LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHNpemUgLSBOYW1lIG9mIHRoZSBicmVha3BvaW50IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBicmVha3BvaW50IG1hdGNoZXMsIGBmYWxzZWAgaWYgaXQncyBzbWFsbGVyLlxuICAgKi9cbiAgYXRMZWFzdChzaXplKSB7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5nZXQoc2l6ZSk7XG5cbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShxdWVyeSkubWF0Y2hlcztcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1lZGlhIHF1ZXJ5IG9mIGEgYnJlYWtwb2ludC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzaXplIC0gTmFtZSBvZiB0aGUgYnJlYWtwb2ludCB0byBnZXQuXG4gICAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH0gLSBUaGUgbWVkaWEgcXVlcnkgb2YgdGhlIGJyZWFrcG9pbnQsIG9yIGBudWxsYCBpZiB0aGUgYnJlYWtwb2ludCBkb2Vzbid0IGV4aXN0LlxuICAgKi9cbiAgZ2V0KHNpemUpIHtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMucXVlcmllcykge1xuICAgICAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyaWVzW2ldO1xuICAgICAgaWYgKHNpemUgPT09IHF1ZXJ5Lm5hbWUpIHJldHVybiBxdWVyeS52YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBicmVha3BvaW50IG5hbWUgYnkgdGVzdGluZyBldmVyeSBicmVha3BvaW50IGFuZCByZXR1cm5pbmcgdGhlIGxhc3Qgb25lIHRvIG1hdGNoICh0aGUgYmlnZ2VzdCBvbmUpLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge1N0cmluZ30gTmFtZSBvZiB0aGUgY3VycmVudCBicmVha3BvaW50LlxuICAgKi9cbiAgX2dldEN1cnJlbnRTaXplKCkge1xuICAgIHZhciBtYXRjaGVkO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcmllc1tpXTtcblxuICAgICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5LnZhbHVlKS5tYXRjaGVzKSB7XG4gICAgICAgIG1hdGNoZWQgPSBxdWVyeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1hdGNoZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZC5uYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZDtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlcyB0aGUgYnJlYWtwb2ludCB3YXRjaGVyLCB3aGljaCBmaXJlcyBhbiBldmVudCBvbiB0aGUgd2luZG93IHdoZW5ldmVyIHRoZSBicmVha3BvaW50IGNoYW5nZXMuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3dhdGNoZXIoKSB7XG4gICAgJCh3aW5kb3cpLm9uKCdyZXNpemUuemYubWVkaWFxdWVyeScsICgpID0+IHtcbiAgICAgIHZhciBuZXdTaXplID0gdGhpcy5fZ2V0Q3VycmVudFNpemUoKTtcblxuICAgICAgaWYgKG5ld1NpemUgIT09IHRoaXMuY3VycmVudCkge1xuICAgICAgICAvLyBCcm9hZGNhc3QgdGhlIG1lZGlhIHF1ZXJ5IGNoYW5nZSBvbiB0aGUgd2luZG93XG4gICAgICAgICQod2luZG93KS50cmlnZ2VyKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCBbbmV3U2l6ZSwgdGhpcy5jdXJyZW50XSk7XG5cbiAgICAgICAgLy8gQ2hhbmdlIHRoZSBjdXJyZW50IG1lZGlhIHF1ZXJ5XG4gICAgICAgIHRoaXMuY3VycmVudCA9IG5ld1NpemU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbkZvdW5kYXRpb24uTWVkaWFRdWVyeSA9IE1lZGlhUXVlcnk7XG5cbi8vIG1hdGNoTWVkaWEoKSBwb2x5ZmlsbCAtIFRlc3QgYSBDU1MgbWVkaWEgdHlwZS9xdWVyeSBpbiBKUy5cbi8vIEF1dGhvcnMgJiBjb3B5cmlnaHQgKGMpIDIwMTI6IFNjb3R0IEplaGwsIFBhdWwgSXJpc2gsIE5pY2hvbGFzIFpha2FzLCBEYXZpZCBLbmlnaHQuIER1YWwgTUlUL0JTRCBsaWNlbnNlXG53aW5kb3cubWF0Y2hNZWRpYSB8fCAod2luZG93Lm1hdGNoTWVkaWEgPSBmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIEZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgbWF0Y2hNZWRpdW0gYXBpIHN1Y2ggYXMgSUUgOSBhbmQgd2Via2l0XG4gIHZhciBzdHlsZU1lZGlhID0gKHdpbmRvdy5zdHlsZU1lZGlhIHx8IHdpbmRvdy5tZWRpYSk7XG5cbiAgLy8gRm9yIHRob3NlIHRoYXQgZG9uJ3Qgc3VwcG9ydCBtYXRjaE1lZGl1bVxuICBpZiAoIXN0eWxlTWVkaWEpIHtcbiAgICB2YXIgc3R5bGUgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG4gICAgc2NyaXB0ICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF0sXG4gICAgaW5mbyAgICAgICAgPSBudWxsO1xuXG4gICAgc3R5bGUudHlwZSAgPSAndGV4dC9jc3MnO1xuICAgIHN0eWxlLmlkICAgID0gJ21hdGNobWVkaWFqcy10ZXN0JztcblxuICAgIHNjcmlwdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzdHlsZSwgc2NyaXB0KTtcblxuICAgIC8vICdzdHlsZS5jdXJyZW50U3R5bGUnIGlzIHVzZWQgYnkgSUUgPD0gOCBhbmQgJ3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlJyBmb3IgYWxsIG90aGVyIGJyb3dzZXJzXG4gICAgaW5mbyA9ICgnZ2V0Q29tcHV0ZWRTdHlsZScgaW4gd2luZG93KSAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdHlsZSwgbnVsbCkgfHwgc3R5bGUuY3VycmVudFN0eWxlO1xuXG4gICAgc3R5bGVNZWRpYSA9IHtcbiAgICAgIG1hdGNoTWVkaXVtKG1lZGlhKSB7XG4gICAgICAgIHZhciB0ZXh0ID0gYEBtZWRpYSAke21lZGlhfXsgI21hdGNobWVkaWFqcy10ZXN0IHsgd2lkdGg6IDFweDsgfSB9YDtcblxuICAgICAgICAvLyAnc3R5bGUuc3R5bGVTaGVldCcgaXMgdXNlZCBieSBJRSA8PSA4IGFuZCAnc3R5bGUudGV4dENvbnRlbnQnIGZvciBhbGwgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICAgICAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSB0ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gdGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRlc3QgaWYgbWVkaWEgcXVlcnkgaXMgdHJ1ZSBvciBmYWxzZVxuICAgICAgICByZXR1cm4gaW5mby53aWR0aCA9PT0gJzFweCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG1lZGlhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoZXM6IHN0eWxlTWVkaWEubWF0Y2hNZWRpdW0obWVkaWEgfHwgJ2FsbCcpLFxuICAgICAgbWVkaWE6IG1lZGlhIHx8ICdhbGwnXG4gICAgfTtcbiAgfVxufSgpKTtcblxuLy8gVGhhbmsgeW91OiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3F1ZXJ5LXN0cmluZ1xuZnVuY3Rpb24gcGFyc2VTdHlsZVRvT2JqZWN0KHN0cikge1xuICB2YXIgc3R5bGVPYmplY3QgPSB7fTtcblxuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3R5bGVPYmplY3Q7XG4gIH1cblxuICBzdHIgPSBzdHIudHJpbSgpLnNsaWNlKDEsIC0xKTsgLy8gYnJvd3NlcnMgcmUtcXVvdGUgc3RyaW5nIHN0eWxlIHZhbHVlc1xuXG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIHN0eWxlT2JqZWN0O1xuICB9XG5cbiAgc3R5bGVPYmplY3QgPSBzdHIuc3BsaXQoJyYnKS5yZWR1Y2UoZnVuY3Rpb24ocmV0LCBwYXJhbSkge1xuICAgIHZhciBwYXJ0cyA9IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCAnICcpLnNwbGl0KCc9Jyk7XG4gICAgdmFyIGtleSA9IHBhcnRzWzBdO1xuICAgIHZhciB2YWwgPSBwYXJ0c1sxXTtcbiAgICBrZXkgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5KTtcblxuICAgIC8vIG1pc3NpbmcgYD1gIHNob3VsZCBiZSBgbnVsbGA6XG4gICAgLy8gaHR0cDovL3czLm9yZy9UUi8yMDEyL1dELXVybC0yMDEyMDUyNC8jY29sbGVjdC11cmwtcGFyYW1ldGVyc1xuICAgIHZhbCA9IHZhbCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlY29kZVVSSUNvbXBvbmVudCh2YWwpO1xuXG4gICAgaWYgKCFyZXQuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgcmV0W2tleV0gPSB2YWw7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJldFtrZXldKSkge1xuICAgICAgcmV0W2tleV0ucHVzaCh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IFtyZXRba2V5XSwgdmFsXTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSwge30pO1xuXG4gIHJldHVybiBzdHlsZU9iamVjdDtcbn1cblxuRm91bmRhdGlvbi5NZWRpYVF1ZXJ5ID0gTWVkaWFRdWVyeTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIE1vdGlvbiBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24ubW90aW9uXG4gKi9cblxuY29uc3QgaW5pdENsYXNzZXMgICA9IFsnbXVpLWVudGVyJywgJ211aS1sZWF2ZSddO1xuY29uc3QgYWN0aXZlQ2xhc3NlcyA9IFsnbXVpLWVudGVyLWFjdGl2ZScsICdtdWktbGVhdmUtYWN0aXZlJ107XG5cbmNvbnN0IE1vdGlvbiA9IHtcbiAgYW5pbWF0ZUluOiBmdW5jdGlvbihlbGVtZW50LCBhbmltYXRpb24sIGNiKSB7XG4gICAgYW5pbWF0ZSh0cnVlLCBlbGVtZW50LCBhbmltYXRpb24sIGNiKTtcbiAgfSxcblxuICBhbmltYXRlT3V0OiBmdW5jdGlvbihlbGVtZW50LCBhbmltYXRpb24sIGNiKSB7XG4gICAgYW5pbWF0ZShmYWxzZSwgZWxlbWVudCwgYW5pbWF0aW9uLCBjYik7XG4gIH1cbn1cblxuZnVuY3Rpb24gTW92ZShkdXJhdGlvbiwgZWxlbSwgZm4pe1xuICB2YXIgYW5pbSwgcHJvZywgc3RhcnQgPSBudWxsO1xuICAvLyBjb25zb2xlLmxvZygnY2FsbGVkJyk7XG5cbiAgZnVuY3Rpb24gbW92ZSh0cyl7XG4gICAgaWYoIXN0YXJ0KSBzdGFydCA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBjb25zb2xlLmxvZyhzdGFydCwgdHMpO1xuICAgIHByb2cgPSB0cyAtIHN0YXJ0O1xuICAgIGZuLmFwcGx5KGVsZW0pO1xuXG4gICAgaWYocHJvZyA8IGR1cmF0aW9uKXsgYW5pbSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobW92ZSwgZWxlbSk7IH1cbiAgICBlbHNle1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW0pO1xuICAgICAgZWxlbS50cmlnZ2VyKCdmaW5pc2hlZC56Zi5hbmltYXRlJywgW2VsZW1dKS50cmlnZ2VySGFuZGxlcignZmluaXNoZWQuemYuYW5pbWF0ZScsIFtlbGVtXSk7XG4gICAgfVxuICB9XG4gIGFuaW0gPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG1vdmUpO1xufVxuXG4vKipcbiAqIEFuaW1hdGVzIGFuIGVsZW1lbnQgaW4gb3Igb3V0IHVzaW5nIGEgQ1NTIHRyYW5zaXRpb24gY2xhc3MuXG4gKiBAZnVuY3Rpb25cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGlzSW4gLSBEZWZpbmVzIGlmIHRoZSBhbmltYXRpb24gaXMgaW4gb3Igb3V0LlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb3IgSFRNTCBvYmplY3QgdG8gYW5pbWF0ZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBhbmltYXRpb24gLSBDU1MgY2xhc3MgdG8gdXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBDYWxsYmFjayB0byBydW4gd2hlbiBhbmltYXRpb24gaXMgZmluaXNoZWQuXG4gKi9cbmZ1bmN0aW9uIGFuaW1hdGUoaXNJbiwgZWxlbWVudCwgYW5pbWF0aW9uLCBjYikge1xuICBlbGVtZW50ID0gJChlbGVtZW50KS5lcSgwKTtcblxuICBpZiAoIWVsZW1lbnQubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGluaXRDbGFzcyA9IGlzSW4gPyBpbml0Q2xhc3Nlc1swXSA6IGluaXRDbGFzc2VzWzFdO1xuICB2YXIgYWN0aXZlQ2xhc3MgPSBpc0luID8gYWN0aXZlQ2xhc3Nlc1swXSA6IGFjdGl2ZUNsYXNzZXNbMV07XG5cbiAgLy8gU2V0IHVwIHRoZSBhbmltYXRpb25cbiAgcmVzZXQoKTtcblxuICBlbGVtZW50XG4gICAgLmFkZENsYXNzKGFuaW1hdGlvbilcbiAgICAuY3NzKCd0cmFuc2l0aW9uJywgJ25vbmUnKTtcblxuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgIGVsZW1lbnQuYWRkQ2xhc3MoaW5pdENsYXNzKTtcbiAgICBpZiAoaXNJbikgZWxlbWVudC5zaG93KCk7XG4gIH0pO1xuXG4gIC8vIFN0YXJ0IHRoZSBhbmltYXRpb25cbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICBlbGVtZW50WzBdLm9mZnNldFdpZHRoO1xuICAgIGVsZW1lbnRcbiAgICAgIC5jc3MoJ3RyYW5zaXRpb24nLCAnJylcbiAgICAgIC5hZGRDbGFzcyhhY3RpdmVDbGFzcyk7XG4gIH0pO1xuXG4gIC8vIENsZWFuIHVwIHRoZSBhbmltYXRpb24gd2hlbiBpdCBmaW5pc2hlc1xuICBlbGVtZW50Lm9uZShGb3VuZGF0aW9uLnRyYW5zaXRpb25lbmQoZWxlbWVudCksIGZpbmlzaCk7XG5cbiAgLy8gSGlkZXMgdGhlIGVsZW1lbnQgKGZvciBvdXQgYW5pbWF0aW9ucyksIHJlc2V0cyB0aGUgZWxlbWVudCwgYW5kIHJ1bnMgYSBjYWxsYmFja1xuICBmdW5jdGlvbiBmaW5pc2goKSB7XG4gICAgaWYgKCFpc0luKSBlbGVtZW50LmhpZGUoKTtcbiAgICByZXNldCgpO1xuICAgIGlmIChjYikgY2IuYXBwbHkoZWxlbWVudCk7XG4gIH1cblxuICAvLyBSZXNldHMgdHJhbnNpdGlvbnMgYW5kIHJlbW92ZXMgbW90aW9uLXNwZWNpZmljIGNsYXNzZXNcbiAgZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgZWxlbWVudFswXS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSAwO1xuICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoYCR7aW5pdENsYXNzfSAke2FjdGl2ZUNsYXNzfSAke2FuaW1hdGlvbn1gKTtcbiAgfVxufVxuXG5Gb3VuZGF0aW9uLk1vdmUgPSBNb3ZlO1xuRm91bmRhdGlvbi5Nb3Rpb24gPSBNb3Rpb247XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuY29uc3QgTmVzdCA9IHtcbiAgRmVhdGhlcihtZW51LCB0eXBlID0gJ3pmJykge1xuICAgIG1lbnUuYXR0cigncm9sZScsICdtZW51YmFyJyk7XG5cbiAgICB2YXIgaXRlbXMgPSBtZW51LmZpbmQoJ2xpJykuYXR0cih7J3JvbGUnOiAnbWVudWl0ZW0nfSksXG4gICAgICAgIHN1Yk1lbnVDbGFzcyA9IGBpcy0ke3R5cGV9LXN1Ym1lbnVgLFxuICAgICAgICBzdWJJdGVtQ2xhc3MgPSBgJHtzdWJNZW51Q2xhc3N9LWl0ZW1gLFxuICAgICAgICBoYXNTdWJDbGFzcyA9IGBpcy0ke3R5cGV9LXN1Ym1lbnUtcGFyZW50YDtcblxuICAgIG1lbnUuZmluZCgnYTpmaXJzdCcpLmF0dHIoJ3RhYmluZGV4JywgMCk7XG5cbiAgICBpdGVtcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyICRpdGVtID0gJCh0aGlzKSxcbiAgICAgICAgICAkc3ViID0gJGl0ZW0uY2hpbGRyZW4oJ3VsJyk7XG5cbiAgICAgIGlmICgkc3ViLmxlbmd0aCkge1xuICAgICAgICAkaXRlbVxuICAgICAgICAgIC5hZGRDbGFzcyhoYXNTdWJDbGFzcylcbiAgICAgICAgICAuYXR0cih7XG4gICAgICAgICAgICAnYXJpYS1oYXNwb3B1cCc6IHRydWUsXG4gICAgICAgICAgICAnYXJpYS1leHBhbmRlZCc6IGZhbHNlLFxuICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiAkaXRlbS5jaGlsZHJlbignYTpmaXJzdCcpLnRleHQoKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICRzdWJcbiAgICAgICAgICAuYWRkQ2xhc3MoYHN1Ym1lbnUgJHtzdWJNZW51Q2xhc3N9YClcbiAgICAgICAgICAuYXR0cih7XG4gICAgICAgICAgICAnZGF0YS1zdWJtZW51JzogJycsXG4gICAgICAgICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlLFxuICAgICAgICAgICAgJ3JvbGUnOiAnbWVudSdcbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCRpdGVtLnBhcmVudCgnW2RhdGEtc3VibWVudV0nKS5sZW5ndGgpIHtcbiAgICAgICAgJGl0ZW0uYWRkQ2xhc3MoYGlzLXN1Ym1lbnUtaXRlbSAke3N1Ykl0ZW1DbGFzc31gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybjtcbiAgfSxcblxuICBCdXJuKG1lbnUsIHR5cGUpIHtcbiAgICB2YXIgaXRlbXMgPSBtZW51LmZpbmQoJ2xpJykucmVtb3ZlQXR0cigndGFiaW5kZXgnKSxcbiAgICAgICAgc3ViTWVudUNsYXNzID0gYGlzLSR7dHlwZX0tc3VibWVudWAsXG4gICAgICAgIHN1Ykl0ZW1DbGFzcyA9IGAke3N1Yk1lbnVDbGFzc30taXRlbWAsXG4gICAgICAgIGhhc1N1YkNsYXNzID0gYGlzLSR7dHlwZX0tc3VibWVudS1wYXJlbnRgO1xuXG4gICAgbWVudVxuICAgICAgLmZpbmQoJyonKVxuICAgICAgLnJlbW92ZUNsYXNzKGAke3N1Yk1lbnVDbGFzc30gJHtzdWJJdGVtQ2xhc3N9ICR7aGFzU3ViQ2xhc3N9IGlzLXN1Ym1lbnUtaXRlbSBzdWJtZW51IGlzLWFjdGl2ZWApXG4gICAgICAucmVtb3ZlQXR0cignZGF0YS1zdWJtZW51JykuY3NzKCdkaXNwbGF5JywgJycpO1xuXG4gICAgLy8gY29uc29sZS5sb2coICAgICAgbWVudS5maW5kKCcuJyArIHN1Yk1lbnVDbGFzcyArICcsIC4nICsgc3ViSXRlbUNsYXNzICsgJywgLmhhcy1zdWJtZW51LCAuaXMtc3VibWVudS1pdGVtLCAuc3VibWVudSwgW2RhdGEtc3VibWVudV0nKVxuICAgIC8vICAgICAgICAgICAucmVtb3ZlQ2xhc3Moc3ViTWVudUNsYXNzICsgJyAnICsgc3ViSXRlbUNsYXNzICsgJyBoYXMtc3VibWVudSBpcy1zdWJtZW51LWl0ZW0gc3VibWVudScpXG4gICAgLy8gICAgICAgICAgIC5yZW1vdmVBdHRyKCdkYXRhLXN1Ym1lbnUnKSk7XG4gICAgLy8gaXRlbXMuZWFjaChmdW5jdGlvbigpe1xuICAgIC8vICAgdmFyICRpdGVtID0gJCh0aGlzKSxcbiAgICAvLyAgICAgICAkc3ViID0gJGl0ZW0uY2hpbGRyZW4oJ3VsJyk7XG4gICAgLy8gICBpZigkaXRlbS5wYXJlbnQoJ1tkYXRhLXN1Ym1lbnVdJykubGVuZ3RoKXtcbiAgICAvLyAgICAgJGl0ZW0ucmVtb3ZlQ2xhc3MoJ2lzLXN1Ym1lbnUtaXRlbSAnICsgc3ViSXRlbUNsYXNzKTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIGlmKCRzdWIubGVuZ3RoKXtcbiAgICAvLyAgICAgJGl0ZW0ucmVtb3ZlQ2xhc3MoJ2hhcy1zdWJtZW51Jyk7XG4gICAgLy8gICAgICRzdWIucmVtb3ZlQ2xhc3MoJ3N1Ym1lbnUgJyArIHN1Yk1lbnVDbGFzcykucmVtb3ZlQXR0cignZGF0YS1zdWJtZW51Jyk7XG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG4gIH1cbn1cblxuRm91bmRhdGlvbi5OZXN0ID0gTmVzdDtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG5mdW5jdGlvbiBUaW1lcihlbGVtLCBvcHRpb25zLCBjYikge1xuICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgZHVyYXRpb24gPSBvcHRpb25zLmR1cmF0aW9uLC8vb3B0aW9ucyBpcyBhbiBvYmplY3QgZm9yIGVhc2lseSBhZGRpbmcgZmVhdHVyZXMgbGF0ZXIuXG4gICAgICBuYW1lU3BhY2UgPSBPYmplY3Qua2V5cyhlbGVtLmRhdGEoKSlbMF0gfHwgJ3RpbWVyJyxcbiAgICAgIHJlbWFpbiA9IC0xLFxuICAgICAgc3RhcnQsXG4gICAgICB0aW1lcjtcblxuICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG5cbiAgdGhpcy5yZXN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmVtYWluID0gLTE7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICAgIC8vIGlmKCFlbGVtLmRhdGEoJ3BhdXNlZCcpKXsgcmV0dXJuIGZhbHNlOyB9Ly9tYXliZSBpbXBsZW1lbnQgdGhpcyBzYW5pdHkgY2hlY2sgaWYgdXNlZCBmb3Igb3RoZXIgdGhpbmdzLlxuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgcmVtYWluID0gcmVtYWluIDw9IDAgPyBkdXJhdGlvbiA6IHJlbWFpbjtcbiAgICBlbGVtLmRhdGEoJ3BhdXNlZCcsIGZhbHNlKTtcbiAgICBzdGFydCA9IERhdGUubm93KCk7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICBpZihvcHRpb25zLmluZmluaXRlKXtcbiAgICAgICAgX3RoaXMucmVzdGFydCgpOy8vcmVydW4gdGhlIHRpbWVyLlxuICAgICAgfVxuICAgICAgY2IoKTtcbiAgICB9LCByZW1haW4pO1xuICAgIGVsZW0udHJpZ2dlcihgdGltZXJzdGFydC56Zi4ke25hbWVTcGFjZX1gKTtcbiAgfVxuXG4gIHRoaXMucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzUGF1c2VkID0gdHJ1ZTtcbiAgICAvL2lmKGVsZW0uZGF0YSgncGF1c2VkJykpeyByZXR1cm4gZmFsc2U7IH0vL21heWJlIGltcGxlbWVudCB0aGlzIHNhbml0eSBjaGVjayBpZiB1c2VkIGZvciBvdGhlciB0aGluZ3MuXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICBlbGVtLmRhdGEoJ3BhdXNlZCcsIHRydWUpO1xuICAgIHZhciBlbmQgPSBEYXRlLm5vdygpO1xuICAgIHJlbWFpbiA9IHJlbWFpbiAtIChlbmQgLSBzdGFydCk7XG4gICAgZWxlbS50cmlnZ2VyKGB0aW1lcnBhdXNlZC56Zi4ke25hbWVTcGFjZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIGltYWdlcyBhcmUgZnVsbHkgbG9hZGVkLlxuICogQHBhcmFtIHtPYmplY3R9IGltYWdlcyAtIEltYWdlKHMpIHRvIGNoZWNrIGlmIGxvYWRlZC5cbiAqIEBwYXJhbSB7RnVuY30gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gaW1hZ2UgaXMgZnVsbHkgbG9hZGVkLlxuICovXG5mdW5jdGlvbiBvbkltYWdlc0xvYWRlZChpbWFnZXMsIGNhbGxiYWNrKXtcbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgdW5sb2FkZWQgPSBpbWFnZXMubGVuZ3RoO1xuXG4gIGlmICh1bmxvYWRlZCA9PT0gMCkge1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICBpbWFnZXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jb21wbGV0ZSkge1xuICAgICAgc2luZ2xlSW1hZ2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHRoaXMubmF0dXJhbFdpZHRoICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm5hdHVyYWxXaWR0aCA+IDApIHtcbiAgICAgIHNpbmdsZUltYWdlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgJCh0aGlzKS5vbmUoJ2xvYWQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgc2luZ2xlSW1hZ2VMb2FkZWQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gc2luZ2xlSW1hZ2VMb2FkZWQoKSB7XG4gICAgdW5sb2FkZWQtLTtcbiAgICBpZiAodW5sb2FkZWQgPT09IDApIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG59XG5cbkZvdW5kYXRpb24uVGltZXIgPSBUaW1lcjtcbkZvdW5kYXRpb24ub25JbWFnZXNMb2FkZWQgPSBvbkltYWdlc0xvYWRlZDtcblxufShqUXVlcnkpO1xuIiwiLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8qKldvcmsgaW5zcGlyZWQgYnkgbXVsdGlwbGUganF1ZXJ5IHN3aXBlIHBsdWdpbnMqKlxuLy8qKkRvbmUgYnkgWW9oYWkgQXJhcmF0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuKGZ1bmN0aW9uKCQpIHtcblxuICAkLnNwb3RTd2lwZSA9IHtcbiAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgIGVuYWJsZWQ6ICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICBwcmV2ZW50RGVmYXVsdDogZmFsc2UsXG4gICAgbW92ZVRocmVzaG9sZDogNzUsXG4gICAgdGltZVRocmVzaG9sZDogMjAwXG4gIH07XG5cbiAgdmFyICAgc3RhcnRQb3NYLFxuICAgICAgICBzdGFydFBvc1ksXG4gICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgZWxhcHNlZFRpbWUsXG4gICAgICAgIGlzTW92aW5nID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gb25Ub3VjaEVuZCgpIHtcbiAgICAvLyAgYWxlcnQodGhpcyk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIG9uVG91Y2hFbmQpO1xuICAgIGlzTW92aW5nID0gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBvblRvdWNoTW92ZShlKSB7XG4gICAgaWYgKCQuc3BvdFN3aXBlLnByZXZlbnREZWZhdWx0KSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgIGlmKGlzTW92aW5nKSB7XG4gICAgICB2YXIgeCA9IGUudG91Y2hlc1swXS5wYWdlWDtcbiAgICAgIHZhciB5ID0gZS50b3VjaGVzWzBdLnBhZ2VZO1xuICAgICAgdmFyIGR4ID0gc3RhcnRQb3NYIC0geDtcbiAgICAgIHZhciBkeSA9IHN0YXJ0UG9zWSAtIHk7XG4gICAgICB2YXIgZGlyO1xuICAgICAgZWxhcHNlZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0VGltZTtcbiAgICAgIGlmKE1hdGguYWJzKGR4KSA+PSAkLnNwb3RTd2lwZS5tb3ZlVGhyZXNob2xkICYmIGVsYXBzZWRUaW1lIDw9ICQuc3BvdFN3aXBlLnRpbWVUaHJlc2hvbGQpIHtcbiAgICAgICAgZGlyID0gZHggPiAwID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICAgIH1cbiAgICAgIC8vIGVsc2UgaWYoTWF0aC5hYnMoZHkpID49ICQuc3BvdFN3aXBlLm1vdmVUaHJlc2hvbGQgJiYgZWxhcHNlZFRpbWUgPD0gJC5zcG90U3dpcGUudGltZVRocmVzaG9sZCkge1xuICAgICAgLy8gICBkaXIgPSBkeSA+IDAgPyAnZG93bicgOiAndXAnO1xuICAgICAgLy8gfVxuICAgICAgaWYoZGlyKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25Ub3VjaEVuZC5jYWxsKHRoaXMpO1xuICAgICAgICAkKHRoaXMpLnRyaWdnZXIoJ3N3aXBlJywgZGlyKS50cmlnZ2VyKGBzd2lwZSR7ZGlyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVG91Y2hTdGFydChlKSB7XG4gICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPT0gMSkge1xuICAgICAgc3RhcnRQb3NYID0gZS50b3VjaGVzWzBdLnBhZ2VYO1xuICAgICAgc3RhcnRQb3NZID0gZS50b3VjaGVzWzBdLnBhZ2VZO1xuICAgICAgaXNNb3ZpbmcgPSB0cnVlO1xuICAgICAgc3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG9uVG91Y2hNb3ZlLCBmYWxzZSk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyICYmIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVhcmRvd24oKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgfVxuXG4gICQuZXZlbnQuc3BlY2lhbC5zd2lwZSA9IHsgc2V0dXA6IGluaXQgfTtcblxuICAkLmVhY2goWydsZWZ0JywgJ3VwJywgJ2Rvd24nLCAncmlnaHQnXSwgZnVuY3Rpb24gKCkge1xuICAgICQuZXZlbnQuc3BlY2lhbFtgc3dpcGUke3RoaXN9YF0gPSB7IHNldHVwOiBmdW5jdGlvbigpe1xuICAgICAgJCh0aGlzKS5vbignc3dpcGUnLCAkLm5vb3ApO1xuICAgIH0gfTtcbiAgfSk7XG59KShqUXVlcnkpO1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIE1ldGhvZCBmb3IgYWRkaW5nIHBzdWVkbyBkcmFnIGV2ZW50cyB0byBlbGVtZW50cyAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIWZ1bmN0aW9uKCQpe1xuICAkLmZuLmFkZFRvdWNoID0gZnVuY3Rpb24oKXtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24oaSxlbCl7XG4gICAgICAkKGVsKS5iaW5kKCd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCcsZnVuY3Rpb24oKXtcbiAgICAgICAgLy93ZSBwYXNzIHRoZSBvcmlnaW5hbCBldmVudCBvYmplY3QgYmVjYXVzZSB0aGUgalF1ZXJ5IGV2ZW50XG4gICAgICAgIC8vb2JqZWN0IGlzIG5vcm1hbGl6ZWQgdG8gdzNjIHNwZWNzIGFuZCBkb2VzIG5vdCBwcm92aWRlIHRoZSBUb3VjaExpc3RcbiAgICAgICAgaGFuZGxlVG91Y2goZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgaGFuZGxlVG91Y2ggPSBmdW5jdGlvbihldmVudCl7XG4gICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICAgIGZpcnN0ID0gdG91Y2hlc1swXSxcbiAgICAgICAgICBldmVudFR5cGVzID0ge1xuICAgICAgICAgICAgdG91Y2hzdGFydDogJ21vdXNlZG93bicsXG4gICAgICAgICAgICB0b3VjaG1vdmU6ICdtb3VzZW1vdmUnLFxuICAgICAgICAgICAgdG91Y2hlbmQ6ICdtb3VzZXVwJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZSA9IGV2ZW50VHlwZXNbZXZlbnQudHlwZV0sXG4gICAgICAgICAgc2ltdWxhdGVkRXZlbnRcbiAgICAgICAgO1xuXG4gICAgICBpZignTW91c2VFdmVudCcgaW4gd2luZG93ICYmIHR5cGVvZiB3aW5kb3cuTW91c2VFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzaW11bGF0ZWRFdmVudCA9IHdpbmRvdy5Nb3VzZUV2ZW50KHR5cGUsIHtcbiAgICAgICAgICAnYnViYmxlcyc6IHRydWUsXG4gICAgICAgICAgJ2NhbmNlbGFibGUnOiB0cnVlLFxuICAgICAgICAgICdzY3JlZW5YJzogZmlyc3Quc2NyZWVuWCxcbiAgICAgICAgICAnc2NyZWVuWSc6IGZpcnN0LnNjcmVlblksXG4gICAgICAgICAgJ2NsaWVudFgnOiBmaXJzdC5jbGllbnRYLFxuICAgICAgICAgICdjbGllbnRZJzogZmlyc3QuY2xpZW50WVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnQnKTtcbiAgICAgICAgc2ltdWxhdGVkRXZlbnQuaW5pdE1vdXNlRXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSwgd2luZG93LCAxLCBmaXJzdC5zY3JlZW5YLCBmaXJzdC5zY3JlZW5ZLCBmaXJzdC5jbGllbnRYLCBmaXJzdC5jbGllbnRZLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMC8qbGVmdCovLCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGZpcnN0LnRhcmdldC5kaXNwYXRjaEV2ZW50KHNpbXVsYXRlZEV2ZW50KTtcbiAgICB9O1xuICB9O1xufShqUXVlcnkpO1xuXG5cbi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8qKkZyb20gdGhlIGpRdWVyeSBNb2JpbGUgTGlicmFyeSoqXG4vLyoqbmVlZCB0byByZWNyZWF0ZSBmdW5jdGlvbmFsaXR5Kipcbi8vKiphbmQgdHJ5IHRvIGltcHJvdmUgaWYgcG9zc2libGUqKlxuLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbi8qIFJlbW92aW5nIHRoZSBqUXVlcnkgZnVuY3Rpb24gKioqKlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbihmdW5jdGlvbiggJCwgd2luZG93LCB1bmRlZmluZWQgKSB7XG5cblx0dmFyICRkb2N1bWVudCA9ICQoIGRvY3VtZW50ICksXG5cdFx0Ly8gc3VwcG9ydFRvdWNoID0gJC5tb2JpbGUuc3VwcG9ydC50b3VjaCxcblx0XHR0b3VjaFN0YXJ0RXZlbnQgPSAndG91Y2hzdGFydCcvL3N1cHBvcnRUb3VjaCA/IFwidG91Y2hzdGFydFwiIDogXCJtb3VzZWRvd25cIixcblx0XHR0b3VjaFN0b3BFdmVudCA9ICd0b3VjaGVuZCcvL3N1cHBvcnRUb3VjaCA/IFwidG91Y2hlbmRcIiA6IFwibW91c2V1cFwiLFxuXHRcdHRvdWNoTW92ZUV2ZW50ID0gJ3RvdWNobW92ZScvL3N1cHBvcnRUb3VjaCA/IFwidG91Y2htb3ZlXCIgOiBcIm1vdXNlbW92ZVwiO1xuXG5cdC8vIHNldHVwIG5ldyBldmVudCBzaG9ydGN1dHNcblx0JC5lYWNoKCAoIFwidG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgXCIgK1xuXHRcdFwic3dpcGUgc3dpcGVsZWZ0IHN3aXBlcmlnaHRcIiApLnNwbGl0KCBcIiBcIiApLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblxuXHRcdCQuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdHJldHVybiBmbiA/IHRoaXMuYmluZCggbmFtZSwgZm4gKSA6IHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cblx0XHQvLyBqUXVlcnkgPCAxLjhcblx0XHRpZiAoICQuYXR0ckZuICkge1xuXHRcdFx0JC5hdHRyRm5bIG5hbWUgXSA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblxuXHRmdW5jdGlvbiB0cmlnZ2VyQ3VzdG9tRXZlbnQoIG9iaiwgZXZlbnRUeXBlLCBldmVudCwgYnViYmxlICkge1xuXHRcdHZhciBvcmlnaW5hbFR5cGUgPSBldmVudC50eXBlO1xuXHRcdGV2ZW50LnR5cGUgPSBldmVudFR5cGU7XG5cdFx0aWYgKCBidWJibGUgKSB7XG5cdFx0XHQkLmV2ZW50LnRyaWdnZXIoIGV2ZW50LCB1bmRlZmluZWQsIG9iaiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkLmV2ZW50LmRpc3BhdGNoLmNhbGwoIG9iaiwgZXZlbnQgKTtcblx0XHR9XG5cdFx0ZXZlbnQudHlwZSA9IG9yaWdpbmFsVHlwZTtcblx0fVxuXG5cdC8vIGFsc28gaGFuZGxlcyB0YXBob2xkXG5cblx0Ly8gQWxzbyBoYW5kbGVzIHN3aXBlbGVmdCwgc3dpcGVyaWdodFxuXHQkLmV2ZW50LnNwZWNpYWwuc3dpcGUgPSB7XG5cblx0XHQvLyBNb3JlIHRoYW4gdGhpcyBob3Jpem9udGFsIGRpc3BsYWNlbWVudCwgYW5kIHdlIHdpbGwgc3VwcHJlc3Mgc2Nyb2xsaW5nLlxuXHRcdHNjcm9sbFN1cHJlc3Npb25UaHJlc2hvbGQ6IDMwLFxuXG5cdFx0Ly8gTW9yZSB0aW1lIHRoYW4gdGhpcywgYW5kIGl0IGlzbid0IGEgc3dpcGUuXG5cdFx0ZHVyYXRpb25UaHJlc2hvbGQ6IDEwMDAsXG5cblx0XHQvLyBTd2lwZSBob3Jpem9udGFsIGRpc3BsYWNlbWVudCBtdXN0IGJlIG1vcmUgdGhhbiB0aGlzLlxuXHRcdGhvcml6b250YWxEaXN0YW5jZVRocmVzaG9sZDogd2luZG93LmRldmljZVBpeGVsUmF0aW8gPj0gMiA/IDE1IDogMzAsXG5cblx0XHQvLyBTd2lwZSB2ZXJ0aWNhbCBkaXNwbGFjZW1lbnQgbXVzdCBiZSBsZXNzIHRoYW4gdGhpcy5cblx0XHR2ZXJ0aWNhbERpc3RhbmNlVGhyZXNob2xkOiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA+PSAyID8gMTUgOiAzMCxcblxuXHRcdGdldExvY2F0aW9uOiBmdW5jdGlvbiAoIGV2ZW50ICkge1xuXHRcdFx0dmFyIHdpblBhZ2VYID0gd2luZG93LnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHR3aW5QYWdlWSA9IHdpbmRvdy5wYWdlWU9mZnNldCxcblx0XHRcdFx0eCA9IGV2ZW50LmNsaWVudFgsXG5cdFx0XHRcdHkgPSBldmVudC5jbGllbnRZO1xuXG5cdFx0XHRpZiAoIGV2ZW50LnBhZ2VZID09PSAwICYmIE1hdGguZmxvb3IoIHkgKSA+IE1hdGguZmxvb3IoIGV2ZW50LnBhZ2VZICkgfHxcblx0XHRcdFx0ZXZlbnQucGFnZVggPT09IDAgJiYgTWF0aC5mbG9vciggeCApID4gTWF0aC5mbG9vciggZXZlbnQucGFnZVggKSApIHtcblxuXHRcdFx0XHQvLyBpT1M0IGNsaWVudFgvY2xpZW50WSBoYXZlIHRoZSB2YWx1ZSB0aGF0IHNob3VsZCBoYXZlIGJlZW5cblx0XHRcdFx0Ly8gaW4gcGFnZVgvcGFnZVkuIFdoaWxlIHBhZ2VYL3BhZ2UvIGhhdmUgdGhlIHZhbHVlIDBcblx0XHRcdFx0eCA9IHggLSB3aW5QYWdlWDtcblx0XHRcdFx0eSA9IHkgLSB3aW5QYWdlWTtcblx0XHRcdH0gZWxzZSBpZiAoIHkgPCAoIGV2ZW50LnBhZ2VZIC0gd2luUGFnZVkpIHx8IHggPCAoIGV2ZW50LnBhZ2VYIC0gd2luUGFnZVggKSApIHtcblxuXHRcdFx0XHQvLyBTb21lIEFuZHJvaWQgYnJvd3NlcnMgaGF2ZSB0b3RhbGx5IGJvZ3VzIHZhbHVlcyBmb3IgY2xpZW50WC9ZXG5cdFx0XHRcdC8vIHdoZW4gc2Nyb2xsaW5nL3pvb21pbmcgYSBwYWdlLiBEZXRlY3RhYmxlIHNpbmNlIGNsaWVudFgvY2xpZW50WVxuXHRcdFx0XHQvLyBzaG91bGQgbmV2ZXIgYmUgc21hbGxlciB0aGFuIHBhZ2VYL3BhZ2VZIG1pbnVzIHBhZ2Ugc2Nyb2xsXG5cdFx0XHRcdHggPSBldmVudC5wYWdlWCAtIHdpblBhZ2VYO1xuXHRcdFx0XHR5ID0gZXZlbnQucGFnZVkgLSB3aW5QYWdlWTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0eDogeCxcblx0XHRcdFx0eTogeVxuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0c3RhcnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBkYXRhID0gZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzID9cblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbIDAgXSA6IGV2ZW50LFxuXHRcdFx0XHRsb2NhdGlvbiA9ICQuZXZlbnQuc3BlY2lhbC5zd2lwZS5nZXRMb2NhdGlvbiggZGF0YSApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHRpbWU6ICggbmV3IERhdGUoKSApLmdldFRpbWUoKSxcblx0XHRcdFx0XHRcdGNvb3JkczogWyBsb2NhdGlvbi54LCBsb2NhdGlvbi55IF0sXG5cdFx0XHRcdFx0XHRvcmlnaW46ICQoIGV2ZW50LnRhcmdldCApXG5cdFx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0c3RvcDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIGRhdGEgPSBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgP1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1sgMCBdIDogZXZlbnQsXG5cdFx0XHRcdGxvY2F0aW9uID0gJC5ldmVudC5zcGVjaWFsLnN3aXBlLmdldExvY2F0aW9uKCBkYXRhICk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0dGltZTogKCBuZXcgRGF0ZSgpICkuZ2V0VGltZSgpLFxuXHRcdFx0XHRcdFx0Y29vcmRzOiBbIGxvY2F0aW9uLngsIGxvY2F0aW9uLnkgXVxuXHRcdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdGhhbmRsZVN3aXBlOiBmdW5jdGlvbiggc3RhcnQsIHN0b3AsIHRoaXNPYmplY3QsIG9yaWdUYXJnZXQgKSB7XG5cdFx0XHRpZiAoIHN0b3AudGltZSAtIHN0YXJ0LnRpbWUgPCAkLmV2ZW50LnNwZWNpYWwuc3dpcGUuZHVyYXRpb25UaHJlc2hvbGQgJiZcblx0XHRcdFx0TWF0aC5hYnMoIHN0YXJ0LmNvb3Jkc1sgMCBdIC0gc3RvcC5jb29yZHNbIDAgXSApID4gJC5ldmVudC5zcGVjaWFsLnN3aXBlLmhvcml6b250YWxEaXN0YW5jZVRocmVzaG9sZCAmJlxuXHRcdFx0XHRNYXRoLmFicyggc3RhcnQuY29vcmRzWyAxIF0gLSBzdG9wLmNvb3Jkc1sgMSBdICkgPCAkLmV2ZW50LnNwZWNpYWwuc3dpcGUudmVydGljYWxEaXN0YW5jZVRocmVzaG9sZCApIHtcblx0XHRcdFx0dmFyIGRpcmVjdGlvbiA9IHN0YXJ0LmNvb3Jkc1swXSA+IHN0b3AuY29vcmRzWyAwIF0gPyBcInN3aXBlbGVmdFwiIDogXCJzd2lwZXJpZ2h0XCI7XG5cblx0XHRcdFx0dHJpZ2dlckN1c3RvbUV2ZW50KCB0aGlzT2JqZWN0LCBcInN3aXBlXCIsICQuRXZlbnQoIFwic3dpcGVcIiwgeyB0YXJnZXQ6IG9yaWdUYXJnZXQsIHN3aXBlc3RhcnQ6IHN0YXJ0LCBzd2lwZXN0b3A6IHN0b3AgfSksIHRydWUgKTtcblx0XHRcdFx0dHJpZ2dlckN1c3RvbUV2ZW50KCB0aGlzT2JqZWN0LCBkaXJlY3Rpb24sJC5FdmVudCggZGlyZWN0aW9uLCB7IHRhcmdldDogb3JpZ1RhcmdldCwgc3dpcGVzdGFydDogc3RhcnQsIHN3aXBlc3RvcDogc3RvcCB9ICksIHRydWUgKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHR9LFxuXG5cdFx0Ly8gVGhpcyBzZXJ2ZXMgYXMgYSBmbGFnIHRvIGVuc3VyZSB0aGF0IGF0IG1vc3Qgb25lIHN3aXBlIGV2ZW50IGV2ZW50IGlzXG5cdFx0Ly8gaW4gd29yayBhdCBhbnkgZ2l2ZW4gdGltZVxuXHRcdGV2ZW50SW5Qcm9ncmVzczogZmFsc2UsXG5cblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZXZlbnRzLFxuXHRcdFx0XHR0aGlzT2JqZWN0ID0gdGhpcyxcblx0XHRcdFx0JHRoaXMgPSAkKCB0aGlzT2JqZWN0ICksXG5cdFx0XHRcdGNvbnRleHQgPSB7fTtcblxuXHRcdFx0Ly8gUmV0cmlldmUgdGhlIGV2ZW50cyBkYXRhIGZvciB0aGlzIGVsZW1lbnQgYW5kIGFkZCB0aGUgc3dpcGUgY29udGV4dFxuXHRcdFx0ZXZlbnRzID0gJC5kYXRhKCB0aGlzLCBcIm1vYmlsZS1ldmVudHNcIiApO1xuXHRcdFx0aWYgKCAhZXZlbnRzICkge1xuXHRcdFx0XHRldmVudHMgPSB7IGxlbmd0aDogMCB9O1xuXHRcdFx0XHQkLmRhdGEoIHRoaXMsIFwibW9iaWxlLWV2ZW50c1wiLCBldmVudHMgKTtcblx0XHRcdH1cblx0XHRcdGV2ZW50cy5sZW5ndGgrKztcblx0XHRcdGV2ZW50cy5zd2lwZSA9IGNvbnRleHQ7XG5cblx0XHRcdGNvbnRleHQuc3RhcnQgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gQmFpbCBpZiB3ZSdyZSBhbHJlYWR5IHdvcmtpbmcgb24gYSBzd2lwZSBldmVudFxuXHRcdFx0XHRpZiAoICQuZXZlbnQuc3BlY2lhbC5zd2lwZS5ldmVudEluUHJvZ3Jlc3MgKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCQuZXZlbnQuc3BlY2lhbC5zd2lwZS5ldmVudEluUHJvZ3Jlc3MgPSB0cnVlO1xuXG5cdFx0XHRcdHZhciBzdG9wLFxuXHRcdFx0XHRcdHN0YXJ0ID0gJC5ldmVudC5zcGVjaWFsLnN3aXBlLnN0YXJ0KCBldmVudCApLFxuXHRcdFx0XHRcdG9yaWdUYXJnZXQgPSBldmVudC50YXJnZXQsXG5cdFx0XHRcdFx0ZW1pdHRlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdGNvbnRleHQubW92ZSA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0XHRpZiAoICFzdGFydCB8fCBldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRzdG9wID0gJC5ldmVudC5zcGVjaWFsLnN3aXBlLnN0b3AoIGV2ZW50ICk7XG5cdFx0XHRcdFx0aWYgKCAhZW1pdHRlZCApIHtcblx0XHRcdFx0XHRcdGVtaXR0ZWQgPSAkLmV2ZW50LnNwZWNpYWwuc3dpcGUuaGFuZGxlU3dpcGUoIHN0YXJ0LCBzdG9wLCB0aGlzT2JqZWN0LCBvcmlnVGFyZ2V0ICk7XG5cdFx0XHRcdFx0XHRpZiAoIGVtaXR0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmVzZXQgdGhlIGNvbnRleHQgdG8gbWFrZSB3YXkgZm9yIHRoZSBuZXh0IHN3aXBlIGV2ZW50XG5cdFx0XHRcdFx0XHRcdCQuZXZlbnQuc3BlY2lhbC5zd2lwZS5ldmVudEluUHJvZ3Jlc3MgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gcHJldmVudCBzY3JvbGxpbmdcblx0XHRcdFx0XHRpZiAoIE1hdGguYWJzKCBzdGFydC5jb29yZHNbIDAgXSAtIHN0b3AuY29vcmRzWyAwIF0gKSA+ICQuZXZlbnQuc3BlY2lhbC5zd2lwZS5zY3JvbGxTdXByZXNzaW9uVGhyZXNob2xkICkge1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29udGV4dC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRlbWl0dGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVzZXQgdGhlIGNvbnRleHQgdG8gbWFrZSB3YXkgZm9yIHRoZSBuZXh0IHN3aXBlIGV2ZW50XG5cdFx0XHRcdFx0XHQkLmV2ZW50LnNwZWNpYWwuc3dpcGUuZXZlbnRJblByb2dyZXNzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHQkZG9jdW1lbnQub2ZmKCB0b3VjaE1vdmVFdmVudCwgY29udGV4dC5tb3ZlICk7XG5cdFx0XHRcdFx0XHRjb250ZXh0Lm1vdmUgPSBudWxsO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdCRkb2N1bWVudC5vbiggdG91Y2hNb3ZlRXZlbnQsIGNvbnRleHQubW92ZSApXG5cdFx0XHRcdFx0Lm9uZSggdG91Y2hTdG9wRXZlbnQsIGNvbnRleHQuc3RvcCApO1xuXHRcdFx0fTtcblx0XHRcdCR0aGlzLm9uKCB0b3VjaFN0YXJ0RXZlbnQsIGNvbnRleHQuc3RhcnQgKTtcblx0XHR9LFxuXG5cdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGV2ZW50cywgY29udGV4dDtcblxuXHRcdFx0ZXZlbnRzID0gJC5kYXRhKCB0aGlzLCBcIm1vYmlsZS1ldmVudHNcIiApO1xuXHRcdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBldmVudHMuc3dpcGU7XG5cdFx0XHRcdGRlbGV0ZSBldmVudHMuc3dpcGU7XG5cdFx0XHRcdGV2ZW50cy5sZW5ndGgtLTtcblx0XHRcdFx0aWYgKCBldmVudHMubGVuZ3RoID09PSAwICkge1xuXHRcdFx0XHRcdCQucmVtb3ZlRGF0YSggdGhpcywgXCJtb2JpbGUtZXZlbnRzXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGNvbnRleHQgKSB7XG5cdFx0XHRcdGlmICggY29udGV4dC5zdGFydCApIHtcblx0XHRcdFx0XHQkKCB0aGlzICkub2ZmKCB0b3VjaFN0YXJ0RXZlbnQsIGNvbnRleHQuc3RhcnQgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGNvbnRleHQubW92ZSApIHtcblx0XHRcdFx0XHQkZG9jdW1lbnQub2ZmKCB0b3VjaE1vdmVFdmVudCwgY29udGV4dC5tb3ZlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBjb250ZXh0LnN0b3AgKSB7XG5cdFx0XHRcdFx0JGRvY3VtZW50Lm9mZiggdG91Y2hTdG9wRXZlbnQsIGNvbnRleHQuc3RvcCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHQkLmVhY2goe1xuXHRcdHN3aXBlbGVmdDogXCJzd2lwZS5sZWZ0XCIsXG5cdFx0c3dpcGVyaWdodDogXCJzd2lwZS5yaWdodFwiXG5cdH0sIGZ1bmN0aW9uKCBldmVudCwgc291cmNlRXZlbnQgKSB7XG5cblx0XHQkLmV2ZW50LnNwZWNpYWxbIGV2ZW50IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5iaW5kKCBzb3VyY2VFdmVudCwgJC5ub29wICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkKCB0aGlzICkudW5iaW5kKCBzb3VyY2VFdmVudCApO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0pO1xufSkoIGpRdWVyeSwgdGhpcyApO1xuKi9cbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuY29uc3QgTXV0YXRpb25PYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBwcmVmaXhlcyA9IFsnV2ViS2l0JywgJ01veicsICdPJywgJ01zJywgJyddO1xuICBmb3IgKHZhciBpPTA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChgJHtwcmVmaXhlc1tpXX1NdXRhdGlvbk9ic2VydmVyYCBpbiB3aW5kb3cpIHtcbiAgICAgIHJldHVybiB3aW5kb3dbYCR7cHJlZml4ZXNbaV19TXV0YXRpb25PYnNlcnZlcmBdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KCkpO1xuXG5jb25zdCB0cmlnZ2VycyA9IChlbCwgdHlwZSkgPT4ge1xuICBlbC5kYXRhKHR5cGUpLnNwbGl0KCcgJykuZm9yRWFjaChpZCA9PiB7XG4gICAgJChgIyR7aWR9YClbIHR5cGUgPT09ICdjbG9zZScgPyAndHJpZ2dlcicgOiAndHJpZ2dlckhhbmRsZXInXShgJHt0eXBlfS56Zi50cmlnZ2VyYCwgW2VsXSk7XG4gIH0pO1xufTtcbi8vIEVsZW1lbnRzIHdpdGggW2RhdGEtb3Blbl0gd2lsbCByZXZlYWwgYSBwbHVnaW4gdGhhdCBzdXBwb3J0cyBpdCB3aGVuIGNsaWNrZWQuXG4kKGRvY3VtZW50KS5vbignY2xpY2suemYudHJpZ2dlcicsICdbZGF0YS1vcGVuXScsIGZ1bmN0aW9uKCkge1xuICB0cmlnZ2VycygkKHRoaXMpLCAnb3BlbicpO1xufSk7XG5cbi8vIEVsZW1lbnRzIHdpdGggW2RhdGEtY2xvc2VdIHdpbGwgY2xvc2UgYSBwbHVnaW4gdGhhdCBzdXBwb3J0cyBpdCB3aGVuIGNsaWNrZWQuXG4vLyBJZiB1c2VkIHdpdGhvdXQgYSB2YWx1ZSBvbiBbZGF0YS1jbG9zZV0sIHRoZSBldmVudCB3aWxsIGJ1YmJsZSwgYWxsb3dpbmcgaXQgdG8gY2xvc2UgYSBwYXJlbnQgY29tcG9uZW50LlxuJChkb2N1bWVudCkub24oJ2NsaWNrLnpmLnRyaWdnZXInLCAnW2RhdGEtY2xvc2VdJywgZnVuY3Rpb24oKSB7XG4gIGxldCBpZCA9ICQodGhpcykuZGF0YSgnY2xvc2UnKTtcbiAgaWYgKGlkKSB7XG4gICAgdHJpZ2dlcnMoJCh0aGlzKSwgJ2Nsb3NlJyk7XG4gIH1cbiAgZWxzZSB7XG4gICAgJCh0aGlzKS50cmlnZ2VyKCdjbG9zZS56Zi50cmlnZ2VyJyk7XG4gIH1cbn0pO1xuXG4vLyBFbGVtZW50cyB3aXRoIFtkYXRhLXRvZ2dsZV0gd2lsbCB0b2dnbGUgYSBwbHVnaW4gdGhhdCBzdXBwb3J0cyBpdCB3aGVuIGNsaWNrZWQuXG4kKGRvY3VtZW50KS5vbignY2xpY2suemYudHJpZ2dlcicsICdbZGF0YS10b2dnbGVdJywgZnVuY3Rpb24oKSB7XG4gIHRyaWdnZXJzKCQodGhpcyksICd0b2dnbGUnKTtcbn0pO1xuXG4vLyBFbGVtZW50cyB3aXRoIFtkYXRhLWNsb3NhYmxlXSB3aWxsIHJlc3BvbmQgdG8gY2xvc2UuemYudHJpZ2dlciBldmVudHMuXG4kKGRvY3VtZW50KS5vbignY2xvc2UuemYudHJpZ2dlcicsICdbZGF0YS1jbG9zYWJsZV0nLCBmdW5jdGlvbihlKXtcbiAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgbGV0IGFuaW1hdGlvbiA9ICQodGhpcykuZGF0YSgnY2xvc2FibGUnKTtcblxuICBpZihhbmltYXRpb24gIT09ICcnKXtcbiAgICBGb3VuZGF0aW9uLk1vdGlvbi5hbmltYXRlT3V0KCQodGhpcyksIGFuaW1hdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICAkKHRoaXMpLnRyaWdnZXIoJ2Nsb3NlZC56ZicpO1xuICAgIH0pO1xuICB9ZWxzZXtcbiAgICAkKHRoaXMpLmZhZGVPdXQoKS50cmlnZ2VyKCdjbG9zZWQuemYnKTtcbiAgfVxufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdmb2N1cy56Zi50cmlnZ2VyIGJsdXIuemYudHJpZ2dlcicsICdbZGF0YS10b2dnbGUtZm9jdXNdJywgZnVuY3Rpb24oKSB7XG4gIGxldCBpZCA9ICQodGhpcykuZGF0YSgndG9nZ2xlLWZvY3VzJyk7XG4gICQoYCMke2lkfWApLnRyaWdnZXJIYW5kbGVyKCd0b2dnbGUuemYudHJpZ2dlcicsIFskKHRoaXMpXSk7XG59KTtcblxuLyoqXG4qIEZpcmVzIG9uY2UgYWZ0ZXIgYWxsIG90aGVyIHNjcmlwdHMgaGF2ZSBsb2FkZWRcbiogQGZ1bmN0aW9uXG4qIEBwcml2YXRlXG4qL1xuJCh3aW5kb3cpLmxvYWQoKCkgPT4ge1xuICBjaGVja0xpc3RlbmVycygpO1xufSk7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXJzKCkge1xuICBldmVudHNMaXN0ZW5lcigpO1xuICByZXNpemVMaXN0ZW5lcigpO1xuICBzY3JvbGxMaXN0ZW5lcigpO1xuICBjbG9zZW1lTGlzdGVuZXIoKTtcbn1cblxuLy8qKioqKioqKiBvbmx5IGZpcmVzIHRoaXMgZnVuY3Rpb24gb25jZSBvbiBsb2FkLCBpZiB0aGVyZSdzIHNvbWV0aGluZyB0byB3YXRjaCAqKioqKioqKlxuZnVuY3Rpb24gY2xvc2VtZUxpc3RlbmVyKHBsdWdpbk5hbWUpIHtcbiAgdmFyIHlldGlCb3hlcyA9ICQoJ1tkYXRhLXlldGktYm94XScpLFxuICAgICAgcGx1Z05hbWVzID0gWydkcm9wZG93bicsICd0b29sdGlwJywgJ3JldmVhbCddO1xuXG4gIGlmKHBsdWdpbk5hbWUpe1xuICAgIGlmKHR5cGVvZiBwbHVnaW5OYW1lID09PSAnc3RyaW5nJyl7XG4gICAgICBwbHVnTmFtZXMucHVzaChwbHVnaW5OYW1lKTtcbiAgICB9ZWxzZSBpZih0eXBlb2YgcGx1Z2luTmFtZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBsdWdpbk5hbWVbMF0gPT09ICdzdHJpbmcnKXtcbiAgICAgIHBsdWdOYW1lcy5jb25jYXQocGx1Z2luTmFtZSk7XG4gICAgfWVsc2V7XG4gICAgICBjb25zb2xlLmVycm9yKCdQbHVnaW4gbmFtZXMgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfVxuICB9XG4gIGlmKHlldGlCb3hlcy5sZW5ndGgpe1xuICAgIGxldCBsaXN0ZW5lcnMgPSBwbHVnTmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICByZXR1cm4gYGNsb3NlbWUuemYuJHtuYW1lfWA7XG4gICAgfSkuam9pbignICcpO1xuXG4gICAgJCh3aW5kb3cpLm9mZihsaXN0ZW5lcnMpLm9uKGxpc3RlbmVycywgZnVuY3Rpb24oZSwgcGx1Z2luSWQpe1xuICAgICAgbGV0IHBsdWdpbiA9IGUubmFtZXNwYWNlLnNwbGl0KCcuJylbMF07XG4gICAgICBsZXQgcGx1Z2lucyA9ICQoYFtkYXRhLSR7cGx1Z2lufV1gKS5ub3QoYFtkYXRhLXlldGktYm94PVwiJHtwbHVnaW5JZH1cIl1gKTtcblxuICAgICAgcGx1Z2lucy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgIGxldCBfdGhpcyA9ICQodGhpcyk7XG5cbiAgICAgICAgX3RoaXMudHJpZ2dlckhhbmRsZXIoJ2Nsb3NlLnpmLnRyaWdnZXInLCBbX3RoaXNdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2l6ZUxpc3RlbmVyKGRlYm91bmNlKXtcbiAgbGV0IHRpbWVyLFxuICAgICAgJG5vZGVzID0gJCgnW2RhdGEtcmVzaXplXScpO1xuICBpZigkbm9kZXMubGVuZ3RoKXtcbiAgICAkKHdpbmRvdykub2ZmKCdyZXNpemUuemYudHJpZ2dlcicpXG4gICAgLm9uKCdyZXNpemUuemYudHJpZ2dlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmICh0aW1lcikgeyBjbGVhclRpbWVvdXQodGltZXIpOyB9XG5cbiAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuXG4gICAgICAgIGlmKCFNdXRhdGlvbk9ic2VydmVyKXsvL2ZhbGxiYWNrIGZvciBJRSA5XG4gICAgICAgICAgJG5vZGVzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICQodGhpcykudHJpZ2dlckhhbmRsZXIoJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvL3RyaWdnZXIgYWxsIGxpc3RlbmluZyBlbGVtZW50cyBhbmQgc2lnbmFsIGEgcmVzaXplIGV2ZW50XG4gICAgICAgICRub2Rlcy5hdHRyKCdkYXRhLWV2ZW50cycsIFwicmVzaXplXCIpO1xuICAgICAgfSwgZGVib3VuY2UgfHwgMTApOy8vZGVmYXVsdCB0aW1lIHRvIGVtaXQgcmVzaXplIGV2ZW50XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2Nyb2xsTGlzdGVuZXIoZGVib3VuY2Upe1xuICBsZXQgdGltZXIsXG4gICAgICAkbm9kZXMgPSAkKCdbZGF0YS1zY3JvbGxdJyk7XG4gIGlmKCRub2Rlcy5sZW5ndGgpe1xuICAgICQod2luZG93KS5vZmYoJ3Njcm9sbC56Zi50cmlnZ2VyJylcbiAgICAub24oJ3Njcm9sbC56Zi50cmlnZ2VyJywgZnVuY3Rpb24oZSl7XG4gICAgICBpZih0aW1lcil7IGNsZWFyVGltZW91dCh0aW1lcik7IH1cblxuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgaWYoIU11dGF0aW9uT2JzZXJ2ZXIpey8vZmFsbGJhY2sgZm9yIElFIDlcbiAgICAgICAgICAkbm9kZXMuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VySGFuZGxlcignc2Nyb2xsbWUuemYudHJpZ2dlcicpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vdHJpZ2dlciBhbGwgbGlzdGVuaW5nIGVsZW1lbnRzIGFuZCBzaWduYWwgYSBzY3JvbGwgZXZlbnRcbiAgICAgICAgJG5vZGVzLmF0dHIoJ2RhdGEtZXZlbnRzJywgXCJzY3JvbGxcIik7XG4gICAgICB9LCBkZWJvdW5jZSB8fCAxMCk7Ly9kZWZhdWx0IHRpbWUgdG8gZW1pdCBzY3JvbGwgZXZlbnRcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudHNMaXN0ZW5lcigpIHtcbiAgaWYoIU11dGF0aW9uT2JzZXJ2ZXIpeyByZXR1cm4gZmFsc2U7IH1cbiAgbGV0IG5vZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtcmVzaXplXSwgW2RhdGEtc2Nyb2xsXSwgW2RhdGEtbXV0YXRlXScpO1xuXG4gIC8vZWxlbWVudCBjYWxsYmFja1xuICB2YXIgbGlzdGVuaW5nRWxlbWVudHNNdXRhdGlvbiA9IGZ1bmN0aW9uKG11dGF0aW9uUmVjb3Jkc0xpc3QpIHtcbiAgICB2YXIgJHRhcmdldCA9ICQobXV0YXRpb25SZWNvcmRzTGlzdFswXS50YXJnZXQpO1xuICAgIC8vdHJpZ2dlciB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGVsZW1lbnQgZGVwZW5kaW5nIG9uIHR5cGVcbiAgICBzd2l0Y2ggKCR0YXJnZXQuYXR0cihcImRhdGEtZXZlbnRzXCIpKSB7XG5cbiAgICAgIGNhc2UgXCJyZXNpemVcIiA6XG4gICAgICAkdGFyZ2V0LnRyaWdnZXJIYW5kbGVyKCdyZXNpemVtZS56Zi50cmlnZ2VyJywgWyR0YXJnZXRdKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwic2Nyb2xsXCIgOlxuICAgICAgJHRhcmdldC50cmlnZ2VySGFuZGxlcignc2Nyb2xsbWUuemYudHJpZ2dlcicsIFskdGFyZ2V0LCB3aW5kb3cucGFnZVlPZmZzZXRdKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBjYXNlIFwibXV0YXRlXCIgOlxuICAgICAgLy8gY29uc29sZS5sb2coJ211dGF0ZScsICR0YXJnZXQpO1xuICAgICAgLy8gJHRhcmdldC50cmlnZ2VySGFuZGxlcignbXV0YXRlLnpmLnRyaWdnZXInKTtcbiAgICAgIC8vXG4gICAgICAvLyAvL21ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcCBmcm9tIHNsb3BweSBjb2RlaW5nXG4gICAgICAvLyBpZiAoJHRhcmdldC5pbmRleCgnW2RhdGEtbXV0YXRlXScpID09ICQoXCJbZGF0YS1tdXRhdGVdXCIpLmxlbmd0aC0xKSB7XG4gICAgICAvLyAgIGRvbU11dGF0aW9uT2JzZXJ2ZXIoKTtcbiAgICAgIC8vIH1cbiAgICAgIC8vIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0IDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIC8vbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIGlmKG5vZGVzLmxlbmd0aCl7XG4gICAgLy9mb3IgZWFjaCBlbGVtZW50IHRoYXQgbmVlZHMgdG8gbGlzdGVuIGZvciByZXNpemluZywgc2Nyb2xsaW5nLCAob3IgY29taW5nIHNvb24gbXV0YXRpb24pIGFkZCBhIHNpbmdsZSBvYnNlcnZlclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG5vZGVzLmxlbmd0aC0xOyBpKyspIHtcbiAgICAgIGxldCBlbGVtZW50T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihsaXN0ZW5pbmdFbGVtZW50c011dGF0aW9uKTtcbiAgICAgIGVsZW1lbnRPYnNlcnZlci5vYnNlcnZlKG5vZGVzW2ldLCB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoaWxkTGlzdDogZmFsc2UsIGNoYXJhY3RlckRhdGE6IGZhbHNlLCBzdWJ0cmVlOmZhbHNlLCBhdHRyaWJ1dGVGaWx0ZXI6W1wiZGF0YS1ldmVudHNcIl19KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFtQSF1cbi8vIEZvdW5kYXRpb24uQ2hlY2tXYXRjaGVycyA9IGNoZWNrV2F0Y2hlcnM7XG5Gb3VuZGF0aW9uLklIZWFyWW91ID0gY2hlY2tMaXN0ZW5lcnM7XG4vLyBGb3VuZGF0aW9uLklTZWVZb3UgPSBzY3JvbGxMaXN0ZW5lcjtcbi8vIEZvdW5kYXRpb24uSUZlZWxZb3UgPSBjbG9zZW1lTGlzdGVuZXI7XG5cbn0oalF1ZXJ5KTtcblxuLy8gZnVuY3Rpb24gZG9tTXV0YXRpb25PYnNlcnZlcihkZWJvdW5jZSkge1xuLy8gICAvLyAhISEgVGhpcyBpcyBjb21pbmcgc29vbiBhbmQgbmVlZHMgbW9yZSB3b3JrOyBub3QgYWN0aXZlICAhISEgLy9cbi8vICAgdmFyIHRpbWVyLFxuLy8gICBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW11dGF0ZV0nKTtcbi8vICAgLy9cbi8vICAgaWYgKG5vZGVzLmxlbmd0aCkge1xuLy8gICAgIC8vIHZhciBNdXRhdGlvbk9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbi8vICAgICAvLyAgIHZhciBwcmVmaXhlcyA9IFsnV2ViS2l0JywgJ01veicsICdPJywgJ01zJywgJyddO1xuLy8gICAgIC8vICAgZm9yICh2YXIgaT0wOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbi8vICAgICAvLyAgICAgaWYgKHByZWZpeGVzW2ldICsgJ011dGF0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykge1xuLy8gICAgIC8vICAgICAgIHJldHVybiB3aW5kb3dbcHJlZml4ZXNbaV0gKyAnTXV0YXRpb25PYnNlcnZlciddO1xuLy8gICAgIC8vICAgICB9XG4vLyAgICAgLy8gICB9XG4vLyAgICAgLy8gICByZXR1cm4gZmFsc2U7XG4vLyAgICAgLy8gfSgpKTtcbi8vXG4vL1xuLy8gICAgIC8vZm9yIHRoZSBib2R5LCB3ZSBuZWVkIHRvIGxpc3RlbiBmb3IgYWxsIGNoYW5nZXMgZWZmZWN0aW5nIHRoZSBzdHlsZSBhbmQgY2xhc3MgYXR0cmlidXRlc1xuLy8gICAgIHZhciBib2R5T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihib2R5TXV0YXRpb24pO1xuLy8gICAgIGJvZHlPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiBmYWxzZSwgc3VidHJlZTp0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6W1wic3R5bGVcIiwgXCJjbGFzc1wiXX0pO1xuLy9cbi8vXG4vLyAgICAgLy9ib2R5IGNhbGxiYWNrXG4vLyAgICAgZnVuY3Rpb24gYm9keU11dGF0aW9uKG11dGF0ZSkge1xuLy8gICAgICAgLy90cmlnZ2VyIGFsbCBsaXN0ZW5pbmcgZWxlbWVudHMgYW5kIHNpZ25hbCBhIG11dGF0aW9uIGV2ZW50XG4vLyAgICAgICBpZiAodGltZXIpIHsgY2xlYXJUaW1lb3V0KHRpbWVyKTsgfVxuLy9cbi8vICAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbi8vICAgICAgICAgYm9keU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbi8vICAgICAgICAgJCgnW2RhdGEtbXV0YXRlXScpLmF0dHIoJ2RhdGEtZXZlbnRzJyxcIm11dGF0ZVwiKTtcbi8vICAgICAgIH0sIGRlYm91bmNlIHx8IDE1MCk7XG4vLyAgICAgfVxuLy8gICB9XG4vLyB9XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogQWJpZGUgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmFiaWRlXG4gKi9cblxuY2xhc3MgQWJpZGUge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBBYmlkZS5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBBYmlkZSNpbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIHRyaWdnZXIgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyAgPSAkLmV4dGVuZCh7fSwgQWJpZGUuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ0FiaWRlJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIEFiaWRlIHBsdWdpbiBhbmQgY2FsbHMgZnVuY3Rpb25zIHRvIGdldCBBYmlkZSBmdW5jdGlvbmluZyBvbiBsb2FkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdGhpcy4kaW5wdXRzID0gdGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcpLm5vdCgnW2RhdGEtYWJpZGUtaWdub3JlXScpO1xuXG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgZXZlbnRzIGZvciBBYmlkZS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy5hYmlkZScpXG4gICAgICAub24oJ3Jlc2V0LnpmLmFiaWRlJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgfSlcbiAgICAgIC5vbignc3VibWl0LnpmLmFiaWRlJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUZvcm0oKTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy52YWxpZGF0ZU9uID09PSAnZmllbGRDaGFuZ2UnKSB7XG4gICAgICB0aGlzLiRpbnB1dHNcbiAgICAgICAgLm9mZignY2hhbmdlLnpmLmFiaWRlJylcbiAgICAgICAgLm9uKCdjaGFuZ2UuemYuYWJpZGUnLCAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dCgkKGUudGFyZ2V0KSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGl2ZVZhbGlkYXRlKSB7XG4gICAgICB0aGlzLiRpbnB1dHNcbiAgICAgICAgLm9mZignaW5wdXQuemYuYWJpZGUnKVxuICAgICAgICAub24oJ2lucHV0LnpmLmFiaWRlJywgKGUpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXQoJChlLnRhcmdldCkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgbmVjZXNzYXJ5IGZ1bmN0aW9ucyB0byB1cGRhdGUgQWJpZGUgdXBvbiBET00gY2hhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVmbG93KCkge1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgYSBmb3JtIGVsZW1lbnQgaGFzIHRoZSByZXF1aXJlZCBhdHRyaWJ1dGUgYW5kIGlmIGl0J3MgY2hlY2tlZCBvciBub3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGNoZWNrIGZvciByZXF1aXJlZCBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMge0Jvb2xlYW59IEJvb2xlYW4gdmFsdWUgZGVwZW5kcyBvbiB3aGV0aGVyIG9yIG5vdCBhdHRyaWJ1dGUgaXMgY2hlY2tlZCBvciBlbXB0eVxuICAgKi9cbiAgcmVxdWlyZWRDaGVjaygkZWwpIHtcbiAgICBpZiAoISRlbC5hdHRyKCdyZXF1aXJlZCcpKSByZXR1cm4gdHJ1ZTtcblxuICAgIHZhciBpc0dvb2QgPSB0cnVlO1xuXG4gICAgc3dpdGNoICgkZWxbMF0udHlwZSkge1xuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGNhc2UgJ3NlbGVjdC1vbmUnOlxuICAgICAgY2FzZSAnc2VsZWN0LW11bHRpcGxlJzpcbiAgICAgICAgdmFyIG9wdCA9ICRlbC5maW5kKCdvcHRpb246c2VsZWN0ZWQnKTtcbiAgICAgICAgaWYgKCFvcHQubGVuZ3RoIHx8ICFvcHQudmFsKCkpIGlzR29vZCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYoISRlbC52YWwoKSB8fCAhJGVsLnZhbCgpLmxlbmd0aCkgaXNHb29kID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzR29vZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCYXNlZCBvbiAkZWwsIGdldCB0aGUgZmlyc3QgZWxlbWVudCB3aXRoIHNlbGVjdG9yIGluIHRoaXMgb3JkZXI6XG4gICAqIDEuIFRoZSBlbGVtZW50J3MgZGlyZWN0IHNpYmxpbmcoJ3MpLlxuICAgKiAzLiBUaGUgZWxlbWVudCdzIHBhcmVudCdzIGNoaWxkcmVuLlxuICAgKlxuICAgKiBUaGlzIGFsbG93cyBmb3IgbXVsdGlwbGUgZm9ybSBlcnJvcnMgcGVyIGlucHV0LCB0aG91Z2ggaWYgbm9uZSBhcmUgZm91bmQsIG5vIGZvcm0gZXJyb3JzIHdpbGwgYmUgc2hvd24uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWwgLSBqUXVlcnkgb2JqZWN0IHRvIHVzZSBhcyByZWZlcmVuY2UgdG8gZmluZCB0aGUgZm9ybSBlcnJvciBzZWxlY3Rvci5cbiAgICogQHJldHVybnMge09iamVjdH0galF1ZXJ5IG9iamVjdCB3aXRoIHRoZSBzZWxlY3Rvci5cbiAgICovXG4gIGZpbmRGb3JtRXJyb3IoJGVsKSB7XG4gICAgdmFyICRlcnJvciA9ICRlbC5zaWJsaW5ncyh0aGlzLm9wdGlvbnMuZm9ybUVycm9yU2VsZWN0b3IpO1xuXG4gICAgaWYgKCEkZXJyb3IubGVuZ3RoKSB7XG4gICAgICAkZXJyb3IgPSAkZWwucGFyZW50KCkuZmluZCh0aGlzLm9wdGlvbnMuZm9ybUVycm9yU2VsZWN0b3IpO1xuICAgIH1cblxuICAgIHJldHVybiAkZXJyb3I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaXJzdCBlbGVtZW50IGluIHRoaXMgb3JkZXI6XG4gICAqIDIuIFRoZSA8bGFiZWw+IHdpdGggdGhlIGF0dHJpYnV0ZSBgW2Zvcj1cInNvbWVJbnB1dElkXCJdYFxuICAgKiAzLiBUaGUgYC5jbG9zZXN0KClgIDxsYWJlbD5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbCAtIGpRdWVyeSBvYmplY3QgdG8gY2hlY2sgZm9yIHJlcXVpcmVkIGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gQm9vbGVhbiB2YWx1ZSBkZXBlbmRzIG9uIHdoZXRoZXIgb3Igbm90IGF0dHJpYnV0ZSBpcyBjaGVja2VkIG9yIGVtcHR5XG4gICAqL1xuICBmaW5kTGFiZWwoJGVsKSB7XG4gICAgdmFyIGlkID0gJGVsWzBdLmlkO1xuICAgIHZhciAkbGFiZWwgPSB0aGlzLiRlbGVtZW50LmZpbmQoYGxhYmVsW2Zvcj1cIiR7aWR9XCJdYCk7XG5cbiAgICBpZiAoISRsYWJlbC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAkZWwuY2xvc2VzdCgnbGFiZWwnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJGxhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2V0IG9mIGxhYmVscyBhc3NvY2lhdGVkIHdpdGggYSBzZXQgb2YgcmFkaW8gZWxzIGluIHRoaXMgb3JkZXJcbiAgICogMi4gVGhlIDxsYWJlbD4gd2l0aCB0aGUgYXR0cmlidXRlIGBbZm9yPVwic29tZUlucHV0SWRcIl1gXG4gICAqIDMuIFRoZSBgLmNsb3Nlc3QoKWAgPGxhYmVsPlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IG9iamVjdCB0byBjaGVjayBmb3IgcmVxdWlyZWQgYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBCb29sZWFuIHZhbHVlIGRlcGVuZHMgb24gd2hldGhlciBvciBub3QgYXR0cmlidXRlIGlzIGNoZWNrZWQgb3IgZW1wdHlcbiAgICovXG4gIGZpbmRSYWRpb0xhYmVscygkZWxzKSB7XG4gICAgdmFyIGxhYmVscyA9ICRlbHMubWFwKChpLCBlbCkgPT4ge1xuICAgICAgdmFyIGlkID0gZWwuaWQ7XG4gICAgICB2YXIgJGxhYmVsID0gdGhpcy4kZWxlbWVudC5maW5kKGBsYWJlbFtmb3I9XCIke2lkfVwiXWApO1xuXG4gICAgICBpZiAoISRsYWJlbC5sZW5ndGgpIHtcbiAgICAgICAgJGxhYmVsID0gJChlbCkuY2xvc2VzdCgnbGFiZWwnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAkbGFiZWxbMF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJChsYWJlbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIENTUyBlcnJvciBjbGFzcyBhcyBzcGVjaWZpZWQgYnkgdGhlIEFiaWRlIHNldHRpbmdzIHRvIHRoZSBsYWJlbCwgaW5wdXQsIGFuZCB0aGUgZm9ybVxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIGNsYXNzIHRvXG4gICAqL1xuICBhZGRFcnJvckNsYXNzZXMoJGVsKSB7XG4gICAgdmFyICRsYWJlbCA9IHRoaXMuZmluZExhYmVsKCRlbCk7XG4gICAgdmFyICRmb3JtRXJyb3IgPSB0aGlzLmZpbmRGb3JtRXJyb3IoJGVsKTtcblxuICAgIGlmICgkbGFiZWwubGVuZ3RoKSB7XG4gICAgICAkbGFiZWwuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmxhYmVsRXJyb3JDbGFzcyk7XG4gICAgfVxuXG4gICAgaWYgKCRmb3JtRXJyb3IubGVuZ3RoKSB7XG4gICAgICAkZm9ybUVycm9yLmFkZENsYXNzKHRoaXMub3B0aW9ucy5mb3JtRXJyb3JDbGFzcyk7XG4gICAgfVxuXG4gICAgJGVsLmFkZENsYXNzKHRoaXMub3B0aW9ucy5pbnB1dEVycm9yQ2xhc3MpLmF0dHIoJ2RhdGEtaW52YWxpZCcsICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgQ1NTIGVycm9yIGNsYXNzZXMgZXRjIGZyb20gYW4gZW50aXJlIHJhZGlvIGJ1dHRvbiBncm91cFxuICAgKiBAcGFyYW0ge1N0cmluZ30gZ3JvdXBOYW1lIC0gQSBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSByYWRpbyBidXR0b24gZ3JvdXBcbiAgICpcbiAgICovXG5cbiAgcmVtb3ZlUmFkaW9FcnJvckNsYXNzZXMoZ3JvdXBOYW1lKSB7XG4gICAgdmFyICRlbHMgPSB0aGlzLiRlbGVtZW50LmZpbmQoYDpyYWRpb1tuYW1lPVwiJHtncm91cE5hbWV9XCJdYCk7XG4gICAgdmFyICRsYWJlbHMgPSB0aGlzLmZpbmRSYWRpb0xhYmVscygkZWxzKTtcbiAgICB2YXIgJGZvcm1FcnJvcnMgPSB0aGlzLmZpbmRGb3JtRXJyb3IoJGVscyk7XG5cbiAgICBpZiAoJGxhYmVscy5sZW5ndGgpIHtcbiAgICAgICRsYWJlbHMucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmxhYmVsRXJyb3JDbGFzcyk7XG4gICAgfVxuXG4gICAgaWYgKCRmb3JtRXJyb3JzLmxlbmd0aCkge1xuICAgICAgJGZvcm1FcnJvcnMucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmZvcm1FcnJvckNsYXNzKTtcbiAgICB9XG5cbiAgICAkZWxzLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5pbnB1dEVycm9yQ2xhc3MpLnJlbW92ZUF0dHIoJ2RhdGEtaW52YWxpZCcpO1xuXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBDU1MgZXJyb3IgY2xhc3MgYXMgc3BlY2lmaWVkIGJ5IHRoZSBBYmlkZSBzZXR0aW5ncyBmcm9tIHRoZSBsYWJlbCwgaW5wdXQsIGFuZCB0aGUgZm9ybVxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IG9iamVjdCB0byByZW1vdmUgdGhlIGNsYXNzIGZyb21cbiAgICovXG4gIHJlbW92ZUVycm9yQ2xhc3NlcygkZWwpIHtcbiAgICAvLyByYWRpb3MgbmVlZCB0byBjbGVhciBhbGwgb2YgdGhlIGVsc1xuICAgIGlmKCRlbFswXS50eXBlID09ICdyYWRpbycpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbW92ZVJhZGlvRXJyb3JDbGFzc2VzKCRlbC5hdHRyKCduYW1lJykpO1xuICAgIH1cblxuICAgIHZhciAkbGFiZWwgPSB0aGlzLmZpbmRMYWJlbCgkZWwpO1xuICAgIHZhciAkZm9ybUVycm9yID0gdGhpcy5maW5kRm9ybUVycm9yKCRlbCk7XG5cbiAgICBpZiAoJGxhYmVsLmxlbmd0aCkge1xuICAgICAgJGxhYmVsLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5sYWJlbEVycm9yQ2xhc3MpO1xuICAgIH1cblxuICAgIGlmICgkZm9ybUVycm9yLmxlbmd0aCkge1xuICAgICAgJGZvcm1FcnJvci5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZm9ybUVycm9yQ2xhc3MpO1xuICAgIH1cblxuICAgICRlbC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaW5wdXRFcnJvckNsYXNzKS5yZW1vdmVBdHRyKCdkYXRhLWludmFsaWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHb2VzIHRocm91Z2ggYSBmb3JtIHRvIGZpbmQgaW5wdXRzIGFuZCBwcm9jZWVkcyB0byB2YWxpZGF0ZSB0aGVtIGluIHdheXMgc3BlY2lmaWMgdG8gdGhlaXIgdHlwZVxuICAgKiBAZmlyZXMgQWJpZGUjaW52YWxpZFxuICAgKiBAZmlyZXMgQWJpZGUjdmFsaWRcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIHZhbGlkYXRlLCBzaG91bGQgYmUgYW4gSFRNTCBpbnB1dFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gZ29vZFRvR28gLSBJZiB0aGUgaW5wdXQgaXMgdmFsaWQgb3Igbm90LlxuICAgKi9cbiAgdmFsaWRhdGVJbnB1dCgkZWwpIHtcbiAgICB2YXIgY2xlYXJSZXF1aXJlID0gdGhpcy5yZXF1aXJlZENoZWNrKCRlbCksXG4gICAgICAgIHZhbGlkYXRlZCA9IGZhbHNlLFxuICAgICAgICBjdXN0b21WYWxpZGF0b3IgPSB0cnVlLFxuICAgICAgICB2YWxpZGF0b3IgPSAkZWwuYXR0cignZGF0YS12YWxpZGF0b3InKSxcbiAgICAgICAgZXF1YWxUbyA9IHRydWU7XG5cbiAgICBzd2l0Y2ggKCRlbFswXS50eXBlKSB7XG4gICAgICBjYXNlICdyYWRpbyc6XG4gICAgICAgIHZhbGlkYXRlZCA9IHRoaXMudmFsaWRhdGVSYWRpbygkZWwuYXR0cignbmFtZScpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgdmFsaWRhdGVkID0gY2xlYXJSZXF1aXJlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGNhc2UgJ3NlbGVjdC1vbmUnOlxuICAgICAgY2FzZSAnc2VsZWN0LW11bHRpcGxlJzpcbiAgICAgICAgdmFsaWRhdGVkID0gY2xlYXJSZXF1aXJlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFsaWRhdGVkID0gdGhpcy52YWxpZGF0ZVRleHQoJGVsKTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjdXN0b21WYWxpZGF0b3IgPSB0aGlzLm1hdGNoVmFsaWRhdGlvbigkZWwsIHZhbGlkYXRvciwgJGVsLmF0dHIoJ3JlcXVpcmVkJykpO1xuICAgIH1cblxuICAgIGlmICgkZWwuYXR0cignZGF0YS1lcXVhbHRvJykpIHtcbiAgICAgIGVxdWFsVG8gPSB0aGlzLm9wdGlvbnMudmFsaWRhdG9ycy5lcXVhbFRvKCRlbCk7XG4gICAgfVxuXG5cbiAgICB2YXIgZ29vZFRvR28gPSBbY2xlYXJSZXF1aXJlLCB2YWxpZGF0ZWQsIGN1c3RvbVZhbGlkYXRvciwgZXF1YWxUb10uaW5kZXhPZihmYWxzZSkgPT09IC0xO1xuICAgIHZhciBtZXNzYWdlID0gKGdvb2RUb0dvID8gJ3ZhbGlkJyA6ICdpbnZhbGlkJykgKyAnLnpmLmFiaWRlJztcblxuICAgIHRoaXNbZ29vZFRvR28gPyAncmVtb3ZlRXJyb3JDbGFzc2VzJyA6ICdhZGRFcnJvckNsYXNzZXMnXSgkZWwpO1xuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgaW5wdXQgaXMgZG9uZSBjaGVja2luZyBmb3IgdmFsaWRhdGlvbi4gRXZlbnQgdHJpZ2dlciBpcyBlaXRoZXIgYHZhbGlkLnpmLmFiaWRlYCBvciBgaW52YWxpZC56Zi5hYmlkZWBcbiAgICAgKiBUcmlnZ2VyIGluY2x1ZGVzIHRoZSBET00gZWxlbWVudCBvZiB0aGUgaW5wdXQuXG4gICAgICogQGV2ZW50IEFiaWRlI3ZhbGlkXG4gICAgICogQGV2ZW50IEFiaWRlI2ludmFsaWRcbiAgICAgKi9cbiAgICAkZWwudHJpZ2dlcihtZXNzYWdlLCBbJGVsXSk7XG5cbiAgICByZXR1cm4gZ29vZFRvR287XG4gIH1cblxuICAvKipcbiAgICogR29lcyB0aHJvdWdoIGEgZm9ybSBhbmQgaWYgdGhlcmUgYXJlIGFueSBpbnZhbGlkIGlucHV0cywgaXQgd2lsbCBkaXNwbGF5IHRoZSBmb3JtIGVycm9yIGVsZW1lbnRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IG5vRXJyb3IgLSB0cnVlIGlmIG5vIGVycm9ycyB3ZXJlIGRldGVjdGVkLi4uXG4gICAqIEBmaXJlcyBBYmlkZSNmb3JtdmFsaWRcbiAgICogQGZpcmVzIEFiaWRlI2Zvcm1pbnZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZUZvcm0oKSB7XG4gICAgdmFyIGFjYyA9IFtdO1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLiRpbnB1dHMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIGFjYy5wdXNoKF90aGlzLnZhbGlkYXRlSW5wdXQoJCh0aGlzKSkpO1xuICAgIH0pO1xuXG4gICAgdmFyIG5vRXJyb3IgPSBhY2MuaW5kZXhPZihmYWxzZSkgPT09IC0xO1xuXG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1hYmlkZS1lcnJvcl0nKS5jc3MoJ2Rpc3BsYXknLCAobm9FcnJvciA/ICdub25lJyA6ICdibG9jaycpKTtcblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIGZvcm0gaXMgZmluaXNoZWQgdmFsaWRhdGluZy4gRXZlbnQgdHJpZ2dlciBpcyBlaXRoZXIgYGZvcm12YWxpZC56Zi5hYmlkZWAgb3IgYGZvcm1pbnZhbGlkLnpmLmFiaWRlYC5cbiAgICAgKiBUcmlnZ2VyIGluY2x1ZGVzIHRoZSBlbGVtZW50IG9mIHRoZSBmb3JtLlxuICAgICAqIEBldmVudCBBYmlkZSNmb3JtdmFsaWRcbiAgICAgKiBAZXZlbnQgQWJpZGUjZm9ybWludmFsaWRcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoKG5vRXJyb3IgPyAnZm9ybXZhbGlkJyA6ICdmb3JtaW52YWxpZCcpICsgJy56Zi5hYmlkZScsIFt0aGlzLiRlbGVtZW50XSk7XG5cbiAgICByZXR1cm4gbm9FcnJvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3IgYSBub3QgYSB0ZXh0IGlucHV0IGlzIHZhbGlkIGJhc2VkIG9uIHRoZSBwYXR0ZXJuIHNwZWNpZmllZCBpbiB0aGUgYXR0cmlidXRlLiBJZiBubyBtYXRjaGluZyBwYXR0ZXJuIGlzIGZvdW5kLCByZXR1cm5zIHRydWUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWwgLSBqUXVlcnkgb2JqZWN0IHRvIHZhbGlkYXRlLCBzaG91bGQgYmUgYSB0ZXh0IGlucHV0IEhUTUwgZWxlbWVudFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVybiAtIHN0cmluZyB2YWx1ZSBvZiBvbmUgb2YgdGhlIFJlZ0V4IHBhdHRlcm5zIGluIEFiaWRlLm9wdGlvbnMucGF0dGVybnNcbiAgICogQHJldHVybnMge0Jvb2xlYW59IEJvb2xlYW4gdmFsdWUgZGVwZW5kcyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgdmFsdWUgbWF0Y2hlcyB0aGUgcGF0dGVybiBzcGVjaWZpZWRcbiAgICovXG4gIHZhbGlkYXRlVGV4dCgkZWwsIHBhdHRlcm4pIHtcbiAgICAvLyBBIHBhdHRlcm4gY2FuIGJlIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGJlIGluZmVyZWQgZnJvbSB0aGUgaW5wdXQncyBcInBhdHRlcm5cIiBhdHRyaWJ1dGUsIG9yIGl0J3MgXCJ0eXBlXCIgYXR0cmlidXRlXG4gICAgcGF0dGVybiA9IChwYXR0ZXJuIHx8ICRlbC5hdHRyKCdwYXR0ZXJuJykgfHwgJGVsLmF0dHIoJ3R5cGUnKSk7XG4gICAgdmFyIGlucHV0VGV4dCA9ICRlbC52YWwoKTtcbiAgICB2YXIgdmFsaWQgPSBmYWxzZTtcblxuICAgIGlmIChpbnB1dFRleHQubGVuZ3RoKSB7XG4gICAgICAvLyBJZiB0aGUgcGF0dGVybiBhdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQgaXMgaW4gQWJpZGUncyBsaXN0IG9mIHBhdHRlcm5zLCB0aGVuIHRlc3QgdGhhdCByZWdleHBcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucGF0dGVybnMuaGFzT3duUHJvcGVydHkocGF0dGVybikpIHtcbiAgICAgICAgdmFsaWQgPSB0aGlzLm9wdGlvbnMucGF0dGVybnNbcGF0dGVybl0udGVzdChpbnB1dFRleHQpO1xuICAgICAgfVxuICAgICAgLy8gSWYgdGhlIHBhdHRlcm4gbmFtZSBpc24ndCBhbHNvIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiB0aGUgZmllbGQsIHRoZW4gdGVzdCBpdCBhcyBhIHJlZ2V4cFxuICAgICAgZWxzZSBpZiAocGF0dGVybiAhPT0gJGVsLmF0dHIoJ3R5cGUnKSkge1xuICAgICAgICB2YWxpZCA9IG5ldyBSZWdFeHAocGF0dGVybikudGVzdChpbnB1dFRleHQpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQW4gZW1wdHkgZmllbGQgaXMgdmFsaWQgaWYgaXQncyBub3QgcmVxdWlyZWRcbiAgICBlbHNlIGlmICghJGVsLnByb3AoJ3JlcXVpcmVkJykpIHtcbiAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWQ7XG4gICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBvciBhIG5vdCBhIHJhZGlvIGlucHV0IGlzIHZhbGlkIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IGl0IGlzIHJlcXVpcmVkIGFuZCBzZWxlY3RlZC4gQWx0aG91Z2ggdGhlIGZ1bmN0aW9uIHRhcmdldHMgYSBzaW5nbGUgYDxpbnB1dD5gLCBpdCB2YWxpZGF0ZXMgYnkgY2hlY2tpbmcgdGhlIGByZXF1aXJlZGAgYW5kIGBjaGVja2VkYCBwcm9wZXJ0aWVzIG9mIGFsbCByYWRpbyBidXR0b25zIGluIGl0cyBncm91cC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGdyb3VwTmFtZSAtIEEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgcmFkaW8gYnV0dG9uIGdyb3VwXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBCb29sZWFuIHZhbHVlIGRlcGVuZHMgb24gd2hldGhlciBvciBub3QgYXQgbGVhc3Qgb25lIHJhZGlvIGlucHV0IGhhcyBiZWVuIHNlbGVjdGVkIChpZiBpdCdzIHJlcXVpcmVkKVxuICAgKi9cbiAgdmFsaWRhdGVSYWRpbyhncm91cE5hbWUpIHtcbiAgICAvLyBJZiBhdCBsZWFzdCBvbmUgcmFkaW8gaW4gdGhlIGdyb3VwIGhhcyB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUsIHRoZSBncm91cCBpcyBjb25zaWRlcmVkIHJlcXVpcmVkXG4gICAgLy8gUGVyIFczQyBzcGVjLCBhbGwgcmFkaW8gYnV0dG9ucyBpbiBhIGdyb3VwIHNob3VsZCBoYXZlIGByZXF1aXJlZGAsIGJ1dCB3ZSdyZSBiZWluZyBuaWNlXG4gICAgdmFyICRncm91cCA9IHRoaXMuJGVsZW1lbnQuZmluZChgOnJhZGlvW25hbWU9XCIke2dyb3VwTmFtZX1cIl1gKTtcbiAgICB2YXIgdmFsaWQgPSBmYWxzZTtcblxuICAgIC8vIC5hdHRyKCkgcmV0dXJucyB1bmRlZmluZWQgaWYgbm8gZWxlbWVudHMgaW4gJGdyb3VwIGhhdmUgdGhlIGF0dHJpYnV0ZSBcInJlcXVpcmVkXCJcbiAgICBpZiAoJGdyb3VwLmF0dHIoJ3JlcXVpcmVkJykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZvciB0aGUgZ3JvdXAgdG8gYmUgdmFsaWQsIGF0IGxlYXN0IG9uZSByYWRpbyBuZWVkcyB0byBiZSBjaGVja2VkXG4gICAgJGdyb3VwLmVhY2goKGksIGUpID0+IHtcbiAgICAgIGlmICgkKGUpLnByb3AoJ2NoZWNrZWQnKSkge1xuICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIHNlbGVjdGVkIGlucHV0IHBhc3NlcyBhIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBNdWx0aXBsZSB2YWxpZGF0aW9ucyBjYW4gYmUgdXNlZCwgaWYgcGFzc2VkIHRvIHRoZSBlbGVtZW50IHdpdGggYGRhdGEtdmFsaWRhdG9yPVwiZm9vIGJhciBiYXpcImAgaW4gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdGVkLlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IGlucHV0IGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWxpZGF0b3JzIC0gYSBzdHJpbmcgb2YgZnVuY3Rpb24gbmFtZXMgbWF0Y2hpbmcgZnVuY3Rpb25zIGluIHRoZSBBYmlkZS5vcHRpb25zLnZhbGlkYXRvcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlcXVpcmVkIC0gc2VsZiBleHBsYW5hdG9yeT9cbiAgICogQHJldHVybnMge0Jvb2xlYW59IC0gdHJ1ZSBpZiB2YWxpZGF0aW9ucyBwYXNzZWQuXG4gICAqL1xuICBtYXRjaFZhbGlkYXRpb24oJGVsLCB2YWxpZGF0b3JzLCByZXF1aXJlZCkge1xuICAgIHJlcXVpcmVkID0gcmVxdWlyZWQgPyB0cnVlIDogZmFsc2U7XG5cbiAgICB2YXIgY2xlYXIgPSB2YWxpZGF0b3JzLnNwbGl0KCcgJykubWFwKCh2KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZhbGlkYXRvcnNbdl0oJGVsLCByZXF1aXJlZCwgJGVsLnBhcmVudCgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2xlYXIuaW5kZXhPZihmYWxzZSkgPT09IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBmb3JtIGlucHV0cyBhbmQgc3R5bGVzXG4gICAqIEBmaXJlcyBBYmlkZSNmb3JtcmVzZXRcbiAgICovXG4gIHJlc2V0Rm9ybSgpIHtcbiAgICB2YXIgJGZvcm0gPSB0aGlzLiRlbGVtZW50LFxuICAgICAgICBvcHRzID0gdGhpcy5vcHRpb25zO1xuXG4gICAgJChgLiR7b3B0cy5sYWJlbEVycm9yQ2xhc3N9YCwgJGZvcm0pLm5vdCgnc21hbGwnKS5yZW1vdmVDbGFzcyhvcHRzLmxhYmVsRXJyb3JDbGFzcyk7XG4gICAgJChgLiR7b3B0cy5pbnB1dEVycm9yQ2xhc3N9YCwgJGZvcm0pLm5vdCgnc21hbGwnKS5yZW1vdmVDbGFzcyhvcHRzLmlucHV0RXJyb3JDbGFzcyk7XG4gICAgJChgJHtvcHRzLmZvcm1FcnJvclNlbGVjdG9yfS4ke29wdHMuZm9ybUVycm9yQ2xhc3N9YCkucmVtb3ZlQ2xhc3Mob3B0cy5mb3JtRXJyb3JDbGFzcyk7XG4gICAgJGZvcm0uZmluZCgnW2RhdGEtYWJpZGUtZXJyb3JdJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAkKCc6aW5wdXQnLCAkZm9ybSkubm90KCc6YnV0dG9uLCA6c3VibWl0LCA6cmVzZXQsIDpoaWRkZW4sIFtkYXRhLWFiaWRlLWlnbm9yZV0nKS52YWwoJycpLnJlbW92ZUF0dHIoJ2RhdGEtaW52YWxpZCcpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIGZvcm0gaGFzIGJlZW4gcmVzZXQuXG4gICAgICogQGV2ZW50IEFiaWRlI2Zvcm1yZXNldFxuICAgICAqL1xuICAgICRmb3JtLnRyaWdnZXIoJ2Zvcm1yZXNldC56Zi5hYmlkZScsIFskZm9ybV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFuIGluc3RhbmNlIG9mIEFiaWRlLlxuICAgKiBSZW1vdmVzIGVycm9yIHN0eWxlcyBhbmQgY2xhc3NlcyBmcm9tIGVsZW1lbnRzLCB3aXRob3V0IHJlc2V0dGluZyB0aGVpciB2YWx1ZXMuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdGhpcy4kZWxlbWVudFxuICAgICAgLm9mZignLmFiaWRlJylcbiAgICAgIC5maW5kKCdbZGF0YS1hYmlkZS1lcnJvcl0nKVxuICAgICAgICAuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcblxuICAgIHRoaXMuJGlucHV0c1xuICAgICAgLm9mZignLmFiaWRlJylcbiAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy5yZW1vdmVFcnJvckNsYXNzZXMoJCh0aGlzKSk7XG4gICAgICB9KTtcblxuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIHBsdWdpblxuICovXG5BYmlkZS5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGV2ZW50IHRvIHZhbGlkYXRlIGlucHV0cy4gQ2hlY2tib3hlcyBhbmQgcmFkaW9zIHZhbGlkYXRlIGltbWVkaWF0ZWx5LlxuICAgKiBSZW1vdmUgb3IgY2hhbmdlIHRoaXMgdmFsdWUgZm9yIG1hbnVhbCB2YWxpZGF0aW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdmaWVsZENoYW5nZSdcbiAgICovXG4gIHZhbGlkYXRlT246ICdmaWVsZENoYW5nZScsXG5cbiAgLyoqXG4gICAqIENsYXNzIHRvIGJlIGFwcGxpZWQgdG8gaW5wdXQgbGFiZWxzIG9uIGZhaWxlZCB2YWxpZGF0aW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdpcy1pbnZhbGlkLWxhYmVsJ1xuICAgKi9cbiAgbGFiZWxFcnJvckNsYXNzOiAnaXMtaW52YWxpZC1sYWJlbCcsXG5cbiAgLyoqXG4gICAqIENsYXNzIHRvIGJlIGFwcGxpZWQgdG8gaW5wdXRzIG9uIGZhaWxlZCB2YWxpZGF0aW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdpcy1pbnZhbGlkLWlucHV0J1xuICAgKi9cbiAgaW5wdXRFcnJvckNsYXNzOiAnaXMtaW52YWxpZC1pbnB1dCcsXG5cbiAgLyoqXG4gICAqIENsYXNzIHNlbGVjdG9yIHRvIHVzZSB0byB0YXJnZXQgRm9ybSBFcnJvcnMgZm9yIHNob3cvaGlkZS5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnLmZvcm0tZXJyb3InXG4gICAqL1xuICBmb3JtRXJyb3JTZWxlY3RvcjogJy5mb3JtLWVycm9yJyxcblxuICAvKipcbiAgICogQ2xhc3MgYWRkZWQgdG8gRm9ybSBFcnJvcnMgb24gZmFpbGVkIHZhbGlkYXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ2lzLXZpc2libGUnXG4gICAqL1xuICBmb3JtRXJyb3JDbGFzczogJ2lzLXZpc2libGUnLFxuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byB2YWxpZGF0ZSB0ZXh0IGlucHV0cyBvbiBhbnkgdmFsdWUgY2hhbmdlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBsaXZlVmFsaWRhdGU6IGZhbHNlLFxuXG4gIHBhdHRlcm5zOiB7XG4gICAgYWxwaGEgOiAvXlthLXpBLVpdKyQvLFxuICAgIGFscGhhX251bWVyaWMgOiAvXlthLXpBLVowLTldKyQvLFxuICAgIGludGVnZXIgOiAvXlstK10/XFxkKyQvLFxuICAgIG51bWJlciA6IC9eWy0rXT9cXGQqKD86W1xcLlxcLF1cXGQrKT8kLyxcblxuICAgIC8vIGFtZXgsIHZpc2EsIGRpbmVyc1xuICAgIGNhcmQgOiAvXig/OjRbMC05XXsxMn0oPzpbMC05XXszfSk/fDVbMS01XVswLTldezE0fXw2KD86MDExfDVbMC05XVswLTldKVswLTldezEyfXwzWzQ3XVswLTldezEzfXwzKD86MFswLTVdfFs2OF1bMC05XSlbMC05XXsxMX18KD86MjEzMXwxODAwfDM1XFxkezN9KVxcZHsxMX0pJC8sXG4gICAgY3Z2IDogL14oWzAtOV0pezMsNH0kLyxcblxuICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3N0YXRlcy1vZi10aGUtdHlwZS1hdHRyaWJ1dGUuaHRtbCN2YWxpZC1lLW1haWwtYWRkcmVzc1xuICAgIGVtYWlsIDogL15bYS16QS1aMC05LiEjJCUmJyorXFwvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrJC8sXG5cbiAgICB1cmwgOiAvXihodHRwcz98ZnRwfGZpbGV8c3NoKTpcXC9cXC8oKCgoW2EtekEtWl18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OikqQCk/KCgoXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pKXwoKChbYS16QS1aXXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2EtekEtWl18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2EtekEtWl18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuKSsoKFthLXpBLVpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpBLVpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2EtekEtWl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4/KSg6XFxkKik/KShcXC8oKChbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApKyhcXC8oKFthLXpBLVpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCkqKSopPyk/KFxcPygoKFthLXpBLVpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCl8W1xcdUUwMDAtXFx1RjhGRl18XFwvfFxcPykqKT8oXFwjKCgoW2EtekEtWl18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKXxcXC98XFw/KSopPyQvLFxuICAgIC8vIGFiYy5kZVxuICAgIGRvbWFpbiA6IC9eKFthLXpBLVowLTldKFthLXpBLVowLTlcXC1dezAsNjF9W2EtekEtWjAtOV0pP1xcLikrW2EtekEtWl17Miw4fSQvLFxuXG4gICAgZGF0ZXRpbWUgOiAvXihbMC0yXVswLTldezN9KVxcLShbMC0xXVswLTldKVxcLShbMC0zXVswLTldKVQoWzAtNV1bMC05XSlcXDooWzAtNV1bMC05XSlcXDooWzAtNV1bMC05XSkoWnwoW1xcLVxcK10oWzAtMV1bMC05XSlcXDowMCkpJC8sXG4gICAgLy8gWVlZWS1NTS1ERFxuICAgIGRhdGUgOiAvKD86MTl8MjApWzAtOV17Mn0tKD86KD86MFsxLTldfDFbMC0yXSktKD86MFsxLTldfDFbMC05XXwyWzAtOV0pfCg/Oig/ITAyKSg/OjBbMS05XXwxWzAtMl0pLSg/OjMwKSl8KD86KD86MFsxMzU3OF18MVswMl0pLTMxKSkkLyxcbiAgICAvLyBISDpNTTpTU1xuICAgIHRpbWUgOiAvXigwWzAtOV18MVswLTldfDJbMC0zXSkoOlswLTVdWzAtOV0pezJ9JC8sXG4gICAgZGF0ZUlTTyA6IC9eXFxkezR9W1xcL1xcLV1cXGR7MSwyfVtcXC9cXC1dXFxkezEsMn0kLyxcbiAgICAvLyBNTS9ERC9ZWVlZXG4gICAgbW9udGhfZGF5X3llYXIgOiAvXigwWzEtOV18MVswMTJdKVstIFxcLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gXFwvLl1cXGR7NH0kLyxcbiAgICAvLyBERC9NTS9ZWVlZXG4gICAgZGF5X21vbnRoX3llYXIgOiAvXigwWzEtOV18WzEyXVswLTldfDNbMDFdKVstIFxcLy5dKDBbMS05XXwxWzAxMl0pWy0gXFwvLl1cXGR7NH0kLyxcblxuICAgIC8vICNGRkYgb3IgI0ZGRkZGRlxuICAgIGNvbG9yIDogL14jPyhbYS1mQS1GMC05XXs2fXxbYS1mQS1GMC05XXszfSkkL1xuICB9LFxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB2YWxpZGF0aW9uIGZ1bmN0aW9ucyB0byBiZSB1c2VkLiBgZXF1YWxUb2AgYmVpbmcgdGhlIG9ubHkgZGVmYXVsdCBpbmNsdWRlZCBmdW5jdGlvbi5cbiAgICogRnVuY3Rpb25zIHNob3VsZCByZXR1cm4gb25seSBhIGJvb2xlYW4gaWYgdGhlIGlucHV0IGlzIHZhbGlkIG9yIG5vdC4gRnVuY3Rpb25zIGFyZSBnaXZlbiB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czpcbiAgICogZWwgOiBUaGUgalF1ZXJ5IGVsZW1lbnQgdG8gdmFsaWRhdGUuXG4gICAqIHJlcXVpcmVkIDogQm9vbGVhbiB2YWx1ZSBvZiB0aGUgcmVxdWlyZWQgYXR0cmlidXRlIGJlIHByZXNlbnQgb3Igbm90LlxuICAgKiBwYXJlbnQgOiBUaGUgZGlyZWN0IHBhcmVudCBvZiB0aGUgaW5wdXQuXG4gICAqIEBvcHRpb25cbiAgICovXG4gIHZhbGlkYXRvcnM6IHtcbiAgICBlcXVhbFRvOiBmdW5jdGlvbiAoZWwsIHJlcXVpcmVkLCBwYXJlbnQpIHtcbiAgICAgIHJldHVybiAkKGAjJHtlbC5hdHRyKCdkYXRhLWVxdWFsdG8nKX1gKS52YWwoKSA9PT0gZWwudmFsKCk7XG4gICAgfVxuICB9XG59XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihBYmlkZSwgJ0FiaWRlJyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBBY2NvcmRpb24gbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmFjY29yZGlvblxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5rZXlib2FyZFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tb3Rpb25cbiAqL1xuXG5jbGFzcyBBY2NvcmRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBhY2NvcmRpb24uXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgQWNjb3JkaW9uI2luaXRcbiAgICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIG1ha2UgaW50byBhbiBhY2NvcmRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gYSBwbGFpbiBvYmplY3Qgd2l0aCBzZXR0aW5ncyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBvcHRpb25zLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBBY2NvcmRpb24uZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ0FjY29yZGlvbicpO1xuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ0FjY29yZGlvbicsIHtcbiAgICAgICdFTlRFUic6ICd0b2dnbGUnLFxuICAgICAgJ1NQQUNFJzogJ3RvZ2dsZScsXG4gICAgICAnQVJST1dfRE9XTic6ICduZXh0JyxcbiAgICAgICdBUlJPV19VUCc6ICdwcmV2aW91cydcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgYWNjb3JkaW9uIGJ5IGFuaW1hdGluZyB0aGUgcHJlc2V0IGFjdGl2ZSBwYW5lKHMpLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCdyb2xlJywgJ3RhYmxpc3QnKTtcbiAgICB0aGlzLiR0YWJzID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbignbGksIFtkYXRhLWFjY29yZGlvbi1pdGVtXScpO1xuXG4gICAgdGhpcy4kdGFicy5lYWNoKGZ1bmN0aW9uKGlkeCwgZWwpIHtcbiAgICAgIHZhciAkZWwgPSAkKGVsKSxcbiAgICAgICAgICAkY29udGVudCA9ICRlbC5jaGlsZHJlbignW2RhdGEtdGFiLWNvbnRlbnRdJyksXG4gICAgICAgICAgaWQgPSAkY29udGVudFswXS5pZCB8fCBGb3VuZGF0aW9uLkdldFlvRGlnaXRzKDYsICdhY2NvcmRpb24nKSxcbiAgICAgICAgICBsaW5rSWQgPSBlbC5pZCB8fCBgJHtpZH0tbGFiZWxgO1xuXG4gICAgICAkZWwuZmluZCgnYTpmaXJzdCcpLmF0dHIoe1xuICAgICAgICAnYXJpYS1jb250cm9scyc6IGlkLFxuICAgICAgICAncm9sZSc6ICd0YWInLFxuICAgICAgICAnaWQnOiBsaW5rSWQsXG4gICAgICAgICdhcmlhLWV4cGFuZGVkJzogZmFsc2UsXG4gICAgICAgICdhcmlhLXNlbGVjdGVkJzogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICAkY29udGVudC5hdHRyKHsncm9sZSc6ICd0YWJwYW5lbCcsICdhcmlhLWxhYmVsbGVkYnknOiBsaW5rSWQsICdhcmlhLWhpZGRlbic6IHRydWUsICdpZCc6IGlkfSk7XG4gICAgfSk7XG4gICAgdmFyICRpbml0QWN0aXZlID0gdGhpcy4kZWxlbWVudC5maW5kKCcuaXMtYWN0aXZlJykuY2hpbGRyZW4oJ1tkYXRhLXRhYi1jb250ZW50XScpO1xuICAgIGlmKCRpbml0QWN0aXZlLmxlbmd0aCl7XG4gICAgICB0aGlzLmRvd24oJGluaXRBY3RpdmUsIHRydWUpO1xuICAgIH1cbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGhhbmRsZXJzIGZvciBpdGVtcyB3aXRoaW4gdGhlIGFjY29yZGlvbi5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJHRhYnMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIHZhciAkZWxlbSA9ICQodGhpcyk7XG4gICAgICB2YXIgJHRhYkNvbnRlbnQgPSAkZWxlbS5jaGlsZHJlbignW2RhdGEtdGFiLWNvbnRlbnRdJyk7XG4gICAgICBpZiAoJHRhYkNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICRlbGVtLmNoaWxkcmVuKCdhJykub2ZmKCdjbGljay56Zi5hY2NvcmRpb24ga2V5ZG93bi56Zi5hY2NvcmRpb24nKVxuICAgICAgICAgICAgICAgLm9uKCdjbGljay56Zi5hY2NvcmRpb24nLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIC8vICQodGhpcykuY2hpbGRyZW4oJ2EnKS5vbignY2xpY2suemYuYWNjb3JkaW9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAoJGVsZW0uaGFzQ2xhc3MoJ2lzLWFjdGl2ZScpKSB7XG4gICAgICAgICAgICBpZihfdGhpcy5vcHRpb25zLmFsbG93QWxsQ2xvc2VkIHx8ICRlbGVtLnNpYmxpbmdzKCkuaGFzQ2xhc3MoJ2lzLWFjdGl2ZScpKXtcbiAgICAgICAgICAgICAgX3RoaXMudXAoJHRhYkNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRvd24oJHRhYkNvbnRlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkub24oJ2tleWRvd24uemYuYWNjb3JkaW9uJywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC5oYW5kbGVLZXkoZSwgJ0FjY29yZGlvbicsIHtcbiAgICAgICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIF90aGlzLnRvZ2dsZSgkdGFiQ29udGVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciAkYSA9ICRlbGVtLm5leHQoKS5maW5kKCdhJykuZm9jdXMoKTtcbiAgICAgICAgICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLm11bHRpRXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgJGEudHJpZ2dlcignY2xpY2suemYuYWNjb3JkaW9uJylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpb3VzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyICRhID0gJGVsZW0ucHJldigpLmZpbmQoJ2EnKS5mb2N1cygpO1xuICAgICAgICAgICAgICBpZiAoIV90aGlzLm9wdGlvbnMubXVsdGlFeHBhbmQpIHtcbiAgICAgICAgICAgICAgICAkYS50cmlnZ2VyKCdjbGljay56Zi5hY2NvcmRpb24nKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgc2VsZWN0ZWQgY29udGVudCBwYW5lJ3Mgb3Blbi9jbG9zZSBzdGF0ZS5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBqUXVlcnkgb2JqZWN0IG9mIHRoZSBwYW5lIHRvIHRvZ2dsZS5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICB0b2dnbGUoJHRhcmdldCkge1xuICAgIGlmKCR0YXJnZXQucGFyZW50KCkuaGFzQ2xhc3MoJ2lzLWFjdGl2ZScpKSB7XG4gICAgICBpZih0aGlzLm9wdGlvbnMuYWxsb3dBbGxDbG9zZWQgfHwgJHRhcmdldC5wYXJlbnQoKS5zaWJsaW5ncygpLmhhc0NsYXNzKCdpcy1hY3RpdmUnKSl7XG4gICAgICAgIHRoaXMudXAoJHRhcmdldCk7XG4gICAgICB9IGVsc2UgeyByZXR1cm47IH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb3duKCR0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgYWNjb3JkaW9uIHRhYiBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBBY2NvcmRpb24gcGFuZSB0byBvcGVuLlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGZpcnN0VGltZSAtIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIHJlZmxvdyBzaG91bGQgaGFwcGVuLlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uI2Rvd25cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkb3duKCR0YXJnZXQsIGZpcnN0VGltZSkge1xuICAgIGlmICghdGhpcy5vcHRpb25zLm11bHRpRXhwYW5kICYmICFmaXJzdFRpbWUpIHtcbiAgICAgIHZhciAkY3VycmVudEFjdGl2ZSA9IHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oJy5pcy1hY3RpdmUnKS5jaGlsZHJlbignW2RhdGEtdGFiLWNvbnRlbnRdJyk7XG4gICAgICBpZigkY3VycmVudEFjdGl2ZS5sZW5ndGgpe1xuICAgICAgICB0aGlzLnVwKCRjdXJyZW50QWN0aXZlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkdGFyZ2V0XG4gICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCBmYWxzZSlcbiAgICAgIC5wYXJlbnQoJ1tkYXRhLXRhYi1jb250ZW50XScpXG4gICAgICAuYWRkQmFjaygpXG4gICAgICAucGFyZW50KCkuYWRkQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuXG4gICAgJHRhcmdldC5zbGlkZURvd24odGhpcy5vcHRpb25zLnNsaWRlU3BlZWQsICgpID0+IHtcbiAgICAgIC8qKlxuICAgICAgICogRmlyZXMgd2hlbiB0aGUgdGFiIGlzIGRvbmUgb3BlbmluZy5cbiAgICAgICAqIEBldmVudCBBY2NvcmRpb24jZG93blxuICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Rvd24uemYuYWNjb3JkaW9uJywgWyR0YXJnZXRdKTtcbiAgICB9KTtcblxuICAgICQoYCMkeyR0YXJnZXQuYXR0cignYXJpYS1sYWJlbGxlZGJ5Jyl9YCkuYXR0cih7XG4gICAgICAnYXJpYS1leHBhbmRlZCc6IHRydWUsXG4gICAgICAnYXJpYS1zZWxlY3RlZCc6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIHRhYiBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBBY2NvcmRpb24gdGFiIHRvIGNsb3NlLlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uI3VwXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgdXAoJHRhcmdldCkge1xuICAgIHZhciAkYXVudHMgPSAkdGFyZ2V0LnBhcmVudCgpLnNpYmxpbmdzKCksXG4gICAgICAgIF90aGlzID0gdGhpcztcbiAgICB2YXIgY2FuQ2xvc2UgPSB0aGlzLm9wdGlvbnMubXVsdGlFeHBhbmQgPyAkYXVudHMuaGFzQ2xhc3MoJ2lzLWFjdGl2ZScpIDogJHRhcmdldC5wYXJlbnQoKS5oYXNDbGFzcygnaXMtYWN0aXZlJyk7XG5cbiAgICBpZighdGhpcy5vcHRpb25zLmFsbG93QWxsQ2xvc2VkICYmICFjYW5DbG9zZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZvdW5kYXRpb24uTW92ZSh0aGlzLm9wdGlvbnMuc2xpZGVTcGVlZCwgJHRhcmdldCwgZnVuY3Rpb24oKXtcbiAgICAgICR0YXJnZXQuc2xpZGVVcChfdGhpcy5vcHRpb25zLnNsaWRlU3BlZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHRhYiBpcyBkb25lIGNvbGxhcHNpbmcgdXAuXG4gICAgICAgICAqIEBldmVudCBBY2NvcmRpb24jdXBcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3VwLnpmLmFjY29yZGlvbicsIFskdGFyZ2V0XSk7XG4gICAgICB9KTtcbiAgICAvLyB9KTtcblxuICAgICR0YXJnZXQuYXR0cignYXJpYS1oaWRkZW4nLCB0cnVlKVxuICAgICAgICAgICAucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuXG4gICAgJChgIyR7JHRhcmdldC5hdHRyKCdhcmlhLWxhYmVsbGVkYnknKX1gKS5hdHRyKHtcbiAgICAgJ2FyaWEtZXhwYW5kZWQnOiBmYWxzZSxcbiAgICAgJ2FyaWEtc2VsZWN0ZWQnOiBmYWxzZVxuICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgYW4gYWNjb3JkaW9uLlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uI2Rlc3Ryb3llZFxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS10YWItY29udGVudF0nKS5zbGlkZVVwKDApLmNzcygnZGlzcGxheScsICcnKTtcbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2EnKS5vZmYoJy56Zi5hY2NvcmRpb24nKTtcblxuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfVxufVxuXG5BY2NvcmRpb24uZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdGltZSB0byBhbmltYXRlIHRoZSBvcGVuaW5nIG9mIGFuIGFjY29yZGlvbiBwYW5lLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDI1MFxuICAgKi9cbiAgc2xpZGVTcGVlZDogMjUwLFxuICAvKipcbiAgICogQWxsb3cgdGhlIGFjY29yZGlvbiB0byBoYXZlIG11bHRpcGxlIG9wZW4gcGFuZXMuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIG11bHRpRXhwYW5kOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93IHRoZSBhY2NvcmRpb24gdG8gY2xvc2UgYWxsIHBhbmVzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBhbGxvd0FsbENsb3NlZDogZmFsc2Vcbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihBY2NvcmRpb24sICdBY2NvcmRpb24nKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIEFjY29yZGlvbk1lbnUgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmFjY29yZGlvbk1lbnVcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubW90aW9uXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm5lc3RcbiAqL1xuXG5jbGFzcyBBY2NvcmRpb25NZW51IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gYWNjb3JkaW9uIG1lbnUuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgQWNjb3JkaW9uTWVudSNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYW4gYWNjb3JkaW9uIG1lbnUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgQWNjb3JkaW9uTWVudS5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgRm91bmRhdGlvbi5OZXN0LkZlYXRoZXIodGhpcy4kZWxlbWVudCwgJ2FjY29yZGlvbicpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnQWNjb3JkaW9uTWVudScpO1xuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ0FjY29yZGlvbk1lbnUnLCB7XG4gICAgICAnRU5URVInOiAndG9nZ2xlJyxcbiAgICAgICdTUEFDRSc6ICd0b2dnbGUnLFxuICAgICAgJ0FSUk9XX1JJR0hUJzogJ29wZW4nLFxuICAgICAgJ0FSUk9XX1VQJzogJ3VwJyxcbiAgICAgICdBUlJPV19ET1dOJzogJ2Rvd24nLFxuICAgICAgJ0FSUk9XX0xFRlQnOiAnY2xvc2UnLFxuICAgICAgJ0VTQ0FQRSc6ICdjbG9zZUFsbCcsXG4gICAgICAnVEFCJzogJ2Rvd24nLFxuICAgICAgJ1NISUZUX1RBQic6ICd1cCdcbiAgICB9KTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGFjY29yZGlvbiBtZW51IGJ5IGhpZGluZyBhbGwgbmVzdGVkIG1lbnVzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1zdWJtZW51XScpLm5vdCgnLmlzLWFjdGl2ZScpLnNsaWRlVXAoMCk7Ly8uZmluZCgnYScpLmNzcygncGFkZGluZy1sZWZ0JywgJzFyZW0nKTtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoe1xuICAgICAgJ3JvbGUnOiAndGFibGlzdCcsXG4gICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiB0aGlzLm9wdGlvbnMubXVsdGlPcGVuXG4gICAgfSk7XG5cbiAgICB0aGlzLiRtZW51TGlua3MgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQnKTtcbiAgICB0aGlzLiRtZW51TGlua3MuZWFjaChmdW5jdGlvbigpe1xuICAgICAgdmFyIGxpbmtJZCA9IHRoaXMuaWQgfHwgRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAnYWNjLW1lbnUtbGluaycpLFxuICAgICAgICAgICRlbGVtID0gJCh0aGlzKSxcbiAgICAgICAgICAkc3ViID0gJGVsZW0uY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJyksXG4gICAgICAgICAgc3ViSWQgPSAkc3ViWzBdLmlkIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ2FjYy1tZW51JyksXG4gICAgICAgICAgaXNBY3RpdmUgPSAkc3ViLmhhc0NsYXNzKCdpcy1hY3RpdmUnKTtcbiAgICAgICRlbGVtLmF0dHIoe1xuICAgICAgICAnYXJpYS1jb250cm9scyc6IHN1YklkLFxuICAgICAgICAnYXJpYS1leHBhbmRlZCc6IGlzQWN0aXZlLFxuICAgICAgICAncm9sZSc6ICd0YWInLFxuICAgICAgICAnaWQnOiBsaW5rSWRcbiAgICAgIH0pO1xuICAgICAgJHN1Yi5hdHRyKHtcbiAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IGxpbmtJZCxcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogIWlzQWN0aXZlLFxuICAgICAgICAncm9sZSc6ICd0YWJwYW5lbCcsXG4gICAgICAgICdpZCc6IHN1YklkXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB2YXIgaW5pdFBhbmVzID0gdGhpcy4kZWxlbWVudC5maW5kKCcuaXMtYWN0aXZlJyk7XG4gICAgaWYoaW5pdFBhbmVzLmxlbmd0aCl7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgaW5pdFBhbmVzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgX3RoaXMuZG93bigkKHRoaXMpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGhhbmRsZXJzIGZvciBpdGVtcyB3aXRoaW4gdGhlIG1lbnUuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIHZhciAkc3VibWVudSA9ICQodGhpcykuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJyk7XG5cbiAgICAgIGlmICgkc3VibWVudS5sZW5ndGgpIHtcbiAgICAgICAgJCh0aGlzKS5jaGlsZHJlbignYScpLm9mZignY2xpY2suemYuYWNjb3JkaW9uTWVudScpLm9uKCdjbGljay56Zi5hY2NvcmRpb25NZW51JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIF90aGlzLnRvZ2dsZSgkc3VibWVudSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLm9uKCdrZXlkb3duLnpmLmFjY29yZGlvbm1lbnUnLCBmdW5jdGlvbihlKXtcbiAgICAgIHZhciAkZWxlbWVudCA9ICQodGhpcyksXG4gICAgICAgICAgJGVsZW1lbnRzID0gJGVsZW1lbnQucGFyZW50KCd1bCcpLmNoaWxkcmVuKCdsaScpLFxuICAgICAgICAgICRwcmV2RWxlbWVudCxcbiAgICAgICAgICAkbmV4dEVsZW1lbnQsXG4gICAgICAgICAgJHRhcmdldCA9ICRlbGVtZW50LmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpO1xuXG4gICAgICAkZWxlbWVudHMuZWFjaChmdW5jdGlvbihpKSB7XG4gICAgICAgIGlmICgkKHRoaXMpLmlzKCRlbGVtZW50KSkge1xuICAgICAgICAgICRwcmV2RWxlbWVudCA9ICRlbGVtZW50cy5lcShNYXRoLm1heCgwLCBpLTEpKS5maW5kKCdhJykuZmlyc3QoKTtcbiAgICAgICAgICAkbmV4dEVsZW1lbnQgPSAkZWxlbWVudHMuZXEoTWF0aC5taW4oaSsxLCAkZWxlbWVudHMubGVuZ3RoLTEpKS5maW5kKCdhJykuZmlyc3QoKTtcblxuICAgICAgICAgIGlmICgkKHRoaXMpLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XTp2aXNpYmxlJykubGVuZ3RoKSB7IC8vIGhhcyBvcGVuIHN1YiBtZW51XG4gICAgICAgICAgICAkbmV4dEVsZW1lbnQgPSAkZWxlbWVudC5maW5kKCdsaTpmaXJzdC1jaGlsZCcpLmZpbmQoJ2EnKS5maXJzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJCh0aGlzKS5pcygnOmZpcnN0LWNoaWxkJykpIHsgLy8gaXMgZmlyc3QgZWxlbWVudCBvZiBzdWIgbWVudVxuICAgICAgICAgICAgJHByZXZFbGVtZW50ID0gJGVsZW1lbnQucGFyZW50cygnbGknKS5maXJzdCgpLmZpbmQoJ2EnKS5maXJzdCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJHByZXZFbGVtZW50LmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XTp2aXNpYmxlJykubGVuZ3RoKSB7IC8vIGlmIHByZXZpb3VzIGVsZW1lbnQgaGFzIG9wZW4gc3ViIG1lbnVcbiAgICAgICAgICAgICRwcmV2RWxlbWVudCA9ICRwcmV2RWxlbWVudC5maW5kKCdsaTpsYXN0LWNoaWxkJykuZmluZCgnYScpLmZpcnN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkKHRoaXMpLmlzKCc6bGFzdC1jaGlsZCcpKSB7IC8vIGlzIGxhc3QgZWxlbWVudCBvZiBzdWIgbWVudVxuICAgICAgICAgICAgJG5leHRFbGVtZW50ID0gJGVsZW1lbnQucGFyZW50cygnbGknKS5maXJzdCgpLm5leHQoJ2xpJykuZmluZCgnYScpLmZpcnN0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQuaGFuZGxlS2V5KGUsICdBY2NvcmRpb25NZW51Jywge1xuICAgICAgICBvcGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoJHRhcmdldC5pcygnOmhpZGRlbicpKSB7XG4gICAgICAgICAgICBfdGhpcy5kb3duKCR0YXJnZXQpO1xuICAgICAgICAgICAgJHRhcmdldC5maW5kKCdsaScpLmZpcnN0KCkuZmluZCgnYScpLmZpcnN0KCkuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoJHRhcmdldC5sZW5ndGggJiYgISR0YXJnZXQuaXMoJzpoaWRkZW4nKSkgeyAvLyBjbG9zZSBhY3RpdmUgc3ViIG9mIHRoaXMgaXRlbVxuICAgICAgICAgICAgX3RoaXMudXAoJHRhcmdldCk7XG4gICAgICAgICAgfSBlbHNlIGlmICgkZWxlbWVudC5wYXJlbnQoJ1tkYXRhLXN1Ym1lbnVdJykubGVuZ3RoKSB7IC8vIGNsb3NlIGN1cnJlbnRseSBvcGVuIHN1YlxuICAgICAgICAgICAgX3RoaXMudXAoJGVsZW1lbnQucGFyZW50KCdbZGF0YS1zdWJtZW51XScpKTtcbiAgICAgICAgICAgICRlbGVtZW50LnBhcmVudHMoJ2xpJykuZmlyc3QoKS5maW5kKCdhJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRwcmV2RWxlbWVudC5hdHRyKCd0YWJpbmRleCcsIC0xKS5mb2N1cygpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZG93bjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJG5leHRFbGVtZW50LmF0dHIoJ3RhYmluZGV4JywgLTEpLmZvY3VzKCk7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICgkZWxlbWVudC5jaGlsZHJlbignW2RhdGEtc3VibWVudV0nKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIF90aGlzLnRvZ2dsZSgkZWxlbWVudC5jaGlsZHJlbignW2RhdGEtc3VibWVudV0nKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjbG9zZUFsbDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgX3RoaXMuaGlkZUFsbCgpO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTsvLy5hdHRyKCd0YWJpbmRleCcsIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyBhbGwgcGFuZXMgb2YgdGhlIG1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgaGlkZUFsbCgpIHtcbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLXN1Ym1lbnVdJykuc2xpZGVVcCh0aGlzLm9wdGlvbnMuc2xpZGVTcGVlZCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgb3Blbi9jbG9zZSBzdGF0ZSBvZiBhIHN1Ym1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHRhcmdldCAtIHRoZSBzdWJtZW51IHRvIHRvZ2dsZVxuICAgKi9cbiAgdG9nZ2xlKCR0YXJnZXQpe1xuICAgIGlmKCEkdGFyZ2V0LmlzKCc6YW5pbWF0ZWQnKSkge1xuICAgICAgaWYgKCEkdGFyZ2V0LmlzKCc6aGlkZGVuJykpIHtcbiAgICAgICAgdGhpcy51cCgkdGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmRvd24oJHRhcmdldCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBzdWItbWVudSBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBTdWItbWVudSB0byBvcGVuLlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uTWVudSNkb3duXG4gICAqL1xuICBkb3duKCR0YXJnZXQpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYoIXRoaXMub3B0aW9ucy5tdWx0aU9wZW4pIHtcbiAgICAgIHRoaXMudXAodGhpcy4kZWxlbWVudC5maW5kKCcuaXMtYWN0aXZlJykubm90KCR0YXJnZXQucGFyZW50c1VudGlsKHRoaXMuJGVsZW1lbnQpLmFkZCgkdGFyZ2V0KSkpO1xuICAgIH1cblxuICAgICR0YXJnZXQuYWRkQ2xhc3MoJ2lzLWFjdGl2ZScpLmF0dHIoeydhcmlhLWhpZGRlbic6IGZhbHNlfSlcbiAgICAgIC5wYXJlbnQoJy5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQnKS5hdHRyKHsnYXJpYS1leHBhbmRlZCc6IHRydWV9KTtcblxuICAgICAgRm91bmRhdGlvbi5Nb3ZlKHRoaXMub3B0aW9ucy5zbGlkZVNwZWVkLCAkdGFyZ2V0LCBmdW5jdGlvbigpIHtcbiAgICAgICAgJHRhcmdldC5zbGlkZURvd24oX3RoaXMub3B0aW9ucy5zbGlkZVNwZWVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgbWVudSBpcyBkb25lIG9wZW5pbmcuXG4gICAgICAgICAgICogQGV2ZW50IEFjY29yZGlvbk1lbnUjZG93blxuICAgICAgICAgICAqL1xuICAgICAgICAgIF90aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Rvd24uemYuYWNjb3JkaW9uTWVudScsIFskdGFyZ2V0XSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBzdWItbWVudSBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC4gQWxsIHN1Yi1tZW51cyBpbnNpZGUgdGhlIHRhcmdldCB3aWxsIGJlIGNsb3NlZCBhcyB3ZWxsLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHRhcmdldCAtIFN1Yi1tZW51IHRvIGNsb3NlLlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uTWVudSN1cFxuICAgKi9cbiAgdXAoJHRhcmdldCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgRm91bmRhdGlvbi5Nb3ZlKHRoaXMub3B0aW9ucy5zbGlkZVNwZWVkLCAkdGFyZ2V0LCBmdW5jdGlvbigpe1xuICAgICAgJHRhcmdldC5zbGlkZVVwKF90aGlzLm9wdGlvbnMuc2xpZGVTcGVlZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgbWVudSBpcyBkb25lIGNvbGxhcHNpbmcgdXAuXG4gICAgICAgICAqIEBldmVudCBBY2NvcmRpb25NZW51I3VwXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy4kZWxlbWVudC50cmlnZ2VyKCd1cC56Zi5hY2NvcmRpb25NZW51JywgWyR0YXJnZXRdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyICRtZW51cyA9ICR0YXJnZXQuZmluZCgnW2RhdGEtc3VibWVudV0nKS5zbGlkZVVwKDApLmFkZEJhY2soKS5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuXG4gICAgJG1lbnVzLnBhcmVudCgnLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCcpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgYWNjb3JkaW9uIG1lbnUuXG4gICAqIEBmaXJlcyBBY2NvcmRpb25NZW51I2Rlc3Ryb3llZFxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLXN1Ym1lbnVdJykuc2xpZGVEb3duKDApLmNzcygnZGlzcGxheScsICcnKTtcbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2EnKS5vZmYoJ2NsaWNrLnpmLmFjY29yZGlvbk1lbnUnKTtcblxuICAgIEZvdW5kYXRpb24uTmVzdC5CdXJuKHRoaXMuJGVsZW1lbnQsICdhY2NvcmRpb24nKTtcbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuQWNjb3JkaW9uTWVudS5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIHRvIGFuaW1hdGUgdGhlIG9wZW5pbmcgb2YgYSBzdWJtZW51IGluIG1zLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDI1MFxuICAgKi9cbiAgc2xpZGVTcGVlZDogMjUwLFxuICAvKipcbiAgICogQWxsb3cgdGhlIG1lbnUgdG8gaGF2ZSBtdWx0aXBsZSBvcGVuIHBhbmVzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIG11bHRpT3BlbjogdHJ1ZVxufTtcblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKEFjY29yZGlvbk1lbnUsICdBY2NvcmRpb25NZW51Jyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBEcmlsbGRvd24gbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmRyaWxsZG93blxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5rZXlib2FyZFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tb3Rpb25cbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubmVzdFxuICovXG5cbmNsYXNzIERyaWxsZG93biB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGEgZHJpbGxkb3duIG1lbnUuXG4gICAqIEBjbGFzc1xuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBpbnRvIGFuIGFjY29yZGlvbiBtZW51LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIERyaWxsZG93bi5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgRm91bmRhdGlvbi5OZXN0LkZlYXRoZXIodGhpcy4kZWxlbWVudCwgJ2RyaWxsZG93bicpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnRHJpbGxkb3duJyk7XG4gICAgRm91bmRhdGlvbi5LZXlib2FyZC5yZWdpc3RlcignRHJpbGxkb3duJywge1xuICAgICAgJ0VOVEVSJzogJ29wZW4nLFxuICAgICAgJ1NQQUNFJzogJ29wZW4nLFxuICAgICAgJ0FSUk9XX1JJR0hUJzogJ25leHQnLFxuICAgICAgJ0FSUk9XX1VQJzogJ3VwJyxcbiAgICAgICdBUlJPV19ET1dOJzogJ2Rvd24nLFxuICAgICAgJ0FSUk9XX0xFRlQnOiAncHJldmlvdXMnLFxuICAgICAgJ0VTQ0FQRSc6ICdjbG9zZScsXG4gICAgICAnVEFCJzogJ2Rvd24nLFxuICAgICAgJ1NISUZUX1RBQic6ICd1cCdcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgZHJpbGxkb3duIGJ5IGNyZWF0aW5nIGpRdWVyeSBjb2xsZWN0aW9ucyBvZiBlbGVtZW50c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdGhpcy4kc3VibWVudUFuY2hvcnMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmlzLWRyaWxsZG93bi1zdWJtZW51LXBhcmVudCcpLmNoaWxkcmVuKCdhJyk7XG4gICAgdGhpcy4kc3VibWVudXMgPSB0aGlzLiRzdWJtZW51QW5jaG9ycy5wYXJlbnQoJ2xpJykuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJyk7XG4gICAgdGhpcy4kbWVudUl0ZW1zID0gdGhpcy4kZWxlbWVudC5maW5kKCdsaScpLm5vdCgnLmpzLWRyaWxsZG93bi1iYWNrJykuYXR0cigncm9sZScsICdtZW51aXRlbScpLmZpbmQoJ2EnKTtcblxuICAgIHRoaXMuX3ByZXBhcmVNZW51KCk7XG5cbiAgICB0aGlzLl9rZXlib2FyZEV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIHByZXBhcmVzIGRyaWxsZG93biBtZW51IGJ5IHNldHRpbmcgYXR0cmlidXRlcyB0byBsaW5rcyBhbmQgZWxlbWVudHNcbiAgICogc2V0cyBhIG1pbiBoZWlnaHQgdG8gcHJldmVudCBjb250ZW50IGp1bXBpbmdcbiAgICogd3JhcHMgdGhlIGVsZW1lbnQgaWYgbm90IGFscmVhZHkgd3JhcHBlZFxuICAgKiBAcHJpdmF0ZVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIF9wcmVwYXJlTWVudSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIC8vIGlmKCF0aGlzLm9wdGlvbnMuaG9sZE9wZW4pe1xuICAgIC8vICAgdGhpcy5fbWVudUxpbmtFdmVudHMoKTtcbiAgICAvLyB9XG4gICAgdGhpcy4kc3VibWVudUFuY2hvcnMuZWFjaChmdW5jdGlvbigpe1xuICAgICAgdmFyICRzdWIgPSAkKHRoaXMpO1xuICAgICAgdmFyICRsaW5rID0gJHN1Yi5maW5kKCdhOmZpcnN0Jyk7XG4gICAgICBpZihfdGhpcy5vcHRpb25zLnBhcmVudExpbmspe1xuICAgICAgICAkbGluay5jbG9uZSgpLnByZXBlbmRUbygkc3ViLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpKS53cmFwKCc8bGkgY2xhc3M9XCJpcy1zdWJtZW51LXBhcmVudC1pdGVtIGlzLXN1Ym1lbnUtaXRlbSBpcy1kcmlsbGRvd24tc3VibWVudS1pdGVtXCIgcm9sZT1cIm1lbnUtaXRlbVwiPjwvbGk+Jyk7XG4gICAgICB9XG4gICAgICAkbGluay5kYXRhKCdzYXZlZEhyZWYnLCAkbGluay5hdHRyKCdocmVmJykpLnJlbW92ZUF0dHIoJ2hyZWYnKTtcbiAgICAgICRzdWIuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJylcbiAgICAgICAgICAuYXR0cih7XG4gICAgICAgICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlLFxuICAgICAgICAgICAgJ3RhYmluZGV4JzogMCxcbiAgICAgICAgICAgICdyb2xlJzogJ21lbnUnXG4gICAgICAgICAgfSk7XG4gICAgICBfdGhpcy5fZXZlbnRzKCRzdWIpO1xuICAgIH0pO1xuICAgIHRoaXMuJHN1Ym1lbnVzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIHZhciAkbWVudSA9ICQodGhpcyksXG4gICAgICAgICAgJGJhY2sgPSAkbWVudS5maW5kKCcuanMtZHJpbGxkb3duLWJhY2snKTtcbiAgICAgIGlmKCEkYmFjay5sZW5ndGgpe1xuICAgICAgICAkbWVudS5wcmVwZW5kKF90aGlzLm9wdGlvbnMuYmFja0J1dHRvbik7XG4gICAgICB9XG4gICAgICBfdGhpcy5fYmFjaygkbWVudSk7XG4gICAgfSk7XG4gICAgaWYoIXRoaXMuJGVsZW1lbnQucGFyZW50KCkuaGFzQ2xhc3MoJ2lzLWRyaWxsZG93bicpKXtcbiAgICAgIHRoaXMuJHdyYXBwZXIgPSAkKHRoaXMub3B0aW9ucy53cmFwcGVyKS5hZGRDbGFzcygnaXMtZHJpbGxkb3duJykuY3NzKHRoaXMuX2dldE1heERpbXMoKSk7XG4gICAgICB0aGlzLiRlbGVtZW50LndyYXAodGhpcy4kd3JhcHBlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgaGFuZGxlcnMgdG8gZWxlbWVudHMgaW4gdGhlIG1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW0gLSB0aGUgY3VycmVudCBtZW51IGl0ZW0gdG8gYWRkIGhhbmRsZXJzIHRvLlxuICAgKi9cbiAgX2V2ZW50cygkZWxlbSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAkZWxlbS5vZmYoJ2NsaWNrLnpmLmRyaWxsZG93bicpXG4gICAgLm9uKCdjbGljay56Zi5kcmlsbGRvd24nLCBmdW5jdGlvbihlKXtcbiAgICAgIGlmKCQoZS50YXJnZXQpLnBhcmVudHNVbnRpbCgndWwnLCAnbGknKS5oYXNDbGFzcygnaXMtZHJpbGxkb3duLXN1Ym1lbnUtcGFyZW50Jykpe1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmKGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQuZmlyc3RFbGVtZW50Q2hpbGQpe1xuICAgICAgLy8gICByZXR1cm4gZmFsc2U7XG4gICAgICAvLyB9XG4gICAgICBfdGhpcy5fc2hvdygkZWxlbS5wYXJlbnQoJ2xpJykpO1xuXG4gICAgICBpZihfdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayl7XG4gICAgICAgIHZhciAkYm9keSA9ICQoJ2JvZHknKS5ub3QoX3RoaXMuJHdyYXBwZXIpO1xuICAgICAgICAkYm9keS5vZmYoJy56Zi5kcmlsbGRvd24nKS5vbignY2xpY2suemYuZHJpbGxkb3duJywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIF90aGlzLl9oaWRlQWxsKCk7XG4gICAgICAgICAgJGJvZHkub2ZmKCcuemYuZHJpbGxkb3duJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMga2V5ZG93biBldmVudCBsaXN0ZW5lciB0byBgbGlgJ3MgaW4gdGhlIG1lbnUuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfa2V5Ym9hcmRFdmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICBcbiAgICB0aGlzLiRtZW51SXRlbXMuYWRkKHRoaXMuJGVsZW1lbnQuZmluZCgnLmpzLWRyaWxsZG93bi1iYWNrID4gYScpKS5vbigna2V5ZG93bi56Zi5kcmlsbGRvd24nLCBmdW5jdGlvbihlKXtcbiAgICAgIFxuICAgICAgdmFyICRlbGVtZW50ID0gJCh0aGlzKSxcbiAgICAgICAgICAkZWxlbWVudHMgPSAkZWxlbWVudC5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpLmNoaWxkcmVuKCdsaScpLmNoaWxkcmVuKCdhJyksXG4gICAgICAgICAgJHByZXZFbGVtZW50LFxuICAgICAgICAgICRuZXh0RWxlbWVudDtcblxuICAgICAgJGVsZW1lbnRzLmVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICBpZiAoJCh0aGlzKS5pcygkZWxlbWVudCkpIHtcbiAgICAgICAgICAkcHJldkVsZW1lbnQgPSAkZWxlbWVudHMuZXEoTWF0aC5tYXgoMCwgaS0xKSk7XG4gICAgICAgICAgJG5leHRFbGVtZW50ID0gJGVsZW1lbnRzLmVxKE1hdGgubWluKGkrMSwgJGVsZW1lbnRzLmxlbmd0aC0xKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC5oYW5kbGVLZXkoZSwgJ0RyaWxsZG93bicsIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCRlbGVtZW50LmlzKF90aGlzLiRzdWJtZW51QW5jaG9ycykpIHtcbiAgICAgICAgICAgIF90aGlzLl9zaG93KCRlbGVtZW50LnBhcmVudCgnbGknKSk7XG4gICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoJ2xpJykub25lKEZvdW5kYXRpb24udHJhbnNpdGlvbmVuZCgkZWxlbWVudCksIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgnbGknKS5maW5kKCd1bCBsaSBhJykuZmlsdGVyKF90aGlzLiRtZW51SXRlbXMpLmZpcnN0KCkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF90aGlzLl9oaWRlKCRlbGVtZW50LnBhcmVudCgnbGknKS5wYXJlbnQoJ3VsJykpO1xuICAgICAgICAgICRlbGVtZW50LnBhcmVudCgnbGknKS5wYXJlbnQoJ3VsJykub25lKEZvdW5kYXRpb24udHJhbnNpdGlvbmVuZCgkZWxlbWVudCksIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpLnBhcmVudCgnbGknKS5jaGlsZHJlbignYScpLmZpcnN0KCkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRwcmV2RWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZG93bjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJG5leHRFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9LFxuICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgX3RoaXMuX2JhY2soKTtcbiAgICAgICAgICAvL190aGlzLiRtZW51SXRlbXMuZmlyc3QoKS5mb2N1cygpOyAvLyBmb2N1cyB0byBmaXJzdCBlbGVtZW50XG4gICAgICAgIH0sXG4gICAgICAgIG9wZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghJGVsZW1lbnQuaXMoX3RoaXMuJG1lbnVJdGVtcykpIHsgLy8gbm90IG1lbnUgaXRlbSBtZWFucyBiYWNrIGJ1dHRvblxuICAgICAgICAgICAgX3RoaXMuX2hpZGUoJGVsZW1lbnQucGFyZW50KCdsaScpLnBhcmVudCgndWwnKSk7XG4gICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpLm9uZShGb3VuZGF0aW9uLnRyYW5zaXRpb25lbmQoJGVsZW1lbnQpLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgnbGknKS5wYXJlbnQoJ3VsJykucGFyZW50KCdsaScpLmNoaWxkcmVuKCdhJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIH0pOyAgICAgICAgICAgIFxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJGVsZW1lbnQuaXMoX3RoaXMuJHN1Ym1lbnVBbmNob3JzKSkge1xuICAgICAgICAgICAgX3RoaXMuX3Nob3coJGVsZW1lbnQucGFyZW50KCdsaScpKTtcbiAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgnbGknKS5vbmUoRm91bmRhdGlvbi50cmFuc2l0aW9uZW5kKCRlbGVtZW50KSwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCdsaScpLmZpbmQoJ3VsIGxpIGEnKS5maWx0ZXIoX3RoaXMuJG1lbnVJdGVtcykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTsgLy8gZW5kIGtleWJvYXJkQWNjZXNzXG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIGFsbCBvcGVuIGVsZW1lbnRzLCBhbmQgcmV0dXJucyB0byByb290IG1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgRHJpbGxkb3duI2Nsb3NlZFxuICAgKi9cbiAgX2hpZGVBbGwoKSB7XG4gICAgdmFyICRlbGVtID0gdGhpcy4kZWxlbWVudC5maW5kKCcuaXMtZHJpbGxkb3duLXN1Ym1lbnUuaXMtYWN0aXZlJykuYWRkQ2xhc3MoJ2lzLWNsb3NpbmcnKTtcbiAgICAkZWxlbS5vbmUoRm91bmRhdGlvbi50cmFuc2l0aW9uZW5kKCRlbGVtKSwgZnVuY3Rpb24oZSl7XG4gICAgICAkZWxlbS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlIGlzLWNsb3NpbmcnKTtcbiAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIG1lbnUgaXMgZnVsbHkgY2xvc2VkLlxuICAgICAgICAgKiBAZXZlbnQgRHJpbGxkb3duI2Nsb3NlZFxuICAgICAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Nsb3NlZC56Zi5kcmlsbGRvd24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVyIGZvciBlYWNoIGBiYWNrYCBidXR0b24sIGFuZCBjbG9zZXMgb3BlbiBtZW51cy5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBEcmlsbGRvd24jYmFja1xuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW0gLSB0aGUgY3VycmVudCBzdWItbWVudSB0byBhZGQgYGJhY2tgIGV2ZW50LlxuICAgKi9cbiAgX2JhY2soJGVsZW0pIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICRlbGVtLm9mZignY2xpY2suemYuZHJpbGxkb3duJyk7XG4gICAgJGVsZW0uY2hpbGRyZW4oJy5qcy1kcmlsbGRvd24tYmFjaycpXG4gICAgICAub24oJ2NsaWNrLnpmLmRyaWxsZG93bicsIGZ1bmN0aW9uKGUpe1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnbW91c2V1cCBvbiBiYWNrJyk7XG4gICAgICAgIF90aGlzLl9oaWRlKCRlbGVtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgbGlzdGVuZXIgdG8gbWVudSBpdGVtcyB3L28gc3VibWVudXMgdG8gY2xvc2Ugb3BlbiBtZW51cyBvbiBjbGljay5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWVudUxpbmtFdmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLiRtZW51SXRlbXMubm90KCcuaXMtZHJpbGxkb3duLXN1Ym1lbnUtcGFyZW50JylcbiAgICAgICAgLm9mZignY2xpY2suemYuZHJpbGxkb3duJylcbiAgICAgICAgLm9uKCdjbGljay56Zi5kcmlsbGRvd24nLCBmdW5jdGlvbihlKXtcbiAgICAgICAgICAvLyBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIF90aGlzLl9oaWRlQWxsKCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIHN1Ym1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgRHJpbGxkb3duI29wZW5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICRlbGVtIC0gdGhlIGN1cnJlbnQgZWxlbWVudCB3aXRoIGEgc3VibWVudSB0byBvcGVuLCBpLmUuIHRoZSBgbGlgIHRhZy5cbiAgICovXG4gIF9zaG93KCRlbGVtKSB7XG4gICAgJGVsZW0uY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJykuYWRkQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdvcGVuLnpmLmRyaWxsZG93bicsIFskZWxlbV0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBIaWRlcyBhIHN1Ym1lbnVcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBEcmlsbGRvd24jaGlkZVxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW0gLSB0aGUgY3VycmVudCBzdWItbWVudSB0byBoaWRlLCBpLmUuIHRoZSBgdWxgIHRhZy5cbiAgICovXG4gIF9oaWRlKCRlbGVtKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAkZWxlbS5hZGRDbGFzcygnaXMtY2xvc2luZycpXG4gICAgICAgICAub25lKEZvdW5kYXRpb24udHJhbnNpdGlvbmVuZCgkZWxlbSksIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICRlbGVtLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUgaXMtY2xvc2luZycpO1xuICAgICAgICAgICAkZWxlbS5ibHVyKCk7XG4gICAgICAgICB9KTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBzdWJtZW51IGlzIGhhcyBjbG9zZWQuXG4gICAgICogQGV2ZW50IERyaWxsZG93biNoaWRlXG4gICAgICovXG4gICAgJGVsZW0udHJpZ2dlcignaGlkZS56Zi5kcmlsbGRvd24nLCBbJGVsZW1dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBuZXN0ZWQgbWVudXMgdG8gY2FsY3VsYXRlIHRoZSBtaW4taGVpZ2h0LCBhbmQgbWF4LXdpZHRoIGZvciB0aGUgbWVudS5cbiAgICogUHJldmVudHMgY29udGVudCBqdW1waW5nLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRNYXhEaW1zKCkge1xuICAgIHZhciBtYXggPSAwLCByZXN1bHQgPSB7fTtcbiAgICB0aGlzLiRzdWJtZW51cy5hZGQodGhpcy4kZWxlbWVudCkuZWFjaChmdW5jdGlvbigpe1xuICAgICAgdmFyIG51bU9mRWxlbXMgPSAkKHRoaXMpLmNoaWxkcmVuKCdsaScpLmxlbmd0aDtcbiAgICAgIG1heCA9IG51bU9mRWxlbXMgPiBtYXggPyBudW1PZkVsZW1zIDogbWF4O1xuICAgIH0pO1xuXG4gICAgcmVzdWx0WydtaW4taGVpZ2h0J10gPSBgJHttYXggKiB0aGlzLiRtZW51SXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0fXB4YDtcbiAgICByZXN1bHRbJ21heC13aWR0aCddID0gYCR7dGhpcy4kZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1weGA7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBEcmlsbGRvd24gTWVudVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5faGlkZUFsbCgpO1xuICAgIEZvdW5kYXRpb24uTmVzdC5CdXJuKHRoaXMuJGVsZW1lbnQsICdkcmlsbGRvd24nKTtcbiAgICB0aGlzLiRlbGVtZW50LnVud3JhcCgpXG4gICAgICAgICAgICAgICAgIC5maW5kKCcuanMtZHJpbGxkb3duLWJhY2ssIC5pcy1zdWJtZW51LXBhcmVudC1pdGVtJykucmVtb3ZlKClcbiAgICAgICAgICAgICAgICAgLmVuZCgpLmZpbmQoJy5pcy1hY3RpdmUsIC5pcy1jbG9zaW5nLCAuaXMtZHJpbGxkb3duLXN1Ym1lbnUnKS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlIGlzLWNsb3NpbmcgaXMtZHJpbGxkb3duLXN1Ym1lbnUnKVxuICAgICAgICAgICAgICAgICAuZW5kKCkuZmluZCgnW2RhdGEtc3VibWVudV0nKS5yZW1vdmVBdHRyKCdhcmlhLWhpZGRlbiB0YWJpbmRleCByb2xlJylcbiAgICAgICAgICAgICAgICAgLm9mZignLnpmLmRyaWxsZG93bicpLmVuZCgpLm9mZignemYuZHJpbGxkb3duJyk7XG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdhJykuZWFjaChmdW5jdGlvbigpe1xuICAgICAgdmFyICRsaW5rID0gJCh0aGlzKTtcbiAgICAgIGlmKCRsaW5rLmRhdGEoJ3NhdmVkSHJlZicpKXtcbiAgICAgICAgJGxpbmsuYXR0cignaHJlZicsICRsaW5rLmRhdGEoJ3NhdmVkSHJlZicpKS5yZW1vdmVEYXRhKCdzYXZlZEhyZWYnKTtcbiAgICAgIH1lbHNleyByZXR1cm47IH1cbiAgICB9KTtcbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH07XG59XG5cbkRyaWxsZG93bi5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIE1hcmt1cCB1c2VkIGZvciBKUyBnZW5lcmF0ZWQgYmFjayBidXR0b24uIFByZXBlbmRlZCB0byBzdWJtZW51IGxpc3RzIGFuZCBkZWxldGVkIG9uIGBkZXN0cm95YCBtZXRob2QsICdqcy1kcmlsbGRvd24tYmFjaycgY2xhc3MgcmVxdWlyZWQuIFJlbW92ZSB0aGUgYmFja3NsYXNoIChgXFxgKSBpZiBjb3B5IGFuZCBwYXN0aW5nLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICc8XFxsaT48XFxhPkJhY2s8XFwvYT48XFwvbGk+J1xuICAgKi9cbiAgYmFja0J1dHRvbjogJzxsaSBjbGFzcz1cImpzLWRyaWxsZG93bi1iYWNrXCI+PGEgdGFiaW5kZXg9XCIwXCI+QmFjazwvYT48L2xpPicsXG4gIC8qKlxuICAgKiBNYXJrdXAgdXNlZCB0byB3cmFwIGRyaWxsZG93biBtZW51LiBVc2UgYSBjbGFzcyBuYW1lIGZvciBpbmRlcGVuZGVudCBzdHlsaW5nOyB0aGUgSlMgYXBwbGllZCBjbGFzczogYGlzLWRyaWxsZG93bmAgaXMgcmVxdWlyZWQuIFJlbW92ZSB0aGUgYmFja3NsYXNoIChgXFxgKSBpZiBjb3B5IGFuZCBwYXN0aW5nLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICc8XFxkaXYgY2xhc3M9XCJpcy1kcmlsbGRvd25cIj48XFwvZGl2PidcbiAgICovXG4gIHdyYXBwZXI6ICc8ZGl2PjwvZGl2PicsXG4gIC8qKlxuICAgKiBBZGRzIHRoZSBwYXJlbnQgbGluayB0byB0aGUgc3VibWVudS5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgcGFyZW50TGluazogZmFsc2UsXG4gIC8qKlxuICAgKiBBbGxvdyB0aGUgbWVudSB0byByZXR1cm4gdG8gcm9vdCBsaXN0IG9uIGJvZHkgY2xpY2suXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIGNsb3NlT25DbGljazogZmFsc2VcbiAgLy8gaG9sZE9wZW46IGZhbHNlXG59O1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oRHJpbGxkb3duLCAnRHJpbGxkb3duJyk7XG5cbn0oalF1ZXJ5KTsiLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogRHJvcGRvd24gbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmRyb3Bkb3duXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmtleWJvYXJkXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmJveFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICovXG5cbmNsYXNzIERyb3Bkb3duIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSBkcm9wZG93bi5cbiAgICogQGNsYXNzXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYSBkcm9wZG93bi5cbiAgICogICAgICAgIE9iamVjdCBzaG91bGQgYmUgb2YgdGhlIGRyb3Bkb3duIHBhbmVsLCByYXRoZXIgdGhhbiBpdHMgYW5jaG9yLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIERyb3Bkb3duLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnRHJvcGRvd24nKTtcbiAgICBGb3VuZGF0aW9uLktleWJvYXJkLnJlZ2lzdGVyKCdEcm9wZG93bicsIHtcbiAgICAgICdFTlRFUic6ICdvcGVuJyxcbiAgICAgICdTUEFDRSc6ICdvcGVuJyxcbiAgICAgICdFU0NBUEUnOiAnY2xvc2UnLFxuICAgICAgJ1RBQic6ICd0YWJfZm9yd2FyZCcsXG4gICAgICAnU0hJRlRfVEFCJzogJ3RhYl9iYWNrd2FyZCdcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgcGx1Z2luIGJ5IHNldHRpbmcvY2hlY2tpbmcgb3B0aW9ucyBhbmQgYXR0cmlidXRlcywgYWRkaW5nIGhlbHBlciB2YXJpYWJsZXMsIGFuZCBzYXZpbmcgdGhlIGFuY2hvci5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB2YXIgJGlkID0gdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpO1xuXG4gICAgdGhpcy4kYW5jaG9yID0gJChgW2RhdGEtdG9nZ2xlPVwiJHskaWR9XCJdYCkgfHwgJChgW2RhdGEtb3Blbj1cIiR7JGlkfVwiXWApO1xuICAgIHRoaXMuJGFuY2hvci5hdHRyKHtcbiAgICAgICdhcmlhLWNvbnRyb2xzJzogJGlkLFxuICAgICAgJ2RhdGEtaXMtZm9jdXMnOiBmYWxzZSxcbiAgICAgICdkYXRhLXlldGktYm94JzogJGlkLFxuICAgICAgJ2FyaWEtaGFzcG9wdXAnOiB0cnVlLFxuICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBmYWxzZVxuXG4gICAgfSk7XG5cbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25DbGFzcyA9IHRoaXMuZ2V0UG9zaXRpb25DbGFzcygpO1xuICAgIHRoaXMuY291bnRlciA9IDQ7XG4gICAgdGhpcy51c2VkUG9zaXRpb25zID0gW107XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKHtcbiAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJyxcbiAgICAgICdkYXRhLXlldGktYm94JzogJGlkLFxuICAgICAgJ2RhdGEtcmVzaXplJzogJGlkLFxuICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IHRoaXMuJGFuY2hvclswXS5pZCB8fCBGb3VuZGF0aW9uLkdldFlvRGlnaXRzKDYsICdkZC1hbmNob3InKVxuICAgIH0pO1xuICAgIHRoaXMuX2V2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgY3VycmVudCBvcmllbnRhdGlvbiBvZiBkcm9wZG93biBwYW5lLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHJldHVybnMge1N0cmluZ30gcG9zaXRpb24gLSBzdHJpbmcgdmFsdWUgb2YgYSBwb3NpdGlvbiBjbGFzcy5cbiAgICovXG4gIGdldFBvc2l0aW9uQ2xhc3MoKSB7XG4gICAgdmFyIHZlcnRpY2FsUG9zaXRpb24gPSB0aGlzLiRlbGVtZW50WzBdLmNsYXNzTmFtZS5tYXRjaCgvKHRvcHxsZWZ0fHJpZ2h0fGJvdHRvbSkvZyk7XG4gICAgICAgIHZlcnRpY2FsUG9zaXRpb24gPSB2ZXJ0aWNhbFBvc2l0aW9uID8gdmVydGljYWxQb3NpdGlvblswXSA6ICcnO1xuICAgIHZhciBob3Jpem9udGFsUG9zaXRpb24gPSAvZmxvYXQtKC4rKVxccy8uZXhlYyh0aGlzLiRhbmNob3JbMF0uY2xhc3NOYW1lKTtcbiAgICAgICAgaG9yaXpvbnRhbFBvc2l0aW9uID0gaG9yaXpvbnRhbFBvc2l0aW9uID8gaG9yaXpvbnRhbFBvc2l0aW9uWzFdIDogJyc7XG4gICAgdmFyIHBvc2l0aW9uID0gaG9yaXpvbnRhbFBvc2l0aW9uID8gaG9yaXpvbnRhbFBvc2l0aW9uICsgJyAnICsgdmVydGljYWxQb3NpdGlvbiA6IHZlcnRpY2FsUG9zaXRpb247XG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdHMgdGhlIGRyb3Bkb3duIHBhbmVzIG9yaWVudGF0aW9uIGJ5IGFkZGluZy9yZW1vdmluZyBwb3NpdGlvbmluZyBjbGFzc2VzLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBvc2l0aW9uIC0gcG9zaXRpb24gY2xhc3MgdG8gcmVtb3ZlLlxuICAgKi9cbiAgX3JlcG9zaXRpb24ocG9zaXRpb24pIHtcbiAgICB0aGlzLnVzZWRQb3NpdGlvbnMucHVzaChwb3NpdGlvbiA/IHBvc2l0aW9uIDogJ2JvdHRvbScpO1xuICAgIC8vZGVmYXVsdCwgdHJ5IHN3aXRjaGluZyB0byBvcHBvc2l0ZSBzaWRlXG4gICAgaWYoIXBvc2l0aW9uICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZigndG9wJykgPCAwKSl7XG4gICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCd0b3AnKTtcbiAgICB9ZWxzZSBpZihwb3NpdGlvbiA9PT0gJ3RvcCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdib3R0b20nKSA8IDApKXtcbiAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MocG9zaXRpb24pO1xuICAgIH1lbHNlIGlmKHBvc2l0aW9uID09PSAnbGVmdCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdyaWdodCcpIDwgMCkpe1xuICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhwb3NpdGlvbilcbiAgICAgICAgICAuYWRkQ2xhc3MoJ3JpZ2h0Jyk7XG4gICAgfWVsc2UgaWYocG9zaXRpb24gPT09ICdyaWdodCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPCAwKSl7XG4gICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHBvc2l0aW9uKVxuICAgICAgICAgIC5hZGRDbGFzcygnbGVmdCcpO1xuICAgIH1cblxuICAgIC8vaWYgZGVmYXVsdCBjaGFuZ2UgZGlkbid0IHdvcmssIHRyeSBib3R0b20gb3IgbGVmdCBmaXJzdFxuICAgIGVsc2UgaWYoIXBvc2l0aW9uICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZigndG9wJykgPiAtMSkgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPCAwKSl7XG4gICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdsZWZ0Jyk7XG4gICAgfWVsc2UgaWYocG9zaXRpb24gPT09ICd0b3AnICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignYm90dG9tJykgPiAtMSkgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPCAwKSl7XG4gICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHBvc2l0aW9uKVxuICAgICAgICAgIC5hZGRDbGFzcygnbGVmdCcpO1xuICAgIH1lbHNlIGlmKHBvc2l0aW9uID09PSAnbGVmdCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdyaWdodCcpID4gLTEpICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignYm90dG9tJykgPCAwKSl7XG4gICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHBvc2l0aW9uKTtcbiAgICB9ZWxzZSBpZihwb3NpdGlvbiA9PT0gJ3JpZ2h0JyAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2xlZnQnKSA+IC0xKSAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbScpIDwgMCkpe1xuICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhwb3NpdGlvbik7XG4gICAgfVxuICAgIC8vaWYgbm90aGluZyBjbGVhcmVkLCBzZXQgdG8gYm90dG9tXG4gICAgZWxzZXtcbiAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MocG9zaXRpb24pO1xuICAgIH1cbiAgICB0aGlzLmNsYXNzQ2hhbmdlZCA9IHRydWU7XG4gICAgdGhpcy5jb3VudGVyLS07XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcG9zaXRpb24gYW5kIG9yaWVudGF0aW9uIG9mIHRoZSBkcm9wZG93biBwYW5lLCBjaGVja3MgZm9yIGNvbGxpc2lvbnMuXG4gICAqIFJlY3Vyc2l2ZWx5IGNhbGxzIGl0c2VsZiBpZiBhIGNvbGxpc2lvbiBpcyBkZXRlY3RlZCwgd2l0aCBhIG5ldyBwb3NpdGlvbiBjbGFzcy5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0UG9zaXRpb24oKSB7XG4gICAgaWYodGhpcy4kYW5jaG9yLmF0dHIoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ2ZhbHNlJyl7IHJldHVybiBmYWxzZTsgfVxuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb25DbGFzcygpLFxuICAgICAgICAkZWxlRGltcyA9IEZvdW5kYXRpb24uQm94LkdldERpbWVuc2lvbnModGhpcy4kZWxlbWVudCksXG4gICAgICAgICRhbmNob3JEaW1zID0gRm91bmRhdGlvbi5Cb3guR2V0RGltZW5zaW9ucyh0aGlzLiRhbmNob3IpLFxuICAgICAgICBfdGhpcyA9IHRoaXMsXG4gICAgICAgIGRpcmVjdGlvbiA9IChwb3NpdGlvbiA9PT0gJ2xlZnQnID8gJ2xlZnQnIDogKChwb3NpdGlvbiA9PT0gJ3JpZ2h0JykgPyAnbGVmdCcgOiAndG9wJykpLFxuICAgICAgICBwYXJhbSA9IChkaXJlY3Rpb24gPT09ICd0b3AnKSA/ICdoZWlnaHQnIDogJ3dpZHRoJyxcbiAgICAgICAgb2Zmc2V0ID0gKHBhcmFtID09PSAnaGVpZ2h0JykgPyB0aGlzLm9wdGlvbnMudk9mZnNldCA6IHRoaXMub3B0aW9ucy5oT2Zmc2V0O1xuXG5cblxuICAgIGlmKCgkZWxlRGltcy53aWR0aCA+PSAkZWxlRGltcy53aW5kb3dEaW1zLndpZHRoKSB8fCAoIXRoaXMuY291bnRlciAmJiAhRm91bmRhdGlvbi5Cb3guSW1Ob3RUb3VjaGluZ1lvdSh0aGlzLiRlbGVtZW50KSkpe1xuICAgICAgdGhpcy4kZWxlbWVudC5vZmZzZXQoRm91bmRhdGlvbi5Cb3guR2V0T2Zmc2V0cyh0aGlzLiRlbGVtZW50LCB0aGlzLiRhbmNob3IsICdjZW50ZXIgYm90dG9tJywgdGhpcy5vcHRpb25zLnZPZmZzZXQsIHRoaXMub3B0aW9ucy5oT2Zmc2V0LCB0cnVlKSkuY3NzKHtcbiAgICAgICAgJ3dpZHRoJzogJGVsZURpbXMud2luZG93RGltcy53aWR0aCAtICh0aGlzLm9wdGlvbnMuaE9mZnNldCAqIDIpLFxuICAgICAgICAnaGVpZ2h0JzogJ2F1dG8nXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2xhc3NDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50Lm9mZnNldChGb3VuZGF0aW9uLkJveC5HZXRPZmZzZXRzKHRoaXMuJGVsZW1lbnQsIHRoaXMuJGFuY2hvciwgcG9zaXRpb24sIHRoaXMub3B0aW9ucy52T2Zmc2V0LCB0aGlzLm9wdGlvbnMuaE9mZnNldCkpO1xuXG4gICAgd2hpbGUoIUZvdW5kYXRpb24uQm94LkltTm90VG91Y2hpbmdZb3UodGhpcy4kZWxlbWVudCwgZmFsc2UsIHRydWUpICYmIHRoaXMuY291bnRlcil7XG4gICAgICB0aGlzLl9yZXBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICAgIHRoaXMuX3NldFBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSBlbGVtZW50IHV0aWxpemluZyB0aGUgdHJpZ2dlcnMgdXRpbGl0eSBsaWJyYXJ5LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLiRlbGVtZW50Lm9uKHtcbiAgICAgICdvcGVuLnpmLnRyaWdnZXInOiB0aGlzLm9wZW4uYmluZCh0aGlzKSxcbiAgICAgICdjbG9zZS56Zi50cmlnZ2VyJzogdGhpcy5jbG9zZS5iaW5kKHRoaXMpLFxuICAgICAgJ3RvZ2dsZS56Zi50cmlnZ2VyJzogdGhpcy50b2dnbGUuYmluZCh0aGlzKSxcbiAgICAgICdyZXNpemVtZS56Zi50cmlnZ2VyJzogdGhpcy5fc2V0UG9zaXRpb24uYmluZCh0aGlzKVxuICAgIH0pO1xuXG4gICAgaWYodGhpcy5vcHRpb25zLmhvdmVyKXtcbiAgICAgIHRoaXMuJGFuY2hvci5vZmYoJ21vdXNlZW50ZXIuemYuZHJvcGRvd24gbW91c2VsZWF2ZS56Zi5kcm9wZG93bicpXG4gICAgICAgICAgLm9uKCdtb3VzZWVudGVyLnpmLmRyb3Bkb3duJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0KTtcbiAgICAgICAgICAgIF90aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgIF90aGlzLm9wZW4oKTtcbiAgICAgICAgICAgICAgX3RoaXMuJGFuY2hvci5kYXRhKCdob3ZlcicsIHRydWUpO1xuICAgICAgICAgICAgfSwgX3RoaXMub3B0aW9ucy5ob3ZlckRlbGF5KTtcbiAgICAgICAgICB9KS5vbignbW91c2VsZWF2ZS56Zi5kcm9wZG93bicsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMudGltZW91dCk7XG4gICAgICAgICAgICBfdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICBfdGhpcy4kYW5jaG9yLmRhdGEoJ2hvdmVyJywgZmFsc2UpO1xuICAgICAgICAgICAgfSwgX3RoaXMub3B0aW9ucy5ob3ZlckRlbGF5KTtcbiAgICAgICAgICB9KTtcbiAgICAgIGlmKHRoaXMub3B0aW9ucy5ob3ZlclBhbmUpe1xuICAgICAgICB0aGlzLiRlbGVtZW50Lm9mZignbW91c2VlbnRlci56Zi5kcm9wZG93biBtb3VzZWxlYXZlLnpmLmRyb3Bkb3duJylcbiAgICAgICAgICAgIC5vbignbW91c2VlbnRlci56Zi5kcm9wZG93bicsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0KTtcbiAgICAgICAgICAgIH0pLm9uKCdtb3VzZWxlYXZlLnpmLmRyb3Bkb3duJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVvdXQpO1xuICAgICAgICAgICAgICBfdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIF90aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgX3RoaXMuJGFuY2hvci5kYXRhKCdob3ZlcicsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfSwgX3RoaXMub3B0aW9ucy5ob3ZlckRlbGF5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLiRhbmNob3IuYWRkKHRoaXMuJGVsZW1lbnQpLm9uKCdrZXlkb3duLnpmLmRyb3Bkb3duJywgZnVuY3Rpb24oZSkge1xuXG4gICAgICB2YXIgJHRhcmdldCA9ICQodGhpcyksXG4gICAgICAgIHZpc2libGVGb2N1c2FibGVFbGVtZW50cyA9IEZvdW5kYXRpb24uS2V5Ym9hcmQuZmluZEZvY3VzYWJsZShfdGhpcy4kZWxlbWVudCk7XG5cbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQuaGFuZGxlS2V5KGUsICdEcm9wZG93bicsIHtcbiAgICAgICAgdGFiX2ZvcndhcmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChfdGhpcy4kZWxlbWVudC5maW5kKCc6Zm9jdXMnKS5pcyh2aXNpYmxlRm9jdXNhYmxlRWxlbWVudHMuZXEoLTEpKSkgeyAvLyBsZWZ0IG1vZGFsIGRvd253YXJkcywgc2V0dGluZyBmb2N1cyB0byBmaXJzdCBlbGVtZW50XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy50cmFwRm9jdXMpIHsgLy8gaWYgZm9jdXMgc2hhbGwgYmUgdHJhcHBlZFxuICAgICAgICAgICAgICB2aXNpYmxlRm9jdXNhYmxlRWxlbWVudHMuZXEoMCkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHsgLy8gaWYgZm9jdXMgaXMgbm90IHRyYXBwZWQsIGNsb3NlIGRyb3Bkb3duIG9uIGZvY3VzIG91dFxuICAgICAgICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGFiX2JhY2t3YXJkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuJGVsZW1lbnQuZmluZCgnOmZvY3VzJykuaXModmlzaWJsZUZvY3VzYWJsZUVsZW1lbnRzLmVxKDApKSB8fCBfdGhpcy4kZWxlbWVudC5pcygnOmZvY3VzJykpIHsgLy8gbGVmdCBtb2RhbCB1cHdhcmRzLCBzZXR0aW5nIGZvY3VzIHRvIGxhc3QgZWxlbWVudFxuICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMudHJhcEZvY3VzKSB7IC8vIGlmIGZvY3VzIHNoYWxsIGJlIHRyYXBwZWRcbiAgICAgICAgICAgICAgdmlzaWJsZUZvY3VzYWJsZUVsZW1lbnRzLmVxKC0xKS5mb2N1cygpO1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBpZiBmb2N1cyBpcyBub3QgdHJhcHBlZCwgY2xvc2UgZHJvcGRvd24gb24gZm9jdXMgb3V0XG4gICAgICAgICAgICAgIF90aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvcGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoJHRhcmdldC5pcyhfdGhpcy4kYW5jaG9yKSkge1xuICAgICAgICAgICAgX3RoaXMub3BlbigpO1xuICAgICAgICAgICAgX3RoaXMuJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnLCAtMSkuZm9jdXMoKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgICAgIF90aGlzLiRhbmNob3IuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBib2R5IHRvIGNsb3NlIGFueSBkcm9wZG93bnMgb24gYSBjbGljay5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkQm9keUhhbmRsZXIoKSB7XG4gICAgIHZhciAkYm9keSA9ICQoZG9jdW1lbnQuYm9keSkubm90KHRoaXMuJGVsZW1lbnQpLFxuICAgICAgICAgX3RoaXMgPSB0aGlzO1xuICAgICAkYm9keS5vZmYoJ2NsaWNrLnpmLmRyb3Bkb3duJylcbiAgICAgICAgICAub24oJ2NsaWNrLnpmLmRyb3Bkb3duJywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgICBpZihfdGhpcy4kYW5jaG9yLmlzKGUudGFyZ2V0KSB8fCBfdGhpcy4kYW5jaG9yLmZpbmQoZS50YXJnZXQpLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihfdGhpcy4kZWxlbWVudC5maW5kKGUudGFyZ2V0KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICRib2R5Lm9mZignY2xpY2suemYuZHJvcGRvd24nKTtcbiAgICAgICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgZHJvcGRvd24gcGFuZSwgYW5kIGZpcmVzIGEgYnViYmxpbmcgZXZlbnQgdG8gY2xvc2Ugb3RoZXIgZHJvcGRvd25zLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIERyb3Bkb3duI2Nsb3NlbWVcbiAgICogQGZpcmVzIERyb3Bkb3duI3Nob3dcbiAgICovXG4gIG9wZW4oKSB7XG4gICAgLy8gdmFyIF90aGlzID0gdGhpcztcbiAgICAvKipcbiAgICAgKiBGaXJlcyB0byBjbG9zZSBvdGhlciBvcGVuIGRyb3Bkb3duc1xuICAgICAqIEBldmVudCBEcm9wZG93biNjbG9zZW1lXG4gICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjbG9zZW1lLnpmLmRyb3Bkb3duJywgdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpKTtcbiAgICB0aGlzLiRhbmNob3IuYWRkQ2xhc3MoJ2hvdmVyJylcbiAgICAgICAgLmF0dHIoeydhcmlhLWV4cGFuZGVkJzogdHJ1ZX0pO1xuICAgIC8vIHRoaXMuJGVsZW1lbnQvKi5zaG93KCkqLztcbiAgICB0aGlzLl9zZXRQb3NpdGlvbigpO1xuICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2lzLW9wZW4nKVxuICAgICAgICAuYXR0cih7J2FyaWEtaGlkZGVuJzogZmFsc2V9KTtcblxuICAgIGlmKHRoaXMub3B0aW9ucy5hdXRvRm9jdXMpe1xuICAgICAgdmFyICRmb2N1c2FibGUgPSBGb3VuZGF0aW9uLktleWJvYXJkLmZpbmRGb2N1c2FibGUodGhpcy4kZWxlbWVudCk7XG4gICAgICBpZigkZm9jdXNhYmxlLmxlbmd0aCl7XG4gICAgICAgICRmb2N1c2FibGUuZXEoMCkuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZih0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrKXsgdGhpcy5fYWRkQm9keUhhbmRsZXIoKTsgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgb25jZSB0aGUgZHJvcGRvd24gaXMgdmlzaWJsZS5cbiAgICAgKiBAZXZlbnQgRHJvcGRvd24jc2hvd1xuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignc2hvdy56Zi5kcm9wZG93bicsIFt0aGlzLiRlbGVtZW50XSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBvcGVuIGRyb3Bkb3duIHBhbmUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgRHJvcGRvd24jaGlkZVxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYoIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSl7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2lzLW9wZW4nKVxuICAgICAgICAuYXR0cih7J2FyaWEtaGlkZGVuJzogdHJ1ZX0pO1xuXG4gICAgdGhpcy4kYW5jaG9yLnJlbW92ZUNsYXNzKCdob3ZlcicpXG4gICAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpO1xuXG4gICAgaWYodGhpcy5jbGFzc0NoYW5nZWQpe1xuICAgICAgdmFyIGN1clBvc2l0aW9uQ2xhc3MgPSB0aGlzLmdldFBvc2l0aW9uQ2xhc3MoKTtcbiAgICAgIGlmKGN1clBvc2l0aW9uQ2xhc3Mpe1xuICAgICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGN1clBvc2l0aW9uQ2xhc3MpO1xuICAgICAgfVxuICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMucG9zaXRpb25DbGFzcylcbiAgICAgICAgICAvKi5oaWRlKCkqLy5jc3Moe2hlaWdodDogJycsIHdpZHRoOiAnJ30pO1xuICAgICAgdGhpcy5jbGFzc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY291bnRlciA9IDQ7XG4gICAgICB0aGlzLnVzZWRQb3NpdGlvbnMubGVuZ3RoID0gMDtcbiAgICB9XG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdoaWRlLnpmLmRyb3Bkb3duJywgW3RoaXMuJGVsZW1lbnRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBkcm9wZG93biBwYW5lJ3MgdmlzaWJpbGl0eS5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgaWYodGhpcy4kZWxlbWVudC5oYXNDbGFzcygnaXMtb3BlbicpKXtcbiAgICAgIGlmKHRoaXMuJGFuY2hvci5kYXRhKCdob3ZlcicpKSByZXR1cm47XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGRyb3Bkb3duLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi50cmlnZ2VyJykuaGlkZSgpO1xuICAgIHRoaXMuJGFuY2hvci5vZmYoJy56Zi5kcm9wZG93bicpO1xuXG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cbkRyb3Bkb3duLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQW1vdW50IG9mIHRpbWUgdG8gZGVsYXkgb3BlbmluZyBhIHN1Ym1lbnUgb24gaG92ZXIgZXZlbnQuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMjUwXG4gICAqL1xuICBob3ZlckRlbGF5OiAyNTAsXG4gIC8qKlxuICAgKiBBbGxvdyBzdWJtZW51cyB0byBvcGVuIG9uIGhvdmVyIGV2ZW50c1xuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBob3ZlcjogZmFsc2UsXG4gIC8qKlxuICAgKiBEb24ndCBjbG9zZSBkcm9wZG93biB3aGVuIGhvdmVyaW5nIG92ZXIgZHJvcGRvd24gcGFuZVxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGhvdmVyUGFuZTogZmFsc2UsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcGl4ZWxzIGJldHdlZW4gdGhlIGRyb3Bkb3duIHBhbmUgYW5kIHRoZSB0cmlnZ2VyaW5nIGVsZW1lbnQgb24gb3Blbi5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAxXG4gICAqL1xuICB2T2Zmc2V0OiAxLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHBpeGVscyBiZXR3ZWVuIHRoZSBkcm9wZG93biBwYW5lIGFuZCB0aGUgdHJpZ2dlcmluZyBlbGVtZW50IG9uIG9wZW4uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMVxuICAgKi9cbiAgaE9mZnNldDogMSxcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gYWRqdXN0IG9wZW4gcG9zaXRpb24uIEpTIHdpbGwgdGVzdCBhbmQgZmlsbCB0aGlzIGluLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICd0b3AnXG4gICAqL1xuICBwb3NpdGlvbkNsYXNzOiAnJyxcbiAgLyoqXG4gICAqIEFsbG93IHRoZSBwbHVnaW4gdG8gdHJhcCBmb2N1cyB0byB0aGUgZHJvcGRvd24gcGFuZSBpZiBvcGVuZWQgd2l0aCBrZXlib2FyZCBjb21tYW5kcy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgdHJhcEZvY3VzOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93IHRoZSBwbHVnaW4gdG8gc2V0IGZvY3VzIHRvIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCB3aXRoaW4gdGhlIHBhbmUsIHJlZ2FyZGxlc3Mgb2YgbWV0aG9kIG9mIG9wZW5pbmcuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgdHJ1ZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93cyBhIGNsaWNrIG9uIHRoZSBib2R5IHRvIGNsb3NlIHRoZSBkcm9wZG93bi5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgY2xvc2VPbkNsaWNrOiBmYWxzZVxufVxuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oRHJvcGRvd24sICdEcm9wZG93bicpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogRHJvcGRvd25NZW51IG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5kcm9wZG93bi1tZW51XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmtleWJvYXJkXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmJveFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5uZXN0XG4gKi9cblxuY2xhc3MgRHJvcGRvd25NZW51IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgRHJvcGRvd25NZW51LlxuICAgKiBAY2xhc3NcbiAgICogQGZpcmVzIERyb3Bkb3duTWVudSNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYSBkcm9wZG93biBtZW51LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIERyb3Bkb3duTWVudS5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgRm91bmRhdGlvbi5OZXN0LkZlYXRoZXIodGhpcy4kZWxlbWVudCwgJ2Ryb3Bkb3duJyk7XG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnRHJvcGRvd25NZW51Jyk7XG4gICAgRm91bmRhdGlvbi5LZXlib2FyZC5yZWdpc3RlcignRHJvcGRvd25NZW51Jywge1xuICAgICAgJ0VOVEVSJzogJ29wZW4nLFxuICAgICAgJ1NQQUNFJzogJ29wZW4nLFxuICAgICAgJ0FSUk9XX1JJR0hUJzogJ25leHQnLFxuICAgICAgJ0FSUk9XX1VQJzogJ3VwJyxcbiAgICAgICdBUlJPV19ET1dOJzogJ2Rvd24nLFxuICAgICAgJ0FSUk9XX0xFRlQnOiAncHJldmlvdXMnLFxuICAgICAgJ0VTQ0FQRSc6ICdjbG9zZSdcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgcGx1Z2luLCBhbmQgY2FsbHMgX3ByZXBhcmVNZW51XG4gICAqIEBwcml2YXRlXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIHN1YnMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50Jyk7XG4gICAgdGhpcy4kZWxlbWVudC5jaGlsZHJlbignLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50JykuY2hpbGRyZW4oJy5pcy1kcm9wZG93bi1zdWJtZW51JykuYWRkQ2xhc3MoJ2ZpcnN0LXN1YicpO1xuXG4gICAgdGhpcy4kbWVudUl0ZW1zID0gdGhpcy4kZWxlbWVudC5maW5kKCdbcm9sZT1cIm1lbnVpdGVtXCJdJyk7XG4gICAgdGhpcy4kdGFicyA9IHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oJ1tyb2xlPVwibWVudWl0ZW1cIl0nKTtcbiAgICB0aGlzLiR0YWJzLmZpbmQoJ3VsLmlzLWRyb3Bkb3duLXN1Ym1lbnUnKS5hZGRDbGFzcyh0aGlzLm9wdGlvbnMudmVydGljYWxDbGFzcyk7XG5cbiAgICBpZiAodGhpcy4kZWxlbWVudC5oYXNDbGFzcyh0aGlzLm9wdGlvbnMucmlnaHRDbGFzcykgfHwgdGhpcy5vcHRpb25zLmFsaWdubWVudCA9PT0gJ3JpZ2h0JyB8fCBGb3VuZGF0aW9uLnJ0bCgpIHx8IHRoaXMuJGVsZW1lbnQucGFyZW50cygnLnRvcC1iYXItcmlnaHQnKS5pcygnKicpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuYWxpZ25tZW50ID0gJ3JpZ2h0JztcbiAgICAgIHN1YnMuYWRkQ2xhc3MoJ29wZW5zLWxlZnQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3Vicy5hZGRDbGFzcygnb3BlbnMtcmlnaHQnKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH07XG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVycyB0byBlbGVtZW50cyB3aXRoaW4gdGhlIG1lbnVcbiAgICogQHByaXZhdGVcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgIGhhc1RvdWNoID0gJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8ICh0eXBlb2Ygd2luZG93Lm9udG91Y2hzdGFydCAhPT0gJ3VuZGVmaW5lZCcpLFxuICAgICAgICBwYXJDbGFzcyA9ICdpcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCc7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNsaWNrT3BlbiB8fCBoYXNUb3VjaCkge1xuICAgICAgdGhpcy4kbWVudUl0ZW1zLm9uKCdjbGljay56Zi5kcm9wZG93bm1lbnUgdG91Y2hzdGFydC56Zi5kcm9wZG93bm1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciAkZWxlbSA9ICQoZS50YXJnZXQpLnBhcmVudHNVbnRpbCgndWwnLCBgLiR7cGFyQ2xhc3N9YCksXG4gICAgICAgICAgICBoYXNTdWIgPSAkZWxlbS5oYXNDbGFzcyhwYXJDbGFzcyksXG4gICAgICAgICAgICBoYXNDbGlja2VkID0gJGVsZW0uYXR0cignZGF0YS1pcy1jbGljaycpID09PSAndHJ1ZScsXG4gICAgICAgICAgICAkc3ViID0gJGVsZW0uY2hpbGRyZW4oJy5pcy1kcm9wZG93bi1zdWJtZW51Jyk7XG5cbiAgICAgICAgaWYgKGhhc1N1Yikge1xuICAgICAgICAgIGlmIChoYXNDbGlja2VkKSB7XG4gICAgICAgICAgICBpZiAoIV90aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrIHx8ICghX3RoaXMub3B0aW9ucy5jbGlja09wZW4gJiYgIWhhc1RvdWNoKSB8fCAoX3RoaXMub3B0aW9ucy5mb3JjZUZvbGxvdyAmJiBoYXNUb3VjaCkpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBfdGhpcy5faGlkZSgkZWxlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBfdGhpcy5fc2hvdygkZWxlbS5jaGlsZHJlbignLmlzLWRyb3Bkb3duLXN1Ym1lbnUnKSk7XG4gICAgICAgICAgICAkZWxlbS5hZGQoJGVsZW0ucGFyZW50c1VudGlsKF90aGlzLiRlbGVtZW50LCBgLiR7cGFyQ2xhc3N9YCkpLmF0dHIoJ2RhdGEtaXMtY2xpY2snLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7IHJldHVybjsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZGlzYWJsZUhvdmVyKSB7XG4gICAgICB0aGlzLiRtZW51SXRlbXMub24oJ21vdXNlZW50ZXIuemYuZHJvcGRvd25tZW51JywgZnVuY3Rpb24oZSkge1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB2YXIgJGVsZW0gPSAkKHRoaXMpLFxuICAgICAgICAgICAgaGFzU3ViID0gJGVsZW0uaGFzQ2xhc3MocGFyQ2xhc3MpO1xuXG4gICAgICAgIGlmIChoYXNTdWIpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMuZGVsYXkpO1xuICAgICAgICAgIF90aGlzLmRlbGF5ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIF90aGlzLl9zaG93KCRlbGVtLmNoaWxkcmVuKCcuaXMtZHJvcGRvd24tc3VibWVudScpKTtcbiAgICAgICAgICB9LCBfdGhpcy5vcHRpb25zLmhvdmVyRGVsYXkpO1xuICAgICAgICB9XG4gICAgICB9KS5vbignbW91c2VsZWF2ZS56Zi5kcm9wZG93bm1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciAkZWxlbSA9ICQodGhpcyksXG4gICAgICAgICAgICBoYXNTdWIgPSAkZWxlbS5oYXNDbGFzcyhwYXJDbGFzcyk7XG4gICAgICAgIGlmIChoYXNTdWIgJiYgX3RoaXMub3B0aW9ucy5hdXRvY2xvc2UpIHtcbiAgICAgICAgICBpZiAoJGVsZW0uYXR0cignZGF0YS1pcy1jbGljaycpID09PSAndHJ1ZScgJiYgX3RoaXMub3B0aW9ucy5jbGlja09wZW4pIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMuZGVsYXkpO1xuICAgICAgICAgIF90aGlzLmRlbGF5ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIF90aGlzLl9oaWRlKCRlbGVtKTtcbiAgICAgICAgICB9LCBfdGhpcy5vcHRpb25zLmNsb3NpbmdUaW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuJG1lbnVJdGVtcy5vbigna2V5ZG93bi56Zi5kcm9wZG93bm1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgJGVsZW1lbnQgPSAkKGUudGFyZ2V0KS5wYXJlbnRzVW50aWwoJ3VsJywgJ1tyb2xlPVwibWVudWl0ZW1cIl0nKSxcbiAgICAgICAgICBpc1RhYiA9IF90aGlzLiR0YWJzLmluZGV4KCRlbGVtZW50KSA+IC0xLFxuICAgICAgICAgICRlbGVtZW50cyA9IGlzVGFiID8gX3RoaXMuJHRhYnMgOiAkZWxlbWVudC5zaWJsaW5ncygnbGknKS5hZGQoJGVsZW1lbnQpLFxuICAgICAgICAgICRwcmV2RWxlbWVudCxcbiAgICAgICAgICAkbmV4dEVsZW1lbnQ7XG5cbiAgICAgICRlbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgaWYgKCQodGhpcykuaXMoJGVsZW1lbnQpKSB7XG4gICAgICAgICAgJHByZXZFbGVtZW50ID0gJGVsZW1lbnRzLmVxKGktMSk7XG4gICAgICAgICAgJG5leHRFbGVtZW50ID0gJGVsZW1lbnRzLmVxKGkrMSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIG5leHRTaWJsaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghJGVsZW1lbnQuaXMoJzpsYXN0LWNoaWxkJykpICRuZXh0RWxlbWVudC5jaGlsZHJlbignYTpmaXJzdCcpLmZvY3VzKCk7XG4gICAgICB9LCBwcmV2U2libGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAkcHJldkVsZW1lbnQuY2hpbGRyZW4oJ2E6Zmlyc3QnKS5mb2N1cygpO1xuICAgICAgfSwgb3BlblN1YiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHN1YiA9ICRlbGVtZW50LmNoaWxkcmVuKCd1bC5pcy1kcm9wZG93bi1zdWJtZW51Jyk7XG4gICAgICAgIGlmICgkc3ViLmxlbmd0aCkge1xuICAgICAgICAgIF90aGlzLl9zaG93KCRzdWIpO1xuICAgICAgICAgICRlbGVtZW50LmZpbmQoJ2xpID4gYTpmaXJzdCcpLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7IHJldHVybjsgfVxuICAgICAgfSwgY2xvc2VTdWIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy9pZiAoJGVsZW1lbnQuaXMoJzpmaXJzdC1jaGlsZCcpKSB7XG4gICAgICAgIHZhciBjbG9zZSA9ICRlbGVtZW50LnBhcmVudCgndWwnKS5wYXJlbnQoJ2xpJyk7XG4gICAgICAgICAgY2xvc2UuY2hpbGRyZW4oJ2E6Zmlyc3QnKS5mb2N1cygpO1xuICAgICAgICAgIF90aGlzLl9oaWRlKGNsb3NlKTtcbiAgICAgICAgLy99XG4gICAgICB9O1xuICAgICAgdmFyIGZ1bmN0aW9ucyA9IHtcbiAgICAgICAgb3Blbjogb3BlblN1YixcbiAgICAgICAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF90aGlzLl9oaWRlKF90aGlzLiRlbGVtZW50KTtcbiAgICAgICAgICBfdGhpcy4kbWVudUl0ZW1zLmZpbmQoJ2E6Zmlyc3QnKS5mb2N1cygpOyAvLyBmb2N1cyB0byBmaXJzdCBlbGVtZW50XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAoaXNUYWIpIHtcbiAgICAgICAgaWYgKF90aGlzLnZlcnRpY2FsKSB7IC8vIHZlcnRpY2FsIG1lbnVcbiAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5hbGlnbm1lbnQgPT09ICdsZWZ0JykgeyAvLyBsZWZ0IGFsaWduZWRcbiAgICAgICAgICAgICQuZXh0ZW5kKGZ1bmN0aW9ucywge1xuICAgICAgICAgICAgICBkb3duOiBuZXh0U2libGluZyxcbiAgICAgICAgICAgICAgdXA6IHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICBuZXh0OiBvcGVuU3ViLFxuICAgICAgICAgICAgICBwcmV2aW91czogY2xvc2VTdWJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7IC8vIHJpZ2h0IGFsaWduZWRcbiAgICAgICAgICAgICQuZXh0ZW5kKGZ1bmN0aW9ucywge1xuICAgICAgICAgICAgICBkb3duOiBuZXh0U2libGluZyxcbiAgICAgICAgICAgICAgdXA6IHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICBuZXh0OiBjbG9zZVN1YixcbiAgICAgICAgICAgICAgcHJldmlvdXM6IG9wZW5TdWJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgLy8gaG9yaXpvbnRhbCBtZW51XG4gICAgICAgICAgJC5leHRlbmQoZnVuY3Rpb25zLCB7XG4gICAgICAgICAgICBuZXh0OiBuZXh0U2libGluZyxcbiAgICAgICAgICAgIHByZXZpb3VzOiBwcmV2U2libGluZyxcbiAgICAgICAgICAgIGRvd246IG9wZW5TdWIsXG4gICAgICAgICAgICB1cDogY2xvc2VTdWJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHsgLy8gbm90IHRhYnMgLT4gb25lIHN1YlxuICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5hbGlnbm1lbnQgPT09ICdsZWZ0JykgeyAvLyBsZWZ0IGFsaWduZWRcbiAgICAgICAgICAkLmV4dGVuZChmdW5jdGlvbnMsIHtcbiAgICAgICAgICAgIG5leHQ6IG9wZW5TdWIsXG4gICAgICAgICAgICBwcmV2aW91czogY2xvc2VTdWIsXG4gICAgICAgICAgICBkb3duOiBuZXh0U2libGluZyxcbiAgICAgICAgICAgIHVwOiBwcmV2U2libGluZ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgeyAvLyByaWdodCBhbGlnbmVkXG4gICAgICAgICAgJC5leHRlbmQoZnVuY3Rpb25zLCB7XG4gICAgICAgICAgICBuZXh0OiBjbG9zZVN1YixcbiAgICAgICAgICAgIHByZXZpb3VzOiBvcGVuU3ViLFxuICAgICAgICAgICAgZG93bjogbmV4dFNpYmxpbmcsXG4gICAgICAgICAgICB1cDogcHJldlNpYmxpbmdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC5oYW5kbGVLZXkoZSwgJ0Ryb3Bkb3duTWVudScsIGZ1bmN0aW9ucyk7XG5cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGJvZHkgdG8gY2xvc2UgYW55IGRyb3Bkb3ducyBvbiBhIGNsaWNrLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRCb2R5SGFuZGxlcigpIHtcbiAgICB2YXIgJGJvZHkgPSAkKGRvY3VtZW50LmJvZHkpLFxuICAgICAgICBfdGhpcyA9IHRoaXM7XG4gICAgJGJvZHkub2ZmKCdtb3VzZXVwLnpmLmRyb3Bkb3dubWVudSB0b3VjaGVuZC56Zi5kcm9wZG93bm1lbnUnKVxuICAgICAgICAgLm9uKCdtb3VzZXVwLnpmLmRyb3Bkb3dubWVudSB0b3VjaGVuZC56Zi5kcm9wZG93bm1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgIHZhciAkbGluayA9IF90aGlzLiRlbGVtZW50LmZpbmQoZS50YXJnZXQpO1xuICAgICAgICAgICBpZiAoJGxpbmsubGVuZ3RoKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgIF90aGlzLl9oaWRlKCk7XG4gICAgICAgICAgICRib2R5Lm9mZignbW91c2V1cC56Zi5kcm9wZG93bm1lbnUgdG91Y2hlbmQuemYuZHJvcGRvd25tZW51Jyk7XG4gICAgICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIGRyb3Bkb3duIHBhbmUsIGFuZCBjaGVja3MgZm9yIGNvbGxpc2lvbnMgZmlyc3QuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkc3ViIC0gdWwgZWxlbWVudCB0aGF0IGlzIGEgc3VibWVudSB0byBzaG93XG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKiBAZmlyZXMgRHJvcGRvd25NZW51I3Nob3dcbiAgICovXG4gIF9zaG93KCRzdWIpIHtcbiAgICB2YXIgaWR4ID0gdGhpcy4kdGFicy5pbmRleCh0aGlzLiR0YWJzLmZpbHRlcihmdW5jdGlvbihpLCBlbCkge1xuICAgICAgcmV0dXJuICQoZWwpLmZpbmQoJHN1YikubGVuZ3RoID4gMDtcbiAgICB9KSk7XG4gICAgdmFyICRzaWJzID0gJHN1Yi5wYXJlbnQoJ2xpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50Jykuc2libGluZ3MoJ2xpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50Jyk7XG4gICAgdGhpcy5faGlkZSgkc2licywgaWR4KTtcbiAgICAkc3ViLmNzcygndmlzaWJpbGl0eScsICdoaWRkZW4nKS5hZGRDbGFzcygnanMtZHJvcGRvd24tYWN0aXZlJykuYXR0cih7J2FyaWEtaGlkZGVuJzogZmFsc2V9KVxuICAgICAgICAucGFyZW50KCdsaS5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCcpLmFkZENsYXNzKCdpcy1hY3RpdmUnKVxuICAgICAgICAuYXR0cih7J2FyaWEtZXhwYW5kZWQnOiB0cnVlfSk7XG4gICAgdmFyIGNsZWFyID0gRm91bmRhdGlvbi5Cb3guSW1Ob3RUb3VjaGluZ1lvdSgkc3ViLCBudWxsLCB0cnVlKTtcbiAgICBpZiAoIWNsZWFyKSB7XG4gICAgICB2YXIgb2xkQ2xhc3MgPSB0aGlzLm9wdGlvbnMuYWxpZ25tZW50ID09PSAnbGVmdCcgPyAnLXJpZ2h0JyA6ICctbGVmdCcsXG4gICAgICAgICAgJHBhcmVudExpID0gJHN1Yi5wYXJlbnQoJy5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCcpO1xuICAgICAgJHBhcmVudExpLnJlbW92ZUNsYXNzKGBvcGVucyR7b2xkQ2xhc3N9YCkuYWRkQ2xhc3MoYG9wZW5zLSR7dGhpcy5vcHRpb25zLmFsaWdubWVudH1gKTtcbiAgICAgIGNsZWFyID0gRm91bmRhdGlvbi5Cb3guSW1Ob3RUb3VjaGluZ1lvdSgkc3ViLCBudWxsLCB0cnVlKTtcbiAgICAgIGlmICghY2xlYXIpIHtcbiAgICAgICAgJHBhcmVudExpLnJlbW92ZUNsYXNzKGBvcGVucy0ke3RoaXMub3B0aW9ucy5hbGlnbm1lbnR9YCkuYWRkQ2xhc3MoJ29wZW5zLWlubmVyJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICAkc3ViLmNzcygndmlzaWJpbGl0eScsICcnKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlT25DbGljaykgeyB0aGlzLl9hZGRCb2R5SGFuZGxlcigpOyB9XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgbmV3IGRyb3Bkb3duIHBhbmUgaXMgdmlzaWJsZS5cbiAgICAgKiBAZXZlbnQgRHJvcGRvd25NZW51I3Nob3dcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Nob3cuemYuZHJvcGRvd25tZW51JywgWyRzdWJdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyBhIHNpbmdsZSwgY3VycmVudGx5IG9wZW4gZHJvcGRvd24gcGFuZSwgaWYgcGFzc2VkIGEgcGFyYW1ldGVyLCBvdGhlcndpc2UsIGhpZGVzIGV2ZXJ5dGhpbmcuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW0gLSBlbGVtZW50IHdpdGggYSBzdWJtZW51IHRvIGhpZGVcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkeCAtIGluZGV4IG9mIHRoZSAkdGFicyBjb2xsZWN0aW9uIHRvIGhpZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oaWRlKCRlbGVtLCBpZHgpIHtcbiAgICB2YXIgJHRvQ2xvc2U7XG4gICAgaWYgKCRlbGVtICYmICRlbGVtLmxlbmd0aCkge1xuICAgICAgJHRvQ2xvc2UgPSAkZWxlbTtcbiAgICB9IGVsc2UgaWYgKGlkeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAkdG9DbG9zZSA9IHRoaXMuJHRhYnMubm90KGZ1bmN0aW9uKGksIGVsKSB7XG4gICAgICAgIHJldHVybiBpID09PSBpZHg7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAkdG9DbG9zZSA9IHRoaXMuJGVsZW1lbnQ7XG4gICAgfVxuICAgIHZhciBzb21ldGhpbmdUb0Nsb3NlID0gJHRvQ2xvc2UuaGFzQ2xhc3MoJ2lzLWFjdGl2ZScpIHx8ICR0b0Nsb3NlLmZpbmQoJy5pcy1hY3RpdmUnKS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKHNvbWV0aGluZ1RvQ2xvc2UpIHtcbiAgICAgICR0b0Nsb3NlLmZpbmQoJ2xpLmlzLWFjdGl2ZScpLmFkZCgkdG9DbG9zZSkuYXR0cih7XG4gICAgICAgICdhcmlhLWV4cGFuZGVkJzogZmFsc2UsXG4gICAgICAgICdkYXRhLWlzLWNsaWNrJzogZmFsc2VcbiAgICAgIH0pLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUnKTtcblxuICAgICAgJHRvQ2xvc2UuZmluZCgndWwuanMtZHJvcGRvd24tYWN0aXZlJykuYXR0cih7XG4gICAgICAgICdhcmlhLWhpZGRlbic6IHRydWVcbiAgICAgIH0pLnJlbW92ZUNsYXNzKCdqcy1kcm9wZG93bi1hY3RpdmUnKTtcblxuICAgICAgaWYgKHRoaXMuY2hhbmdlZCB8fCAkdG9DbG9zZS5maW5kKCdvcGVucy1pbm5lcicpLmxlbmd0aCkge1xuICAgICAgICB2YXIgb2xkQ2xhc3MgPSB0aGlzLm9wdGlvbnMuYWxpZ25tZW50ID09PSAnbGVmdCcgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICAkdG9DbG9zZS5maW5kKCdsaS5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCcpLmFkZCgkdG9DbG9zZSlcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoYG9wZW5zLWlubmVyIG9wZW5zLSR7dGhpcy5vcHRpb25zLmFsaWdubWVudH1gKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhgb3BlbnMtJHtvbGRDbGFzc31gKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIEZpcmVzIHdoZW4gdGhlIG9wZW4gbWVudXMgYXJlIGNsb3NlZC5cbiAgICAgICAqIEBldmVudCBEcm9wZG93bk1lbnUjaGlkZVxuICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2hpZGUuemYuZHJvcGRvd25tZW51JywgWyR0b0Nsb3NlXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBwbHVnaW4uXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLiRtZW51SXRlbXMub2ZmKCcuemYuZHJvcGRvd25tZW51JykucmVtb3ZlQXR0cignZGF0YS1pcy1jbGljaycpXG4gICAgICAgIC5yZW1vdmVDbGFzcygnaXMtcmlnaHQtYXJyb3cgaXMtbGVmdC1hcnJvdyBpcy1kb3duLWFycm93IG9wZW5zLXJpZ2h0IG9wZW5zLWxlZnQgb3BlbnMtaW5uZXInKTtcbiAgICAkKGRvY3VtZW50LmJvZHkpLm9mZignLnpmLmRyb3Bkb3dubWVudScpO1xuICAgIEZvdW5kYXRpb24uTmVzdC5CdXJuKHRoaXMuJGVsZW1lbnQsICdkcm9wZG93bicpO1xuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIHBsdWdpblxuICovXG5Ecm9wZG93bk1lbnUuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBEaXNhbGxvd3MgaG92ZXIgZXZlbnRzIGZyb20gb3BlbmluZyBzdWJtZW51c1xuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBkaXNhYmxlSG92ZXI6IGZhbHNlLFxuICAvKipcbiAgICogQWxsb3cgYSBzdWJtZW51IHRvIGF1dG9tYXRpY2FsbHkgY2xvc2Ugb24gYSBtb3VzZWxlYXZlIGV2ZW50LCBpZiBub3QgY2xpY2tlZCBvcGVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGF1dG9jbG9zZTogdHJ1ZSxcbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIHRvIGRlbGF5IG9wZW5pbmcgYSBzdWJtZW51IG9uIGhvdmVyIGV2ZW50LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDUwXG4gICAqL1xuICBob3ZlckRlbGF5OiA1MCxcbiAgLyoqXG4gICAqIEFsbG93IGEgc3VibWVudSB0byBvcGVuL3JlbWFpbiBvcGVuIG9uIHBhcmVudCBjbGljayBldmVudC4gQWxsb3dzIGN1cnNvciB0byBtb3ZlIGF3YXkgZnJvbSBtZW51LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGNsaWNrT3BlbjogZmFsc2UsXG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdGltZSB0byBkZWxheSBjbG9zaW5nIGEgc3VibWVudSBvbiBhIG1vdXNlbGVhdmUgZXZlbnQuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgNTAwXG4gICAqL1xuXG4gIGNsb3NpbmdUaW1lOiA1MDAsXG4gIC8qKlxuICAgKiBQb3NpdGlvbiBvZiB0aGUgbWVudSByZWxhdGl2ZSB0byB3aGF0IGRpcmVjdGlvbiB0aGUgc3VibWVudXMgc2hvdWxkIG9wZW4uIEhhbmRsZWQgYnkgSlMuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ2xlZnQnXG4gICAqL1xuICBhbGlnbm1lbnQ6ICdsZWZ0JyxcbiAgLyoqXG4gICAqIEFsbG93IGNsaWNrcyBvbiB0aGUgYm9keSB0byBjbG9zZSBhbnkgb3BlbiBzdWJtZW51cy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSB0cnVlXG4gICAqL1xuICBjbG9zZU9uQ2xpY2s6IHRydWUsXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIHZlcnRpY2FsIG9yaWVudGVkIG1lbnVzLCBGb3VuZGF0aW9uIGRlZmF1bHQgaXMgYHZlcnRpY2FsYC4gVXBkYXRlIHRoaXMgaWYgdXNpbmcgeW91ciBvd24gY2xhc3MuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ3ZlcnRpY2FsJ1xuICAgKi9cbiAgdmVydGljYWxDbGFzczogJ3ZlcnRpY2FsJyxcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gcmlnaHQtc2lkZSBvcmllbnRlZCBtZW51cywgRm91bmRhdGlvbiBkZWZhdWx0IGlzIGBhbGlnbi1yaWdodGAuIFVwZGF0ZSB0aGlzIGlmIHVzaW5nIHlvdXIgb3duIGNsYXNzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdhbGlnbi1yaWdodCdcbiAgICovXG4gIHJpZ2h0Q2xhc3M6ICdhbGlnbi1yaWdodCcsXG4gIC8qKlxuICAgKiBCb29sZWFuIHRvIGZvcmNlIG92ZXJpZGUgdGhlIGNsaWNraW5nIG9mIGxpbmtzIHRvIHBlcmZvcm0gZGVmYXVsdCBhY3Rpb24sIG9uIHNlY29uZCB0b3VjaCBldmVudCBmb3IgbW9iaWxlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBmb3JjZUZvbGxvdzogdHJ1ZVxufTtcblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKERyb3Bkb3duTWVudSwgJ0Ryb3Bkb3duTWVudScpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogRXF1YWxpemVyIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5lcXVhbGl6ZXJcbiAqL1xuXG5jbGFzcyBFcXVhbGl6ZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBFcXVhbGl6ZXIuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgRXF1YWxpemVyI2luaXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGFkZCB0aGUgdHJpZ2dlciB0by5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucyl7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zICA9ICQuZXh0ZW5kKHt9LCBFcXVhbGl6ZXIuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ0VxdWFsaXplcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBFcXVhbGl6ZXIgcGx1Z2luIGFuZCBjYWxscyBmdW5jdGlvbnMgdG8gZ2V0IGVxdWFsaXplciBmdW5jdGlvbmluZyBvbiBsb2FkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIGVxSWQgPSB0aGlzLiRlbGVtZW50LmF0dHIoJ2RhdGEtZXF1YWxpemVyJykgfHwgJyc7XG4gICAgdmFyICR3YXRjaGVkID0gdGhpcy4kZWxlbWVudC5maW5kKGBbZGF0YS1lcXVhbGl6ZXItd2F0Y2g9XCIke2VxSWR9XCJdYCk7XG5cbiAgICB0aGlzLiR3YXRjaGVkID0gJHdhdGNoZWQubGVuZ3RoID8gJHdhdGNoZWQgOiB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLWVxdWFsaXplci13YXRjaF0nKTtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2RhdGEtcmVzaXplJywgKGVxSWQgfHwgRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAnZXEnKSkpO1xuXG4gICAgdGhpcy5oYXNOZXN0ZWQgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLWVxdWFsaXplcl0nKS5sZW5ndGggPiAwO1xuICAgIHRoaXMuaXNOZXN0ZWQgPSB0aGlzLiRlbGVtZW50LnBhcmVudHNVbnRpbChkb2N1bWVudC5ib2R5LCAnW2RhdGEtZXF1YWxpemVyXScpLmxlbmd0aCA+IDA7XG4gICAgdGhpcy5pc09uID0gZmFsc2U7XG5cbiAgICB2YXIgaW1ncyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnaW1nJyk7XG4gICAgdmFyIHRvb1NtYWxsO1xuICAgIGlmKHRoaXMub3B0aW9ucy5lcXVhbGl6ZU9uKXtcbiAgICAgIHRvb1NtYWxsID0gdGhpcy5fY2hlY2tNUSgpO1xuICAgICAgJCh3aW5kb3cpLm9uKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCB0aGlzLl9jaGVja01RLmJpbmQodGhpcykpO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5fZXZlbnRzKCk7XG4gICAgfVxuICAgIGlmKCh0b29TbWFsbCAhPT0gdW5kZWZpbmVkICYmIHRvb1NtYWxsID09PSBmYWxzZSkgfHwgdG9vU21hbGwgPT09IHVuZGVmaW5lZCl7XG4gICAgICBpZihpbWdzLmxlbmd0aCl7XG4gICAgICAgIEZvdW5kYXRpb24ub25JbWFnZXNMb2FkZWQoaW1ncywgdGhpcy5fcmVmbG93LmJpbmQodGhpcykpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHRoaXMuX3JlZmxvdygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGV2ZW50IGxpc3RlbmVycyBpZiB0aGUgYnJlYWtwb2ludCBpcyB0b28gc21hbGwuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGF1c2VFdmVudHMoKSB7XG4gICAgdGhpcy5pc09uID0gZmFsc2U7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi5lcXVhbGl6ZXIgcmVzaXplbWUuemYudHJpZ2dlcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGV2ZW50cyBmb3IgRXF1YWxpemVyLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHRoaXMuX3BhdXNlRXZlbnRzKCk7XG4gICAgaWYodGhpcy5oYXNOZXN0ZWQpe1xuICAgICAgdGhpcy4kZWxlbWVudC5vbigncG9zdGVxdWFsaXplZC56Zi5lcXVhbGl6ZXInLCBmdW5jdGlvbihlKXtcbiAgICAgICAgaWYoZS50YXJnZXQgIT09IF90aGlzLiRlbGVtZW50WzBdKXsgX3RoaXMuX3JlZmxvdygpOyB9XG4gICAgICB9KTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInLCB0aGlzLl9yZWZsb3cuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIHRoaXMuaXNPbiA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHRoZSBjdXJyZW50IGJyZWFrcG9pbnQgdG8gdGhlIG1pbmltdW0gcmVxdWlyZWQgc2l6ZS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja01RKCkge1xuICAgIHZhciB0b29TbWFsbCA9ICFGb3VuZGF0aW9uLk1lZGlhUXVlcnkuYXRMZWFzdCh0aGlzLm9wdGlvbnMuZXF1YWxpemVPbik7XG4gICAgaWYodG9vU21hbGwpe1xuICAgICAgaWYodGhpcy5pc09uKXtcbiAgICAgICAgdGhpcy5fcGF1c2VFdmVudHMoKTtcbiAgICAgICAgdGhpcy4kd2F0Y2hlZC5jc3MoJ2hlaWdodCcsICdhdXRvJyk7XG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICBpZighdGhpcy5pc09uKXtcbiAgICAgICAgdGhpcy5fZXZlbnRzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0b29TbWFsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIG5vb3AgdmVyc2lvbiBmb3IgdGhlIHBsdWdpblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2tpbGxzd2l0Y2goKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIG5lY2Vzc2FyeSBmdW5jdGlvbnMgdG8gdXBkYXRlIEVxdWFsaXplciB1cG9uIERPTSBjaGFuZ2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZWZsb3coKSB7XG4gICAgaWYoIXRoaXMub3B0aW9ucy5lcXVhbGl6ZU9uU3RhY2spe1xuICAgICAgaWYodGhpcy5faXNTdGFja2VkKCkpe1xuICAgICAgICB0aGlzLiR3YXRjaGVkLmNzcygnaGVpZ2h0JywgJ2F1dG8nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmVxdWFsaXplQnlSb3cpIHtcbiAgICAgIHRoaXMuZ2V0SGVpZ2h0c0J5Um93KHRoaXMuYXBwbHlIZWlnaHRCeVJvdy5iaW5kKHRoaXMpKTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuZ2V0SGVpZ2h0cyh0aGlzLmFwcGx5SGVpZ2h0LmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBkZXRlcm1pbmVzIGlmIHRoZSBmaXJzdCAyIGVsZW1lbnRzIGFyZSAqTk9UKiBzdGFja2VkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzU3RhY2tlZCgpIHtcbiAgICByZXR1cm4gdGhpcy4kd2F0Y2hlZFswXS5vZmZzZXRUb3AgIT09IHRoaXMuJHdhdGNoZWRbMV0ub2Zmc2V0VG9wO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBvdXRlciBoZWlnaHRzIG9mIGNoaWxkcmVuIGNvbnRhaW5lZCB3aXRoaW4gYW4gRXF1YWxpemVyIHBhcmVudCBhbmQgcmV0dXJucyB0aGVtIGluIGFuIGFycmF5XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gQSBub24tb3B0aW9uYWwgY2FsbGJhY2sgdG8gcmV0dXJuIHRoZSBoZWlnaHRzIGFycmF5IHRvLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGhlaWdodHMgLSBBbiBhcnJheSBvZiBoZWlnaHRzIG9mIGNoaWxkcmVuIHdpdGhpbiBFcXVhbGl6ZXIgY29udGFpbmVyXG4gICAqL1xuICBnZXRIZWlnaHRzKGNiKSB7XG4gICAgdmFyIGhlaWdodHMgPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSB0aGlzLiR3YXRjaGVkLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXtcbiAgICAgIHRoaXMuJHdhdGNoZWRbaV0uc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgaGVpZ2h0cy5wdXNoKHRoaXMuJHdhdGNoZWRbaV0ub2Zmc2V0SGVpZ2h0KTtcbiAgICB9XG4gICAgY2IoaGVpZ2h0cyk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIG91dGVyIGhlaWdodHMgb2YgY2hpbGRyZW4gY29udGFpbmVkIHdpdGhpbiBhbiBFcXVhbGl6ZXIgcGFyZW50IGFuZCByZXR1cm5zIHRoZW0gaW4gYW4gYXJyYXlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBBIG5vbi1vcHRpb25hbCBjYWxsYmFjayB0byByZXR1cm4gdGhlIGhlaWdodHMgYXJyYXkgdG8uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gZ3JvdXBzIC0gQW4gYXJyYXkgb2YgaGVpZ2h0cyBvZiBjaGlsZHJlbiB3aXRoaW4gRXF1YWxpemVyIGNvbnRhaW5lciBncm91cGVkIGJ5IHJvdyB3aXRoIGVsZW1lbnQsaGVpZ2h0IGFuZCBtYXggYXMgbGFzdCBjaGlsZFxuICAgKi9cbiAgZ2V0SGVpZ2h0c0J5Um93KGNiKSB7XG4gICAgdmFyIGxhc3RFbFRvcE9mZnNldCA9ICh0aGlzLiR3YXRjaGVkLmxlbmd0aCA/IHRoaXMuJHdhdGNoZWQuZmlyc3QoKS5vZmZzZXQoKS50b3AgOiAwKSxcbiAgICAgICAgZ3JvdXBzID0gW10sXG4gICAgICAgIGdyb3VwID0gMDtcbiAgICAvL2dyb3VwIGJ5IFJvd1xuICAgIGdyb3Vwc1tncm91cF0gPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSB0aGlzLiR3YXRjaGVkLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXtcbiAgICAgIHRoaXMuJHdhdGNoZWRbaV0uc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgLy9tYXliZSBjb3VsZCB1c2UgdGhpcy4kd2F0Y2hlZFtpXS5vZmZzZXRUb3BcbiAgICAgIHZhciBlbE9mZnNldFRvcCA9ICQodGhpcy4kd2F0Y2hlZFtpXSkub2Zmc2V0KCkudG9wO1xuICAgICAgaWYgKGVsT2Zmc2V0VG9wIT1sYXN0RWxUb3BPZmZzZXQpIHtcbiAgICAgICAgZ3JvdXArKztcbiAgICAgICAgZ3JvdXBzW2dyb3VwXSA9IFtdO1xuICAgICAgICBsYXN0RWxUb3BPZmZzZXQ9ZWxPZmZzZXRUb3A7XG4gICAgICB9XG4gICAgICBncm91cHNbZ3JvdXBdLnB1c2goW3RoaXMuJHdhdGNoZWRbaV0sdGhpcy4kd2F0Y2hlZFtpXS5vZmZzZXRIZWlnaHRdKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMCwgbG4gPSBncm91cHMubGVuZ3RoOyBqIDwgbG47IGorKykge1xuICAgICAgdmFyIGhlaWdodHMgPSAkKGdyb3Vwc1tqXSkubWFwKGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzWzFdOyB9KS5nZXQoKTtcbiAgICAgIHZhciBtYXggICAgICAgICA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGhlaWdodHMpO1xuICAgICAgZ3JvdXBzW2pdLnB1c2gobWF4KTtcbiAgICB9XG4gICAgY2IoZ3JvdXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBDU1MgaGVpZ2h0IHByb3BlcnR5IG9mIGVhY2ggY2hpbGQgaW4gYW4gRXF1YWxpemVyIHBhcmVudCB0byBtYXRjaCB0aGUgdGFsbGVzdFxuICAgKiBAcGFyYW0ge2FycmF5fSBoZWlnaHRzIC0gQW4gYXJyYXkgb2YgaGVpZ2h0cyBvZiBjaGlsZHJlbiB3aXRoaW4gRXF1YWxpemVyIGNvbnRhaW5lclxuICAgKiBAZmlyZXMgRXF1YWxpemVyI3ByZWVxdWFsaXplZFxuICAgKiBAZmlyZXMgRXF1YWxpemVyI3Bvc3RlcXVhbGl6ZWRcbiAgICovXG4gIGFwcGx5SGVpZ2h0KGhlaWdodHMpIHtcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXguYXBwbHkobnVsbCwgaGVpZ2h0cyk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIHRoZSBoZWlnaHRzIGFyZSBhcHBsaWVkXG4gICAgICogQGV2ZW50IEVxdWFsaXplciNwcmVlcXVhbGl6ZWRcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3ByZWVxdWFsaXplZC56Zi5lcXVhbGl6ZXInKTtcblxuICAgIHRoaXMuJHdhdGNoZWQuY3NzKCdoZWlnaHQnLCBtYXgpO1xuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgaGVpZ2h0cyBoYXZlIGJlZW4gYXBwbGllZFxuICAgICAqIEBldmVudCBFcXVhbGl6ZXIjcG9zdGVxdWFsaXplZFxuICAgICAqL1xuICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Bvc3RlcXVhbGl6ZWQuemYuZXF1YWxpemVyJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgQ1NTIGhlaWdodCBwcm9wZXJ0eSBvZiBlYWNoIGNoaWxkIGluIGFuIEVxdWFsaXplciBwYXJlbnQgdG8gbWF0Y2ggdGhlIHRhbGxlc3QgYnkgcm93XG4gICAqIEBwYXJhbSB7YXJyYXl9IGdyb3VwcyAtIEFuIGFycmF5IG9mIGhlaWdodHMgb2YgY2hpbGRyZW4gd2l0aGluIEVxdWFsaXplciBjb250YWluZXIgZ3JvdXBlZCBieSByb3cgd2l0aCBlbGVtZW50LGhlaWdodCBhbmQgbWF4IGFzIGxhc3QgY2hpbGRcbiAgICogQGZpcmVzIEVxdWFsaXplciNwcmVlcXVhbGl6ZWRcbiAgICogQGZpcmVzIEVxdWFsaXplciNwcmVlcXVhbGl6ZWRSb3dcbiAgICogQGZpcmVzIEVxdWFsaXplciNwb3N0ZXF1YWxpemVkUm93XG4gICAqIEBmaXJlcyBFcXVhbGl6ZXIjcG9zdGVxdWFsaXplZFxuICAgKi9cbiAgYXBwbHlIZWlnaHRCeVJvdyhncm91cHMpIHtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgdGhlIGhlaWdodHMgYXJlIGFwcGxpZWRcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3ByZWVxdWFsaXplZC56Zi5lcXVhbGl6ZXInKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGxlbiA7IGkrKykge1xuICAgICAgdmFyIGdyb3Vwc0lMZW5ndGggPSBncm91cHNbaV0ubGVuZ3RoLFxuICAgICAgICAgIG1heCA9IGdyb3Vwc1tpXVtncm91cHNJTGVuZ3RoIC0gMV07XG4gICAgICBpZiAoZ3JvdXBzSUxlbmd0aDw9Mikge1xuICAgICAgICAkKGdyb3Vwc1tpXVswXVswXSkuY3NzKHsnaGVpZ2h0JzonYXV0byd9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAgKiBGaXJlcyBiZWZvcmUgdGhlIGhlaWdodHMgcGVyIHJvdyBhcmUgYXBwbGllZFxuICAgICAgICAqIEBldmVudCBFcXVhbGl6ZXIjcHJlZXF1YWxpemVkUm93XG4gICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3ByZWVxdWFsaXplZHJvdy56Zi5lcXVhbGl6ZXInKTtcbiAgICAgIGZvciAodmFyIGogPSAwLCBsZW5KID0gKGdyb3Vwc0lMZW5ndGgtMSk7IGogPCBsZW5KIDsgaisrKSB7XG4gICAgICAgICQoZ3JvdXBzW2ldW2pdWzBdKS5jc3MoeydoZWlnaHQnOm1heH0pO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgICogRmlyZXMgd2hlbiB0aGUgaGVpZ2h0cyBwZXIgcm93IGhhdmUgYmVlbiBhcHBsaWVkXG4gICAgICAgICogQGV2ZW50IEVxdWFsaXplciNwb3N0ZXF1YWxpemVkUm93XG4gICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Bvc3RlcXVhbGl6ZWRyb3cuemYuZXF1YWxpemVyJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIGhlaWdodHMgaGF2ZSBiZWVuIGFwcGxpZWRcbiAgICAgKi9cbiAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdwb3N0ZXF1YWxpemVkLnpmLmVxdWFsaXplcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFuIGluc3RhbmNlIG9mIEVxdWFsaXplci5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX3BhdXNlRXZlbnRzKCk7XG4gICAgdGhpcy4kd2F0Y2hlZC5jc3MoJ2hlaWdodCcsICdhdXRvJyk7XG5cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IHNldHRpbmdzIGZvciBwbHVnaW5cbiAqL1xuRXF1YWxpemVyLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogRW5hYmxlIGhlaWdodCBlcXVhbGl6YXRpb24gd2hlbiBzdGFja2VkIG9uIHNtYWxsZXIgc2NyZWVucy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSB0cnVlXG4gICAqL1xuICBlcXVhbGl6ZU9uU3RhY2s6IHRydWUsXG4gIC8qKlxuICAgKiBFbmFibGUgaGVpZ2h0IGVxdWFsaXphdGlvbiByb3cgYnkgcm93LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBlcXVhbGl6ZUJ5Um93OiBmYWxzZSxcbiAgLyoqXG4gICAqIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIG1pbmltdW0gYnJlYWtwb2ludCBzaXplIHRoZSBwbHVnaW4gc2hvdWxkIGVxdWFsaXplIGhlaWdodHMgb24uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ21lZGl1bSdcbiAgICovXG4gIGVxdWFsaXplT246ICcnXG59O1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oRXF1YWxpemVyLCAnRXF1YWxpemVyJyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBJbnRlcmNoYW5nZSBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uaW50ZXJjaGFuZ2VcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50aW1lckFuZEltYWdlTG9hZGVyXG4gKi9cblxuY2xhc3MgSW50ZXJjaGFuZ2Uge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBJbnRlcmNoYW5nZS5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBJbnRlcmNoYW5nZSNpbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIHRyaWdnZXIgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgSW50ZXJjaGFuZ2UuZGVmYXVsdHMsIG9wdGlvbnMpO1xuICAgIHRoaXMucnVsZXMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gJyc7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdJbnRlcmNoYW5nZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBJbnRlcmNoYW5nZSBwbHVnaW4gYW5kIGNhbGxzIGZ1bmN0aW9ucyB0byBnZXQgaW50ZXJjaGFuZ2UgZnVuY3Rpb25pbmcgb24gbG9hZC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB0aGlzLl9hZGRCcmVha3BvaW50cygpO1xuICAgIHRoaXMuX2dlbmVyYXRlUnVsZXMoKTtcbiAgICB0aGlzLl9yZWZsb3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBldmVudHMgZm9yIEludGVyY2hhbmdlLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgJCh3aW5kb3cpLm9uKCdyZXNpemUuemYuaW50ZXJjaGFuZ2UnLCBGb3VuZGF0aW9uLnV0aWwudGhyb3R0bGUodGhpcy5fcmVmbG93LmJpbmQodGhpcyksIDUwKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgbmVjZXNzYXJ5IGZ1bmN0aW9ucyB0byB1cGRhdGUgSW50ZXJjaGFuZ2UgdXBvbiBET00gY2hhbmdlXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlZmxvdygpIHtcbiAgICB2YXIgbWF0Y2g7XG5cbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBydWxlLCBidXQgb25seSBzYXZlIHRoZSBsYXN0IG1hdGNoXG4gICAgZm9yICh2YXIgaSBpbiB0aGlzLnJ1bGVzKSB7XG4gICAgICB2YXIgcnVsZSA9IHRoaXMucnVsZXNbaV07XG5cbiAgICAgIGlmICh3aW5kb3cubWF0Y2hNZWRpYShydWxlLnF1ZXJ5KS5tYXRjaGVzKSB7XG4gICAgICAgIG1hdGNoID0gcnVsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHRoaXMucmVwbGFjZShtYXRjaC5wYXRoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgRm91bmRhdGlvbiBicmVha3BvaW50cyBhbmQgYWRkcyB0aGVtIHRvIHRoZSBJbnRlcmNoYW5nZS5TUEVDSUFMX1FVRVJJRVMgb2JqZWN0LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRCcmVha3BvaW50cygpIHtcbiAgICBmb3IgKHZhciBpIGluIEZvdW5kYXRpb24uTWVkaWFRdWVyeS5xdWVyaWVzKSB7XG4gICAgICB2YXIgcXVlcnkgPSBGb3VuZGF0aW9uLk1lZGlhUXVlcnkucXVlcmllc1tpXTtcbiAgICAgIEludGVyY2hhbmdlLlNQRUNJQUxfUVVFUklFU1txdWVyeS5uYW1lXSA9IHF1ZXJ5LnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIEludGVyY2hhbmdlIGVsZW1lbnQgZm9yIHRoZSBwcm92aWRlZCBtZWRpYSBxdWVyeSArIGNvbnRlbnQgcGFpcmluZ3NcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0aGF0IGlzIGFuIEludGVyY2hhbmdlIGluc3RhbmNlXG4gICAqIEByZXR1cm5zIHtBcnJheX0gc2NlbmFyaW9zIC0gQXJyYXkgb2Ygb2JqZWN0cyB0aGF0IGhhdmUgJ21xJyBhbmQgJ3BhdGgnIGtleXMgd2l0aCBjb3JyZXNwb25kaW5nIGtleXNcbiAgICovXG4gIF9nZW5lcmF0ZVJ1bGVzKGVsZW1lbnQpIHtcbiAgICB2YXIgcnVsZXNMaXN0ID0gW107XG4gICAgdmFyIHJ1bGVzO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ydWxlcykge1xuICAgICAgcnVsZXMgPSB0aGlzLm9wdGlvbnMucnVsZXM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcnVsZXMgPSB0aGlzLiRlbGVtZW50LmRhdGEoJ2ludGVyY2hhbmdlJykubWF0Y2goL1xcWy4qP1xcXS9nKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpIGluIHJ1bGVzKSB7XG4gICAgICB2YXIgcnVsZSA9IHJ1bGVzW2ldLnNsaWNlKDEsIC0xKS5zcGxpdCgnLCAnKTtcbiAgICAgIHZhciBwYXRoID0gcnVsZS5zbGljZSgwLCAtMSkuam9pbignJyk7XG4gICAgICB2YXIgcXVlcnkgPSBydWxlW3J1bGUubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChJbnRlcmNoYW5nZS5TUEVDSUFMX1FVRVJJRVNbcXVlcnldKSB7XG4gICAgICAgIHF1ZXJ5ID0gSW50ZXJjaGFuZ2UuU1BFQ0lBTF9RVUVSSUVTW3F1ZXJ5XTtcbiAgICAgIH1cblxuICAgICAgcnVsZXNMaXN0LnB1c2goe1xuICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucnVsZXMgPSBydWxlc0xpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBgc3JjYCBwcm9wZXJ0eSBvZiBhbiBpbWFnZSwgb3IgY2hhbmdlIHRoZSBIVE1MIG9mIGEgY29udGFpbmVyLCB0byB0aGUgc3BlY2lmaWVkIHBhdGguXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCAtIFBhdGggdG8gdGhlIGltYWdlIG9yIEhUTUwgcGFydGlhbC5cbiAgICogQGZpcmVzIEludGVyY2hhbmdlI3JlcGxhY2VkXG4gICAqL1xuICByZXBsYWNlKHBhdGgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aCA9PT0gcGF0aCkgcmV0dXJuO1xuXG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgdHJpZ2dlciA9ICdyZXBsYWNlZC56Zi5pbnRlcmNoYW5nZSc7XG5cbiAgICAvLyBSZXBsYWNpbmcgaW1hZ2VzXG4gICAgaWYgKHRoaXMuJGVsZW1lbnRbMF0ubm9kZU5hbWUgPT09ICdJTUcnKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ3NyYycsIHBhdGgpLmxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLmN1cnJlbnRQYXRoID0gcGF0aDtcbiAgICAgIH0pXG4gICAgICAudHJpZ2dlcih0cmlnZ2VyKTtcbiAgICB9XG4gICAgLy8gUmVwbGFjaW5nIGJhY2tncm91bmQgaW1hZ2VzXG4gICAgZWxzZSBpZiAocGF0aC5tYXRjaCgvXFwuKGdpZnxqcGd8anBlZ3xwbmd8c3ZnfHRpZmYpKFs/I10uKik/L2kpKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmNzcyh7ICdiYWNrZ3JvdW5kLWltYWdlJzogJ3VybCgnK3BhdGgrJyknIH0pXG4gICAgICAgICAgLnRyaWdnZXIodHJpZ2dlcik7XG4gICAgfVxuICAgIC8vIFJlcGxhY2luZyBIVE1MXG4gICAgZWxzZSB7XG4gICAgICAkLmdldChwYXRoLCBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICBfdGhpcy4kZWxlbWVudC5odG1sKHJlc3BvbnNlKVxuICAgICAgICAgICAgIC50cmlnZ2VyKHRyaWdnZXIpO1xuICAgICAgICAkKHJlc3BvbnNlKS5mb3VuZGF0aW9uKCk7XG4gICAgICAgIF90aGlzLmN1cnJlbnRQYXRoID0gcGF0aDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gY29udGVudCBpbiBhbiBJbnRlcmNoYW5nZSBlbGVtZW50IGlzIGRvbmUgYmVpbmcgbG9hZGVkLlxuICAgICAqIEBldmVudCBJbnRlcmNoYW5nZSNyZXBsYWNlZFxuICAgICAqL1xuICAgIC8vIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigncmVwbGFjZWQuemYuaW50ZXJjaGFuZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyBhbiBpbnN0YW5jZSBvZiBpbnRlcmNoYW5nZS5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIC8vVE9ETyB0aGlzLlxuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBzZXR0aW5ncyBmb3IgcGx1Z2luXG4gKi9cbkludGVyY2hhbmdlLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogUnVsZXMgdG8gYmUgYXBwbGllZCB0byBJbnRlcmNoYW5nZSBlbGVtZW50cy4gU2V0IHdpdGggdGhlIGBkYXRhLWludGVyY2hhbmdlYCBhcnJheSBub3RhdGlvbi5cbiAgICogQG9wdGlvblxuICAgKi9cbiAgcnVsZXM6IG51bGxcbn07XG5cbkludGVyY2hhbmdlLlNQRUNJQUxfUVVFUklFUyA9IHtcbiAgJ2xhbmRzY2FwZSc6ICdzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKScsXG4gICdwb3J0cmFpdCc6ICdzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpJyxcbiAgJ3JldGluYSc6ICdvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIG9ubHkgc2NyZWVuIGFuZCAobWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgb25seSBzY3JlZW4gYW5kICgtby1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyLzEpLCBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCBvbmx5IHNjcmVlbiBhbmQgKG1pbi1yZXNvbHV0aW9uOiAxOTJkcGkpLCBvbmx5IHNjcmVlbiBhbmQgKG1pbi1yZXNvbHV0aW9uOiAyZHBweCknXG59O1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oSW50ZXJjaGFuZ2UsICdJbnRlcmNoYW5nZScpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogTWFnZWxsYW4gbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLm1hZ2VsbGFuXG4gKi9cblxuY2xhc3MgTWFnZWxsYW4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBNYWdlbGxhbi5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBNYWdlbGxhbiNpbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIHRyaWdnZXIgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgID0gJC5leHRlbmQoe30sIE1hZ2VsbGFuLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdNYWdlbGxhbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBNYWdlbGxhbiBwbHVnaW4gYW5kIGNhbGxzIGZ1bmN0aW9ucyB0byBnZXQgZXF1YWxpemVyIGZ1bmN0aW9uaW5nIG9uIGxvYWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB2YXIgaWQgPSB0aGlzLiRlbGVtZW50WzBdLmlkIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ21hZ2VsbGFuJyk7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLiR0YXJnZXRzID0gJCgnW2RhdGEtbWFnZWxsYW4tdGFyZ2V0XScpO1xuICAgIHRoaXMuJGxpbmtzID0gdGhpcy4kZWxlbWVudC5maW5kKCdhJyk7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKHtcbiAgICAgICdkYXRhLXJlc2l6ZSc6IGlkLFxuICAgICAgJ2RhdGEtc2Nyb2xsJzogaWQsXG4gICAgICAnaWQnOiBpZFxuICAgIH0pO1xuICAgIHRoaXMuJGFjdGl2ZSA9ICQoKTtcbiAgICB0aGlzLnNjcm9sbFBvcyA9IHBhcnNlSW50KHdpbmRvdy5wYWdlWU9mZnNldCwgMTApO1xuXG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhbiBhcnJheSBvZiBwaXhlbCB2YWx1ZXMgdGhhdCBhcmUgdGhlIGRlbWFyY2F0aW9uIGxpbmVzIGJldHdlZW4gbG9jYXRpb25zIG9uIHRoZSBwYWdlLlxuICAgKiBDYW4gYmUgaW52b2tlZCBpZiBuZXcgZWxlbWVudHMgYXJlIGFkZGVkIG9yIHRoZSBzaXplIG9mIGEgbG9jYXRpb24gY2hhbmdlcy5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBjYWxjUG9pbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgIGJvZHkgPSBkb2N1bWVudC5ib2R5LFxuICAgICAgICBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcbiAgICB0aGlzLndpbkhlaWdodCA9IE1hdGgucm91bmQoTWF0aC5tYXgod2luZG93LmlubmVySGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCkpO1xuICAgIHRoaXMuZG9jSGVpZ2h0ID0gTWF0aC5yb3VuZChNYXRoLm1heChib2R5LnNjcm9sbEhlaWdodCwgYm9keS5vZmZzZXRIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5vZmZzZXRIZWlnaHQpKTtcblxuICAgIHRoaXMuJHRhcmdldHMuZWFjaChmdW5jdGlvbigpe1xuICAgICAgdmFyICR0YXIgPSAkKHRoaXMpLFxuICAgICAgICAgIHB0ID0gTWF0aC5yb3VuZCgkdGFyLm9mZnNldCgpLnRvcCAtIF90aGlzLm9wdGlvbnMudGhyZXNob2xkKTtcbiAgICAgICR0YXIudGFyZ2V0UG9pbnQgPSBwdDtcbiAgICAgIF90aGlzLnBvaW50cy5wdXNoKHB0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBldmVudHMgZm9yIE1hZ2VsbGFuLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICAkYm9keSA9ICQoJ2h0bWwsIGJvZHknKSxcbiAgICAgICAgb3B0cyA9IHtcbiAgICAgICAgICBkdXJhdGlvbjogX3RoaXMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbixcbiAgICAgICAgICBlYXNpbmc6ICAgX3RoaXMub3B0aW9ucy5hbmltYXRpb25FYXNpbmdcbiAgICAgICAgfTtcbiAgICAkKHdpbmRvdykub25lKCdsb2FkJywgZnVuY3Rpb24oKXtcbiAgICAgIGlmKF90aGlzLm9wdGlvbnMuZGVlcExpbmtpbmcpe1xuICAgICAgICBpZihsb2NhdGlvbi5oYXNoKXtcbiAgICAgICAgICBfdGhpcy5zY3JvbGxUb0xvYyhsb2NhdGlvbi5oYXNoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX3RoaXMuY2FsY1BvaW50cygpO1xuICAgICAgX3RoaXMuX3VwZGF0ZUFjdGl2ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kZWxlbWVudC5vbih7XG4gICAgICAncmVzaXplbWUuemYudHJpZ2dlcic6IHRoaXMucmVmbG93LmJpbmQodGhpcyksXG4gICAgICAnc2Nyb2xsbWUuemYudHJpZ2dlcic6IHRoaXMuX3VwZGF0ZUFjdGl2ZS5iaW5kKHRoaXMpXG4gICAgfSkub24oJ2NsaWNrLnpmLm1hZ2VsbGFuJywgJ2FbaHJlZl49XCIjXCJdJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHZhciBhcnJpdmFsICAgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICBfdGhpcy5zY3JvbGxUb0xvYyhhcnJpdmFsKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBzY3JvbGwgdG8gYSBnaXZlbiBsb2NhdGlvbiBvbiB0aGUgcGFnZS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGxvYyAtIGEgcHJvcGVybHkgZm9ybWF0dGVkIGpRdWVyeSBpZCBzZWxlY3Rvci4gRXhhbXBsZTogJyNmb28nXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgc2Nyb2xsVG9Mb2MobG9jKSB7XG4gICAgdmFyIHNjcm9sbFBvcyA9IE1hdGgucm91bmQoJChsb2MpLm9mZnNldCgpLnRvcCAtIHRoaXMub3B0aW9ucy50aHJlc2hvbGQgLyAyIC0gdGhpcy5vcHRpb25zLmJhck9mZnNldCk7XG5cbiAgICAkKCdodG1sLCBib2R5Jykuc3RvcCh0cnVlKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiBzY3JvbGxQb3MgfSwgdGhpcy5vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uLCB0aGlzLm9wdGlvbnMuYW5pbWF0aW9uRWFzaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBuZWNlc3NhcnkgZnVuY3Rpb25zIHRvIHVwZGF0ZSBNYWdlbGxhbiB1cG9uIERPTSBjaGFuZ2VcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICByZWZsb3coKSB7XG4gICAgdGhpcy5jYWxjUG9pbnRzKCk7XG4gICAgdGhpcy5fdXBkYXRlQWN0aXZlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdmlzaWJpbGl0eSBvZiBhbiBhY3RpdmUgbG9jYXRpb24gbGluaywgYW5kIHVwZGF0ZXMgdGhlIHVybCBoYXNoIGZvciB0aGUgcGFnZSwgaWYgZGVlcExpbmtpbmcgZW5hYmxlZC5cbiAgICogQHByaXZhdGVcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBNYWdlbGxhbiN1cGRhdGVcbiAgICovXG4gIF91cGRhdGVBY3RpdmUoLypldnQsIGVsZW0sIHNjcm9sbFBvcyovKSB7XG4gICAgdmFyIHdpblBvcyA9IC8qc2Nyb2xsUG9zIHx8Ki8gcGFyc2VJbnQod2luZG93LnBhZ2VZT2Zmc2V0LCAxMCksXG4gICAgICAgIGN1cklkeDtcblxuICAgIGlmKHdpblBvcyArIHRoaXMud2luSGVpZ2h0ID09PSB0aGlzLmRvY0hlaWdodCl7IGN1cklkeCA9IHRoaXMucG9pbnRzLmxlbmd0aCAtIDE7IH1cbiAgICBlbHNlIGlmKHdpblBvcyA8IHRoaXMucG9pbnRzWzBdKXsgY3VySWR4ID0gMDsgfVxuICAgIGVsc2V7XG4gICAgICB2YXIgaXNEb3duID0gdGhpcy5zY3JvbGxQb3MgPCB3aW5Qb3MsXG4gICAgICAgICAgX3RoaXMgPSB0aGlzLFxuICAgICAgICAgIGN1clZpc2libGUgPSB0aGlzLnBvaW50cy5maWx0ZXIoZnVuY3Rpb24ocCwgaSl7XG4gICAgICAgICAgICByZXR1cm4gaXNEb3duID8gcCA8PSB3aW5Qb3MgOiBwIC0gX3RoaXMub3B0aW9ucy50aHJlc2hvbGQgPD0gd2luUG9zOy8vJiYgd2luUG9zID49IF90aGlzLnBvaW50c1tpIC0xXSAtIF90aGlzLm9wdGlvbnMudGhyZXNob2xkO1xuICAgICAgICAgIH0pO1xuICAgICAgY3VySWR4ID0gY3VyVmlzaWJsZS5sZW5ndGggPyBjdXJWaXNpYmxlLmxlbmd0aCAtIDEgOiAwO1xuICAgIH1cblxuICAgIHRoaXMuJGFjdGl2ZS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpO1xuICAgIHRoaXMuJGFjdGl2ZSA9IHRoaXMuJGxpbmtzLmVxKGN1cklkeCkuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKTtcblxuICAgIGlmKHRoaXMub3B0aW9ucy5kZWVwTGlua2luZyl7XG4gICAgICB2YXIgaGFzaCA9IHRoaXMuJGFjdGl2ZVswXS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgIGlmKHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSl7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCBoYXNoKTtcbiAgICAgIH1lbHNle1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IGhhc2g7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zY3JvbGxQb3MgPSB3aW5Qb3M7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBtYWdlbGxhbiBpcyBmaW5pc2hlZCB1cGRhdGluZyB0byB0aGUgbmV3IGFjdGl2ZSBlbGVtZW50LlxuICAgICAqIEBldmVudCBNYWdlbGxhbiN1cGRhdGVcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3VwZGF0ZS56Zi5tYWdlbGxhbicsIFt0aGlzLiRhY3RpdmVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyBhbiBpbnN0YW5jZSBvZiBNYWdlbGxhbiBhbmQgcmVzZXRzIHRoZSB1cmwgb2YgdGhlIHdpbmRvdy5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuJGVsZW1lbnQub2ZmKCcuemYudHJpZ2dlciAuemYubWFnZWxsYW4nKVxuICAgICAgICAuZmluZChgLiR7dGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzfWApLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyk7XG5cbiAgICBpZih0aGlzLm9wdGlvbnMuZGVlcExpbmtpbmcpe1xuICAgICAgdmFyIGhhc2ggPSB0aGlzLiRhY3RpdmVbMF0uZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKGhhc2gsICcnKTtcbiAgICB9XG5cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IHNldHRpbmdzIGZvciBwbHVnaW5cbiAqL1xuTWFnZWxsYW4uZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdGltZSwgaW4gbXMsIHRoZSBhbmltYXRlZCBzY3JvbGxpbmcgc2hvdWxkIHRha2UgYmV0d2VlbiBsb2NhdGlvbnMuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgNTAwXG4gICAqL1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvKipcbiAgICogQW5pbWF0aW9uIHN0eWxlIHRvIHVzZSB3aGVuIHNjcm9sbGluZyBiZXR3ZWVuIGxvY2F0aW9ucy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnZWFzZS1pbi1vdXQnXG4gICAqL1xuICBhbmltYXRpb25FYXNpbmc6ICdsaW5lYXInLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHBpeGVscyB0byB1c2UgYXMgYSBtYXJrZXIgZm9yIGxvY2F0aW9uIGNoYW5nZXMuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgNTBcbiAgICovXG4gIHRocmVzaG9sZDogNTAsXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIHRoZSBhY3RpdmUgbG9jYXRpb25zIGxpbmsgb24gdGhlIG1hZ2VsbGFuIGNvbnRhaW5lci5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnYWN0aXZlJ1xuICAgKi9cbiAgYWN0aXZlQ2xhc3M6ICdhY3RpdmUnLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSBzY3JpcHQgdG8gbWFuaXB1bGF0ZSB0aGUgdXJsIG9mIHRoZSBjdXJyZW50IHBhZ2UsIGFuZCBpZiBzdXBwb3J0ZWQsIGFsdGVyIHRoZSBoaXN0b3J5LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGRlZXBMaW5raW5nOiBmYWxzZSxcbiAgLyoqXG4gICAqIE51bWJlciBvZiBwaXhlbHMgdG8gb2Zmc2V0IHRoZSBzY3JvbGwgb2YgdGhlIHBhZ2Ugb24gaXRlbSBjbGljayBpZiB1c2luZyBhIHN0aWNreSBuYXYgYmFyLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDI1XG4gICAqL1xuICBiYXJPZmZzZXQ6IDBcbn1cblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKE1hZ2VsbGFuLCAnTWFnZWxsYW4nKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIE9mZkNhbnZhcyBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24ub2ZmY2FudmFzXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1lZGlhUXVlcnlcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudHJpZ2dlcnNcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubW90aW9uXG4gKi9cblxuY2xhc3MgT2ZmQ2FudmFzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gb2ZmLWNhbnZhcyB3cmFwcGVyLlxuICAgKiBAY2xhc3NcbiAgICogQGZpcmVzIE9mZkNhbnZhcyNpbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBpbml0aWFsaXplLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIE9mZkNhbnZhcy5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuJGxhc3RUcmlnZ2VyID0gJCgpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuICAgIHRoaXMuX2V2ZW50cygpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnT2ZmQ2FudmFzJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIG9mZi1jYW52YXMgd3JhcHBlciBieSBhZGRpbmcgdGhlIGV4aXQgb3ZlcmxheSAoaWYgbmVlZGVkKS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB2YXIgaWQgPSB0aGlzLiRlbGVtZW50LmF0dHIoJ2lkJyk7XG5cbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcblxuICAgIC8vIEZpbmQgdHJpZ2dlcnMgdGhhdCBhZmZlY3QgdGhpcyBlbGVtZW50IGFuZCBhZGQgYXJpYS1leHBhbmRlZCB0byB0aGVtXG4gICAgJChkb2N1bWVudClcbiAgICAgIC5maW5kKCdbZGF0YS1vcGVuPVwiJytpZCsnXCJdLCBbZGF0YS1jbG9zZT1cIicraWQrJ1wiXSwgW2RhdGEtdG9nZ2xlPVwiJytpZCsnXCJdJylcbiAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJylcbiAgICAgIC5hdHRyKCdhcmlhLWNvbnRyb2xzJywgaWQpO1xuXG4gICAgLy8gQWRkIGEgY2xvc2UgdHJpZ2dlciBvdmVyIHRoZSBib2R5IGlmIG5lY2Vzc2FyeVxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrKSB7XG4gICAgICBpZiAoJCgnLmpzLW9mZi1jYW52YXMtZXhpdCcpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLiRleGl0ZXIgPSAkKCcuanMtb2ZmLWNhbnZhcy1leGl0Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXhpdGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGV4aXRlci5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2pzLW9mZi1jYW52YXMtZXhpdCcpO1xuICAgICAgICAkKCdbZGF0YS1vZmYtY2FudmFzLWNvbnRlbnRdJykuYXBwZW5kKGV4aXRlcik7XG5cbiAgICAgICAgdGhpcy4kZXhpdGVyID0gJChleGl0ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy5pc1JldmVhbGVkID0gdGhpcy5vcHRpb25zLmlzUmV2ZWFsZWQgfHwgbmV3IFJlZ0V4cCh0aGlzLm9wdGlvbnMucmV2ZWFsQ2xhc3MsICdnJykudGVzdCh0aGlzLiRlbGVtZW50WzBdLmNsYXNzTmFtZSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmlzUmV2ZWFsZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5yZXZlYWxPbiA9IHRoaXMub3B0aW9ucy5yZXZlYWxPbiB8fCB0aGlzLiRlbGVtZW50WzBdLmNsYXNzTmFtZS5tYXRjaCgvKHJldmVhbC1mb3ItbWVkaXVtfHJldmVhbC1mb3ItbGFyZ2UpL2cpWzBdLnNwbGl0KCctJylbMl07XG4gICAgICB0aGlzLl9zZXRNUUNoZWNrZXIoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMudHJhbnNpdGlvblRpbWUpIHtcbiAgICAgIHRoaXMub3B0aW9ucy50cmFuc2l0aW9uVGltZSA9IHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoJCgnW2RhdGEtb2ZmLWNhbnZhcy13cmFwcGVyXScpWzBdKS50cmFuc2l0aW9uRHVyYXRpb24pICogMTAwMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBoYW5kbGVycyB0byB0aGUgb2ZmLWNhbnZhcyB3cmFwcGVyIGFuZCB0aGUgZXhpdCBvdmVybGF5LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi50cmlnZ2VyIC56Zi5vZmZjYW52YXMnKS5vbih7XG4gICAgICAnb3Blbi56Zi50cmlnZ2VyJzogdGhpcy5vcGVuLmJpbmQodGhpcyksXG4gICAgICAnY2xvc2UuemYudHJpZ2dlcic6IHRoaXMuY2xvc2UuYmluZCh0aGlzKSxcbiAgICAgICd0b2dnbGUuemYudHJpZ2dlcic6IHRoaXMudG9nZ2xlLmJpbmQodGhpcyksXG4gICAgICAna2V5ZG93bi56Zi5vZmZjYW52YXMnOiB0aGlzLl9oYW5kbGVLZXlib2FyZC5iaW5kKHRoaXMpXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlT25DbGljayAmJiB0aGlzLiRleGl0ZXIubGVuZ3RoKSB7XG4gICAgICB0aGlzLiRleGl0ZXIub24oeydjbGljay56Zi5vZmZjYW52YXMnOiB0aGlzLmNsb3NlLmJpbmQodGhpcyl9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBldmVudCBsaXN0ZW5lciBmb3IgZWxlbWVudHMgdGhhdCB3aWxsIHJldmVhbCBhdCBjZXJ0YWluIGJyZWFrcG9pbnRzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldE1RQ2hlY2tlcigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgJCh3aW5kb3cpLm9uKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChGb3VuZGF0aW9uLk1lZGlhUXVlcnkuYXRMZWFzdChfdGhpcy5vcHRpb25zLnJldmVhbE9uKSkge1xuICAgICAgICBfdGhpcy5yZXZlYWwodHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5yZXZlYWwoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pLm9uZSgnbG9hZC56Zi5vZmZjYW52YXMnLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChGb3VuZGF0aW9uLk1lZGlhUXVlcnkuYXRMZWFzdChfdGhpcy5vcHRpb25zLnJldmVhbE9uKSkge1xuICAgICAgICBfdGhpcy5yZXZlYWwodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgcmV2ZWFsaW5nL2hpZGluZyB0aGUgb2ZmLWNhbnZhcyBhdCBicmVha3BvaW50cywgbm90IHRoZSBzYW1lIGFzIG9wZW4uXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNSZXZlYWxlZCAtIHRydWUgaWYgZWxlbWVudCBzaG91bGQgYmUgcmV2ZWFsZWQuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgcmV2ZWFsKGlzUmV2ZWFsZWQpIHtcbiAgICB2YXIgJGNsb3NlciA9IHRoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtY2xvc2VdJyk7XG4gICAgaWYgKGlzUmV2ZWFsZWQpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIHRoaXMuaXNSZXZlYWxlZCA9IHRydWU7XG4gICAgICAvLyBpZiAoIXRoaXMub3B0aW9ucy5mb3JjZVRvcCkge1xuICAgICAgLy8gICB2YXIgc2Nyb2xsUG9zID0gcGFyc2VJbnQod2luZG93LnBhZ2VZT2Zmc2V0KTtcbiAgICAgIC8vICAgdGhpcy4kZWxlbWVudFswXS5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlKDAsJyArIHNjcm9sbFBvcyArICdweCknO1xuICAgICAgLy8gfVxuICAgICAgLy8gaWYgKHRoaXMub3B0aW9ucy5pc1N0aWNreSkgeyB0aGlzLl9zdGljaygpOyB9XG4gICAgICB0aGlzLiRlbGVtZW50Lm9mZignb3Blbi56Zi50cmlnZ2VyIHRvZ2dsZS56Zi50cmlnZ2VyJyk7XG4gICAgICBpZiAoJGNsb3Nlci5sZW5ndGgpIHsgJGNsb3Nlci5oaWRlKCk7IH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1JldmVhbGVkID0gZmFsc2U7XG4gICAgICAvLyBpZiAodGhpcy5vcHRpb25zLmlzU3RpY2t5IHx8ICF0aGlzLm9wdGlvbnMuZm9yY2VUb3ApIHtcbiAgICAgIC8vICAgdGhpcy4kZWxlbWVudFswXS5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgIC8vICAgJCh3aW5kb3cpLm9mZignc2Nyb2xsLnpmLm9mZmNhbnZhcycpO1xuICAgICAgLy8gfVxuICAgICAgdGhpcy4kZWxlbWVudC5vbih7XG4gICAgICAgICdvcGVuLnpmLnRyaWdnZXInOiB0aGlzLm9wZW4uYmluZCh0aGlzKSxcbiAgICAgICAgJ3RvZ2dsZS56Zi50cmlnZ2VyJzogdGhpcy50b2dnbGUuYmluZCh0aGlzKVxuICAgICAgfSk7XG4gICAgICBpZiAoJGNsb3Nlci5sZW5ndGgpIHtcbiAgICAgICAgJGNsb3Nlci5zaG93KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBvZmYtY2FudmFzIG1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgLSBFdmVudCBvYmplY3QgcGFzc2VkIGZyb20gbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSB0cmlnZ2VyIC0gZWxlbWVudCB0aGF0IHRyaWdnZXJlZCB0aGUgb2ZmLWNhbnZhcyB0byBvcGVuLlxuICAgKiBAZmlyZXMgT2ZmQ2FudmFzI29wZW5lZFxuICAgKi9cbiAgb3BlbihldmVudCwgdHJpZ2dlcikge1xuICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpcy1vcGVuJykgfHwgdGhpcy5pc1JldmVhbGVkKSB7IHJldHVybjsgfVxuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgICRib2R5ID0gJChkb2N1bWVudC5ib2R5KTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VUb3ApIHtcbiAgICAgICQoJ2JvZHknKS5zY3JvbGxUb3AoMCk7XG4gICAgfVxuICAgIC8vIHdpbmRvdy5wYWdlWU9mZnNldCA9IDA7XG5cbiAgICAvLyBpZiAoIXRoaXMub3B0aW9ucy5mb3JjZVRvcCkge1xuICAgIC8vICAgdmFyIHNjcm9sbFBvcyA9IHBhcnNlSW50KHdpbmRvdy5wYWdlWU9mZnNldCk7XG4gICAgLy8gICB0aGlzLiRlbGVtZW50WzBdLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoMCwnICsgc2Nyb2xsUG9zICsgJ3B4KSc7XG4gICAgLy8gICBpZiAodGhpcy4kZXhpdGVyLmxlbmd0aCkge1xuICAgIC8vICAgICB0aGlzLiRleGl0ZXJbMF0uc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZSgwLCcgKyBzY3JvbGxQb3MgKyAncHgpJztcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgb2ZmLWNhbnZhcyBtZW51IG9wZW5zLlxuICAgICAqIEBldmVudCBPZmZDYW52YXMjb3BlbmVkXG4gICAgICovXG4gICAgRm91bmRhdGlvbi5Nb3ZlKHRoaXMub3B0aW9ucy50cmFuc2l0aW9uVGltZSwgdGhpcy4kZWxlbWVudCwgZnVuY3Rpb24oKSB7XG4gICAgICAkKCdbZGF0YS1vZmYtY2FudmFzLXdyYXBwZXJdJykuYWRkQ2xhc3MoJ2lzLW9mZi1jYW52YXMtb3BlbiBpcy1vcGVuLScrIF90aGlzLm9wdGlvbnMucG9zaXRpb24pO1xuXG4gICAgICBfdGhpcy4kZWxlbWVudFxuICAgICAgICAuYWRkQ2xhc3MoJ2lzLW9wZW4nKVxuXG4gICAgICAvLyBpZiAoX3RoaXMub3B0aW9ucy5pc1N0aWNreSkge1xuICAgICAgLy8gICBfdGhpcy5fc3RpY2soKTtcbiAgICAgIC8vIH1cbiAgICB9KTtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJylcbiAgICAgICAgLnRyaWdnZXIoJ29wZW5lZC56Zi5vZmZjYW52YXMnKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrKSB7XG4gICAgICB0aGlzLiRleGl0ZXIuYWRkQ2xhc3MoJ2lzLXZpc2libGUnKTtcbiAgICB9XG5cbiAgICBpZiAodHJpZ2dlcikge1xuICAgICAgdGhpcy4kbGFzdFRyaWdnZXIgPSB0cmlnZ2VyLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzKSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uZShGb3VuZGF0aW9uLnRyYW5zaXRpb25lbmQodGhpcy4kZWxlbWVudCksIGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy4kZWxlbWVudC5maW5kKCdhLCBidXR0b24nKS5lcSgwKS5mb2N1cygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy50cmFwRm9jdXMpIHtcbiAgICAgICQoJ1tkYXRhLW9mZi1jYW52YXMtY29udGVudF0nKS5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgdGhpcy5fdHJhcEZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYXBzIGZvY3VzIHdpdGhpbiB0aGUgb2ZmY2FudmFzIG9uIG9wZW4uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdHJhcEZvY3VzKCkge1xuICAgIHZhciBmb2N1c2FibGUgPSBGb3VuZGF0aW9uLktleWJvYXJkLmZpbmRGb2N1c2FibGUodGhpcy4kZWxlbWVudCksXG4gICAgICAgIGZpcnN0ID0gZm9jdXNhYmxlLmVxKDApLFxuICAgICAgICBsYXN0ID0gZm9jdXNhYmxlLmVxKC0xKTtcblxuICAgIGZvY3VzYWJsZS5vZmYoJy56Zi5vZmZjYW52YXMnKS5vbigna2V5ZG93bi56Zi5vZmZjYW52YXMnLCBmdW5jdGlvbihlKSB7XG4gICAgICBpZiAoZS53aGljaCA9PT0gOSB8fCBlLmtleWNvZGUgPT09IDkpIHtcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBsYXN0WzBdICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGZpcnN0LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBmaXJzdFswXSAmJiBlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGxhc3QuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgb2ZmY2FudmFzIHRvIGFwcGVhciBzdGlja3kgdXRpbGl6aW5nIHRyYW5zbGF0ZSBwcm9wZXJ0aWVzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgLy8gT2ZmQ2FudmFzLnByb3RvdHlwZS5fc3RpY2sgPSBmdW5jdGlvbigpIHtcbiAgLy8gICB2YXIgZWxTdHlsZSA9IHRoaXMuJGVsZW1lbnRbMF0uc3R5bGU7XG4gIC8vXG4gIC8vICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2spIHtcbiAgLy8gICAgIHZhciBleGl0U3R5bGUgPSB0aGlzLiRleGl0ZXJbMF0uc3R5bGU7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgICQod2luZG93KS5vbignc2Nyb2xsLnpmLm9mZmNhbnZhcycsIGZ1bmN0aW9uKGUpIHtcbiAgLy8gICAgIGNvbnNvbGUubG9nKGUpO1xuICAvLyAgICAgdmFyIHBhZ2VZID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAvLyAgICAgZWxTdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlKDAsJyArIHBhZ2VZICsgJ3B4KSc7XG4gIC8vICAgICBpZiAoZXhpdFN0eWxlICE9PSB1bmRlZmluZWQpIHsgZXhpdFN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoMCwnICsgcGFnZVkgKyAncHgpJzsgfVxuICAvLyAgIH0pO1xuICAvLyAgIC8vIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignc3R1Y2suemYub2ZmY2FudmFzJyk7XG4gIC8vIH07XG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG9mZi1jYW52YXMgbWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gb3B0aW9uYWwgY2IgdG8gZmlyZSBhZnRlciBjbG9zdXJlLlxuICAgKiBAZmlyZXMgT2ZmQ2FudmFzI2Nsb3NlZFxuICAgKi9cbiAgY2xvc2UoY2IpIHtcbiAgICBpZiAoIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSB8fCB0aGlzLmlzUmV2ZWFsZWQpIHsgcmV0dXJuOyB9XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLy8gIEZvdW5kYXRpb24uTW92ZSh0aGlzLm9wdGlvbnMudHJhbnNpdGlvblRpbWUsIHRoaXMuJGVsZW1lbnQsIGZ1bmN0aW9uKCkge1xuICAgICQoJ1tkYXRhLW9mZi1jYW52YXMtd3JhcHBlcl0nKS5yZW1vdmVDbGFzcyhgaXMtb2ZmLWNhbnZhcy1vcGVuIGlzLW9wZW4tJHtfdGhpcy5vcHRpb25zLnBvc2l0aW9ufWApO1xuICAgIF90aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCdpcy1vcGVuJyk7XG4gICAgICAvLyBGb3VuZGF0aW9uLl9yZWZsb3coKTtcbiAgICAvLyB9KTtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKVxuICAgICAgLyoqXG4gICAgICAgKiBGaXJlcyB3aGVuIHRoZSBvZmYtY2FudmFzIG1lbnUgb3BlbnMuXG4gICAgICAgKiBAZXZlbnQgT2ZmQ2FudmFzI2Nsb3NlZFxuICAgICAgICovXG4gICAgICAgIC50cmlnZ2VyKCdjbG9zZWQuemYub2ZmY2FudmFzJyk7XG4gICAgLy8gaWYgKF90aGlzLm9wdGlvbnMuaXNTdGlja3kgfHwgIV90aGlzLm9wdGlvbnMuZm9yY2VUb3ApIHtcbiAgICAvLyAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgLy8gICAgIF90aGlzLiRlbGVtZW50WzBdLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgIC8vICAgICAkKHdpbmRvdykub2ZmKCdzY3JvbGwuemYub2ZmY2FudmFzJyk7XG4gICAgLy8gICB9LCB0aGlzLm9wdGlvbnMudHJhbnNpdGlvblRpbWUpO1xuICAgIC8vIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlT25DbGljaykge1xuICAgICAgdGhpcy4kZXhpdGVyLnJlbW92ZUNsYXNzKCdpcy12aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgdGhpcy4kbGFzdFRyaWdnZXIuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMudHJhcEZvY3VzKSB7XG4gICAgICAkKCdbZGF0YS1vZmYtY2FudmFzLWNvbnRlbnRdJykucmVtb3ZlQXR0cigndGFiaW5kZXgnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgb2ZmLWNhbnZhcyBtZW51IG9wZW4gb3IgY2xvc2VkLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IC0gRXZlbnQgb2JqZWN0IHBhc3NlZCBmcm9tIGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gdHJpZ2dlciAtIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIG9mZi1jYW52YXMgdG8gb3Blbi5cbiAgICovXG4gIHRvZ2dsZShldmVudCwgdHJpZ2dlcikge1xuICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpcy1vcGVuJykpIHtcbiAgICAgIHRoaXMuY2xvc2UoZXZlbnQsIHRyaWdnZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMub3BlbihldmVudCwgdHJpZ2dlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMga2V5Ym9hcmQgaW5wdXQgd2hlbiBkZXRlY3RlZC4gV2hlbiB0aGUgZXNjYXBlIGtleSBpcyBwcmVzc2VkLCB0aGUgb2ZmLWNhbnZhcyBtZW51IGNsb3NlcywgYW5kIGZvY3VzIGlzIHJlc3RvcmVkIHRvIHRoZSBlbGVtZW50IHRoYXQgb3BlbmVkIHRoZSBtZW51LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVLZXlib2FyZChldmVudCkge1xuICAgIGlmIChldmVudC53aGljaCAhPT0gMjcpIHJldHVybjtcblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIHRoaXMuJGxhc3RUcmlnZ2VyLmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIG9mZmNhbnZhcyBwbHVnaW4uXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi50cmlnZ2VyIC56Zi5vZmZjYW52YXMnKTtcbiAgICB0aGlzLiRleGl0ZXIub2ZmKCcuemYub2ZmY2FudmFzJyk7XG5cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuT2ZmQ2FudmFzLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQWxsb3cgdGhlIHVzZXIgdG8gY2xpY2sgb3V0c2lkZSBvZiB0aGUgbWVudSB0byBjbG9zZSBpdC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSB0cnVlXG4gICAqL1xuICBjbG9zZU9uQ2xpY2s6IHRydWUsXG5cbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIGluIG1zIHRoZSBvcGVuIGFuZCBjbG9zZSB0cmFuc2l0aW9uIHJlcXVpcmVzLiBJZiBub25lIHNlbGVjdGVkLCBwdWxscyBmcm9tIGJvZHkgc3R5bGUuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgNTAwXG4gICAqL1xuICB0cmFuc2l0aW9uVGltZTogMCxcblxuICAvKipcbiAgICogRGlyZWN0aW9uIHRoZSBvZmZjYW52YXMgb3BlbnMgZnJvbS4gRGV0ZXJtaW5lcyBjbGFzcyBhcHBsaWVkIHRvIGJvZHkuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgbGVmdFxuICAgKi9cbiAgcG9zaXRpb246ICdsZWZ0JyxcblxuICAvKipcbiAgICogRm9yY2UgdGhlIHBhZ2UgdG8gc2Nyb2xsIHRvIHRvcCBvbiBvcGVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGZvcmNlVG9wOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBBbGxvdyB0aGUgb2ZmY2FudmFzIHRvIHJlbWFpbiBvcGVuIGZvciBjZXJ0YWluIGJyZWFrcG9pbnRzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBpc1JldmVhbGVkOiBmYWxzZSxcblxuICAvKipcbiAgICogQnJlYWtwb2ludCBhdCB3aGljaCB0byByZXZlYWwuIEpTIHdpbGwgdXNlIGEgUmVnRXhwIHRvIHRhcmdldCBzdGFuZGFyZCBjbGFzc2VzLCBpZiBjaGFuZ2luZyBjbGFzc25hbWVzLCBwYXNzIHlvdXIgY2xhc3Mgd2l0aCB0aGUgYHJldmVhbENsYXNzYCBvcHRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgcmV2ZWFsLWZvci1sYXJnZVxuICAgKi9cbiAgcmV2ZWFsT246IG51bGwsXG5cbiAgLyoqXG4gICAqIEZvcmNlIGZvY3VzIHRvIHRoZSBvZmZjYW52YXMgb24gb3Blbi4gSWYgdHJ1ZSwgd2lsbCBmb2N1cyB0aGUgb3BlbmluZyB0cmlnZ2VyIG9uIGNsb3NlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGF1dG9Gb2N1czogdHJ1ZSxcblxuICAvKipcbiAgICogQ2xhc3MgdXNlZCB0byBmb3JjZSBhbiBvZmZjYW52YXMgdG8gcmVtYWluIG9wZW4uIEZvdW5kYXRpb24gZGVmYXVsdHMgZm9yIHRoaXMgYXJlIGByZXZlYWwtZm9yLWxhcmdlYCAmIGByZXZlYWwtZm9yLW1lZGl1bWAuXG4gICAqIEBvcHRpb25cbiAgICogVE9ETyBpbXByb3ZlIHRoZSByZWdleCB0ZXN0aW5nIGZvciB0aGlzLlxuICAgKiBAZXhhbXBsZSByZXZlYWwtZm9yLWxhcmdlXG4gICAqL1xuICByZXZlYWxDbGFzczogJ3JldmVhbC1mb3ItJyxcblxuICAvKipcbiAgICogVHJpZ2dlcnMgb3B0aW9uYWwgZm9jdXMgdHJhcHBpbmcgd2hlbiBvcGVuaW5nIGFuIG9mZmNhbnZhcy4gU2V0cyB0YWJpbmRleCBvZiBbZGF0YS1vZmYtY2FudmFzLWNvbnRlbnRdIHRvIC0xIGZvciBhY2Nlc3NpYmlsaXR5IHB1cnBvc2VzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIHRyYXBGb2N1czogZmFsc2Vcbn1cblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKE9mZkNhbnZhcywgJ09mZkNhbnZhcycpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogT3JiaXQgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLm9yYml0XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmtleWJvYXJkXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1vdGlvblxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50aW1lckFuZEltYWdlTG9hZGVyXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRvdWNoXG4gKi9cblxuY2xhc3MgT3JiaXQge1xuICAvKipcbiAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGFuIG9yYml0IGNhcm91c2VsLlxuICAqIEBjbGFzc1xuICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYW4gT3JiaXQgQ2Fyb3VzZWwuXG4gICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKXtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgT3JiaXQuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ09yYml0Jyk7XG4gICAgRm91bmRhdGlvbi5LZXlib2FyZC5yZWdpc3RlcignT3JiaXQnLCB7XG4gICAgICAnbHRyJzoge1xuICAgICAgICAnQVJST1dfUklHSFQnOiAnbmV4dCcsXG4gICAgICAgICdBUlJPV19MRUZUJzogJ3ByZXZpb3VzJ1xuICAgICAgfSxcbiAgICAgICdydGwnOiB7XG4gICAgICAgICdBUlJPV19MRUZUJzogJ25leHQnLFxuICAgICAgICAnQVJST1dfUklHSFQnOiAncHJldmlvdXMnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgKiBJbml0aWFsaXplcyB0aGUgcGx1Z2luIGJ5IGNyZWF0aW5nIGpRdWVyeSBjb2xsZWN0aW9ucywgc2V0dGluZyBhdHRyaWJ1dGVzLCBhbmQgc3RhcnRpbmcgdGhlIGFuaW1hdGlvbi5cbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqL1xuICBfaW5pdCgpIHtcbiAgICB0aGlzLiR3cmFwcGVyID0gdGhpcy4kZWxlbWVudC5maW5kKGAuJHt0aGlzLm9wdGlvbnMuY29udGFpbmVyQ2xhc3N9YCk7XG4gICAgdGhpcy4kc2xpZGVzID0gdGhpcy4kZWxlbWVudC5maW5kKGAuJHt0aGlzLm9wdGlvbnMuc2xpZGVDbGFzc31gKTtcbiAgICB2YXIgJGltYWdlcyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnaW1nJyksXG4gICAgaW5pdEFjdGl2ZSA9IHRoaXMuJHNsaWRlcy5maWx0ZXIoJy5pcy1hY3RpdmUnKTtcblxuICAgIGlmICghaW5pdEFjdGl2ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuJHNsaWRlcy5lcSgwKS5hZGRDbGFzcygnaXMtYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMudXNlTVVJKSB7XG4gICAgICB0aGlzLiRzbGlkZXMuYWRkQ2xhc3MoJ25vLW1vdGlvbnVpJyk7XG4gICAgfVxuXG4gICAgaWYgKCRpbWFnZXMubGVuZ3RoKSB7XG4gICAgICBGb3VuZGF0aW9uLm9uSW1hZ2VzTG9hZGVkKCRpbWFnZXMsIHRoaXMuX3ByZXBhcmVGb3JPcmJpdC5iaW5kKHRoaXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcHJlcGFyZUZvck9yYml0KCk7Ly9oZWhlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5idWxsZXRzKSB7XG4gICAgICB0aGlzLl9sb2FkQnVsbGV0cygpO1xuICAgIH1cblxuICAgIHRoaXMuX2V2ZW50cygpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUGxheSAmJiB0aGlzLiRzbGlkZXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5nZW9TeW5jKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hY2Nlc3NpYmxlKSB7IC8vIGFsbG93IHdyYXBwZXIgdG8gYmUgZm9jdXNhYmxlIHRvIGVuYWJsZSBhcnJvdyBuYXZpZ2F0aW9uXG4gICAgICB0aGlzLiR3cmFwcGVyLmF0dHIoJ3RhYmluZGV4JywgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICogQ3JlYXRlcyBhIGpRdWVyeSBjb2xsZWN0aW9uIG9mIGJ1bGxldHMsIGlmIHRoZXkgYXJlIGJlaW5nIHVzZWQuXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKi9cbiAgX2xvYWRCdWxsZXRzKCkge1xuICAgIHRoaXMuJGJ1bGxldHMgPSB0aGlzLiRlbGVtZW50LmZpbmQoYC4ke3RoaXMub3B0aW9ucy5ib3hPZkJ1bGxldHN9YCkuZmluZCgnYnV0dG9uJyk7XG4gIH1cblxuICAvKipcbiAgKiBTZXRzIGEgYHRpbWVyYCBvYmplY3Qgb24gdGhlIG9yYml0LCBhbmQgc3RhcnRzIHRoZSBjb3VudGVyIGZvciB0aGUgbmV4dCBzbGlkZS5cbiAgKiBAZnVuY3Rpb25cbiAgKi9cbiAgZ2VvU3luYygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHRoaXMudGltZXIgPSBuZXcgRm91bmRhdGlvbi5UaW1lcihcbiAgICAgIHRoaXMuJGVsZW1lbnQsXG4gICAgICB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGlzLm9wdGlvbnMudGltZXJEZWxheSxcbiAgICAgICAgaW5maW5pdGU6IGZhbHNlXG4gICAgICB9LFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLmNoYW5nZVNsaWRlKHRydWUpO1xuICAgICAgfSk7XG4gICAgdGhpcy50aW1lci5zdGFydCgpO1xuICB9XG5cbiAgLyoqXG4gICogU2V0cyB3cmFwcGVyIGFuZCBzbGlkZSBoZWlnaHRzIGZvciB0aGUgb3JiaXQuXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKi9cbiAgX3ByZXBhcmVGb3JPcmJpdCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHRoaXMuX3NldFdyYXBwZXJIZWlnaHQoZnVuY3Rpb24obWF4KXtcbiAgICAgIF90aGlzLl9zZXRTbGlkZUhlaWdodChtYXgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQ2FsdWxhdGVzIHRoZSBoZWlnaHQgb2YgZWFjaCBzbGlkZSBpbiB0aGUgY29sbGVjdGlvbiwgYW5kIHVzZXMgdGhlIHRhbGxlc3Qgb25lIGZvciB0aGUgd3JhcHBlciBoZWlnaHQuXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYiAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZmlyZSB3aGVuIGNvbXBsZXRlLlxuICAqL1xuICBfc2V0V3JhcHBlckhlaWdodChjYikgey8vcmV3cml0ZSB0aGlzIHRvIGBmb3JgIGxvb3BcbiAgICB2YXIgbWF4ID0gMCwgdGVtcCwgY291bnRlciA9IDA7XG5cbiAgICB0aGlzLiRzbGlkZXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIHRlbXAgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICQodGhpcykuYXR0cignZGF0YS1zbGlkZScsIGNvdW50ZXIpO1xuXG4gICAgICBpZiAoY291bnRlcikgey8vaWYgbm90IHRoZSBmaXJzdCBzbGlkZSwgc2V0IGNzcyBwb3NpdGlvbiBhbmQgZGlzcGxheSBwcm9wZXJ0eVxuICAgICAgICAkKHRoaXMpLmNzcyh7J3Bvc2l0aW9uJzogJ3JlbGF0aXZlJywgJ2Rpc3BsYXknOiAnbm9uZSd9KTtcbiAgICAgIH1cbiAgICAgIG1heCA9IHRlbXAgPiBtYXggPyB0ZW1wIDogbWF4O1xuICAgICAgY291bnRlcisrO1xuICAgIH0pO1xuXG4gICAgaWYgKGNvdW50ZXIgPT09IHRoaXMuJHNsaWRlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuJHdyYXBwZXIuY3NzKHsnaGVpZ2h0JzogbWF4fSk7IC8vb25seSBjaGFuZ2UgdGhlIHdyYXBwZXIgaGVpZ2h0IHByb3BlcnR5IG9uY2UuXG4gICAgICBjYihtYXgpOyAvL2ZpcmUgY2FsbGJhY2sgd2l0aCBtYXggaGVpZ2h0IGRpbWVuc2lvbi5cbiAgICB9XG4gIH1cblxuICAvKipcbiAgKiBTZXRzIHRoZSBtYXgtaGVpZ2h0IG9mIGVhY2ggc2xpZGUuXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKi9cbiAgX3NldFNsaWRlSGVpZ2h0KGhlaWdodCkge1xuICAgIHRoaXMuJHNsaWRlcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgJCh0aGlzKS5jc3MoJ21heC1oZWlnaHQnLCBoZWlnaHQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQWRkcyBldmVudCBsaXN0ZW5lcnMgdG8gYmFzaWNhbGx5IGV2ZXJ5dGhpbmcgd2l0aGluIHRoZSBlbGVtZW50LlxuICAqIEBmdW5jdGlvblxuICAqIEBwcml2YXRlXG4gICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgLy8qKk5vdyB1c2luZyBjdXN0b20gZXZlbnQgLSB0aGFua3MgdG86KipcbiAgICAvLyoqICAgICAgWW9oYWkgQXJhcmF0IG9mIFRvcm9udG8gICAgICAqKlxuICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgaWYgKHRoaXMuJHNsaWRlcy5sZW5ndGggPiAxKSB7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3dpcGUpIHtcbiAgICAgICAgdGhpcy4kc2xpZGVzLm9mZignc3dpcGVsZWZ0LnpmLm9yYml0IHN3aXBlcmlnaHQuemYub3JiaXQnKVxuICAgICAgICAub24oJ3N3aXBlbGVmdC56Zi5vcmJpdCcsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy5jaGFuZ2VTbGlkZSh0cnVlKTtcbiAgICAgICAgfSkub24oJ3N3aXBlcmlnaHQuemYub3JiaXQnLCBmdW5jdGlvbihlKXtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgX3RoaXMuY2hhbmdlU2xpZGUoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1BsYXkpIHtcbiAgICAgICAgdGhpcy4kc2xpZGVzLm9uKCdjbGljay56Zi5vcmJpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF90aGlzLiRlbGVtZW50LmRhdGEoJ2NsaWNrZWRPbicsIF90aGlzLiRlbGVtZW50LmRhdGEoJ2NsaWNrZWRPbicpID8gZmFsc2UgOiB0cnVlKTtcbiAgICAgICAgICBfdGhpcy50aW1lcltfdGhpcy4kZWxlbWVudC5kYXRhKCdjbGlja2VkT24nKSA/ICdwYXVzZScgOiAnc3RhcnQnXSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBhdXNlT25Ib3Zlcikge1xuICAgICAgICAgIHRoaXMuJGVsZW1lbnQub24oJ21vdXNlZW50ZXIuemYub3JiaXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIF90aGlzLnRpbWVyLnBhdXNlKCk7XG4gICAgICAgICAgfSkub24oJ21vdXNlbGVhdmUuemYub3JiaXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICghX3RoaXMuJGVsZW1lbnQuZGF0YSgnY2xpY2tlZE9uJykpIHtcbiAgICAgICAgICAgICAgX3RoaXMudGltZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5hdkJ1dHRvbnMpIHtcbiAgICAgICAgdmFyICRjb250cm9scyA9IHRoaXMuJGVsZW1lbnQuZmluZChgLiR7dGhpcy5vcHRpb25zLm5leHRDbGFzc30sIC4ke3RoaXMub3B0aW9ucy5wcmV2Q2xhc3N9YCk7XG4gICAgICAgICRjb250cm9scy5hdHRyKCd0YWJpbmRleCcsIDApXG4gICAgICAgIC8vYWxzbyBuZWVkIHRvIGhhbmRsZSBlbnRlci9yZXR1cm4gYW5kIHNwYWNlYmFyIGtleSBwcmVzc2VzXG4gICAgICAgIC5vbignY2xpY2suemYub3JiaXQgdG91Y2hlbmQuemYub3JiaXQnLCBmdW5jdGlvbihlKXtcblx0ICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgX3RoaXMuY2hhbmdlU2xpZGUoJCh0aGlzKS5oYXNDbGFzcyhfdGhpcy5vcHRpb25zLm5leHRDbGFzcykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5idWxsZXRzKSB7XG4gICAgICAgIHRoaXMuJGJ1bGxldHMub24oJ2NsaWNrLnpmLm9yYml0IHRvdWNoZW5kLnpmLm9yYml0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKC9pcy1hY3RpdmUvZy50ZXN0KHRoaXMuY2xhc3NOYW1lKSkgeyByZXR1cm4gZmFsc2U7IH0vL2lmIHRoaXMgaXMgYWN0aXZlLCBraWNrIG91dCBvZiBmdW5jdGlvbi5cbiAgICAgICAgICB2YXIgaWR4ID0gJCh0aGlzKS5kYXRhKCdzbGlkZScpLFxuICAgICAgICAgIGx0ciA9IGlkeCA+IF90aGlzLiRzbGlkZXMuZmlsdGVyKCcuaXMtYWN0aXZlJykuZGF0YSgnc2xpZGUnKSxcbiAgICAgICAgICAkc2xpZGUgPSBfdGhpcy4kc2xpZGVzLmVxKGlkeCk7XG5cbiAgICAgICAgICBfdGhpcy5jaGFuZ2VTbGlkZShsdHIsICRzbGlkZSwgaWR4KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJHdyYXBwZXIuYWRkKHRoaXMuJGJ1bGxldHMpLm9uKCdrZXlkb3duLnpmLm9yYml0JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAvLyBoYW5kbGUga2V5Ym9hcmQgZXZlbnQgd2l0aCBrZXlib2FyZCB1dGlsXG4gICAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQuaGFuZGxlS2V5KGUsICdPcmJpdCcsIHtcbiAgICAgICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIF90aGlzLmNoYW5nZVNsaWRlKHRydWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgX3RoaXMuY2hhbmdlU2xpZGUoZmFsc2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24oKSB7IC8vIGlmIGJ1bGxldCBpcyBmb2N1c2VkLCBtYWtlIHN1cmUgZm9jdXMgbW92ZXNcbiAgICAgICAgICAgIGlmICgkKGUudGFyZ2V0KS5pcyhfdGhpcy4kYnVsbGV0cykpIHtcbiAgICAgICAgICAgICAgX3RoaXMuJGJ1bGxldHMuZmlsdGVyKCcuaXMtYWN0aXZlJykuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICogQ2hhbmdlcyB0aGUgY3VycmVudCBzbGlkZSB0byBhIG5ldyBvbmUuXG4gICogQGZ1bmN0aW9uXG4gICogQHBhcmFtIHtCb29sZWFufSBpc0xUUiAtIGZsYWcgaWYgdGhlIHNsaWRlIHNob3VsZCBtb3ZlIGxlZnQgdG8gcmlnaHQuXG4gICogQHBhcmFtIHtqUXVlcnl9IGNob3NlblNsaWRlIC0gdGhlIGpRdWVyeSBlbGVtZW50IG9mIHRoZSBzbGlkZSB0byBzaG93IG5leHQsIGlmIG9uZSBpcyBzZWxlY3RlZC5cbiAgKiBAcGFyYW0ge051bWJlcn0gaWR4IC0gdGhlIGluZGV4IG9mIHRoZSBuZXcgc2xpZGUgaW4gaXRzIGNvbGxlY3Rpb24sIGlmIG9uZSBjaG9zZW4uXG4gICogQGZpcmVzIE9yYml0I3NsaWRlY2hhbmdlXG4gICovXG4gIGNoYW5nZVNsaWRlKGlzTFRSLCBjaG9zZW5TbGlkZSwgaWR4KSB7XG4gICAgdmFyICRjdXJTbGlkZSA9IHRoaXMuJHNsaWRlcy5maWx0ZXIoJy5pcy1hY3RpdmUnKS5lcSgwKTtcblxuICAgIGlmICgvbXVpL2cudGVzdCgkY3VyU2xpZGVbMF0uY2xhc3NOYW1lKSkgeyByZXR1cm4gZmFsc2U7IH0gLy9pZiB0aGUgc2xpZGUgaXMgY3VycmVudGx5IGFuaW1hdGluZywga2ljayBvdXQgb2YgdGhlIGZ1bmN0aW9uXG5cbiAgICB2YXIgJGZpcnN0U2xpZGUgPSB0aGlzLiRzbGlkZXMuZmlyc3QoKSxcbiAgICAkbGFzdFNsaWRlID0gdGhpcy4kc2xpZGVzLmxhc3QoKSxcbiAgICBkaXJJbiA9IGlzTFRSID8gJ1JpZ2h0JyA6ICdMZWZ0JyxcbiAgICBkaXJPdXQgPSBpc0xUUiA/ICdMZWZ0JyA6ICdSaWdodCcsXG4gICAgX3RoaXMgPSB0aGlzLFxuICAgICRuZXdTbGlkZTtcblxuICAgIGlmICghY2hvc2VuU2xpZGUpIHsgLy9tb3N0IG9mIHRoZSB0aW1lLCB0aGlzIHdpbGwgYmUgYXV0byBwbGF5ZWQgb3IgY2xpY2tlZCBmcm9tIHRoZSBuYXZCdXR0b25zLlxuICAgICAgJG5ld1NsaWRlID0gaXNMVFIgPyAvL2lmIHdyYXBwaW5nIGVuYWJsZWQsIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGBuZXh0YCBvciBgcHJldmAgc2libGluZywgaWYgbm90LCBzZWxlY3QgdGhlIGZpcnN0IG9yIGxhc3Qgc2xpZGUgdG8gZmlsbCBpbi4gaWYgd3JhcHBpbmcgbm90IGVuYWJsZWQsIGF0dGVtcHQgdG8gc2VsZWN0IGBuZXh0YCBvciBgcHJldmAsIGlmIHRoZXJlJ3Mgbm90aGluZyB0aGVyZSwgdGhlIGZ1bmN0aW9uIHdpbGwga2ljayBvdXQgb24gbmV4dCBzdGVwLiBDUkFaWSBORVNURUQgVEVSTkFSSUVTISEhISFcbiAgICAgICh0aGlzLm9wdGlvbnMuaW5maW5pdGVXcmFwID8gJGN1clNsaWRlLm5leHQoYC4ke3RoaXMub3B0aW9ucy5zbGlkZUNsYXNzfWApLmxlbmd0aCA/ICRjdXJTbGlkZS5uZXh0KGAuJHt0aGlzLm9wdGlvbnMuc2xpZGVDbGFzc31gKSA6ICRmaXJzdFNsaWRlIDogJGN1clNsaWRlLm5leHQoYC4ke3RoaXMub3B0aW9ucy5zbGlkZUNsYXNzfWApKS8vcGljayBuZXh0IHNsaWRlIGlmIG1vdmluZyBsZWZ0IHRvIHJpZ2h0XG4gICAgICA6XG4gICAgICAodGhpcy5vcHRpb25zLmluZmluaXRlV3JhcCA/ICRjdXJTbGlkZS5wcmV2KGAuJHt0aGlzLm9wdGlvbnMuc2xpZGVDbGFzc31gKS5sZW5ndGggPyAkY3VyU2xpZGUucHJldihgLiR7dGhpcy5vcHRpb25zLnNsaWRlQ2xhc3N9YCkgOiAkbGFzdFNsaWRlIDogJGN1clNsaWRlLnByZXYoYC4ke3RoaXMub3B0aW9ucy5zbGlkZUNsYXNzfWApKTsvL3BpY2sgcHJldiBzbGlkZSBpZiBtb3ZpbmcgcmlnaHQgdG8gbGVmdFxuICAgIH0gZWxzZSB7XG4gICAgICAkbmV3U2xpZGUgPSBjaG9zZW5TbGlkZTtcbiAgICB9XG5cbiAgICBpZiAoJG5ld1NsaWRlLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5idWxsZXRzKSB7XG4gICAgICAgIGlkeCA9IGlkeCB8fCB0aGlzLiRzbGlkZXMuaW5kZXgoJG5ld1NsaWRlKTsgLy9ncmFiIGluZGV4IHRvIHVwZGF0ZSBidWxsZXRzXG4gICAgICAgIHRoaXMuX3VwZGF0ZUJ1bGxldHMoaWR4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy51c2VNVUkpIHtcbiAgICAgICAgRm91bmRhdGlvbi5Nb3Rpb24uYW5pbWF0ZUluKFxuICAgICAgICAgICRuZXdTbGlkZS5hZGRDbGFzcygnaXMtYWN0aXZlJykuY3NzKHsncG9zaXRpb24nOiAnYWJzb2x1dGUnLCAndG9wJzogMH0pLFxuICAgICAgICAgIHRoaXMub3B0aW9uc1tgYW5pbUluRnJvbSR7ZGlySW59YF0sXG4gICAgICAgICAgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICRuZXdTbGlkZS5jc3Moeydwb3NpdGlvbic6ICdyZWxhdGl2ZScsICdkaXNwbGF5JzogJ2Jsb2NrJ30pXG4gICAgICAgICAgICAuYXR0cignYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBGb3VuZGF0aW9uLk1vdGlvbi5hbmltYXRlT3V0KFxuICAgICAgICAgICRjdXJTbGlkZS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlJyksXG4gICAgICAgICAgdGhpcy5vcHRpb25zW2BhbmltT3V0VG8ke2Rpck91dH1gXSxcbiAgICAgICAgICBmdW5jdGlvbigpe1xuICAgICAgICAgICAgJGN1clNsaWRlLnJlbW92ZUF0dHIoJ2FyaWEtbGl2ZScpO1xuICAgICAgICAgICAgaWYoX3RoaXMub3B0aW9ucy5hdXRvUGxheSAmJiAhX3RoaXMudGltZXIuaXNQYXVzZWQpe1xuICAgICAgICAgICAgICBfdGhpcy50aW1lci5yZXN0YXJ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2RvIHN0dWZmP1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGN1clNsaWRlLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUgaXMtaW4nKS5yZW1vdmVBdHRyKCdhcmlhLWxpdmUnKS5oaWRlKCk7XG4gICAgICAgICRuZXdTbGlkZS5hZGRDbGFzcygnaXMtYWN0aXZlIGlzLWluJykuYXR0cignYXJpYS1saXZlJywgJ3BvbGl0ZScpLnNob3coKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUGxheSAmJiAhdGhpcy50aW1lci5pc1BhdXNlZCkge1xuICAgICAgICAgIHRoaXMudGltZXIucmVzdGFydCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgLyoqXG4gICAgKiBUcmlnZ2VycyB3aGVuIHRoZSBzbGlkZSBoYXMgZmluaXNoZWQgYW5pbWF0aW5nIGluLlxuICAgICogQGV2ZW50IE9yYml0I3NsaWRlY2hhbmdlXG4gICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignc2xpZGVjaGFuZ2UuemYub3JiaXQnLCBbJG5ld1NsaWRlXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICogVXBkYXRlcyB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBidWxsZXRzLCBpZiBkaXNwbGF5ZWQuXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKiBAcGFyYW0ge051bWJlcn0gaWR4IC0gdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHNsaWRlLlxuICAqL1xuICBfdXBkYXRlQnVsbGV0cyhpZHgpIHtcbiAgICB2YXIgJG9sZEJ1bGxldCA9IHRoaXMuJGVsZW1lbnQuZmluZChgLiR7dGhpcy5vcHRpb25zLmJveE9mQnVsbGV0c31gKVxuICAgIC5maW5kKCcuaXMtYWN0aXZlJykucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpLmJsdXIoKSxcbiAgICBzcGFuID0gJG9sZEJ1bGxldC5maW5kKCdzcGFuOmxhc3QnKS5kZXRhY2goKSxcbiAgICAkbmV3QnVsbGV0ID0gdGhpcy4kYnVsbGV0cy5lcShpZHgpLmFkZENsYXNzKCdpcy1hY3RpdmUnKS5hcHBlbmQoc3Bhbik7XG4gIH1cblxuICAvKipcbiAgKiBEZXN0cm95cyB0aGUgY2Fyb3VzZWwgYW5kIGhpZGVzIHRoZSBlbGVtZW50LlxuICAqIEBmdW5jdGlvblxuICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuJGVsZW1lbnQub2ZmKCcuemYub3JiaXQnKS5maW5kKCcqJykub2ZmKCcuemYub3JiaXQnKS5lbmQoKS5oaWRlKCk7XG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cbk9yYml0LmRlZmF1bHRzID0ge1xuICAvKipcbiAgKiBUZWxscyB0aGUgSlMgdG8gbG9vayBmb3IgYW5kIGxvYWRCdWxsZXRzLlxuICAqIEBvcHRpb25cbiAgKiBAZXhhbXBsZSB0cnVlXG4gICovXG4gIGJ1bGxldHM6IHRydWUsXG4gIC8qKlxuICAqIFRlbGxzIHRoZSBKUyB0byBhcHBseSBldmVudCBsaXN0ZW5lcnMgdG8gbmF2IGJ1dHRvbnNcbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgdHJ1ZVxuICAqL1xuICBuYXZCdXR0b25zOiB0cnVlLFxuICAvKipcbiAgKiBtb3Rpb24tdWkgYW5pbWF0aW9uIGNsYXNzIHRvIGFwcGx5XG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlICdzbGlkZS1pbi1yaWdodCdcbiAgKi9cbiAgYW5pbUluRnJvbVJpZ2h0OiAnc2xpZGUtaW4tcmlnaHQnLFxuICAvKipcbiAgKiBtb3Rpb24tdWkgYW5pbWF0aW9uIGNsYXNzIHRvIGFwcGx5XG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlICdzbGlkZS1vdXQtcmlnaHQnXG4gICovXG4gIGFuaW1PdXRUb1JpZ2h0OiAnc2xpZGUtb3V0LXJpZ2h0JyxcbiAgLyoqXG4gICogbW90aW9uLXVpIGFuaW1hdGlvbiBjbGFzcyB0byBhcHBseVxuICAqIEBvcHRpb25cbiAgKiBAZXhhbXBsZSAnc2xpZGUtaW4tbGVmdCdcbiAgKlxuICAqL1xuICBhbmltSW5Gcm9tTGVmdDogJ3NsaWRlLWluLWxlZnQnLFxuICAvKipcbiAgKiBtb3Rpb24tdWkgYW5pbWF0aW9uIGNsYXNzIHRvIGFwcGx5XG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlICdzbGlkZS1vdXQtbGVmdCdcbiAgKi9cbiAgYW5pbU91dFRvTGVmdDogJ3NsaWRlLW91dC1sZWZ0JyxcbiAgLyoqXG4gICogQWxsb3dzIE9yYml0IHRvIGF1dG9tYXRpY2FsbHkgYW5pbWF0ZSBvbiBwYWdlIGxvYWQuXG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlIHRydWVcbiAgKi9cbiAgYXV0b1BsYXk6IHRydWUsXG4gIC8qKlxuICAqIEFtb3VudCBvZiB0aW1lLCBpbiBtcywgYmV0d2VlbiBzbGlkZSB0cmFuc2l0aW9uc1xuICAqIEBvcHRpb25cbiAgKiBAZXhhbXBsZSA1MDAwXG4gICovXG4gIHRpbWVyRGVsYXk6IDUwMDAsXG4gIC8qKlxuICAqIEFsbG93cyBPcmJpdCB0byBpbmZpbml0ZWx5IGxvb3AgdGhyb3VnaCB0aGUgc2xpZGVzXG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlIHRydWVcbiAgKi9cbiAgaW5maW5pdGVXcmFwOiB0cnVlLFxuICAvKipcbiAgKiBBbGxvd3MgdGhlIE9yYml0IHNsaWRlcyB0byBiaW5kIHRvIHN3aXBlIGV2ZW50cyBmb3IgbW9iaWxlLCByZXF1aXJlcyBhbiBhZGRpdGlvbmFsIHV0aWwgbGlicmFyeVxuICAqIEBvcHRpb25cbiAgKiBAZXhhbXBsZSB0cnVlXG4gICovXG4gIHN3aXBlOiB0cnVlLFxuICAvKipcbiAgKiBBbGxvd3MgdGhlIHRpbWluZyBmdW5jdGlvbiB0byBwYXVzZSBhbmltYXRpb24gb24gaG92ZXIuXG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlIHRydWVcbiAgKi9cbiAgcGF1c2VPbkhvdmVyOiB0cnVlLFxuICAvKipcbiAgKiBBbGxvd3MgT3JiaXQgdG8gYmluZCBrZXlib2FyZCBldmVudHMgdG8gdGhlIHNsaWRlciwgdG8gYW5pbWF0ZSBmcmFtZXMgd2l0aCBhcnJvdyBrZXlzXG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlIHRydWVcbiAgKi9cbiAgYWNjZXNzaWJsZTogdHJ1ZSxcbiAgLyoqXG4gICogQ2xhc3MgYXBwbGllZCB0byB0aGUgY29udGFpbmVyIG9mIE9yYml0XG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlICdvcmJpdC1jb250YWluZXInXG4gICovXG4gIGNvbnRhaW5lckNsYXNzOiAnb3JiaXQtY29udGFpbmVyJyxcbiAgLyoqXG4gICogQ2xhc3MgYXBwbGllZCB0byBpbmRpdmlkdWFsIHNsaWRlcy5cbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgJ29yYml0LXNsaWRlJ1xuICAqL1xuICBzbGlkZUNsYXNzOiAnb3JiaXQtc2xpZGUnLFxuICAvKipcbiAgKiBDbGFzcyBhcHBsaWVkIHRvIHRoZSBidWxsZXQgY29udGFpbmVyLiBZb3UncmUgd2VsY29tZS5cbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgJ29yYml0LWJ1bGxldHMnXG4gICovXG4gIGJveE9mQnVsbGV0czogJ29yYml0LWJ1bGxldHMnLFxuICAvKipcbiAgKiBDbGFzcyBhcHBsaWVkIHRvIHRoZSBgbmV4dGAgbmF2aWdhdGlvbiBidXR0b24uXG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlICdvcmJpdC1uZXh0J1xuICAqL1xuICBuZXh0Q2xhc3M6ICdvcmJpdC1uZXh0JyxcbiAgLyoqXG4gICogQ2xhc3MgYXBwbGllZCB0byB0aGUgYHByZXZpb3VzYCBuYXZpZ2F0aW9uIGJ1dHRvbi5cbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgJ29yYml0LXByZXZpb3VzJ1xuICAqL1xuICBwcmV2Q2xhc3M6ICdvcmJpdC1wcmV2aW91cycsXG4gIC8qKlxuICAqIEJvb2xlYW4gdG8gZmxhZyB0aGUganMgdG8gdXNlIG1vdGlvbiB1aSBjbGFzc2VzIG9yIG5vdC4gRGVmYXVsdCB0byB0cnVlIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eS5cbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgdHJ1ZVxuICAqL1xuICB1c2VNVUk6IHRydWVcbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihPcmJpdCwgJ09yYml0Jyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBSZXNwb25zaXZlTWVudSBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24ucmVzcG9uc2l2ZU1lbnVcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudHJpZ2dlcnNcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5hY2NvcmRpb25NZW51XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmRyaWxsZG93blxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5kcm9wZG93bi1tZW51XG4gKi9cblxuY2xhc3MgUmVzcG9uc2l2ZU1lbnUge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhIHJlc3BvbnNpdmUgbWVudS5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBSZXNwb25zaXZlTWVudSNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYSBkcm9wZG93biBtZW51LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCk7XG4gICAgdGhpcy5ydWxlcyA9IHRoaXMuJGVsZW1lbnQuZGF0YSgncmVzcG9uc2l2ZS1tZW51Jyk7XG4gICAgdGhpcy5jdXJyZW50TXEgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFBsdWdpbiA9IG51bGw7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdSZXNwb25zaXZlTWVudScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBNZW51IGJ5IHBhcnNpbmcgdGhlIGNsYXNzZXMgZnJvbSB0aGUgJ2RhdGEtUmVzcG9uc2l2ZU1lbnUnIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICAvLyBUaGUgZmlyc3QgdGltZSBhbiBJbnRlcmNoYW5nZSBwbHVnaW4gaXMgaW5pdGlhbGl6ZWQsIHRoaXMucnVsZXMgaXMgY29udmVydGVkIGZyb20gYSBzdHJpbmcgb2YgXCJjbGFzc2VzXCIgdG8gYW4gb2JqZWN0IG9mIHJ1bGVzXG4gICAgaWYgKHR5cGVvZiB0aGlzLnJ1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgbGV0IHJ1bGVzVHJlZSA9IHt9O1xuXG4gICAgICAvLyBQYXJzZSBydWxlcyBmcm9tIFwiY2xhc3Nlc1wiIHB1bGxlZCBmcm9tIGRhdGEgYXR0cmlidXRlXG4gICAgICBsZXQgcnVsZXMgPSB0aGlzLnJ1bGVzLnNwbGl0KCcgJyk7XG5cbiAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBldmVyeSBydWxlIGZvdW5kXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBydWxlID0gcnVsZXNbaV0uc3BsaXQoJy0nKTtcbiAgICAgICAgbGV0IHJ1bGVTaXplID0gcnVsZS5sZW5ndGggPiAxID8gcnVsZVswXSA6ICdzbWFsbCc7XG4gICAgICAgIGxldCBydWxlUGx1Z2luID0gcnVsZS5sZW5ndGggPiAxID8gcnVsZVsxXSA6IHJ1bGVbMF07XG5cbiAgICAgICAgaWYgKE1lbnVQbHVnaW5zW3J1bGVQbHVnaW5dICE9PSBudWxsKSB7XG4gICAgICAgICAgcnVsZXNUcmVlW3J1bGVTaXplXSA9IE1lbnVQbHVnaW5zW3J1bGVQbHVnaW5dO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMucnVsZXMgPSBydWxlc1RyZWU7XG4gICAgfVxuXG4gICAgaWYgKCEkLmlzRW1wdHlPYmplY3QodGhpcy5ydWxlcykpIHtcbiAgICAgIHRoaXMuX2NoZWNrTWVkaWFRdWVyaWVzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGV2ZW50cyBmb3IgdGhlIE1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgJCh3aW5kb3cpLm9uKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCBmdW5jdGlvbigpIHtcbiAgICAgIF90aGlzLl9jaGVja01lZGlhUXVlcmllcygpO1xuICAgIH0pO1xuICAgIC8vICQod2luZG93KS5vbigncmVzaXplLnpmLlJlc3BvbnNpdmVNZW51JywgZnVuY3Rpb24oKSB7XG4gICAgLy8gICBfdGhpcy5fY2hlY2tNZWRpYVF1ZXJpZXMoKTtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIGN1cnJlbnQgc2NyZWVuIHdpZHRoIGFnYWluc3QgYXZhaWxhYmxlIG1lZGlhIHF1ZXJpZXMuIElmIHRoZSBtZWRpYSBxdWVyeSBoYXMgY2hhbmdlZCwgYW5kIHRoZSBwbHVnaW4gbmVlZGVkIGhhcyBjaGFuZ2VkLCB0aGUgcGx1Z2lucyB3aWxsIHN3YXAgb3V0LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja01lZGlhUXVlcmllcygpIHtcbiAgICB2YXIgbWF0Y2hlZE1xLCBfdGhpcyA9IHRoaXM7XG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggcnVsZSBhbmQgZmluZCB0aGUgbGFzdCBtYXRjaGluZyBydWxlXG4gICAgJC5lYWNoKHRoaXMucnVsZXMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgaWYgKEZvdW5kYXRpb24uTWVkaWFRdWVyeS5hdExlYXN0KGtleSkpIHtcbiAgICAgICAgbWF0Y2hlZE1xID0ga2V5O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTm8gbWF0Y2g/IE5vIGRpY2VcbiAgICBpZiAoIW1hdGNoZWRNcSkgcmV0dXJuO1xuXG4gICAgLy8gUGx1Z2luIGFscmVhZHkgaW5pdGlhbGl6ZWQ/IFdlIGdvb2RcbiAgICBpZiAodGhpcy5jdXJyZW50UGx1Z2luIGluc3RhbmNlb2YgdGhpcy5ydWxlc1ttYXRjaGVkTXFdLnBsdWdpbikgcmV0dXJuO1xuXG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIHBsdWdpbi1zcGVjaWZpYyBDU1MgY2xhc3Nlc1xuICAgICQuZWFjaChNZW51UGx1Z2lucywgZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgX3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3ModmFsdWUuY3NzQ2xhc3MpO1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIHRoZSBDU1MgY2xhc3MgZm9yIHRoZSBuZXcgcGx1Z2luXG4gICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLnJ1bGVzW21hdGNoZWRNcV0uY3NzQ2xhc3MpO1xuXG4gICAgLy8gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBuZXcgcGx1Z2luXG4gICAgaWYgKHRoaXMuY3VycmVudFBsdWdpbikgdGhpcy5jdXJyZW50UGx1Z2luLmRlc3Ryb3koKTtcbiAgICB0aGlzLmN1cnJlbnRQbHVnaW4gPSBuZXcgdGhpcy5ydWxlc1ttYXRjaGVkTXFdLnBsdWdpbih0aGlzLiRlbGVtZW50LCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGluc3RhbmNlIG9mIHRoZSBjdXJyZW50IHBsdWdpbiBvbiB0aGlzIGVsZW1lbnQsIGFzIHdlbGwgYXMgdGhlIHdpbmRvdyByZXNpemUgaGFuZGxlciB0aGF0IHN3aXRjaGVzIHRoZSBwbHVnaW5zIG91dC5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuY3VycmVudFBsdWdpbi5kZXN0cm95KCk7XG4gICAgJCh3aW5kb3cpLm9mZignLnpmLlJlc3BvbnNpdmVNZW51Jyk7XG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cblJlc3BvbnNpdmVNZW51LmRlZmF1bHRzID0ge307XG5cbi8vIFRoZSBwbHVnaW4gbWF0Y2hlcyB0aGUgcGx1Z2luIGNsYXNzZXMgd2l0aCB0aGVzZSBwbHVnaW4gaW5zdGFuY2VzLlxudmFyIE1lbnVQbHVnaW5zID0ge1xuICBkcm9wZG93bjoge1xuICAgIGNzc0NsYXNzOiAnZHJvcGRvd24nLFxuICAgIHBsdWdpbjogRm91bmRhdGlvbi5fcGx1Z2luc1snZHJvcGRvd24tbWVudSddIHx8IG51bGxcbiAgfSxcbiBkcmlsbGRvd246IHtcbiAgICBjc3NDbGFzczogJ2RyaWxsZG93bicsXG4gICAgcGx1Z2luOiBGb3VuZGF0aW9uLl9wbHVnaW5zWydkcmlsbGRvd24nXSB8fCBudWxsXG4gIH0sXG4gIGFjY29yZGlvbjoge1xuICAgIGNzc0NsYXNzOiAnYWNjb3JkaW9uLW1lbnUnLFxuICAgIHBsdWdpbjogRm91bmRhdGlvbi5fcGx1Z2luc1snYWNjb3JkaW9uLW1lbnUnXSB8fCBudWxsXG4gIH1cbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihSZXNwb25zaXZlTWVudSwgJ1Jlc3BvbnNpdmVNZW51Jyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBSZXNwb25zaXZlVG9nZ2xlIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5yZXNwb25zaXZlVG9nZ2xlXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1lZGlhUXVlcnlcbiAqL1xuXG5jbGFzcyBSZXNwb25zaXZlVG9nZ2xlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgVGFiIEJhci5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBSZXNwb25zaXZlVG9nZ2xlI2luaXRcbiAgICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGF0dGFjaCB0YWIgYmFyIGZ1bmN0aW9uYWxpdHkgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgUmVzcG9uc2l2ZVRvZ2dsZS5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuICAgIHRoaXMuX2V2ZW50cygpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnUmVzcG9uc2l2ZVRvZ2dsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSB0YWIgYmFyIGJ5IGZpbmRpbmcgdGhlIHRhcmdldCBlbGVtZW50LCB0b2dnbGluZyBlbGVtZW50LCBhbmQgcnVubmluZyB1cGRhdGUoKS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB2YXIgdGFyZ2V0SUQgPSB0aGlzLiRlbGVtZW50LmRhdGEoJ3Jlc3BvbnNpdmUtdG9nZ2xlJyk7XG4gICAgaWYgKCF0YXJnZXRJRCkge1xuICAgICAgY29uc29sZS5lcnJvcignWW91ciB0YWIgYmFyIG5lZWRzIGFuIElEIG9mIGEgTWVudSBhcyB0aGUgdmFsdWUgb2YgZGF0YS10YWItYmFyLicpO1xuICAgIH1cblxuICAgIHRoaXMuJHRhcmdldE1lbnUgPSAkKGAjJHt0YXJnZXRJRH1gKTtcbiAgICB0aGlzLiR0b2dnbGVyID0gdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS10b2dnbGVdJyk7XG5cbiAgICB0aGlzLl91cGRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG5lY2Vzc2FyeSBldmVudCBoYW5kbGVycyBmb3IgdGhlIHRhYiBiYXIgdG8gd29yay5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAkKHdpbmRvdykub24oJ2NoYW5nZWQuemYubWVkaWFxdWVyeScsIHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMuJHRvZ2dsZXIub24oJ2NsaWNrLnpmLnJlc3BvbnNpdmVUb2dnbGUnLCB0aGlzLnRvZ2dsZU1lbnUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHRoZSBjdXJyZW50IG1lZGlhIHF1ZXJ5IHRvIGRldGVybWluZSBpZiB0aGUgdGFiIGJhciBzaG91bGQgYmUgdmlzaWJsZSBvciBoaWRkZW4uXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZSgpIHtcbiAgICAvLyBNb2JpbGVcbiAgICBpZiAoIUZvdW5kYXRpb24uTWVkaWFRdWVyeS5hdExlYXN0KHRoaXMub3B0aW9ucy5oaWRlRm9yKSkge1xuICAgICAgdGhpcy4kZWxlbWVudC5zaG93KCk7XG4gICAgICB0aGlzLiR0YXJnZXRNZW51LmhpZGUoKTtcbiAgICB9XG5cbiAgICAvLyBEZXNrdG9wXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmhpZGUoKTtcbiAgICAgIHRoaXMuJHRhcmdldE1lbnUuc2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBlbGVtZW50IGF0dGFjaGVkIHRvIHRoZSB0YWIgYmFyLiBUaGUgdG9nZ2xlIG9ubHkgaGFwcGVucyBpZiB0aGUgc2NyZWVuIGlzIHNtYWxsIGVub3VnaCB0byBhbGxvdyBpdC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBSZXNwb25zaXZlVG9nZ2xlI3RvZ2dsZWRcbiAgICovXG4gIHRvZ2dsZU1lbnUoKSB7XG4gICAgaWYgKCFGb3VuZGF0aW9uLk1lZGlhUXVlcnkuYXRMZWFzdCh0aGlzLm9wdGlvbnMuaGlkZUZvcikpIHtcbiAgICAgIHRoaXMuJHRhcmdldE1lbnUudG9nZ2xlKDApO1xuXG4gICAgICAvKipcbiAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGVsZW1lbnQgYXR0YWNoZWQgdG8gdGhlIHRhYiBiYXIgdG9nZ2xlcy5cbiAgICAgICAqIEBldmVudCBSZXNwb25zaXZlVG9nZ2xlI3RvZ2dsZWRcbiAgICAgICAqL1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCd0b2dnbGVkLnpmLnJlc3BvbnNpdmVUb2dnbGUnKTtcbiAgICB9XG4gIH07XG5cbiAgZGVzdHJveSgpIHtcbiAgICAvL1RPRE8gdGhpcy4uLlxuICB9XG59XG5cblJlc3BvbnNpdmVUb2dnbGUuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgYnJlYWtwb2ludCBhZnRlciB3aGljaCB0aGUgbWVudSBpcyBhbHdheXMgc2hvd24sIGFuZCB0aGUgdGFiIGJhciBpcyBoaWRkZW4uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ21lZGl1bSdcbiAgICovXG4gIGhpZGVGb3I6ICdtZWRpdW0nXG59O1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oUmVzcG9uc2l2ZVRvZ2dsZSwgJ1Jlc3BvbnNpdmVUb2dnbGUnKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIFJldmVhbCBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24ucmV2ZWFsXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmtleWJvYXJkXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmJveFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tZWRpYVF1ZXJ5XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1vdGlvbiBpZiB1c2luZyBhbmltYXRpb25zXG4gKi9cblxuY2xhc3MgUmV2ZWFsIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgUmV2ZWFsLlxuICAgKiBAY2xhc3NcbiAgICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIHVzZSBmb3IgdGhlIG1vZGFsLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIFJldmVhbC5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ1JldmVhbCcpO1xuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ1JldmVhbCcsIHtcbiAgICAgICdFTlRFUic6ICdvcGVuJyxcbiAgICAgICdTUEFDRSc6ICdvcGVuJyxcbiAgICAgICdFU0NBUEUnOiAnY2xvc2UnLFxuICAgICAgJ1RBQic6ICd0YWJfZm9yd2FyZCcsXG4gICAgICAnU0hJRlRfVEFCJzogJ3RhYl9iYWNrd2FyZCdcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgbW9kYWwgYnkgYWRkaW5nIHRoZSBvdmVybGF5IGFuZCBjbG9zZSBidXR0b25zLCAoaWYgc2VsZWN0ZWQpLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdGhpcy5pZCA9IHRoaXMuJGVsZW1lbnQuYXR0cignaWQnKTtcbiAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5jYWNoZWQgPSB7bXE6IEZvdW5kYXRpb24uTWVkaWFRdWVyeS5jdXJyZW50fTtcbiAgICB0aGlzLmlzaU9TID0gaVBob25lU25pZmYoKTtcblxuICAgIGlmKHRoaXMuaXNpT1MpeyB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdpcy1pb3MnKTsgfVxuXG4gICAgdGhpcy4kYW5jaG9yID0gJChgW2RhdGEtb3Blbj1cIiR7dGhpcy5pZH1cIl1gKS5sZW5ndGggPyAkKGBbZGF0YS1vcGVuPVwiJHt0aGlzLmlkfVwiXWApIDogJChgW2RhdGEtdG9nZ2xlPVwiJHt0aGlzLmlkfVwiXWApO1xuXG4gICAgaWYgKHRoaXMuJGFuY2hvci5sZW5ndGgpIHtcbiAgICAgIHZhciBhbmNob3JJZCA9IHRoaXMuJGFuY2hvclswXS5pZCB8fCBGb3VuZGF0aW9uLkdldFlvRGlnaXRzKDYsICdyZXZlYWwnKTtcblxuICAgICAgdGhpcy4kYW5jaG9yLmF0dHIoe1xuICAgICAgICAnYXJpYS1jb250cm9scyc6IHRoaXMuaWQsXG4gICAgICAgICdpZCc6IGFuY2hvcklkLFxuICAgICAgICAnYXJpYS1oYXNwb3B1cCc6IHRydWUsXG4gICAgICAgICd0YWJpbmRleCc6IDBcbiAgICAgIH0pO1xuICAgICAgdGhpcy4kZWxlbWVudC5hdHRyKHsnYXJpYS1sYWJlbGxlZGJ5JzogYW5jaG9ySWR9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmZ1bGxTY3JlZW4gfHwgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbCcpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZnVsbFNjcmVlbiA9IHRydWU7XG4gICAgICB0aGlzLm9wdGlvbnMub3ZlcmxheSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLm92ZXJsYXkgJiYgIXRoaXMuJG92ZXJsYXkpIHtcbiAgICAgIHRoaXMuJG92ZXJsYXkgPSB0aGlzLl9tYWtlT3ZlcmxheSh0aGlzLmlkKTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoe1xuICAgICAgICAncm9sZSc6ICdkaWFsb2cnLFxuICAgICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlLFxuICAgICAgICAnZGF0YS15ZXRpLWJveCc6IHRoaXMuaWQsXG4gICAgICAgICdkYXRhLXJlc2l6ZSc6IHRoaXMuaWRcbiAgICB9KTtcblxuICAgIGlmKHRoaXMuJG92ZXJsYXkpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQuZGV0YWNoKCkuYXBwZW5kVG8odGhpcy4kb3ZlcmxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQuZGV0YWNoKCkuYXBwZW5kVG8oJCgnYm9keScpKTtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ3dpdGhvdXQtb3ZlcmxheScpO1xuICAgIH1cbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlZXBMaW5rICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSAoIGAjJHt0aGlzLmlkfWApKSB7XG4gICAgICAkKHdpbmRvdykub25lKCdsb2FkLnpmLnJldmVhbCcsIHRoaXMub3Blbi5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBvdmVybGF5IGRpdiB0byBkaXNwbGF5IGJlaGluZCB0aGUgbW9kYWwuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZU92ZXJsYXkoaWQpIHtcbiAgICB2YXIgJG92ZXJsYXkgPSAkKCc8ZGl2PjwvZGl2PicpXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygncmV2ZWFsLW92ZXJsYXknKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cih7J3RhYmluZGV4JzogLTEsICdhcmlhLWhpZGRlbic6IHRydWV9KVxuICAgICAgICAgICAgICAgICAgICAuYXBwZW5kVG8oJ2JvZHknKTtcbiAgICByZXR1cm4gJG92ZXJsYXk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBwb3NpdGlvbiBvZiBtb2RhbFxuICAgKiBUT0RPOiAgRmlndXJlIG91dCBpZiB3ZSBhY3R1YWxseSBuZWVkIHRvIGNhY2hlIHRoZXNlIHZhbHVlcyBvciBpZiBpdCBkb2Vzbid0IG1hdHRlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBvc2l0aW9uKCkge1xuICAgIHZhciB3aWR0aCA9IHRoaXMuJGVsZW1lbnQub3V0ZXJXaWR0aCgpO1xuICAgIHZhciBvdXRlcldpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuJGVsZW1lbnQub3V0ZXJIZWlnaHQoKTtcbiAgICB2YXIgb3V0ZXJIZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCk7XG4gICAgdmFyIGxlZnQsIHRvcDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmhPZmZzZXQgPT09ICdhdXRvJykge1xuICAgICAgbGVmdCA9IHBhcnNlSW50KChvdXRlcldpZHRoIC0gd2lkdGgpIC8gMiwgMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZWZ0ID0gcGFyc2VJbnQodGhpcy5vcHRpb25zLmhPZmZzZXQsIDEwKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy52T2Zmc2V0ID09PSAnYXV0bycpIHtcbiAgICAgIGlmIChoZWlnaHQgPiBvdXRlckhlaWdodCkge1xuICAgICAgICB0b3AgPSBwYXJzZUludChNYXRoLm1pbigxMDAsIG91dGVySGVpZ2h0IC8gMTApLCAxMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSBwYXJzZUludCgob3V0ZXJIZWlnaHQgLSBoZWlnaHQpIC8gNCwgMTApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0b3AgPSBwYXJzZUludCh0aGlzLm9wdGlvbnMudk9mZnNldCwgMTApO1xuICAgIH1cbiAgICB0aGlzLiRlbGVtZW50LmNzcyh7dG9wOiB0b3AgKyAncHgnfSk7XG4gICAgLy8gb25seSB3b3JyeSBhYm91dCBsZWZ0IGlmIHdlIGRvbid0IGhhdmUgYW4gb3ZlcmxheSBvciB3ZSBoYXZlYSAgaG9yaXpvbnRhbCBvZmZzZXQsXG4gICAgLy8gb3RoZXJ3aXNlIHdlJ3JlIHBlcmZlY3RseSBpbiB0aGUgbWlkZGxlXG4gICAgaWYoIXRoaXMuJG92ZXJsYXkgfHwgKHRoaXMub3B0aW9ucy5oT2Zmc2V0ICE9PSAnYXV0bycpKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmNzcyh7bGVmdDogbGVmdCArICdweCd9KTtcbiAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKHttYXJnaW46ICcwcHgnfSk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBoYW5kbGVycyBmb3IgdGhlIG1vZGFsLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kZWxlbWVudC5vbih7XG4gICAgICAnb3Blbi56Zi50cmlnZ2VyJzogdGhpcy5vcGVuLmJpbmQodGhpcyksXG4gICAgICAnY2xvc2UuemYudHJpZ2dlcic6IHRoaXMuY2xvc2UuYmluZCh0aGlzKSxcbiAgICAgICd0b2dnbGUuemYudHJpZ2dlcic6IHRoaXMudG9nZ2xlLmJpbmQodGhpcyksXG4gICAgICAncmVzaXplbWUuemYudHJpZ2dlcic6IGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy5fdXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLiRhbmNob3IubGVuZ3RoKSB7XG4gICAgICB0aGlzLiRhbmNob3Iub24oJ2tleWRvd24uemYucmV2ZWFsJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoZS53aGljaCA9PT0gMTMgfHwgZS53aGljaCA9PT0gMzIpIHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrICYmIHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICB0aGlzLiRvdmVybGF5Lm9mZignLnpmLnJldmVhbCcpLm9uKCdjbGljay56Zi5yZXZlYWwnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gX3RoaXMuJGVsZW1lbnRbMF0gfHwgJC5jb250YWlucyhfdGhpcy4kZWxlbWVudFswXSwgZS50YXJnZXQpKSB7IHJldHVybjsgfVxuICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmspIHtcbiAgICAgICQod2luZG93KS5vbihgcG9wc3RhdGUuemYucmV2ZWFsOiR7dGhpcy5pZH1gLCB0aGlzLl9oYW5kbGVTdGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBtb2RhbCBtZXRob2RzIG9uIGJhY2svZm9yd2FyZCBidXR0b24gY2xpY2tzIG9yIGFueSBvdGhlciBldmVudCB0aGF0IHRyaWdnZXJzIHBvcHN0YXRlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZVN0YXRlKGUpIHtcbiAgICBpZih3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gKCAnIycgKyB0aGlzLmlkKSAmJiAhdGhpcy5pc0FjdGl2ZSl7IHRoaXMub3BlbigpOyB9XG4gICAgZWxzZXsgdGhpcy5jbG9zZSgpOyB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgbW9kYWwgY29udHJvbGxlZCBieSBgdGhpcy4kYW5jaG9yYCwgYW5kIGNsb3NlcyBhbGwgb3RoZXJzIGJ5IGRlZmF1bHQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgUmV2ZWFsI2Nsb3NlbWVcbiAgICogQGZpcmVzIFJldmVhbCNvcGVuXG4gICAqL1xuICBvcGVuKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmspIHtcbiAgICAgIHZhciBoYXNoID0gYCMke3RoaXMuaWR9YDtcblxuICAgICAgaWYgKHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSkge1xuICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgaGFzaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IGhhc2g7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cbiAgICAvLyBNYWtlIGVsZW1lbnRzIGludmlzaWJsZSwgYnV0IHJlbW92ZSBkaXNwbGF5OiBub25lIHNvIHdlIGNhbiBnZXQgc2l6ZSBhbmQgcG9zaXRpb25pbmdcbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAgIC5jc3MoeyAndmlzaWJpbGl0eSc6ICdoaWRkZW4nIH0pXG4gICAgICAgIC5zaG93KClcbiAgICAgICAgLnNjcm9sbFRvcCgwKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLm92ZXJsYXkpIHtcbiAgICAgIHRoaXMuJG92ZXJsYXkuY3NzKHsndmlzaWJpbGl0eSc6ICdoaWRkZW4nfSkuc2hvdygpO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCk7XG5cbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAuaGlkZSgpXG4gICAgICAuY3NzKHsgJ3Zpc2liaWxpdHknOiAnJyB9KTtcblxuICAgIGlmKHRoaXMuJG92ZXJsYXkpIHtcbiAgICAgIHRoaXMuJG92ZXJsYXkuY3NzKHsndmlzaWJpbGl0eSc6ICcnfSkuaGlkZSgpO1xuICAgIH1cblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubXVsdGlwbGVPcGVuZWQpIHtcbiAgICAgIC8qKlxuICAgICAgICogRmlyZXMgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBtb2RhbCBvcGVucy5cbiAgICAgICAqIENsb3NlcyBhbnkgb3RoZXIgbW9kYWxzIHRoYXQgYXJlIGN1cnJlbnRseSBvcGVuXG4gICAgICAgKiBAZXZlbnQgUmV2ZWFsI2Nsb3NlbWVcbiAgICAgICAqL1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjbG9zZW1lLnpmLnJldmVhbCcsIHRoaXMuaWQpO1xuICAgIH1cblxuICAgIC8vIE1vdGlvbiBVSSBtZXRob2Qgb2YgcmV2ZWFsXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRpb25Jbikge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICAgIEZvdW5kYXRpb24uTW90aW9uLmFuaW1hdGVJbih0aGlzLiRvdmVybGF5LCAnZmFkZS1pbicpO1xuICAgICAgfVxuICAgICAgRm91bmRhdGlvbi5Nb3Rpb24uYW5pbWF0ZUluKHRoaXMuJGVsZW1lbnQsIHRoaXMub3B0aW9ucy5hbmltYXRpb25JbiwgKCkgPT4ge1xuICAgICAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzID0gRm91bmRhdGlvbi5LZXlib2FyZC5maW5kRm9jdXNhYmxlKHRoaXMuJGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGpRdWVyeSBtZXRob2Qgb2YgcmV2ZWFsXG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm92ZXJsYXkpIHtcbiAgICAgICAgdGhpcy4kb3ZlcmxheS5zaG93KDApO1xuICAgICAgfVxuICAgICAgdGhpcy4kZWxlbWVudC5zaG93KHRoaXMub3B0aW9ucy5zaG93RGVsYXkpO1xuICAgIH1cblxuICAgIC8vIGhhbmRsZSBhY2Nlc3NpYmlsaXR5XG4gICAgdGhpcy4kZWxlbWVudFxuICAgICAgLmF0dHIoe1xuICAgICAgICAnYXJpYS1oaWRkZW4nOiBmYWxzZSxcbiAgICAgICAgJ3RhYmluZGV4JzogLTFcbiAgICAgIH0pXG4gICAgICAuZm9jdXMoKTtcblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIG1vZGFsIGhhcyBzdWNjZXNzZnVsbHkgb3BlbmVkLlxuICAgICAqIEBldmVudCBSZXZlYWwjb3BlblxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignb3Blbi56Zi5yZXZlYWwnKTtcblxuICAgIGlmICh0aGlzLmlzaU9TKSB7XG4gICAgICB2YXIgc2Nyb2xsUG9zID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgJCgnaHRtbCwgYm9keScpLmFkZENsYXNzKCdpcy1yZXZlYWwtb3BlbicpLnNjcm9sbFRvcChzY3JvbGxQb3MpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICQoJ2JvZHknKS5hZGRDbGFzcygnaXMtcmV2ZWFsLW9wZW4nKTtcbiAgICB9XG5cbiAgICAkKCdib2R5JylcbiAgICAgIC5hZGRDbGFzcygnaXMtcmV2ZWFsLW9wZW4nKVxuICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgKHRoaXMub3B0aW9ucy5vdmVybGF5IHx8IHRoaXMub3B0aW9ucy5mdWxsU2NyZWVuKSA/IHRydWUgOiBmYWxzZSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2V4dHJhSGFuZGxlcnMoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV4dHJhIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgYm9keSBhbmQgd2luZG93IGlmIG5lY2Vzc2FyeS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9leHRyYUhhbmRsZXJzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdGhpcy5mb2N1c2FibGVFbGVtZW50cyA9IEZvdW5kYXRpb24uS2V5Ym9hcmQuZmluZEZvY3VzYWJsZSh0aGlzLiRlbGVtZW50KTtcblxuICAgIGlmICghdGhpcy5vcHRpb25zLm92ZXJsYXkgJiYgdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayAmJiAhdGhpcy5vcHRpb25zLmZ1bGxTY3JlZW4pIHtcbiAgICAgICQoJ2JvZHknKS5vbignY2xpY2suemYucmV2ZWFsJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoZS50YXJnZXQgPT09IF90aGlzLiRlbGVtZW50WzBdIHx8ICQuY29udGFpbnMoX3RoaXMuJGVsZW1lbnRbMF0sIGUudGFyZ2V0KSkgeyByZXR1cm47IH1cbiAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkVzYykge1xuICAgICAgJCh3aW5kb3cpLm9uKCdrZXlkb3duLnpmLnJldmVhbCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC5oYW5kbGVLZXkoZSwgJ1JldmVhbCcsIHtcbiAgICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5jbG9zZU9uRXNjKSB7XG4gICAgICAgICAgICAgIF90aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgIF90aGlzLiRhbmNob3IuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gbG9jayBmb2N1cyB3aXRoaW4gbW9kYWwgd2hpbGUgdGFiYmluZ1xuICAgIHRoaXMuJGVsZW1lbnQub24oJ2tleWRvd24uemYucmV2ZWFsJywgZnVuY3Rpb24oZSkge1xuICAgICAgdmFyICR0YXJnZXQgPSAkKHRoaXMpO1xuICAgICAgLy8gaGFuZGxlIGtleWJvYXJkIGV2ZW50IHdpdGgga2V5Ym9hcmQgdXRpbFxuICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC5oYW5kbGVLZXkoZSwgJ1JldmVhbCcsIHtcbiAgICAgICAgdGFiX2ZvcndhcmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChfdGhpcy4kZWxlbWVudC5maW5kKCc6Zm9jdXMnKS5pcyhfdGhpcy5mb2N1c2FibGVFbGVtZW50cy5lcSgtMSkpKSB7IC8vIGxlZnQgbW9kYWwgZG93bndhcmRzLCBzZXR0aW5nIGZvY3VzIHRvIGZpcnN0IGVsZW1lbnRcbiAgICAgICAgICAgIF90aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmVxKDApLmZvY3VzKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfdGhpcy5mb2N1c2FibGVFbGVtZW50cy5sZW5ndGggPT09IDApIHsgLy8gbm8gZm9jdXNhYmxlIGVsZW1lbnRzIGluc2lkZSB0aGUgbW9kYWwgYXQgYWxsLCBwcmV2ZW50IHRhYmJpbmcgaW4gZ2VuZXJhbFxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGFiX2JhY2t3YXJkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuJGVsZW1lbnQuZmluZCgnOmZvY3VzJykuaXMoX3RoaXMuZm9jdXNhYmxlRWxlbWVudHMuZXEoMCkpIHx8IF90aGlzLiRlbGVtZW50LmlzKCc6Zm9jdXMnKSkgeyAvLyBsZWZ0IG1vZGFsIHVwd2FyZHMsIHNldHRpbmcgZm9jdXMgdG8gbGFzdCBlbGVtZW50XG4gICAgICAgICAgICBfdGhpcy5mb2N1c2FibGVFbGVtZW50cy5lcSgtMSkuZm9jdXMoKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKF90aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgeyAvLyBubyBmb2N1c2FibGUgZWxlbWVudHMgaW5zaWRlIHRoZSBtb2RhbCBhdCBhbGwsIHByZXZlbnQgdGFiYmluZyBpbiBnZW5lcmFsXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvcGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuJGVsZW1lbnQuZmluZCgnOmZvY3VzJykuaXMoX3RoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtY2xvc2VdJykpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyAvLyBzZXQgZm9jdXMgYmFjayB0byBhbmNob3IgaWYgY2xvc2UgYnV0dG9uIGhhcyBiZWVuIGFjdGl2YXRlZFxuICAgICAgICAgICAgICBfdGhpcy4kYW5jaG9yLmZvY3VzKCk7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCR0YXJnZXQuaXMoX3RoaXMuZm9jdXNhYmxlRWxlbWVudHMpKSB7IC8vIGRvbnQndCB0cmlnZ2VyIGlmIGFjdWFsIGVsZW1lbnQgaGFzIGZvY3VzIChpLmUuIGlucHV0cywgbGlua3MsIC4uLilcbiAgICAgICAgICAgIF90aGlzLm9wZW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5jbG9zZU9uRXNjKSB7XG4gICAgICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgX3RoaXMuJGFuY2hvci5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBtb2RhbC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBSZXZlYWwjY2xvc2VkXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNBY3RpdmUgfHwgIXRoaXMuJGVsZW1lbnQuaXMoJzp2aXNpYmxlJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8vIE1vdGlvbiBVSSBtZXRob2Qgb2YgaGlkaW5nXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRpb25PdXQpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMub3ZlcmxheSkge1xuICAgICAgICBGb3VuZGF0aW9uLk1vdGlvbi5hbmltYXRlT3V0KHRoaXMuJG92ZXJsYXksICdmYWRlLW91dCcsIGZpbmlzaFVwKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBmaW5pc2hVcCgpO1xuICAgICAgfVxuXG4gICAgICBGb3VuZGF0aW9uLk1vdGlvbi5hbmltYXRlT3V0KHRoaXMuJGVsZW1lbnQsIHRoaXMub3B0aW9ucy5hbmltYXRpb25PdXQpO1xuICAgIH1cbiAgICAvLyBqUXVlcnkgbWV0aG9kIG9mIGhpZGluZ1xuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICAgIHRoaXMuJG92ZXJsYXkuaGlkZSgwLCBmaW5pc2hVcCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZmluaXNoVXAoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4kZWxlbWVudC5oaWRlKHRoaXMub3B0aW9ucy5oaWRlRGVsYXkpO1xuICAgIH1cblxuICAgIC8vIENvbmRpdGlvbmFscyB0byByZW1vdmUgZXh0cmEgZXZlbnQgbGlzdGVuZXJzIGFkZGVkIG9uIG9wZW5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlT25Fc2MpIHtcbiAgICAgICQod2luZG93KS5vZmYoJ2tleWRvd24uemYucmV2ZWFsJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMub3ZlcmxheSAmJiB0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrKSB7XG4gICAgICAkKCdib2R5Jykub2ZmKCdjbGljay56Zi5yZXZlYWwnKTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50Lm9mZigna2V5ZG93bi56Zi5yZXZlYWwnKTtcblxuICAgIGZ1bmN0aW9uIGZpbmlzaFVwKCkge1xuICAgICAgaWYgKF90aGlzLmlzaU9TKSB7XG4gICAgICAgICQoJ2h0bWwsIGJvZHknKS5yZW1vdmVDbGFzcygnaXMtcmV2ZWFsLW9wZW4nKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ2lzLXJldmVhbC1vcGVuJyk7XG4gICAgICB9XG5cbiAgICAgICQoJ2JvZHknKS5hdHRyKHtcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogZmFsc2UsXG4gICAgICAgICd0YWJpbmRleCc6ICcnXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCB0cnVlKTtcblxuICAgICAgLyoqXG4gICAgICAqIEZpcmVzIHdoZW4gdGhlIG1vZGFsIGlzIGRvbmUgY2xvc2luZy5cbiAgICAgICogQGV2ZW50IFJldmVhbCNjbG9zZWRcbiAgICAgICovXG4gICAgICBfdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjbG9zZWQuemYucmV2ZWFsJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBSZXNldHMgdGhlIG1vZGFsIGNvbnRlbnRcbiAgICAqIFRoaXMgcHJldmVudHMgYSBydW5uaW5nIHZpZGVvIHRvIGtlZXAgZ29pbmcgaW4gdGhlIGJhY2tncm91bmRcbiAgICAqL1xuICAgIGlmICh0aGlzLm9wdGlvbnMucmVzZXRPbkNsb3NlKSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lmh0bWwodGhpcy4kZWxlbWVudC5odG1sKCkpO1xuICAgIH1cblxuICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgaWYgKF90aGlzLm9wdGlvbnMuZGVlcExpbmspIHtcbiAgICAgICBpZiAod2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoXCJcIiwgZG9jdW1lbnQudGl0bGUsIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJyc7XG4gICAgICAgfVxuICAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgb3Blbi9jbG9zZWQgc3RhdGUgb2YgYSBtb2RhbC5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBEZXN0cm95cyBhbiBpbnN0YW5jZSBvZiBhIG1vZGFsLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmFwcGVuZFRvKCQoJ2JvZHknKSk7IC8vIG1vdmUgJGVsZW1lbnQgb3V0c2lkZSBvZiAkb3ZlcmxheSB0byBwcmV2ZW50IGVycm9yIHVucmVnaXN0ZXJQbHVnaW4oKVxuICAgICAgdGhpcy4kb3ZlcmxheS5oaWRlKCkub2ZmKCkucmVtb3ZlKCk7XG4gICAgfVxuICAgIHRoaXMuJGVsZW1lbnQuaGlkZSgpLm9mZigpO1xuICAgIHRoaXMuJGFuY2hvci5vZmYoJy56ZicpO1xuICAgICQod2luZG93KS5vZmYoYC56Zi5yZXZlYWw6JHt0aGlzLmlkfWApO1xuXG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9O1xufVxuXG5SZXZlYWwuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBNb3Rpb24tVUkgY2xhc3MgdG8gdXNlIGZvciBhbmltYXRlZCBlbGVtZW50cy4gSWYgbm9uZSB1c2VkLCBkZWZhdWx0cyB0byBzaW1wbGUgc2hvdy9oaWRlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdzbGlkZS1pbi1sZWZ0J1xuICAgKi9cbiAgYW5pbWF0aW9uSW46ICcnLFxuICAvKipcbiAgICogTW90aW9uLVVJIGNsYXNzIHRvIHVzZSBmb3IgYW5pbWF0ZWQgZWxlbWVudHMuIElmIG5vbmUgdXNlZCwgZGVmYXVsdHMgdG8gc2ltcGxlIHNob3cvaGlkZS5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnc2xpZGUtb3V0LXJpZ2h0J1xuICAgKi9cbiAgYW5pbWF0aW9uT3V0OiAnJyxcbiAgLyoqXG4gICAqIFRpbWUsIGluIG1zLCB0byBkZWxheSB0aGUgb3BlbmluZyBvZiBhIG1vZGFsIGFmdGVyIGEgY2xpY2sgaWYgbm8gYW5pbWF0aW9uIHVzZWQuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMTBcbiAgICovXG4gIHNob3dEZWxheTogMCxcbiAgLyoqXG4gICAqIFRpbWUsIGluIG1zLCB0byBkZWxheSB0aGUgY2xvc2luZyBvZiBhIG1vZGFsIGFmdGVyIGEgY2xpY2sgaWYgbm8gYW5pbWF0aW9uIHVzZWQuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMTBcbiAgICovXG4gIGhpZGVEZWxheTogMCxcbiAgLyoqXG4gICAqIEFsbG93cyBhIGNsaWNrIG9uIHRoZSBib2R5L292ZXJsYXkgdG8gY2xvc2UgdGhlIG1vZGFsLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGNsb3NlT25DbGljazogdHJ1ZSxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgbW9kYWwgdG8gY2xvc2UgaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUgYEVTQ0FQRWAga2V5LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGNsb3NlT25Fc2M6IHRydWUsXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBhbGxvd3MgbXVsdGlwbGUgbW9kYWxzIHRvIGJlIGRpc3BsYXllZCBhdCBvbmNlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBtdWx0aXBsZU9wZW5lZDogZmFsc2UsXG4gIC8qKlxuICAgKiBEaXN0YW5jZSwgaW4gcGl4ZWxzLCB0aGUgbW9kYWwgc2hvdWxkIHB1c2ggZG93biBmcm9tIHRoZSB0b3Agb2YgdGhlIHNjcmVlbi5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBhdXRvXG4gICAqL1xuICB2T2Zmc2V0OiAnYXV0bycsXG4gIC8qKlxuICAgKiBEaXN0YW5jZSwgaW4gcGl4ZWxzLCB0aGUgbW9kYWwgc2hvdWxkIHB1c2ggaW4gZnJvbSB0aGUgc2lkZSBvZiB0aGUgc2NyZWVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGF1dG9cbiAgICovXG4gIGhPZmZzZXQ6ICdhdXRvJyxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgbW9kYWwgdG8gYmUgZnVsbHNjcmVlbiwgY29tcGxldGVseSBibG9ja2luZyBvdXQgdGhlIHJlc3Qgb2YgdGhlIHZpZXcuIEpTIGNoZWNrcyBmb3IgdGhpcyBhcyB3ZWxsLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBmdWxsU2NyZWVuOiBmYWxzZSxcbiAgLyoqXG4gICAqIFBlcmNlbnRhZ2Ugb2Ygc2NyZWVuIGhlaWdodCB0aGUgbW9kYWwgc2hvdWxkIHB1c2ggdXAgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSB2aWV3LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDEwXG4gICAqL1xuICBidG1PZmZzZXRQY3Q6IDEwLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSBtb2RhbCB0byBnZW5lcmF0ZSBhbiBvdmVybGF5IGRpdiwgd2hpY2ggd2lsbCBjb3ZlciB0aGUgdmlldyB3aGVuIG1vZGFsIG9wZW5zLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIG92ZXJsYXk6IHRydWUsXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIG1vZGFsIHRvIHJlbW92ZSBhbmQgcmVpbmplY3QgbWFya3VwIG9uIGNsb3NlLiBTaG91bGQgYmUgdHJ1ZSBpZiB1c2luZyB2aWRlbyBlbGVtZW50cyB3L28gdXNpbmcgcHJvdmlkZXIncyBhcGksIG90aGVyd2lzZSwgdmlkZW9zIHdpbGwgY29udGludWUgdG8gcGxheSBpbiB0aGUgYmFja2dyb3VuZC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgcmVzZXRPbkNsb3NlOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgbW9kYWwgdG8gYWx0ZXIgdGhlIHVybCBvbiBvcGVuL2Nsb3NlLCBhbmQgYWxsb3dzIHRoZSB1c2Ugb2YgdGhlIGBiYWNrYCBidXR0b24gdG8gY2xvc2UgbW9kYWxzLiBBTFNPLCBhbGxvd3MgYSBtb2RhbCB0byBhdXRvLW1hbmlhY2FsbHkgb3BlbiBvbiBwYWdlIGxvYWQgSUYgdGhlIGhhc2ggPT09IHRoZSBtb2RhbCdzIHVzZXItc2V0IGlkLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBkZWVwTGluazogZmFsc2Vcbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihSZXZlYWwsICdSZXZlYWwnKTtcblxuZnVuY3Rpb24gaVBob25lU25pZmYoKSB7XG4gIHJldHVybiAvaVAoYWR8aG9uZXxvZCkuKk9TLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbn1cblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIFNsaWRlciBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uc2xpZGVyXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1vdGlvblxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5rZXlib2FyZFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50b3VjaFxuICovXG5cbmNsYXNzIFNsaWRlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGEgZHJpbGxkb3duIG1lbnUuXG4gICAqIEBjbGFzc1xuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBpbnRvIGFuIGFjY29yZGlvbiBtZW51LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIFNsaWRlci5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnU2xpZGVyJyk7XG4gICAgRm91bmRhdGlvbi5LZXlib2FyZC5yZWdpc3RlcignU2xpZGVyJywge1xuICAgICAgJ2x0cic6IHtcbiAgICAgICAgJ0FSUk9XX1JJR0hUJzogJ2luY3JlYXNlJyxcbiAgICAgICAgJ0FSUk9XX1VQJzogJ2luY3JlYXNlJyxcbiAgICAgICAgJ0FSUk9XX0RPV04nOiAnZGVjcmVhc2UnLFxuICAgICAgICAnQVJST1dfTEVGVCc6ICdkZWNyZWFzZScsXG4gICAgICAgICdTSElGVF9BUlJPV19SSUdIVCc6ICdpbmNyZWFzZV9mYXN0JyxcbiAgICAgICAgJ1NISUZUX0FSUk9XX1VQJzogJ2luY3JlYXNlX2Zhc3QnLFxuICAgICAgICAnU0hJRlRfQVJST1dfRE9XTic6ICdkZWNyZWFzZV9mYXN0JyxcbiAgICAgICAgJ1NISUZUX0FSUk9XX0xFRlQnOiAnZGVjcmVhc2VfZmFzdCdcbiAgICAgIH0sXG4gICAgICAncnRsJzoge1xuICAgICAgICAnQVJST1dfTEVGVCc6ICdpbmNyZWFzZScsXG4gICAgICAgICdBUlJPV19SSUdIVCc6ICdkZWNyZWFzZScsXG4gICAgICAgICdTSElGVF9BUlJPV19MRUZUJzogJ2luY3JlYXNlX2Zhc3QnLFxuICAgICAgICAnU0hJRlRfQVJST1dfUklHSFQnOiAnZGVjcmVhc2VfZmFzdCdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWxpemVzIHRoZSBwbHVnaW4gYnkgcmVhZGluZy9zZXR0aW5nIGF0dHJpYnV0ZXMsIGNyZWF0aW5nIGNvbGxlY3Rpb25zIGFuZCBzZXR0aW5nIHRoZSBpbml0aWFsIHBvc2l0aW9uIG9mIHRoZSBoYW5kbGUocykuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdGhpcy5pbnB1dHMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0Jyk7XG4gICAgdGhpcy5oYW5kbGVzID0gdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1zbGlkZXItaGFuZGxlXScpO1xuXG4gICAgdGhpcy4kaGFuZGxlID0gdGhpcy5oYW5kbGVzLmVxKDApO1xuICAgIHRoaXMuJGlucHV0ID0gdGhpcy5pbnB1dHMubGVuZ3RoID8gdGhpcy5pbnB1dHMuZXEoMCkgOiAkKGAjJHt0aGlzLiRoYW5kbGUuYXR0cignYXJpYS1jb250cm9scycpfWApO1xuICAgIHRoaXMuJGZpbGwgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLXNsaWRlci1maWxsXScpLmNzcyh0aGlzLm9wdGlvbnMudmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCcsIDApO1xuXG4gICAgdmFyIGlzRGJsID0gZmFsc2UsXG4gICAgICAgIF90aGlzID0gdGhpcztcbiAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVkIHx8IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3ModGhpcy5vcHRpb25zLmRpc2FibGVkQ2xhc3MpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuZGlzYWJsZWRDbGFzcyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pbnB1dHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0cyA9ICQoKS5hZGQodGhpcy4kaW5wdXQpO1xuICAgICAgdGhpcy5vcHRpb25zLmJpbmRpbmcgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl9zZXRJbml0QXR0cigwKTtcbiAgICB0aGlzLl9ldmVudHModGhpcy4kaGFuZGxlKTtcblxuICAgIGlmICh0aGlzLmhhbmRsZXNbMV0pIHtcbiAgICAgIHRoaXMub3B0aW9ucy5kb3VibGVTaWRlZCA9IHRydWU7XG4gICAgICB0aGlzLiRoYW5kbGUyID0gdGhpcy5oYW5kbGVzLmVxKDEpO1xuICAgICAgdGhpcy4kaW5wdXQyID0gdGhpcy5pbnB1dHMubGVuZ3RoID4gMSA/IHRoaXMuaW5wdXRzLmVxKDEpIDogJChgIyR7dGhpcy4kaGFuZGxlMi5hdHRyKCdhcmlhLWNvbnRyb2xzJyl9YCk7XG5cbiAgICAgIGlmICghdGhpcy5pbnB1dHNbMV0pIHtcbiAgICAgICAgdGhpcy5pbnB1dHMgPSB0aGlzLmlucHV0cy5hZGQodGhpcy4kaW5wdXQyKTtcbiAgICAgIH1cbiAgICAgIGlzRGJsID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fc2V0SGFuZGxlUG9zKHRoaXMuJGhhbmRsZSwgdGhpcy5vcHRpb25zLmluaXRpYWxTdGFydCwgdHJ1ZSwgZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgX3RoaXMuX3NldEhhbmRsZVBvcyhfdGhpcy4kaGFuZGxlMiwgX3RoaXMub3B0aW9ucy5pbml0aWFsRW5kLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gdGhpcy4kaGFuZGxlLnRyaWdnZXJIYW5kbGVyKCdjbGljay56Zi5zbGlkZXInKTtcbiAgICAgIHRoaXMuX3NldEluaXRBdHRyKDEpO1xuICAgICAgdGhpcy5fZXZlbnRzKHRoaXMuJGhhbmRsZTIpO1xuICAgIH1cblxuICAgIGlmICghaXNEYmwpIHtcbiAgICAgIHRoaXMuX3NldEhhbmRsZVBvcyh0aGlzLiRoYW5kbGUsIHRoaXMub3B0aW9ucy5pbml0aWFsU3RhcnQsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgc2VsZWN0ZWQgaGFuZGxlIGFuZCBmaWxsIGJhci5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkaG5kbCAtIHRoZSBzZWxlY3RlZCBoYW5kbGUgdG8gbW92ZS5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGxvY2F0aW9uIC0gZmxvYXRpbmcgcG9pbnQgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCB2YWx1ZXMgb2YgdGhlIHNsaWRlciBiYXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gY2FsbGJhY2sgZnVuY3Rpb24gdG8gZmlyZSBvbiBjb21wbGV0aW9uLlxuICAgKiBAZmlyZXMgU2xpZGVyI21vdmVkXG4gICAqIEBmaXJlcyBTbGlkZXIjY2hhbmdlZFxuICAgKi9cbiAgX3NldEhhbmRsZVBvcygkaG5kbCwgbG9jYXRpb24sIG5vSW52ZXJ0LCBjYikge1xuICAvL21pZ2h0IG5lZWQgdG8gYWx0ZXIgdGhhdCBzbGlnaHRseSBmb3IgYmFycyB0aGF0IHdpbGwgaGF2ZSBvZGQgbnVtYmVyIHNlbGVjdGlvbnMuXG4gICAgbG9jYXRpb24gPSBwYXJzZUZsb2F0KGxvY2F0aW9uKTsvL29uIGlucHV0IGNoYW5nZSBldmVudHMsIGNvbnZlcnQgc3RyaW5nIHRvIG51bWJlci4uLmdydW1ibGUuXG5cbiAgICAvLyBwcmV2ZW50IHNsaWRlciBmcm9tIHJ1bm5pbmcgb3V0IG9mIGJvdW5kcywgaWYgdmFsdWUgZXhjZWVkcyB0aGUgbGltaXRzIHNldCB0aHJvdWdoIG9wdGlvbnMsIG92ZXJyaWRlIHRoZSB2YWx1ZSB0byBtaW4vbWF4XG4gICAgaWYgKGxvY2F0aW9uIDwgdGhpcy5vcHRpb25zLnN0YXJ0KSB7IGxvY2F0aW9uID0gdGhpcy5vcHRpb25zLnN0YXJ0OyB9XG4gICAgZWxzZSBpZiAobG9jYXRpb24gPiB0aGlzLm9wdGlvbnMuZW5kKSB7IGxvY2F0aW9uID0gdGhpcy5vcHRpb25zLmVuZDsgfVxuXG4gICAgdmFyIGlzRGJsID0gdGhpcy5vcHRpb25zLmRvdWJsZVNpZGVkO1xuXG4gICAgaWYgKGlzRGJsKSB7IC8vdGhpcyBibG9jayBpcyB0byBwcmV2ZW50IDIgaGFuZGxlcyBmcm9tIGNyb3NzaW5nIGVhY2hvdGhlci4gQ291bGQvc2hvdWxkIGJlIGltcHJvdmVkLlxuICAgICAgaWYgKHRoaXMuaGFuZGxlcy5pbmRleCgkaG5kbCkgPT09IDApIHtcbiAgICAgICAgdmFyIGgyVmFsID0gcGFyc2VGbG9hdCh0aGlzLiRoYW5kbGUyLmF0dHIoJ2FyaWEtdmFsdWVub3cnKSk7XG4gICAgICAgIGxvY2F0aW9uID0gbG9jYXRpb24gPj0gaDJWYWwgPyBoMlZhbCAtIHRoaXMub3B0aW9ucy5zdGVwIDogbG9jYXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaDFWYWwgPSBwYXJzZUZsb2F0KHRoaXMuJGhhbmRsZS5hdHRyKCdhcmlhLXZhbHVlbm93JykpO1xuICAgICAgICBsb2NhdGlvbiA9IGxvY2F0aW9uIDw9IGgxVmFsID8gaDFWYWwgKyB0aGlzLm9wdGlvbnMuc3RlcCA6IGxvY2F0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vdGhpcyBpcyBmb3Igc2luZ2xlLWhhbmRsZWQgdmVydGljYWwgc2xpZGVycywgaXQgYWRqdXN0cyB0aGUgdmFsdWUgdG8gYWNjb3VudCBmb3IgdGhlIHNsaWRlciBiZWluZyBcInVwc2lkZS1kb3duXCJcbiAgICAvL2ZvciBjbGljayBhbmQgZHJhZyBldmVudHMsIGl0J3Mgd2VpcmQgZHVlIHRvIHRoZSBzY2FsZSgtMSwgMSkgY3NzIHByb3BlcnR5XG4gICAgaWYgKHRoaXMub3B0aW9ucy52ZXJ0aWNhbCAmJiAhbm9JbnZlcnQpIHtcbiAgICAgIGxvY2F0aW9uID0gdGhpcy5vcHRpb25zLmVuZCAtIGxvY2F0aW9uO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgIHZlcnQgPSB0aGlzLm9wdGlvbnMudmVydGljYWwsXG4gICAgICAgIGhPclcgPSB2ZXJ0ID8gJ2hlaWdodCcgOiAnd2lkdGgnLFxuICAgICAgICBsT3JUID0gdmVydCA/ICd0b3AnIDogJ2xlZnQnLFxuICAgICAgICBoYW5kbGVEaW0gPSAkaG5kbFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtoT3JXXSxcbiAgICAgICAgZWxlbURpbSA9IHRoaXMuJGVsZW1lbnRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbaE9yV10sXG4gICAgICAgIC8vcGVyY2VudGFnZSBvZiBiYXIgbWluL21heCB2YWx1ZSBiYXNlZCBvbiBjbGljayBvciBkcmFnIHBvaW50XG4gICAgICAgIHBjdE9mQmFyID0gcGVyY2VudChsb2NhdGlvbiAtIHRoaXMub3B0aW9ucy5zdGFydCwgdGhpcy5vcHRpb25zLmVuZCAtIHRoaXMub3B0aW9ucy5zdGFydCkudG9GaXhlZCgyKSxcbiAgICAgICAgLy9udW1iZXIgb2YgYWN0dWFsIHBpeGVscyB0byBzaGlmdCB0aGUgaGFuZGxlLCBiYXNlZCBvbiB0aGUgcGVyY2VudGFnZSBvYnRhaW5lZCBhYm92ZVxuICAgICAgICBweFRvTW92ZSA9IChlbGVtRGltIC0gaGFuZGxlRGltKSAqIHBjdE9mQmFyLFxuICAgICAgICAvL3BlcmNlbnRhZ2Ugb2YgYmFyIHRvIHNoaWZ0IHRoZSBoYW5kbGVcbiAgICAgICAgbW92ZW1lbnQgPSAocGVyY2VudChweFRvTW92ZSwgZWxlbURpbSkgKiAxMDApLnRvRml4ZWQodGhpcy5vcHRpb25zLmRlY2ltYWwpO1xuICAgICAgICAvL2ZpeGluZyB0aGUgZGVjaW1hbCB2YWx1ZSBmb3IgdGhlIGxvY2F0aW9uIG51bWJlciwgaXMgcGFzc2VkIHRvIG90aGVyIG1ldGhvZHMgYXMgYSBmaXhlZCBmbG9hdGluZy1wb2ludCB2YWx1ZVxuICAgICAgICBsb2NhdGlvbiA9IHBhcnNlRmxvYXQobG9jYXRpb24udG9GaXhlZCh0aGlzLm9wdGlvbnMuZGVjaW1hbCkpO1xuICAgICAgICAvLyBkZWNsYXJlIGVtcHR5IG9iamVjdCBmb3IgY3NzIGFkanVzdG1lbnRzLCBvbmx5IHVzZWQgd2l0aCAyIGhhbmRsZWQtc2xpZGVyc1xuICAgIHZhciBjc3MgPSB7fTtcblxuICAgIHRoaXMuX3NldFZhbHVlcygkaG5kbCwgbG9jYXRpb24pO1xuXG4gICAgLy8gVE9ETyB1cGRhdGUgdG8gY2FsY3VsYXRlIGJhc2VkIG9uIHZhbHVlcyBzZXQgdG8gcmVzcGVjdGl2ZSBpbnB1dHM/P1xuICAgIGlmIChpc0RibCkge1xuICAgICAgdmFyIGlzTGVmdEhuZGwgPSB0aGlzLmhhbmRsZXMuaW5kZXgoJGhuZGwpID09PSAwLFxuICAgICAgICAgIC8vZW1wdHkgdmFyaWFibGUsIHdpbGwgYmUgdXNlZCBmb3IgbWluLWhlaWdodC93aWR0aCBmb3IgZmlsbCBiYXJcbiAgICAgICAgICBkaW0sXG4gICAgICAgICAgLy9wZXJjZW50YWdlIHcvaCBvZiB0aGUgaGFuZGxlIGNvbXBhcmVkIHRvIHRoZSBzbGlkZXIgYmFyXG4gICAgICAgICAgaGFuZGxlUGN0ID0gIH5+KHBlcmNlbnQoaGFuZGxlRGltLCBlbGVtRGltKSAqIDEwMCk7XG4gICAgICAvL2lmIGxlZnQgaGFuZGxlLCB0aGUgbWF0aCBpcyBzbGlnaHRseSBkaWZmZXJlbnQgdGhhbiBpZiBpdCdzIHRoZSByaWdodCBoYW5kbGUsIGFuZCB0aGUgbGVmdC90b3AgcHJvcGVydHkgbmVlZHMgdG8gYmUgY2hhbmdlZCBmb3IgdGhlIGZpbGwgYmFyXG4gICAgICBpZiAoaXNMZWZ0SG5kbCkge1xuICAgICAgICAvL2xlZnQgb3IgdG9wIHBlcmNlbnRhZ2UgdmFsdWUgdG8gYXBwbHkgdG8gdGhlIGZpbGwgYmFyLlxuICAgICAgICBjc3NbbE9yVF0gPSBgJHttb3ZlbWVudH0lYDtcbiAgICAgICAgLy9jYWxjdWxhdGUgdGhlIG5ldyBtaW4taGVpZ2h0L3dpZHRoIGZvciB0aGUgZmlsbCBiYXIuXG4gICAgICAgIGRpbSA9IHBhcnNlRmxvYXQodGhpcy4kaGFuZGxlMlswXS5zdHlsZVtsT3JUXSkgLSBtb3ZlbWVudCArIGhhbmRsZVBjdDtcbiAgICAgICAgLy90aGlzIGNhbGxiYWNrIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGVycm9ycyBhbmQgYWxsb3cgdGhlIHByb3BlciBwbGFjZW1lbnQgYW5kIGluaXRpYWxpemF0aW9uIG9mIGEgMi1oYW5kbGVkIHNsaWRlclxuICAgICAgICAvL3BsdXMsIGl0IG1lYW5zIHdlIGRvbid0IGNhcmUgaWYgJ2RpbScgaXNOYU4gb24gaW5pdCwgaXQgd29uJ3QgYmUgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgaWYgKGNiICYmIHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykgeyBjYigpOyB9Ly90aGlzIGlzIG9ubHkgbmVlZGVkIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgMiBoYW5kbGVkIHNsaWRlcnNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vanVzdCBjYWNoaW5nIHRoZSB2YWx1ZSBvZiB0aGUgbGVmdC9ib3R0b20gaGFuZGxlJ3MgbGVmdC90b3AgcHJvcGVydHlcbiAgICAgICAgdmFyIGhhbmRsZVBvcyA9IHBhcnNlRmxvYXQodGhpcy4kaGFuZGxlWzBdLnN0eWxlW2xPclRdKTtcbiAgICAgICAgLy9jYWxjdWxhdGUgdGhlIG5ldyBtaW4taGVpZ2h0L3dpZHRoIGZvciB0aGUgZmlsbCBiYXIuIFVzZSBpc05hTiB0byBwcmV2ZW50IGZhbHNlIHBvc2l0aXZlcyBmb3IgbnVtYmVycyA8PSAwXG4gICAgICAgIC8vYmFzZWQgb24gdGhlIHBlcmNlbnRhZ2Ugb2YgbW92ZW1lbnQgb2YgdGhlIGhhbmRsZSBiZWluZyBtYW5pcHVsYXRlZCwgbGVzcyB0aGUgb3Bwb3NpbmcgaGFuZGxlJ3MgbGVmdC90b3AgcG9zaXRpb24sIHBsdXMgdGhlIHBlcmNlbnRhZ2Ugdy9oIG9mIHRoZSBoYW5kbGUgaXRzZWxmXG4gICAgICAgIGRpbSA9IG1vdmVtZW50IC0gKGlzTmFOKGhhbmRsZVBvcykgPyB0aGlzLm9wdGlvbnMuaW5pdGlhbFN0YXJ0LygodGhpcy5vcHRpb25zLmVuZC10aGlzLm9wdGlvbnMuc3RhcnQpLzEwMCkgOiBoYW5kbGVQb3MpICsgaGFuZGxlUGN0O1xuICAgICAgfVxuICAgICAgLy8gYXNzaWduIHRoZSBtaW4taGVpZ2h0L3dpZHRoIHRvIG91ciBjc3Mgb2JqZWN0XG4gICAgICBjc3NbYG1pbi0ke2hPcld9YF0gPSBgJHtkaW19JWA7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC5vbmUoJ2ZpbmlzaGVkLnpmLmFuaW1hdGUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGhhbmRsZSBpcyBkb25lIG1vdmluZy5cbiAgICAgICAgICAgICAgICAgICAgICogQGV2ZW50IFNsaWRlciNtb3ZlZFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuJGVsZW1lbnQudHJpZ2dlcignbW92ZWQuemYuc2xpZGVyJywgWyRobmRsXSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAvL2JlY2F1c2Ugd2UgZG9uJ3Qga25vdyBleGFjdGx5IGhvdyB0aGUgaGFuZGxlIHdpbGwgYmUgbW92ZWQsIGNoZWNrIHRoZSBhbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byBtb3ZlLlxuICAgIHZhciBtb3ZlVGltZSA9IHRoaXMuJGVsZW1lbnQuZGF0YSgnZHJhZ2dpbmcnKSA/IDEwMDAvNjAgOiB0aGlzLm9wdGlvbnMubW92ZVRpbWU7XG5cbiAgICBGb3VuZGF0aW9uLk1vdmUobW92ZVRpbWUsICRobmRsLCBmdW5jdGlvbigpIHtcbiAgICAgIC8vYWRqdXN0aW5nIHRoZSBsZWZ0L3RvcCBwcm9wZXJ0eSBvZiB0aGUgaGFuZGxlLCBiYXNlZCBvbiB0aGUgcGVyY2VudGFnZSBjYWxjdWxhdGVkIGFib3ZlXG4gICAgICAkaG5kbC5jc3MobE9yVCwgYCR7bW92ZW1lbnR9JWApO1xuXG4gICAgICBpZiAoIV90aGlzLm9wdGlvbnMuZG91YmxlU2lkZWQpIHtcbiAgICAgICAgLy9pZiBzaW5nbGUtaGFuZGxlZCwgYSBzaW1wbGUgbWV0aG9kIHRvIGV4cGFuZCB0aGUgZmlsbCBiYXJcbiAgICAgICAgX3RoaXMuJGZpbGwuY3NzKGhPclcsIGAke3BjdE9mQmFyICogMTAwfSVgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vb3RoZXJ3aXNlLCB1c2UgdGhlIGNzcyBvYmplY3Qgd2UgY3JlYXRlZCBhYm92ZVxuICAgICAgICBfdGhpcy4kZmlsbC5jc3MoY3NzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIHZhbHVlIGhhcyBub3QgYmVlbiBjaGFuZ2UgZm9yIGEgZ2l2ZW4gdGltZS5cbiAgICAgKiBAZXZlbnQgU2xpZGVyI2NoYW5nZWRcbiAgICAgKi8gICAgXG4gICAgY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVvdXQpO1xuICAgIF90aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICBfdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjaGFuZ2VkLnpmLnNsaWRlcicsIFskaG5kbF0pO1xuICAgIH0sIF90aGlzLm9wdGlvbnMuY2hhbmdlZERlbGF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbml0aWFsIGF0dHJpYnV0ZSBmb3IgdGhlIHNsaWRlciBlbGVtZW50LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkeCAtIGluZGV4IG9mIHRoZSBjdXJyZW50IGhhbmRsZS9pbnB1dCB0byB1c2UuXG4gICAqL1xuICBfc2V0SW5pdEF0dHIoaWR4KSB7XG4gICAgdmFyIGlkID0gdGhpcy5pbnB1dHMuZXEoaWR4KS5hdHRyKCdpZCcpIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ3NsaWRlcicpO1xuICAgIHRoaXMuaW5wdXRzLmVxKGlkeCkuYXR0cih7XG4gICAgICAnaWQnOiBpZCxcbiAgICAgICdtYXgnOiB0aGlzLm9wdGlvbnMuZW5kLFxuICAgICAgJ21pbic6IHRoaXMub3B0aW9ucy5zdGFydCxcbiAgICAgICdzdGVwJzogdGhpcy5vcHRpb25zLnN0ZXBcbiAgICB9KTtcbiAgICB0aGlzLmhhbmRsZXMuZXEoaWR4KS5hdHRyKHtcbiAgICAgICdyb2xlJzogJ3NsaWRlcicsXG4gICAgICAnYXJpYS1jb250cm9scyc6IGlkLFxuICAgICAgJ2FyaWEtdmFsdWVtYXgnOiB0aGlzLm9wdGlvbnMuZW5kLFxuICAgICAgJ2FyaWEtdmFsdWVtaW4nOiB0aGlzLm9wdGlvbnMuc3RhcnQsXG4gICAgICAnYXJpYS12YWx1ZW5vdyc6IGlkeCA9PT0gMCA/IHRoaXMub3B0aW9ucy5pbml0aWFsU3RhcnQgOiB0aGlzLm9wdGlvbnMuaW5pdGlhbEVuZCxcbiAgICAgICdhcmlhLW9yaWVudGF0aW9uJzogdGhpcy5vcHRpb25zLnZlcnRpY2FsID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJyxcbiAgICAgICd0YWJpbmRleCc6IDBcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbnB1dCBhbmQgYGFyaWEtdmFsdWVub3dgIHZhbHVlcyBmb3IgdGhlIHNsaWRlciBlbGVtZW50LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRoYW5kbGUgLSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGhhbmRsZS5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbCAtIGZsb2F0aW5nIHBvaW50IG9mIHRoZSBuZXcgdmFsdWUuXG4gICAqL1xuICBfc2V0VmFsdWVzKCRoYW5kbGUsIHZhbCkge1xuICAgIHZhciBpZHggPSB0aGlzLm9wdGlvbnMuZG91YmxlU2lkZWQgPyB0aGlzLmhhbmRsZXMuaW5kZXgoJGhhbmRsZSkgOiAwO1xuICAgIHRoaXMuaW5wdXRzLmVxKGlkeCkudmFsKHZhbCk7XG4gICAgJGhhbmRsZS5hdHRyKCdhcmlhLXZhbHVlbm93JywgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGV2ZW50cyBvbiB0aGUgc2xpZGVyIGVsZW1lbnQuXG4gICAqIENhbGN1bGF0ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBoYW5kbGUuXG4gICAqIElmIHRoZXJlIGFyZSB0d28gaGFuZGxlcyBhbmQgdGhlIGJhciB3YXMgY2xpY2tlZCwgaXQgZGV0ZXJtaW5lcyB3aGljaCBoYW5kbGUgdG8gbW92ZS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlIC0gdGhlIGBldmVudGAgb2JqZWN0IHBhc3NlZCBmcm9tIHRoZSBsaXN0ZW5lci5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICRoYW5kbGUgLSB0aGUgY3VycmVudCBoYW5kbGUgdG8gY2FsY3VsYXRlIGZvciwgaWYgc2VsZWN0ZWQuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWwgLSBmbG9hdGluZyBwb2ludCBudW1iZXIgZm9yIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNsaWRlci5cbiAgICogVE9ETyBjbGVhbiB0aGlzIHVwLCB0aGVyZSdzIGEgbG90IG9mIHJlcGVhdGVkIGNvZGUgYmV0d2VlbiB0aGlzIGFuZCB0aGUgX3NldEhhbmRsZVBvcyBmbi5cbiAgICovXG4gIF9oYW5kbGVFdmVudChlLCAkaGFuZGxlLCB2YWwpIHtcbiAgICB2YXIgdmFsdWUsIGhhc1ZhbDtcbiAgICBpZiAoIXZhbCkgey8vY2xpY2sgb3IgZHJhZyBldmVudHNcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgICAgdmVydGljYWwgPSB0aGlzLm9wdGlvbnMudmVydGljYWwsXG4gICAgICAgICAgcGFyYW0gPSB2ZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJyxcbiAgICAgICAgICBkaXJlY3Rpb24gPSB2ZXJ0aWNhbCA/ICd0b3AnIDogJ2xlZnQnLFxuICAgICAgICAgIHBhZ2VYWSA9IHZlcnRpY2FsID8gZS5wYWdlWSA6IGUucGFnZVgsXG4gICAgICAgICAgaGFsZk9mSGFuZGxlID0gdGhpcy4kaGFuZGxlWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3BhcmFtXSAvIDIsXG4gICAgICAgICAgYmFyRGltID0gdGhpcy4kZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtwYXJhbV0sXG4gICAgICAgICAgYmFyT2Zmc2V0ID0gKHRoaXMuJGVsZW1lbnQub2Zmc2V0KClbZGlyZWN0aW9uXSAtICBwYWdlWFkpLFxuICAgICAgICAgIC8vaWYgdGhlIGN1cnNvciBwb3NpdGlvbiBpcyBsZXNzIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBlbGVtZW50cyBib3VuZGluZyBjb29yZGluYXRlcywgc2V0IGNvb3JkaW5hdGVzIHdpdGhpbiB0aG9zZSBib3VuZHNcbiAgICAgICAgICBiYXJYWSA9IGJhck9mZnNldCA+IDAgPyAtaGFsZk9mSGFuZGxlIDogKGJhck9mZnNldCAtIGhhbGZPZkhhbmRsZSkgPCAtYmFyRGltID8gYmFyRGltIDogTWF0aC5hYnMoYmFyT2Zmc2V0KSxcbiAgICAgICAgICBvZmZzZXRQY3QgPSBwZXJjZW50KGJhclhZLCBiYXJEaW0pO1xuICAgICAgdmFsdWUgPSAodGhpcy5vcHRpb25zLmVuZCAtIHRoaXMub3B0aW9ucy5zdGFydCkgKiBvZmZzZXRQY3QgKyB0aGlzLm9wdGlvbnMuc3RhcnQ7XG5cbiAgICAgIC8vIHR1cm4gZXZlcnl0aGluZyBhcm91bmQgZm9yIFJUTCwgeWF5IG1hdGghXG4gICAgICBpZiAoRm91bmRhdGlvbi5ydGwoKSAmJiAhdGhpcy5vcHRpb25zLnZlcnRpY2FsKSB7dmFsdWUgPSB0aGlzLm9wdGlvbnMuZW5kIC0gdmFsdWU7fVxuXG4gICAgICB2YWx1ZSA9IF90aGlzLl9hZGp1c3RWYWx1ZShudWxsLCB2YWx1ZSk7XG4gICAgICAvL2Jvb2xlYW4gZmxhZyBmb3IgdGhlIHNldEhhbmRsZVBvcyBmbiwgc3BlY2lmaWNhbGx5IGZvciB2ZXJ0aWNhbCBzbGlkZXJzXG4gICAgICBoYXNWYWwgPSBmYWxzZTtcblxuICAgICAgaWYgKCEkaGFuZGxlKSB7Ly9maWd1cmUgb3V0IHdoaWNoIGhhbmRsZSBpdCBpcywgcGFzcyBpdCB0byB0aGUgbmV4dCBmdW5jdGlvbi5cbiAgICAgICAgdmFyIGZpcnN0SG5kbFBvcyA9IGFic1Bvc2l0aW9uKHRoaXMuJGhhbmRsZSwgZGlyZWN0aW9uLCBiYXJYWSwgcGFyYW0pLFxuICAgICAgICAgICAgc2VjbmRIbmRsUG9zID0gYWJzUG9zaXRpb24odGhpcy4kaGFuZGxlMiwgZGlyZWN0aW9uLCBiYXJYWSwgcGFyYW0pO1xuICAgICAgICAgICAgJGhhbmRsZSA9IGZpcnN0SG5kbFBvcyA8PSBzZWNuZEhuZGxQb3MgPyB0aGlzLiRoYW5kbGUgOiB0aGlzLiRoYW5kbGUyO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHsvL2NoYW5nZSBldmVudCBvbiBpbnB1dFxuICAgICAgdmFsdWUgPSB0aGlzLl9hZGp1c3RWYWx1ZShudWxsLCB2YWwpO1xuICAgICAgaGFzVmFsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRIYW5kbGVQb3MoJGhhbmRsZSwgdmFsdWUsIGhhc1ZhbCk7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0ZXMgdmFsdWUgZm9yIGhhbmRsZSBpbiByZWdhcmQgdG8gc3RlcCB2YWx1ZS4gcmV0dXJucyBhZGp1c3RlZCB2YWx1ZVxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRoYW5kbGUgLSB0aGUgc2VsZWN0ZWQgaGFuZGxlLlxuICAgKiBAcGFyYW0ge051bWJlcn0gdmFsdWUgLSB2YWx1ZSB0byBhZGp1c3QuIHVzZWQgaWYgJGhhbmRsZSBpcyBmYWxzeVxuICAgKi9cbiAgX2FkanVzdFZhbHVlKCRoYW5kbGUsIHZhbHVlKSB7XG4gICAgdmFyIHZhbCxcbiAgICAgIHN0ZXAgPSB0aGlzLm9wdGlvbnMuc3RlcCxcbiAgICAgIGRpdiA9IHBhcnNlRmxvYXQoc3RlcC8yKSxcbiAgICAgIGxlZnQsIHByZXZfdmFsLCBuZXh0X3ZhbDtcbiAgICBpZiAoISEkaGFuZGxlKSB7XG4gICAgICB2YWwgPSBwYXJzZUZsb2F0KCRoYW5kbGUuYXR0cignYXJpYS12YWx1ZW5vdycpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YWwgPSB2YWx1ZTtcbiAgICB9XG4gICAgbGVmdCA9IHZhbCAlIHN0ZXA7XG4gICAgcHJldl92YWwgPSB2YWwgLSBsZWZ0O1xuICAgIG5leHRfdmFsID0gcHJldl92YWwgKyBzdGVwO1xuICAgIGlmIChsZWZ0ID09PSAwKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICB2YWwgPSB2YWwgPj0gcHJldl92YWwgKyBkaXYgPyBuZXh0X3ZhbCA6IHByZXZfdmFsO1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIHNsaWRlciBlbGVtZW50cy5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkaGFuZGxlIC0gdGhlIGN1cnJlbnQgaGFuZGxlIHRvIGFwcGx5IGxpc3RlbmVycyB0by5cbiAgICovXG4gIF9ldmVudHMoJGhhbmRsZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBjdXJIYW5kbGUsXG4gICAgICAgIHRpbWVyO1xuXG4gICAgICB0aGlzLmlucHV0cy5vZmYoJ2NoYW5nZS56Zi5zbGlkZXInKS5vbignY2hhbmdlLnpmLnNsaWRlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIGlkeCA9IF90aGlzLmlucHV0cy5pbmRleCgkKHRoaXMpKTtcbiAgICAgICAgX3RoaXMuX2hhbmRsZUV2ZW50KGUsIF90aGlzLmhhbmRsZXMuZXEoaWR4KSwgJCh0aGlzKS52YWwoKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbGlja1NlbGVjdCkge1xuICAgICAgICB0aGlzLiRlbGVtZW50Lm9mZignY2xpY2suemYuc2xpZGVyJykub24oJ2NsaWNrLnpmLnNsaWRlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuJGVsZW1lbnQuZGF0YSgnZHJhZ2dpbmcnKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgICAgICAgIGlmICghJChlLnRhcmdldCkuaXMoJ1tkYXRhLXNsaWRlci1oYW5kbGVdJykpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmRvdWJsZVNpZGVkKSB7XG4gICAgICAgICAgICAgIF90aGlzLl9oYW5kbGVFdmVudChlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF90aGlzLl9oYW5kbGVFdmVudChlLCBfdGhpcy4kaGFuZGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kcmFnZ2FibGUpIHtcbiAgICAgIHRoaXMuaGFuZGxlcy5hZGRUb3VjaCgpO1xuXG4gICAgICB2YXIgJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgICAkaGFuZGxlXG4gICAgICAgIC5vZmYoJ21vdXNlZG93bi56Zi5zbGlkZXInKVxuICAgICAgICAub24oJ21vdXNlZG93bi56Zi5zbGlkZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgJGhhbmRsZS5hZGRDbGFzcygnaXMtZHJhZ2dpbmcnKTtcbiAgICAgICAgICBfdGhpcy4kZmlsbC5hZGRDbGFzcygnaXMtZHJhZ2dpbmcnKTsvL1xuICAgICAgICAgIF90aGlzLiRlbGVtZW50LmRhdGEoJ2RyYWdnaW5nJywgdHJ1ZSk7XG5cbiAgICAgICAgICBjdXJIYW5kbGUgPSAkKGUuY3VycmVudFRhcmdldCk7XG5cbiAgICAgICAgICAkYm9keS5vbignbW91c2Vtb3ZlLnpmLnNsaWRlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXMuX2hhbmRsZUV2ZW50KGUsIGN1ckhhbmRsZSk7XG5cbiAgICAgICAgICB9KS5vbignbW91c2V1cC56Zi5zbGlkZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBfdGhpcy5faGFuZGxlRXZlbnQoZSwgY3VySGFuZGxlKTtcblxuICAgICAgICAgICAgJGhhbmRsZS5yZW1vdmVDbGFzcygnaXMtZHJhZ2dpbmcnKTtcbiAgICAgICAgICAgIF90aGlzLiRmaWxsLnJlbW92ZUNsYXNzKCdpcy1kcmFnZ2luZycpO1xuICAgICAgICAgICAgX3RoaXMuJGVsZW1lbnQuZGF0YSgnZHJhZ2dpbmcnLCBmYWxzZSk7XG5cbiAgICAgICAgICAgICRib2R5Lm9mZignbW91c2Vtb3ZlLnpmLnNsaWRlciBtb3VzZXVwLnpmLnNsaWRlcicpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgJGhhbmRsZS5vZmYoJ2tleWRvd24uemYuc2xpZGVyJykub24oJ2tleWRvd24uemYuc2xpZGVyJywgZnVuY3Rpb24oZSkge1xuICAgICAgdmFyIF8kaGFuZGxlID0gJCh0aGlzKSxcbiAgICAgICAgICBpZHggPSBfdGhpcy5vcHRpb25zLmRvdWJsZVNpZGVkID8gX3RoaXMuaGFuZGxlcy5pbmRleChfJGhhbmRsZSkgOiAwLFxuICAgICAgICAgIG9sZFZhbHVlID0gcGFyc2VGbG9hdChfdGhpcy5pbnB1dHMuZXEoaWR4KS52YWwoKSksXG4gICAgICAgICAgbmV3VmFsdWU7XG5cbiAgICAgIC8vIGhhbmRsZSBrZXlib2FyZCBldmVudCB3aXRoIGtleWJvYXJkIHV0aWxcbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQuaGFuZGxlS2V5KGUsICdTbGlkZXInLCB7XG4gICAgICAgIGRlY3JlYXNlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IG9sZFZhbHVlIC0gX3RoaXMub3B0aW9ucy5zdGVwO1xuICAgICAgICB9LFxuICAgICAgICBpbmNyZWFzZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBvbGRWYWx1ZSArIF90aGlzLm9wdGlvbnMuc3RlcDtcbiAgICAgICAgfSxcbiAgICAgICAgZGVjcmVhc2VfZmFzdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBvbGRWYWx1ZSAtIF90aGlzLm9wdGlvbnMuc3RlcCAqIDEwO1xuICAgICAgICB9LFxuICAgICAgICBpbmNyZWFzZV9mYXN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IG9sZFZhbHVlICsgX3RoaXMub3B0aW9ucy5zdGVwICogMTA7XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZWQ6IGZ1bmN0aW9uKCkgeyAvLyBvbmx5IHNldCBoYW5kbGUgcG9zIHdoZW4gZXZlbnQgd2FzIGhhbmRsZWQgc3BlY2lhbGx5XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIF90aGlzLl9zZXRIYW5kbGVQb3MoXyRoYW5kbGUsIG5ld1ZhbHVlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvKmlmIChuZXdWYWx1ZSkgeyAvLyBpZiBwcmVzc2VkIGtleSBoYXMgc3BlY2lhbCBmdW5jdGlvbiwgdXBkYXRlIHZhbHVlXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgX3RoaXMuX3NldEhhbmRsZVBvcyhfJGhhbmRsZSwgbmV3VmFsdWUpO1xuICAgICAgfSovXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIHNsaWRlciBwbHVnaW4uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuaGFuZGxlcy5vZmYoJy56Zi5zbGlkZXInKTtcbiAgICB0aGlzLmlucHV0cy5vZmYoJy56Zi5zbGlkZXInKTtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZignLnpmLnNsaWRlcicpO1xuXG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cblNsaWRlci5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIE1pbmltdW0gdmFsdWUgZm9yIHRoZSBzbGlkZXIgc2NhbGUuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMFxuICAgKi9cbiAgc3RhcnQ6IDAsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHZhbHVlIGZvciB0aGUgc2xpZGVyIHNjYWxlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDEwMFxuICAgKi9cbiAgZW5kOiAxMDAsXG4gIC8qKlxuICAgKiBNaW5pbXVtIHZhbHVlIGNoYW5nZSBwZXIgY2hhbmdlIGV2ZW50LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDFcbiAgICovXG4gIHN0ZXA6IDEsXG4gIC8qKlxuICAgKiBWYWx1ZSBhdCB3aGljaCB0aGUgaGFuZGxlL2lucHV0ICoobGVmdCBoYW5kbGUvZmlyc3QgaW5wdXQpKiBzaG91bGQgYmUgc2V0IHRvIG9uIGluaXRpYWxpemF0aW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDBcbiAgICovXG4gIGluaXRpYWxTdGFydDogMCxcbiAgLyoqXG4gICAqIFZhbHVlIGF0IHdoaWNoIHRoZSByaWdodCBoYW5kbGUvc2Vjb25kIGlucHV0IHNob3VsZCBiZSBzZXQgdG8gb24gaW5pdGlhbGl6YXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMTAwXG4gICAqL1xuICBpbml0aWFsRW5kOiAxMDAsXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIGlucHV0IHRvIGJlIGxvY2F0ZWQgb3V0c2lkZSB0aGUgY29udGFpbmVyIGFuZCB2aXNpYmxlLiBTZXQgdG8gYnkgdGhlIEpTXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIGJpbmRpbmc6IGZhbHNlLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSB1c2VyIHRvIGNsaWNrL3RhcCBvbiB0aGUgc2xpZGVyIGJhciB0byBzZWxlY3QgYSB2YWx1ZS5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSB0cnVlXG4gICAqL1xuICBjbGlja1NlbGVjdDogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGFuZCB1c2UgdGhlIGB2ZXJ0aWNhbGAgY2xhc3MgdG8gY2hhbmdlIGFsaWdubWVudCB0byB2ZXJ0aWNhbC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgdmVydGljYWw6IGZhbHNlLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSB1c2VyIHRvIGRyYWcgdGhlIHNsaWRlciBoYW5kbGUocykgdG8gc2VsZWN0IGEgdmFsdWUuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgdHJ1ZVxuICAgKi9cbiAgZHJhZ2dhYmxlOiB0cnVlLFxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHNsaWRlciBhbmQgcHJldmVudHMgZXZlbnQgbGlzdGVuZXJzIGZyb20gYmVpbmcgYXBwbGllZC4gRG91YmxlIGNoZWNrZWQgYnkgSlMgd2l0aCBgZGlzYWJsZWRDbGFzc2AuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgdXNlIG9mIHR3byBoYW5kbGVzLiBEb3VibGUgY2hlY2tlZCBieSB0aGUgSlMuIENoYW5nZXMgc29tZSBsb2dpYyBoYW5kbGluZy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgZG91YmxlU2lkZWQ6IGZhbHNlLFxuICAvKipcbiAgICogUG90ZW50aWFsIGZ1dHVyZSBmZWF0dXJlLlxuICAgKi9cbiAgLy8gc3RlcHM6IDEwMCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0aGUgcGx1Z2luIHNob3VsZCBnbyB0byBmb3IgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDJcbiAgICovXG4gIGRlY2ltYWw6IDIsXG4gIC8qKlxuICAgKiBUaW1lIGRlbGF5IGZvciBkcmFnZ2VkIGVsZW1lbnRzLlxuICAgKi9cbiAgLy8gZHJhZ0RlbGF5OiAwLFxuICAvKipcbiAgICogVGltZSwgaW4gbXMsIHRvIGFuaW1hdGUgdGhlIG1vdmVtZW50IG9mIGEgc2xpZGVyIGhhbmRsZSBpZiB1c2VyIGNsaWNrcy90YXBzIG9uIHRoZSBiYXIuIE5lZWRzIHRvIGJlIG1hbnVhbGx5IHNldCBpZiB1cGRhdGluZyB0aGUgdHJhbnNpdGlvbiB0aW1lIGluIHRoZSBTYXNzIHNldHRpbmdzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDIwMFxuICAgKi9cbiAgbW92ZVRpbWU6IDIwMCwvL3VwZGF0ZSB0aGlzIGlmIGNoYW5naW5nIHRoZSB0cmFuc2l0aW9uIHRpbWUgaW4gdGhlIHNhc3NcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gZGlzYWJsZWQgc2xpZGVycy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnZGlzYWJsZWQnXG4gICAqL1xuICBkaXNhYmxlZENsYXNzOiAnZGlzYWJsZWQnLFxuICAvKipcbiAgICogV2lsbCBpbnZlcnQgdGhlIGRlZmF1bHQgbGF5b3V0IGZvciBhIHZlcnRpY2FsPHNwYW4gZGF0YS10b29sdGlwIHRpdGxlPVwid2hvIHdvdWxkIGRvIHRoaXM/Pz9cIj4gPC9zcGFuPnNsaWRlci5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgaW52ZXJ0VmVydGljYWw6IGZhbHNlLFxuICAvKipcbiAgICogTWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgYGNoYW5nZWQuemYtc2xpZGVyYCBldmVudCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgdmFsdWUgY2hhbmdlLiBcbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSA1MDBcbiAgICovXG4gIGNoYW5nZWREZWxheTogNTAwXG59O1xuXG5mdW5jdGlvbiBwZXJjZW50KGZyYWMsIG51bSkge1xuICByZXR1cm4gKGZyYWMgLyBudW0pO1xufVxuZnVuY3Rpb24gYWJzUG9zaXRpb24oJGhhbmRsZSwgZGlyLCBjbGlja1BvcywgcGFyYW0pIHtcbiAgcmV0dXJuIE1hdGguYWJzKCgkaGFuZGxlLnBvc2l0aW9uKClbZGlyXSArICgkaGFuZGxlW3BhcmFtXSgpIC8gMikpIC0gY2xpY2tQb3MpO1xufVxuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oU2xpZGVyLCAnU2xpZGVyJyk7XG5cbn0oalF1ZXJ5KTtcblxuLy8qKioqKioqKip0aGlzIGlzIGluIGNhc2Ugd2UgZ28gdG8gc3RhdGljLCBhYnNvbHV0ZSBwb3NpdGlvbnMgaW5zdGVhZCBvZiBkeW5hbWljIHBvc2l0aW9uaW5nKioqKioqKipcbi8vIHRoaXMuc2V0U3RlcHMoZnVuY3Rpb24oKSB7XG4vLyAgIF90aGlzLl9ldmVudHMoKTtcbi8vICAgdmFyIGluaXRTdGFydCA9IF90aGlzLm9wdGlvbnMucG9zaXRpb25zW190aGlzLm9wdGlvbnMuaW5pdGlhbFN0YXJ0IC0gMV0gfHwgbnVsbDtcbi8vICAgdmFyIGluaXRFbmQgPSBfdGhpcy5vcHRpb25zLmluaXRpYWxFbmQgPyBfdGhpcy5vcHRpb25zLnBvc2l0aW9uW190aGlzLm9wdGlvbnMuaW5pdGlhbEVuZCAtIDFdIDogbnVsbDtcbi8vICAgaWYgKGluaXRTdGFydCB8fCBpbml0RW5kKSB7XG4vLyAgICAgX3RoaXMuX2hhbmRsZUV2ZW50KGluaXRTdGFydCwgaW5pdEVuZCk7XG4vLyAgIH1cbi8vIH0pO1xuXG4vLyoqKioqKioqKioqdGhlIG90aGVyIHBhcnQgb2YgYWJzb2x1dGUgcG9zaXRpb25zKioqKioqKioqKioqKlxuLy8gU2xpZGVyLnByb3RvdHlwZS5zZXRTdGVwcyA9IGZ1bmN0aW9uKGNiKSB7XG4vLyAgIHZhciBwb3NDaGFuZ2UgPSB0aGlzLiRlbGVtZW50Lm91dGVyV2lkdGgoKSAvIHRoaXMub3B0aW9ucy5zdGVwcztcbi8vICAgdmFyIGNvdW50ZXIgPSAwXG4vLyAgIHdoaWxlKGNvdW50ZXIgPCB0aGlzLm9wdGlvbnMuc3RlcHMpIHtcbi8vICAgICBpZiAoY291bnRlcikge1xuLy8gICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5wdXNoKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbY291bnRlciAtIDFdICsgcG9zQ2hhbmdlKTtcbi8vICAgICB9IGVsc2Uge1xuLy8gICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5wdXNoKHBvc0NoYW5nZSk7XG4vLyAgICAgfVxuLy8gICAgIGNvdW50ZXIrKztcbi8vICAgfVxuLy8gICBjYigpO1xuLy8gfTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBTdGlja3kgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnN0aWNreVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tZWRpYVF1ZXJ5XG4gKi9cblxuY2xhc3MgU3RpY2t5IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSBzdGlja3kgdGhpbmcuXG4gICAqIEBjbGFzc1xuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBzdGlja3kuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBvYmplY3QgcGFzc2VkIHdoZW4gY3JlYXRpbmcgdGhlIGVsZW1lbnQgcHJvZ3JhbW1hdGljYWxseS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgU3RpY2t5LmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdTdGlja3knKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgc3RpY2t5IGVsZW1lbnQgYnkgYWRkaW5nIGNsYXNzZXMsIGdldHRpbmcvc2V0dGluZyBkaW1lbnNpb25zLCBicmVha3BvaW50cyBhbmQgYXR0cmlidXRlc1xuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciAkcGFyZW50ID0gdGhpcy4kZWxlbWVudC5wYXJlbnQoJ1tkYXRhLXN0aWNreS1jb250YWluZXJdJyksXG4gICAgICAgIGlkID0gdGhpcy4kZWxlbWVudFswXS5pZCB8fCBGb3VuZGF0aW9uLkdldFlvRGlnaXRzKDYsICdzdGlja3knKSxcbiAgICAgICAgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKCEkcGFyZW50Lmxlbmd0aCkge1xuICAgICAgdGhpcy53YXNXcmFwcGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy4kY29udGFpbmVyID0gJHBhcmVudC5sZW5ndGggPyAkcGFyZW50IDogJCh0aGlzLm9wdGlvbnMuY29udGFpbmVyKS53cmFwSW5uZXIodGhpcy4kZWxlbWVudCk7XG4gICAgdGhpcy4kY29udGFpbmVyLmFkZENsYXNzKHRoaXMub3B0aW9ucy5jb250YWluZXJDbGFzcyk7XG5cbiAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5zdGlja3lDbGFzcylcbiAgICAgICAgICAgICAgICAgLmF0dHIoeydkYXRhLXJlc2l6ZSc6IGlkfSk7XG5cbiAgICB0aGlzLnNjcm9sbENvdW50ID0gdGhpcy5vcHRpb25zLmNoZWNrRXZlcnk7XG4gICAgdGhpcy5pc1N0dWNrID0gZmFsc2U7XG4gICAgJCh3aW5kb3cpLm9uZSgnbG9hZC56Zi5zdGlja3knLCBmdW5jdGlvbigpe1xuICAgICAgaWYoX3RoaXMub3B0aW9ucy5hbmNob3IgIT09ICcnKXtcbiAgICAgICAgX3RoaXMuJGFuY2hvciA9ICQoJyMnICsgX3RoaXMub3B0aW9ucy5hbmNob3IpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIF90aGlzLl9wYXJzZVBvaW50cygpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5fc2V0U2l6ZXMoZnVuY3Rpb24oKXtcbiAgICAgICAgX3RoaXMuX2NhbGMoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fZXZlbnRzKGlkLnNwbGl0KCctJykucmV2ZXJzZSgpLmpvaW4oJy0nKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdXNpbmcgbXVsdGlwbGUgZWxlbWVudHMgYXMgYW5jaG9ycywgY2FsY3VsYXRlcyB0aGUgdG9wIGFuZCBib3R0b20gcGl4ZWwgdmFsdWVzIHRoZSBzdGlja3kgdGhpbmcgc2hvdWxkIHN0aWNrIGFuZCB1bnN0aWNrIG9uLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wYXJzZVBvaW50cygpIHtcbiAgICB2YXIgdG9wID0gdGhpcy5vcHRpb25zLnRvcEFuY2hvcixcbiAgICAgICAgYnRtID0gdGhpcy5vcHRpb25zLmJ0bUFuY2hvcixcbiAgICAgICAgcHRzID0gW3RvcCwgYnRtXSxcbiAgICAgICAgYnJlYWtzID0ge307XG4gICAgaWYgKHRvcCAmJiBidG0pIHtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHB0cy5sZW5ndGg7IGkgPCBsZW4gJiYgcHRzW2ldOyBpKyspIHtcbiAgICAgICAgdmFyIHB0O1xuICAgICAgICBpZiAodHlwZW9mIHB0c1tpXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBwdCA9IHB0c1tpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcGxhY2UgPSBwdHNbaV0uc3BsaXQoJzonKSxcbiAgICAgICAgICAgICAgYW5jaG9yID0gJChgIyR7cGxhY2VbMF19YCk7XG5cbiAgICAgICAgICBwdCA9IGFuY2hvci5vZmZzZXQoKS50b3A7XG4gICAgICAgICAgaWYgKHBsYWNlWzFdICYmIHBsYWNlWzFdLnRvTG93ZXJDYXNlKCkgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICBwdCArPSBhbmNob3JbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha3NbaV0gPSBwdDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWtzID0gezA6IDEsIDE6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHR9O1xuICAgIH1cblxuICAgIHRoaXMucG9pbnRzID0gYnJlYWtzO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgc2Nyb2xsaW5nIGVsZW1lbnQuXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBpZCAtIHBzdWVkby1yYW5kb20gaWQgZm9yIHVuaXF1ZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBfZXZlbnRzKGlkKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgc2Nyb2xsTGlzdGVuZXIgPSB0aGlzLnNjcm9sbExpc3RlbmVyID0gYHNjcm9sbC56Zi4ke2lkfWA7XG4gICAgaWYgKHRoaXMuaXNPbikgeyByZXR1cm47IH1cbiAgICBpZiAodGhpcy5jYW5TdGljaykge1xuICAgICAgdGhpcy5pc09uID0gdHJ1ZTtcbiAgICAgICQod2luZG93KS5vZmYoc2Nyb2xsTGlzdGVuZXIpXG4gICAgICAgICAgICAgICAub24oc2Nyb2xsTGlzdGVuZXIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgaWYgKF90aGlzLnNjcm9sbENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgX3RoaXMuc2Nyb2xsQ291bnQgPSBfdGhpcy5vcHRpb25zLmNoZWNrRXZlcnk7XG4gICAgICAgICAgICAgICAgICAgX3RoaXMuX3NldFNpemVzKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2NhbGMoZmFsc2UsIHdpbmRvdy5wYWdlWU9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgX3RoaXMuc2Nyb2xsQ291bnQtLTtcbiAgICAgICAgICAgICAgICAgICBfdGhpcy5fY2FsYyhmYWxzZSwgd2luZG93LnBhZ2VZT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50Lm9mZigncmVzaXplbWUuemYudHJpZ2dlcicpXG4gICAgICAgICAgICAgICAgIC5vbigncmVzaXplbWUuemYudHJpZ2dlcicsIGZ1bmN0aW9uKGUsIGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc2V0U2l6ZXMoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9jYWxjKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmNhblN0aWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5pc09uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZXZlbnRzKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX3RoaXMuaXNPbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wYXVzZUxpc3RlbmVycyhzY3JvbGxMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZXZlbnQgaGFuZGxlcnMgZm9yIHNjcm9sbCBhbmQgY2hhbmdlIGV2ZW50cyBvbiBhbmNob3IuXG4gICAqIEBmaXJlcyBTdGlja3kjcGF1c2VcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNjcm9sbExpc3RlbmVyIC0gdW5pcXVlLCBuYW1lc3BhY2VkIHNjcm9sbCBsaXN0ZW5lciBhdHRhY2hlZCB0byBgd2luZG93YFxuICAgKi9cbiAgX3BhdXNlTGlzdGVuZXJzKHNjcm9sbExpc3RlbmVyKSB7XG4gICAgdGhpcy5pc09uID0gZmFsc2U7XG4gICAgJCh3aW5kb3cpLm9mZihzY3JvbGxMaXN0ZW5lcik7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBwbHVnaW4gaXMgcGF1c2VkIGR1ZSB0byByZXNpemUgZXZlbnQgc2hyaW5raW5nIHRoZSB2aWV3LlxuICAgICAqIEBldmVudCBTdGlja3kjcGF1c2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3BhdXNlLnpmLnN0aWNreScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBvbiBldmVyeSBgc2Nyb2xsYCBldmVudCBhbmQgb24gYF9pbml0YFxuICAgKiBmaXJlcyBmdW5jdGlvbnMgYmFzZWQgb24gYm9vbGVhbnMgYW5kIGNhY2hlZCB2YWx1ZXNcbiAgICogQHBhcmFtIHtCb29sZWFufSBjaGVja1NpemVzIC0gdHJ1ZSBpZiBwbHVnaW4gc2hvdWxkIHJlY2FsY3VsYXRlIHNpemVzIGFuZCBicmVha3BvaW50cy5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHNjcm9sbCAtIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIHBhc3NlZCBmcm9tIHNjcm9sbCBldmVudCBjYiBmdW5jdGlvbi4gSWYgbm90IHBhc3NlZCwgZGVmYXVsdHMgdG8gYHdpbmRvdy5wYWdlWU9mZnNldGAuXG4gICAqL1xuICBfY2FsYyhjaGVja1NpemVzLCBzY3JvbGwpIHtcbiAgICBpZiAoY2hlY2tTaXplcykgeyB0aGlzLl9zZXRTaXplcygpOyB9XG5cbiAgICBpZiAoIXRoaXMuY2FuU3RpY2spIHtcbiAgICAgIGlmICh0aGlzLmlzU3R1Y2spIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlU3RpY2t5KHRydWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghc2Nyb2xsKSB7IHNjcm9sbCA9IHdpbmRvdy5wYWdlWU9mZnNldDsgfVxuXG4gICAgaWYgKHNjcm9sbCA+PSB0aGlzLnRvcFBvaW50KSB7XG4gICAgICBpZiAoc2Nyb2xsIDw9IHRoaXMuYm90dG9tUG9pbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU3R1Y2spIHtcbiAgICAgICAgICB0aGlzLl9zZXRTdGlja3koKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdHVjaykge1xuICAgICAgICAgIHRoaXMuX3JlbW92ZVN0aWNreShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNTdHVjaykge1xuICAgICAgICB0aGlzLl9yZW1vdmVTdGlja3kodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhdXNlcyB0aGUgJGVsZW1lbnQgdG8gYmVjb21lIHN0dWNrLlxuICAgKiBBZGRzIGBwb3NpdGlvbjogZml4ZWQ7YCwgYW5kIGhlbHBlciBjbGFzc2VzLlxuICAgKiBAZmlyZXMgU3RpY2t5I3N0dWNrdG9cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0U3RpY2t5KCkge1xuICAgIHZhciBzdGlja1RvID0gdGhpcy5vcHRpb25zLnN0aWNrVG8sXG4gICAgICAgIG1yZ24gPSBzdGlja1RvID09PSAndG9wJyA/ICdtYXJnaW5Ub3AnIDogJ21hcmdpbkJvdHRvbScsXG4gICAgICAgIG5vdFN0dWNrVG8gPSBzdGlja1RvID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCcsXG4gICAgICAgIGNzcyA9IHt9O1xuXG4gICAgY3NzW21yZ25dID0gYCR7dGhpcy5vcHRpb25zW21yZ25dfWVtYDtcbiAgICBjc3Nbc3RpY2tUb10gPSAwO1xuICAgIGNzc1tub3RTdHVja1RvXSA9ICdhdXRvJztcbiAgICBjc3NbJ2xlZnQnXSA9IHRoaXMuJGNvbnRhaW5lci5vZmZzZXQoKS5sZWZ0ICsgcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy4kY29udGFpbmVyWzBdKVtcInBhZGRpbmctbGVmdFwiXSwgMTApO1xuICAgIHRoaXMuaXNTdHVjayA9IHRydWU7XG4gICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhgaXMtYW5jaG9yZWQgaXMtYXQtJHtub3RTdHVja1RvfWApXG4gICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhgaXMtc3R1Y2sgaXMtYXQtJHtzdGlja1RvfWApXG4gICAgICAgICAgICAgICAgIC5jc3MoY3NzKVxuICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgJGVsZW1lbnQgaGFzIGJlY29tZSBgcG9zaXRpb246IGZpeGVkO2BcbiAgICAgICAgICAgICAgICAgICogTmFtZXNwYWNlZCB0byBgdG9wYCBvciBgYm90dG9tYCwgZS5nLiBgc3RpY2t5LnpmLnN0dWNrdG86dG9wYFxuICAgICAgICAgICAgICAgICAgKiBAZXZlbnQgU3RpY2t5I3N0dWNrdG9cbiAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgIC50cmlnZ2VyKGBzdGlja3kuemYuc3R1Y2t0bzoke3N0aWNrVG99YCk7XG4gIH1cblxuICAvKipcbiAgICogQ2F1c2VzIHRoZSAkZWxlbWVudCB0byBiZWNvbWUgdW5zdHVjay5cbiAgICogUmVtb3ZlcyBgcG9zaXRpb246IGZpeGVkO2AsIGFuZCBoZWxwZXIgY2xhc3Nlcy5cbiAgICogQWRkcyBvdGhlciBoZWxwZXIgY2xhc3Nlcy5cbiAgICogQHBhcmFtIHtCb29sZWFufSBpc1RvcCAtIHRlbGxzIHRoZSBmdW5jdGlvbiBpZiB0aGUgJGVsZW1lbnQgc2hvdWxkIGFuY2hvciB0byB0aGUgdG9wIG9yIGJvdHRvbSBvZiBpdHMgJGFuY2hvciBlbGVtZW50LlxuICAgKiBAZmlyZXMgU3RpY2t5I3Vuc3R1Y2tmcm9tXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVtb3ZlU3RpY2t5KGlzVG9wKSB7XG4gICAgdmFyIHN0aWNrVG8gPSB0aGlzLm9wdGlvbnMuc3RpY2tUbyxcbiAgICAgICAgc3RpY2tUb1RvcCA9IHN0aWNrVG8gPT09ICd0b3AnLFxuICAgICAgICBjc3MgPSB7fSxcbiAgICAgICAgYW5jaG9yUHQgPSAodGhpcy5wb2ludHMgPyB0aGlzLnBvaW50c1sxXSAtIHRoaXMucG9pbnRzWzBdIDogdGhpcy5hbmNob3JIZWlnaHQpIC0gdGhpcy5lbGVtSGVpZ2h0LFxuICAgICAgICBtcmduID0gc3RpY2tUb1RvcCA/ICdtYXJnaW5Ub3AnIDogJ21hcmdpbkJvdHRvbScsXG4gICAgICAgIG5vdFN0dWNrVG8gPSBzdGlja1RvVG9wID8gJ2JvdHRvbScgOiAndG9wJyxcbiAgICAgICAgdG9wT3JCb3R0b20gPSBpc1RvcCA/ICd0b3AnIDogJ2JvdHRvbSc7XG5cbiAgICBjc3NbbXJnbl0gPSAwO1xuXG4gICAgaWYgKChpc1RvcCAmJiAhc3RpY2tUb1RvcCkgfHwgKHN0aWNrVG9Ub3AgJiYgIWlzVG9wKSkge1xuICAgICAgY3NzW3N0aWNrVG9dID0gYW5jaG9yUHQ7XG4gICAgICBjc3Nbbm90U3R1Y2tUb10gPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjc3Nbc3RpY2tUb10gPSAwO1xuICAgICAgY3NzW25vdFN0dWNrVG9dID0gYW5jaG9yUHQ7XG4gICAgfVxuXG4gICAgY3NzWydsZWZ0J10gPSAnJztcbiAgICB0aGlzLmlzU3R1Y2sgPSBmYWxzZTtcbiAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGBpcy1zdHVjayBpcy1hdC0ke3N0aWNrVG99YClcbiAgICAgICAgICAgICAgICAgLmFkZENsYXNzKGBpcy1hbmNob3JlZCBpcy1hdC0ke3RvcE9yQm90dG9tfWApXG4gICAgICAgICAgICAgICAgIC5jc3MoY3NzKVxuICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgJGVsZW1lbnQgaGFzIGJlY29tZSBhbmNob3JlZC5cbiAgICAgICAgICAgICAgICAgICogTmFtZXNwYWNlZCB0byBgdG9wYCBvciBgYm90dG9tYCwgZS5nLiBgc3RpY2t5LnpmLnVuc3R1Y2tmcm9tOmJvdHRvbWBcbiAgICAgICAgICAgICAgICAgICogQGV2ZW50IFN0aWNreSN1bnN0dWNrZnJvbVxuICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgLnRyaWdnZXIoYHN0aWNreS56Zi51bnN0dWNrZnJvbToke3RvcE9yQm90dG9tfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlICRlbGVtZW50IGFuZCAkY29udGFpbmVyIHNpemVzIGZvciBwbHVnaW4uXG4gICAqIENhbGxzIGBfc2V0QnJlYWtQb2ludHNgLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYiAtIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGZpcmUgb24gY29tcGxldGlvbiBvZiBgX3NldEJyZWFrUG9pbnRzYC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRTaXplcyhjYikge1xuICAgIHRoaXMuY2FuU3RpY2sgPSBGb3VuZGF0aW9uLk1lZGlhUXVlcnkuYXRMZWFzdCh0aGlzLm9wdGlvbnMuc3RpY2t5T24pO1xuICAgIGlmICghdGhpcy5jYW5TdGljaykgeyBjYigpOyB9XG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgbmV3RWxlbVdpZHRoID0gdGhpcy4kY29udGFpbmVyWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLFxuICAgICAgICBjb21wID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy4kY29udGFpbmVyWzBdKSxcbiAgICAgICAgcGRuZyA9IHBhcnNlSW50KGNvbXBbJ3BhZGRpbmctcmlnaHQnXSwgMTApO1xuXG4gICAgaWYgKHRoaXMuJGFuY2hvciAmJiB0aGlzLiRhbmNob3IubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFuY2hvckhlaWdodCA9IHRoaXMuJGFuY2hvclswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BhcnNlUG9pbnRzKCk7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC5jc3Moe1xuICAgICAgJ21heC13aWR0aCc6IGAke25ld0VsZW1XaWR0aCAtIHBkbmd9cHhgXG4gICAgfSk7XG5cbiAgICB2YXIgbmV3Q29udGFpbmVySGVpZ2h0ID0gdGhpcy4kZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgfHwgdGhpcy5jb250YWluZXJIZWlnaHQ7XG4gICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSBuZXdDb250YWluZXJIZWlnaHQ7XG4gICAgdGhpcy4kY29udGFpbmVyLmNzcyh7XG4gICAgICBoZWlnaHQ6IG5ld0NvbnRhaW5lckhlaWdodFxuICAgIH0pO1xuICAgIHRoaXMuZWxlbUhlaWdodCA9IG5ld0NvbnRhaW5lckhlaWdodDtcblxuICBcdGlmICh0aGlzLmlzU3R1Y2spIHtcbiAgXHRcdHRoaXMuJGVsZW1lbnQuY3NzKHtcImxlZnRcIjp0aGlzLiRjb250YWluZXIub2Zmc2V0KCkubGVmdCArIHBhcnNlSW50KGNvbXBbJ3BhZGRpbmctbGVmdCddLCAxMCl9KTtcbiAgXHR9XG5cbiAgICB0aGlzLl9zZXRCcmVha1BvaW50cyhuZXdDb250YWluZXJIZWlnaHQsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGNiKSB7IGNiKCk7IH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB1cHBlciBhbmQgbG93ZXIgYnJlYWtwb2ludHMgZm9yIHRoZSBlbGVtZW50IHRvIGJlY29tZSBzdGlja3kvdW5zdGlja3kuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBlbGVtSGVpZ2h0IC0gcHggdmFsdWUgZm9yIHN0aWNreS4kZWxlbWVudCBoZWlnaHQsIGNhbGN1bGF0ZWQgYnkgYF9zZXRTaXplc2AuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGNvbXBsZXRpb24uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJlYWtQb2ludHMoZWxlbUhlaWdodCwgY2IpIHtcbiAgICBpZiAoIXRoaXMuY2FuU3RpY2spIHtcbiAgICAgIGlmIChjYikgeyBjYigpOyB9XG4gICAgICBlbHNlIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfVxuICAgIHZhciBtVG9wID0gZW1DYWxjKHRoaXMub3B0aW9ucy5tYXJnaW5Ub3ApLFxuICAgICAgICBtQnRtID0gZW1DYWxjKHRoaXMub3B0aW9ucy5tYXJnaW5Cb3R0b20pLFxuICAgICAgICB0b3BQb2ludCA9IHRoaXMucG9pbnRzID8gdGhpcy5wb2ludHNbMF0gOiB0aGlzLiRhbmNob3Iub2Zmc2V0KCkudG9wLFxuICAgICAgICBib3R0b21Qb2ludCA9IHRoaXMucG9pbnRzID8gdGhpcy5wb2ludHNbMV0gOiB0b3BQb2ludCArIHRoaXMuYW5jaG9ySGVpZ2h0LFxuICAgICAgICAvLyB0b3BQb2ludCA9IHRoaXMuJGFuY2hvci5vZmZzZXQoKS50b3AgfHwgdGhpcy5wb2ludHNbMF0sXG4gICAgICAgIC8vIGJvdHRvbVBvaW50ID0gdG9wUG9pbnQgKyB0aGlzLmFuY2hvckhlaWdodCB8fCB0aGlzLnBvaW50c1sxXSxcbiAgICAgICAgd2luSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdGlja1RvID09PSAndG9wJykge1xuICAgICAgdG9wUG9pbnQgLT0gbVRvcDtcbiAgICAgIGJvdHRvbVBvaW50IC09IChlbGVtSGVpZ2h0ICsgbVRvcCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RpY2tUbyA9PT0gJ2JvdHRvbScpIHtcbiAgICAgIHRvcFBvaW50IC09ICh3aW5IZWlnaHQgLSAoZWxlbUhlaWdodCArIG1CdG0pKTtcbiAgICAgIGJvdHRvbVBvaW50IC09ICh3aW5IZWlnaHQgLSBtQnRtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy90aGlzIHdvdWxkIGJlIHRoZSBzdGlja1RvOiBib3RoIG9wdGlvbi4uLiB0cmlja3lcbiAgICB9XG5cbiAgICB0aGlzLnRvcFBvaW50ID0gdG9wUG9pbnQ7XG4gICAgdGhpcy5ib3R0b21Qb2ludCA9IGJvdHRvbVBvaW50O1xuXG4gICAgaWYgKGNiKSB7IGNiKCk7IH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgY3VycmVudCBzdGlja3kgZWxlbWVudC5cbiAgICogUmVzZXRzIHRoZSBlbGVtZW50IHRvIHRoZSB0b3AgcG9zaXRpb24gZmlyc3QuXG4gICAqIFJlbW92ZXMgZXZlbnQgbGlzdGVuZXJzLCBKUy1hZGRlZCBjc3MgcHJvcGVydGllcyBhbmQgY2xhc3NlcywgYW5kIHVud3JhcHMgdGhlICRlbGVtZW50IGlmIHRoZSBKUyBhZGRlZCB0aGUgJGNvbnRhaW5lci5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX3JlbW92ZVN0aWNreSh0cnVlKTtcblxuICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYCR7dGhpcy5vcHRpb25zLnN0aWNreUNsYXNzfSBpcy1hbmNob3JlZCBpcy1hdC10b3BgKVxuICAgICAgICAgICAgICAgICAuY3NzKHtcbiAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcnLFxuICAgICAgICAgICAgICAgICAgIHRvcDogJycsXG4gICAgICAgICAgICAgICAgICAgYm90dG9tOiAnJyxcbiAgICAgICAgICAgICAgICAgICAnbWF4LXdpZHRoJzogJydcbiAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgLm9mZigncmVzaXplbWUuemYudHJpZ2dlcicpO1xuXG4gICAgdGhpcy4kYW5jaG9yLm9mZignY2hhbmdlLnpmLnN0aWNreScpO1xuICAgICQod2luZG93KS5vZmYodGhpcy5zY3JvbGxMaXN0ZW5lcik7XG5cbiAgICBpZiAodGhpcy53YXNXcmFwcGVkKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LnVud3JhcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiRjb250YWluZXIucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgICAgICAgICAgLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJydcbiAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuU3RpY2t5LmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQ3VzdG9taXphYmxlIGNvbnRhaW5lciB0ZW1wbGF0ZS4gQWRkIHlvdXIgb3duIGNsYXNzZXMgZm9yIHN0eWxpbmcgYW5kIHNpemluZy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnJmx0O2RpdiBkYXRhLXN0aWNreS1jb250YWluZXIgY2xhc3M9XCJzbWFsbC02IGNvbHVtbnNcIiZndDsmbHQ7L2RpdiZndDsnXG4gICAqL1xuICBjb250YWluZXI6ICc8ZGl2IGRhdGEtc3RpY2t5LWNvbnRhaW5lcj48L2Rpdj4nLFxuICAvKipcbiAgICogTG9jYXRpb24gaW4gdGhlIHZpZXcgdGhlIGVsZW1lbnQgc3RpY2tzIHRvLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICd0b3AnXG4gICAqL1xuICBzdGlja1RvOiAndG9wJyxcbiAgLyoqXG4gICAqIElmIGFuY2hvcmVkIHRvIGEgc2luZ2xlIGVsZW1lbnQsIHRoZSBpZCBvZiB0aGF0IGVsZW1lbnQuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ2V4YW1wbGVJZCdcbiAgICovXG4gIGFuY2hvcjogJycsXG4gIC8qKlxuICAgKiBJZiB1c2luZyBtb3JlIHRoYW4gb25lIGVsZW1lbnQgYXMgYW5jaG9yIHBvaW50cywgdGhlIGlkIG9mIHRoZSB0b3AgYW5jaG9yLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdleGFtcGxlSWQ6dG9wJ1xuICAgKi9cbiAgdG9wQW5jaG9yOiAnJyxcbiAgLyoqXG4gICAqIElmIHVzaW5nIG1vcmUgdGhhbiBvbmUgZWxlbWVudCBhcyBhbmNob3IgcG9pbnRzLCB0aGUgaWQgb2YgdGhlIGJvdHRvbSBhbmNob3IuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ2V4YW1wbGVJZDpib3R0b20nXG4gICAqL1xuICBidG1BbmNob3I6ICcnLFxuICAvKipcbiAgICogTWFyZ2luLCBpbiBgZW1gJ3MgdG8gYXBwbHkgdG8gdGhlIHRvcCBvZiB0aGUgZWxlbWVudCB3aGVuIGl0IGJlY29tZXMgc3RpY2t5LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDFcbiAgICovXG4gIG1hcmdpblRvcDogMSxcbiAgLyoqXG4gICAqIE1hcmdpbiwgaW4gYGVtYCdzIHRvIGFwcGx5IHRvIHRoZSBib3R0b20gb2YgdGhlIGVsZW1lbnQgd2hlbiBpdCBiZWNvbWVzIHN0aWNreS5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAxXG4gICAqL1xuICBtYXJnaW5Cb3R0b206IDEsXG4gIC8qKlxuICAgKiBCcmVha3BvaW50IHN0cmluZyB0aGF0IGlzIHRoZSBtaW5pbXVtIHNjcmVlbiBzaXplIGFuIGVsZW1lbnQgc2hvdWxkIGJlY29tZSBzdGlja3kuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ21lZGl1bSdcbiAgICovXG4gIHN0aWNreU9uOiAnbWVkaXVtJyxcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gc3RpY2t5IGVsZW1lbnQsIGFuZCByZW1vdmVkIG9uIGRlc3RydWN0aW9uLiBGb3VuZGF0aW9uIGRlZmF1bHRzIHRvIGBzdGlja3lgLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdzdGlja3knXG4gICAqL1xuICBzdGlja3lDbGFzczogJ3N0aWNreScsXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIHN0aWNreSBjb250YWluZXIuIEZvdW5kYXRpb24gZGVmYXVsdHMgdG8gYHN0aWNreS1jb250YWluZXJgLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdzdGlja3ktY29udGFpbmVyJ1xuICAgKi9cbiAgY29udGFpbmVyQ2xhc3M6ICdzdGlja3ktY29udGFpbmVyJyxcbiAgLyoqXG4gICAqIE51bWJlciBvZiBzY3JvbGwgZXZlbnRzIGJldHdlZW4gdGhlIHBsdWdpbidzIHJlY2FsY3VsYXRpbmcgc3RpY2t5IHBvaW50cy4gU2V0dGluZyBpdCB0byBgMGAgd2lsbCBjYXVzZSBpdCB0byByZWNhbGMgZXZlcnkgc2Nyb2xsIGV2ZW50LCBzZXR0aW5nIGl0IHRvIGAtMWAgd2lsbCBwcmV2ZW50IHJlY2FsYyBvbiBzY3JvbGwuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgNTBcbiAgICovXG4gIGNoZWNrRXZlcnk6IC0xXG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjYWxjdWxhdGUgZW0gdmFsdWVzXG4gKiBAcGFyYW0gTnVtYmVyIHtlbX0gLSBudW1iZXIgb2YgZW0ncyB0byBjYWxjdWxhdGUgaW50byBwaXhlbHNcbiAqL1xuZnVuY3Rpb24gZW1DYWxjKGVtKSB7XG4gIHJldHVybiBwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5LCBudWxsKS5mb250U2l6ZSwgMTApICogZW07XG59XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihTdGlja3ksICdTdGlja3knKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIFRhYnMgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnRhYnNcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudGltZXJBbmRJbWFnZUxvYWRlciBpZiB0YWJzIGNvbnRhaW4gaW1hZ2VzXG4gKi9cblxuY2xhc3MgVGFicyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRhYnMuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgVGFicyNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gdGFicy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBUYWJzLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnVGFicycpO1xuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ1RhYnMnLCB7XG4gICAgICAnRU5URVInOiAnb3BlbicsXG4gICAgICAnU1BBQ0UnOiAnb3BlbicsXG4gICAgICAnQVJST1dfUklHSFQnOiAnbmV4dCcsXG4gICAgICAnQVJST1dfVVAnOiAncHJldmlvdXMnLFxuICAgICAgJ0FSUk9XX0RPV04nOiAnbmV4dCcsXG4gICAgICAnQVJST1dfTEVGVCc6ICdwcmV2aW91cydcbiAgICAgIC8vICdUQUInOiAnbmV4dCcsXG4gICAgICAvLyAnU0hJRlRfVEFCJzogJ3ByZXZpb3VzJ1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSB0YWJzIGJ5IHNob3dpbmcgYW5kIGZvY3VzaW5nIChpZiBhdXRvRm9jdXM9dHJ1ZSkgdGhlIHByZXNldCBhY3RpdmUgdGFiLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJHRhYlRpdGxlcyA9IHRoaXMuJGVsZW1lbnQuZmluZChgLiR7dGhpcy5vcHRpb25zLmxpbmtDbGFzc31gKTtcbiAgICB0aGlzLiR0YWJDb250ZW50ID0gJChgW2RhdGEtdGFicy1jb250ZW50PVwiJHt0aGlzLiRlbGVtZW50WzBdLmlkfVwiXWApO1xuXG4gICAgdGhpcy4kdGFiVGl0bGVzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIHZhciAkZWxlbSA9ICQodGhpcyksXG4gICAgICAgICAgJGxpbmsgPSAkZWxlbS5maW5kKCdhJyksXG4gICAgICAgICAgaXNBY3RpdmUgPSAkZWxlbS5oYXNDbGFzcygnaXMtYWN0aXZlJyksXG4gICAgICAgICAgaGFzaCA9ICRsaW5rWzBdLmhhc2guc2xpY2UoMSksXG4gICAgICAgICAgbGlua0lkID0gJGxpbmtbMF0uaWQgPyAkbGlua1swXS5pZCA6IGAke2hhc2h9LWxhYmVsYCxcbiAgICAgICAgICAkdGFiQ29udGVudCA9ICQoYCMke2hhc2h9YCk7XG5cbiAgICAgICRlbGVtLmF0dHIoeydyb2xlJzogJ3ByZXNlbnRhdGlvbid9KTtcblxuICAgICAgJGxpbmsuYXR0cih7XG4gICAgICAgICdyb2xlJzogJ3RhYicsXG4gICAgICAgICdhcmlhLWNvbnRyb2xzJzogaGFzaCxcbiAgICAgICAgJ2FyaWEtc2VsZWN0ZWQnOiBpc0FjdGl2ZSxcbiAgICAgICAgJ2lkJzogbGlua0lkXG4gICAgICB9KTtcblxuICAgICAgJHRhYkNvbnRlbnQuYXR0cih7XG4gICAgICAgICdyb2xlJzogJ3RhYnBhbmVsJyxcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogIWlzQWN0aXZlLFxuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbGlua0lkXG4gICAgICB9KTtcblxuICAgICAgaWYoaXNBY3RpdmUgJiYgX3RoaXMub3B0aW9ucy5hdXRvRm9jdXMpe1xuICAgICAgICAkbGluay5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYodGhpcy5vcHRpb25zLm1hdGNoSGVpZ2h0KSB7XG4gICAgICB2YXIgJGltYWdlcyA9IHRoaXMuJHRhYkNvbnRlbnQuZmluZCgnaW1nJyk7XG5cbiAgICAgIGlmICgkaW1hZ2VzLmxlbmd0aCkge1xuICAgICAgICBGb3VuZGF0aW9uLm9uSW1hZ2VzTG9hZGVkKCRpbWFnZXMsIHRoaXMuX3NldEhlaWdodC5iaW5kKHRoaXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NldEhlaWdodCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2V2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgaGFuZGxlcnMgZm9yIGl0ZW1zIHdpdGhpbiB0aGUgdGFicy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy5fYWRkS2V5SGFuZGxlcigpO1xuICAgIHRoaXMuX2FkZENsaWNrSGFuZGxlcigpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXRjaEhlaWdodCkge1xuICAgICAgJCh3aW5kb3cpLm9uKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCB0aGlzLl9zZXRIZWlnaHQuYmluZCh0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgY2xpY2sgaGFuZGxlcnMgZm9yIGl0ZW1zIHdpdGhpbiB0aGUgdGFicy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRDbGlja0hhbmRsZXIoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5vZmYoJ2NsaWNrLnpmLnRhYnMnKVxuICAgICAgLm9uKCdjbGljay56Zi50YWJzJywgYC4ke3RoaXMub3B0aW9ucy5saW5rQ2xhc3N9YCwgZnVuY3Rpb24oZSl7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2lzLWFjdGl2ZScpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLl9oYW5kbGVUYWJDaGFuZ2UoJCh0aGlzKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGtleWJvYXJkIGV2ZW50IGhhbmRsZXJzIGZvciBpdGVtcyB3aXRoaW4gdGhlIHRhYnMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkS2V5SGFuZGxlcigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciAkZmlyc3RUYWIgPSBfdGhpcy4kZWxlbWVudC5maW5kKCdsaTpmaXJzdC1vZi10eXBlJyk7XG4gICAgdmFyICRsYXN0VGFiID0gX3RoaXMuJGVsZW1lbnQuZmluZCgnbGk6bGFzdC1vZi10eXBlJyk7XG5cbiAgICB0aGlzLiR0YWJUaXRsZXMub2ZmKCdrZXlkb3duLnpmLnRhYnMnKS5vbigna2V5ZG93bi56Zi50YWJzJywgZnVuY3Rpb24oZSl7XG4gICAgICBpZiAoZS53aGljaCA9PT0gOSkgcmV0dXJuO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgdmFyICRlbGVtZW50ID0gJCh0aGlzKSxcbiAgICAgICAgJGVsZW1lbnRzID0gJGVsZW1lbnQucGFyZW50KCd1bCcpLmNoaWxkcmVuKCdsaScpLFxuICAgICAgICAkcHJldkVsZW1lbnQsXG4gICAgICAgICRuZXh0RWxlbWVudDtcblxuICAgICAgJGVsZW1lbnRzLmVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICBpZiAoJCh0aGlzKS5pcygkZWxlbWVudCkpIHtcbiAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy53cmFwT25LZXlzKSB7XG4gICAgICAgICAgICAkcHJldkVsZW1lbnQgPSBpID09PSAwID8gJGVsZW1lbnRzLmxhc3QoKSA6ICRlbGVtZW50cy5lcShpLTEpO1xuICAgICAgICAgICAgJG5leHRFbGVtZW50ID0gaSA9PT0gJGVsZW1lbnRzLmxlbmd0aCAtMSA/ICRlbGVtZW50cy5maXJzdCgpIDogJGVsZW1lbnRzLmVxKGkrMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRwcmV2RWxlbWVudCA9ICRlbGVtZW50cy5lcShNYXRoLm1heCgwLCBpLTEpKTtcbiAgICAgICAgICAgICRuZXh0RWxlbWVudCA9ICRlbGVtZW50cy5lcShNYXRoLm1pbihpKzEsICRlbGVtZW50cy5sZW5ndGgtMSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBoYW5kbGUga2V5Ym9hcmQgZXZlbnQgd2l0aCBrZXlib2FyZCB1dGlsXG4gICAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnVGFicycsIHtcbiAgICAgICAgb3BlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJGVsZW1lbnQuZmluZCgnW3JvbGU9XCJ0YWJcIl0nKS5mb2N1cygpO1xuICAgICAgICAgIF90aGlzLl9oYW5kbGVUYWJDaGFuZ2UoJGVsZW1lbnQpO1xuICAgICAgICB9LFxuICAgICAgICBwcmV2aW91czogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJHByZXZFbGVtZW50LmZpbmQoJ1tyb2xlPVwidGFiXCJdJykuZm9jdXMoKTtcbiAgICAgICAgICBfdGhpcy5faGFuZGxlVGFiQ2hhbmdlKCRwcmV2RWxlbWVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRuZXh0RWxlbWVudC5maW5kKCdbcm9sZT1cInRhYlwiXScpLmZvY3VzKCk7XG4gICAgICAgICAgX3RoaXMuX2hhbmRsZVRhYkNoYW5nZSgkbmV4dEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgdGFiIGAkdGFyZ2V0Q29udGVudGAgZGVmaW5lZCBieSBgJHRhcmdldGAuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdGFyZ2V0IC0gVGFiIHRvIG9wZW4uXG4gICAqIEBmaXJlcyBUYWJzI2NoYW5nZVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIF9oYW5kbGVUYWJDaGFuZ2UoJHRhcmdldCkge1xuICAgIHZhciAkdGFiTGluayA9ICR0YXJnZXQuZmluZCgnW3JvbGU9XCJ0YWJcIl0nKSxcbiAgICAgICAgaGFzaCA9ICR0YWJMaW5rWzBdLmhhc2gsXG4gICAgICAgICR0YXJnZXRDb250ZW50ID0gdGhpcy4kdGFiQ29udGVudC5maW5kKGhhc2gpLFxuICAgICAgICAkb2xkVGFiID0gdGhpcy4kZWxlbWVudC5cbiAgICAgICAgICBmaW5kKGAuJHt0aGlzLm9wdGlvbnMubGlua0NsYXNzfS5pcy1hY3RpdmVgKVxuICAgICAgICAgIC5yZW1vdmVDbGFzcygnaXMtYWN0aXZlJylcbiAgICAgICAgICAuZmluZCgnW3JvbGU9XCJ0YWJcIl0nKVxuICAgICAgICAgIC5hdHRyKHsgJ2FyaWEtc2VsZWN0ZWQnOiAnZmFsc2UnIH0pO1xuXG4gICAgJChgIyR7JG9sZFRhYi5hdHRyKCdhcmlhLWNvbnRyb2xzJyl9YClcbiAgICAgIC5yZW1vdmVDbGFzcygnaXMtYWN0aXZlJylcbiAgICAgIC5hdHRyKHsgJ2FyaWEtaGlkZGVuJzogJ3RydWUnIH0pO1xuXG4gICAgJHRhcmdldC5hZGRDbGFzcygnaXMtYWN0aXZlJyk7XG5cbiAgICAkdGFiTGluay5hdHRyKHsnYXJpYS1zZWxlY3RlZCc6ICd0cnVlJ30pO1xuXG4gICAgJHRhcmdldENvbnRlbnRcbiAgICAgIC5hZGRDbGFzcygnaXMtYWN0aXZlJylcbiAgICAgIC5hdHRyKHsnYXJpYS1oaWRkZW4nOiAnZmFsc2UnfSk7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBwbHVnaW4gaGFzIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRhYnMuXG4gICAgICogQGV2ZW50IFRhYnMjY2hhbmdlXG4gICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjaGFuZ2UuemYudGFicycsIFskdGFyZ2V0XSk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGljIG1ldGhvZCBmb3Igc2VsZWN0aW5nIGEgY29udGVudCBwYW5lIHRvIGRpc3BsYXkuXG4gICAqIEBwYXJhbSB7alF1ZXJ5IHwgU3RyaW5nfSBlbGVtIC0galF1ZXJ5IG9iamVjdCBvciBzdHJpbmcgb2YgdGhlIGlkIG9mIHRoZSBwYW5lIHRvIGRpc3BsYXkuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgc2VsZWN0VGFiKGVsZW0pIHtcbiAgICB2YXIgaWRTdHI7XG5cbiAgICBpZiAodHlwZW9mIGVsZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpZFN0ciA9IGVsZW1bMF0uaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkU3RyID0gZWxlbTtcbiAgICB9XG5cbiAgICBpZiAoaWRTdHIuaW5kZXhPZignIycpIDwgMCkge1xuICAgICAgaWRTdHIgPSBgIyR7aWRTdHJ9YDtcbiAgICB9XG5cbiAgICB2YXIgJHRhcmdldCA9IHRoaXMuJHRhYlRpdGxlcy5maW5kKGBbaHJlZj1cIiR7aWRTdHJ9XCJdYCkucGFyZW50KGAuJHt0aGlzLm9wdGlvbnMubGlua0NsYXNzfWApO1xuXG4gICAgdGhpcy5faGFuZGxlVGFiQ2hhbmdlKCR0YXJnZXQpO1xuICB9O1xuICAvKipcbiAgICogU2V0cyB0aGUgaGVpZ2h0IG9mIGVhY2ggcGFuZWwgdG8gdGhlIGhlaWdodCBvZiB0aGUgdGFsbGVzdCBwYW5lbC5cbiAgICogSWYgZW5hYmxlZCBpbiBvcHRpb25zLCBnZXRzIGNhbGxlZCBvbiBtZWRpYSBxdWVyeSBjaGFuZ2UuXG4gICAqIElmIGxvYWRpbmcgY29udGVudCB2aWEgZXh0ZXJuYWwgc291cmNlLCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IG9yIHdpdGggX3JlZmxvdy5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0SGVpZ2h0KCkge1xuICAgIHZhciBtYXggPSAwO1xuICAgIHRoaXMuJHRhYkNvbnRlbnRcbiAgICAgIC5maW5kKGAuJHt0aGlzLm9wdGlvbnMucGFuZWxDbGFzc31gKVxuICAgICAgLmNzcygnaGVpZ2h0JywgJycpXG4gICAgICAuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhbmVsID0gJCh0aGlzKSxcbiAgICAgICAgICAgIGlzQWN0aXZlID0gcGFuZWwuaGFzQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuXG4gICAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgICBwYW5lbC5jc3Moeyd2aXNpYmlsaXR5JzogJ2hpZGRlbicsICdkaXNwbGF5JzogJ2Jsb2NrJ30pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRlbXAgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblxuICAgICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgICAgcGFuZWwuY3NzKHtcbiAgICAgICAgICAgICd2aXNpYmlsaXR5JzogJycsXG4gICAgICAgICAgICAnZGlzcGxheSc6ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBtYXggPSB0ZW1wID4gbWF4ID8gdGVtcCA6IG1heDtcbiAgICAgIH0pXG4gICAgICAuY3NzKCdoZWlnaHQnLCBgJHttYXh9cHhgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyBhbiBpbnN0YW5jZSBvZiBhbiB0YWJzLlxuICAgKiBAZmlyZXMgVGFicyNkZXN0cm95ZWRcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudFxuICAgICAgLmZpbmQoYC4ke3RoaXMub3B0aW9ucy5saW5rQ2xhc3N9YClcbiAgICAgIC5vZmYoJy56Zi50YWJzJykuaGlkZSgpLmVuZCgpXG4gICAgICAuZmluZChgLiR7dGhpcy5vcHRpb25zLnBhbmVsQ2xhc3N9YClcbiAgICAgIC5oaWRlKCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm1hdGNoSGVpZ2h0KSB7XG4gICAgICAkKHdpbmRvdykub2ZmKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknKTtcbiAgICB9XG5cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuVGFicy5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgd2luZG93IHRvIHNjcm9sbCB0byBjb250ZW50IG9mIGFjdGl2ZSBwYW5lIG9uIGxvYWQgaWYgc2V0IHRvIHRydWUuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEFsbG93cyBrZXlib2FyZCBpbnB1dCB0byAnd3JhcCcgYXJvdW5kIHRoZSB0YWIgbGlua3MuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgdHJ1ZVxuICAgKi9cbiAgd3JhcE9uS2V5czogdHJ1ZSxcblxuICAvKipcbiAgICogQWxsb3dzIHRoZSB0YWIgY29udGVudCBwYW5lcyB0byBtYXRjaCBoZWlnaHRzIGlmIHNldCB0byB0cnVlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBtYXRjaEhlaWdodDogZmFsc2UsXG5cbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gYGxpYCdzIGluIHRhYiBsaW5rIGxpc3QuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ3RhYnMtdGl0bGUnXG4gICAqL1xuICBsaW5rQ2xhc3M6ICd0YWJzLXRpdGxlJyxcblxuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgY29udGVudCBjb250YWluZXJzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICd0YWJzLXBhbmVsJ1xuICAgKi9cbiAgcGFuZWxDbGFzczogJ3RhYnMtcGFuZWwnXG59O1xuXG5mdW5jdGlvbiBjaGVja0NsYXNzKCRlbGVtKXtcbiAgcmV0dXJuICRlbGVtLmhhc0NsYXNzKCdpcy1hY3RpdmUnKTtcbn1cblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKFRhYnMsICdUYWJzJyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBUb2dnbGVyIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi50b2dnbGVyXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1vdGlvblxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICovXG5cbmNsYXNzIFRvZ2dsZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBUb2dnbGVyLlxuICAgKiBAY2xhc3NcbiAgICogQGZpcmVzIFRvZ2dsZXIjaW5pdFxuICAgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gYWRkIHRoZSB0cmlnZ2VyIHRvLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIFRvZ2dsZXIuZGVmYXVsdHMsIGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcbiAgICB0aGlzLmNsYXNzTmFtZSA9ICcnO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuICAgIHRoaXMuX2V2ZW50cygpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnVG9nZ2xlcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBUb2dnbGVyIHBsdWdpbiBieSBwYXJzaW5nIHRoZSB0b2dnbGUgY2xhc3MgZnJvbSBkYXRhLXRvZ2dsZXIsIG9yIGFuaW1hdGlvbiBjbGFzc2VzIGZyb20gZGF0YS1hbmltYXRlLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciBpbnB1dDtcbiAgICAvLyBQYXJzZSBhbmltYXRpb24gY2xhc3NlcyBpZiB0aGV5IHdlcmUgc2V0XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRlKSB7XG4gICAgICBpbnB1dCA9IHRoaXMub3B0aW9ucy5hbmltYXRlLnNwbGl0KCcgJyk7XG5cbiAgICAgIHRoaXMuYW5pbWF0aW9uSW4gPSBpbnB1dFswXTtcbiAgICAgIHRoaXMuYW5pbWF0aW9uT3V0ID0gaW5wdXRbMV0gfHwgbnVsbDtcbiAgICB9XG4gICAgLy8gT3RoZXJ3aXNlLCBwYXJzZSB0b2dnbGUgY2xhc3NcbiAgICBlbHNlIHtcbiAgICAgIGlucHV0ID0gdGhpcy4kZWxlbWVudC5kYXRhKCd0b2dnbGVyJyk7XG4gICAgICAvLyBBbGxvdyBmb3IgYSAuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZ1xuICAgICAgdGhpcy5jbGFzc05hbWUgPSBpbnB1dFswXSA9PT0gJy4nID8gaW5wdXQuc2xpY2UoMSkgOiBpbnB1dDtcbiAgICB9XG5cbiAgICAvLyBBZGQgQVJJQSBhdHRyaWJ1dGVzIHRvIHRyaWdnZXJzXG4gICAgdmFyIGlkID0gdGhpcy4kZWxlbWVudFswXS5pZDtcbiAgICAkKGBbZGF0YS1vcGVuPVwiJHtpZH1cIl0sIFtkYXRhLWNsb3NlPVwiJHtpZH1cIl0sIFtkYXRhLXRvZ2dsZT1cIiR7aWR9XCJdYClcbiAgICAgIC5hdHRyKCdhcmlhLWNvbnRyb2xzJywgaWQpO1xuICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgaGlkZGVuLCBhZGQgYXJpYS1oaWRkZW5cbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCB0aGlzLiRlbGVtZW50LmlzKCc6aGlkZGVuJykgPyBmYWxzZSA6IHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGV2ZW50cyBmb3IgdGhlIHRvZ2dsZSB0cmlnZ2VyLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJ3RvZ2dsZS56Zi50cmlnZ2VyJykub24oJ3RvZ2dsZS56Zi50cmlnZ2VyJywgdGhpcy50b2dnbGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgdGFyZ2V0IGNsYXNzIG9uIHRoZSB0YXJnZXQgZWxlbWVudC4gQW4gZXZlbnQgaXMgZmlyZWQgZnJvbSB0aGUgb3JpZ2luYWwgdHJpZ2dlciBkZXBlbmRpbmcgb24gaWYgdGhlIHJlc3VsdGFudCBzdGF0ZSB3YXMgXCJvblwiIG9yIFwib2ZmXCIuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgVG9nZ2xlciNvblxuICAgKiBAZmlyZXMgVG9nZ2xlciNvZmZcbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzWyB0aGlzLm9wdGlvbnMuYW5pbWF0ZSA/ICdfdG9nZ2xlQW5pbWF0ZScgOiAnX3RvZ2dsZUNsYXNzJ10oKTtcbiAgfVxuXG4gIF90b2dnbGVDbGFzcygpIHtcbiAgICB0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKHRoaXMuY2xhc3NOYW1lKTtcblxuICAgIHZhciBpc09uID0gdGhpcy4kZWxlbWVudC5oYXNDbGFzcyh0aGlzLmNsYXNzTmFtZSk7XG4gICAgaWYgKGlzT24pIHtcbiAgICAgIC8qKlxuICAgICAgICogRmlyZXMgaWYgdGhlIHRhcmdldCBlbGVtZW50IGhhcyB0aGUgY2xhc3MgYWZ0ZXIgYSB0b2dnbGUuXG4gICAgICAgKiBAZXZlbnQgVG9nZ2xlciNvblxuICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ29uLnpmLnRvZ2dsZXInKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvKipcbiAgICAgICAqIEZpcmVzIGlmIHRoZSB0YXJnZXQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIHRoZSBjbGFzcyBhZnRlciBhIHRvZ2dsZS5cbiAgICAgICAqIEBldmVudCBUb2dnbGVyI29mZlxuICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ29mZi56Zi50b2dnbGVyJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQVJJQShpc09uKTtcbiAgfVxuXG4gIF90b2dnbGVBbmltYXRlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy4kZWxlbWVudC5pcygnOmhpZGRlbicpKSB7XG4gICAgICBGb3VuZGF0aW9uLk1vdGlvbi5hbmltYXRlSW4odGhpcy4kZWxlbWVudCwgdGhpcy5hbmltYXRpb25JbiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLl91cGRhdGVBUklBKHRydWUpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ29uLnpmLnRvZ2dsZXInKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIEZvdW5kYXRpb24uTW90aW9uLmFuaW1hdGVPdXQodGhpcy4kZWxlbWVudCwgdGhpcy5hbmltYXRpb25PdXQsIGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy5fdXBkYXRlQVJJQShmYWxzZSk7XG4gICAgICAgIHRoaXMudHJpZ2dlcignb2ZmLnpmLnRvZ2dsZXInKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVBUklBKGlzT24pIHtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBpc09uID8gdHJ1ZSA6IGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgaW5zdGFuY2Ugb2YgVG9nZ2xlciBvbiB0aGUgZWxlbWVudC5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuJGVsZW1lbnQub2ZmKCcuemYudG9nZ2xlcicpO1xuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfVxufVxuXG5Ub2dnbGVyLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogVGVsbHMgdGhlIHBsdWdpbiBpZiB0aGUgZWxlbWVudCBzaG91bGQgYW5pbWF0ZWQgd2hlbiB0b2dnbGVkLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBhbmltYXRlOiBmYWxzZVxufTtcblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKFRvZ2dsZXIsICdUb2dnbGVyJyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBUb29sdGlwIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi50b29sdGlwXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmJveFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICovXG5cbmNsYXNzIFRvb2x0aXAge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhIFRvb2x0aXAuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgVG9vbHRpcCNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhdHRhY2ggYSB0b29sdGlwIHRvLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9iamVjdCB0byBleHRlbmQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgVG9vbHRpcC5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDbGljayA9IGZhbHNlO1xuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ1Rvb2x0aXAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgdG9vbHRpcCBieSBzZXR0aW5nIHRoZSBjcmVhdGluZyB0aGUgdGlwIGVsZW1lbnQsIGFkZGluZyBpdCdzIHRleHQsIHNldHRpbmcgcHJpdmF0ZSB2YXJpYWJsZXMgYW5kIHNldHRpbmcgYXR0cmlidXRlcyBvbiB0aGUgYW5jaG9yLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIGVsZW1JZCA9IHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1kZXNjcmliZWRieScpIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ3Rvb2x0aXAnKTtcblxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbkNsYXNzID0gdGhpcy5fZ2V0UG9zaXRpb25DbGFzcyh0aGlzLiRlbGVtZW50KTtcbiAgICB0aGlzLm9wdGlvbnMudGlwVGV4dCA9IHRoaXMub3B0aW9ucy50aXBUZXh0IHx8IHRoaXMuJGVsZW1lbnQuYXR0cigndGl0bGUnKTtcbiAgICB0aGlzLnRlbXBsYXRlID0gdGhpcy5vcHRpb25zLnRlbXBsYXRlID8gJCh0aGlzLm9wdGlvbnMudGVtcGxhdGUpIDogdGhpcy5fYnVpbGRUZW1wbGF0ZShlbGVtSWQpO1xuXG4gICAgdGhpcy50ZW1wbGF0ZS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KVxuICAgICAgICAudGV4dCh0aGlzLm9wdGlvbnMudGlwVGV4dClcbiAgICAgICAgLmhpZGUoKTtcblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cih7XG4gICAgICAndGl0bGUnOiAnJyxcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogZWxlbUlkLFxuICAgICAgJ2RhdGEteWV0aS1ib3gnOiBlbGVtSWQsXG4gICAgICAnZGF0YS10b2dnbGUnOiBlbGVtSWQsXG4gICAgICAnZGF0YS1yZXNpemUnOiBlbGVtSWRcbiAgICB9KS5hZGRDbGFzcyh0aGlzLnRyaWdnZXJDbGFzcyk7XG5cbiAgICAvL2hlbHBlciB2YXJpYWJsZXMgdG8gdHJhY2sgbW92ZW1lbnQgb24gY29sbGlzaW9uc1xuICAgIHRoaXMudXNlZFBvc2l0aW9ucyA9IFtdO1xuICAgIHRoaXMuY291bnRlciA9IDQ7XG4gICAgdGhpcy5jbGFzc0NoYW5nZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuX2V2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYWJzIHRoZSBjdXJyZW50IHBvc2l0aW9uaW5nIGNsYXNzLCBpZiBwcmVzZW50LCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFBvc2l0aW9uQ2xhc3MoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkgeyByZXR1cm4gJyc7IH1cbiAgICAvLyB2YXIgcG9zaXRpb24gPSBlbGVtZW50LmF0dHIoJ2NsYXNzJykubWF0Y2goL3RvcHxsZWZ0fHJpZ2h0L2cpO1xuICAgIHZhciBwb3NpdGlvbiA9IGVsZW1lbnRbMF0uY2xhc3NOYW1lLm1hdGNoKC9cXGIodG9wfGxlZnR8cmlnaHQpXFxiL2cpO1xuICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID8gcG9zaXRpb25bMF0gOiAnJztcbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH07XG4gIC8qKlxuICAgKiBidWlsZHMgdGhlIHRvb2x0aXAgZWxlbWVudCwgYWRkcyBhdHRyaWJ1dGVzLCBhbmQgcmV0dXJucyB0aGUgdGVtcGxhdGUuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYnVpbGRUZW1wbGF0ZShpZCkge1xuICAgIHZhciB0ZW1wbGF0ZUNsYXNzZXMgPSAoYCR7dGhpcy5vcHRpb25zLnRvb2x0aXBDbGFzc30gJHt0aGlzLm9wdGlvbnMucG9zaXRpb25DbGFzc30gJHt0aGlzLm9wdGlvbnMudGVtcGxhdGVDbGFzc2VzfWApLnRyaW0oKTtcbiAgICB2YXIgJHRlbXBsYXRlID0gICQoJzxkaXY+PC9kaXY+JykuYWRkQ2xhc3ModGVtcGxhdGVDbGFzc2VzKS5hdHRyKHtcbiAgICAgICdyb2xlJzogJ3Rvb2x0aXAnLFxuICAgICAgJ2FyaWEtaGlkZGVuJzogdHJ1ZSxcbiAgICAgICdkYXRhLWlzLWFjdGl2ZSc6IGZhbHNlLFxuICAgICAgJ2RhdGEtaXMtZm9jdXMnOiBmYWxzZSxcbiAgICAgICdpZCc6IGlkXG4gICAgfSk7XG4gICAgcmV0dXJuICR0ZW1wbGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGlmIGEgY29sbGlzaW9uIGV2ZW50IGlzIGRldGVjdGVkLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcG9zaXRpb24gLSBwb3NpdGlvbmluZyBjbGFzcyB0byB0cnlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXBvc2l0aW9uKHBvc2l0aW9uKSB7XG4gICAgdGhpcy51c2VkUG9zaXRpb25zLnB1c2gocG9zaXRpb24gPyBwb3NpdGlvbiA6ICdib3R0b20nKTtcblxuICAgIC8vZGVmYXVsdCwgdHJ5IHN3aXRjaGluZyB0byBvcHBvc2l0ZSBzaWRlXG4gICAgaWYgKCFwb3NpdGlvbiAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ3RvcCcpIDwgMCkpIHtcbiAgICAgIHRoaXMudGVtcGxhdGUuYWRkQ2xhc3MoJ3RvcCcpO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICd0b3AnICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignYm90dG9tJykgPCAwKSkge1xuICAgICAgdGhpcy50ZW1wbGF0ZS5yZW1vdmVDbGFzcyhwb3NpdGlvbik7XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2xlZnQnICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZigncmlnaHQnKSA8IDApKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLnJlbW92ZUNsYXNzKHBvc2l0aW9uKVxuICAgICAgICAgIC5hZGRDbGFzcygncmlnaHQnKTtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignbGVmdCcpIDwgMCkpIHtcbiAgICAgIHRoaXMudGVtcGxhdGUucmVtb3ZlQ2xhc3MocG9zaXRpb24pXG4gICAgICAgICAgLmFkZENsYXNzKCdsZWZ0Jyk7XG4gICAgfVxuXG4gICAgLy9pZiBkZWZhdWx0IGNoYW5nZSBkaWRuJ3Qgd29yaywgdHJ5IGJvdHRvbSBvciBsZWZ0IGZpcnN0XG4gICAgZWxzZSBpZiAoIXBvc2l0aW9uICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZigndG9wJykgPiAtMSkgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPCAwKSkge1xuICAgICAgdGhpcy50ZW1wbGF0ZS5hZGRDbGFzcygnbGVmdCcpO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICd0b3AnICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignYm90dG9tJykgPiAtMSkgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPCAwKSkge1xuICAgICAgdGhpcy50ZW1wbGF0ZS5yZW1vdmVDbGFzcyhwb3NpdGlvbilcbiAgICAgICAgICAuYWRkQ2xhc3MoJ2xlZnQnKTtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAnbGVmdCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdyaWdodCcpID4gLTEpICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignYm90dG9tJykgPCAwKSkge1xuICAgICAgdGhpcy50ZW1wbGF0ZS5yZW1vdmVDbGFzcyhwb3NpdGlvbik7XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ3JpZ2h0JyAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2xlZnQnKSA+IC0xKSAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbScpIDwgMCkpIHtcbiAgICAgIHRoaXMudGVtcGxhdGUucmVtb3ZlQ2xhc3MocG9zaXRpb24pO1xuICAgIH1cbiAgICAvL2lmIG5vdGhpbmcgY2xlYXJlZCwgc2V0IHRvIGJvdHRvbVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy50ZW1wbGF0ZS5yZW1vdmVDbGFzcyhwb3NpdGlvbik7XG4gICAgfVxuICAgIHRoaXMuY2xhc3NDaGFuZ2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ZXItLTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRzIHRoZSBwb3NpdGlvbiBjbGFzcyBvZiBhbiBlbGVtZW50IGFuZCByZWN1cnNpdmVseSBjYWxscyBpdHNlbGYgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgcG9zc2libGUgcG9zaXRpb25zIHRvIGF0dGVtcHQsIG9yIHRoZSB0b29sdGlwIGVsZW1lbnQgaXMgbm8gbG9uZ2VyIGNvbGxpZGluZy5cbiAgICogaWYgdGhlIHRvb2x0aXAgaXMgbGFyZ2VyIHRoYW4gdGhlIHNjcmVlbiB3aWR0aCwgZGVmYXVsdCB0byBmdWxsIHdpZHRoIC0gYW55IHVzZXIgc2VsZWN0ZWQgbWFyZ2luXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0UG9zaXRpb24oKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fZ2V0UG9zaXRpb25DbGFzcyh0aGlzLnRlbXBsYXRlKSxcbiAgICAgICAgJHRpcERpbXMgPSBGb3VuZGF0aW9uLkJveC5HZXREaW1lbnNpb25zKHRoaXMudGVtcGxhdGUpLFxuICAgICAgICAkYW5jaG9yRGltcyA9IEZvdW5kYXRpb24uQm94LkdldERpbWVuc2lvbnModGhpcy4kZWxlbWVudCksXG4gICAgICAgIGRpcmVjdGlvbiA9IChwb3NpdGlvbiA9PT0gJ2xlZnQnID8gJ2xlZnQnIDogKChwb3NpdGlvbiA9PT0gJ3JpZ2h0JykgPyAnbGVmdCcgOiAndG9wJykpLFxuICAgICAgICBwYXJhbSA9IChkaXJlY3Rpb24gPT09ICd0b3AnKSA/ICdoZWlnaHQnIDogJ3dpZHRoJyxcbiAgICAgICAgb2Zmc2V0ID0gKHBhcmFtID09PSAnaGVpZ2h0JykgPyB0aGlzLm9wdGlvbnMudk9mZnNldCA6IHRoaXMub3B0aW9ucy5oT2Zmc2V0LFxuICAgICAgICBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoKCR0aXBEaW1zLndpZHRoID49ICR0aXBEaW1zLndpbmRvd0RpbXMud2lkdGgpIHx8ICghdGhpcy5jb3VudGVyICYmICFGb3VuZGF0aW9uLkJveC5JbU5vdFRvdWNoaW5nWW91KHRoaXMudGVtcGxhdGUpKSkge1xuICAgICAgdGhpcy50ZW1wbGF0ZS5vZmZzZXQoRm91bmRhdGlvbi5Cb3guR2V0T2Zmc2V0cyh0aGlzLnRlbXBsYXRlLCB0aGlzLiRlbGVtZW50LCAnY2VudGVyIGJvdHRvbScsIHRoaXMub3B0aW9ucy52T2Zmc2V0LCB0aGlzLm9wdGlvbnMuaE9mZnNldCwgdHJ1ZSkpLmNzcyh7XG4gICAgICAvLyB0aGlzLiRlbGVtZW50Lm9mZnNldChGb3VuZGF0aW9uLkdldE9mZnNldHModGhpcy50ZW1wbGF0ZSwgdGhpcy4kZWxlbWVudCwgJ2NlbnRlciBib3R0b20nLCB0aGlzLm9wdGlvbnMudk9mZnNldCwgdGhpcy5vcHRpb25zLmhPZmZzZXQsIHRydWUpKS5jc3Moe1xuICAgICAgICAnd2lkdGgnOiAkYW5jaG9yRGltcy53aW5kb3dEaW1zLndpZHRoIC0gKHRoaXMub3B0aW9ucy5oT2Zmc2V0ICogMiksXG4gICAgICAgICdoZWlnaHQnOiAnYXV0bydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMudGVtcGxhdGUub2Zmc2V0KEZvdW5kYXRpb24uQm94LkdldE9mZnNldHModGhpcy50ZW1wbGF0ZSwgdGhpcy4kZWxlbWVudCwnY2VudGVyICcgKyAocG9zaXRpb24gfHwgJ2JvdHRvbScpLCB0aGlzLm9wdGlvbnMudk9mZnNldCwgdGhpcy5vcHRpb25zLmhPZmZzZXQpKTtcblxuICAgIHdoaWxlKCFGb3VuZGF0aW9uLkJveC5JbU5vdFRvdWNoaW5nWW91KHRoaXMudGVtcGxhdGUpICYmIHRoaXMuY291bnRlcikge1xuICAgICAgdGhpcy5fcmVwb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICB0aGlzLl9zZXRQb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXZlYWxzIHRoZSB0b29sdGlwLCBhbmQgZmlyZXMgYW4gZXZlbnQgdG8gY2xvc2UgYW55IG90aGVyIG9wZW4gdG9vbHRpcHMgb24gdGhlIHBhZ2VcbiAgICogQGZpcmVzIFRvb2x0aXAjY2xvc2VtZVxuICAgKiBAZmlyZXMgVG9vbHRpcCNzaG93XG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNob3dPbiAhPT0gJ2FsbCcgJiYgIUZvdW5kYXRpb24uTWVkaWFRdWVyeS5hdExlYXN0KHRoaXMub3B0aW9ucy5zaG93T24pKSB7XG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdUaGUgc2NyZWVuIGlzIHRvbyBzbWFsbCB0byBkaXNwbGF5IHRoaXMgdG9vbHRpcCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdGhpcy50ZW1wbGF0ZS5jc3MoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJykuc2hvdygpO1xuICAgIHRoaXMuX3NldFBvc2l0aW9uKCk7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB0byBjbG9zZSBhbGwgb3RoZXIgb3BlbiB0b29sdGlwcyBvbiB0aGUgcGFnZVxuICAgICAqIEBldmVudCBDbG9zZW1lI3Rvb2x0aXBcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Nsb3NlbWUuemYudG9vbHRpcCcsIHRoaXMudGVtcGxhdGUuYXR0cignaWQnKSk7XG5cblxuICAgIHRoaXMudGVtcGxhdGUuYXR0cih7XG4gICAgICAnZGF0YS1pcy1hY3RpdmUnOiB0cnVlLFxuICAgICAgJ2FyaWEtaGlkZGVuJzogZmFsc2VcbiAgICB9KTtcbiAgICBfdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy50ZW1wbGF0ZSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5zdG9wKCkuaGlkZSgpLmNzcygndmlzaWJpbGl0eScsICcnKS5mYWRlSW4odGhpcy5vcHRpb25zLmZhZGVJbkR1cmF0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIC8vbWF5YmUgZG8gc3R1ZmY/XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgdG9vbHRpcCBpcyBzaG93blxuICAgICAqIEBldmVudCBUb29sdGlwI3Nob3dcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Nob3cuemYudG9vbHRpcCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGVzIHRoZSBjdXJyZW50IHRvb2x0aXAsIGFuZCByZXNldHMgdGhlIHBvc2l0aW9uaW5nIGNsYXNzIGlmIGl0IHdhcyBjaGFuZ2VkIGR1ZSB0byBjb2xsaXNpb25cbiAgICogQGZpcmVzIFRvb2x0aXAjaGlkZVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGhpZGUoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2hpZGluZycsIHRoaXMuJGVsZW1lbnQuZGF0YSgneWV0aS1ib3gnKSk7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLnRlbXBsYXRlLnN0b3AoKS5hdHRyKHtcbiAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICAnZGF0YS1pcy1hY3RpdmUnOiBmYWxzZVxuICAgIH0pLmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVPdXREdXJhdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICBfdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgX3RoaXMuaXNDbGljayA9IGZhbHNlO1xuICAgICAgaWYgKF90aGlzLmNsYXNzQ2hhbmdlZCkge1xuICAgICAgICBfdGhpcy50ZW1wbGF0ZVxuICAgICAgICAgICAgIC5yZW1vdmVDbGFzcyhfdGhpcy5fZ2V0UG9zaXRpb25DbGFzcyhfdGhpcy50ZW1wbGF0ZSkpXG4gICAgICAgICAgICAgLmFkZENsYXNzKF90aGlzLm9wdGlvbnMucG9zaXRpb25DbGFzcyk7XG5cbiAgICAgICBfdGhpcy51c2VkUG9zaXRpb25zID0gW107XG4gICAgICAgX3RoaXMuY291bnRlciA9IDQ7XG4gICAgICAgX3RoaXMuY2xhc3NDaGFuZ2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogZmlyZXMgd2hlbiB0aGUgdG9vbHRpcCBpcyBoaWRkZW5cbiAgICAgKiBAZXZlbnQgVG9vbHRpcCNoaWRlXG4gICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdoaWRlLnpmLnRvb2x0aXAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhZGRzIGV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIHRvb2x0aXAgYW5kIGl0cyBhbmNob3JcbiAgICogVE9ETyBjb21iaW5lIHNvbWUgb2YgdGhlIGxpc3RlbmVycyBsaWtlIGZvY3VzIGFuZCBtb3VzZWVudGVyLCBldGMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyICR0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGU7XG4gICAgdmFyIGlzRm9jdXMgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5vcHRpb25zLmRpc2FibGVIb3Zlcikge1xuXG4gICAgICB0aGlzLiRlbGVtZW50XG4gICAgICAub24oJ21vdXNlZW50ZXIuemYudG9vbHRpcCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCFfdGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgIF90aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgX3RoaXMuc2hvdygpO1xuICAgICAgICAgIH0sIF90aGlzLm9wdGlvbnMuaG92ZXJEZWxheSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ21vdXNlbGVhdmUuemYudG9vbHRpcCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVvdXQpO1xuICAgICAgICBpZiAoIWlzRm9jdXMgfHwgKCFfdGhpcy5pc0NsaWNrICYmIF90aGlzLm9wdGlvbnMuY2xpY2tPcGVuKSkge1xuICAgICAgICAgIF90aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbGlja09wZW4pIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ21vdXNlZG93bi56Zi50b29sdGlwJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoX3RoaXMuaXNDbGljaykge1xuICAgICAgICAgIF90aGlzLmhpZGUoKTtcbiAgICAgICAgICAvLyBfdGhpcy5pc0NsaWNrID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuaXNDbGljayA9IHRydWU7XG4gICAgICAgICAgaWYgKChfdGhpcy5vcHRpb25zLmRpc2FibGVIb3ZlciB8fCAhX3RoaXMuJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnKSkgJiYgIV90aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICBfdGhpcy5zaG93KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5kaXNhYmxlRm9yVG91Y2gpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5vbigndGFwLnpmLnRvb2x0aXAgdG91Y2hlbmQuemYudG9vbHRpcCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgX3RoaXMuaXNBY3RpdmUgPyBfdGhpcy5oaWRlKCkgOiBfdGhpcy5zaG93KCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50Lm9uKHtcbiAgICAgIC8vICd0b2dnbGUuemYudHJpZ2dlcic6IHRoaXMudG9nZ2xlLmJpbmQodGhpcyksXG4gICAgICAvLyAnY2xvc2UuemYudHJpZ2dlcic6IHRoaXMuaGlkZS5iaW5kKHRoaXMpXG4gICAgICAnY2xvc2UuemYudHJpZ2dlcic6IHRoaXMuaGlkZS5iaW5kKHRoaXMpXG4gICAgfSk7XG5cbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAub24oJ2ZvY3VzLnpmLnRvb2x0aXAnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlzRm9jdXMgPSB0cnVlO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhfdGhpcy5pc0NsaWNrKTtcbiAgICAgICAgaWYgKF90aGlzLmlzQ2xpY2spIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gJCh3aW5kb3cpXG4gICAgICAgICAgX3RoaXMuc2hvdygpO1xuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAub24oJ2ZvY3Vzb3V0LnpmLnRvb2x0aXAnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlzRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaXNDbGljayA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oaWRlKCk7XG4gICAgICB9KVxuXG4gICAgICAub24oJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKF90aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgX3RoaXMuX3NldFBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGFkZHMgYSB0b2dnbGUgbWV0aG9kLCBpbiBhZGRpdGlvbiB0byB0aGUgc3RhdGljIHNob3coKSAmIGhpZGUoKSBmdW5jdGlvbnNcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgdG9vbHRpcCwgcmVtb3ZlcyB0ZW1wbGF0ZSBlbGVtZW50IGZyb20gdGhlIHZpZXcuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ3RpdGxlJywgdGhpcy50ZW1wbGF0ZS50ZXh0KCkpXG4gICAgICAgICAgICAgICAgIC5vZmYoJy56Zi50cmlnZ2VyIC56Zi50b290aXAnKVxuICAgICAgICAgICAgICAgIC8vICAucmVtb3ZlQ2xhc3MoJ2hhcy10aXAnKVxuICAgICAgICAgICAgICAgICAucmVtb3ZlQXR0cignYXJpYS1kZXNjcmliZWRieScpXG4gICAgICAgICAgICAgICAgIC5yZW1vdmVBdHRyKCdkYXRhLXlldGktYm94JylcbiAgICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtdG9nZ2xlJylcbiAgICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtcmVzaXplJyk7XG5cbiAgICB0aGlzLnRlbXBsYXRlLnJlbW92ZSgpO1xuXG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cblRvb2x0aXAuZGVmYXVsdHMgPSB7XG4gIGRpc2FibGVGb3JUb3VjaDogZmFsc2UsXG4gIC8qKlxuICAgKiBUaW1lLCBpbiBtcywgYmVmb3JlIGEgdG9vbHRpcCBzaG91bGQgb3BlbiBvbiBob3Zlci5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAyMDBcbiAgICovXG4gIGhvdmVyRGVsYXk6IDIwMCxcbiAgLyoqXG4gICAqIFRpbWUsIGluIG1zLCBhIHRvb2x0aXAgc2hvdWxkIHRha2UgdG8gZmFkZSBpbnRvIHZpZXcuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMTUwXG4gICAqL1xuICBmYWRlSW5EdXJhdGlvbjogMTUwLFxuICAvKipcbiAgICogVGltZSwgaW4gbXMsIGEgdG9vbHRpcCBzaG91bGQgdGFrZSB0byBmYWRlIG91dCBvZiB2aWV3LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDE1MFxuICAgKi9cbiAgZmFkZU91dER1cmF0aW9uOiAxNTAsXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBob3ZlciBldmVudHMgZnJvbSBvcGVuaW5nIHRoZSB0b29sdGlwIGlmIHNldCB0byB0cnVlXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIGRpc2FibGVIb3ZlcjogZmFsc2UsXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhZGR0aW9uYWwgY2xhc3NlcyB0byBhcHBseSB0byB0aGUgdG9vbHRpcCB0ZW1wbGF0ZSBvbiBpbml0LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdteS1jb29sLXRpcC1jbGFzcydcbiAgICovXG4gIHRlbXBsYXRlQ2xhc3NlczogJycsXG4gIC8qKlxuICAgKiBOb24tb3B0aW9uYWwgY2xhc3MgYWRkZWQgdG8gdG9vbHRpcCB0ZW1wbGF0ZXMuIEZvdW5kYXRpb24gZGVmYXVsdCBpcyAndG9vbHRpcCcuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ3Rvb2x0aXAnXG4gICAqL1xuICB0b29sdGlwQ2xhc3M6ICd0b29sdGlwJyxcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIHRvb2x0aXAgYW5jaG9yIGVsZW1lbnQuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ2hhcy10aXAnXG4gICAqL1xuICB0cmlnZ2VyQ2xhc3M6ICdoYXMtdGlwJyxcbiAgLyoqXG4gICAqIE1pbmltdW0gYnJlYWtwb2ludCBzaXplIGF0IHdoaWNoIHRvIG9wZW4gdGhlIHRvb2x0aXAuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ3NtYWxsJ1xuICAgKi9cbiAgc2hvd09uOiAnc21hbGwnLFxuICAvKipcbiAgICogQ3VzdG9tIHRlbXBsYXRlIHRvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgbWFya3VwIGZvciB0b29sdGlwLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICcmbHQ7ZGl2IGNsYXNzPVwidG9vbHRpcFwiJmd0OyZsdDsvZGl2Jmd0OydcbiAgICovXG4gIHRlbXBsYXRlOiAnJyxcbiAgLyoqXG4gICAqIFRleHQgZGlzcGxheWVkIGluIHRoZSB0b29sdGlwIHRlbXBsYXRlIG9uIG9wZW4uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ1NvbWUgY29vbCBzcGFjZSBmYWN0IGhlcmUuJ1xuICAgKi9cbiAgdGlwVGV4dDogJycsXG4gIHRvdWNoQ2xvc2VUZXh0OiAnVGFwIHRvIGNsb3NlLicsXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIHRvb2x0aXAgdG8gcmVtYWluIG9wZW4gaWYgdHJpZ2dlcmVkIHdpdGggYSBjbGljayBvciB0b3VjaCBldmVudC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSB0cnVlXG4gICAqL1xuICBjbGlja09wZW46IHRydWUsXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHBvc2l0aW9uaW5nIGNsYXNzZXMsIHNldCBieSB0aGUgSlNcbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAndG9wJ1xuICAgKi9cbiAgcG9zaXRpb25DbGFzczogJycsXG4gIC8qKlxuICAgKiBEaXN0YW5jZSwgaW4gcGl4ZWxzLCB0aGUgdGVtcGxhdGUgc2hvdWxkIHB1c2ggYXdheSBmcm9tIHRoZSBhbmNob3Igb24gdGhlIFkgYXhpcy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAxMFxuICAgKi9cbiAgdk9mZnNldDogMTAsXG4gIC8qKlxuICAgKiBEaXN0YW5jZSwgaW4gcGl4ZWxzLCB0aGUgdGVtcGxhdGUgc2hvdWxkIHB1c2ggYXdheSBmcm9tIHRoZSBhbmNob3Igb24gdGhlIFggYXhpcywgaWYgYWxpZ25lZCB0byBhIHNpZGUuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMTJcbiAgICovXG4gIGhPZmZzZXQ6IDEyXG59O1xuXG4vKipcbiAqIFRPRE8gdXRpbGl6ZSByZXNpemUgZXZlbnQgdHJpZ2dlclxuICovXG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihUb29sdGlwLCAnVG9vbHRpcCcpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIFBvbHlmaWxsIGZvciByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbihmdW5jdGlvbigpIHtcbiAgaWYgKCFEYXRlLm5vdylcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH07XG5cbiAgdmFyIHZlbmRvcnMgPSBbJ3dlYmtpdCcsICdtb3onXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZW5kb3JzLmxlbmd0aCAmJiAhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKytpKSB7XG4gICAgICB2YXIgdnAgPSB2ZW5kb3JzW2ldO1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvd1t2cCsnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSAod2luZG93W3ZwKydDYW5jZWxBbmltYXRpb25GcmFtZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB3aW5kb3dbdnArJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddKTtcbiAgfVxuICBpZiAoL2lQKGFkfGhvbmV8b2QpLipPUyA2Ly50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KVxuICAgIHx8ICF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8ICF3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICB2YXIgbGFzdFRpbWUgPSAwO1xuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdmFyIG5leHRUaW1lID0gTWF0aC5tYXgobGFzdFRpbWUgKyAxNiwgbm93KTtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKGxhc3RUaW1lID0gbmV4dFRpbWUpOyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0VGltZSAtIG5vdyk7XG4gICAgfTtcbiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBjbGVhclRpbWVvdXQ7XG4gIH1cbn0pKCk7XG5cbnZhciBpbml0Q2xhc3NlcyAgID0gWydtdWktZW50ZXInLCAnbXVpLWxlYXZlJ107XG52YXIgYWN0aXZlQ2xhc3NlcyA9IFsnbXVpLWVudGVyLWFjdGl2ZScsICdtdWktbGVhdmUtYWN0aXZlJ107XG5cbi8vIEZpbmQgdGhlIHJpZ2h0IFwidHJhbnNpdGlvbmVuZFwiIGV2ZW50IGZvciB0aGlzIGJyb3dzZXJcbnZhciBlbmRFdmVudCA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHRyYW5zaXRpb25zID0ge1xuICAgICd0cmFuc2l0aW9uJzogJ3RyYW5zaXRpb25lbmQnLFxuICAgICdXZWJraXRUcmFuc2l0aW9uJzogJ3dlYmtpdFRyYW5zaXRpb25FbmQnLFxuICAgICdNb3pUcmFuc2l0aW9uJzogJ3RyYW5zaXRpb25lbmQnLFxuICAgICdPVHJhbnNpdGlvbic6ICdvdHJhbnNpdGlvbmVuZCdcbiAgfVxuICB2YXIgZWxlbSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICBmb3IgKHZhciB0IGluIHRyYW5zaXRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBlbGVtLnN0eWxlW3RdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRyYW5zaXRpb25zW3RdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSkoKTtcblxuZnVuY3Rpb24gYW5pbWF0ZShpc0luLCBlbGVtZW50LCBhbmltYXRpb24sIGNiKSB7XG4gIGVsZW1lbnQgPSAkKGVsZW1lbnQpLmVxKDApO1xuXG4gIGlmICghZWxlbWVudC5sZW5ndGgpIHJldHVybjtcblxuICBpZiAoZW5kRXZlbnQgPT09IG51bGwpIHtcbiAgICBpc0luID8gZWxlbWVudC5zaG93KCkgOiBlbGVtZW50LmhpZGUoKTtcbiAgICBjYigpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBpbml0Q2xhc3MgPSBpc0luID8gaW5pdENsYXNzZXNbMF0gOiBpbml0Q2xhc3Nlc1sxXTtcbiAgdmFyIGFjdGl2ZUNsYXNzID0gaXNJbiA/IGFjdGl2ZUNsYXNzZXNbMF0gOiBhY3RpdmVDbGFzc2VzWzFdO1xuXG4gIC8vIFNldCB1cCB0aGUgYW5pbWF0aW9uXG4gIHJlc2V0KCk7XG4gIGVsZW1lbnQuYWRkQ2xhc3MoYW5pbWF0aW9uKTtcbiAgZWxlbWVudC5jc3MoJ3RyYW5zaXRpb24nLCAnbm9uZScpO1xuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7XG4gICAgZWxlbWVudC5hZGRDbGFzcyhpbml0Q2xhc3MpO1xuICAgIGlmIChpc0luKSBlbGVtZW50LnNob3coKTtcbiAgfSk7XG5cbiAgLy8gU3RhcnQgdGhlIGFuaW1hdGlvblxuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7XG4gICAgZWxlbWVudFswXS5vZmZzZXRXaWR0aDtcbiAgICBlbGVtZW50LmNzcygndHJhbnNpdGlvbicsICcnKTtcbiAgICBlbGVtZW50LmFkZENsYXNzKGFjdGl2ZUNsYXNzKTtcbiAgfSk7XG5cbiAgLy8gQ2xlYW4gdXAgdGhlIGFuaW1hdGlvbiB3aGVuIGl0IGZpbmlzaGVzXG4gIGVsZW1lbnQub25lKCd0cmFuc2l0aW9uZW5kJywgZmluaXNoKTtcblxuICAvLyBIaWRlcyB0aGUgZWxlbWVudCAoZm9yIG91dCBhbmltYXRpb25zKSwgcmVzZXRzIHRoZSBlbGVtZW50LCBhbmQgcnVucyBhIGNhbGxiYWNrXG4gIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICBpZiAoIWlzSW4pIGVsZW1lbnQuaGlkZSgpO1xuICAgIHJlc2V0KCk7XG4gICAgaWYgKGNiKSBjYi5hcHBseShlbGVtZW50KTtcbiAgfVxuXG4gIC8vIFJlc2V0cyB0cmFuc2l0aW9ucyBhbmQgcmVtb3ZlcyBtb3Rpb24tc3BlY2lmaWMgY2xhc3Nlc1xuICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBlbGVtZW50WzBdLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IDA7XG4gICAgZWxlbWVudC5yZW1vdmVDbGFzcyhpbml0Q2xhc3MgKyAnICcgKyBhY3RpdmVDbGFzcyArICcgJyArIGFuaW1hdGlvbik7XG4gIH1cbn1cblxudmFyIE1vdGlvblVJID0ge1xuICBhbmltYXRlSW46IGZ1bmN0aW9uKGVsZW1lbnQsIGFuaW1hdGlvbiwgY2IpIHtcbiAgICBhbmltYXRlKHRydWUsIGVsZW1lbnQsIGFuaW1hdGlvbiwgY2IpO1xuICB9LFxuXG4gIGFuaW1hdGVPdXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGFuaW1hdGlvbiwgY2IpIHtcbiAgICBhbmltYXRlKGZhbHNlLCBlbGVtZW50LCBhbmltYXRpb24sIGNiKTtcbiAgfVxufVxuIiwialF1ZXJ5KCAnaWZyYW1lW3NyYyo9XCJ5b3V0dWJlLmNvbVwiXScpLndyYXAoXCI8ZGl2IGNsYXNzPSdmbGV4LXZpZGVvIHdpZGVzY3JlZW4nLz5cIik7XG5qUXVlcnkoICdpZnJhbWVbc3JjKj1cInZpbWVvLmNvbVwiXScpLndyYXAoXCI8ZGl2IGNsYXNzPSdmbGV4LXZpZGVvIHdpZGVzY3JlZW4gdmltZW8nLz5cIik7XG4iLCJqUXVlcnkoZG9jdW1lbnQpLmZvdW5kYXRpb24oKTtcbiIsIi8vIEpveXJpZGUgZGVtb1xuJCgnI3N0YXJ0LWpyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICQoZG9jdW1lbnQpLmZvdW5kYXRpb24oJ2pveXJpZGUnLCdzdGFydCcpO1xufSk7IixudWxsLG51bGwsIlxuJCh3aW5kb3cpLmJpbmQoJyBsb2FkIHJlc2l6ZSBvcmllbnRhdGlvbkNoYW5nZSAnLCBmdW5jdGlvbiAoKSB7XG4gICB2YXIgZm9vdGVyID0gJChcIiNmb290ZXItY29udGFpbmVyXCIpO1xuICAgdmFyIHBvcyA9IGZvb3Rlci5wb3NpdGlvbigpO1xuICAgdmFyIGhlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKTtcbiAgIGhlaWdodCA9IGhlaWdodCAtIHBvcy50b3A7XG4gICBoZWlnaHQgPSBoZWlnaHQgLSBmb290ZXIuaGVpZ2h0KCkgLTE7XG5cbiAgIGZ1bmN0aW9uIHN0aWNreUZvb3RlcigpIHtcbiAgICAgZm9vdGVyLmNzcyh7XG4gICAgICAgICAnbWFyZ2luLXRvcCc6IGhlaWdodCArICdweCdcbiAgICAgfSk7XG4gICB9XG5cbiAgIGlmIChoZWlnaHQgPiAwKSB7XG4gICAgIHN0aWNreUZvb3RlcigpO1xuICAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvdW5kYXRpb24uY29yZS5qcyIsImZvdW5kYXRpb24udXRpbC5ib3guanMiLCJmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmQuanMiLCJmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeS5qcyIsImZvdW5kYXRpb24udXRpbC5tb3Rpb24uanMiLCJmb3VuZGF0aW9uLnV0aWwubmVzdC5qcyIsImZvdW5kYXRpb24udXRpbC50aW1lckFuZEltYWdlTG9hZGVyLmpzIiwiZm91bmRhdGlvbi51dGlsLnRvdWNoLmpzIiwiZm91bmRhdGlvbi51dGlsLnRyaWdnZXJzLmpzIiwiZm91bmRhdGlvbi5hYmlkZS5qcyIsImZvdW5kYXRpb24uYWNjb3JkaW9uLmpzIiwiZm91bmRhdGlvbi5hY2NvcmRpb25NZW51LmpzIiwiZm91bmRhdGlvbi5kcmlsbGRvd24uanMiLCJmb3VuZGF0aW9uLmRyb3Bkb3duLmpzIiwiZm91bmRhdGlvbi5kcm9wZG93bk1lbnUuanMiLCJmb3VuZGF0aW9uLmVxdWFsaXplci5qcyIsImZvdW5kYXRpb24uaW50ZXJjaGFuZ2UuanMiLCJmb3VuZGF0aW9uLm1hZ2VsbGFuLmpzIiwiZm91bmRhdGlvbi5vZmZjYW52YXMuanMiLCJmb3VuZGF0aW9uLm9yYml0LmpzIiwiZm91bmRhdGlvbi5yZXNwb25zaXZlTWVudS5qcyIsImZvdW5kYXRpb24ucmVzcG9uc2l2ZVRvZ2dsZS5qcyIsImZvdW5kYXRpb24ucmV2ZWFsLmpzIiwiZm91bmRhdGlvbi5zbGlkZXIuanMiLCJmb3VuZGF0aW9uLnN0aWNreS5qcyIsImZvdW5kYXRpb24udGFicy5qcyIsImZvdW5kYXRpb24udG9nZ2xlci5qcyIsImZvdW5kYXRpb24udG9vbHRpcC5qcyIsIm1vdGlvbi11aS5qcyIsImZsZXgtdmlkZW8uanMiLCJpbml0LWZvdW5kYXRpb24uanMiLCJqb3lyaWRlLWRlbW8uanMiLCJvZmZDYW52YXMuanMiLCJyZXNwb25zaXZlLXZpZGVvLmpzIiwic3RpY2t5Zm9vdGVyLmpzIl0sIm5hbWVzIjpbIiQiLCJGT1VOREFUSU9OX1ZFUlNJT04iLCJGb3VuZGF0aW9uIiwidmVyc2lvbiIsIl9wbHVnaW5zIiwiX3V1aWRzIiwicnRsIiwiYXR0ciIsInBsdWdpbiIsIm5hbWUiLCJjbGFzc05hbWUiLCJmdW5jdGlvbk5hbWUiLCJhdHRyTmFtZSIsImh5cGhlbmF0ZSIsInJlZ2lzdGVyUGx1Z2luIiwicGx1Z2luTmFtZSIsImNvbnN0cnVjdG9yIiwidG9Mb3dlckNhc2UiLCJ1dWlkIiwiR2V0WW9EaWdpdHMiLCIkZWxlbWVudCIsImRhdGEiLCJ0cmlnZ2VyIiwicHVzaCIsInVucmVnaXN0ZXJQbHVnaW4iLCJzcGxpY2UiLCJpbmRleE9mIiwicmVtb3ZlQXR0ciIsInJlbW92ZURhdGEiLCJwcm9wIiwicmVJbml0IiwicGx1Z2lucyIsImlzSlEiLCJlYWNoIiwiX2luaXQiLCJ0eXBlIiwiX3RoaXMiLCJmbnMiLCJwbGdzIiwiZm9yRWFjaCIsInAiLCJmb3VuZGF0aW9uIiwiT2JqZWN0Iiwia2V5cyIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsImxlbmd0aCIsIm5hbWVzcGFjZSIsIk1hdGgiLCJyb3VuZCIsInBvdyIsInJhbmRvbSIsInRvU3RyaW5nIiwic2xpY2UiLCJyZWZsb3ciLCJlbGVtIiwiaSIsIiRlbGVtIiwiZmluZCIsImFkZEJhY2siLCIkZWwiLCJvcHRzIiwid2FybiIsInRoaW5nIiwic3BsaXQiLCJlIiwib3B0IiwibWFwIiwiZWwiLCJ0cmltIiwicGFyc2VWYWx1ZSIsImVyIiwiZ2V0Rm5OYW1lIiwidHJhbnNpdGlvbmVuZCIsInRyYW5zaXRpb25zIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiZW5kIiwidCIsInN0eWxlIiwic2V0VGltZW91dCIsInRyaWdnZXJIYW5kbGVyIiwidXRpbCIsInRocm90dGxlIiwiZnVuYyIsImRlbGF5IiwidGltZXIiLCJjb250ZXh0IiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5IiwibWV0aG9kIiwiJG1ldGEiLCIkbm9KUyIsImFwcGVuZFRvIiwiaGVhZCIsInJlbW92ZUNsYXNzIiwiTWVkaWFRdWVyeSIsIkFycmF5IiwicHJvdG90eXBlIiwiY2FsbCIsInBsdWdDbGFzcyIsInVuZGVmaW5lZCIsIlJlZmVyZW5jZUVycm9yIiwiVHlwZUVycm9yIiwid2luZG93IiwiZm4iLCJEYXRlIiwibm93IiwiZ2V0VGltZSIsInZlbmRvcnMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ2cCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImxhc3RUaW1lIiwiY2FsbGJhY2siLCJuZXh0VGltZSIsIm1heCIsImNsZWFyVGltZW91dCIsInBlcmZvcm1hbmNlIiwic3RhcnQiLCJGdW5jdGlvbiIsImJpbmQiLCJvVGhpcyIsImFBcmdzIiwiZlRvQmluZCIsImZOT1AiLCJmQm91bmQiLCJjb25jYXQiLCJmdW5jTmFtZVJlZ2V4IiwicmVzdWx0cyIsImV4ZWMiLCJzdHIiLCJpc05hTiIsInBhcnNlRmxvYXQiLCJyZXBsYWNlIiwialF1ZXJ5IiwiQm94IiwiSW1Ob3RUb3VjaGluZ1lvdSIsIkdldERpbWVuc2lvbnMiLCJHZXRPZmZzZXRzIiwiZWxlbWVudCIsInBhcmVudCIsImxyT25seSIsInRiT25seSIsImVsZURpbXMiLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJwYXJEaW1zIiwib2Zmc2V0IiwiaGVpZ2h0Iiwid2lkdGgiLCJ3aW5kb3dEaW1zIiwiYWxsRGlycyIsIkVycm9yIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInBhclJlY3QiLCJwYXJlbnROb2RlIiwid2luUmVjdCIsImJvZHkiLCJ3aW5ZIiwicGFnZVlPZmZzZXQiLCJ3aW5YIiwicGFnZVhPZmZzZXQiLCJwYXJlbnREaW1zIiwiYW5jaG9yIiwicG9zaXRpb24iLCJ2T2Zmc2V0IiwiaE9mZnNldCIsImlzT3ZlcmZsb3ciLCIkZWxlRGltcyIsIiRhbmNob3JEaW1zIiwia2V5Q29kZXMiLCJjb21tYW5kcyIsIktleWJvYXJkIiwiZ2V0S2V5Q29kZXMiLCJwYXJzZUtleSIsImV2ZW50Iiwia2V5Iiwid2hpY2giLCJrZXlDb2RlIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwidG9VcHBlckNhc2UiLCJzaGlmdEtleSIsImN0cmxLZXkiLCJhbHRLZXkiLCJoYW5kbGVLZXkiLCJjb21wb25lbnQiLCJmdW5jdGlvbnMiLCJjb21tYW5kTGlzdCIsImNtZHMiLCJjb21tYW5kIiwibHRyIiwiZXh0ZW5kIiwicmV0dXJuVmFsdWUiLCJoYW5kbGVkIiwidW5oYW5kbGVkIiwiZmluZEZvY3VzYWJsZSIsImZpbHRlciIsImlzIiwicmVnaXN0ZXIiLCJjb21wb25lbnROYW1lIiwidHJhcEZvY3VzIiwiJGZvY3VzYWJsZSIsIiRmaXJzdEZvY3VzYWJsZSIsImVxIiwiJGxhc3RGb2N1c2FibGUiLCJvbiIsInRhcmdldCIsInByZXZlbnREZWZhdWx0IiwiZm9jdXMiLCJyZWxlYXNlRm9jdXMiLCJvZmYiLCJrY3MiLCJrIiwia2MiLCJkZWZhdWx0UXVlcmllcyIsImxhbmRzY2FwZSIsInBvcnRyYWl0IiwicmV0aW5hIiwicXVlcmllcyIsImN1cnJlbnQiLCJzZWxmIiwiZXh0cmFjdGVkU3R5bGVzIiwiY3NzIiwibmFtZWRRdWVyaWVzIiwicGFyc2VTdHlsZVRvT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJ2YWx1ZSIsIl9nZXRDdXJyZW50U2l6ZSIsIl93YXRjaGVyIiwiYXRMZWFzdCIsInNpemUiLCJxdWVyeSIsImdldCIsIm1hdGNoTWVkaWEiLCJtYXRjaGVzIiwibWF0Y2hlZCIsIm5ld1NpemUiLCJjdXJyZW50U2l6ZSIsInN0eWxlTWVkaWEiLCJtZWRpYSIsInNjcmlwdCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiaW5mbyIsImlkIiwiaW5zZXJ0QmVmb3JlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImN1cnJlbnRTdHlsZSIsIm1hdGNoTWVkaXVtIiwidGV4dCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwidGV4dENvbnRlbnQiLCJzdHlsZU9iamVjdCIsInJlZHVjZSIsInJldCIsInBhcmFtIiwicGFydHMiLCJ2YWwiLCJkZWNvZGVVUklDb21wb25lbnQiLCJpc0FycmF5IiwiaW5pdENsYXNzZXMiLCJhY3RpdmVDbGFzc2VzIiwiTW90aW9uIiwiYW5pbWF0ZUluIiwiYW5pbWF0aW9uIiwiY2IiLCJhbmltYXRlIiwiYW5pbWF0ZU91dCIsIk1vdmUiLCJkdXJhdGlvbiIsImFuaW0iLCJwcm9nIiwibW92ZSIsInRzIiwiaXNJbiIsImluaXRDbGFzcyIsImFjdGl2ZUNsYXNzIiwicmVzZXQiLCJhZGRDbGFzcyIsInNob3ciLCJvZmZzZXRXaWR0aCIsIm9uZSIsImZpbmlzaCIsImhpZGUiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJOZXN0IiwiRmVhdGhlciIsIm1lbnUiLCJpdGVtcyIsInN1Yk1lbnVDbGFzcyIsInN1Ykl0ZW1DbGFzcyIsImhhc1N1YkNsYXNzIiwiJGl0ZW0iLCIkc3ViIiwiY2hpbGRyZW4iLCJCdXJuIiwiVGltZXIiLCJvcHRpb25zIiwibmFtZVNwYWNlIiwicmVtYWluIiwiaXNQYXVzZWQiLCJyZXN0YXJ0IiwiaW5maW5pdGUiLCJwYXVzZSIsIm9uSW1hZ2VzTG9hZGVkIiwiaW1hZ2VzIiwidW5sb2FkZWQiLCJjb21wbGV0ZSIsInJlYWR5U3RhdGUiLCJzaW5nbGVJbWFnZUxvYWRlZCIsInNyYyIsInNwb3RTd2lwZSIsImVuYWJsZWQiLCJkb2N1bWVudEVsZW1lbnQiLCJtb3ZlVGhyZXNob2xkIiwidGltZVRocmVzaG9sZCIsInN0YXJ0UG9zWCIsInN0YXJ0UG9zWSIsInN0YXJ0VGltZSIsImVsYXBzZWRUaW1lIiwiaXNNb3ZpbmciLCJvblRvdWNoRW5kIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uVG91Y2hNb3ZlIiwieCIsInRvdWNoZXMiLCJwYWdlWCIsInkiLCJwYWdlWSIsImR4IiwiZHkiLCJkaXIiLCJhYnMiLCJvblRvdWNoU3RhcnQiLCJhZGRFdmVudExpc3RlbmVyIiwiaW5pdCIsInRlYXJkb3duIiwic3BlY2lhbCIsInN3aXBlIiwic2V0dXAiLCJub29wIiwiYWRkVG91Y2giLCJoYW5kbGVUb3VjaCIsImNoYW5nZWRUb3VjaGVzIiwiZmlyc3QiLCJldmVudFR5cGVzIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIiwic2ltdWxhdGVkRXZlbnQiLCJNb3VzZUV2ZW50Iiwic2NyZWVuWCIsInNjcmVlblkiLCJjbGllbnRYIiwiY2xpZW50WSIsImNyZWF0ZUV2ZW50IiwiaW5pdE1vdXNlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiTXV0YXRpb25PYnNlcnZlciIsInByZWZpeGVzIiwidHJpZ2dlcnMiLCJzdG9wUHJvcGFnYXRpb24iLCJmYWRlT3V0IiwiY2hlY2tMaXN0ZW5lcnMiLCJldmVudHNMaXN0ZW5lciIsInJlc2l6ZUxpc3RlbmVyIiwic2Nyb2xsTGlzdGVuZXIiLCJtdXRhdGVMaXN0ZW5lciIsImNsb3NlbWVMaXN0ZW5lciIsInlldGlCb3hlcyIsInBsdWdOYW1lcyIsImxpc3RlbmVycyIsImpvaW4iLCJwbHVnaW5JZCIsIm5vdCIsImRlYm91bmNlIiwiJG5vZGVzIiwibm9kZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGlzdGVuaW5nRWxlbWVudHNNdXRhdGlvbiIsIm11dGF0aW9uUmVjb3Jkc0xpc3QiLCIkdGFyZ2V0IiwiYXR0cmlidXRlTmFtZSIsImNsb3Nlc3QiLCJlbGVtZW50T2JzZXJ2ZXIiLCJvYnNlcnZlIiwiYXR0cmlidXRlcyIsImNoaWxkTGlzdCIsImNoYXJhY3RlckRhdGEiLCJzdWJ0cmVlIiwiYXR0cmlidXRlRmlsdGVyIiwiSUhlYXJZb3UiLCJBYmlkZSIsImRlZmF1bHRzIiwiJGlucHV0cyIsIl9ldmVudHMiLCJyZXNldEZvcm0iLCJ2YWxpZGF0ZUZvcm0iLCJ2YWxpZGF0ZU9uIiwidmFsaWRhdGVJbnB1dCIsImxpdmVWYWxpZGF0ZSIsInZhbGlkYXRlT25CbHVyIiwiaXNHb29kIiwiY2hlY2tlZCIsIiRlcnJvciIsInNpYmxpbmdzIiwiZm9ybUVycm9yU2VsZWN0b3IiLCIkbGFiZWwiLCIkZWxzIiwibGFiZWxzIiwiZmluZExhYmVsIiwiJGZvcm1FcnJvciIsImZpbmRGb3JtRXJyb3IiLCJsYWJlbEVycm9yQ2xhc3MiLCJmb3JtRXJyb3JDbGFzcyIsImlucHV0RXJyb3JDbGFzcyIsImdyb3VwTmFtZSIsIiRsYWJlbHMiLCJmaW5kUmFkaW9MYWJlbHMiLCIkZm9ybUVycm9ycyIsInJlbW92ZVJhZGlvRXJyb3JDbGFzc2VzIiwiY2xlYXJSZXF1aXJlIiwicmVxdWlyZWRDaGVjayIsInZhbGlkYXRlZCIsImN1c3RvbVZhbGlkYXRvciIsInZhbGlkYXRvciIsImVxdWFsVG8iLCJ2YWxpZGF0ZVJhZGlvIiwidmFsaWRhdGVUZXh0IiwibWF0Y2hWYWxpZGF0aW9uIiwidmFsaWRhdG9ycyIsImdvb2RUb0dvIiwibWVzc2FnZSIsImRlcGVuZGVudEVsZW1lbnRzIiwiYWNjIiwibm9FcnJvciIsInBhdHRlcm4iLCJpbnB1dFRleHQiLCJ2YWxpZCIsInBhdHRlcm5zIiwiUmVnRXhwIiwiJGdyb3VwIiwicmVxdWlyZWQiLCJjbGVhciIsInYiLCIkZm9ybSIsInJlbW92ZUVycm9yQ2xhc3NlcyIsImFscGhhIiwiYWxwaGFfbnVtZXJpYyIsImludGVnZXIiLCJudW1iZXIiLCJjYXJkIiwiY3Z2IiwiZW1haWwiLCJ1cmwiLCJkb21haW4iLCJkYXRldGltZSIsImRhdGUiLCJ0aW1lIiwiZGF0ZUlTTyIsIm1vbnRoX2RheV95ZWFyIiwiZGF5X21vbnRoX3llYXIiLCJjb2xvciIsIkFjY29yZGlvbiIsIiR0YWJzIiwiaWR4IiwiJGNvbnRlbnQiLCJsaW5rSWQiLCIkaW5pdEFjdGl2ZSIsImRvd24iLCIkdGFiQ29udGVudCIsInRvZ2dsZSIsIm5leHQiLCIkYSIsIm11bHRpRXhwYW5kIiwicHJldmlvdXMiLCJwcmV2IiwiaGFzQ2xhc3MiLCJ1cCIsImZpcnN0VGltZSIsIiRjdXJyZW50QWN0aXZlIiwic2xpZGVEb3duIiwic2xpZGVTcGVlZCIsIiRhdW50cyIsImFsbG93QWxsQ2xvc2VkIiwic2xpZGVVcCIsInN0b3AiLCJBY2NvcmRpb25NZW51IiwibXVsdGlPcGVuIiwiJG1lbnVMaW5rcyIsInN1YklkIiwiaXNBY3RpdmUiLCJpbml0UGFuZXMiLCIkc3VibWVudSIsIiRlbGVtZW50cyIsIiRwcmV2RWxlbWVudCIsIiRuZXh0RWxlbWVudCIsIm1pbiIsInBhcmVudHMiLCJvcGVuIiwiY2xvc2UiLCJjbG9zZUFsbCIsImhpZGVBbGwiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJwYXJlbnRzVW50aWwiLCJhZGQiLCIkbWVudXMiLCJEcmlsbGRvd24iLCIkc3VibWVudUFuY2hvcnMiLCIkc3VibWVudXMiLCIkbWVudUl0ZW1zIiwiX3ByZXBhcmVNZW51IiwiX3JlZ2lzdGVyRXZlbnRzIiwiX2tleWJvYXJkRXZlbnRzIiwiJGxpbmsiLCJwYXJlbnRMaW5rIiwiY2xvbmUiLCJwcmVwZW5kVG8iLCJ3cmFwIiwiJG1lbnUiLCIkYmFjayIsImJhY2tCdXR0b25Qb3NpdGlvbiIsImFwcGVuZCIsImJhY2tCdXR0b24iLCJwcmVwZW5kIiwiX2JhY2siLCJhdXRvSGVpZ2h0IiwiJHdyYXBwZXIiLCJ3cmFwcGVyIiwiYW5pbWF0ZUhlaWdodCIsIl9nZXRNYXhEaW1zIiwiX3Nob3ciLCJjbG9zZU9uQ2xpY2siLCIkYm9keSIsImNvbnRhaW5zIiwiX2hpZGVBbGwiLCJfcmVzaXplIiwic2Nyb2xsVG9wIiwiX2JpbmRIYW5kbGVyIiwiX3Njcm9sbFRvcCIsIiRzY3JvbGxUb3BFbGVtZW50Iiwic2Nyb2xsVG9wRWxlbWVudCIsInNjcm9sbFBvcyIsInBhcnNlSW50Iiwic2Nyb2xsVG9wT2Zmc2V0IiwiYW5pbWF0aW9uRHVyYXRpb24iLCJhbmltYXRpb25FYXNpbmciLCJfaGlkZSIsInBhcmVudFN1Yk1lbnUiLCJibHVyIiwibWF4SGVpZ2h0IiwicmVzdWx0IiwibnVtT2ZFbGVtcyIsInVud3JhcCIsInJlbW92ZSIsIkRyb3Bkb3duIiwiJGlkIiwiJGFuY2hvciIsInBhcmVudENsYXNzIiwiJHBhcmVudCIsInBvc2l0aW9uQ2xhc3MiLCJnZXRQb3NpdGlvbkNsYXNzIiwiY291bnRlciIsInVzZWRQb3NpdGlvbnMiLCJ2ZXJ0aWNhbFBvc2l0aW9uIiwibWF0Y2giLCJob3Jpem9udGFsUG9zaXRpb24iLCJjbGFzc0NoYW5nZWQiLCJkaXJlY3Rpb24iLCJuZXdXaWR0aCIsInBhcmVudEhPZmZzZXQiLCIkcGFyZW50RGltcyIsIl9yZXBvc2l0aW9uIiwiX3NldFBvc2l0aW9uIiwiaG92ZXIiLCJib2R5RGF0YSIsIndoYXRpbnB1dCIsInRpbWVvdXQiLCJob3ZlckRlbGF5IiwiaG92ZXJQYW5lIiwidmlzaWJsZUZvY3VzYWJsZUVsZW1lbnRzIiwiYXV0b0ZvY3VzIiwiX2FkZEJvZHlIYW5kbGVyIiwiY3VyUG9zaXRpb25DbGFzcyIsIkRyb3Bkb3duTWVudSIsInN1YnMiLCJ2ZXJ0aWNhbENsYXNzIiwicmlnaHRDbGFzcyIsImFsaWdubWVudCIsImNoYW5nZWQiLCJoYXNUb3VjaCIsIm9udG91Y2hzdGFydCIsInBhckNsYXNzIiwiaGFuZGxlQ2xpY2tGbiIsImhhc1N1YiIsImhhc0NsaWNrZWQiLCJjbGlja09wZW4iLCJmb3JjZUZvbGxvdyIsImNsb3NlT25DbGlja0luc2lkZSIsImRpc2FibGVIb3ZlciIsImF1dG9jbG9zZSIsImNsb3NpbmdUaW1lIiwiaXNUYWIiLCJpbmRleCIsIm5leHRTaWJsaW5nIiwicHJldlNpYmxpbmciLCJvcGVuU3ViIiwiY2xvc2VTdWIiLCJfaXNWZXJ0aWNhbCIsIiRzaWJzIiwib2xkQ2xhc3MiLCIkcGFyZW50TGkiLCIkdG9DbG9zZSIsInNvbWV0aGluZ1RvQ2xvc2UiLCJFcXVhbGl6ZXIiLCJlcUlkIiwiJHdhdGNoZWQiLCJoYXNOZXN0ZWQiLCJpc05lc3RlZCIsImlzT24iLCJvblJlc2l6ZU1lQm91bmQiLCJfb25SZXNpemVNZSIsIm9uUG9zdEVxdWFsaXplZEJvdW5kIiwiX29uUG9zdEVxdWFsaXplZCIsImltZ3MiLCJ0b29TbWFsbCIsImVxdWFsaXplT24iLCJfY2hlY2tNUSIsIl9yZWZsb3ciLCJfcGF1c2VFdmVudHMiLCJlcXVhbGl6ZU9uU3RhY2siLCJfaXNTdGFja2VkIiwiZXF1YWxpemVCeVJvdyIsImdldEhlaWdodHNCeVJvdyIsImFwcGx5SGVpZ2h0QnlSb3ciLCJnZXRIZWlnaHRzIiwiYXBwbHlIZWlnaHQiLCJoZWlnaHRzIiwibGVuIiwib2Zmc2V0SGVpZ2h0IiwibGFzdEVsVG9wT2Zmc2V0IiwiZ3JvdXBzIiwiZ3JvdXAiLCJlbE9mZnNldFRvcCIsImoiLCJsbiIsImdyb3Vwc0lMZW5ndGgiLCJsZW5KIiwiSW50ZXJjaGFuZ2UiLCJydWxlcyIsImN1cnJlbnRQYXRoIiwiX2FkZEJyZWFrcG9pbnRzIiwiX2dlbmVyYXRlUnVsZXMiLCJydWxlIiwicGF0aCIsIlNQRUNJQUxfUVVFUklFUyIsInJ1bGVzTGlzdCIsIm5vZGVOYW1lIiwicmVzcG9uc2UiLCJodG1sIiwiTWFnZWxsYW4iLCJjYWxjUG9pbnRzIiwiJHRhcmdldHMiLCIkbGlua3MiLCIkYWN0aXZlIiwicG9pbnRzIiwid2luSGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJkb2NIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCIkdGFyIiwicHQiLCJ0aHJlc2hvbGQiLCJ0YXJnZXRQb2ludCIsImVhc2luZyIsImRlZXBMaW5raW5nIiwibG9jYXRpb24iLCJoYXNoIiwic2Nyb2xsVG9Mb2MiLCJfdXBkYXRlQWN0aXZlIiwiYXJyaXZhbCIsImdldEF0dHJpYnV0ZSIsImxvYyIsIl9pblRyYW5zaXRpb24iLCJiYXJPZmZzZXQiLCJ3aW5Qb3MiLCJjdXJJZHgiLCJpc0Rvd24iLCJjdXJWaXNpYmxlIiwiaGlzdG9yeSIsInB1c2hTdGF0ZSIsIk9mZkNhbnZhcyIsIiRsYXN0VHJpZ2dlciIsIiR0cmlnZ2VycyIsInRyYW5zaXRpb24iLCJjb250ZW50T3ZlcmxheSIsIm92ZXJsYXkiLCJvdmVybGF5UG9zaXRpb24iLCJzZXRBdHRyaWJ1dGUiLCIkb3ZlcmxheSIsImlzUmV2ZWFsZWQiLCJyZXZlYWxDbGFzcyIsInJldmVhbE9uIiwiX3NldE1RQ2hlY2tlciIsInRyYW5zaXRpb25UaW1lIiwiX2hhbmRsZUtleWJvYXJkIiwicmV2ZWFsIiwiJGNsb3NlciIsImZvcmNlVG8iLCJzY3JvbGxUbyIsImNvbnRlbnRTY3JvbGwiLCJfc3RvcFNjcm9sbGluZyIsIk9yYml0IiwiX3Jlc2V0IiwiY29udGFpbmVyQ2xhc3MiLCIkc2xpZGVzIiwic2xpZGVDbGFzcyIsIiRpbWFnZXMiLCJpbml0QWN0aXZlIiwidXNlTVVJIiwiX3ByZXBhcmVGb3JPcmJpdCIsImJ1bGxldHMiLCJfbG9hZEJ1bGxldHMiLCJhdXRvUGxheSIsImdlb1N5bmMiLCJhY2Nlc3NpYmxlIiwiJGJ1bGxldHMiLCJib3hPZkJ1bGxldHMiLCJ0aW1lckRlbGF5IiwiY2hhbmdlU2xpZGUiLCJfc2V0V3JhcHBlckhlaWdodCIsInRlbXAiLCJwYXVzZU9uSG92ZXIiLCJuYXZCdXR0b25zIiwiJGNvbnRyb2xzIiwibmV4dENsYXNzIiwicHJldkNsYXNzIiwiJHNsaWRlIiwiX3VwZGF0ZUJ1bGxldHMiLCJpc0xUUiIsImNob3NlblNsaWRlIiwiJGN1clNsaWRlIiwiJGZpcnN0U2xpZGUiLCIkbGFzdFNsaWRlIiwibGFzdCIsImRpckluIiwiZGlyT3V0IiwiJG5ld1NsaWRlIiwiaW5maW5pdGVXcmFwIiwiJG9sZEJ1bGxldCIsInNwYW4iLCJkZXRhY2giLCIkbmV3QnVsbGV0IiwiYW5pbUluRnJvbVJpZ2h0IiwiYW5pbU91dFRvUmlnaHQiLCJhbmltSW5Gcm9tTGVmdCIsImFuaW1PdXRUb0xlZnQiLCJSZXNwb25zaXZlTWVudSIsImN1cnJlbnRNcSIsImN1cnJlbnRQbHVnaW4iLCJydWxlc1RyZWUiLCJydWxlU2l6ZSIsInJ1bGVQbHVnaW4iLCJNZW51UGx1Z2lucyIsImlzRW1wdHlPYmplY3QiLCJfY2hlY2tNZWRpYVF1ZXJpZXMiLCJtYXRjaGVkTXEiLCJjc3NDbGFzcyIsImRlc3Ryb3kiLCJkcm9wZG93biIsImRyaWxsZG93biIsImFjY29yZGlvbiIsIlJlc3BvbnNpdmVUb2dnbGUiLCJ0YXJnZXRJRCIsIiR0YXJnZXRNZW51IiwiJHRvZ2dsZXIiLCJpbnB1dCIsImFuaW1hdGlvbkluIiwiYW5pbWF0aW9uT3V0IiwiX3VwZGF0ZSIsIl91cGRhdGVNcUhhbmRsZXIiLCJ0b2dnbGVNZW51IiwiaGlkZUZvciIsIlJldmVhbCIsImNhY2hlZCIsIm1xIiwiaXNNb2JpbGUiLCJtb2JpbGVTbmlmZiIsImZ1bGxTY3JlZW4iLCJfbWFrZU92ZXJsYXkiLCJkZWVwTGluayIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsIm1hcmdpbiIsIl91cGRhdGVQb3NpdGlvbiIsIl9oYW5kbGVTdGF0ZSIsIm11bHRpcGxlT3BlbmVkIiwiYWRkUmV2ZWFsT3BlbkNsYXNzZXMiLCJvcmlnaW5hbFNjcm9sbFBvcyIsImFmdGVyQW5pbWF0aW9uIiwiZm9jdXNhYmxlRWxlbWVudHMiLCJzaG93RGVsYXkiLCJfZXh0cmFIYW5kbGVycyIsImNsb3NlT25Fc2MiLCJmaW5pc2hVcCIsImhpZGVEZWxheSIsInJlc2V0T25DbG9zZSIsInJlcGxhY2VTdGF0ZSIsInRpdGxlIiwiaHJlZiIsImJ0bU9mZnNldFBjdCIsImlQaG9uZVNuaWZmIiwiYW5kcm9pZFNuaWZmIiwiU2xpZGVyIiwiaW5wdXRzIiwiaGFuZGxlcyIsIiRoYW5kbGUiLCIkaW5wdXQiLCIkZmlsbCIsInZlcnRpY2FsIiwiaXNEYmwiLCJkaXNhYmxlZCIsImRpc2FibGVkQ2xhc3MiLCJiaW5kaW5nIiwiX3NldEluaXRBdHRyIiwiZG91YmxlU2lkZWQiLCIkaGFuZGxlMiIsIiRpbnB1dDIiLCJzZXRIYW5kbGVzIiwiX3NldEhhbmRsZVBvcyIsInBjdE9mQmFyIiwicGVyY2VudCIsInBvc2l0aW9uVmFsdWVGdW5jdGlvbiIsIl9sb2dUcmFuc2Zvcm0iLCJfcG93VHJhbnNmb3JtIiwidG9GaXhlZCIsImJhc2VMb2ciLCJub25MaW5lYXJCYXNlIiwiJGhuZGwiLCJub0ludmVydCIsImgyVmFsIiwic3RlcCIsImgxVmFsIiwidmVydCIsImhPclciLCJsT3JUIiwiaGFuZGxlRGltIiwiZWxlbURpbSIsIl9wY3RPZkJhciIsInB4VG9Nb3ZlIiwibW92ZW1lbnQiLCJkZWNpbWFsIiwiX3NldFZhbHVlcyIsImlzTGVmdEhuZGwiLCJkaW0iLCJoYW5kbGVQY3QiLCJoYW5kbGVQb3MiLCJpbml0aWFsU3RhcnQiLCJtb3ZlVGltZSIsImNoYW5nZWREZWxheSIsImluaXRWYWwiLCJpbml0aWFsRW5kIiwiaGFzVmFsIiwiZXZlbnRPZmZzZXQiLCJoYWxmT2ZIYW5kbGUiLCJiYXJEaW0iLCJ3aW5kb3dTY3JvbGwiLCJzY3JvbGxMZWZ0IiwiZWxlbU9mZnNldCIsImV2ZW50RnJvbUJhciIsImJhclhZIiwib2Zmc2V0UGN0IiwiX3ZhbHVlIiwiX2FkanVzdFZhbHVlIiwiZmlyc3RIbmRsUG9zIiwiYWJzUG9zaXRpb24iLCJzZWNuZEhuZGxQb3MiLCJkaXYiLCJwcmV2X3ZhbCIsIm5leHRfdmFsIiwiX2V2ZW50c0ZvckhhbmRsZSIsImN1ckhhbmRsZSIsIl9oYW5kbGVFdmVudCIsImNsaWNrU2VsZWN0IiwiZHJhZ2dhYmxlIiwiY3VycmVudFRhcmdldCIsIl8kaGFuZGxlIiwib2xkVmFsdWUiLCJuZXdWYWx1ZSIsImRlY3JlYXNlIiwiaW5jcmVhc2UiLCJkZWNyZWFzZV9mYXN0IiwiaW5jcmVhc2VfZmFzdCIsImludmVydFZlcnRpY2FsIiwiZnJhYyIsIm51bSIsImNsaWNrUG9zIiwiYmFzZSIsImxvZyIsIlN0aWNreSIsIndhc1dyYXBwZWQiLCIkY29udGFpbmVyIiwiY29udGFpbmVyIiwid3JhcElubmVyIiwic3RpY2t5Q2xhc3MiLCJzY3JvbGxDb3VudCIsImNoZWNrRXZlcnkiLCJpc1N0dWNrIiwiY29udGFpbmVySGVpZ2h0IiwiZWxlbUhlaWdodCIsIl9wYXJzZVBvaW50cyIsIl9zZXRTaXplcyIsInNjcm9sbCIsIl9jYWxjIiwiX3JlbW92ZVN0aWNreSIsInRvcFBvaW50IiwicmV2ZXJzZSIsInRvcEFuY2hvciIsImJ0bSIsImJ0bUFuY2hvciIsInB0cyIsImJyZWFrcyIsInBsYWNlIiwiY2FuU3RpY2siLCJfcGF1c2VMaXN0ZW5lcnMiLCJjaGVja1NpemVzIiwiYm90dG9tUG9pbnQiLCJfc2V0U3RpY2t5Iiwic3RpY2tUbyIsIm1yZ24iLCJub3RTdHVja1RvIiwiaXNUb3AiLCJzdGlja1RvVG9wIiwiYW5jaG9yUHQiLCJhbmNob3JIZWlnaHQiLCJ0b3BPckJvdHRvbSIsInN0aWNreU9uIiwibmV3RWxlbVdpZHRoIiwiY29tcCIsInBkbmdsIiwicGRuZ3IiLCJuZXdDb250YWluZXJIZWlnaHQiLCJfc2V0QnJlYWtQb2ludHMiLCJtVG9wIiwiZW1DYWxjIiwibWFyZ2luVG9wIiwibUJ0bSIsIm1hcmdpbkJvdHRvbSIsImVtIiwiZm9udFNpemUiLCJUYWJzIiwiJHRhYlRpdGxlcyIsImxpbmtDbGFzcyIsImxpbmtBY3RpdmVDbGFzcyIsImxvYWQiLCJkZWVwTGlua1NtdWRnZURlbGF5Iiwic2VsZWN0VGFiIiwiZGVlcExpbmtTbXVkZ2UiLCJtYXRjaEhlaWdodCIsIl9zZXRIZWlnaHQiLCJfYWRkS2V5SGFuZGxlciIsIl9hZGRDbGlja0hhbmRsZXIiLCJfc2V0SGVpZ2h0TXFIYW5kbGVyIiwiX2hhbmRsZVRhYkNoYW5nZSIsIndyYXBPbktleXMiLCJhY3RpdmVDb2xsYXBzZSIsIl9jb2xsYXBzZVRhYiIsIiRvbGRUYWIiLCIkdGFiTGluayIsIiR0YXJnZXRDb250ZW50IiwiX29wZW5UYWIiLCJ1cGRhdGVIaXN0b3J5IiwicGFuZWxBY3RpdmVDbGFzcyIsIiR0YXJnZXRfYW5jaG9yIiwiaWRTdHIiLCJwYW5lbENsYXNzIiwicGFuZWwiLCJUb2dnbGVyIiwidG9nZ2xlQ2xhc3MiLCJfdXBkYXRlQVJJQSIsIlRvb2x0aXAiLCJpc0NsaWNrIiwiZWxlbUlkIiwiX2dldFBvc2l0aW9uQ2xhc3MiLCJ0aXBUZXh0IiwidGVtcGxhdGUiLCJfYnVpbGRUZW1wbGF0ZSIsImFsbG93SHRtbCIsInRyaWdnZXJDbGFzcyIsInRlbXBsYXRlQ2xhc3NlcyIsInRvb2x0aXBDbGFzcyIsIiR0ZW1wbGF0ZSIsIiR0aXBEaW1zIiwic2hvd09uIiwiZmFkZUluIiwiZmFkZUluRHVyYXRpb24iLCJmYWRlT3V0RHVyYXRpb24iLCJpc0ZvY3VzIiwiZGlzYWJsZUZvclRvdWNoIiwidG91Y2hDbG9zZVRleHQiLCJlbmRFdmVudCIsIk1vdGlvblVJIiwicmVhZHkiLCJ2aWRlb3MiLCJmb290ZXIiLCJwb3MiLCJzdGlja3lGb290ZXIiXSwibWFwcGluZ3MiOiI7O0FBQUEsQ0FBQyxVQUFTQSxDQUFULEVBQVk7O0FBRWI7O0FBRUEsTUFBSUMscUJBQXFCLE9BQXpCOztBQUVBO0FBQ0E7QUFDQSxNQUFJQyxhQUFhO0FBQ2ZDLGFBQVNGLGtCQURNOztBQUdmOzs7QUFHQUcsY0FBVSxFQU5LOztBQVFmOzs7QUFHQUMsWUFBUSxFQVhPOztBQWFmOzs7QUFHQUMsU0FBSyxZQUFVO0FBQ2IsYUFBT04sRUFBRSxNQUFGLEVBQVVPLElBQVYsQ0FBZSxLQUFmLE1BQTBCLEtBQWpDO0FBQ0QsS0FsQmM7QUFtQmY7Ozs7QUFJQUMsWUFBUSxVQUFTQSxNQUFULEVBQWlCQyxJQUFqQixFQUF1QjtBQUM3QjtBQUNBO0FBQ0EsVUFBSUMsWUFBYUQsUUFBUUUsYUFBYUgsTUFBYixDQUF6QjtBQUNBO0FBQ0E7QUFDQSxVQUFJSSxXQUFZQyxVQUFVSCxTQUFWLENBQWhCOztBQUVBO0FBQ0EsV0FBS04sUUFBTCxDQUFjUSxRQUFkLElBQTBCLEtBQUtGLFNBQUwsSUFBa0JGLE1BQTVDO0FBQ0QsS0FqQ2M7QUFrQ2Y7Ozs7Ozs7OztBQVNBTSxvQkFBZ0IsVUFBU04sTUFBVCxFQUFpQkMsSUFBakIsRUFBc0I7QUFDcEMsVUFBSU0sYUFBYU4sT0FBT0ksVUFBVUosSUFBVixDQUFQLEdBQXlCRSxhQUFhSCxPQUFPUSxXQUFwQixFQUFpQ0MsV0FBakMsRUFBMUM7QUFDQVQsYUFBT1UsSUFBUCxHQUFjLEtBQUtDLFdBQUwsQ0FBaUIsQ0FBakIsRUFBb0JKLFVBQXBCLENBQWQ7O0FBRUEsVUFBRyxDQUFDUCxPQUFPWSxRQUFQLENBQWdCYixJQUFoQixXQUE2QlEsVUFBN0IsQ0FBSixFQUErQztBQUFFUCxlQUFPWSxRQUFQLENBQWdCYixJQUFoQixXQUE2QlEsVUFBN0IsRUFBMkNQLE9BQU9VLElBQWxEO0FBQTBEO0FBQzNHLFVBQUcsQ0FBQ1YsT0FBT1ksUUFBUCxDQUFnQkMsSUFBaEIsQ0FBcUIsVUFBckIsQ0FBSixFQUFxQztBQUFFYixlQUFPWSxRQUFQLENBQWdCQyxJQUFoQixDQUFxQixVQUFyQixFQUFpQ2IsTUFBakM7QUFBMkM7QUFDNUU7Ozs7QUFJTkEsYUFBT1ksUUFBUCxDQUFnQkUsT0FBaEIsY0FBbUNQLFVBQW5DOztBQUVBLFdBQUtWLE1BQUwsQ0FBWWtCLElBQVosQ0FBaUJmLE9BQU9VLElBQXhCOztBQUVBO0FBQ0QsS0ExRGM7QUEyRGY7Ozs7Ozs7O0FBUUFNLHNCQUFrQixVQUFTaEIsTUFBVCxFQUFnQjtBQUNoQyxVQUFJTyxhQUFhRixVQUFVRixhQUFhSCxPQUFPWSxRQUFQLENBQWdCQyxJQUFoQixDQUFxQixVQUFyQixFQUFpQ0wsV0FBOUMsQ0FBVixDQUFqQjs7QUFFQSxXQUFLWCxNQUFMLENBQVlvQixNQUFaLENBQW1CLEtBQUtwQixNQUFMLENBQVlxQixPQUFaLENBQW9CbEIsT0FBT1UsSUFBM0IsQ0FBbkIsRUFBcUQsQ0FBckQ7QUFDQVYsYUFBT1ksUUFBUCxDQUFnQk8sVUFBaEIsV0FBbUNaLFVBQW5DLEVBQWlEYSxVQUFqRCxDQUE0RCxVQUE1RDtBQUNNOzs7O0FBRE4sT0FLT04sT0FMUCxtQkFLK0JQLFVBTC9CO0FBTUEsV0FBSSxJQUFJYyxJQUFSLElBQWdCckIsTUFBaEIsRUFBdUI7QUFDckJBLGVBQU9xQixJQUFQLElBQWUsSUFBZixDQURxQixDQUNEO0FBQ3JCO0FBQ0Q7QUFDRCxLQWpGYzs7QUFtRmY7Ozs7OztBQU1DQyxZQUFRLFVBQVNDLE9BQVQsRUFBaUI7QUFDdkIsVUFBSUMsT0FBT0QsbUJBQW1CL0IsQ0FBOUI7QUFDQSxVQUFHO0FBQ0QsWUFBR2dDLElBQUgsRUFBUTtBQUNORCxrQkFBUUUsSUFBUixDQUFhLFlBQVU7QUFDckJqQyxjQUFFLElBQUYsRUFBUXFCLElBQVIsQ0FBYSxVQUFiLEVBQXlCYSxLQUF6QjtBQUNELFdBRkQ7QUFHRCxTQUpELE1BSUs7QUFDSCxjQUFJQyxPQUFPLE9BQU9KLE9BQWxCO0FBQUEsY0FDQUssUUFBUSxJQURSO0FBQUEsY0FFQUMsTUFBTTtBQUNKLHNCQUFVLFVBQVNDLElBQVQsRUFBYztBQUN0QkEsbUJBQUtDLE9BQUwsQ0FBYSxVQUFTQyxDQUFULEVBQVc7QUFDdEJBLG9CQUFJM0IsVUFBVTJCLENBQVYsQ0FBSjtBQUNBeEMsa0JBQUUsV0FBVXdDLENBQVYsR0FBYSxHQUFmLEVBQW9CQyxVQUFwQixDQUErQixPQUEvQjtBQUNELGVBSEQ7QUFJRCxhQU5HO0FBT0osc0JBQVUsWUFBVTtBQUNsQlYsd0JBQVVsQixVQUFVa0IsT0FBVixDQUFWO0FBQ0EvQixnQkFBRSxXQUFVK0IsT0FBVixHQUFtQixHQUFyQixFQUEwQlUsVUFBMUIsQ0FBcUMsT0FBckM7QUFDRCxhQVZHO0FBV0oseUJBQWEsWUFBVTtBQUNyQixtQkFBSyxRQUFMLEVBQWVDLE9BQU9DLElBQVAsQ0FBWVAsTUFBTWhDLFFBQWxCLENBQWY7QUFDRDtBQWJHLFdBRk47QUFpQkFpQyxjQUFJRixJQUFKLEVBQVVKLE9BQVY7QUFDRDtBQUNGLE9BekJELENBeUJDLE9BQU1hLEdBQU4sRUFBVTtBQUNUQyxnQkFBUUMsS0FBUixDQUFjRixHQUFkO0FBQ0QsT0EzQkQsU0EyQlE7QUFDTixlQUFPYixPQUFQO0FBQ0Q7QUFDRixLQXpIYTs7QUEySGY7Ozs7Ozs7O0FBUUFaLGlCQUFhLFVBQVM0QixNQUFULEVBQWlCQyxTQUFqQixFQUEyQjtBQUN0Q0QsZUFBU0EsVUFBVSxDQUFuQjtBQUNBLGFBQU9FLEtBQUtDLEtBQUwsQ0FBWUQsS0FBS0UsR0FBTCxDQUFTLEVBQVQsRUFBYUosU0FBUyxDQUF0QixJQUEyQkUsS0FBS0csTUFBTCxLQUFnQkgsS0FBS0UsR0FBTCxDQUFTLEVBQVQsRUFBYUosTUFBYixDQUF2RCxFQUE4RU0sUUFBOUUsQ0FBdUYsRUFBdkYsRUFBMkZDLEtBQTNGLENBQWlHLENBQWpHLEtBQXVHTixrQkFBZ0JBLFNBQWhCLEdBQThCLEVBQXJJLENBQVA7QUFDRCxLQXRJYztBQXVJZjs7Ozs7QUFLQU8sWUFBUSxVQUFTQyxJQUFULEVBQWV6QixPQUFmLEVBQXdCOztBQUU5QjtBQUNBLFVBQUksT0FBT0EsT0FBUCxLQUFtQixXQUF2QixFQUFvQztBQUNsQ0Esa0JBQVVXLE9BQU9DLElBQVAsQ0FBWSxLQUFLdkMsUUFBakIsQ0FBVjtBQUNEO0FBQ0Q7QUFIQSxXQUlLLElBQUksT0FBTzJCLE9BQVAsS0FBbUIsUUFBdkIsRUFBaUM7QUFDcENBLG9CQUFVLENBQUNBLE9BQUQsQ0FBVjtBQUNEOztBQUVELFVBQUlLLFFBQVEsSUFBWjs7QUFFQTtBQUNBcEMsUUFBRWlDLElBQUYsQ0FBT0YsT0FBUCxFQUFnQixVQUFTMEIsQ0FBVCxFQUFZaEQsSUFBWixFQUFrQjtBQUNoQztBQUNBLFlBQUlELFNBQVM0QixNQUFNaEMsUUFBTixDQUFlSyxJQUFmLENBQWI7O0FBRUE7QUFDQSxZQUFJaUQsUUFBUTFELEVBQUV3RCxJQUFGLEVBQVFHLElBQVIsQ0FBYSxXQUFTbEQsSUFBVCxHQUFjLEdBQTNCLEVBQWdDbUQsT0FBaEMsQ0FBd0MsV0FBU25ELElBQVQsR0FBYyxHQUF0RCxDQUFaOztBQUVBO0FBQ0FpRCxjQUFNekIsSUFBTixDQUFXLFlBQVc7QUFDcEIsY0FBSTRCLE1BQU03RCxFQUFFLElBQUYsQ0FBVjtBQUFBLGNBQ0k4RCxPQUFPLEVBRFg7QUFFQTtBQUNBLGNBQUlELElBQUl4QyxJQUFKLENBQVMsVUFBVCxDQUFKLEVBQTBCO0FBQ3hCd0Isb0JBQVFrQixJQUFSLENBQWEseUJBQXVCdEQsSUFBdkIsR0FBNEIsc0RBQXpDO0FBQ0E7QUFDRDs7QUFFRCxjQUFHb0QsSUFBSXRELElBQUosQ0FBUyxjQUFULENBQUgsRUFBNEI7QUFDMUIsZ0JBQUl5RCxRQUFRSCxJQUFJdEQsSUFBSixDQUFTLGNBQVQsRUFBeUIwRCxLQUF6QixDQUErQixHQUEvQixFQUFvQzFCLE9BQXBDLENBQTRDLFVBQVMyQixDQUFULEVBQVlULENBQVosRUFBYztBQUNwRSxrQkFBSVUsTUFBTUQsRUFBRUQsS0FBRixDQUFRLEdBQVIsRUFBYUcsR0FBYixDQUFpQixVQUFTQyxFQUFULEVBQVk7QUFBRSx1QkFBT0EsR0FBR0MsSUFBSCxFQUFQO0FBQW1CLGVBQWxELENBQVY7QUFDQSxrQkFBR0gsSUFBSSxDQUFKLENBQUgsRUFBV0wsS0FBS0ssSUFBSSxDQUFKLENBQUwsSUFBZUksV0FBV0osSUFBSSxDQUFKLENBQVgsQ0FBZjtBQUNaLGFBSFcsQ0FBWjtBQUlEO0FBQ0QsY0FBRztBQUNETixnQkFBSXhDLElBQUosQ0FBUyxVQUFULEVBQXFCLElBQUliLE1BQUosQ0FBV1IsRUFBRSxJQUFGLENBQVgsRUFBb0I4RCxJQUFwQixDQUFyQjtBQUNELFdBRkQsQ0FFQyxPQUFNVSxFQUFOLEVBQVM7QUFDUjNCLG9CQUFRQyxLQUFSLENBQWMwQixFQUFkO0FBQ0QsV0FKRCxTQUlRO0FBQ047QUFDRDtBQUNGLFNBdEJEO0FBdUJELE9BL0JEO0FBZ0NELEtBMUxjO0FBMkxmQyxlQUFXOUQsWUEzTEk7QUE0TGYrRCxtQkFBZSxVQUFTaEIsS0FBVCxFQUFlO0FBQzVCLFVBQUlpQixjQUFjO0FBQ2hCLHNCQUFjLGVBREU7QUFFaEIsNEJBQW9CLHFCQUZKO0FBR2hCLHlCQUFpQixlQUhEO0FBSWhCLHVCQUFlO0FBSkMsT0FBbEI7QUFNQSxVQUFJbkIsT0FBT29CLFNBQVNDLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBWDtBQUFBLFVBQ0lDLEdBREo7O0FBR0EsV0FBSyxJQUFJQyxDQUFULElBQWNKLFdBQWQsRUFBMEI7QUFDeEIsWUFBSSxPQUFPbkIsS0FBS3dCLEtBQUwsQ0FBV0QsQ0FBWCxDQUFQLEtBQXlCLFdBQTdCLEVBQXlDO0FBQ3ZDRCxnQkFBTUgsWUFBWUksQ0FBWixDQUFOO0FBQ0Q7QUFDRjtBQUNELFVBQUdELEdBQUgsRUFBTztBQUNMLGVBQU9BLEdBQVA7QUFDRCxPQUZELE1BRUs7QUFDSEEsY0FBTUcsV0FBVyxZQUFVO0FBQ3pCdkIsZ0JBQU13QixjQUFOLENBQXFCLGVBQXJCLEVBQXNDLENBQUN4QixLQUFELENBQXRDO0FBQ0QsU0FGSyxFQUVILENBRkcsQ0FBTjtBQUdBLGVBQU8sZUFBUDtBQUNEO0FBQ0Y7QUFuTmMsR0FBakI7O0FBc05BeEQsYUFBV2lGLElBQVgsR0FBa0I7QUFDaEI7Ozs7Ozs7QUFPQUMsY0FBVSxVQUFVQyxJQUFWLEVBQWdCQyxLQUFoQixFQUF1QjtBQUMvQixVQUFJQyxRQUFRLElBQVo7O0FBRUEsYUFBTyxZQUFZO0FBQ2pCLFlBQUlDLFVBQVUsSUFBZDtBQUFBLFlBQW9CQyxPQUFPQyxTQUEzQjs7QUFFQSxZQUFJSCxVQUFVLElBQWQsRUFBb0I7QUFDbEJBLGtCQUFRTixXQUFXLFlBQVk7QUFDN0JJLGlCQUFLTSxLQUFMLENBQVdILE9BQVgsRUFBb0JDLElBQXBCO0FBQ0FGLG9CQUFRLElBQVI7QUFDRCxXQUhPLEVBR0xELEtBSEssQ0FBUjtBQUlEO0FBQ0YsT0FURDtBQVVEO0FBckJlLEdBQWxCOztBQXdCQTtBQUNBO0FBQ0E7Ozs7QUFJQSxNQUFJN0MsYUFBYSxVQUFTbUQsTUFBVCxFQUFpQjtBQUNoQyxRQUFJekQsT0FBTyxPQUFPeUQsTUFBbEI7QUFBQSxRQUNJQyxRQUFRN0YsRUFBRSxvQkFBRixDQURaO0FBQUEsUUFFSThGLFFBQVE5RixFQUFFLFFBQUYsQ0FGWjs7QUFJQSxRQUFHLENBQUM2RixNQUFNOUMsTUFBVixFQUFpQjtBQUNmL0MsUUFBRSw4QkFBRixFQUFrQytGLFFBQWxDLENBQTJDbkIsU0FBU29CLElBQXBEO0FBQ0Q7QUFDRCxRQUFHRixNQUFNL0MsTUFBVCxFQUFnQjtBQUNkK0MsWUFBTUcsV0FBTixDQUFrQixPQUFsQjtBQUNEOztBQUVELFFBQUc5RCxTQUFTLFdBQVosRUFBd0I7QUFBQztBQUN2QmpDLGlCQUFXZ0csVUFBWCxDQUFzQmhFLEtBQXRCO0FBQ0FoQyxpQkFBV3FELE1BQVgsQ0FBa0IsSUFBbEI7QUFDRCxLQUhELE1BR00sSUFBR3BCLFNBQVMsUUFBWixFQUFxQjtBQUFDO0FBQzFCLFVBQUlzRCxPQUFPVSxNQUFNQyxTQUFOLENBQWdCOUMsS0FBaEIsQ0FBc0IrQyxJQUF0QixDQUEyQlgsU0FBM0IsRUFBc0MsQ0FBdEMsQ0FBWCxDQUR5QixDQUMyQjtBQUNwRCxVQUFJWSxZQUFZLEtBQUtqRixJQUFMLENBQVUsVUFBVixDQUFoQixDQUZ5QixDQUVhOztBQUV0QyxVQUFHaUYsY0FBY0MsU0FBZCxJQUEyQkQsVUFBVVYsTUFBVixNQUFzQlcsU0FBcEQsRUFBOEQ7QUFBQztBQUM3RCxZQUFHLEtBQUt4RCxNQUFMLEtBQWdCLENBQW5CLEVBQXFCO0FBQUM7QUFDbEJ1RCxvQkFBVVYsTUFBVixFQUFrQkQsS0FBbEIsQ0FBd0JXLFNBQXhCLEVBQW1DYixJQUFuQztBQUNILFNBRkQsTUFFSztBQUNILGVBQUt4RCxJQUFMLENBQVUsVUFBU3dCLENBQVQsRUFBWVksRUFBWixFQUFlO0FBQUM7QUFDeEJpQyxzQkFBVVYsTUFBVixFQUFrQkQsS0FBbEIsQ0FBd0IzRixFQUFFcUUsRUFBRixFQUFNaEQsSUFBTixDQUFXLFVBQVgsQ0FBeEIsRUFBZ0RvRSxJQUFoRDtBQUNELFdBRkQ7QUFHRDtBQUNGLE9BUkQsTUFRSztBQUFDO0FBQ0osY0FBTSxJQUFJZSxjQUFKLENBQW1CLG1CQUFtQlosTUFBbkIsR0FBNEIsbUNBQTVCLElBQW1FVSxZQUFZM0YsYUFBYTJGLFNBQWIsQ0FBWixHQUFzQyxjQUF6RyxJQUEySCxHQUE5SSxDQUFOO0FBQ0Q7QUFDRixLQWZLLE1BZUQ7QUFBQztBQUNKLFlBQU0sSUFBSUcsU0FBSixvQkFBOEJ0RSxJQUE5QixrR0FBTjtBQUNEO0FBQ0QsV0FBTyxJQUFQO0FBQ0QsR0FsQ0Q7O0FBb0NBdUUsU0FBT3hHLFVBQVAsR0FBb0JBLFVBQXBCO0FBQ0FGLElBQUUyRyxFQUFGLENBQUtsRSxVQUFMLEdBQWtCQSxVQUFsQjs7QUFFQTtBQUNBLEdBQUMsWUFBVztBQUNWLFFBQUksQ0FBQ21FLEtBQUtDLEdBQU4sSUFBYSxDQUFDSCxPQUFPRSxJQUFQLENBQVlDLEdBQTlCLEVBQ0VILE9BQU9FLElBQVAsQ0FBWUMsR0FBWixHQUFrQkQsS0FBS0MsR0FBTCxHQUFXLFlBQVc7QUFBRSxhQUFPLElBQUlELElBQUosR0FBV0UsT0FBWCxFQUFQO0FBQThCLEtBQXhFOztBQUVGLFFBQUlDLFVBQVUsQ0FBQyxRQUFELEVBQVcsS0FBWCxDQUFkO0FBQ0EsU0FBSyxJQUFJdEQsSUFBSSxDQUFiLEVBQWdCQSxJQUFJc0QsUUFBUWhFLE1BQVosSUFBc0IsQ0FBQzJELE9BQU9NLHFCQUE5QyxFQUFxRSxFQUFFdkQsQ0FBdkUsRUFBMEU7QUFDdEUsVUFBSXdELEtBQUtGLFFBQVF0RCxDQUFSLENBQVQ7QUFDQWlELGFBQU9NLHFCQUFQLEdBQStCTixPQUFPTyxLQUFHLHVCQUFWLENBQS9CO0FBQ0FQLGFBQU9RLG9CQUFQLEdBQStCUixPQUFPTyxLQUFHLHNCQUFWLEtBQ0RQLE9BQU9PLEtBQUcsNkJBQVYsQ0FEOUI7QUFFSDtBQUNELFFBQUksdUJBQXVCRSxJQUF2QixDQUE0QlQsT0FBT1UsU0FBUCxDQUFpQkMsU0FBN0MsS0FDQyxDQUFDWCxPQUFPTSxxQkFEVCxJQUNrQyxDQUFDTixPQUFPUSxvQkFEOUMsRUFDb0U7QUFDbEUsVUFBSUksV0FBVyxDQUFmO0FBQ0FaLGFBQU9NLHFCQUFQLEdBQStCLFVBQVNPLFFBQVQsRUFBbUI7QUFDOUMsWUFBSVYsTUFBTUQsS0FBS0MsR0FBTCxFQUFWO0FBQ0EsWUFBSVcsV0FBV3ZFLEtBQUt3RSxHQUFMLENBQVNILFdBQVcsRUFBcEIsRUFBd0JULEdBQXhCLENBQWY7QUFDQSxlQUFPNUIsV0FBVyxZQUFXO0FBQUVzQyxtQkFBU0QsV0FBV0UsUUFBcEI7QUFBZ0MsU0FBeEQsRUFDV0EsV0FBV1gsR0FEdEIsQ0FBUDtBQUVILE9BTEQ7QUFNQUgsYUFBT1Esb0JBQVAsR0FBOEJRLFlBQTlCO0FBQ0Q7QUFDRDs7O0FBR0EsUUFBRyxDQUFDaEIsT0FBT2lCLFdBQVIsSUFBdUIsQ0FBQ2pCLE9BQU9pQixXQUFQLENBQW1CZCxHQUE5QyxFQUFrRDtBQUNoREgsYUFBT2lCLFdBQVAsR0FBcUI7QUFDbkJDLGVBQU9oQixLQUFLQyxHQUFMLEVBRFk7QUFFbkJBLGFBQUssWUFBVTtBQUFFLGlCQUFPRCxLQUFLQyxHQUFMLEtBQWEsS0FBS2UsS0FBekI7QUFBaUM7QUFGL0IsT0FBckI7QUFJRDtBQUNGLEdBL0JEO0FBZ0NBLE1BQUksQ0FBQ0MsU0FBU3pCLFNBQVQsQ0FBbUIwQixJQUF4QixFQUE4QjtBQUM1QkQsYUFBU3pCLFNBQVQsQ0FBbUIwQixJQUFuQixHQUEwQixVQUFTQyxLQUFULEVBQWdCO0FBQ3hDLFVBQUksT0FBTyxJQUFQLEtBQWdCLFVBQXBCLEVBQWdDO0FBQzlCO0FBQ0E7QUFDQSxjQUFNLElBQUl0QixTQUFKLENBQWMsc0VBQWQsQ0FBTjtBQUNEOztBQUVELFVBQUl1QixRQUFVN0IsTUFBTUMsU0FBTixDQUFnQjlDLEtBQWhCLENBQXNCK0MsSUFBdEIsQ0FBMkJYLFNBQTNCLEVBQXNDLENBQXRDLENBQWQ7QUFBQSxVQUNJdUMsVUFBVSxJQURkO0FBQUEsVUFFSUMsT0FBVSxZQUFXLENBQUUsQ0FGM0I7QUFBQSxVQUdJQyxTQUFVLFlBQVc7QUFDbkIsZUFBT0YsUUFBUXRDLEtBQVIsQ0FBYyxnQkFBZ0J1QyxJQUFoQixHQUNaLElBRFksR0FFWkgsS0FGRixFQUdBQyxNQUFNSSxNQUFOLENBQWFqQyxNQUFNQyxTQUFOLENBQWdCOUMsS0FBaEIsQ0FBc0IrQyxJQUF0QixDQUEyQlgsU0FBM0IsQ0FBYixDQUhBLENBQVA7QUFJRCxPQVJMOztBQVVBLFVBQUksS0FBS1UsU0FBVCxFQUFvQjtBQUNsQjtBQUNBOEIsYUFBSzlCLFNBQUwsR0FBaUIsS0FBS0EsU0FBdEI7QUFDRDtBQUNEK0IsYUFBTy9CLFNBQVAsR0FBbUIsSUFBSThCLElBQUosRUFBbkI7O0FBRUEsYUFBT0MsTUFBUDtBQUNELEtBeEJEO0FBeUJEO0FBQ0Q7QUFDQSxXQUFTeEgsWUFBVCxDQUFzQmdHLEVBQXRCLEVBQTBCO0FBQ3hCLFFBQUlrQixTQUFTekIsU0FBVCxDQUFtQjNGLElBQW5CLEtBQTRCOEYsU0FBaEMsRUFBMkM7QUFDekMsVUFBSThCLGdCQUFnQix3QkFBcEI7QUFDQSxVQUFJQyxVQUFXRCxhQUFELENBQWdCRSxJQUFoQixDQUFzQjVCLEVBQUQsQ0FBS3RELFFBQUwsRUFBckIsQ0FBZDtBQUNBLGFBQVFpRixXQUFXQSxRQUFRdkYsTUFBUixHQUFpQixDQUE3QixHQUFrQ3VGLFFBQVEsQ0FBUixFQUFXaEUsSUFBWCxFQUFsQyxHQUFzRCxFQUE3RDtBQUNELEtBSkQsTUFLSyxJQUFJcUMsR0FBR1AsU0FBSCxLQUFpQkcsU0FBckIsRUFBZ0M7QUFDbkMsYUFBT0ksR0FBRzNGLFdBQUgsQ0FBZVAsSUFBdEI7QUFDRCxLQUZJLE1BR0E7QUFDSCxhQUFPa0csR0FBR1AsU0FBSCxDQUFhcEYsV0FBYixDQUF5QlAsSUFBaEM7QUFDRDtBQUNGO0FBQ0QsV0FBUzhELFVBQVQsQ0FBb0JpRSxHQUFwQixFQUF3QjtBQUN0QixRQUFJLFdBQVdBLEdBQWYsRUFBb0IsT0FBTyxJQUFQLENBQXBCLEtBQ0ssSUFBSSxZQUFZQSxHQUFoQixFQUFxQixPQUFPLEtBQVAsQ0FBckIsS0FDQSxJQUFJLENBQUNDLE1BQU1ELE1BQU0sQ0FBWixDQUFMLEVBQXFCLE9BQU9FLFdBQVdGLEdBQVgsQ0FBUDtBQUMxQixXQUFPQSxHQUFQO0FBQ0Q7QUFDRDtBQUNBO0FBQ0EsV0FBUzNILFNBQVQsQ0FBbUIySCxHQUFuQixFQUF3QjtBQUN0QixXQUFPQSxJQUFJRyxPQUFKLENBQVksaUJBQVosRUFBK0IsT0FBL0IsRUFBd0MxSCxXQUF4QyxFQUFQO0FBQ0Q7QUFFQSxDQXpYQSxDQXlYQzJILE1BelhELENBQUQ7Q0NBQTs7QUFFQSxDQUFDLFVBQVM1SSxDQUFULEVBQVk7O0FBRWJFLGFBQVcySSxHQUFYLEdBQWlCO0FBQ2ZDLHNCQUFrQkEsZ0JBREg7QUFFZkMsbUJBQWVBLGFBRkE7QUFHZkMsZ0JBQVlBO0FBSEcsR0FBakI7O0FBTUE7Ozs7Ozs7Ozs7QUFVQSxXQUFTRixnQkFBVCxDQUEwQkcsT0FBMUIsRUFBbUNDLE1BQW5DLEVBQTJDQyxNQUEzQyxFQUFtREMsTUFBbkQsRUFBMkQ7QUFDekQsUUFBSUMsVUFBVU4sY0FBY0UsT0FBZCxDQUFkO0FBQUEsUUFDSUssR0FESjtBQUFBLFFBQ1NDLE1BRFQ7QUFBQSxRQUNpQkMsSUFEakI7QUFBQSxRQUN1QkMsS0FEdkI7O0FBR0EsUUFBSVAsTUFBSixFQUFZO0FBQ1YsVUFBSVEsVUFBVVgsY0FBY0csTUFBZCxDQUFkOztBQUVBSyxlQUFVRixRQUFRTSxNQUFSLENBQWVMLEdBQWYsR0FBcUJELFFBQVFPLE1BQTdCLElBQXVDRixRQUFRRSxNQUFSLEdBQWlCRixRQUFRQyxNQUFSLENBQWVMLEdBQWpGO0FBQ0FBLFlBQVVELFFBQVFNLE1BQVIsQ0FBZUwsR0FBZixJQUFzQkksUUFBUUMsTUFBUixDQUFlTCxHQUEvQztBQUNBRSxhQUFVSCxRQUFRTSxNQUFSLENBQWVILElBQWYsSUFBdUJFLFFBQVFDLE1BQVIsQ0FBZUgsSUFBaEQ7QUFDQUMsY0FBVUosUUFBUU0sTUFBUixDQUFlSCxJQUFmLEdBQXNCSCxRQUFRUSxLQUE5QixJQUF1Q0gsUUFBUUcsS0FBUixHQUFnQkgsUUFBUUMsTUFBUixDQUFlSCxJQUFoRjtBQUNELEtBUEQsTUFRSztBQUNIRCxlQUFVRixRQUFRTSxNQUFSLENBQWVMLEdBQWYsR0FBcUJELFFBQVFPLE1BQTdCLElBQXVDUCxRQUFRUyxVQUFSLENBQW1CRixNQUFuQixHQUE0QlAsUUFBUVMsVUFBUixDQUFtQkgsTUFBbkIsQ0FBMEJMLEdBQXZHO0FBQ0FBLFlBQVVELFFBQVFNLE1BQVIsQ0FBZUwsR0FBZixJQUFzQkQsUUFBUVMsVUFBUixDQUFtQkgsTUFBbkIsQ0FBMEJMLEdBQTFEO0FBQ0FFLGFBQVVILFFBQVFNLE1BQVIsQ0FBZUgsSUFBZixJQUF1QkgsUUFBUVMsVUFBUixDQUFtQkgsTUFBbkIsQ0FBMEJILElBQTNEO0FBQ0FDLGNBQVVKLFFBQVFNLE1BQVIsQ0FBZUgsSUFBZixHQUFzQkgsUUFBUVEsS0FBOUIsSUFBdUNSLFFBQVFTLFVBQVIsQ0FBbUJELEtBQXBFO0FBQ0Q7O0FBRUQsUUFBSUUsVUFBVSxDQUFDUixNQUFELEVBQVNELEdBQVQsRUFBY0UsSUFBZCxFQUFvQkMsS0FBcEIsQ0FBZDs7QUFFQSxRQUFJTixNQUFKLEVBQVk7QUFDVixhQUFPSyxTQUFTQyxLQUFULEtBQW1CLElBQTFCO0FBQ0Q7O0FBRUQsUUFBSUwsTUFBSixFQUFZO0FBQ1YsYUFBT0UsUUFBUUMsTUFBUixLQUFtQixJQUExQjtBQUNEOztBQUVELFdBQU9RLFFBQVFySSxPQUFSLENBQWdCLEtBQWhCLE1BQTJCLENBQUMsQ0FBbkM7QUFDRDs7QUFFRDs7Ozs7OztBQU9BLFdBQVNxSCxhQUFULENBQXVCdkYsSUFBdkIsRUFBNkIyRCxJQUE3QixFQUFrQztBQUNoQzNELFdBQU9BLEtBQUtULE1BQUwsR0FBY1MsS0FBSyxDQUFMLENBQWQsR0FBd0JBLElBQS9COztBQUVBLFFBQUlBLFNBQVNrRCxNQUFULElBQW1CbEQsU0FBU29CLFFBQWhDLEVBQTBDO0FBQ3hDLFlBQU0sSUFBSW9GLEtBQUosQ0FBVSw4Q0FBVixDQUFOO0FBQ0Q7O0FBRUQsUUFBSUMsT0FBT3pHLEtBQUswRyxxQkFBTCxFQUFYO0FBQUEsUUFDSUMsVUFBVTNHLEtBQUs0RyxVQUFMLENBQWdCRixxQkFBaEIsRUFEZDtBQUFBLFFBRUlHLFVBQVV6RixTQUFTMEYsSUFBVCxDQUFjSixxQkFBZCxFQUZkO0FBQUEsUUFHSUssT0FBTzdELE9BQU84RCxXQUhsQjtBQUFBLFFBSUlDLE9BQU8vRCxPQUFPZ0UsV0FKbEI7O0FBTUEsV0FBTztBQUNMYixhQUFPSSxLQUFLSixLQURQO0FBRUxELGNBQVFLLEtBQUtMLE1BRlI7QUFHTEQsY0FBUTtBQUNOTCxhQUFLVyxLQUFLWCxHQUFMLEdBQVdpQixJQURWO0FBRU5mLGNBQU1TLEtBQUtULElBQUwsR0FBWWlCO0FBRlosT0FISDtBQU9MRSxrQkFBWTtBQUNWZCxlQUFPTSxRQUFRTixLQURMO0FBRVZELGdCQUFRTyxRQUFRUCxNQUZOO0FBR1ZELGdCQUFRO0FBQ05MLGVBQUthLFFBQVFiLEdBQVIsR0FBY2lCLElBRGI7QUFFTmYsZ0JBQU1XLFFBQVFYLElBQVIsR0FBZWlCO0FBRmY7QUFIRSxPQVBQO0FBZUxYLGtCQUFZO0FBQ1ZELGVBQU9RLFFBQVFSLEtBREw7QUFFVkQsZ0JBQVFTLFFBQVFULE1BRk47QUFHVkQsZ0JBQVE7QUFDTkwsZUFBS2lCLElBREM7QUFFTmYsZ0JBQU1pQjtBQUZBO0FBSEU7QUFmUCxLQUFQO0FBd0JEOztBQUVEOzs7Ozs7Ozs7Ozs7QUFZQSxXQUFTekIsVUFBVCxDQUFvQkMsT0FBcEIsRUFBNkIyQixNQUE3QixFQUFxQ0MsUUFBckMsRUFBK0NDLE9BQS9DLEVBQXdEQyxPQUF4RCxFQUFpRUMsVUFBakUsRUFBNkU7QUFDM0UsUUFBSUMsV0FBV2xDLGNBQWNFLE9BQWQsQ0FBZjtBQUFBLFFBQ0lpQyxjQUFjTixTQUFTN0IsY0FBYzZCLE1BQWQsQ0FBVCxHQUFpQyxJQURuRDs7QUFHQSxZQUFRQyxRQUFSO0FBQ0UsV0FBSyxLQUFMO0FBQ0UsZUFBTztBQUNMckIsZ0JBQU90SixXQUFXSSxHQUFYLEtBQW1CNEssWUFBWXZCLE1BQVosQ0FBbUJILElBQW5CLEdBQTBCeUIsU0FBU3BCLEtBQW5DLEdBQTJDcUIsWUFBWXJCLEtBQTFFLEdBQWtGcUIsWUFBWXZCLE1BQVosQ0FBbUJILElBRHZHO0FBRUxGLGVBQUs0QixZQUFZdkIsTUFBWixDQUFtQkwsR0FBbkIsSUFBMEIyQixTQUFTckIsTUFBVCxHQUFrQmtCLE9BQTVDO0FBRkEsU0FBUDtBQUlBO0FBQ0YsV0FBSyxNQUFMO0FBQ0UsZUFBTztBQUNMdEIsZ0JBQU0wQixZQUFZdkIsTUFBWixDQUFtQkgsSUFBbkIsSUFBMkJ5QixTQUFTcEIsS0FBVCxHQUFpQmtCLE9BQTVDLENBREQ7QUFFTHpCLGVBQUs0QixZQUFZdkIsTUFBWixDQUFtQkw7QUFGbkIsU0FBUDtBQUlBO0FBQ0YsV0FBSyxPQUFMO0FBQ0UsZUFBTztBQUNMRSxnQkFBTTBCLFlBQVl2QixNQUFaLENBQW1CSCxJQUFuQixHQUEwQjBCLFlBQVlyQixLQUF0QyxHQUE4Q2tCLE9BRC9DO0FBRUx6QixlQUFLNEIsWUFBWXZCLE1BQVosQ0FBbUJMO0FBRm5CLFNBQVA7QUFJQTtBQUNGLFdBQUssWUFBTDtBQUNFLGVBQU87QUFDTEUsZ0JBQU8wQixZQUFZdkIsTUFBWixDQUFtQkgsSUFBbkIsR0FBMkIwQixZQUFZckIsS0FBWixHQUFvQixDQUFoRCxHQUF1RG9CLFNBQVNwQixLQUFULEdBQWlCLENBRHpFO0FBRUxQLGVBQUs0QixZQUFZdkIsTUFBWixDQUFtQkwsR0FBbkIsSUFBMEIyQixTQUFTckIsTUFBVCxHQUFrQmtCLE9BQTVDO0FBRkEsU0FBUDtBQUlBO0FBQ0YsV0FBSyxlQUFMO0FBQ0UsZUFBTztBQUNMdEIsZ0JBQU13QixhQUFhRCxPQUFiLEdBQXlCRyxZQUFZdkIsTUFBWixDQUFtQkgsSUFBbkIsR0FBMkIwQixZQUFZckIsS0FBWixHQUFvQixDQUFoRCxHQUF1RG9CLFNBQVNwQixLQUFULEdBQWlCLENBRGpHO0FBRUxQLGVBQUs0QixZQUFZdkIsTUFBWixDQUFtQkwsR0FBbkIsR0FBeUI0QixZQUFZdEIsTUFBckMsR0FBOENrQjtBQUY5QyxTQUFQO0FBSUE7QUFDRixXQUFLLGFBQUw7QUFDRSxlQUFPO0FBQ0x0QixnQkFBTTBCLFlBQVl2QixNQUFaLENBQW1CSCxJQUFuQixJQUEyQnlCLFNBQVNwQixLQUFULEdBQWlCa0IsT0FBNUMsQ0FERDtBQUVMekIsZUFBTTRCLFlBQVl2QixNQUFaLENBQW1CTCxHQUFuQixHQUEwQjRCLFlBQVl0QixNQUFaLEdBQXFCLENBQWhELEdBQXVEcUIsU0FBU3JCLE1BQVQsR0FBa0I7QUFGekUsU0FBUDtBQUlBO0FBQ0YsV0FBSyxjQUFMO0FBQ0UsZUFBTztBQUNMSixnQkFBTTBCLFlBQVl2QixNQUFaLENBQW1CSCxJQUFuQixHQUEwQjBCLFlBQVlyQixLQUF0QyxHQUE4Q2tCLE9BQTlDLEdBQXdELENBRHpEO0FBRUx6QixlQUFNNEIsWUFBWXZCLE1BQVosQ0FBbUJMLEdBQW5CLEdBQTBCNEIsWUFBWXRCLE1BQVosR0FBcUIsQ0FBaEQsR0FBdURxQixTQUFTckIsTUFBVCxHQUFrQjtBQUZ6RSxTQUFQO0FBSUE7QUFDRixXQUFLLFFBQUw7QUFDRSxlQUFPO0FBQ0xKLGdCQUFPeUIsU0FBU25CLFVBQVQsQ0FBb0JILE1BQXBCLENBQTJCSCxJQUEzQixHQUFtQ3lCLFNBQVNuQixVQUFULENBQW9CRCxLQUFwQixHQUE0QixDQUFoRSxHQUF1RW9CLFNBQVNwQixLQUFULEdBQWlCLENBRHpGO0FBRUxQLGVBQU0yQixTQUFTbkIsVUFBVCxDQUFvQkgsTUFBcEIsQ0FBMkJMLEdBQTNCLEdBQWtDMkIsU0FBU25CLFVBQVQsQ0FBb0JGLE1BQXBCLEdBQTZCLENBQWhFLEdBQXVFcUIsU0FBU3JCLE1BQVQsR0FBa0I7QUFGekYsU0FBUDtBQUlBO0FBQ0YsV0FBSyxRQUFMO0FBQ0UsZUFBTztBQUNMSixnQkFBTSxDQUFDeUIsU0FBU25CLFVBQVQsQ0FBb0JELEtBQXBCLEdBQTRCb0IsU0FBU3BCLEtBQXRDLElBQStDLENBRGhEO0FBRUxQLGVBQUsyQixTQUFTbkIsVUFBVCxDQUFvQkgsTUFBcEIsQ0FBMkJMLEdBQTNCLEdBQWlDd0I7QUFGakMsU0FBUDtBQUlGLFdBQUssYUFBTDtBQUNFLGVBQU87QUFDTHRCLGdCQUFNeUIsU0FBU25CLFVBQVQsQ0FBb0JILE1BQXBCLENBQTJCSCxJQUQ1QjtBQUVMRixlQUFLMkIsU0FBU25CLFVBQVQsQ0FBb0JILE1BQXBCLENBQTJCTDtBQUYzQixTQUFQO0FBSUE7QUFDRixXQUFLLGFBQUw7QUFDRSxlQUFPO0FBQ0xFLGdCQUFNMEIsWUFBWXZCLE1BQVosQ0FBbUJILElBRHBCO0FBRUxGLGVBQUs0QixZQUFZdkIsTUFBWixDQUFtQkwsR0FBbkIsR0FBeUI0QixZQUFZdEIsTUFBckMsR0FBOENrQjtBQUY5QyxTQUFQO0FBSUE7QUFDRixXQUFLLGNBQUw7QUFDRSxlQUFPO0FBQ0x0QixnQkFBTTBCLFlBQVl2QixNQUFaLENBQW1CSCxJQUFuQixHQUEwQjBCLFlBQVlyQixLQUF0QyxHQUE4Q2tCLE9BQTlDLEdBQXdERSxTQUFTcEIsS0FEbEU7QUFFTFAsZUFBSzRCLFlBQVl2QixNQUFaLENBQW1CTCxHQUFuQixHQUF5QjRCLFlBQVl0QixNQUFyQyxHQUE4Q2tCO0FBRjlDLFNBQVA7QUFJQTtBQUNGO0FBQ0UsZUFBTztBQUNMdEIsZ0JBQU90SixXQUFXSSxHQUFYLEtBQW1CNEssWUFBWXZCLE1BQVosQ0FBbUJILElBQW5CLEdBQTBCeUIsU0FBU3BCLEtBQW5DLEdBQTJDcUIsWUFBWXJCLEtBQTFFLEdBQWtGcUIsWUFBWXZCLE1BQVosQ0FBbUJILElBQW5CLEdBQTBCdUIsT0FEOUc7QUFFTHpCLGVBQUs0QixZQUFZdkIsTUFBWixDQUFtQkwsR0FBbkIsR0FBeUI0QixZQUFZdEIsTUFBckMsR0FBOENrQjtBQUY5QyxTQUFQO0FBekVKO0FBOEVEO0FBRUEsQ0FoTUEsQ0FnTUNsQyxNQWhNRCxDQUFEO0NDRkE7Ozs7Ozs7O0FBUUE7O0FBRUEsQ0FBQyxVQUFTNUksQ0FBVCxFQUFZOztBQUViLE1BQU1tTCxXQUFXO0FBQ2YsT0FBRyxLQURZO0FBRWYsUUFBSSxPQUZXO0FBR2YsUUFBSSxRQUhXO0FBSWYsUUFBSSxPQUpXO0FBS2YsUUFBSSxZQUxXO0FBTWYsUUFBSSxVQU5XO0FBT2YsUUFBSSxhQVBXO0FBUWYsUUFBSTtBQVJXLEdBQWpCOztBQVdBLE1BQUlDLFdBQVcsRUFBZjs7QUFFQSxNQUFJQyxXQUFXO0FBQ2IxSSxVQUFNMkksWUFBWUgsUUFBWixDQURPOztBQUdiOzs7Ozs7QUFNQUksWUFUYSxZQVNKQyxLQVRJLEVBU0c7QUFDZCxVQUFJQyxNQUFNTixTQUFTSyxNQUFNRSxLQUFOLElBQWVGLE1BQU1HLE9BQTlCLEtBQTBDQyxPQUFPQyxZQUFQLENBQW9CTCxNQUFNRSxLQUExQixFQUFpQ0ksV0FBakMsRUFBcEQ7O0FBRUE7QUFDQUwsWUFBTUEsSUFBSTlDLE9BQUosQ0FBWSxLQUFaLEVBQW1CLEVBQW5CLENBQU47O0FBRUEsVUFBSTZDLE1BQU1PLFFBQVYsRUFBb0JOLGlCQUFlQSxHQUFmO0FBQ3BCLFVBQUlELE1BQU1RLE9BQVYsRUFBbUJQLGdCQUFjQSxHQUFkO0FBQ25CLFVBQUlELE1BQU1TLE1BQVYsRUFBa0JSLGVBQWFBLEdBQWI7O0FBRWxCO0FBQ0FBLFlBQU1BLElBQUk5QyxPQUFKLENBQVksSUFBWixFQUFrQixFQUFsQixDQUFOOztBQUVBLGFBQU84QyxHQUFQO0FBQ0QsS0F2Qlk7OztBQXlCYjs7Ozs7O0FBTUFTLGFBL0JhLFlBK0JIVixLQS9CRyxFQStCSVcsU0EvQkosRUErQmVDLFNBL0JmLEVBK0IwQjtBQUNyQyxVQUFJQyxjQUFjakIsU0FBU2UsU0FBVCxDQUFsQjtBQUFBLFVBQ0VSLFVBQVUsS0FBS0osUUFBTCxDQUFjQyxLQUFkLENBRFo7QUFBQSxVQUVFYyxJQUZGO0FBQUEsVUFHRUMsT0FIRjtBQUFBLFVBSUU1RixFQUpGOztBQU1BLFVBQUksQ0FBQzBGLFdBQUwsRUFBa0IsT0FBT3hKLFFBQVFrQixJQUFSLENBQWEsd0JBQWIsQ0FBUDs7QUFFbEIsVUFBSSxPQUFPc0ksWUFBWUcsR0FBbkIsS0FBMkIsV0FBL0IsRUFBNEM7QUFBRTtBQUMxQ0YsZUFBT0QsV0FBUCxDQUR3QyxDQUNwQjtBQUN2QixPQUZELE1BRU87QUFBRTtBQUNMLFlBQUluTSxXQUFXSSxHQUFYLEVBQUosRUFBc0JnTSxPQUFPdE0sRUFBRXlNLE1BQUYsQ0FBUyxFQUFULEVBQWFKLFlBQVlHLEdBQXpCLEVBQThCSCxZQUFZL0wsR0FBMUMsQ0FBUCxDQUF0QixLQUVLZ00sT0FBT3RNLEVBQUV5TSxNQUFGLENBQVMsRUFBVCxFQUFhSixZQUFZL0wsR0FBekIsRUFBOEIrTCxZQUFZRyxHQUExQyxDQUFQO0FBQ1I7QUFDREQsZ0JBQVVELEtBQUtYLE9BQUwsQ0FBVjs7QUFFQWhGLFdBQUt5RixVQUFVRyxPQUFWLENBQUw7QUFDQSxVQUFJNUYsTUFBTSxPQUFPQSxFQUFQLEtBQWMsVUFBeEIsRUFBb0M7QUFBRTtBQUNwQyxZQUFJK0YsY0FBYy9GLEdBQUdoQixLQUFILEVBQWxCO0FBQ0EsWUFBSXlHLFVBQVVPLE9BQVYsSUFBcUIsT0FBT1AsVUFBVU8sT0FBakIsS0FBNkIsVUFBdEQsRUFBa0U7QUFBRTtBQUNoRVAsb0JBQVVPLE9BQVYsQ0FBa0JELFdBQWxCO0FBQ0g7QUFDRixPQUxELE1BS087QUFDTCxZQUFJTixVQUFVUSxTQUFWLElBQXVCLE9BQU9SLFVBQVVRLFNBQWpCLEtBQStCLFVBQTFELEVBQXNFO0FBQUU7QUFDcEVSLG9CQUFVUSxTQUFWO0FBQ0g7QUFDRjtBQUNGLEtBNURZOzs7QUE4RGI7Ozs7O0FBS0FDLGlCQW5FYSxZQW1FQ3pMLFFBbkVELEVBbUVXO0FBQ3RCLFVBQUcsQ0FBQ0EsUUFBSixFQUFjO0FBQUMsZUFBTyxLQUFQO0FBQWU7QUFDOUIsYUFBT0EsU0FBU3VDLElBQVQsQ0FBYyw4S0FBZCxFQUE4TG1KLE1BQTlMLENBQXFNLFlBQVc7QUFDck4sWUFBSSxDQUFDOU0sRUFBRSxJQUFGLEVBQVErTSxFQUFSLENBQVcsVUFBWCxDQUFELElBQTJCL00sRUFBRSxJQUFGLEVBQVFPLElBQVIsQ0FBYSxVQUFiLElBQTJCLENBQTFELEVBQTZEO0FBQUUsaUJBQU8sS0FBUDtBQUFlLFNBRHVJLENBQ3RJO0FBQy9FLGVBQU8sSUFBUDtBQUNELE9BSE0sQ0FBUDtBQUlELEtBekVZOzs7QUEyRWI7Ozs7OztBQU1BeU0sWUFqRmEsWUFpRkpDLGFBakZJLEVBaUZXWCxJQWpGWCxFQWlGaUI7QUFDNUJsQixlQUFTNkIsYUFBVCxJQUEwQlgsSUFBMUI7QUFDRCxLQW5GWTs7O0FBcUZiOzs7O0FBSUFZLGFBekZhLFlBeUZIOUwsUUF6RkcsRUF5Rk87QUFDbEIsVUFBSStMLGFBQWFqTixXQUFXbUwsUUFBWCxDQUFvQndCLGFBQXBCLENBQWtDekwsUUFBbEMsQ0FBakI7QUFBQSxVQUNJZ00sa0JBQWtCRCxXQUFXRSxFQUFYLENBQWMsQ0FBZCxDQUR0QjtBQUFBLFVBRUlDLGlCQUFpQkgsV0FBV0UsRUFBWCxDQUFjLENBQUMsQ0FBZixDQUZyQjs7QUFJQWpNLGVBQVNtTSxFQUFULENBQVksc0JBQVosRUFBb0MsVUFBUy9CLEtBQVQsRUFBZ0I7QUFDbEQsWUFBSUEsTUFBTWdDLE1BQU4sS0FBaUJGLGVBQWUsQ0FBZixDQUFqQixJQUFzQ3BOLFdBQVdtTCxRQUFYLENBQW9CRSxRQUFwQixDQUE2QkMsS0FBN0IsTUFBd0MsS0FBbEYsRUFBeUY7QUFDdkZBLGdCQUFNaUMsY0FBTjtBQUNBTCwwQkFBZ0JNLEtBQWhCO0FBQ0QsU0FIRCxNQUlLLElBQUlsQyxNQUFNZ0MsTUFBTixLQUFpQkosZ0JBQWdCLENBQWhCLENBQWpCLElBQXVDbE4sV0FBV21MLFFBQVgsQ0FBb0JFLFFBQXBCLENBQTZCQyxLQUE3QixNQUF3QyxXQUFuRixFQUFnRztBQUNuR0EsZ0JBQU1pQyxjQUFOO0FBQ0FILHlCQUFlSSxLQUFmO0FBQ0Q7QUFDRixPQVREO0FBVUQsS0F4R1k7O0FBeUdiOzs7O0FBSUFDLGdCQTdHYSxZQTZHQXZNLFFBN0dBLEVBNkdVO0FBQ3JCQSxlQUFTd00sR0FBVCxDQUFhLHNCQUFiO0FBQ0Q7QUEvR1ksR0FBZjs7QUFrSEE7Ozs7QUFJQSxXQUFTdEMsV0FBVCxDQUFxQnVDLEdBQXJCLEVBQTBCO0FBQ3hCLFFBQUlDLElBQUksRUFBUjtBQUNBLFNBQUssSUFBSUMsRUFBVCxJQUFlRixHQUFmO0FBQW9CQyxRQUFFRCxJQUFJRSxFQUFKLENBQUYsSUFBYUYsSUFBSUUsRUFBSixDQUFiO0FBQXBCLEtBQ0EsT0FBT0QsQ0FBUDtBQUNEOztBQUVENU4sYUFBV21MLFFBQVgsR0FBc0JBLFFBQXRCO0FBRUMsQ0E3SUEsQ0E2SUN6QyxNQTdJRCxDQUFEO0NDVkE7O0FBRUEsQ0FBQyxVQUFTNUksQ0FBVCxFQUFZOztBQUViO0FBQ0EsTUFBTWdPLGlCQUFpQjtBQUNyQixlQUFZLGFBRFM7QUFFckJDLGVBQVksMENBRlM7QUFHckJDLGNBQVcseUNBSFU7QUFJckJDLFlBQVMseURBQ1AsbURBRE8sR0FFUCxtREFGTyxHQUdQLDhDQUhPLEdBSVAsMkNBSk8sR0FLUDtBQVRtQixHQUF2Qjs7QUFZQSxNQUFJakksYUFBYTtBQUNma0ksYUFBUyxFQURNOztBQUdmQyxhQUFTLEVBSE07O0FBS2Y7Ozs7O0FBS0FuTSxTQVZlLGNBVVA7QUFDTixVQUFJb00sT0FBTyxJQUFYO0FBQ0EsVUFBSUMsa0JBQWtCdk8sRUFBRSxnQkFBRixFQUFvQndPLEdBQXBCLENBQXdCLGFBQXhCLENBQXRCO0FBQ0EsVUFBSUMsWUFBSjs7QUFFQUEscUJBQWVDLG1CQUFtQkgsZUFBbkIsQ0FBZjs7QUFFQSxXQUFLLElBQUk5QyxHQUFULElBQWdCZ0QsWUFBaEIsRUFBOEI7QUFDNUIsWUFBR0EsYUFBYUUsY0FBYixDQUE0QmxELEdBQTVCLENBQUgsRUFBcUM7QUFDbkM2QyxlQUFLRixPQUFMLENBQWE3TSxJQUFiLENBQWtCO0FBQ2hCZCxrQkFBTWdMLEdBRFU7QUFFaEJtRCxvREFBc0NILGFBQWFoRCxHQUFiLENBQXRDO0FBRmdCLFdBQWxCO0FBSUQ7QUFDRjs7QUFFRCxXQUFLNEMsT0FBTCxHQUFlLEtBQUtRLGVBQUwsRUFBZjs7QUFFQSxXQUFLQyxRQUFMO0FBQ0QsS0E3QmM7OztBQStCZjs7Ozs7O0FBTUFDLFdBckNlLFlBcUNQQyxJQXJDTyxFQXFDRDtBQUNaLFVBQUlDLFFBQVEsS0FBS0MsR0FBTCxDQUFTRixJQUFULENBQVo7O0FBRUEsVUFBSUMsS0FBSixFQUFXO0FBQ1QsZUFBT3ZJLE9BQU95SSxVQUFQLENBQWtCRixLQUFsQixFQUF5QkcsT0FBaEM7QUFDRDs7QUFFRCxhQUFPLEtBQVA7QUFDRCxLQTdDYzs7O0FBK0NmOzs7Ozs7QUFNQXJDLE1BckRlLFlBcURaaUMsSUFyRFksRUFxRE47QUFDUEEsYUFBT0EsS0FBSzFLLElBQUwsR0FBWUwsS0FBWixDQUFrQixHQUFsQixDQUFQO0FBQ0EsVUFBRytLLEtBQUtqTSxNQUFMLEdBQWMsQ0FBZCxJQUFtQmlNLEtBQUssQ0FBTCxNQUFZLE1BQWxDLEVBQTBDO0FBQ3hDLFlBQUdBLEtBQUssQ0FBTCxNQUFZLEtBQUtILGVBQUwsRUFBZixFQUF1QyxPQUFPLElBQVA7QUFDeEMsT0FGRCxNQUVPO0FBQ0wsZUFBTyxLQUFLRSxPQUFMLENBQWFDLEtBQUssQ0FBTCxDQUFiLENBQVA7QUFDRDtBQUNELGFBQU8sS0FBUDtBQUNELEtBN0RjOzs7QUErRGY7Ozs7OztBQU1BRSxPQXJFZSxZQXFFWEYsSUFyRVcsRUFxRUw7QUFDUixXQUFLLElBQUl2TCxDQUFULElBQWMsS0FBSzJLLE9BQW5CLEVBQTRCO0FBQzFCLFlBQUcsS0FBS0EsT0FBTCxDQUFhTyxjQUFiLENBQTRCbEwsQ0FBNUIsQ0FBSCxFQUFtQztBQUNqQyxjQUFJd0wsUUFBUSxLQUFLYixPQUFMLENBQWEzSyxDQUFiLENBQVo7QUFDQSxjQUFJdUwsU0FBU0MsTUFBTXhPLElBQW5CLEVBQXlCLE9BQU93TyxNQUFNTCxLQUFiO0FBQzFCO0FBQ0Y7O0FBRUQsYUFBTyxJQUFQO0FBQ0QsS0E5RWM7OztBQWdGZjs7Ozs7O0FBTUFDLG1CQXRGZSxjQXNGRztBQUNoQixVQUFJUSxPQUFKOztBQUVBLFdBQUssSUFBSTVMLElBQUksQ0FBYixFQUFnQkEsSUFBSSxLQUFLMkssT0FBTCxDQUFhckwsTUFBakMsRUFBeUNVLEdBQXpDLEVBQThDO0FBQzVDLFlBQUl3TCxRQUFRLEtBQUtiLE9BQUwsQ0FBYTNLLENBQWIsQ0FBWjs7QUFFQSxZQUFJaUQsT0FBT3lJLFVBQVAsQ0FBa0JGLE1BQU1MLEtBQXhCLEVBQStCUSxPQUFuQyxFQUE0QztBQUMxQ0Msb0JBQVVKLEtBQVY7QUFDRDtBQUNGOztBQUVELFVBQUksT0FBT0ksT0FBUCxLQUFtQixRQUF2QixFQUFpQztBQUMvQixlQUFPQSxRQUFRNU8sSUFBZjtBQUNELE9BRkQsTUFFTztBQUNMLGVBQU80TyxPQUFQO0FBQ0Q7QUFDRixLQXRHYzs7O0FBd0dmOzs7OztBQUtBUCxZQTdHZSxjQTZHSjtBQUFBOztBQUNUOU8sUUFBRTBHLE1BQUYsRUFBVTZHLEVBQVYsQ0FBYSxzQkFBYixFQUFxQyxZQUFNO0FBQ3pDLFlBQUkrQixVQUFVLE1BQUtULGVBQUwsRUFBZDtBQUFBLFlBQXNDVSxjQUFjLE1BQUtsQixPQUF6RDs7QUFFQSxZQUFJaUIsWUFBWUMsV0FBaEIsRUFBNkI7QUFDM0I7QUFDQSxnQkFBS2xCLE9BQUwsR0FBZWlCLE9BQWY7O0FBRUE7QUFDQXRQLFlBQUUwRyxNQUFGLEVBQVVwRixPQUFWLENBQWtCLHVCQUFsQixFQUEyQyxDQUFDZ08sT0FBRCxFQUFVQyxXQUFWLENBQTNDO0FBQ0Q7QUFDRixPQVZEO0FBV0Q7QUF6SGMsR0FBakI7O0FBNEhBclAsYUFBV2dHLFVBQVgsR0FBd0JBLFVBQXhCOztBQUVBO0FBQ0E7QUFDQVEsU0FBT3lJLFVBQVAsS0FBc0J6SSxPQUFPeUksVUFBUCxHQUFvQixZQUFXO0FBQ25EOztBQUVBOztBQUNBLFFBQUlLLGFBQWM5SSxPQUFPOEksVUFBUCxJQUFxQjlJLE9BQU8rSSxLQUE5Qzs7QUFFQTtBQUNBLFFBQUksQ0FBQ0QsVUFBTCxFQUFpQjtBQUNmLFVBQUl4SyxRQUFVSixTQUFTQyxhQUFULENBQXVCLE9BQXZCLENBQWQ7QUFBQSxVQUNBNkssU0FBYzlLLFNBQVMrSyxvQkFBVCxDQUE4QixRQUE5QixFQUF3QyxDQUF4QyxDQURkO0FBQUEsVUFFQUMsT0FBYyxJQUZkOztBQUlBNUssWUFBTTdDLElBQU4sR0FBYyxVQUFkO0FBQ0E2QyxZQUFNNkssRUFBTixHQUFjLG1CQUFkOztBQUVBSCxnQkFBVUEsT0FBT3RGLFVBQWpCLElBQStCc0YsT0FBT3RGLFVBQVAsQ0FBa0IwRixZQUFsQixDQUErQjlLLEtBQS9CLEVBQXNDMEssTUFBdEMsQ0FBL0I7O0FBRUE7QUFDQUUsYUFBUSxzQkFBc0JsSixNQUF2QixJQUFrQ0EsT0FBT3FKLGdCQUFQLENBQXdCL0ssS0FBeEIsRUFBK0IsSUFBL0IsQ0FBbEMsSUFBMEVBLE1BQU1nTCxZQUF2Rjs7QUFFQVIsbUJBQWE7QUFDWFMsbUJBRFcsWUFDQ1IsS0FERCxFQUNRO0FBQ2pCLGNBQUlTLG1CQUFpQlQsS0FBakIsMkNBQUo7O0FBRUE7QUFDQSxjQUFJekssTUFBTW1MLFVBQVYsRUFBc0I7QUFDcEJuTCxrQkFBTW1MLFVBQU4sQ0FBaUJDLE9BQWpCLEdBQTJCRixJQUEzQjtBQUNELFdBRkQsTUFFTztBQUNMbEwsa0JBQU1xTCxXQUFOLEdBQW9CSCxJQUFwQjtBQUNEOztBQUVEO0FBQ0EsaUJBQU9OLEtBQUsvRixLQUFMLEtBQWUsS0FBdEI7QUFDRDtBQWJVLE9BQWI7QUFlRDs7QUFFRCxXQUFPLFVBQVM0RixLQUFULEVBQWdCO0FBQ3JCLGFBQU87QUFDTEwsaUJBQVNJLFdBQVdTLFdBQVgsQ0FBdUJSLFNBQVMsS0FBaEMsQ0FESjtBQUVMQSxlQUFPQSxTQUFTO0FBRlgsT0FBUDtBQUlELEtBTEQ7QUFNRCxHQTNDeUMsRUFBMUM7O0FBNkNBO0FBQ0EsV0FBU2Ysa0JBQVQsQ0FBNEJsRyxHQUE1QixFQUFpQztBQUMvQixRQUFJOEgsY0FBYyxFQUFsQjs7QUFFQSxRQUFJLE9BQU85SCxHQUFQLEtBQWUsUUFBbkIsRUFBNkI7QUFDM0IsYUFBTzhILFdBQVA7QUFDRDs7QUFFRDlILFVBQU1BLElBQUlsRSxJQUFKLEdBQVdoQixLQUFYLENBQWlCLENBQWpCLEVBQW9CLENBQUMsQ0FBckIsQ0FBTixDQVArQixDQU9BOztBQUUvQixRQUFJLENBQUNrRixHQUFMLEVBQVU7QUFDUixhQUFPOEgsV0FBUDtBQUNEOztBQUVEQSxrQkFBYzlILElBQUl2RSxLQUFKLENBQVUsR0FBVixFQUFlc00sTUFBZixDQUFzQixVQUFTQyxHQUFULEVBQWNDLEtBQWQsRUFBcUI7QUFDdkQsVUFBSUMsUUFBUUQsTUFBTTlILE9BQU4sQ0FBYyxLQUFkLEVBQXFCLEdBQXJCLEVBQTBCMUUsS0FBMUIsQ0FBZ0MsR0FBaEMsQ0FBWjtBQUNBLFVBQUl3SCxNQUFNaUYsTUFBTSxDQUFOLENBQVY7QUFDQSxVQUFJQyxNQUFNRCxNQUFNLENBQU4sQ0FBVjtBQUNBakYsWUFBTW1GLG1CQUFtQm5GLEdBQW5CLENBQU47O0FBRUE7QUFDQTtBQUNBa0YsWUFBTUEsUUFBUXBLLFNBQVIsR0FBb0IsSUFBcEIsR0FBMkJxSyxtQkFBbUJELEdBQW5CLENBQWpDOztBQUVBLFVBQUksQ0FBQ0gsSUFBSTdCLGNBQUosQ0FBbUJsRCxHQUFuQixDQUFMLEVBQThCO0FBQzVCK0UsWUFBSS9FLEdBQUosSUFBV2tGLEdBQVg7QUFDRCxPQUZELE1BRU8sSUFBSXhLLE1BQU0wSyxPQUFOLENBQWNMLElBQUkvRSxHQUFKLENBQWQsQ0FBSixFQUE2QjtBQUNsQytFLFlBQUkvRSxHQUFKLEVBQVNsSyxJQUFULENBQWNvUCxHQUFkO0FBQ0QsT0FGTSxNQUVBO0FBQ0xILFlBQUkvRSxHQUFKLElBQVcsQ0FBQytFLElBQUkvRSxHQUFKLENBQUQsRUFBV2tGLEdBQVgsQ0FBWDtBQUNEO0FBQ0QsYUFBT0gsR0FBUDtBQUNELEtBbEJhLEVBa0JYLEVBbEJXLENBQWQ7O0FBb0JBLFdBQU9GLFdBQVA7QUFDRDs7QUFFRHBRLGFBQVdnRyxVQUFYLEdBQXdCQSxVQUF4QjtBQUVDLENBbk9BLENBbU9DMEMsTUFuT0QsQ0FBRDtDQ0ZBOztBQUVBLENBQUMsVUFBUzVJLENBQVQsRUFBWTs7QUFFYjs7Ozs7QUFLQSxNQUFNOFEsY0FBZ0IsQ0FBQyxXQUFELEVBQWMsV0FBZCxDQUF0QjtBQUNBLE1BQU1DLGdCQUFnQixDQUFDLGtCQUFELEVBQXFCLGtCQUFyQixDQUF0Qjs7QUFFQSxNQUFNQyxTQUFTO0FBQ2JDLGVBQVcsVUFBU2hJLE9BQVQsRUFBa0JpSSxTQUFsQixFQUE2QkMsRUFBN0IsRUFBaUM7QUFDMUNDLGNBQVEsSUFBUixFQUFjbkksT0FBZCxFQUF1QmlJLFNBQXZCLEVBQWtDQyxFQUFsQztBQUNELEtBSFk7O0FBS2JFLGdCQUFZLFVBQVNwSSxPQUFULEVBQWtCaUksU0FBbEIsRUFBNkJDLEVBQTdCLEVBQWlDO0FBQzNDQyxjQUFRLEtBQVIsRUFBZW5JLE9BQWYsRUFBd0JpSSxTQUF4QixFQUFtQ0MsRUFBbkM7QUFDRDtBQVBZLEdBQWY7O0FBVUEsV0FBU0csSUFBVCxDQUFjQyxRQUFkLEVBQXdCL04sSUFBeEIsRUFBOEJtRCxFQUE5QixFQUFpQztBQUMvQixRQUFJNkssSUFBSjtBQUFBLFFBQVVDLElBQVY7QUFBQSxRQUFnQjdKLFFBQVEsSUFBeEI7QUFDQTs7QUFFQSxRQUFJMkosYUFBYSxDQUFqQixFQUFvQjtBQUNsQjVLLFNBQUdoQixLQUFILENBQVNuQyxJQUFUO0FBQ0FBLFdBQUtsQyxPQUFMLENBQWEscUJBQWIsRUFBb0MsQ0FBQ2tDLElBQUQsQ0FBcEMsRUFBNEMwQixjQUE1QyxDQUEyRCxxQkFBM0QsRUFBa0YsQ0FBQzFCLElBQUQsQ0FBbEY7QUFDQTtBQUNEOztBQUVELGFBQVNrTyxJQUFULENBQWNDLEVBQWQsRUFBaUI7QUFDZixVQUFHLENBQUMvSixLQUFKLEVBQVdBLFFBQVErSixFQUFSO0FBQ1g7QUFDQUYsYUFBT0UsS0FBSy9KLEtBQVo7QUFDQWpCLFNBQUdoQixLQUFILENBQVNuQyxJQUFUOztBQUVBLFVBQUdpTyxPQUFPRixRQUFWLEVBQW1CO0FBQUVDLGVBQU85SyxPQUFPTSxxQkFBUCxDQUE2QjBLLElBQTdCLEVBQW1DbE8sSUFBbkMsQ0FBUDtBQUFrRCxPQUF2RSxNQUNJO0FBQ0ZrRCxlQUFPUSxvQkFBUCxDQUE0QnNLLElBQTVCO0FBQ0FoTyxhQUFLbEMsT0FBTCxDQUFhLHFCQUFiLEVBQW9DLENBQUNrQyxJQUFELENBQXBDLEVBQTRDMEIsY0FBNUMsQ0FBMkQscUJBQTNELEVBQWtGLENBQUMxQixJQUFELENBQWxGO0FBQ0Q7QUFDRjtBQUNEZ08sV0FBTzlLLE9BQU9NLHFCQUFQLENBQTZCMEssSUFBN0IsQ0FBUDtBQUNEOztBQUVEOzs7Ozs7Ozs7QUFTQSxXQUFTTixPQUFULENBQWlCUSxJQUFqQixFQUF1QjNJLE9BQXZCLEVBQWdDaUksU0FBaEMsRUFBMkNDLEVBQTNDLEVBQStDO0FBQzdDbEksY0FBVWpKLEVBQUVpSixPQUFGLEVBQVdvRSxFQUFYLENBQWMsQ0FBZCxDQUFWOztBQUVBLFFBQUksQ0FBQ3BFLFFBQVFsRyxNQUFiLEVBQXFCOztBQUVyQixRQUFJOE8sWUFBWUQsT0FBT2QsWUFBWSxDQUFaLENBQVAsR0FBd0JBLFlBQVksQ0FBWixDQUF4QztBQUNBLFFBQUlnQixjQUFjRixPQUFPYixjQUFjLENBQWQsQ0FBUCxHQUEwQkEsY0FBYyxDQUFkLENBQTVDOztBQUVBO0FBQ0FnQjs7QUFFQTlJLFlBQ0crSSxRQURILENBQ1lkLFNBRFosRUFFRzFDLEdBRkgsQ0FFTyxZQUZQLEVBRXFCLE1BRnJCOztBQUlBeEgsMEJBQXNCLFlBQU07QUFDMUJpQyxjQUFRK0ksUUFBUixDQUFpQkgsU0FBakI7QUFDQSxVQUFJRCxJQUFKLEVBQVUzSSxRQUFRZ0osSUFBUjtBQUNYLEtBSEQ7O0FBS0E7QUFDQWpMLDBCQUFzQixZQUFNO0FBQzFCaUMsY0FBUSxDQUFSLEVBQVdpSixXQUFYO0FBQ0FqSixjQUNHdUYsR0FESCxDQUNPLFlBRFAsRUFDcUIsRUFEckIsRUFFR3dELFFBRkgsQ0FFWUYsV0FGWjtBQUdELEtBTEQ7O0FBT0E7QUFDQTdJLFlBQVFrSixHQUFSLENBQVlqUyxXQUFXd0UsYUFBWCxDQUF5QnVFLE9BQXpCLENBQVosRUFBK0NtSixNQUEvQzs7QUFFQTtBQUNBLGFBQVNBLE1BQVQsR0FBa0I7QUFDaEIsVUFBSSxDQUFDUixJQUFMLEVBQVczSSxRQUFRb0osSUFBUjtBQUNYTjtBQUNBLFVBQUlaLEVBQUosRUFBUUEsR0FBR3hMLEtBQUgsQ0FBU3NELE9BQVQ7QUFDVDs7QUFFRDtBQUNBLGFBQVM4SSxLQUFULEdBQWlCO0FBQ2Y5SSxjQUFRLENBQVIsRUFBV2pFLEtBQVgsQ0FBaUJzTixrQkFBakIsR0FBc0MsQ0FBdEM7QUFDQXJKLGNBQVFoRCxXQUFSLENBQXVCNEwsU0FBdkIsU0FBb0NDLFdBQXBDLFNBQW1EWixTQUFuRDtBQUNEO0FBQ0Y7O0FBRURoUixhQUFXb1IsSUFBWCxHQUFrQkEsSUFBbEI7QUFDQXBSLGFBQVc4USxNQUFYLEdBQW9CQSxNQUFwQjtBQUVDLENBdEdBLENBc0dDcEksTUF0R0QsQ0FBRDtDQ0ZBOztBQUVBLENBQUMsVUFBUzVJLENBQVQsRUFBWTs7QUFFYixNQUFNdVMsT0FBTztBQUNYQyxXQURXLFlBQ0hDLElBREcsRUFDZ0I7QUFBQSxVQUFidFEsSUFBYSx1RUFBTixJQUFNOztBQUN6QnNRLFdBQUtsUyxJQUFMLENBQVUsTUFBVixFQUFrQixTQUFsQjs7QUFFQSxVQUFJbVMsUUFBUUQsS0FBSzlPLElBQUwsQ0FBVSxJQUFWLEVBQWdCcEQsSUFBaEIsQ0FBcUIsRUFBQyxRQUFRLFVBQVQsRUFBckIsQ0FBWjtBQUFBLFVBQ0lvUyx1QkFBcUJ4USxJQUFyQixhQURKO0FBQUEsVUFFSXlRLGVBQWtCRCxZQUFsQixVQUZKO0FBQUEsVUFHSUUsc0JBQW9CMVEsSUFBcEIsb0JBSEo7O0FBS0F1USxZQUFNelEsSUFBTixDQUFXLFlBQVc7QUFDcEIsWUFBSTZRLFFBQVE5UyxFQUFFLElBQUYsQ0FBWjtBQUFBLFlBQ0krUyxPQUFPRCxNQUFNRSxRQUFOLENBQWUsSUFBZixDQURYOztBQUdBLFlBQUlELEtBQUtoUSxNQUFULEVBQWlCO0FBQ2YrUCxnQkFDR2QsUUFESCxDQUNZYSxXQURaLEVBRUd0UyxJQUZILENBRVE7QUFDSiw2QkFBaUIsSUFEYjtBQUVKLDBCQUFjdVMsTUFBTUUsUUFBTixDQUFlLFNBQWYsRUFBMEI5QyxJQUExQjtBQUZWLFdBRlI7QUFNRTtBQUNBO0FBQ0E7QUFDQSxjQUFHL04sU0FBUyxXQUFaLEVBQXlCO0FBQ3ZCMlEsa0JBQU12UyxJQUFOLENBQVcsRUFBQyxpQkFBaUIsS0FBbEIsRUFBWDtBQUNEOztBQUVId1MsZUFDR2YsUUFESCxjQUN1QlcsWUFEdkIsRUFFR3BTLElBRkgsQ0FFUTtBQUNKLDRCQUFnQixFQURaO0FBRUosb0JBQVE7QUFGSixXQUZSO0FBTUEsY0FBRzRCLFNBQVMsV0FBWixFQUF5QjtBQUN2QjRRLGlCQUFLeFMsSUFBTCxDQUFVLEVBQUMsZUFBZSxJQUFoQixFQUFWO0FBQ0Q7QUFDRjs7QUFFRCxZQUFJdVMsTUFBTTVKLE1BQU4sQ0FBYSxnQkFBYixFQUErQm5HLE1BQW5DLEVBQTJDO0FBQ3pDK1AsZ0JBQU1kLFFBQU4sc0JBQWtDWSxZQUFsQztBQUNEO0FBQ0YsT0FoQ0Q7O0FBa0NBO0FBQ0QsS0E1Q1U7QUE4Q1hLLFFBOUNXLFlBOENOUixJQTlDTSxFQThDQXRRLElBOUNBLEVBOENNO0FBQ2YsVUFBSTtBQUNBd1EsNkJBQXFCeFEsSUFBckIsYUFESjtBQUFBLFVBRUl5USxlQUFrQkQsWUFBbEIsVUFGSjtBQUFBLFVBR0lFLHNCQUFvQjFRLElBQXBCLG9CQUhKOztBQUtBc1EsV0FDRzlPLElBREgsQ0FDUSx3QkFEUixFQUVHc0MsV0FGSCxDQUVrQjBNLFlBRmxCLFNBRWtDQyxZQUZsQyxTQUVrREMsV0FGbEQseUNBR0dsUixVQUhILENBR2MsY0FIZCxFQUc4QjZNLEdBSDlCLENBR2tDLFNBSGxDLEVBRzZDLEVBSDdDOztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRDtBQXZFVSxHQUFiOztBQTBFQXRPLGFBQVdxUyxJQUFYLEdBQWtCQSxJQUFsQjtBQUVDLENBOUVBLENBOEVDM0osTUE5RUQsQ0FBRDtDQ0ZBOztBQUVBLENBQUMsVUFBUzVJLENBQVQsRUFBWTs7QUFFYixXQUFTa1QsS0FBVCxDQUFlMVAsSUFBZixFQUFxQjJQLE9BQXJCLEVBQThCaEMsRUFBOUIsRUFBa0M7QUFDaEMsUUFBSS9PLFFBQVEsSUFBWjtBQUFBLFFBQ0ltUCxXQUFXNEIsUUFBUTVCLFFBRHZCO0FBQUEsUUFDZ0M7QUFDNUI2QixnQkFBWTFRLE9BQU9DLElBQVAsQ0FBWWEsS0FBS25DLElBQUwsRUFBWixFQUF5QixDQUF6QixLQUErQixPQUYvQztBQUFBLFFBR0lnUyxTQUFTLENBQUMsQ0FIZDtBQUFBLFFBSUl6TCxLQUpKO0FBQUEsUUFLSXJDLEtBTEo7O0FBT0EsU0FBSytOLFFBQUwsR0FBZ0IsS0FBaEI7O0FBRUEsU0FBS0MsT0FBTCxHQUFlLFlBQVc7QUFDeEJGLGVBQVMsQ0FBQyxDQUFWO0FBQ0EzTCxtQkFBYW5DLEtBQWI7QUFDQSxXQUFLcUMsS0FBTDtBQUNELEtBSkQ7O0FBTUEsU0FBS0EsS0FBTCxHQUFhLFlBQVc7QUFDdEIsV0FBSzBMLFFBQUwsR0FBZ0IsS0FBaEI7QUFDQTtBQUNBNUwsbUJBQWFuQyxLQUFiO0FBQ0E4TixlQUFTQSxVQUFVLENBQVYsR0FBYzlCLFFBQWQsR0FBeUI4QixNQUFsQztBQUNBN1AsV0FBS25DLElBQUwsQ0FBVSxRQUFWLEVBQW9CLEtBQXBCO0FBQ0F1RyxjQUFRaEIsS0FBS0MsR0FBTCxFQUFSO0FBQ0F0QixjQUFRTixXQUFXLFlBQVU7QUFDM0IsWUFBR2tPLFFBQVFLLFFBQVgsRUFBb0I7QUFDbEJwUixnQkFBTW1SLE9BQU4sR0FEa0IsQ0FDRjtBQUNqQjtBQUNELFlBQUlwQyxNQUFNLE9BQU9BLEVBQVAsS0FBYyxVQUF4QixFQUFvQztBQUFFQTtBQUFPO0FBQzlDLE9BTE8sRUFLTGtDLE1BTEssQ0FBUjtBQU1BN1AsV0FBS2xDLE9BQUwsb0JBQThCOFIsU0FBOUI7QUFDRCxLQWREOztBQWdCQSxTQUFLSyxLQUFMLEdBQWEsWUFBVztBQUN0QixXQUFLSCxRQUFMLEdBQWdCLElBQWhCO0FBQ0E7QUFDQTVMLG1CQUFhbkMsS0FBYjtBQUNBL0IsV0FBS25DLElBQUwsQ0FBVSxRQUFWLEVBQW9CLElBQXBCO0FBQ0EsVUFBSXlELE1BQU04QixLQUFLQyxHQUFMLEVBQVY7QUFDQXdNLGVBQVNBLFVBQVV2TyxNQUFNOEMsS0FBaEIsQ0FBVDtBQUNBcEUsV0FBS2xDLE9BQUwscUJBQStCOFIsU0FBL0I7QUFDRCxLQVJEO0FBU0Q7O0FBRUQ7Ozs7O0FBS0EsV0FBU00sY0FBVCxDQUF3QkMsTUFBeEIsRUFBZ0NwTSxRQUFoQyxFQUF5QztBQUN2QyxRQUFJK0csT0FBTyxJQUFYO0FBQUEsUUFDSXNGLFdBQVdELE9BQU81USxNQUR0Qjs7QUFHQSxRQUFJNlEsYUFBYSxDQUFqQixFQUFvQjtBQUNsQnJNO0FBQ0Q7O0FBRURvTSxXQUFPMVIsSUFBUCxDQUFZLFlBQVc7QUFDckI7QUFDQSxVQUFJLEtBQUs0UixRQUFMLElBQWtCLEtBQUtDLFVBQUwsS0FBb0IsQ0FBdEMsSUFBNkMsS0FBS0EsVUFBTCxLQUFvQixVQUFyRSxFQUFrRjtBQUNoRkM7QUFDRDtBQUNEO0FBSEEsV0FJSztBQUNIO0FBQ0EsY0FBSUMsTUFBTWhVLEVBQUUsSUFBRixFQUFRTyxJQUFSLENBQWEsS0FBYixDQUFWO0FBQ0FQLFlBQUUsSUFBRixFQUFRTyxJQUFSLENBQWEsS0FBYixFQUFvQnlULE1BQU0sR0FBTixHQUFhLElBQUlwTixJQUFKLEdBQVdFLE9BQVgsRUFBakM7QUFDQTlHLFlBQUUsSUFBRixFQUFRbVMsR0FBUixDQUFZLE1BQVosRUFBb0IsWUFBVztBQUM3QjRCO0FBQ0QsV0FGRDtBQUdEO0FBQ0YsS0FkRDs7QUFnQkEsYUFBU0EsaUJBQVQsR0FBNkI7QUFDM0JIO0FBQ0EsVUFBSUEsYUFBYSxDQUFqQixFQUFvQjtBQUNsQnJNO0FBQ0Q7QUFDRjtBQUNGOztBQUVEckgsYUFBV2dULEtBQVgsR0FBbUJBLEtBQW5CO0FBQ0FoVCxhQUFXd1QsY0FBWCxHQUE0QkEsY0FBNUI7QUFFQyxDQXJGQSxDQXFGQzlLLE1BckZELENBQUQ7OztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxVQUFTNUksQ0FBVCxFQUFZOztBQUVYQSxHQUFFaVUsU0FBRixHQUFjO0FBQ1o5VCxXQUFTLE9BREc7QUFFWitULFdBQVMsa0JBQWtCdFAsU0FBU3VQLGVBRnhCO0FBR1oxRyxrQkFBZ0IsS0FISjtBQUlaMkcsaUJBQWUsRUFKSDtBQUtaQyxpQkFBZTtBQUxILEVBQWQ7O0FBUUEsS0FBTUMsU0FBTjtBQUFBLEtBQ01DLFNBRE47QUFBQSxLQUVNQyxTQUZOO0FBQUEsS0FHTUMsV0FITjtBQUFBLEtBSU1DLFdBQVcsS0FKakI7O0FBTUEsVUFBU0MsVUFBVCxHQUFzQjtBQUNwQjtBQUNBLE9BQUtDLG1CQUFMLENBQXlCLFdBQXpCLEVBQXNDQyxXQUF0QztBQUNBLE9BQUtELG1CQUFMLENBQXlCLFVBQXpCLEVBQXFDRCxVQUFyQztBQUNBRCxhQUFXLEtBQVg7QUFDRDs7QUFFRCxVQUFTRyxXQUFULENBQXFCM1EsQ0FBckIsRUFBd0I7QUFDdEIsTUFBSWxFLEVBQUVpVSxTQUFGLENBQVl4RyxjQUFoQixFQUFnQztBQUFFdkosS0FBRXVKLGNBQUY7QUFBcUI7QUFDdkQsTUFBR2lILFFBQUgsRUFBYTtBQUNYLE9BQUlJLElBQUk1USxFQUFFNlEsT0FBRixDQUFVLENBQVYsRUFBYUMsS0FBckI7QUFDQSxPQUFJQyxJQUFJL1EsRUFBRTZRLE9BQUYsQ0FBVSxDQUFWLEVBQWFHLEtBQXJCO0FBQ0EsT0FBSUMsS0FBS2IsWUFBWVEsQ0FBckI7QUFDQSxPQUFJTSxLQUFLYixZQUFZVSxDQUFyQjtBQUNBLE9BQUlJLEdBQUo7QUFDQVosaUJBQWMsSUFBSTdOLElBQUosR0FBV0UsT0FBWCxLQUF1QjBOLFNBQXJDO0FBQ0EsT0FBR3ZSLEtBQUtxUyxHQUFMLENBQVNILEVBQVQsS0FBZ0JuVixFQUFFaVUsU0FBRixDQUFZRyxhQUE1QixJQUE2Q0ssZUFBZXpVLEVBQUVpVSxTQUFGLENBQVlJLGFBQTNFLEVBQTBGO0FBQ3hGZ0IsVUFBTUYsS0FBSyxDQUFMLEdBQVMsTUFBVCxHQUFrQixPQUF4QjtBQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FBR0UsR0FBSCxFQUFRO0FBQ05uUixNQUFFdUosY0FBRjtBQUNBa0gsZUFBV3RPLElBQVgsQ0FBZ0IsSUFBaEI7QUFDQXJHLE1BQUUsSUFBRixFQUFRc0IsT0FBUixDQUFnQixPQUFoQixFQUF5QitULEdBQXpCLEVBQThCL1QsT0FBOUIsV0FBOEMrVCxHQUE5QztBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxVQUFTRSxZQUFULENBQXNCclIsQ0FBdEIsRUFBeUI7QUFDdkIsTUFBSUEsRUFBRTZRLE9BQUYsQ0FBVWhTLE1BQVYsSUFBb0IsQ0FBeEIsRUFBMkI7QUFDekJ1UixlQUFZcFEsRUFBRTZRLE9BQUYsQ0FBVSxDQUFWLEVBQWFDLEtBQXpCO0FBQ0FULGVBQVlyUSxFQUFFNlEsT0FBRixDQUFVLENBQVYsRUFBYUcsS0FBekI7QUFDQVIsY0FBVyxJQUFYO0FBQ0FGLGVBQVksSUFBSTVOLElBQUosR0FBV0UsT0FBWCxFQUFaO0FBQ0EsUUFBSzBPLGdCQUFMLENBQXNCLFdBQXRCLEVBQW1DWCxXQUFuQyxFQUFnRCxLQUFoRDtBQUNBLFFBQUtXLGdCQUFMLENBQXNCLFVBQXRCLEVBQWtDYixVQUFsQyxFQUE4QyxLQUE5QztBQUNEO0FBQ0Y7O0FBRUQsVUFBU2MsSUFBVCxHQUFnQjtBQUNkLE9BQUtELGdCQUFMLElBQXlCLEtBQUtBLGdCQUFMLENBQXNCLFlBQXRCLEVBQW9DRCxZQUFwQyxFQUFrRCxLQUFsRCxDQUF6QjtBQUNEOztBQUVELFVBQVNHLFFBQVQsR0FBb0I7QUFDbEIsT0FBS2QsbUJBQUwsQ0FBeUIsWUFBekIsRUFBdUNXLFlBQXZDO0FBQ0Q7O0FBRUR2VixHQUFFd0wsS0FBRixDQUFRbUssT0FBUixDQUFnQkMsS0FBaEIsR0FBd0IsRUFBRUMsT0FBT0osSUFBVCxFQUF4Qjs7QUFFQXpWLEdBQUVpQyxJQUFGLENBQU8sQ0FBQyxNQUFELEVBQVMsSUFBVCxFQUFlLE1BQWYsRUFBdUIsT0FBdkIsQ0FBUCxFQUF3QyxZQUFZO0FBQ2xEakMsSUFBRXdMLEtBQUYsQ0FBUW1LLE9BQVIsV0FBd0IsSUFBeEIsSUFBa0MsRUFBRUUsT0FBTyxZQUFVO0FBQ25EN1YsTUFBRSxJQUFGLEVBQVF1TixFQUFSLENBQVcsT0FBWCxFQUFvQnZOLEVBQUU4VixJQUF0QjtBQUNELElBRmlDLEVBQWxDO0FBR0QsRUFKRDtBQUtELENBeEVELEVBd0VHbE4sTUF4RUg7QUF5RUE7OztBQUdBLENBQUMsVUFBUzVJLENBQVQsRUFBVztBQUNWQSxHQUFFMkcsRUFBRixDQUFLb1AsUUFBTCxHQUFnQixZQUFVO0FBQ3hCLE9BQUs5VCxJQUFMLENBQVUsVUFBU3dCLENBQVQsRUFBV1ksRUFBWCxFQUFjO0FBQ3RCckUsS0FBRXFFLEVBQUYsRUFBTXlELElBQU4sQ0FBVywyQ0FBWCxFQUF1RCxZQUFVO0FBQy9EO0FBQ0E7QUFDQWtPLGdCQUFZeEssS0FBWjtBQUNELElBSkQ7QUFLRCxHQU5EOztBQVFBLE1BQUl3SyxjQUFjLFVBQVN4SyxLQUFULEVBQWU7QUFDL0IsT0FBSXVKLFVBQVV2SixNQUFNeUssY0FBcEI7QUFBQSxPQUNJQyxRQUFRbkIsUUFBUSxDQUFSLENBRFo7QUFBQSxPQUVJb0IsYUFBYTtBQUNYQyxnQkFBWSxXQUREO0FBRVhDLGVBQVcsV0FGQTtBQUdYQyxjQUFVO0FBSEMsSUFGakI7QUFBQSxPQU9JblUsT0FBT2dVLFdBQVczSyxNQUFNckosSUFBakIsQ0FQWDtBQUFBLE9BUUlvVSxjQVJKOztBQVdBLE9BQUcsZ0JBQWdCN1AsTUFBaEIsSUFBMEIsT0FBT0EsT0FBTzhQLFVBQWQsS0FBNkIsVUFBMUQsRUFBc0U7QUFDcEVELHFCQUFpQixJQUFJN1AsT0FBTzhQLFVBQVgsQ0FBc0JyVSxJQUF0QixFQUE0QjtBQUMzQyxnQkFBVyxJQURnQztBQUUzQyxtQkFBYyxJQUY2QjtBQUczQyxnQkFBVytULE1BQU1PLE9BSDBCO0FBSTNDLGdCQUFXUCxNQUFNUSxPQUowQjtBQUszQyxnQkFBV1IsTUFBTVMsT0FMMEI7QUFNM0MsZ0JBQVdULE1BQU1VO0FBTjBCLEtBQTVCLENBQWpCO0FBUUQsSUFURCxNQVNPO0FBQ0xMLHFCQUFpQjNSLFNBQVNpUyxXQUFULENBQXFCLFlBQXJCLENBQWpCO0FBQ0FOLG1CQUFlTyxjQUFmLENBQThCM1UsSUFBOUIsRUFBb0MsSUFBcEMsRUFBMEMsSUFBMUMsRUFBZ0R1RSxNQUFoRCxFQUF3RCxDQUF4RCxFQUEyRHdQLE1BQU1PLE9BQWpFLEVBQTBFUCxNQUFNUSxPQUFoRixFQUF5RlIsTUFBTVMsT0FBL0YsRUFBd0dULE1BQU1VLE9BQTlHLEVBQXVILEtBQXZILEVBQThILEtBQTlILEVBQXFJLEtBQXJJLEVBQTRJLEtBQTVJLEVBQW1KLENBQW5KLENBQW9KLFFBQXBKLEVBQThKLElBQTlKO0FBQ0Q7QUFDRFYsU0FBTTFJLE1BQU4sQ0FBYXVKLGFBQWIsQ0FBMkJSLGNBQTNCO0FBQ0QsR0ExQkQ7QUEyQkQsRUFwQ0Q7QUFxQ0QsQ0F0Q0EsQ0FzQ0MzTixNQXRDRCxDQUFEOztBQXlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0MvSEE7O0FBRUEsQ0FBQyxVQUFTNUksQ0FBVCxFQUFZOztBQUViLE1BQU1nWCxtQkFBb0IsWUFBWTtBQUNwQyxRQUFJQyxXQUFXLENBQUMsUUFBRCxFQUFXLEtBQVgsRUFBa0IsR0FBbEIsRUFBdUIsSUFBdkIsRUFBNkIsRUFBN0IsQ0FBZjtBQUNBLFNBQUssSUFBSXhULElBQUUsQ0FBWCxFQUFjQSxJQUFJd1QsU0FBU2xVLE1BQTNCLEVBQW1DVSxHQUFuQyxFQUF3QztBQUN0QyxVQUFPd1QsU0FBU3hULENBQVQsQ0FBSCx5QkFBb0NpRCxNQUF4QyxFQUFnRDtBQUM5QyxlQUFPQSxPQUFVdVEsU0FBU3hULENBQVQsQ0FBVixzQkFBUDtBQUNEO0FBQ0Y7QUFDRCxXQUFPLEtBQVA7QUFDRCxHQVJ5QixFQUExQjs7QUFVQSxNQUFNeVQsV0FBVyxVQUFDN1MsRUFBRCxFQUFLbEMsSUFBTCxFQUFjO0FBQzdCa0MsT0FBR2hELElBQUgsQ0FBUWMsSUFBUixFQUFjOEIsS0FBZCxDQUFvQixHQUFwQixFQUF5QjFCLE9BQXpCLENBQWlDLGNBQU07QUFDckN2QyxjQUFNNlAsRUFBTixFQUFhMU4sU0FBUyxPQUFULEdBQW1CLFNBQW5CLEdBQStCLGdCQUE1QyxFQUFpRUEsSUFBakUsa0JBQW9GLENBQUNrQyxFQUFELENBQXBGO0FBQ0QsS0FGRDtBQUdELEdBSkQ7QUFLQTtBQUNBckUsSUFBRTRFLFFBQUYsRUFBWTJJLEVBQVosQ0FBZSxrQkFBZixFQUFtQyxhQUFuQyxFQUFrRCxZQUFXO0FBQzNEMkosYUFBU2xYLEVBQUUsSUFBRixDQUFULEVBQWtCLE1BQWxCO0FBQ0QsR0FGRDs7QUFJQTtBQUNBO0FBQ0FBLElBQUU0RSxRQUFGLEVBQVkySSxFQUFaLENBQWUsa0JBQWYsRUFBbUMsY0FBbkMsRUFBbUQsWUFBVztBQUM1RCxRQUFJc0MsS0FBSzdQLEVBQUUsSUFBRixFQUFRcUIsSUFBUixDQUFhLE9BQWIsQ0FBVDtBQUNBLFFBQUl3TyxFQUFKLEVBQVE7QUFDTnFILGVBQVNsWCxFQUFFLElBQUYsQ0FBVCxFQUFrQixPQUFsQjtBQUNELEtBRkQsTUFHSztBQUNIQSxRQUFFLElBQUYsRUFBUXNCLE9BQVIsQ0FBZ0Isa0JBQWhCO0FBQ0Q7QUFDRixHQVJEOztBQVVBO0FBQ0F0QixJQUFFNEUsUUFBRixFQUFZMkksRUFBWixDQUFlLGtCQUFmLEVBQW1DLGVBQW5DLEVBQW9ELFlBQVc7QUFDN0QsUUFBSXNDLEtBQUs3UCxFQUFFLElBQUYsRUFBUXFCLElBQVIsQ0FBYSxRQUFiLENBQVQ7QUFDQSxRQUFJd08sRUFBSixFQUFRO0FBQ05xSCxlQUFTbFgsRUFBRSxJQUFGLENBQVQsRUFBa0IsUUFBbEI7QUFDRCxLQUZELE1BRU87QUFDTEEsUUFBRSxJQUFGLEVBQVFzQixPQUFSLENBQWdCLG1CQUFoQjtBQUNEO0FBQ0YsR0FQRDs7QUFTQTtBQUNBdEIsSUFBRTRFLFFBQUYsRUFBWTJJLEVBQVosQ0FBZSxrQkFBZixFQUFtQyxpQkFBbkMsRUFBc0QsVUFBU3JKLENBQVQsRUFBVztBQUMvREEsTUFBRWlULGVBQUY7QUFDQSxRQUFJakcsWUFBWWxSLEVBQUUsSUFBRixFQUFRcUIsSUFBUixDQUFhLFVBQWIsQ0FBaEI7O0FBRUEsUUFBRzZQLGNBQWMsRUFBakIsRUFBb0I7QUFDbEJoUixpQkFBVzhRLE1BQVgsQ0FBa0JLLFVBQWxCLENBQTZCclIsRUFBRSxJQUFGLENBQTdCLEVBQXNDa1IsU0FBdEMsRUFBaUQsWUFBVztBQUMxRGxSLFVBQUUsSUFBRixFQUFRc0IsT0FBUixDQUFnQixXQUFoQjtBQUNELE9BRkQ7QUFHRCxLQUpELE1BSUs7QUFDSHRCLFFBQUUsSUFBRixFQUFRb1gsT0FBUixHQUFrQjlWLE9BQWxCLENBQTBCLFdBQTFCO0FBQ0Q7QUFDRixHQVhEOztBQWFBdEIsSUFBRTRFLFFBQUYsRUFBWTJJLEVBQVosQ0FBZSxrQ0FBZixFQUFtRCxxQkFBbkQsRUFBMEUsWUFBVztBQUNuRixRQUFJc0MsS0FBSzdQLEVBQUUsSUFBRixFQUFRcUIsSUFBUixDQUFhLGNBQWIsQ0FBVDtBQUNBckIsWUFBTTZQLEVBQU4sRUFBWTNLLGNBQVosQ0FBMkIsbUJBQTNCLEVBQWdELENBQUNsRixFQUFFLElBQUYsQ0FBRCxDQUFoRDtBQUNELEdBSEQ7O0FBS0E7Ozs7O0FBS0FBLElBQUUwRyxNQUFGLEVBQVU2RyxFQUFWLENBQWEsTUFBYixFQUFxQixZQUFNO0FBQ3pCOEo7QUFDRCxHQUZEOztBQUlBLFdBQVNBLGNBQVQsR0FBMEI7QUFDeEJDO0FBQ0FDO0FBQ0FDO0FBQ0FDO0FBQ0FDO0FBQ0Q7O0FBRUQ7QUFDQSxXQUFTQSxlQUFULENBQXlCM1csVUFBekIsRUFBcUM7QUFDbkMsUUFBSTRXLFlBQVkzWCxFQUFFLGlCQUFGLENBQWhCO0FBQUEsUUFDSTRYLFlBQVksQ0FBQyxVQUFELEVBQWEsU0FBYixFQUF3QixRQUF4QixDQURoQjs7QUFHQSxRQUFHN1csVUFBSCxFQUFjO0FBQ1osVUFBRyxPQUFPQSxVQUFQLEtBQXNCLFFBQXpCLEVBQWtDO0FBQ2hDNlcsa0JBQVVyVyxJQUFWLENBQWVSLFVBQWY7QUFDRCxPQUZELE1BRU0sSUFBRyxPQUFPQSxVQUFQLEtBQXNCLFFBQXRCLElBQWtDLE9BQU9BLFdBQVcsQ0FBWCxDQUFQLEtBQXlCLFFBQTlELEVBQXVFO0FBQzNFNlcsa0JBQVV4UCxNQUFWLENBQWlCckgsVUFBakI7QUFDRCxPQUZLLE1BRUQ7QUFDSDhCLGdCQUFRQyxLQUFSLENBQWMsOEJBQWQ7QUFDRDtBQUNGO0FBQ0QsUUFBRzZVLFVBQVU1VSxNQUFiLEVBQW9CO0FBQ2xCLFVBQUk4VSxZQUFZRCxVQUFVeFQsR0FBVixDQUFjLFVBQUMzRCxJQUFELEVBQVU7QUFDdEMsK0JBQXFCQSxJQUFyQjtBQUNELE9BRmUsRUFFYnFYLElBRmEsQ0FFUixHQUZRLENBQWhCOztBQUlBOVgsUUFBRTBHLE1BQUYsRUFBVWtILEdBQVYsQ0FBY2lLLFNBQWQsRUFBeUJ0SyxFQUF6QixDQUE0QnNLLFNBQTVCLEVBQXVDLFVBQVMzVCxDQUFULEVBQVk2VCxRQUFaLEVBQXFCO0FBQzFELFlBQUl2WCxTQUFTMEQsRUFBRWxCLFNBQUYsQ0FBWWlCLEtBQVosQ0FBa0IsR0FBbEIsRUFBdUIsQ0FBdkIsQ0FBYjtBQUNBLFlBQUlsQyxVQUFVL0IsYUFBV1EsTUFBWCxRQUFzQndYLEdBQXRCLHNCQUE2Q0QsUUFBN0MsUUFBZDs7QUFFQWhXLGdCQUFRRSxJQUFSLENBQWEsWUFBVTtBQUNyQixjQUFJRyxRQUFRcEMsRUFBRSxJQUFGLENBQVo7O0FBRUFvQyxnQkFBTThDLGNBQU4sQ0FBcUIsa0JBQXJCLEVBQXlDLENBQUM5QyxLQUFELENBQXpDO0FBQ0QsU0FKRDtBQUtELE9BVEQ7QUFVRDtBQUNGOztBQUVELFdBQVNtVixjQUFULENBQXdCVSxRQUF4QixFQUFpQztBQUMvQixRQUFJMVMsY0FBSjtBQUFBLFFBQ0kyUyxTQUFTbFksRUFBRSxlQUFGLENBRGI7QUFFQSxRQUFHa1ksT0FBT25WLE1BQVYsRUFBaUI7QUFDZi9DLFFBQUUwRyxNQUFGLEVBQVVrSCxHQUFWLENBQWMsbUJBQWQsRUFDQ0wsRUFERCxDQUNJLG1CQURKLEVBQ3lCLFVBQVNySixDQUFULEVBQVk7QUFDbkMsWUFBSXFCLEtBQUosRUFBVztBQUFFbUMsdUJBQWFuQyxLQUFiO0FBQXNCOztBQUVuQ0EsZ0JBQVFOLFdBQVcsWUFBVTs7QUFFM0IsY0FBRyxDQUFDK1IsZ0JBQUosRUFBcUI7QUFBQztBQUNwQmtCLG1CQUFPalcsSUFBUCxDQUFZLFlBQVU7QUFDcEJqQyxnQkFBRSxJQUFGLEVBQVFrRixjQUFSLENBQXVCLHFCQUF2QjtBQUNELGFBRkQ7QUFHRDtBQUNEO0FBQ0FnVCxpQkFBTzNYLElBQVAsQ0FBWSxhQUFaLEVBQTJCLFFBQTNCO0FBQ0QsU0FUTyxFQVNMMFgsWUFBWSxFQVRQLENBQVIsQ0FIbUMsQ0FZaEI7QUFDcEIsT0FkRDtBQWVEO0FBQ0Y7O0FBRUQsV0FBU1QsY0FBVCxDQUF3QlMsUUFBeEIsRUFBaUM7QUFDL0IsUUFBSTFTLGNBQUo7QUFBQSxRQUNJMlMsU0FBU2xZLEVBQUUsZUFBRixDQURiO0FBRUEsUUFBR2tZLE9BQU9uVixNQUFWLEVBQWlCO0FBQ2YvQyxRQUFFMEcsTUFBRixFQUFVa0gsR0FBVixDQUFjLG1CQUFkLEVBQ0NMLEVBREQsQ0FDSSxtQkFESixFQUN5QixVQUFTckosQ0FBVCxFQUFXO0FBQ2xDLFlBQUdxQixLQUFILEVBQVM7QUFBRW1DLHVCQUFhbkMsS0FBYjtBQUFzQjs7QUFFakNBLGdCQUFRTixXQUFXLFlBQVU7O0FBRTNCLGNBQUcsQ0FBQytSLGdCQUFKLEVBQXFCO0FBQUM7QUFDcEJrQixtQkFBT2pXLElBQVAsQ0FBWSxZQUFVO0FBQ3BCakMsZ0JBQUUsSUFBRixFQUFRa0YsY0FBUixDQUF1QixxQkFBdkI7QUFDRCxhQUZEO0FBR0Q7QUFDRDtBQUNBZ1QsaUJBQU8zWCxJQUFQLENBQVksYUFBWixFQUEyQixRQUEzQjtBQUNELFNBVE8sRUFTTDBYLFlBQVksRUFUUCxDQUFSLENBSGtDLENBWWY7QUFDcEIsT0FkRDtBQWVEO0FBQ0Y7O0FBRUQsV0FBU1IsY0FBVCxDQUF3QlEsUUFBeEIsRUFBa0M7QUFDOUIsUUFBSUMsU0FBU2xZLEVBQUUsZUFBRixDQUFiO0FBQ0EsUUFBSWtZLE9BQU9uVixNQUFQLElBQWlCaVUsZ0JBQXJCLEVBQXNDO0FBQ3ZDO0FBQ0c7QUFDSGtCLGFBQU9qVyxJQUFQLENBQVksWUFBWTtBQUN0QmpDLFVBQUUsSUFBRixFQUFRa0YsY0FBUixDQUF1QixxQkFBdkI7QUFDRCxPQUZEO0FBR0U7QUFDSDs7QUFFRixXQUFTb1MsY0FBVCxHQUEwQjtBQUN4QixRQUFHLENBQUNOLGdCQUFKLEVBQXFCO0FBQUUsYUFBTyxLQUFQO0FBQWU7QUFDdEMsUUFBSW1CLFFBQVF2VCxTQUFTd1QsZ0JBQVQsQ0FBMEIsNkNBQTFCLENBQVo7O0FBRUE7QUFDQSxRQUFJQyw0QkFBNEIsVUFBVUMsbUJBQVYsRUFBK0I7QUFDM0QsVUFBSUMsVUFBVXZZLEVBQUVzWSxvQkFBb0IsQ0FBcEIsRUFBdUI5SyxNQUF6QixDQUFkOztBQUVIO0FBQ0csY0FBUThLLG9CQUFvQixDQUFwQixFQUF1Qm5XLElBQS9COztBQUVFLGFBQUssWUFBTDtBQUNFLGNBQUlvVyxRQUFRaFksSUFBUixDQUFhLGFBQWIsTUFBZ0MsUUFBaEMsSUFBNEMrWCxvQkFBb0IsQ0FBcEIsRUFBdUJFLGFBQXZCLEtBQXlDLGFBQXpGLEVBQXdHO0FBQzdHRCxvQkFBUXJULGNBQVIsQ0FBdUIscUJBQXZCLEVBQThDLENBQUNxVCxPQUFELEVBQVU3UixPQUFPOEQsV0FBakIsQ0FBOUM7QUFDQTtBQUNELGNBQUkrTixRQUFRaFksSUFBUixDQUFhLGFBQWIsTUFBZ0MsUUFBaEMsSUFBNEMrWCxvQkFBb0IsQ0FBcEIsRUFBdUJFLGFBQXZCLEtBQXlDLGFBQXpGLEVBQXdHO0FBQ3ZHRCxvQkFBUXJULGNBQVIsQ0FBdUIscUJBQXZCLEVBQThDLENBQUNxVCxPQUFELENBQTlDO0FBQ0M7QUFDRixjQUFJRCxvQkFBb0IsQ0FBcEIsRUFBdUJFLGFBQXZCLEtBQXlDLE9BQTdDLEVBQXNEO0FBQ3JERCxvQkFBUUUsT0FBUixDQUFnQixlQUFoQixFQUFpQ2xZLElBQWpDLENBQXNDLGFBQXRDLEVBQW9ELFFBQXBEO0FBQ0FnWSxvQkFBUUUsT0FBUixDQUFnQixlQUFoQixFQUFpQ3ZULGNBQWpDLENBQWdELHFCQUFoRCxFQUF1RSxDQUFDcVQsUUFBUUUsT0FBUixDQUFnQixlQUFoQixDQUFELENBQXZFO0FBQ0E7QUFDRDs7QUFFSSxhQUFLLFdBQUw7QUFDSkYsa0JBQVFFLE9BQVIsQ0FBZ0IsZUFBaEIsRUFBaUNsWSxJQUFqQyxDQUFzQyxhQUF0QyxFQUFvRCxRQUFwRDtBQUNBZ1ksa0JBQVFFLE9BQVIsQ0FBZ0IsZUFBaEIsRUFBaUN2VCxjQUFqQyxDQUFnRCxxQkFBaEQsRUFBdUUsQ0FBQ3FULFFBQVFFLE9BQVIsQ0FBZ0IsZUFBaEIsQ0FBRCxDQUF2RTtBQUNNOztBQUVGO0FBQ0UsaUJBQU8sS0FBUDtBQUNGO0FBdEJGO0FBd0JELEtBNUJIOztBQThCRSxRQUFJTixNQUFNcFYsTUFBVixFQUFrQjtBQUNoQjtBQUNBLFdBQUssSUFBSVUsSUFBSSxDQUFiLEVBQWdCQSxLQUFLMFUsTUFBTXBWLE1BQU4sR0FBZSxDQUFwQyxFQUF1Q1UsR0FBdkMsRUFBNEM7QUFDMUMsWUFBSWlWLGtCQUFrQixJQUFJMUIsZ0JBQUosQ0FBcUJxQix5QkFBckIsQ0FBdEI7QUFDQUssd0JBQWdCQyxPQUFoQixDQUF3QlIsTUFBTTFVLENBQU4sQ0FBeEIsRUFBa0MsRUFBRW1WLFlBQVksSUFBZCxFQUFvQkMsV0FBVyxJQUEvQixFQUFxQ0MsZUFBZSxLQUFwRCxFQUEyREMsU0FBUyxJQUFwRSxFQUEwRUMsaUJBQWlCLENBQUMsYUFBRCxFQUFnQixPQUFoQixDQUEzRixFQUFsQztBQUNEO0FBQ0Y7QUFDRjs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E5WSxhQUFXK1ksUUFBWCxHQUFzQjVCLGNBQXRCO0FBQ0E7QUFDQTtBQUVDLENBM05BLENBMk5Dek8sTUEzTkQsQ0FBRDs7QUE2TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Q0NoUUE7Ozs7OztBQUVBLENBQUMsVUFBUzVJLENBQVQsRUFBWTs7QUFFYjs7Ozs7QUFGYSxNQU9Qa1osS0FQTztBQVFYOzs7Ozs7O0FBT0EsbUJBQVlqUSxPQUFaLEVBQW1DO0FBQUEsVUFBZGtLLE9BQWMsdUVBQUosRUFBSTs7QUFBQTs7QUFDakMsV0FBSy9SLFFBQUwsR0FBZ0I2SCxPQUFoQjtBQUNBLFdBQUtrSyxPQUFMLEdBQWdCblQsRUFBRXlNLE1BQUYsQ0FBUyxFQUFULEVBQWF5TSxNQUFNQyxRQUFuQixFQUE2QixLQUFLL1gsUUFBTCxDQUFjQyxJQUFkLEVBQTdCLEVBQW1EOFIsT0FBbkQsQ0FBaEI7O0FBRUEsV0FBS2pSLEtBQUw7O0FBRUFoQyxpQkFBV1ksY0FBWCxDQUEwQixJQUExQixFQUFnQyxPQUFoQztBQUNEOztBQUVEOzs7Ozs7QUF4Qlc7QUFBQTtBQUFBLDhCQTRCSDtBQUNOLGFBQUtzWSxPQUFMLEdBQWUsS0FBS2hZLFFBQUwsQ0FBY3VDLElBQWQsQ0FBbUIseUJBQW5CLENBQWY7O0FBRUEsYUFBSzBWLE9BQUw7QUFDRDs7QUFFRDs7Ozs7QUFsQ1c7QUFBQTtBQUFBLGdDQXNDRDtBQUFBOztBQUNSLGFBQUtqWSxRQUFMLENBQWN3TSxHQUFkLENBQWtCLFFBQWxCLEVBQ0dMLEVBREgsQ0FDTSxnQkFETixFQUN3QixZQUFNO0FBQzFCLGlCQUFLK0wsU0FBTDtBQUNELFNBSEgsRUFJRy9MLEVBSkgsQ0FJTSxpQkFKTixFQUl5QixZQUFNO0FBQzNCLGlCQUFPLE9BQUtnTSxZQUFMLEVBQVA7QUFDRCxTQU5IOztBQVFBLFlBQUksS0FBS3BHLE9BQUwsQ0FBYXFHLFVBQWIsS0FBNEIsYUFBaEMsRUFBK0M7QUFDN0MsZUFBS0osT0FBTCxDQUNHeEwsR0FESCxDQUNPLGlCQURQLEVBRUdMLEVBRkgsQ0FFTSxpQkFGTixFQUV5QixVQUFDckosQ0FBRCxFQUFPO0FBQzVCLG1CQUFLdVYsYUFBTCxDQUFtQnpaLEVBQUVrRSxFQUFFc0osTUFBSixDQUFuQjtBQUNELFdBSkg7QUFLRDs7QUFFRCxZQUFJLEtBQUsyRixPQUFMLENBQWF1RyxZQUFqQixFQUErQjtBQUM3QixlQUFLTixPQUFMLENBQ0d4TCxHQURILENBQ08sZ0JBRFAsRUFFR0wsRUFGSCxDQUVNLGdCQUZOLEVBRXdCLFVBQUNySixDQUFELEVBQU87QUFDM0IsbUJBQUt1VixhQUFMLENBQW1CelosRUFBRWtFLEVBQUVzSixNQUFKLENBQW5CO0FBQ0QsV0FKSDtBQUtEOztBQUVELFlBQUksS0FBSzJGLE9BQUwsQ0FBYXdHLGNBQWpCLEVBQWlDO0FBQy9CLGVBQUtQLE9BQUwsQ0FDR3hMLEdBREgsQ0FDTyxlQURQLEVBRUdMLEVBRkgsQ0FFTSxlQUZOLEVBRXVCLFVBQUNySixDQUFELEVBQU87QUFDMUIsbUJBQUt1VixhQUFMLENBQW1CelosRUFBRWtFLEVBQUVzSixNQUFKLENBQW5CO0FBQ0QsV0FKSDtBQUtEO0FBQ0Y7O0FBRUQ7Ozs7O0FBeEVXO0FBQUE7QUFBQSxnQ0E0RUQ7QUFDUixhQUFLdEwsS0FBTDtBQUNEOztBQUVEOzs7Ozs7QUFoRlc7QUFBQTtBQUFBLG9DQXFGRzJCLEdBckZILEVBcUZRO0FBQ2pCLFlBQUksQ0FBQ0EsSUFBSXRELElBQUosQ0FBUyxVQUFULENBQUwsRUFBMkIsT0FBTyxJQUFQOztBQUUzQixZQUFJcVosU0FBUyxJQUFiOztBQUVBLGdCQUFRL1YsSUFBSSxDQUFKLEVBQU8xQixJQUFmO0FBQ0UsZUFBSyxVQUFMO0FBQ0V5WCxxQkFBUy9WLElBQUksQ0FBSixFQUFPZ1csT0FBaEI7QUFDQTs7QUFFRixlQUFLLFFBQUw7QUFDQSxlQUFLLFlBQUw7QUFDQSxlQUFLLGlCQUFMO0FBQ0UsZ0JBQUkxVixNQUFNTixJQUFJRixJQUFKLENBQVMsaUJBQVQsQ0FBVjtBQUNBLGdCQUFJLENBQUNRLElBQUlwQixNQUFMLElBQWUsQ0FBQ29CLElBQUl3TSxHQUFKLEVBQXBCLEVBQStCaUosU0FBUyxLQUFUO0FBQy9COztBQUVGO0FBQ0UsZ0JBQUcsQ0FBQy9WLElBQUk4TSxHQUFKLEVBQUQsSUFBYyxDQUFDOU0sSUFBSThNLEdBQUosR0FBVTVOLE1BQTVCLEVBQW9DNlcsU0FBUyxLQUFUO0FBYnhDOztBQWdCQSxlQUFPQSxNQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7Ozs7O0FBN0dXO0FBQUE7QUFBQSxvQ0F1SEcvVixHQXZISCxFQXVIUTtBQUNqQixZQUFJaVcsU0FBU2pXLElBQUlrVyxRQUFKLENBQWEsS0FBSzVHLE9BQUwsQ0FBYTZHLGlCQUExQixDQUFiOztBQUVBLFlBQUksQ0FBQ0YsT0FBTy9XLE1BQVosRUFBb0I7QUFDbEIrVyxtQkFBU2pXLElBQUlxRixNQUFKLEdBQWF2RixJQUFiLENBQWtCLEtBQUt3UCxPQUFMLENBQWE2RyxpQkFBL0IsQ0FBVDtBQUNEOztBQUVELGVBQU9GLE1BQVA7QUFDRDs7QUFFRDs7Ozs7Ozs7O0FBaklXO0FBQUE7QUFBQSxnQ0F5SURqVyxHQXpJQyxFQXlJSTtBQUNiLFlBQUlnTSxLQUFLaE0sSUFBSSxDQUFKLEVBQU9nTSxFQUFoQjtBQUNBLFlBQUlvSyxTQUFTLEtBQUs3WSxRQUFMLENBQWN1QyxJQUFkLGlCQUFpQ2tNLEVBQWpDLFFBQWI7O0FBRUEsWUFBSSxDQUFDb0ssT0FBT2xYLE1BQVosRUFBb0I7QUFDbEIsaUJBQU9jLElBQUk0VSxPQUFKLENBQVksT0FBWixDQUFQO0FBQ0Q7O0FBRUQsZUFBT3dCLE1BQVA7QUFDRDs7QUFFRDs7Ozs7Ozs7O0FBcEpXO0FBQUE7QUFBQSxzQ0E0SktDLElBNUpMLEVBNEpXO0FBQUE7O0FBQ3BCLFlBQUlDLFNBQVNELEtBQUs5VixHQUFMLENBQVMsVUFBQ1gsQ0FBRCxFQUFJWSxFQUFKLEVBQVc7QUFDL0IsY0FBSXdMLEtBQUt4TCxHQUFHd0wsRUFBWjtBQUNBLGNBQUlvSyxTQUFTLE9BQUs3WSxRQUFMLENBQWN1QyxJQUFkLGlCQUFpQ2tNLEVBQWpDLFFBQWI7O0FBRUEsY0FBSSxDQUFDb0ssT0FBT2xYLE1BQVosRUFBb0I7QUFDbEJrWCxxQkFBU2phLEVBQUVxRSxFQUFGLEVBQU1vVSxPQUFOLENBQWMsT0FBZCxDQUFUO0FBQ0Q7QUFDRCxpQkFBT3dCLE9BQU8sQ0FBUCxDQUFQO0FBQ0QsU0FSWSxDQUFiOztBQVVBLGVBQU9qYSxFQUFFbWEsTUFBRixDQUFQO0FBQ0Q7O0FBRUQ7Ozs7O0FBMUtXO0FBQUE7QUFBQSxzQ0E4S0t0VyxHQTlLTCxFQThLVTtBQUNuQixZQUFJb1csU0FBUyxLQUFLRyxTQUFMLENBQWV2VyxHQUFmLENBQWI7QUFDQSxZQUFJd1csYUFBYSxLQUFLQyxhQUFMLENBQW1CelcsR0FBbkIsQ0FBakI7O0FBRUEsWUFBSW9XLE9BQU9sWCxNQUFYLEVBQW1CO0FBQ2pCa1gsaUJBQU9qSSxRQUFQLENBQWdCLEtBQUttQixPQUFMLENBQWFvSCxlQUE3QjtBQUNEOztBQUVELFlBQUlGLFdBQVd0WCxNQUFmLEVBQXVCO0FBQ3JCc1gscUJBQVdySSxRQUFYLENBQW9CLEtBQUttQixPQUFMLENBQWFxSCxjQUFqQztBQUNEOztBQUVEM1csWUFBSW1PLFFBQUosQ0FBYSxLQUFLbUIsT0FBTCxDQUFhc0gsZUFBMUIsRUFBMkNsYSxJQUEzQyxDQUFnRCxjQUFoRCxFQUFnRSxFQUFoRTtBQUNEOztBQUVEOzs7Ozs7QUE3TFc7QUFBQTtBQUFBLDhDQW1NYW1hLFNBbk1iLEVBbU13QjtBQUNqQyxZQUFJUixPQUFPLEtBQUs5WSxRQUFMLENBQWN1QyxJQUFkLG1CQUFtQytXLFNBQW5DLFFBQVg7QUFDQSxZQUFJQyxVQUFVLEtBQUtDLGVBQUwsQ0FBcUJWLElBQXJCLENBQWQ7QUFDQSxZQUFJVyxjQUFjLEtBQUtQLGFBQUwsQ0FBbUJKLElBQW5CLENBQWxCOztBQUVBLFlBQUlTLFFBQVE1WCxNQUFaLEVBQW9CO0FBQ2xCNFgsa0JBQVExVSxXQUFSLENBQW9CLEtBQUtrTixPQUFMLENBQWFvSCxlQUFqQztBQUNEOztBQUVELFlBQUlNLFlBQVk5WCxNQUFoQixFQUF3QjtBQUN0QjhYLHNCQUFZNVUsV0FBWixDQUF3QixLQUFLa04sT0FBTCxDQUFhcUgsY0FBckM7QUFDRDs7QUFFRE4sYUFBS2pVLFdBQUwsQ0FBaUIsS0FBS2tOLE9BQUwsQ0FBYXNILGVBQTlCLEVBQStDOVksVUFBL0MsQ0FBMEQsY0FBMUQ7QUFFRDs7QUFFRDs7Ozs7QUFwTlc7QUFBQTtBQUFBLHlDQXdOUWtDLEdBeE5SLEVBd05hO0FBQ3RCO0FBQ0EsWUFBR0EsSUFBSSxDQUFKLEVBQU8xQixJQUFQLElBQWUsT0FBbEIsRUFBMkI7QUFDekIsaUJBQU8sS0FBSzJZLHVCQUFMLENBQTZCalgsSUFBSXRELElBQUosQ0FBUyxNQUFULENBQTdCLENBQVA7QUFDRDs7QUFFRCxZQUFJMFosU0FBUyxLQUFLRyxTQUFMLENBQWV2VyxHQUFmLENBQWI7QUFDQSxZQUFJd1csYUFBYSxLQUFLQyxhQUFMLENBQW1CelcsR0FBbkIsQ0FBakI7O0FBRUEsWUFBSW9XLE9BQU9sWCxNQUFYLEVBQW1CO0FBQ2pCa1gsaUJBQU9oVSxXQUFQLENBQW1CLEtBQUtrTixPQUFMLENBQWFvSCxlQUFoQztBQUNEOztBQUVELFlBQUlGLFdBQVd0WCxNQUFmLEVBQXVCO0FBQ3JCc1gscUJBQVdwVSxXQUFYLENBQXVCLEtBQUtrTixPQUFMLENBQWFxSCxjQUFwQztBQUNEOztBQUVEM1csWUFBSW9DLFdBQUosQ0FBZ0IsS0FBS2tOLE9BQUwsQ0FBYXNILGVBQTdCLEVBQThDOVksVUFBOUMsQ0FBeUQsY0FBekQ7QUFDRDs7QUFFRDs7Ozs7Ozs7QUE1T1c7QUFBQTtBQUFBLG9DQW1QR2tDLEdBblBILEVBbVBRO0FBQUE7O0FBQ2pCLFlBQUlrWCxlQUFlLEtBQUtDLGFBQUwsQ0FBbUJuWCxHQUFuQixDQUFuQjtBQUFBLFlBQ0lvWCxZQUFZLEtBRGhCO0FBQUEsWUFFSUMsa0JBQWtCLElBRnRCO0FBQUEsWUFHSUMsWUFBWXRYLElBQUl0RCxJQUFKLENBQVMsZ0JBQVQsQ0FIaEI7QUFBQSxZQUlJNmEsVUFBVSxJQUpkOztBQU1BO0FBQ0EsWUFBSXZYLElBQUlrSixFQUFKLENBQU8scUJBQVAsS0FBaUNsSixJQUFJa0osRUFBSixDQUFPLGlCQUFQLENBQXJDLEVBQWdFO0FBQzlELGlCQUFPLElBQVA7QUFDRDs7QUFFRCxnQkFBUWxKLElBQUksQ0FBSixFQUFPMUIsSUFBZjtBQUNFLGVBQUssT0FBTDtBQUNFOFksd0JBQVksS0FBS0ksYUFBTCxDQUFtQnhYLElBQUl0RCxJQUFKLENBQVMsTUFBVCxDQUFuQixDQUFaO0FBQ0E7O0FBRUYsZUFBSyxVQUFMO0FBQ0UwYSx3QkFBWUYsWUFBWjtBQUNBOztBQUVGLGVBQUssUUFBTDtBQUNBLGVBQUssWUFBTDtBQUNBLGVBQUssaUJBQUw7QUFDRUUsd0JBQVlGLFlBQVo7QUFDQTs7QUFFRjtBQUNFRSx3QkFBWSxLQUFLSyxZQUFMLENBQWtCelgsR0FBbEIsQ0FBWjtBQWhCSjs7QUFtQkEsWUFBSXNYLFNBQUosRUFBZTtBQUNiRCw0QkFBa0IsS0FBS0ssZUFBTCxDQUFxQjFYLEdBQXJCLEVBQTBCc1gsU0FBMUIsRUFBcUN0WCxJQUFJdEQsSUFBSixDQUFTLFVBQVQsQ0FBckMsQ0FBbEI7QUFDRDs7QUFFRCxZQUFJc0QsSUFBSXRELElBQUosQ0FBUyxjQUFULENBQUosRUFBOEI7QUFDNUI2YSxvQkFBVSxLQUFLakksT0FBTCxDQUFhcUksVUFBYixDQUF3QkosT0FBeEIsQ0FBZ0N2WCxHQUFoQyxDQUFWO0FBQ0Q7O0FBR0QsWUFBSTRYLFdBQVcsQ0FBQ1YsWUFBRCxFQUFlRSxTQUFmLEVBQTBCQyxlQUExQixFQUEyQ0UsT0FBM0MsRUFBb0QxWixPQUFwRCxDQUE0RCxLQUE1RCxNQUF1RSxDQUFDLENBQXZGO0FBQ0EsWUFBSWdhLFVBQVUsQ0FBQ0QsV0FBVyxPQUFYLEdBQXFCLFNBQXRCLElBQW1DLFdBQWpEOztBQUVBLFlBQUlBLFFBQUosRUFBYztBQUNaO0FBQ0EsY0FBTUUsb0JBQW9CLEtBQUt2YSxRQUFMLENBQWN1QyxJQUFkLHFCQUFxQ0UsSUFBSXRELElBQUosQ0FBUyxJQUFULENBQXJDLFFBQTFCO0FBQ0EsY0FBSW9iLGtCQUFrQjVZLE1BQXRCLEVBQThCO0FBQUE7QUFDNUIsa0JBQUlYLGNBQUo7QUFDQXVaLGdDQUFrQjFaLElBQWxCLENBQXVCLFlBQVc7QUFDaEMsb0JBQUlqQyxFQUFFLElBQUYsRUFBUTJRLEdBQVIsRUFBSixFQUFtQjtBQUNqQnZPLHdCQUFNcVgsYUFBTixDQUFvQnpaLEVBQUUsSUFBRixDQUFwQjtBQUNEO0FBQ0YsZUFKRDtBQUY0QjtBQU83QjtBQUNGOztBQUVELGFBQUt5YixXQUFXLG9CQUFYLEdBQWtDLGlCQUF2QyxFQUEwRDVYLEdBQTFEOztBQUVBOzs7Ozs7QUFNQUEsWUFBSXZDLE9BQUosQ0FBWW9hLE9BQVosRUFBcUIsQ0FBQzdYLEdBQUQsQ0FBckI7O0FBRUEsZUFBTzRYLFFBQVA7QUFDRDs7QUFFRDs7Ozs7OztBQXhUVztBQUFBO0FBQUEscUNBOFRJO0FBQ2IsWUFBSUcsTUFBTSxFQUFWO0FBQ0EsWUFBSXhaLFFBQVEsSUFBWjs7QUFFQSxhQUFLZ1gsT0FBTCxDQUFhblgsSUFBYixDQUFrQixZQUFXO0FBQzNCMlosY0FBSXJhLElBQUosQ0FBU2EsTUFBTXFYLGFBQU4sQ0FBb0J6WixFQUFFLElBQUYsQ0FBcEIsQ0FBVDtBQUNELFNBRkQ7O0FBSUEsWUFBSTZiLFVBQVVELElBQUlsYSxPQUFKLENBQVksS0FBWixNQUF1QixDQUFDLENBQXRDOztBQUVBLGFBQUtOLFFBQUwsQ0FBY3VDLElBQWQsQ0FBbUIsb0JBQW5CLEVBQXlDNkssR0FBekMsQ0FBNkMsU0FBN0MsRUFBeURxTixVQUFVLE1BQVYsR0FBbUIsT0FBNUU7O0FBRUE7Ozs7OztBQU1BLGFBQUt6YSxRQUFMLENBQWNFLE9BQWQsQ0FBc0IsQ0FBQ3VhLFVBQVUsV0FBVixHQUF3QixhQUF6QixJQUEwQyxXQUFoRSxFQUE2RSxDQUFDLEtBQUt6YSxRQUFOLENBQTdFOztBQUVBLGVBQU95YSxPQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUFyVlc7QUFBQTtBQUFBLG1DQTJWRWhZLEdBM1ZGLEVBMlZPaVksT0EzVlAsRUEyVmdCO0FBQ3pCO0FBQ0FBLGtCQUFXQSxXQUFXalksSUFBSXRELElBQUosQ0FBUyxTQUFULENBQVgsSUFBa0NzRCxJQUFJdEQsSUFBSixDQUFTLE1BQVQsQ0FBN0M7QUFDQSxZQUFJd2IsWUFBWWxZLElBQUk4TSxHQUFKLEVBQWhCO0FBQ0EsWUFBSXFMLFFBQVEsS0FBWjs7QUFFQSxZQUFJRCxVQUFVaFosTUFBZCxFQUFzQjtBQUNwQjtBQUNBLGNBQUksS0FBS29RLE9BQUwsQ0FBYThJLFFBQWIsQ0FBc0J0TixjQUF0QixDQUFxQ21OLE9BQXJDLENBQUosRUFBbUQ7QUFDakRFLG9CQUFRLEtBQUs3SSxPQUFMLENBQWE4SSxRQUFiLENBQXNCSCxPQUF0QixFQUErQjNVLElBQS9CLENBQW9DNFUsU0FBcEMsQ0FBUjtBQUNEO0FBQ0Q7QUFIQSxlQUlLLElBQUlELFlBQVlqWSxJQUFJdEQsSUFBSixDQUFTLE1BQVQsQ0FBaEIsRUFBa0M7QUFDckN5YixzQkFBUSxJQUFJRSxNQUFKLENBQVdKLE9BQVgsRUFBb0IzVSxJQUFwQixDQUF5QjRVLFNBQXpCLENBQVI7QUFDRCxhQUZJLE1BR0E7QUFDSEMsc0JBQVEsSUFBUjtBQUNEO0FBQ0Y7QUFDRDtBQWJBLGFBY0ssSUFBSSxDQUFDblksSUFBSWhDLElBQUosQ0FBUyxVQUFULENBQUwsRUFBMkI7QUFDOUJtYSxvQkFBUSxJQUFSO0FBQ0Q7O0FBRUQsZUFBT0EsS0FBUDtBQUNBOztBQUVGOzs7Ozs7QUF0WFc7QUFBQTtBQUFBLG9DQTJYR3RCLFNBM1hILEVBMlhjO0FBQ3ZCO0FBQ0E7QUFDQSxZQUFJeUIsU0FBUyxLQUFLL2EsUUFBTCxDQUFjdUMsSUFBZCxtQkFBbUMrVyxTQUFuQyxRQUFiO0FBQ0EsWUFBSXNCLFFBQVEsS0FBWjtBQUFBLFlBQW1CSSxXQUFXLEtBQTlCOztBQUVBO0FBQ0FELGVBQU9sYSxJQUFQLENBQVksVUFBQ3dCLENBQUQsRUFBSVMsQ0FBSixFQUFVO0FBQ3BCLGNBQUlsRSxFQUFFa0UsQ0FBRixFQUFLM0QsSUFBTCxDQUFVLFVBQVYsQ0FBSixFQUEyQjtBQUN6QjZiLHVCQUFXLElBQVg7QUFDRDtBQUNGLFNBSkQ7QUFLQSxZQUFHLENBQUNBLFFBQUosRUFBY0osUUFBTSxJQUFOOztBQUVkLFlBQUksQ0FBQ0EsS0FBTCxFQUFZO0FBQ1Y7QUFDQUcsaUJBQU9sYSxJQUFQLENBQVksVUFBQ3dCLENBQUQsRUFBSVMsQ0FBSixFQUFVO0FBQ3BCLGdCQUFJbEUsRUFBRWtFLENBQUYsRUFBS3JDLElBQUwsQ0FBVSxTQUFWLENBQUosRUFBMEI7QUFDeEJtYSxzQkFBUSxJQUFSO0FBQ0Q7QUFDRixXQUpEO0FBS0Q7O0FBRUQsZUFBT0EsS0FBUDtBQUNEOztBQUVEOzs7Ozs7OztBQXJaVztBQUFBO0FBQUEsc0NBNFpLblksR0E1WkwsRUE0WlUyWCxVQTVaVixFQTRac0JZLFFBNVp0QixFQTRaZ0M7QUFBQTs7QUFDekNBLG1CQUFXQSxXQUFXLElBQVgsR0FBa0IsS0FBN0I7O0FBRUEsWUFBSUMsUUFBUWIsV0FBV3ZYLEtBQVgsQ0FBaUIsR0FBakIsRUFBc0JHLEdBQXRCLENBQTBCLFVBQUNrWSxDQUFELEVBQU87QUFDM0MsaUJBQU8sT0FBS25KLE9BQUwsQ0FBYXFJLFVBQWIsQ0FBd0JjLENBQXhCLEVBQTJCelksR0FBM0IsRUFBZ0N1WSxRQUFoQyxFQUEwQ3ZZLElBQUlxRixNQUFKLEVBQTFDLENBQVA7QUFDRCxTQUZXLENBQVo7QUFHQSxlQUFPbVQsTUFBTTNhLE9BQU4sQ0FBYyxLQUFkLE1BQXlCLENBQUMsQ0FBakM7QUFDRDs7QUFFRDs7Ozs7QUFyYVc7QUFBQTtBQUFBLGtDQXlhQztBQUNWLFlBQUk2YSxRQUFRLEtBQUtuYixRQUFqQjtBQUFBLFlBQ0kwQyxPQUFPLEtBQUtxUCxPQURoQjs7QUFHQW5ULGdCQUFNOEQsS0FBS3lXLGVBQVgsRUFBOEJnQyxLQUE5QixFQUFxQ3ZFLEdBQXJDLENBQXlDLE9BQXpDLEVBQWtEL1IsV0FBbEQsQ0FBOERuQyxLQUFLeVcsZUFBbkU7QUFDQXZhLGdCQUFNOEQsS0FBSzJXLGVBQVgsRUFBOEI4QixLQUE5QixFQUFxQ3ZFLEdBQXJDLENBQXlDLE9BQXpDLEVBQWtEL1IsV0FBbEQsQ0FBOERuQyxLQUFLMlcsZUFBbkU7QUFDQXphLFVBQUs4RCxLQUFLa1csaUJBQVYsU0FBK0JsVyxLQUFLMFcsY0FBcEMsRUFBc0R2VSxXQUF0RCxDQUFrRW5DLEtBQUswVyxjQUF2RTtBQUNBK0IsY0FBTTVZLElBQU4sQ0FBVyxvQkFBWCxFQUFpQzZLLEdBQWpDLENBQXFDLFNBQXJDLEVBQWdELE1BQWhEO0FBQ0F4TyxVQUFFLFFBQUYsRUFBWXVjLEtBQVosRUFBbUJ2RSxHQUFuQixDQUF1QiwyRUFBdkIsRUFBb0dySCxHQUFwRyxDQUF3RyxFQUF4RyxFQUE0R2hQLFVBQTVHLENBQXVILGNBQXZIO0FBQ0EzQixVQUFFLGNBQUYsRUFBa0J1YyxLQUFsQixFQUF5QnZFLEdBQXpCLENBQTZCLHFCQUE3QixFQUFvRG5XLElBQXBELENBQXlELFNBQXpELEVBQW1FLEtBQW5FLEVBQTBFRixVQUExRSxDQUFxRixjQUFyRjtBQUNBM0IsVUFBRSxpQkFBRixFQUFxQnVjLEtBQXJCLEVBQTRCdkUsR0FBNUIsQ0FBZ0MscUJBQWhDLEVBQXVEblcsSUFBdkQsQ0FBNEQsU0FBNUQsRUFBc0UsS0FBdEUsRUFBNkVGLFVBQTdFLENBQXdGLGNBQXhGO0FBQ0E7Ozs7QUFJQTRhLGNBQU1qYixPQUFOLENBQWMsb0JBQWQsRUFBb0MsQ0FBQ2liLEtBQUQsQ0FBcEM7QUFDRDs7QUFFRDs7Ozs7QUEzYlc7QUFBQTtBQUFBLGdDQStiRDtBQUNSLFlBQUluYSxRQUFRLElBQVo7QUFDQSxhQUFLaEIsUUFBTCxDQUNHd00sR0FESCxDQUNPLFFBRFAsRUFFR2pLLElBRkgsQ0FFUSxvQkFGUixFQUdLNkssR0FITCxDQUdTLFNBSFQsRUFHb0IsTUFIcEI7O0FBS0EsYUFBSzRLLE9BQUwsQ0FDR3hMLEdBREgsQ0FDTyxRQURQLEVBRUczTCxJQUZILENBRVEsWUFBVztBQUNmRyxnQkFBTW9hLGtCQUFOLENBQXlCeGMsRUFBRSxJQUFGLENBQXpCO0FBQ0QsU0FKSDs7QUFNQUUsbUJBQVdzQixnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBN2NVOztBQUFBO0FBQUE7O0FBZ2RiOzs7OztBQUdBMFgsUUFBTUMsUUFBTixHQUFpQjtBQUNmOzs7Ozs7QUFNQUssZ0JBQVksYUFQRzs7QUFTZjs7Ozs7QUFLQWUscUJBQWlCLGtCQWRGOztBQWdCZjs7Ozs7QUFLQUUscUJBQWlCLGtCQXJCRjs7QUF1QmY7Ozs7O0FBS0FULHVCQUFtQixhQTVCSjs7QUE4QmY7Ozs7O0FBS0FRLG9CQUFnQixZQW5DRDs7QUFxQ2Y7Ozs7O0FBS0FkLGtCQUFjLEtBMUNDOztBQTRDZjs7Ozs7QUFLQUMsb0JBQWdCLEtBakREOztBQW1EZnNDLGNBQVU7QUFDUlEsYUFBUSxhQURBO0FBRVJDLHFCQUFnQixnQkFGUjtBQUdSQyxlQUFVLFlBSEY7QUFJUkMsY0FBUywwQkFKRDs7QUFNUjtBQUNBQyxZQUFPLHVKQVBDO0FBUVJDLFdBQU0sZ0JBUkU7O0FBVVI7QUFDQUMsYUFBUSx1SUFYQTs7QUFhUkMsV0FBTSxvdENBYkU7QUFjUjtBQUNBQyxjQUFTLGtFQWZEOztBQWlCUkMsZ0JBQVcsb0hBakJIO0FBa0JSO0FBQ0FDLFlBQU8sZ0lBbkJDO0FBb0JSO0FBQ0FDLFlBQU8sMENBckJDO0FBc0JSQyxlQUFVLG1DQXRCRjtBQXVCUjtBQUNBQyxzQkFBaUIsOERBeEJUO0FBeUJSO0FBQ0FDLHNCQUFpQiw4REExQlQ7O0FBNEJSO0FBQ0FDLGFBQVE7QUE3QkEsS0FuREs7O0FBbUZmOzs7Ozs7OztBQVFBaEMsZ0JBQVk7QUFDVkosZUFBUyxVQUFVL1csRUFBVixFQUFjK1gsUUFBZCxFQUF3QmxULE1BQXhCLEVBQWdDO0FBQ3ZDLGVBQU9sSixRQUFNcUUsR0FBRzlELElBQUgsQ0FBUSxjQUFSLENBQU4sRUFBaUNvUSxHQUFqQyxPQUEyQ3RNLEdBQUdzTSxHQUFILEVBQWxEO0FBQ0Q7QUFIUztBQTNGRyxHQUFqQjs7QUFrR0E7QUFDQXpRLGFBQVdNLE1BQVgsQ0FBa0IwWSxLQUFsQixFQUF5QixPQUF6QjtBQUVDLENBeGpCQSxDQXdqQkN0USxNQXhqQkQsQ0FBRDtDQ0ZBOzs7Ozs7QUFFQSxDQUFDLFVBQVM1SSxDQUFULEVBQVk7O0FBRWI7Ozs7Ozs7QUFGYSxNQVNQeWQsU0FUTztBQVVYOzs7Ozs7O0FBT0EsdUJBQVl4VSxPQUFaLEVBQXFCa0ssT0FBckIsRUFBOEI7QUFBQTs7QUFDNUIsV0FBSy9SLFFBQUwsR0FBZ0I2SCxPQUFoQjtBQUNBLFdBQUtrSyxPQUFMLEdBQWVuVCxFQUFFeU0sTUFBRixDQUFTLEVBQVQsRUFBYWdSLFVBQVV0RSxRQUF2QixFQUFpQyxLQUFLL1gsUUFBTCxDQUFjQyxJQUFkLEVBQWpDLEVBQXVEOFIsT0FBdkQsQ0FBZjs7QUFFQSxXQUFLalIsS0FBTDs7QUFFQWhDLGlCQUFXWSxjQUFYLENBQTBCLElBQTFCLEVBQWdDLFdBQWhDO0FBQ0FaLGlCQUFXbUwsUUFBWCxDQUFvQjJCLFFBQXBCLENBQTZCLFdBQTdCLEVBQTBDO0FBQ3hDLGlCQUFTLFFBRCtCO0FBRXhDLGlCQUFTLFFBRitCO0FBR3hDLHNCQUFjLE1BSDBCO0FBSXhDLG9CQUFZO0FBSjRCLE9BQTFDO0FBTUQ7O0FBRUQ7Ozs7OztBQWhDVztBQUFBO0FBQUEsOEJBb0NIO0FBQ04sYUFBSzVMLFFBQUwsQ0FBY2IsSUFBZCxDQUFtQixNQUFuQixFQUEyQixTQUEzQjtBQUNBLGFBQUttZCxLQUFMLEdBQWEsS0FBS3RjLFFBQUwsQ0FBYzRSLFFBQWQsQ0FBdUIsdUJBQXZCLENBQWI7O0FBRUEsYUFBSzBLLEtBQUwsQ0FBV3piLElBQVgsQ0FBZ0IsVUFBUzBiLEdBQVQsRUFBY3RaLEVBQWQsRUFBa0I7QUFDaEMsY0FBSVIsTUFBTTdELEVBQUVxRSxFQUFGLENBQVY7QUFBQSxjQUNJdVosV0FBVy9aLElBQUltUCxRQUFKLENBQWEsb0JBQWIsQ0FEZjtBQUFBLGNBRUluRCxLQUFLK04sU0FBUyxDQUFULEVBQVkvTixFQUFaLElBQWtCM1AsV0FBV2lCLFdBQVgsQ0FBdUIsQ0FBdkIsRUFBMEIsV0FBMUIsQ0FGM0I7QUFBQSxjQUdJMGMsU0FBU3haLEdBQUd3TCxFQUFILElBQVlBLEVBQVosV0FIYjs7QUFLQWhNLGNBQUlGLElBQUosQ0FBUyxTQUFULEVBQW9CcEQsSUFBcEIsQ0FBeUI7QUFDdkIsNkJBQWlCc1AsRUFETTtBQUV2QixvQkFBUSxLQUZlO0FBR3ZCLGtCQUFNZ08sTUFIaUI7QUFJdkIsNkJBQWlCLEtBSk07QUFLdkIsNkJBQWlCO0FBTE0sV0FBekI7O0FBUUFELG1CQUFTcmQsSUFBVCxDQUFjLEVBQUMsUUFBUSxVQUFULEVBQXFCLG1CQUFtQnNkLE1BQXhDLEVBQWdELGVBQWUsSUFBL0QsRUFBcUUsTUFBTWhPLEVBQTNFLEVBQWQ7QUFDRCxTQWZEO0FBZ0JBLFlBQUlpTyxjQUFjLEtBQUsxYyxRQUFMLENBQWN1QyxJQUFkLENBQW1CLFlBQW5CLEVBQWlDcVAsUUFBakMsQ0FBMEMsb0JBQTFDLENBQWxCO0FBQ0EsWUFBRzhLLFlBQVkvYSxNQUFmLEVBQXNCO0FBQ3BCLGVBQUtnYixJQUFMLENBQVVELFdBQVYsRUFBdUIsSUFBdkI7QUFDRDtBQUNELGFBQUt6RSxPQUFMO0FBQ0Q7O0FBRUQ7Ozs7O0FBL0RXO0FBQUE7QUFBQSxnQ0FtRUQ7QUFDUixZQUFJalgsUUFBUSxJQUFaOztBQUVBLGFBQUtzYixLQUFMLENBQVd6YixJQUFYLENBQWdCLFlBQVc7QUFDekIsY0FBSXlCLFFBQVExRCxFQUFFLElBQUYsQ0FBWjtBQUNBLGNBQUlnZSxjQUFjdGEsTUFBTXNQLFFBQU4sQ0FBZSxvQkFBZixDQUFsQjtBQUNBLGNBQUlnTCxZQUFZamIsTUFBaEIsRUFBd0I7QUFDdEJXLGtCQUFNc1AsUUFBTixDQUFlLEdBQWYsRUFBb0JwRixHQUFwQixDQUF3Qix5Q0FBeEIsRUFDUUwsRUFEUixDQUNXLG9CQURYLEVBQ2lDLFVBQVNySixDQUFULEVBQVk7QUFDM0NBLGdCQUFFdUosY0FBRjtBQUNBckwsb0JBQU02YixNQUFOLENBQWFELFdBQWI7QUFDRCxhQUpELEVBSUd6USxFQUpILENBSU0sc0JBSk4sRUFJOEIsVUFBU3JKLENBQVQsRUFBVztBQUN2Q2hFLHlCQUFXbUwsUUFBWCxDQUFvQmEsU0FBcEIsQ0FBOEJoSSxDQUE5QixFQUFpQyxXQUFqQyxFQUE4QztBQUM1QytaLHdCQUFRLFlBQVc7QUFDakI3Yix3QkFBTTZiLE1BQU4sQ0FBYUQsV0FBYjtBQUNELGlCQUgyQztBQUk1Q0Usc0JBQU0sWUFBVztBQUNmLHNCQUFJQyxLQUFLemEsTUFBTXdhLElBQU4sR0FBYXZhLElBQWIsQ0FBa0IsR0FBbEIsRUFBdUIrSixLQUF2QixFQUFUO0FBQ0Esc0JBQUksQ0FBQ3RMLE1BQU0rUSxPQUFOLENBQWNpTCxXQUFuQixFQUFnQztBQUM5QkQsdUJBQUc3YyxPQUFILENBQVcsb0JBQVg7QUFDRDtBQUNGLGlCQVQyQztBQVU1QytjLDBCQUFVLFlBQVc7QUFDbkIsc0JBQUlGLEtBQUt6YSxNQUFNNGEsSUFBTixHQUFhM2EsSUFBYixDQUFrQixHQUFsQixFQUF1QitKLEtBQXZCLEVBQVQ7QUFDQSxzQkFBSSxDQUFDdEwsTUFBTStRLE9BQU4sQ0FBY2lMLFdBQW5CLEVBQWdDO0FBQzlCRCx1QkFBRzdjLE9BQUgsQ0FBVyxvQkFBWDtBQUNEO0FBQ0YsaUJBZjJDO0FBZ0I1Q3FMLHlCQUFTLFlBQVc7QUFDbEJ6SSxvQkFBRXVKLGNBQUY7QUFDQXZKLG9CQUFFaVQsZUFBRjtBQUNEO0FBbkIyQyxlQUE5QztBQXFCRCxhQTFCRDtBQTJCRDtBQUNGLFNBaENEO0FBaUNEOztBQUVEOzs7Ozs7QUF6R1c7QUFBQTtBQUFBLDZCQThHSm9CLE9BOUdJLEVBOEdLO0FBQ2QsWUFBR0EsUUFBUXJQLE1BQVIsR0FBaUJxVixRQUFqQixDQUEwQixXQUExQixDQUFILEVBQTJDO0FBQ3pDLGVBQUtDLEVBQUwsQ0FBUWpHLE9BQVI7QUFDRCxTQUZELE1BRU87QUFDTCxlQUFLd0YsSUFBTCxDQUFVeEYsT0FBVjtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7Ozs7O0FBdEhXO0FBQUE7QUFBQSwyQkE2SE5BLE9BN0hNLEVBNkhHa0csU0E3SEgsRUE2SGM7QUFBQTs7QUFDdkJsRyxnQkFDR2hZLElBREgsQ0FDUSxhQURSLEVBQ3VCLEtBRHZCLEVBRUcySSxNQUZILENBRVUsb0JBRlYsRUFHR3RGLE9BSEgsR0FJR3NGLE1BSkgsR0FJWThJLFFBSlosQ0FJcUIsV0FKckI7O0FBTUEsWUFBSSxDQUFDLEtBQUttQixPQUFMLENBQWFpTCxXQUFkLElBQTZCLENBQUNLLFNBQWxDLEVBQTZDO0FBQzNDLGNBQUlDLGlCQUFpQixLQUFLdGQsUUFBTCxDQUFjNFIsUUFBZCxDQUF1QixZQUF2QixFQUFxQ0EsUUFBckMsQ0FBOEMsb0JBQTlDLENBQXJCO0FBQ0EsY0FBSTBMLGVBQWUzYixNQUFuQixFQUEyQjtBQUN6QixpQkFBS3liLEVBQUwsQ0FBUUUsZUFBZTFHLEdBQWYsQ0FBbUJPLE9BQW5CLENBQVI7QUFDRDtBQUNGOztBQUVEQSxnQkFBUW9HLFNBQVIsQ0FBa0IsS0FBS3hMLE9BQUwsQ0FBYXlMLFVBQS9CLEVBQTJDLFlBQU07QUFDL0M7Ozs7QUFJQSxpQkFBS3hkLFFBQUwsQ0FBY0UsT0FBZCxDQUFzQixtQkFBdEIsRUFBMkMsQ0FBQ2lYLE9BQUQsQ0FBM0M7QUFDRCxTQU5EOztBQVFBdlksZ0JBQU11WSxRQUFRaFksSUFBUixDQUFhLGlCQUFiLENBQU4sRUFBeUNBLElBQXpDLENBQThDO0FBQzVDLDJCQUFpQixJQUQyQjtBQUU1QywyQkFBaUI7QUFGMkIsU0FBOUM7QUFJRDs7QUFFRDs7Ozs7OztBQXpKVztBQUFBO0FBQUEseUJBK0pSZ1ksT0EvSlEsRUErSkM7QUFDVixZQUFJc0csU0FBU3RHLFFBQVFyUCxNQUFSLEdBQWlCNlEsUUFBakIsRUFBYjtBQUFBLFlBQ0kzWCxRQUFRLElBRFo7O0FBR0EsWUFBSSxDQUFDLEtBQUsrUSxPQUFMLENBQWEyTCxjQUFkLElBQWdDLENBQUNELE9BQU9OLFFBQVAsQ0FBZ0IsV0FBaEIsQ0FBbEMsSUFBbUUsQ0FBQ2hHLFFBQVFyUCxNQUFSLEdBQWlCcVYsUUFBakIsQ0FBMEIsV0FBMUIsQ0FBdkUsRUFBK0c7QUFDN0c7QUFDRDs7QUFFRDtBQUNFaEcsZ0JBQVF3RyxPQUFSLENBQWdCM2MsTUFBTStRLE9BQU4sQ0FBY3lMLFVBQTlCLEVBQTBDLFlBQVk7QUFDcEQ7Ozs7QUFJQXhjLGdCQUFNaEIsUUFBTixDQUFlRSxPQUFmLENBQXVCLGlCQUF2QixFQUEwQyxDQUFDaVgsT0FBRCxDQUExQztBQUNELFNBTkQ7QUFPRjs7QUFFQUEsZ0JBQVFoWSxJQUFSLENBQWEsYUFBYixFQUE0QixJQUE1QixFQUNRMkksTUFEUixHQUNpQmpELFdBRGpCLENBQzZCLFdBRDdCOztBQUdBakcsZ0JBQU11WSxRQUFRaFksSUFBUixDQUFhLGlCQUFiLENBQU4sRUFBeUNBLElBQXpDLENBQThDO0FBQzdDLDJCQUFpQixLQUQ0QjtBQUU3QywyQkFBaUI7QUFGNEIsU0FBOUM7QUFJRDs7QUFFRDs7Ozs7O0FBMUxXO0FBQUE7QUFBQSxnQ0ErTEQ7QUFDUixhQUFLYSxRQUFMLENBQWN1QyxJQUFkLENBQW1CLG9CQUFuQixFQUF5Q3FiLElBQXpDLENBQThDLElBQTlDLEVBQW9ERCxPQUFwRCxDQUE0RCxDQUE1RCxFQUErRHZRLEdBQS9ELENBQW1FLFNBQW5FLEVBQThFLEVBQTlFO0FBQ0EsYUFBS3BOLFFBQUwsQ0FBY3VDLElBQWQsQ0FBbUIsR0FBbkIsRUFBd0JpSyxHQUF4QixDQUE0QixlQUE1Qjs7QUFFQTFOLG1CQUFXc0IsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDtBQXBNVTs7QUFBQTtBQUFBOztBQXVNYmljLFlBQVV0RSxRQUFWLEdBQXFCO0FBQ25COzs7OztBQUtBeUYsZ0JBQVksR0FOTztBQU9uQjs7Ozs7QUFLQVIsaUJBQWEsS0FaTTtBQWFuQjs7Ozs7QUFLQVUsb0JBQWdCO0FBbEJHLEdBQXJCOztBQXFCQTtBQUNBNWUsYUFBV00sTUFBWCxDQUFrQmlkLFNBQWxCLEVBQTZCLFdBQTdCO0FBRUMsQ0EvTkEsQ0ErTkM3VSxNQS9ORCxDQUFEO0NDRkE7Ozs7OztBQUVBLENBQUMsVUFBUzVJLENBQVQsRUFBWTs7QUFFYjs7Ozs7Ozs7QUFGYSxNQVVQaWYsYUFWTztBQVdYOzs7Ozs7O0FBT0EsMkJBQVloVyxPQUFaLEVBQXFCa0ssT0FBckIsRUFBOEI7QUFBQTs7QUFDNUIsV0FBSy9SLFFBQUwsR0FBZ0I2SCxPQUFoQjtBQUNBLFdBQUtrSyxPQUFMLEdBQWVuVCxFQUFFeU0sTUFBRixDQUFTLEVBQVQsRUFBYXdTLGNBQWM5RixRQUEzQixFQUFxQyxLQUFLL1gsUUFBTCxDQUFjQyxJQUFkLEVBQXJDLEVBQTJEOFIsT0FBM0QsQ0FBZjs7QUFFQWpULGlCQUFXcVMsSUFBWCxDQUFnQkMsT0FBaEIsQ0FBd0IsS0FBS3BSLFFBQTdCLEVBQXVDLFdBQXZDOztBQUVBLFdBQUtjLEtBQUw7O0FBRUFoQyxpQkFBV1ksY0FBWCxDQUEwQixJQUExQixFQUFnQyxlQUFoQztBQUNBWixpQkFBV21MLFFBQVgsQ0FBb0IyQixRQUFwQixDQUE2QixlQUE3QixFQUE4QztBQUM1QyxpQkFBUyxRQURtQztBQUU1QyxpQkFBUyxRQUZtQztBQUc1Qyx1QkFBZSxNQUg2QjtBQUk1QyxvQkFBWSxJQUpnQztBQUs1QyxzQkFBYyxNQUw4QjtBQU01QyxzQkFBYyxPQU44QjtBQU81QyxrQkFBVTtBQVBrQyxPQUE5QztBQVNEOztBQUlEOzs7Ozs7QUF4Q1c7QUFBQTtBQUFBLDhCQTRDSDtBQUNOLGFBQUs1TCxRQUFMLENBQWN1QyxJQUFkLENBQW1CLGdCQUFuQixFQUFxQ3FVLEdBQXJDLENBQXlDLFlBQXpDLEVBQXVEK0csT0FBdkQsQ0FBK0QsQ0FBL0QsRUFETSxDQUM0RDtBQUNsRSxhQUFLM2QsUUFBTCxDQUFjYixJQUFkLENBQW1CO0FBQ2pCLGtCQUFRLE1BRFM7QUFFakIsa0NBQXdCLEtBQUs0UyxPQUFMLENBQWErTDtBQUZwQixTQUFuQjs7QUFLQSxhQUFLQyxVQUFMLEdBQWtCLEtBQUsvZCxRQUFMLENBQWN1QyxJQUFkLENBQW1CLDhCQUFuQixDQUFsQjtBQUNBLGFBQUt3YixVQUFMLENBQWdCbGQsSUFBaEIsQ0FBcUIsWUFBVTtBQUM3QixjQUFJNGIsU0FBUyxLQUFLaE8sRUFBTCxJQUFXM1AsV0FBV2lCLFdBQVgsQ0FBdUIsQ0FBdkIsRUFBMEIsZUFBMUIsQ0FBeEI7QUFBQSxjQUNJdUMsUUFBUTFELEVBQUUsSUFBRixDQURaO0FBQUEsY0FFSStTLE9BQU9yUCxNQUFNc1AsUUFBTixDQUFlLGdCQUFmLENBRlg7QUFBQSxjQUdJb00sUUFBUXJNLEtBQUssQ0FBTCxFQUFRbEQsRUFBUixJQUFjM1AsV0FBV2lCLFdBQVgsQ0FBdUIsQ0FBdkIsRUFBMEIsVUFBMUIsQ0FIMUI7QUFBQSxjQUlJa2UsV0FBV3RNLEtBQUt3TCxRQUFMLENBQWMsV0FBZCxDQUpmO0FBS0E3YSxnQkFBTW5ELElBQU4sQ0FBVztBQUNULDZCQUFpQjZlLEtBRFI7QUFFVCw2QkFBaUJDLFFBRlI7QUFHVCxvQkFBUSxVQUhDO0FBSVQsa0JBQU14QjtBQUpHLFdBQVg7QUFNQTlLLGVBQUt4UyxJQUFMLENBQVU7QUFDUiwrQkFBbUJzZCxNQURYO0FBRVIsMkJBQWUsQ0FBQ3dCLFFBRlI7QUFHUixvQkFBUSxNQUhBO0FBSVIsa0JBQU1EO0FBSkUsV0FBVjtBQU1ELFNBbEJEO0FBbUJBLFlBQUlFLFlBQVksS0FBS2xlLFFBQUwsQ0FBY3VDLElBQWQsQ0FBbUIsWUFBbkIsQ0FBaEI7QUFDQSxZQUFHMmIsVUFBVXZjLE1BQWIsRUFBb0I7QUFDbEIsY0FBSVgsUUFBUSxJQUFaO0FBQ0FrZCxvQkFBVXJkLElBQVYsQ0FBZSxZQUFVO0FBQ3ZCRyxrQkFBTTJiLElBQU4sQ0FBVy9kLEVBQUUsSUFBRixDQUFYO0FBQ0QsV0FGRDtBQUdEO0FBQ0QsYUFBS3FaLE9BQUw7QUFDRDs7QUFFRDs7Ozs7QUFqRlc7QUFBQTtBQUFBLGdDQXFGRDtBQUNSLFlBQUlqWCxRQUFRLElBQVo7O0FBRUEsYUFBS2hCLFFBQUwsQ0FBY3VDLElBQWQsQ0FBbUIsSUFBbkIsRUFBeUIxQixJQUF6QixDQUE4QixZQUFXO0FBQ3ZDLGNBQUlzZCxXQUFXdmYsRUFBRSxJQUFGLEVBQVFnVCxRQUFSLENBQWlCLGdCQUFqQixDQUFmOztBQUVBLGNBQUl1TSxTQUFTeGMsTUFBYixFQUFxQjtBQUNuQi9DLGNBQUUsSUFBRixFQUFRZ1QsUUFBUixDQUFpQixHQUFqQixFQUFzQnBGLEdBQXRCLENBQTBCLHdCQUExQixFQUFvREwsRUFBcEQsQ0FBdUQsd0JBQXZELEVBQWlGLFVBQVNySixDQUFULEVBQVk7QUFDM0ZBLGdCQUFFdUosY0FBRjs7QUFFQXJMLG9CQUFNNmIsTUFBTixDQUFhc0IsUUFBYjtBQUNELGFBSkQ7QUFLRDtBQUNGLFNBVkQsRUFVR2hTLEVBVkgsQ0FVTSwwQkFWTixFQVVrQyxVQUFTckosQ0FBVCxFQUFXO0FBQzNDLGNBQUk5QyxXQUFXcEIsRUFBRSxJQUFGLENBQWY7QUFBQSxjQUNJd2YsWUFBWXBlLFNBQVM4SCxNQUFULENBQWdCLElBQWhCLEVBQXNCOEosUUFBdEIsQ0FBK0IsSUFBL0IsQ0FEaEI7QUFBQSxjQUVJeU0sWUFGSjtBQUFBLGNBR0lDLFlBSEo7QUFBQSxjQUlJbkgsVUFBVW5YLFNBQVM0UixRQUFULENBQWtCLGdCQUFsQixDQUpkOztBQU1Bd00sb0JBQVV2ZCxJQUFWLENBQWUsVUFBU3dCLENBQVQsRUFBWTtBQUN6QixnQkFBSXpELEVBQUUsSUFBRixFQUFRK00sRUFBUixDQUFXM0wsUUFBWCxDQUFKLEVBQTBCO0FBQ3hCcWUsNkJBQWVELFVBQVVuUyxFQUFWLENBQWFwSyxLQUFLd0UsR0FBTCxDQUFTLENBQVQsRUFBWWhFLElBQUUsQ0FBZCxDQUFiLEVBQStCRSxJQUEvQixDQUFvQyxHQUFwQyxFQUF5Q3VTLEtBQXpDLEVBQWY7QUFDQXdKLDZCQUFlRixVQUFVblMsRUFBVixDQUFhcEssS0FBSzBjLEdBQUwsQ0FBU2xjLElBQUUsQ0FBWCxFQUFjK2IsVUFBVXpjLE1BQVYsR0FBaUIsQ0FBL0IsQ0FBYixFQUFnRFksSUFBaEQsQ0FBcUQsR0FBckQsRUFBMER1UyxLQUExRCxFQUFmOztBQUVBLGtCQUFJbFcsRUFBRSxJQUFGLEVBQVFnVCxRQUFSLENBQWlCLHdCQUFqQixFQUEyQ2pRLE1BQS9DLEVBQXVEO0FBQUU7QUFDdkQyYywrQkFBZXRlLFNBQVN1QyxJQUFULENBQWMsZ0JBQWQsRUFBZ0NBLElBQWhDLENBQXFDLEdBQXJDLEVBQTBDdVMsS0FBMUMsRUFBZjtBQUNEO0FBQ0Qsa0JBQUlsVyxFQUFFLElBQUYsRUFBUStNLEVBQVIsQ0FBVyxjQUFYLENBQUosRUFBZ0M7QUFBRTtBQUNoQzBTLCtCQUFlcmUsU0FBU3dlLE9BQVQsQ0FBaUIsSUFBakIsRUFBdUIxSixLQUF2QixHQUErQnZTLElBQS9CLENBQW9DLEdBQXBDLEVBQXlDdVMsS0FBekMsRUFBZjtBQUNELGVBRkQsTUFFTyxJQUFJdUosYUFBYUcsT0FBYixDQUFxQixJQUFyQixFQUEyQjFKLEtBQTNCLEdBQW1DbEQsUUFBbkMsQ0FBNEMsd0JBQTVDLEVBQXNFalEsTUFBMUUsRUFBa0Y7QUFBRTtBQUN6RjBjLCtCQUFlQSxhQUFhRyxPQUFiLENBQXFCLElBQXJCLEVBQTJCamMsSUFBM0IsQ0FBZ0MsZUFBaEMsRUFBaURBLElBQWpELENBQXNELEdBQXRELEVBQTJEdVMsS0FBM0QsRUFBZjtBQUNEO0FBQ0Qsa0JBQUlsVyxFQUFFLElBQUYsRUFBUStNLEVBQVIsQ0FBVyxhQUFYLENBQUosRUFBK0I7QUFBRTtBQUMvQjJTLCtCQUFldGUsU0FBU3dlLE9BQVQsQ0FBaUIsSUFBakIsRUFBdUIxSixLQUF2QixHQUErQmdJLElBQS9CLENBQW9DLElBQXBDLEVBQTBDdmEsSUFBMUMsQ0FBK0MsR0FBL0MsRUFBb0R1UyxLQUFwRCxFQUFmO0FBQ0Q7O0FBRUQ7QUFDRDtBQUNGLFdBbkJEOztBQXFCQWhXLHFCQUFXbUwsUUFBWCxDQUFvQmEsU0FBcEIsQ0FBOEJoSSxDQUE5QixFQUFpQyxlQUFqQyxFQUFrRDtBQUNoRDJiLGtCQUFNLFlBQVc7QUFDZixrQkFBSXRILFFBQVF4TCxFQUFSLENBQVcsU0FBWCxDQUFKLEVBQTJCO0FBQ3pCM0ssc0JBQU0yYixJQUFOLENBQVd4RixPQUFYO0FBQ0FBLHdCQUFRNVUsSUFBUixDQUFhLElBQWIsRUFBbUJ1UyxLQUFuQixHQUEyQnZTLElBQTNCLENBQWdDLEdBQWhDLEVBQXFDdVMsS0FBckMsR0FBNkN4SSxLQUE3QztBQUNEO0FBQ0YsYUFOK0M7QUFPaERvUyxtQkFBTyxZQUFXO0FBQ2hCLGtCQUFJdkgsUUFBUXhWLE1BQVIsSUFBa0IsQ0FBQ3dWLFFBQVF4TCxFQUFSLENBQVcsU0FBWCxDQUF2QixFQUE4QztBQUFFO0FBQzlDM0ssc0JBQU1vYyxFQUFOLENBQVNqRyxPQUFUO0FBQ0QsZUFGRCxNQUVPLElBQUluWCxTQUFTOEgsTUFBVCxDQUFnQixnQkFBaEIsRUFBa0NuRyxNQUF0QyxFQUE4QztBQUFFO0FBQ3JEWCxzQkFBTW9jLEVBQU4sQ0FBU3BkLFNBQVM4SCxNQUFULENBQWdCLGdCQUFoQixDQUFUO0FBQ0E5SCx5QkFBU3dlLE9BQVQsQ0FBaUIsSUFBakIsRUFBdUIxSixLQUF2QixHQUErQnZTLElBQS9CLENBQW9DLEdBQXBDLEVBQXlDdVMsS0FBekMsR0FBaUR4SSxLQUFqRDtBQUNEO0FBQ0YsYUFkK0M7QUFlaEQ4USxnQkFBSSxZQUFXO0FBQ2JpQiwyQkFBYS9SLEtBQWI7QUFDQSxxQkFBTyxJQUFQO0FBQ0QsYUFsQitDO0FBbUJoRHFRLGtCQUFNLFlBQVc7QUFDZjJCLDJCQUFhaFMsS0FBYjtBQUNBLHFCQUFPLElBQVA7QUFDRCxhQXRCK0M7QUF1QmhEdVEsb0JBQVEsWUFBVztBQUNqQixrQkFBSTdjLFNBQVM0UixRQUFULENBQWtCLGdCQUFsQixFQUFvQ2pRLE1BQXhDLEVBQWdEO0FBQzlDWCxzQkFBTTZiLE1BQU4sQ0FBYTdjLFNBQVM0UixRQUFULENBQWtCLGdCQUFsQixDQUFiO0FBQ0Q7QUFDRixhQTNCK0M7QUE0QmhEK00sc0JBQVUsWUFBVztBQUNuQjNkLG9CQUFNNGQsT0FBTjtBQUNELGFBOUIrQztBQStCaERyVCxxQkFBUyxVQUFTYyxjQUFULEVBQXlCO0FBQ2hDLGtCQUFJQSxjQUFKLEVBQW9CO0FBQ2xCdkosa0JBQUV1SixjQUFGO0FBQ0Q7QUFDRHZKLGdCQUFFK2Isd0JBQUY7QUFDRDtBQXBDK0MsV0FBbEQ7QUFzQ0QsU0E1RUQsRUFIUSxDQStFTDtBQUNKOztBQUVEOzs7OztBQXZLVztBQUFBO0FBQUEsZ0NBMktEO0FBQ1IsYUFBS3pCLEVBQUwsQ0FBUSxLQUFLcGQsUUFBTCxDQUFjdUMsSUFBZCxDQUFtQixnQkFBbkIsQ0FBUjtBQUNEOztBQUVEOzs7OztBQS9LVztBQUFBO0FBQUEsZ0NBbUxEO0FBQ1IsYUFBS29hLElBQUwsQ0FBVSxLQUFLM2MsUUFBTCxDQUFjdUMsSUFBZCxDQUFtQixnQkFBbkIsQ0FBVjtBQUNEOztBQUVEOzs7Ozs7QUF2TFc7QUFBQTtBQUFBLDZCQTRMSjRVLE9BNUxJLEVBNExJO0FBQ2IsWUFBRyxDQUFDQSxRQUFReEwsRUFBUixDQUFXLFdBQVgsQ0FBSixFQUE2QjtBQUMzQixjQUFJLENBQUN3TCxRQUFReEwsRUFBUixDQUFXLFNBQVgsQ0FBTCxFQUE0QjtBQUMxQixpQkFBS3lSLEVBQUwsQ0FBUWpHLE9BQVI7QUFDRCxXQUZELE1BR0s7QUFDSCxpQkFBS3dGLElBQUwsQ0FBVXhGLE9BQVY7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQ7Ozs7OztBQXZNVztBQUFBO0FBQUEsMkJBNE1OQSxPQTVNTSxFQTRNRztBQUNaLFlBQUluVyxRQUFRLElBQVo7O0FBRUEsWUFBRyxDQUFDLEtBQUsrUSxPQUFMLENBQWErTCxTQUFqQixFQUE0QjtBQUMxQixlQUFLVixFQUFMLENBQVEsS0FBS3BkLFFBQUwsQ0FBY3VDLElBQWQsQ0FBbUIsWUFBbkIsRUFBaUNxVSxHQUFqQyxDQUFxQ08sUUFBUTJILFlBQVIsQ0FBcUIsS0FBSzllLFFBQTFCLEVBQW9DK2UsR0FBcEMsQ0FBd0M1SCxPQUF4QyxDQUFyQyxDQUFSO0FBQ0Q7O0FBRURBLGdCQUFRdkcsUUFBUixDQUFpQixXQUFqQixFQUE4QnpSLElBQTlCLENBQW1DLEVBQUMsZUFBZSxLQUFoQixFQUFuQyxFQUNHMkksTUFESCxDQUNVLDhCQURWLEVBQzBDM0ksSUFEMUMsQ0FDK0MsRUFBQyxpQkFBaUIsSUFBbEIsRUFEL0M7O0FBR0U7QUFDRWdZLGdCQUFRb0csU0FBUixDQUFrQnZjLE1BQU0rUSxPQUFOLENBQWN5TCxVQUFoQyxFQUE0QyxZQUFZO0FBQ3REOzs7O0FBSUF4YyxnQkFBTWhCLFFBQU4sQ0FBZUUsT0FBZixDQUF1Qix1QkFBdkIsRUFBZ0QsQ0FBQ2lYLE9BQUQsQ0FBaEQ7QUFDRCxTQU5EO0FBT0Y7QUFDSDs7QUFFRDs7Ozs7O0FBak9XO0FBQUE7QUFBQSx5QkFzT1JBLE9BdE9RLEVBc09DO0FBQ1YsWUFBSW5XLFFBQVEsSUFBWjtBQUNBO0FBQ0VtVyxnQkFBUXdHLE9BQVIsQ0FBZ0IzYyxNQUFNK1EsT0FBTixDQUFjeUwsVUFBOUIsRUFBMEMsWUFBWTtBQUNwRDs7OztBQUlBeGMsZ0JBQU1oQixRQUFOLENBQWVFLE9BQWYsQ0FBdUIscUJBQXZCLEVBQThDLENBQUNpWCxPQUFELENBQTlDO0FBQ0QsU0FORDtBQU9GOztBQUVBLFlBQUk2SCxTQUFTN0gsUUFBUTVVLElBQVIsQ0FBYSxnQkFBYixFQUErQm9iLE9BQS9CLENBQXVDLENBQXZDLEVBQTBDbmIsT0FBMUMsR0FBb0RyRCxJQUFwRCxDQUF5RCxhQUF6RCxFQUF3RSxJQUF4RSxDQUFiOztBQUVBNmYsZUFBT2xYLE1BQVAsQ0FBYyw4QkFBZCxFQUE4QzNJLElBQTlDLENBQW1ELGVBQW5ELEVBQW9FLEtBQXBFO0FBQ0Q7O0FBRUQ7Ozs7O0FBdlBXO0FBQUE7QUFBQSxnQ0EyUEQ7QUFDUixhQUFLYSxRQUFMLENBQWN1QyxJQUFkLENBQW1CLGdCQUFuQixFQUFxQ2diLFNBQXJDLENBQStDLENBQS9DLEVBQWtEblEsR0FBbEQsQ0FBc0QsU0FBdEQsRUFBaUUsRUFBakU7QUFDQSxhQUFLcE4sUUFBTCxDQUFjdUMsSUFBZCxDQUFtQixHQUFuQixFQUF3QmlLLEdBQXhCLENBQTRCLHdCQUE1Qjs7QUFFQTFOLG1CQUFXcVMsSUFBWCxDQUFnQlUsSUFBaEIsQ0FBcUIsS0FBSzdSLFFBQTFCLEVBQW9DLFdBQXBDO0FBQ0FsQixtQkFBV3NCLGdCQUFYLENBQTRCLElBQTVCO0FBQ0Q7QUFqUVU7O0FBQUE7QUFBQTs7QUFvUWJ5ZCxnQkFBYzlGLFFBQWQsR0FBeUI7QUFDdkI7Ozs7O0FBS0F5RixnQkFBWSxHQU5XO0FBT3ZCOzs7OztBQUtBTSxlQUFXO0FBWlksR0FBekI7O0FBZUE7QUFDQWhmLGFBQVdNLE1BQVgsQ0FBa0J5ZSxhQUFsQixFQUFpQyxlQUFqQztBQUVDLENBdFJBLENBc1JDclcsTUF0UkQsQ0FBRDtDQ0ZBOzs7Ozs7QUFFQSxDQUFDLFVBQVM1SSxDQUFULEVBQVk7O0FBRWI7Ozs7Ozs7O0FBRmEsTUFVUHFnQixTQVZPO0FBV1g7Ozs7OztBQU1BLHVCQUFZcFgsT0FBWixFQUFxQmtLLE9BQXJCLEVBQThCO0FBQUE7O0FBQzVCLFdBQUsvUixRQUFMLEdBQWdCNkgsT0FBaEI7QUFDQSxXQUFLa0ssT0FBTCxHQUFlblQsRUFBRXlNLE1BQUYsQ0FBUyxFQUFULEVBQWE0VCxVQUFVbEgsUUFBdkIsRUFBaUMsS0FBSy9YLFFBQUwsQ0FBY0MsSUFBZCxFQUFqQyxFQUF1RDhSLE9BQXZELENBQWY7O0FBRUFqVCxpQkFBV3FTLElBQVgsQ0FBZ0JDLE9BQWhCLENBQXdCLEtBQUtwUixRQUE3QixFQUF1QyxXQUF2Qzs7QUFFQSxXQUFLYyxLQUFMOztBQUVBaEMsaUJBQVdZLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsV0FBaEM7QUFDQVosaUJBQVdtTCxRQUFYLENBQW9CMkIsUUFBcEIsQ0FBNkIsV0FBN0IsRUFBMEM7QUFDeEMsaUJBQVMsTUFEK0I7QUFFeEMsaUJBQVMsTUFGK0I7QUFHeEMsdUJBQWUsTUFIeUI7QUFJeEMsb0JBQVksSUFKNEI7QUFLeEMsc0JBQWMsTUFMMEI7QUFNeEMsc0JBQWMsVUFOMEI7QUFPeEMsa0JBQVUsT0FQOEI7QUFReEMsZUFBTyxNQVJpQztBQVN4QyxxQkFBYTtBQVQyQixPQUExQztBQVdEOztBQUVEOzs7Ozs7QUF2Q1c7QUFBQTtBQUFBLDhCQTJDSDtBQUNOLGFBQUtzVCxlQUFMLEdBQXVCLEtBQUtsZixRQUFMLENBQWN1QyxJQUFkLENBQW1CLGdDQUFuQixFQUFxRHFQLFFBQXJELENBQThELEdBQTlELENBQXZCO0FBQ0EsYUFBS3VOLFNBQUwsR0FBaUIsS0FBS0QsZUFBTCxDQUFxQnBYLE1BQXJCLENBQTRCLElBQTVCLEVBQWtDOEosUUFBbEMsQ0FBMkMsZ0JBQTNDLENBQWpCO0FBQ0EsYUFBS3dOLFVBQUwsR0FBa0IsS0FBS3BmLFFBQUwsQ0FBY3VDLElBQWQsQ0FBbUIsSUFBbkIsRUFBeUJxVSxHQUF6QixDQUE2QixvQkFBN0IsRUFBbUR6WCxJQUFuRCxDQUF3RCxNQUF4RCxFQUFnRSxVQUFoRSxFQUE0RW9ELElBQTVFLENBQWlGLEdBQWpGLENBQWxCO0FBQ0EsYUFBS3ZDLFFBQUwsQ0FBY2IsSUFBZCxDQUFtQixhQUFuQixFQUFtQyxLQUFLYSxRQUFMLENBQWNiLElBQWQsQ0FBbUIsZ0JBQW5CLEtBQXdDTCxXQUFXaUIsV0FBWCxDQUF1QixDQUF2QixFQUEwQixXQUExQixDQUEzRTs7QUFFQSxhQUFLc2YsWUFBTDtBQUNBLGFBQUtDLGVBQUw7O0FBRUEsYUFBS0MsZUFBTDtBQUNEOztBQUVEOzs7Ozs7OztBQXZEVztBQUFBO0FBQUEscUNBOERJO0FBQ2IsWUFBSXZlLFFBQVEsSUFBWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUtrZSxlQUFMLENBQXFCcmUsSUFBckIsQ0FBMEIsWUFBVTtBQUNsQyxjQUFJMmUsUUFBUTVnQixFQUFFLElBQUYsQ0FBWjtBQUNBLGNBQUkrUyxPQUFPNk4sTUFBTTFYLE1BQU4sRUFBWDtBQUNBLGNBQUc5RyxNQUFNK1EsT0FBTixDQUFjME4sVUFBakIsRUFBNEI7QUFDMUJELGtCQUFNRSxLQUFOLEdBQWNDLFNBQWQsQ0FBd0JoTyxLQUFLQyxRQUFMLENBQWMsZ0JBQWQsQ0FBeEIsRUFBeURnTyxJQUF6RCxDQUE4RCxxR0FBOUQ7QUFDRDtBQUNESixnQkFBTXZmLElBQU4sQ0FBVyxXQUFYLEVBQXdCdWYsTUFBTXJnQixJQUFOLENBQVcsTUFBWCxDQUF4QixFQUE0Q29CLFVBQTVDLENBQXVELE1BQXZELEVBQStEcEIsSUFBL0QsQ0FBb0UsVUFBcEUsRUFBZ0YsQ0FBaEY7QUFDQXFnQixnQkFBTTVOLFFBQU4sQ0FBZSxnQkFBZixFQUNLelMsSUFETCxDQUNVO0FBQ0osMkJBQWUsSUFEWDtBQUVKLHdCQUFZLENBRlI7QUFHSixvQkFBUTtBQUhKLFdBRFY7QUFNQTZCLGdCQUFNaVgsT0FBTixDQUFjdUgsS0FBZDtBQUNELFNBZEQ7QUFlQSxhQUFLTCxTQUFMLENBQWV0ZSxJQUFmLENBQW9CLFlBQVU7QUFDNUIsY0FBSWdmLFFBQVFqaEIsRUFBRSxJQUFGLENBQVo7QUFBQSxjQUNJa2hCLFFBQVFELE1BQU10ZCxJQUFOLENBQVcsb0JBQVgsQ0FEWjtBQUVBLGNBQUcsQ0FBQ3VkLE1BQU1uZSxNQUFWLEVBQWlCO0FBQ2Ysb0JBQVFYLE1BQU0rUSxPQUFOLENBQWNnTyxrQkFBdEI7QUFDRSxtQkFBSyxRQUFMO0FBQ0VGLHNCQUFNRyxNQUFOLENBQWFoZixNQUFNK1EsT0FBTixDQUFja08sVUFBM0I7QUFDQTtBQUNGLG1CQUFLLEtBQUw7QUFDRUosc0JBQU1LLE9BQU4sQ0FBY2xmLE1BQU0rUSxPQUFOLENBQWNrTyxVQUE1QjtBQUNBO0FBQ0Y7QUFDRXhlLHdCQUFRQyxLQUFSLENBQWMsMkNBQTJDVixNQUFNK1EsT0FBTixDQUFjZ08sa0JBQXpELEdBQThFLEdBQTVGO0FBUko7QUFVRDtBQUNEL2UsZ0JBQU1tZixLQUFOLENBQVlOLEtBQVo7QUFDRCxTQWhCRDs7QUFrQkEsWUFBRyxDQUFDLEtBQUs5TixPQUFMLENBQWFxTyxVQUFqQixFQUE2QjtBQUMzQixlQUFLakIsU0FBTCxDQUFldk8sUUFBZixDQUF3QixrQ0FBeEI7QUFDRDs7QUFFRCxZQUFHLENBQUMsS0FBSzVRLFFBQUwsQ0FBYzhILE1BQWQsR0FBdUJxVixRQUF2QixDQUFnQyxjQUFoQyxDQUFKLEVBQW9EO0FBQ2xELGVBQUtrRCxRQUFMLEdBQWdCemhCLEVBQUUsS0FBS21ULE9BQUwsQ0FBYXVPLE9BQWYsRUFBd0IxUCxRQUF4QixDQUFpQyxjQUFqQyxDQUFoQjtBQUNBLGNBQUcsS0FBS21CLE9BQUwsQ0FBYXdPLGFBQWhCLEVBQStCLEtBQUtGLFFBQUwsQ0FBY3pQLFFBQWQsQ0FBdUIsZ0JBQXZCO0FBQy9CLGVBQUt5UCxRQUFMLEdBQWdCLEtBQUtyZ0IsUUFBTCxDQUFjNGYsSUFBZCxDQUFtQixLQUFLUyxRQUF4QixFQUFrQ3ZZLE1BQWxDLEdBQTJDc0YsR0FBM0MsQ0FBK0MsS0FBS29ULFdBQUwsRUFBL0MsQ0FBaEI7QUFDRDtBQUNGO0FBN0dVO0FBQUE7QUFBQSxnQ0ErR0Q7QUFDUixhQUFLSCxRQUFMLENBQWNqVCxHQUFkLENBQWtCLEVBQUMsYUFBYSxNQUFkLEVBQXNCLGNBQWMsTUFBcEMsRUFBbEI7QUFDQTtBQUNBLGFBQUtpVCxRQUFMLENBQWNqVCxHQUFkLENBQWtCLEtBQUtvVCxXQUFMLEVBQWxCO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUFySFc7QUFBQTtBQUFBLDhCQTJISGxlLEtBM0hHLEVBMkhJO0FBQ2IsWUFBSXRCLFFBQVEsSUFBWjs7QUFFQXNCLGNBQU1rSyxHQUFOLENBQVUsb0JBQVYsRUFDQ0wsRUFERCxDQUNJLG9CQURKLEVBQzBCLFVBQVNySixDQUFULEVBQVc7QUFDbkMsY0FBR2xFLEVBQUVrRSxFQUFFc0osTUFBSixFQUFZMFMsWUFBWixDQUF5QixJQUF6QixFQUErQixJQUEvQixFQUFxQzNCLFFBQXJDLENBQThDLDZCQUE5QyxDQUFILEVBQWdGO0FBQzlFcmEsY0FBRStiLHdCQUFGO0FBQ0EvYixjQUFFdUosY0FBRjtBQUNEOztBQUVEO0FBQ0E7QUFDQTtBQUNBckwsZ0JBQU15ZixLQUFOLENBQVluZSxNQUFNd0YsTUFBTixDQUFhLElBQWIsQ0FBWjs7QUFFQSxjQUFHOUcsTUFBTStRLE9BQU4sQ0FBYzJPLFlBQWpCLEVBQThCO0FBQzVCLGdCQUFJQyxRQUFRL2hCLEVBQUUsTUFBRixDQUFaO0FBQ0EraEIsa0JBQU1uVSxHQUFOLENBQVUsZUFBVixFQUEyQkwsRUFBM0IsQ0FBOEIsb0JBQTlCLEVBQW9ELFVBQVNySixDQUFULEVBQVc7QUFDN0Qsa0JBQUlBLEVBQUVzSixNQUFGLEtBQWFwTCxNQUFNaEIsUUFBTixDQUFlLENBQWYsQ0FBYixJQUFrQ3BCLEVBQUVnaUIsUUFBRixDQUFXNWYsTUFBTWhCLFFBQU4sQ0FBZSxDQUFmLENBQVgsRUFBOEI4QyxFQUFFc0osTUFBaEMsQ0FBdEMsRUFBK0U7QUFBRTtBQUFTO0FBQzFGdEosZ0JBQUV1SixjQUFGO0FBQ0FyTCxvQkFBTTZmLFFBQU47QUFDQUYsb0JBQU1uVSxHQUFOLENBQVUsZUFBVjtBQUNELGFBTEQ7QUFNRDtBQUNGLFNBckJEO0FBc0JELGFBQUt4TSxRQUFMLENBQWNtTSxFQUFkLENBQWlCLHFCQUFqQixFQUF3QyxLQUFLMlUsT0FBTCxDQUFhcGEsSUFBYixDQUFrQixJQUFsQixDQUF4QztBQUNBOztBQUVEOzs7Ozs7QUF2Slc7QUFBQTtBQUFBLHdDQTRKTztBQUNoQixZQUFHLEtBQUtxTCxPQUFMLENBQWFnUCxTQUFoQixFQUEwQjtBQUN4QixlQUFLQyxZQUFMLEdBQW9CLEtBQUtDLFVBQUwsQ0FBZ0J2YSxJQUFoQixDQUFxQixJQUFyQixDQUFwQjtBQUNBLGVBQUsxRyxRQUFMLENBQWNtTSxFQUFkLENBQWlCLHlEQUFqQixFQUEyRSxLQUFLNlUsWUFBaEY7QUFDRDtBQUNGOztBQUVEOzs7Ozs7QUFuS1c7QUFBQTtBQUFBLG1DQXdLRTtBQUNYLFlBQUloZ0IsUUFBUSxJQUFaO0FBQ0EsWUFBSWtnQixvQkFBb0JsZ0IsTUFBTStRLE9BQU4sQ0FBY29QLGdCQUFkLElBQWdDLEVBQWhDLEdBQW1DdmlCLEVBQUVvQyxNQUFNK1EsT0FBTixDQUFjb1AsZ0JBQWhCLENBQW5DLEdBQXFFbmdCLE1BQU1oQixRQUFuRztBQUFBLFlBQ0lvaEIsWUFBWUMsU0FBU0gsa0JBQWtCM1ksTUFBbEIsR0FBMkJMLEdBQTNCLEdBQStCbEgsTUFBTStRLE9BQU4sQ0FBY3VQLGVBQXRELENBRGhCO0FBRUExaUIsVUFBRSxZQUFGLEVBQWdCZ2YsSUFBaEIsQ0FBcUIsSUFBckIsRUFBMkI1TixPQUEzQixDQUFtQyxFQUFFK1EsV0FBV0ssU0FBYixFQUFuQyxFQUE2RHBnQixNQUFNK1EsT0FBTixDQUFjd1AsaUJBQTNFLEVBQThGdmdCLE1BQU0rUSxPQUFOLENBQWN5UCxlQUE1RyxFQUE0SCxZQUFVO0FBQ3BJOzs7O0FBSUEsY0FBRyxTQUFPNWlCLEVBQUUsTUFBRixFQUFVLENBQVYsQ0FBVixFQUF1Qm9DLE1BQU1oQixRQUFOLENBQWVFLE9BQWYsQ0FBdUIsdUJBQXZCO0FBQ3hCLFNBTkQ7QUFPRDs7QUFFRDs7Ozs7QUFyTFc7QUFBQTtBQUFBLHdDQXlMTztBQUNoQixZQUFJYyxRQUFRLElBQVo7O0FBRUEsYUFBS29lLFVBQUwsQ0FBZ0JMLEdBQWhCLENBQW9CLEtBQUsvZSxRQUFMLENBQWN1QyxJQUFkLENBQW1CLHFEQUFuQixDQUFwQixFQUErRjRKLEVBQS9GLENBQWtHLHNCQUFsRyxFQUEwSCxVQUFTckosQ0FBVCxFQUFXO0FBQ25JLGNBQUk5QyxXQUFXcEIsRUFBRSxJQUFGLENBQWY7QUFBQSxjQUNJd2YsWUFBWXBlLFNBQVM4SCxNQUFULENBQWdCLElBQWhCLEVBQXNCQSxNQUF0QixDQUE2QixJQUE3QixFQUFtQzhKLFFBQW5DLENBQTRDLElBQTVDLEVBQWtEQSxRQUFsRCxDQUEyRCxHQUEzRCxDQURoQjtBQUFBLGNBRUl5TSxZQUZKO0FBQUEsY0FHSUMsWUFISjs7QUFLQUYsb0JBQVV2ZCxJQUFWLENBQWUsVUFBU3dCLENBQVQsRUFBWTtBQUN6QixnQkFBSXpELEVBQUUsSUFBRixFQUFRK00sRUFBUixDQUFXM0wsUUFBWCxDQUFKLEVBQTBCO0FBQ3hCcWUsNkJBQWVELFVBQVVuUyxFQUFWLENBQWFwSyxLQUFLd0UsR0FBTCxDQUFTLENBQVQsRUFBWWhFLElBQUUsQ0FBZCxDQUFiLENBQWY7QUFDQWljLDZCQUFlRixVQUFVblMsRUFBVixDQUFhcEssS0FBSzBjLEdBQUwsQ0FBU2xjLElBQUUsQ0FBWCxFQUFjK2IsVUFBVXpjLE1BQVYsR0FBaUIsQ0FBL0IsQ0FBYixDQUFmO0FBQ0E7QUFDRDtBQUNGLFdBTkQ7O0FBUUE3QyxxQkFBV21MLFFBQVgsQ0FBb0JhLFNBQXBCLENBQThCaEksQ0FBOUIsRUFBaUMsV0FBakMsRUFBOEM7QUFDNUNnYSxrQkFBTSxZQUFXO0FBQ2Ysa0JBQUk5YyxTQUFTMkwsRUFBVCxDQUFZM0ssTUFBTWtlLGVBQWxCLENBQUosRUFBd0M7QUFDdENsZSxzQkFBTXlmLEtBQU4sQ0FBWXpnQixTQUFTOEgsTUFBVCxDQUFnQixJQUFoQixDQUFaO0FBQ0E5SCx5QkFBUzhILE1BQVQsQ0FBZ0IsSUFBaEIsRUFBc0JpSixHQUF0QixDQUEwQmpTLFdBQVd3RSxhQUFYLENBQXlCdEQsUUFBekIsQ0FBMUIsRUFBOEQsWUFBVTtBQUN0RUEsMkJBQVM4SCxNQUFULENBQWdCLElBQWhCLEVBQXNCdkYsSUFBdEIsQ0FBMkIsU0FBM0IsRUFBc0NtSixNQUF0QyxDQUE2QzFLLE1BQU1vZSxVQUFuRCxFQUErRHRLLEtBQS9ELEdBQXVFeEksS0FBdkU7QUFDRCxpQkFGRDtBQUdBLHVCQUFPLElBQVA7QUFDRDtBQUNGLGFBVDJDO0FBVTVDMlEsc0JBQVUsWUFBVztBQUNuQmpjLG9CQUFNeWdCLEtBQU4sQ0FBWXpoQixTQUFTOEgsTUFBVCxDQUFnQixJQUFoQixFQUFzQkEsTUFBdEIsQ0FBNkIsSUFBN0IsQ0FBWjtBQUNBOUgsdUJBQVM4SCxNQUFULENBQWdCLElBQWhCLEVBQXNCQSxNQUF0QixDQUE2QixJQUE3QixFQUFtQ2lKLEdBQW5DLENBQXVDalMsV0FBV3dFLGFBQVgsQ0FBeUJ0RCxRQUF6QixDQUF2QyxFQUEyRSxZQUFVO0FBQ25GNkQsMkJBQVcsWUFBVztBQUNwQjdELDJCQUFTOEgsTUFBVCxDQUFnQixJQUFoQixFQUFzQkEsTUFBdEIsQ0FBNkIsSUFBN0IsRUFBbUNBLE1BQW5DLENBQTBDLElBQTFDLEVBQWdEOEosUUFBaEQsQ0FBeUQsR0FBekQsRUFBOERrRCxLQUE5RCxHQUFzRXhJLEtBQXRFO0FBQ0QsaUJBRkQsRUFFRyxDQUZIO0FBR0QsZUFKRDtBQUtBLHFCQUFPLElBQVA7QUFDRCxhQWxCMkM7QUFtQjVDOFEsZ0JBQUksWUFBVztBQUNiaUIsMkJBQWEvUixLQUFiO0FBQ0EscUJBQU8sSUFBUDtBQUNELGFBdEIyQztBQXVCNUNxUSxrQkFBTSxZQUFXO0FBQ2YyQiwyQkFBYWhTLEtBQWI7QUFDQSxxQkFBTyxJQUFQO0FBQ0QsYUExQjJDO0FBMkI1Q29TLG1CQUFPLFlBQVc7QUFDaEIxZCxvQkFBTW1mLEtBQU47QUFDQTtBQUNELGFBOUIyQztBQStCNUMxQixrQkFBTSxZQUFXO0FBQ2Ysa0JBQUksQ0FBQ3plLFNBQVMyTCxFQUFULENBQVkzSyxNQUFNb2UsVUFBbEIsQ0FBTCxFQUFvQztBQUFFO0FBQ3BDcGUsc0JBQU15Z0IsS0FBTixDQUFZemhCLFNBQVM4SCxNQUFULENBQWdCLElBQWhCLEVBQXNCQSxNQUF0QixDQUE2QixJQUE3QixDQUFaO0FBQ0E5SCx5QkFBUzhILE1BQVQsQ0FBZ0IsSUFBaEIsRUFBc0JBLE1BQXRCLENBQTZCLElBQTdCLEVBQW1DaUosR0FBbkMsQ0FBdUNqUyxXQUFXd0UsYUFBWCxDQUF5QnRELFFBQXpCLENBQXZDLEVBQTJFLFlBQVU7QUFDbkY2RCw2QkFBVyxZQUFXO0FBQ3BCN0QsNkJBQVM4SCxNQUFULENBQWdCLElBQWhCLEVBQXNCQSxNQUF0QixDQUE2QixJQUE3QixFQUFtQ0EsTUFBbkMsQ0FBMEMsSUFBMUMsRUFBZ0Q4SixRQUFoRCxDQUF5RCxHQUF6RCxFQUE4RGtELEtBQTlELEdBQXNFeEksS0FBdEU7QUFDRCxtQkFGRCxFQUVHLENBRkg7QUFHRCxpQkFKRDtBQUtBLHVCQUFPLElBQVA7QUFDRCxlQVJELE1BUU8sSUFBSXRNLFNBQVMyTCxFQUFULENBQVkzSyxNQUFNa2UsZUFBbEIsQ0FBSixFQUF3QztBQUM3Q2xlLHNCQUFNeWYsS0FBTixDQUFZemdCLFNBQVM4SCxNQUFULENBQWdCLElBQWhCLENBQVo7QUFDQTlILHlCQUFTOEgsTUFBVCxDQUFnQixJQUFoQixFQUFzQmlKLEdBQXRCLENBQTBCalMsV0FBV3dFLGFBQVgsQ0FBeUJ0RCxRQUF6QixDQUExQixFQUE4RCxZQUFVO0FBQ3RFQSwyQkFBUzhILE1BQVQsQ0FBZ0IsSUFBaEIsRUFBc0J2RixJQUF0QixDQUEyQixTQUEzQixFQUFzQ21KLE1BQXRDLENBQTZDMUssTUFBTW9lLFVBQW5ELEVBQStEdEssS0FBL0QsR0FBdUV4SSxLQUF2RTtBQUNELGlCQUZEO0FBR0EsdUJBQU8sSUFBUDtBQUNEO0FBQ0YsYUEvQzJDO0FBZ0Q1Q2YscUJBQVMsVUFBU2MsY0FBVCxFQUF5QjtBQUNoQyxrQkFBSUEsY0FBSixFQUFvQjtBQUNsQnZKLGtCQUFFdUosY0FBRjtBQUNEO0FBQ0R2SixnQkFBRStiLHdCQUFGO0FBQ0Q7QUFyRDJDLFdBQTlDO0FBdURELFNBckVELEVBSGdCLENBd0VaO0FBQ0w7O0FBRUQ7Ozs7OztBQXBRVztBQUFBO0FBQUEsaUNBeVFBO0FBQ1QsWUFBSXZjLFFBQVEsS0FBS3RDLFFBQUwsQ0FBY3VDLElBQWQsQ0FBbUIsaUNBQW5CLEVBQXNEcU8sUUFBdEQsQ0FBK0QsWUFBL0QsQ0FBWjtBQUNBLFlBQUcsS0FBS21CLE9BQUwsQ0FBYXFPLFVBQWhCLEVBQTRCLEtBQUtDLFFBQUwsQ0FBY2pULEdBQWQsQ0FBa0IsRUFBQzVFLFFBQU9sRyxNQUFNd0YsTUFBTixHQUFldVAsT0FBZixDQUF1QixJQUF2QixFQUE2QnBYLElBQTdCLENBQWtDLFlBQWxDLENBQVIsRUFBbEI7QUFDNUJxQyxjQUFNeU8sR0FBTixDQUFValMsV0FBV3dFLGFBQVgsQ0FBeUJoQixLQUF6QixDQUFWLEVBQTJDLFVBQVNRLENBQVQsRUFBVztBQUNwRFIsZ0JBQU11QyxXQUFOLENBQWtCLHNCQUFsQjtBQUNELFNBRkQ7QUFHSTs7OztBQUlKLGFBQUs3RSxRQUFMLENBQWNFLE9BQWQsQ0FBc0IscUJBQXRCO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUF0Ulc7QUFBQTtBQUFBLDRCQTRSTG9DLEtBNVJLLEVBNFJFO0FBQ1gsWUFBSXRCLFFBQVEsSUFBWjtBQUNBc0IsY0FBTWtLLEdBQU4sQ0FBVSxvQkFBVjtBQUNBbEssY0FBTXNQLFFBQU4sQ0FBZSxvQkFBZixFQUNHekYsRUFESCxDQUNNLG9CQUROLEVBQzRCLFVBQVNySixDQUFULEVBQVc7QUFDbkNBLFlBQUUrYix3QkFBRjtBQUNBO0FBQ0E3ZCxnQkFBTXlnQixLQUFOLENBQVluZixLQUFaOztBQUVBO0FBQ0EsY0FBSW9mLGdCQUFnQnBmLE1BQU13RixNQUFOLENBQWEsSUFBYixFQUFtQkEsTUFBbkIsQ0FBMEIsSUFBMUIsRUFBZ0NBLE1BQWhDLENBQXVDLElBQXZDLENBQXBCO0FBQ0EsY0FBSTRaLGNBQWMvZixNQUFsQixFQUEwQjtBQUN4Qlgsa0JBQU15ZixLQUFOLENBQVlpQixhQUFaO0FBQ0Q7QUFDRixTQVhIO0FBWUQ7O0FBRUQ7Ozs7OztBQTdTVztBQUFBO0FBQUEsd0NBa1RPO0FBQ2hCLFlBQUkxZ0IsUUFBUSxJQUFaO0FBQ0EsYUFBS29lLFVBQUwsQ0FBZ0J4SSxHQUFoQixDQUFvQiw4QkFBcEIsRUFDS3BLLEdBREwsQ0FDUyxvQkFEVCxFQUVLTCxFQUZMLENBRVEsb0JBRlIsRUFFOEIsVUFBU3JKLENBQVQsRUFBVztBQUNuQztBQUNBZSxxQkFBVyxZQUFVO0FBQ25CN0Msa0JBQU02ZixRQUFOO0FBQ0QsV0FGRCxFQUVHLENBRkg7QUFHSCxTQVBIO0FBUUQ7O0FBRUQ7Ozs7Ozs7QUE5VFc7QUFBQTtBQUFBLDRCQW9VTHZlLEtBcFVLLEVBb1VFO0FBQ1gsWUFBRyxLQUFLeVAsT0FBTCxDQUFhcU8sVUFBaEIsRUFBNEIsS0FBS0MsUUFBTCxDQUFjalQsR0FBZCxDQUFrQixFQUFDNUUsUUFBT2xHLE1BQU1zUCxRQUFOLENBQWUsZ0JBQWYsRUFBaUMzUixJQUFqQyxDQUFzQyxZQUF0QyxDQUFSLEVBQWxCO0FBQzVCcUMsY0FBTW5ELElBQU4sQ0FBVyxlQUFYLEVBQTRCLElBQTVCO0FBQ0FtRCxjQUFNc1AsUUFBTixDQUFlLGdCQUFmLEVBQWlDaEIsUUFBakMsQ0FBMEMsV0FBMUMsRUFBdUR6UixJQUF2RCxDQUE0RCxhQUE1RCxFQUEyRSxLQUEzRTtBQUNBOzs7O0FBSUEsYUFBS2EsUUFBTCxDQUFjRSxPQUFkLENBQXNCLG1CQUF0QixFQUEyQyxDQUFDb0MsS0FBRCxDQUEzQztBQUNEO0FBN1VVO0FBQUE7OztBQStVWDs7Ozs7O0FBL1VXLDRCQXFWTEEsS0FyVkssRUFxVkU7QUFDWCxZQUFHLEtBQUt5UCxPQUFMLENBQWFxTyxVQUFoQixFQUE0QixLQUFLQyxRQUFMLENBQWNqVCxHQUFkLENBQWtCLEVBQUM1RSxRQUFPbEcsTUFBTXdGLE1BQU4sR0FBZXVQLE9BQWYsQ0FBdUIsSUFBdkIsRUFBNkJwWCxJQUE3QixDQUFrQyxZQUFsQyxDQUFSLEVBQWxCO0FBQzVCLFlBQUllLFFBQVEsSUFBWjtBQUNBc0IsY0FBTXdGLE1BQU4sQ0FBYSxJQUFiLEVBQW1CM0ksSUFBbkIsQ0FBd0IsZUFBeEIsRUFBeUMsS0FBekM7QUFDQW1ELGNBQU1uRCxJQUFOLENBQVcsYUFBWCxFQUEwQixJQUExQixFQUFnQ3lSLFFBQWhDLENBQXlDLFlBQXpDO0FBQ0F0TyxjQUFNc08sUUFBTixDQUFlLFlBQWYsRUFDTUcsR0FETixDQUNValMsV0FBV3dFLGFBQVgsQ0FBeUJoQixLQUF6QixDQURWLEVBQzJDLFlBQVU7QUFDOUNBLGdCQUFNdUMsV0FBTixDQUFrQixzQkFBbEI7QUFDQXZDLGdCQUFNcWYsSUFBTjtBQUNELFNBSk47QUFLQTs7OztBQUlBcmYsY0FBTXBDLE9BQU4sQ0FBYyxtQkFBZCxFQUFtQyxDQUFDb0MsS0FBRCxDQUFuQztBQUNEOztBQUVEOzs7Ozs7O0FBdFdXO0FBQUE7QUFBQSxvQ0E0V0c7QUFDWixZQUFLc2YsWUFBWSxDQUFqQjtBQUFBLFlBQW9CQyxTQUFTLEVBQTdCO0FBQUEsWUFBaUM3Z0IsUUFBUSxJQUF6QztBQUNBLGFBQUttZSxTQUFMLENBQWVKLEdBQWYsQ0FBbUIsS0FBSy9lLFFBQXhCLEVBQWtDYSxJQUFsQyxDQUF1QyxZQUFVO0FBQy9DLGNBQUlpaEIsYUFBYWxqQixFQUFFLElBQUYsRUFBUWdULFFBQVIsQ0FBaUIsSUFBakIsRUFBdUJqUSxNQUF4QztBQUNBLGNBQUk2RyxTQUFTMUosV0FBVzJJLEdBQVgsQ0FBZUUsYUFBZixDQUE2QixJQUE3QixFQUFtQ2EsTUFBaEQ7QUFDQW9aLHNCQUFZcFosU0FBU29aLFNBQVQsR0FBcUJwWixNQUFyQixHQUE4Qm9aLFNBQTFDO0FBQ0EsY0FBRzVnQixNQUFNK1EsT0FBTixDQUFjcU8sVUFBakIsRUFBNkI7QUFDM0J4aEIsY0FBRSxJQUFGLEVBQVFxQixJQUFSLENBQWEsWUFBYixFQUEwQnVJLE1BQTFCO0FBQ0EsZ0JBQUksQ0FBQzVKLEVBQUUsSUFBRixFQUFRdWUsUUFBUixDQUFpQixzQkFBakIsQ0FBTCxFQUErQzBFLE9BQU8sUUFBUCxJQUFtQnJaLE1BQW5CO0FBQ2hEO0FBQ0YsU0FSRDs7QUFVQSxZQUFHLENBQUMsS0FBS3VKLE9BQUwsQ0FBYXFPLFVBQWpCLEVBQTZCeUIsT0FBTyxZQUFQLElBQTBCRCxTQUExQjs7QUFFN0JDLGVBQU8sV0FBUCxJQUF5QixLQUFLN2hCLFFBQUwsQ0FBYyxDQUFkLEVBQWlCOEkscUJBQWpCLEdBQXlDTCxLQUFsRTs7QUFFQSxlQUFPb1osTUFBUDtBQUNEOztBQUVEOzs7OztBQS9YVztBQUFBO0FBQUEsZ0NBbVlEO0FBQ1IsWUFBRyxLQUFLOVAsT0FBTCxDQUFhZ1AsU0FBaEIsRUFBMkIsS0FBSy9nQixRQUFMLENBQWN3TSxHQUFkLENBQWtCLGVBQWxCLEVBQWtDLEtBQUt3VSxZQUF2QztBQUMzQixhQUFLSCxRQUFMO0FBQ0QsYUFBSzdnQixRQUFMLENBQWN3TSxHQUFkLENBQWtCLHFCQUFsQjtBQUNDMU4sbUJBQVdxUyxJQUFYLENBQWdCVSxJQUFoQixDQUFxQixLQUFLN1IsUUFBMUIsRUFBb0MsV0FBcEM7QUFDQSxhQUFLQSxRQUFMLENBQWMraEIsTUFBZCxHQUNjeGYsSUFEZCxDQUNtQiw2Q0FEbkIsRUFDa0V5ZixNQURsRSxHQUVjdGUsR0FGZCxHQUVvQm5CLElBRnBCLENBRXlCLGdEQUZ6QixFQUUyRXNDLFdBRjNFLENBRXVGLDJDQUZ2RixFQUdjbkIsR0FIZCxHQUdvQm5CLElBSHBCLENBR3lCLGdCQUh6QixFQUcyQ2hDLFVBSDNDLENBR3NELDJCQUh0RDtBQUlBLGFBQUsyZSxlQUFMLENBQXFCcmUsSUFBckIsQ0FBMEIsWUFBVztBQUNuQ2pDLFlBQUUsSUFBRixFQUFRNE4sR0FBUixDQUFZLGVBQVo7QUFDRCxTQUZEOztBQUlBLGFBQUsyUyxTQUFMLENBQWV0YSxXQUFmLENBQTJCLGtDQUEzQjs7QUFFQSxhQUFLN0UsUUFBTCxDQUFjdUMsSUFBZCxDQUFtQixHQUFuQixFQUF3QjFCLElBQXhCLENBQTZCLFlBQVU7QUFDckMsY0FBSTJlLFFBQVE1Z0IsRUFBRSxJQUFGLENBQVo7QUFDQTRnQixnQkFBTWpmLFVBQU4sQ0FBaUIsVUFBakI7QUFDQSxjQUFHaWYsTUFBTXZmLElBQU4sQ0FBVyxXQUFYLENBQUgsRUFBMkI7QUFDekJ1ZixrQkFBTXJnQixJQUFOLENBQVcsTUFBWCxFQUFtQnFnQixNQUFNdmYsSUFBTixDQUFXLFdBQVgsQ0FBbkIsRUFBNENPLFVBQTVDLENBQXVELFdBQXZEO0FBQ0QsV0FGRCxNQUVLO0FBQUU7QUFBUztBQUNqQixTQU5EO0FBT0ExQixtQkFBV3NCLGdCQUFYLENBQTRCLElBQTVCO0FBQ0Q7QUExWlU7O0FBQUE7QUFBQTs7QUE2WmI2ZSxZQUFVbEgsUUFBVixHQUFxQjtBQUNuQjs7Ozs7QUFLQWtJLGdCQUFZLDZEQU5PO0FBT25COzs7OztBQUtBRix3QkFBb0IsS0FaRDtBQWFuQjs7Ozs7QUFLQU8sYUFBUyxhQWxCVTtBQW1CbkI7Ozs7O0FBS0FiLGdCQUFZLEtBeEJPO0FBeUJuQjs7Ozs7QUFLQWlCLGtCQUFjLEtBOUJLO0FBK0JuQjs7Ozs7QUFLQU4sZ0JBQVksS0FwQ087QUFxQ25COzs7OztBQUtBRyxtQkFBZSxLQTFDSTtBQTJDbkI7Ozs7O0FBS0FRLGVBQVcsS0FoRFE7QUFpRG5COzs7OztBQUtBSSxzQkFBa0IsRUF0REM7QUF1RG5COzs7OztBQUtBRyxxQkFBaUIsQ0E1REU7QUE2RG5COzs7OztBQUtBQyx1QkFBbUIsR0FsRUE7QUFtRW5COzs7OztBQUtBQyxxQkFBaUI7QUFDakI7QUF6RW1CLEdBQXJCOztBQTRFQTtBQUNBMWlCLGFBQVdNLE1BQVgsQ0FBa0I2ZixTQUFsQixFQUE2QixXQUE3QjtBQUVDLENBNWVBLENBNGVDelgsTUE1ZUQsQ0FBRDtDQ0ZBOzs7Ozs7QUFFQSxDQUFDLFVBQVM1SSxDQUFULEVBQVk7O0FBRWI7Ozs7Ozs7O0FBRmEsTUFVUHFqQixRQVZPO0FBV1g7Ozs7Ozs7QUFPQSxzQkFBWXBhLE9BQVosRUFBcUJrSyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLL1IsUUFBTCxHQUFnQjZILE9BQWhCO0FBQ0EsV0FBS2tLLE9BQUwsR0FBZW5ULEVBQUV5TSxNQUFGLENBQVMsRUFBVCxFQUFhNFcsU0FBU2xLLFFBQXRCLEVBQWdDLEtBQUsvWCxRQUFMLENBQWNDLElBQWQsRUFBaEMsRUFBc0Q4UixPQUF0RCxDQUFmO0FBQ0EsV0FBS2pSLEtBQUw7O0FBRUFoQyxpQkFBV1ksY0FBWCxDQUEwQixJQUExQixFQUFnQyxVQUFoQztBQUNBWixpQkFBV21MLFFBQVgsQ0FBb0IyQixRQUFwQixDQUE2QixVQUE3QixFQUF5QztBQUN2QyxpQkFBUyxNQUQ4QjtBQUV2QyxpQkFBUyxNQUY4QjtBQUd2QyxrQkFBVTtBQUg2QixPQUF6QztBQUtEOztBQUVEOzs7Ozs7O0FBL0JXO0FBQUE7QUFBQSw4QkFvQ0g7QUFDTixZQUFJc1csTUFBTSxLQUFLbGlCLFFBQUwsQ0FBY2IsSUFBZCxDQUFtQixJQUFuQixDQUFWOztBQUVBLGFBQUtnakIsT0FBTCxHQUFldmpCLHFCQUFtQnNqQixHQUFuQixTQUE0QnZnQixNQUE1QixHQUFxQy9DLHFCQUFtQnNqQixHQUFuQixRQUFyQyxHQUFtRXRqQixtQkFBaUJzakIsR0FBakIsUUFBbEY7QUFDQSxhQUFLQyxPQUFMLENBQWFoakIsSUFBYixDQUFrQjtBQUNoQiwyQkFBaUIraUIsR0FERDtBQUVoQiwyQkFBaUIsS0FGRDtBQUdoQiwyQkFBaUJBLEdBSEQ7QUFJaEIsMkJBQWlCLElBSkQ7QUFLaEIsMkJBQWlCOztBQUxELFNBQWxCOztBQVNBLFlBQUcsS0FBS25RLE9BQUwsQ0FBYXFRLFdBQWhCLEVBQTRCO0FBQzFCLGVBQUtDLE9BQUwsR0FBZSxLQUFLcmlCLFFBQUwsQ0FBY3dlLE9BQWQsQ0FBc0IsTUFBTSxLQUFLek0sT0FBTCxDQUFhcVEsV0FBekMsQ0FBZjtBQUNELFNBRkQsTUFFSztBQUNILGVBQUtDLE9BQUwsR0FBZSxJQUFmO0FBQ0Q7QUFDRCxhQUFLdFEsT0FBTCxDQUFhdVEsYUFBYixHQUE2QixLQUFLQyxnQkFBTCxFQUE3QjtBQUNBLGFBQUtDLE9BQUwsR0FBZSxDQUFmO0FBQ0EsYUFBS0MsYUFBTCxHQUFxQixFQUFyQjtBQUNBLGFBQUt6aUIsUUFBTCxDQUFjYixJQUFkLENBQW1CO0FBQ2pCLHlCQUFlLE1BREU7QUFFakIsMkJBQWlCK2lCLEdBRkE7QUFHakIseUJBQWVBLEdBSEU7QUFJakIsNkJBQW1CLEtBQUtDLE9BQUwsQ0FBYSxDQUFiLEVBQWdCMVQsRUFBaEIsSUFBc0IzUCxXQUFXaUIsV0FBWCxDQUF1QixDQUF2QixFQUEwQixXQUExQjtBQUp4QixTQUFuQjtBQU1BLGFBQUtrWSxPQUFMO0FBQ0Q7O0FBRUQ7Ozs7OztBQWxFVztBQUFBO0FBQUEseUNBdUVRO0FBQ2pCLFlBQUl5SyxtQkFBbUIsS0FBSzFpQixRQUFMLENBQWMsQ0FBZCxFQUFpQlYsU0FBakIsQ0FBMkJxakIsS0FBM0IsQ0FBaUMsMEJBQWpDLENBQXZCO0FBQ0lELDJCQUFtQkEsbUJBQW1CQSxpQkFBaUIsQ0FBakIsQ0FBbkIsR0FBeUMsRUFBNUQ7QUFDSixZQUFJRSxxQkFBcUIsY0FBY3piLElBQWQsQ0FBbUIsS0FBS2diLE9BQUwsQ0FBYSxDQUFiLEVBQWdCN2lCLFNBQW5DLENBQXpCO0FBQ0lzakIsNkJBQXFCQSxxQkFBcUJBLG1CQUFtQixDQUFuQixDQUFyQixHQUE2QyxFQUFsRTtBQUNKLFlBQUluWixXQUFXbVoscUJBQXFCQSxxQkFBcUIsR0FBckIsR0FBMkJGLGdCQUFoRCxHQUFtRUEsZ0JBQWxGOztBQUVBLGVBQU9qWixRQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUFqRlc7QUFBQTtBQUFBLGtDQXVGQ0EsUUF2RkQsRUF1Rlc7QUFDcEIsYUFBS2daLGFBQUwsQ0FBbUJ0aUIsSUFBbkIsQ0FBd0JzSixXQUFXQSxRQUFYLEdBQXNCLFFBQTlDO0FBQ0E7QUFDQSxZQUFHLENBQUNBLFFBQUQsSUFBYyxLQUFLZ1osYUFBTCxDQUFtQm5pQixPQUFuQixDQUEyQixLQUEzQixJQUFvQyxDQUFyRCxFQUF3RDtBQUN0RCxlQUFLTixRQUFMLENBQWM0USxRQUFkLENBQXVCLEtBQXZCO0FBQ0QsU0FGRCxNQUVNLElBQUduSCxhQUFhLEtBQWIsSUFBdUIsS0FBS2daLGFBQUwsQ0FBbUJuaUIsT0FBbkIsQ0FBMkIsUUFBM0IsSUFBdUMsQ0FBakUsRUFBb0U7QUFDeEUsZUFBS04sUUFBTCxDQUFjNkUsV0FBZCxDQUEwQjRFLFFBQTFCO0FBQ0QsU0FGSyxNQUVBLElBQUdBLGFBQWEsTUFBYixJQUF3QixLQUFLZ1osYUFBTCxDQUFtQm5pQixPQUFuQixDQUEyQixPQUEzQixJQUFzQyxDQUFqRSxFQUFvRTtBQUN4RSxlQUFLTixRQUFMLENBQWM2RSxXQUFkLENBQTBCNEUsUUFBMUIsRUFDS21ILFFBREwsQ0FDYyxPQURkO0FBRUQsU0FISyxNQUdBLElBQUduSCxhQUFhLE9BQWIsSUFBeUIsS0FBS2daLGFBQUwsQ0FBbUJuaUIsT0FBbkIsQ0FBMkIsTUFBM0IsSUFBcUMsQ0FBakUsRUFBb0U7QUFDeEUsZUFBS04sUUFBTCxDQUFjNkUsV0FBZCxDQUEwQjRFLFFBQTFCLEVBQ0ttSCxRQURMLENBQ2MsTUFEZDtBQUVEOztBQUVEO0FBTE0sYUFNRCxJQUFHLENBQUNuSCxRQUFELElBQWMsS0FBS2daLGFBQUwsQ0FBbUJuaUIsT0FBbkIsQ0FBMkIsS0FBM0IsSUFBb0MsQ0FBQyxDQUFuRCxJQUEwRCxLQUFLbWlCLGFBQUwsQ0FBbUJuaUIsT0FBbkIsQ0FBMkIsTUFBM0IsSUFBcUMsQ0FBbEcsRUFBcUc7QUFDeEcsaUJBQUtOLFFBQUwsQ0FBYzRRLFFBQWQsQ0FBdUIsTUFBdkI7QUFDRCxXQUZJLE1BRUMsSUFBR25ILGFBQWEsS0FBYixJQUF1QixLQUFLZ1osYUFBTCxDQUFtQm5pQixPQUFuQixDQUEyQixRQUEzQixJQUF1QyxDQUFDLENBQS9ELElBQXNFLEtBQUttaUIsYUFBTCxDQUFtQm5pQixPQUFuQixDQUEyQixNQUEzQixJQUFxQyxDQUE5RyxFQUFpSDtBQUNySCxpQkFBS04sUUFBTCxDQUFjNkUsV0FBZCxDQUEwQjRFLFFBQTFCLEVBQ0ttSCxRQURMLENBQ2MsTUFEZDtBQUVELFdBSEssTUFHQSxJQUFHbkgsYUFBYSxNQUFiLElBQXdCLEtBQUtnWixhQUFMLENBQW1CbmlCLE9BQW5CLENBQTJCLE9BQTNCLElBQXNDLENBQUMsQ0FBL0QsSUFBc0UsS0FBS21pQixhQUFMLENBQW1CbmlCLE9BQW5CLENBQTJCLFFBQTNCLElBQXVDLENBQWhILEVBQW1IO0FBQ3ZILGlCQUFLTixRQUFMLENBQWM2RSxXQUFkLENBQTBCNEUsUUFBMUI7QUFDRCxXQUZLLE1BRUEsSUFBR0EsYUFBYSxPQUFiLElBQXlCLEtBQUtnWixhQUFMLENBQW1CbmlCLE9BQW5CLENBQTJCLE1BQTNCLElBQXFDLENBQUMsQ0FBL0QsSUFBc0UsS0FBS21pQixhQUFMLENBQW1CbmlCLE9BQW5CLENBQTJCLFFBQTNCLElBQXVDLENBQWhILEVBQW1IO0FBQ3ZILGlCQUFLTixRQUFMLENBQWM2RSxXQUFkLENBQTBCNEUsUUFBMUI7QUFDRDtBQUNEO0FBSE0sZUFJRjtBQUNGLG1CQUFLekosUUFBTCxDQUFjNkUsV0FBZCxDQUEwQjRFLFFBQTFCO0FBQ0Q7QUFDRCxhQUFLb1osWUFBTCxHQUFvQixJQUFwQjtBQUNBLGFBQUtMLE9BQUw7QUFDRDs7QUFFRDs7Ozs7OztBQXpIVztBQUFBO0FBQUEscUNBK0hJO0FBQ2IsWUFBRyxLQUFLTCxPQUFMLENBQWFoakIsSUFBYixDQUFrQixlQUFsQixNQUF1QyxPQUExQyxFQUFrRDtBQUFFLGlCQUFPLEtBQVA7QUFBZTtBQUNuRSxZQUFJc0ssV0FBVyxLQUFLOFksZ0JBQUwsRUFBZjtBQUFBLFlBQ0kxWSxXQUFXL0ssV0FBVzJJLEdBQVgsQ0FBZUUsYUFBZixDQUE2QixLQUFLM0gsUUFBbEMsQ0FEZjtBQUFBLFlBRUk4SixjQUFjaEwsV0FBVzJJLEdBQVgsQ0FBZUUsYUFBZixDQUE2QixLQUFLd2EsT0FBbEMsQ0FGbEI7QUFBQSxZQUdJbmhCLFFBQVEsSUFIWjtBQUFBLFlBSUk4aEIsWUFBYXJaLGFBQWEsTUFBYixHQUFzQixNQUF0QixHQUFpQ0EsYUFBYSxPQUFkLEdBQXlCLE1BQXpCLEdBQWtDLEtBSm5GO0FBQUEsWUFLSTRGLFFBQVN5VCxjQUFjLEtBQWYsR0FBd0IsUUFBeEIsR0FBbUMsT0FML0M7QUFBQSxZQU1JdmEsU0FBVThHLFVBQVUsUUFBWCxHQUF1QixLQUFLMEMsT0FBTCxDQUFhckksT0FBcEMsR0FBOEMsS0FBS3FJLE9BQUwsQ0FBYXBJLE9BTnhFOztBQVFBLFlBQUlFLFNBQVNwQixLQUFULElBQWtCb0IsU0FBU25CLFVBQVQsQ0FBb0JELEtBQXZDLElBQWtELENBQUMsS0FBSytaLE9BQU4sSUFBaUIsQ0FBQzFqQixXQUFXMkksR0FBWCxDQUFlQyxnQkFBZixDQUFnQyxLQUFLMUgsUUFBckMsRUFBK0MsS0FBS3FpQixPQUFwRCxDQUF2RSxFQUFxSTtBQUNuSSxjQUFJVSxXQUFXbFosU0FBU25CLFVBQVQsQ0FBb0JELEtBQW5DO0FBQUEsY0FDSXVhLGdCQUFnQixDQURwQjtBQUVBLGNBQUcsS0FBS1gsT0FBUixFQUFnQjtBQUNkLGdCQUFJWSxjQUFjbmtCLFdBQVcySSxHQUFYLENBQWVFLGFBQWYsQ0FBNkIsS0FBSzBhLE9BQWxDLENBQWxCO0FBQUEsZ0JBQ0lXLGdCQUFnQkMsWUFBWTFhLE1BQVosQ0FBbUJILElBRHZDO0FBRUEsZ0JBQUk2YSxZQUFZeGEsS0FBWixHQUFvQnNhLFFBQXhCLEVBQWlDO0FBQy9CQSx5QkFBV0UsWUFBWXhhLEtBQXZCO0FBQ0Q7QUFDRjs7QUFFRCxlQUFLekksUUFBTCxDQUFjdUksTUFBZCxDQUFxQnpKLFdBQVcySSxHQUFYLENBQWVHLFVBQWYsQ0FBMEIsS0FBSzVILFFBQS9CLEVBQXlDLEtBQUttaUIsT0FBOUMsRUFBdUQsZUFBdkQsRUFBd0UsS0FBS3BRLE9BQUwsQ0FBYXJJLE9BQXJGLEVBQThGLEtBQUtxSSxPQUFMLENBQWFwSSxPQUFiLEdBQXVCcVosYUFBckgsRUFBb0ksSUFBcEksQ0FBckIsRUFBZ0s1VixHQUFoSyxDQUFvSztBQUNsSyxxQkFBUzJWLFdBQVksS0FBS2hSLE9BQUwsQ0FBYXBJLE9BQWIsR0FBdUIsQ0FEc0g7QUFFbEssc0JBQVU7QUFGd0osV0FBcEs7QUFJQSxlQUFLa1osWUFBTCxHQUFvQixJQUFwQjtBQUNBLGlCQUFPLEtBQVA7QUFDRDs7QUFFRCxhQUFLN2lCLFFBQUwsQ0FBY3VJLE1BQWQsQ0FBcUJ6SixXQUFXMkksR0FBWCxDQUFlRyxVQUFmLENBQTBCLEtBQUs1SCxRQUEvQixFQUF5QyxLQUFLbWlCLE9BQTlDLEVBQXVEMVksUUFBdkQsRUFBaUUsS0FBS3NJLE9BQUwsQ0FBYXJJLE9BQTlFLEVBQXVGLEtBQUtxSSxPQUFMLENBQWFwSSxPQUFwRyxDQUFyQjs7QUFFQSxlQUFNLENBQUM3SyxXQUFXMkksR0FBWCxDQUFlQyxnQkFBZixDQUFnQyxLQUFLMUgsUUFBckMsRUFBK0MsS0FBS3FpQixPQUFwRCxFQUE2RCxJQUE3RCxDQUFELElBQXVFLEtBQUtHLE9BQWxGLEVBQTBGO0FBQ3hGLGVBQUtVLFdBQUwsQ0FBaUJ6WixRQUFqQjtBQUNBLGVBQUswWixZQUFMO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7O0FBcEtXO0FBQUE7QUFBQSxnQ0F5S0Q7QUFDUixZQUFJbmlCLFFBQVEsSUFBWjtBQUNBLGFBQUtoQixRQUFMLENBQWNtTSxFQUFkLENBQWlCO0FBQ2YsNkJBQW1CLEtBQUtzUyxJQUFMLENBQVUvWCxJQUFWLENBQWUsSUFBZixDQURKO0FBRWYsOEJBQW9CLEtBQUtnWSxLQUFMLENBQVdoWSxJQUFYLENBQWdCLElBQWhCLENBRkw7QUFHZiwrQkFBcUIsS0FBS21XLE1BQUwsQ0FBWW5XLElBQVosQ0FBaUIsSUFBakIsQ0FITjtBQUlmLGlDQUF1QixLQUFLeWMsWUFBTCxDQUFrQnpjLElBQWxCLENBQXVCLElBQXZCO0FBSlIsU0FBakI7O0FBT0EsWUFBRyxLQUFLcUwsT0FBTCxDQUFhcVIsS0FBaEIsRUFBc0I7QUFDcEIsZUFBS2pCLE9BQUwsQ0FBYTNWLEdBQWIsQ0FBaUIsK0NBQWpCLEVBQ0NMLEVBREQsQ0FDSSx3QkFESixFQUM4QixZQUFVO0FBQ3RDLGdCQUFJa1gsV0FBV3prQixFQUFFLE1BQUYsRUFBVXFCLElBQVYsRUFBZjtBQUNBLGdCQUFHLE9BQU9vakIsU0FBU0MsU0FBaEIsS0FBK0IsV0FBL0IsSUFBOENELFNBQVNDLFNBQVQsS0FBdUIsT0FBeEUsRUFBaUY7QUFDL0VoZCwyQkFBYXRGLE1BQU11aUIsT0FBbkI7QUFDQXZpQixvQkFBTXVpQixPQUFOLEdBQWdCMWYsV0FBVyxZQUFVO0FBQ25DN0Msc0JBQU15ZCxJQUFOO0FBQ0F6ZCxzQkFBTW1oQixPQUFOLENBQWNsaUIsSUFBZCxDQUFtQixPQUFuQixFQUE0QixJQUE1QjtBQUNELGVBSGUsRUFHYmUsTUFBTStRLE9BQU4sQ0FBY3lSLFVBSEQsQ0FBaEI7QUFJRDtBQUNGLFdBVkQsRUFVR3JYLEVBVkgsQ0FVTSx3QkFWTixFQVVnQyxZQUFVO0FBQ3hDN0YseUJBQWF0RixNQUFNdWlCLE9BQW5CO0FBQ0F2aUIsa0JBQU11aUIsT0FBTixHQUFnQjFmLFdBQVcsWUFBVTtBQUNuQzdDLG9CQUFNMGQsS0FBTjtBQUNBMWQsb0JBQU1taEIsT0FBTixDQUFjbGlCLElBQWQsQ0FBbUIsT0FBbkIsRUFBNEIsS0FBNUI7QUFDRCxhQUhlLEVBR2JlLE1BQU0rUSxPQUFOLENBQWN5UixVQUhELENBQWhCO0FBSUQsV0FoQkQ7QUFpQkEsY0FBRyxLQUFLelIsT0FBTCxDQUFhMFIsU0FBaEIsRUFBMEI7QUFDeEIsaUJBQUt6akIsUUFBTCxDQUFjd00sR0FBZCxDQUFrQiwrQ0FBbEIsRUFDS0wsRUFETCxDQUNRLHdCQURSLEVBQ2tDLFlBQVU7QUFDdEM3RiwyQkFBYXRGLE1BQU11aUIsT0FBbkI7QUFDRCxhQUhMLEVBR09wWCxFQUhQLENBR1Usd0JBSFYsRUFHb0MsWUFBVTtBQUN4QzdGLDJCQUFhdEYsTUFBTXVpQixPQUFuQjtBQUNBdmlCLG9CQUFNdWlCLE9BQU4sR0FBZ0IxZixXQUFXLFlBQVU7QUFDbkM3QyxzQkFBTTBkLEtBQU47QUFDQTFkLHNCQUFNbWhCLE9BQU4sQ0FBY2xpQixJQUFkLENBQW1CLE9BQW5CLEVBQTRCLEtBQTVCO0FBQ0QsZUFIZSxFQUdiZSxNQUFNK1EsT0FBTixDQUFjeVIsVUFIRCxDQUFoQjtBQUlELGFBVEw7QUFVRDtBQUNGO0FBQ0QsYUFBS3JCLE9BQUwsQ0FBYXBELEdBQWIsQ0FBaUIsS0FBSy9lLFFBQXRCLEVBQWdDbU0sRUFBaEMsQ0FBbUMscUJBQW5DLEVBQTBELFVBQVNySixDQUFULEVBQVk7O0FBRXBFLGNBQUlxVSxVQUFVdlksRUFBRSxJQUFGLENBQWQ7QUFBQSxjQUNFOGtCLDJCQUEyQjVrQixXQUFXbUwsUUFBWCxDQUFvQndCLGFBQXBCLENBQWtDekssTUFBTWhCLFFBQXhDLENBRDdCOztBQUdBbEIscUJBQVdtTCxRQUFYLENBQW9CYSxTQUFwQixDQUE4QmhJLENBQTlCLEVBQWlDLFVBQWpDLEVBQTZDO0FBQzNDMmIsa0JBQU0sWUFBVztBQUNmLGtCQUFJdEgsUUFBUXhMLEVBQVIsQ0FBVzNLLE1BQU1taEIsT0FBakIsQ0FBSixFQUErQjtBQUM3Qm5oQixzQkFBTXlkLElBQU47QUFDQXpkLHNCQUFNaEIsUUFBTixDQUFlYixJQUFmLENBQW9CLFVBQXBCLEVBQWdDLENBQUMsQ0FBakMsRUFBb0NtTixLQUFwQztBQUNBeEosa0JBQUV1SixjQUFGO0FBQ0Q7QUFDRixhQVAwQztBQVEzQ3FTLG1CQUFPLFlBQVc7QUFDaEIxZCxvQkFBTTBkLEtBQU47QUFDQTFkLG9CQUFNbWhCLE9BQU4sQ0FBYzdWLEtBQWQ7QUFDRDtBQVgwQyxXQUE3QztBQWFELFNBbEJEO0FBbUJEOztBQUVEOzs7Ozs7QUF0T1c7QUFBQTtBQUFBLHdDQTJPTztBQUNmLFlBQUlxVSxRQUFRL2hCLEVBQUU0RSxTQUFTMEYsSUFBWCxFQUFpQjBOLEdBQWpCLENBQXFCLEtBQUs1VyxRQUExQixDQUFaO0FBQUEsWUFDSWdCLFFBQVEsSUFEWjtBQUVBMmYsY0FBTW5VLEdBQU4sQ0FBVSxtQkFBVixFQUNNTCxFQUROLENBQ1MsbUJBRFQsRUFDOEIsVUFBU3JKLENBQVQsRUFBVztBQUNsQyxjQUFHOUIsTUFBTW1oQixPQUFOLENBQWN4VyxFQUFkLENBQWlCN0ksRUFBRXNKLE1BQW5CLEtBQThCcEwsTUFBTW1oQixPQUFOLENBQWM1ZixJQUFkLENBQW1CTyxFQUFFc0osTUFBckIsRUFBNkJ6SyxNQUE5RCxFQUFzRTtBQUNwRTtBQUNEO0FBQ0QsY0FBR1gsTUFBTWhCLFFBQU4sQ0FBZXVDLElBQWYsQ0FBb0JPLEVBQUVzSixNQUF0QixFQUE4QnpLLE1BQWpDLEVBQXlDO0FBQ3ZDO0FBQ0Q7QUFDRFgsZ0JBQU0wZCxLQUFOO0FBQ0FpQyxnQkFBTW5VLEdBQU4sQ0FBVSxtQkFBVjtBQUNELFNBVk47QUFXRjs7QUFFRDs7Ozs7OztBQTNQVztBQUFBO0FBQUEsNkJBaVFKO0FBQ0w7QUFDQTs7OztBQUlBLGFBQUt4TSxRQUFMLENBQWNFLE9BQWQsQ0FBc0IscUJBQXRCLEVBQTZDLEtBQUtGLFFBQUwsQ0FBY2IsSUFBZCxDQUFtQixJQUFuQixDQUE3QztBQUNBLGFBQUtnakIsT0FBTCxDQUFhdlIsUUFBYixDQUFzQixPQUF0QixFQUNLelIsSUFETCxDQUNVLEVBQUMsaUJBQWlCLElBQWxCLEVBRFY7QUFFQTtBQUNBLGFBQUtna0IsWUFBTDtBQUNBLGFBQUtuakIsUUFBTCxDQUFjNFEsUUFBZCxDQUF1QixTQUF2QixFQUNLelIsSUFETCxDQUNVLEVBQUMsZUFBZSxLQUFoQixFQURWOztBQUdBLFlBQUcsS0FBSzRTLE9BQUwsQ0FBYTRSLFNBQWhCLEVBQTBCO0FBQ3hCLGNBQUk1WCxhQUFhak4sV0FBV21MLFFBQVgsQ0FBb0J3QixhQUFwQixDQUFrQyxLQUFLekwsUUFBdkMsQ0FBakI7QUFDQSxjQUFHK0wsV0FBV3BLLE1BQWQsRUFBcUI7QUFDbkJvSyx1QkFBV0UsRUFBWCxDQUFjLENBQWQsRUFBaUJLLEtBQWpCO0FBQ0Q7QUFDRjs7QUFFRCxZQUFHLEtBQUt5RixPQUFMLENBQWEyTyxZQUFoQixFQUE2QjtBQUFFLGVBQUtrRCxlQUFMO0FBQXlCOztBQUV4RCxZQUFJLEtBQUs3UixPQUFMLENBQWFqRyxTQUFqQixFQUE0QjtBQUMxQmhOLHFCQUFXbUwsUUFBWCxDQUFvQjZCLFNBQXBCLENBQThCLEtBQUs5TCxRQUFuQztBQUNEOztBQUVEOzs7O0FBSUEsYUFBS0EsUUFBTCxDQUFjRSxPQUFkLENBQXNCLGtCQUF0QixFQUEwQyxDQUFDLEtBQUtGLFFBQU4sQ0FBMUM7QUFDRDs7QUFFRDs7Ozs7O0FBblNXO0FBQUE7QUFBQSw4QkF3U0g7QUFDTixZQUFHLENBQUMsS0FBS0EsUUFBTCxDQUFjbWQsUUFBZCxDQUF1QixTQUF2QixDQUFKLEVBQXNDO0FBQ3BDLGlCQUFPLEtBQVA7QUFDRDtBQUNELGFBQUtuZCxRQUFMLENBQWM2RSxXQUFkLENBQTBCLFNBQTFCLEVBQ0sxRixJQURMLENBQ1UsRUFBQyxlQUFlLElBQWhCLEVBRFY7O0FBR0EsYUFBS2dqQixPQUFMLENBQWF0ZCxXQUFiLENBQXlCLE9BQXpCLEVBQ0sxRixJQURMLENBQ1UsZUFEVixFQUMyQixLQUQzQjs7QUFHQSxZQUFHLEtBQUswakIsWUFBUixFQUFxQjtBQUNuQixjQUFJZ0IsbUJBQW1CLEtBQUt0QixnQkFBTCxFQUF2QjtBQUNBLGNBQUdzQixnQkFBSCxFQUFvQjtBQUNsQixpQkFBSzdqQixRQUFMLENBQWM2RSxXQUFkLENBQTBCZ2YsZ0JBQTFCO0FBQ0Q7QUFDRCxlQUFLN2pCLFFBQUwsQ0FBYzRRLFFBQWQsQ0FBdUIsS0FBS21CLE9BQUwsQ0FBYXVRLGFBQXBDO0FBQ0kscUJBREosQ0FDZ0JsVixHQURoQixDQUNvQixFQUFDNUUsUUFBUSxFQUFULEVBQWFDLE9BQU8sRUFBcEIsRUFEcEI7QUFFQSxlQUFLb2EsWUFBTCxHQUFvQixLQUFwQjtBQUNBLGVBQUtMLE9BQUwsR0FBZSxDQUFmO0FBQ0EsZUFBS0MsYUFBTCxDQUFtQjlnQixNQUFuQixHQUE0QixDQUE1QjtBQUNEO0FBQ0QsYUFBSzNCLFFBQUwsQ0FBY0UsT0FBZCxDQUFzQixrQkFBdEIsRUFBMEMsQ0FBQyxLQUFLRixRQUFOLENBQTFDOztBQUVBLFlBQUksS0FBSytSLE9BQUwsQ0FBYWpHLFNBQWpCLEVBQTRCO0FBQzFCaE4scUJBQVdtTCxRQUFYLENBQW9Cc0MsWUFBcEIsQ0FBaUMsS0FBS3ZNLFFBQXRDO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7QUFwVVc7QUFBQTtBQUFBLCtCQXdVRjtBQUNQLFlBQUcsS0FBS0EsUUFBTCxDQUFjbWQsUUFBZCxDQUF1QixTQUF2QixDQUFILEVBQXFDO0FBQ25DLGNBQUcsS0FBS2dGLE9BQUwsQ0FBYWxpQixJQUFiLENBQWtCLE9BQWxCLENBQUgsRUFBK0I7QUFDL0IsZUFBS3llLEtBQUw7QUFDRCxTQUhELE1BR0s7QUFDSCxlQUFLRCxJQUFMO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7QUFqVlc7QUFBQTtBQUFBLGdDQXFWRDtBQUNSLGFBQUt6ZSxRQUFMLENBQWN3TSxHQUFkLENBQWtCLGFBQWxCLEVBQWlDeUUsSUFBakM7QUFDQSxhQUFLa1IsT0FBTCxDQUFhM1YsR0FBYixDQUFpQixjQUFqQjs7QUFFQTFOLG1CQUFXc0IsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDtBQTFWVTs7QUFBQTtBQUFBOztBQTZWYjZoQixXQUFTbEssUUFBVCxHQUFvQjtBQUNsQjs7Ozs7QUFLQXFLLGlCQUFhLElBTks7QUFPbEI7Ozs7O0FBS0FvQixnQkFBWSxHQVpNO0FBYWxCOzs7OztBQUtBSixXQUFPLEtBbEJXO0FBbUJsQjs7Ozs7QUFLQUssZUFBVyxLQXhCTztBQXlCbEI7Ozs7O0FBS0EvWixhQUFTLENBOUJTO0FBK0JsQjs7Ozs7QUFLQUMsYUFBUyxDQXBDUztBQXFDbEI7Ozs7O0FBS0EyWSxtQkFBZSxFQTFDRztBQTJDbEI7Ozs7O0FBS0F4VyxlQUFXLEtBaERPO0FBaURsQjs7Ozs7QUFLQTZYLGVBQVcsS0F0RE87QUF1RGxCOzs7OztBQUtBakQsa0JBQWM7QUE1REksR0FBcEI7O0FBK0RBO0FBQ0E1aEIsYUFBV00sTUFBWCxDQUFrQjZpQixRQUFsQixFQUE0QixVQUE1QjtBQUVDLENBL1pBLENBK1pDemEsTUEvWkQsQ0FBRDtDQ0ZBOzs7Ozs7QUFFQSxDQUFDLFVBQVM1SSxDQUFULEVBQVk7O0FBRWI7Ozs7Ozs7O0FBRmEsTUFVUGtsQixZQVZPO0FBV1g7Ozs7Ozs7QUFPQSwwQkFBWWpjLE9BQVosRUFBcUJrSyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLL1IsUUFBTCxHQUFnQjZILE9BQWhCO0FBQ0EsV0FBS2tLLE9BQUwsR0FBZW5ULEVBQUV5TSxNQUFGLENBQVMsRUFBVCxFQUFheVksYUFBYS9MLFFBQTFCLEVBQW9DLEtBQUsvWCxRQUFMLENBQWNDLElBQWQsRUFBcEMsRUFBMEQ4UixPQUExRCxDQUFmOztBQUVBalQsaUJBQVdxUyxJQUFYLENBQWdCQyxPQUFoQixDQUF3QixLQUFLcFIsUUFBN0IsRUFBdUMsVUFBdkM7QUFDQSxXQUFLYyxLQUFMOztBQUVBaEMsaUJBQVdZLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsY0FBaEM7QUFDQVosaUJBQVdtTCxRQUFYLENBQW9CMkIsUUFBcEIsQ0FBNkIsY0FBN0IsRUFBNkM7QUFDM0MsaUJBQVMsTUFEa0M7QUFFM0MsaUJBQVMsTUFGa0M7QUFHM0MsdUJBQWUsTUFINEI7QUFJM0Msb0JBQVksSUFKK0I7QUFLM0Msc0JBQWMsTUFMNkI7QUFNM0Msc0JBQWMsVUFONkI7QUFPM0Msa0JBQVU7QUFQaUMsT0FBN0M7QUFTRDs7QUFFRDs7Ozs7OztBQXJDVztBQUFBO0FBQUEsOEJBMENIO0FBQ04sWUFBSW1ZLE9BQU8sS0FBSy9qQixRQUFMLENBQWN1QyxJQUFkLENBQW1CLCtCQUFuQixDQUFYO0FBQ0EsYUFBS3ZDLFFBQUwsQ0FBYzRSLFFBQWQsQ0FBdUIsNkJBQXZCLEVBQXNEQSxRQUF0RCxDQUErRCxzQkFBL0QsRUFBdUZoQixRQUF2RixDQUFnRyxXQUFoRzs7QUFFQSxhQUFLd08sVUFBTCxHQUFrQixLQUFLcGYsUUFBTCxDQUFjdUMsSUFBZCxDQUFtQixtQkFBbkIsQ0FBbEI7QUFDQSxhQUFLK1osS0FBTCxHQUFhLEtBQUt0YyxRQUFMLENBQWM0UixRQUFkLENBQXVCLG1CQUF2QixDQUFiO0FBQ0EsYUFBSzBLLEtBQUwsQ0FBVy9aLElBQVgsQ0FBZ0Isd0JBQWhCLEVBQTBDcU8sUUFBMUMsQ0FBbUQsS0FBS21CLE9BQUwsQ0FBYWlTLGFBQWhFOztBQUVBLFlBQUksS0FBS2hrQixRQUFMLENBQWNtZCxRQUFkLENBQXVCLEtBQUtwTCxPQUFMLENBQWFrUyxVQUFwQyxLQUFtRCxLQUFLbFMsT0FBTCxDQUFhbVMsU0FBYixLQUEyQixPQUE5RSxJQUF5RnBsQixXQUFXSSxHQUFYLEVBQXpGLElBQTZHLEtBQUtjLFFBQUwsQ0FBY3dlLE9BQWQsQ0FBc0IsZ0JBQXRCLEVBQXdDN1MsRUFBeEMsQ0FBMkMsR0FBM0MsQ0FBakgsRUFBa0s7QUFDaEssZUFBS29HLE9BQUwsQ0FBYW1TLFNBQWIsR0FBeUIsT0FBekI7QUFDQUgsZUFBS25ULFFBQUwsQ0FBYyxZQUFkO0FBQ0QsU0FIRCxNQUdPO0FBQ0xtVCxlQUFLblQsUUFBTCxDQUFjLGFBQWQ7QUFDRDtBQUNELGFBQUt1VCxPQUFMLEdBQWUsS0FBZjtBQUNBLGFBQUtsTSxPQUFMO0FBQ0Q7QUExRFU7QUFBQTtBQUFBLG9DQTRERztBQUNaLGVBQU8sS0FBS3FFLEtBQUwsQ0FBV2xQLEdBQVgsQ0FBZSxTQUFmLE1BQThCLE9BQXJDO0FBQ0Q7O0FBRUQ7Ozs7OztBQWhFVztBQUFBO0FBQUEsZ0NBcUVEO0FBQ1IsWUFBSXBNLFFBQVEsSUFBWjtBQUFBLFlBQ0lvakIsV0FBVyxrQkFBa0I5ZSxNQUFsQixJQUE2QixPQUFPQSxPQUFPK2UsWUFBZCxLQUErQixXQUQzRTtBQUFBLFlBRUlDLFdBQVcsNEJBRmY7O0FBSUE7QUFDQSxZQUFJQyxnQkFBZ0IsVUFBU3poQixDQUFULEVBQVk7QUFDOUIsY0FBSVIsUUFBUTFELEVBQUVrRSxFQUFFc0osTUFBSixFQUFZMFMsWUFBWixDQUF5QixJQUF6QixRQUFtQ3dGLFFBQW5DLENBQVo7QUFBQSxjQUNJRSxTQUFTbGlCLE1BQU02YSxRQUFOLENBQWVtSCxRQUFmLENBRGI7QUFBQSxjQUVJRyxhQUFhbmlCLE1BQU1uRCxJQUFOLENBQVcsZUFBWCxNQUFnQyxNQUZqRDtBQUFBLGNBR0l3UyxPQUFPclAsTUFBTXNQLFFBQU4sQ0FBZSxzQkFBZixDQUhYOztBQUtBLGNBQUk0UyxNQUFKLEVBQVk7QUFDVixnQkFBSUMsVUFBSixFQUFnQjtBQUNkLGtCQUFJLENBQUN6akIsTUFBTStRLE9BQU4sQ0FBYzJPLFlBQWYsSUFBZ0MsQ0FBQzFmLE1BQU0rUSxPQUFOLENBQWMyUyxTQUFmLElBQTRCLENBQUNOLFFBQTdELElBQTJFcGpCLE1BQU0rUSxPQUFOLENBQWM0UyxXQUFkLElBQTZCUCxRQUE1RyxFQUF1SDtBQUFFO0FBQVMsZUFBbEksTUFDSztBQUNIdGhCLGtCQUFFK2Isd0JBQUY7QUFDQS9iLGtCQUFFdUosY0FBRjtBQUNBckwsc0JBQU15Z0IsS0FBTixDQUFZbmYsS0FBWjtBQUNEO0FBQ0YsYUFQRCxNQU9PO0FBQ0xRLGdCQUFFdUosY0FBRjtBQUNBdkosZ0JBQUUrYix3QkFBRjtBQUNBN2Qsb0JBQU15ZixLQUFOLENBQVk5TyxJQUFaO0FBQ0FyUCxvQkFBTXljLEdBQU4sQ0FBVXpjLE1BQU13YyxZQUFOLENBQW1COWQsTUFBTWhCLFFBQXpCLFFBQXVDc2tCLFFBQXZDLENBQVYsRUFBOERubEIsSUFBOUQsQ0FBbUUsZUFBbkUsRUFBb0YsSUFBcEY7QUFDRDtBQUNGO0FBQ0YsU0FyQkQ7O0FBdUJBLFlBQUksS0FBSzRTLE9BQUwsQ0FBYTJTLFNBQWIsSUFBMEJOLFFBQTlCLEVBQXdDO0FBQ3RDLGVBQUtoRixVQUFMLENBQWdCalQsRUFBaEIsQ0FBbUIsa0RBQW5CLEVBQXVFb1ksYUFBdkU7QUFDRDs7QUFFRDtBQUNBLFlBQUd2akIsTUFBTStRLE9BQU4sQ0FBYzZTLGtCQUFqQixFQUFvQztBQUNsQyxlQUFLeEYsVUFBTCxDQUFnQmpULEVBQWhCLENBQW1CLGdEQUFuQixFQUFxRSxVQUFTckosQ0FBVCxFQUFZO0FBQy9FLGdCQUFJUixRQUFRMUQsRUFBRSxJQUFGLENBQVo7QUFBQSxnQkFDSTRsQixTQUFTbGlCLE1BQU02YSxRQUFOLENBQWVtSCxRQUFmLENBRGI7QUFFQSxnQkFBRyxDQUFDRSxNQUFKLEVBQVc7QUFDVHhqQixvQkFBTXlnQixLQUFOO0FBQ0Q7QUFDRixXQU5EO0FBT0Q7O0FBRUQsWUFBSSxDQUFDLEtBQUsxUCxPQUFMLENBQWE4UyxZQUFsQixFQUFnQztBQUM5QixlQUFLekYsVUFBTCxDQUFnQmpULEVBQWhCLENBQW1CLDRCQUFuQixFQUFpRCxVQUFTckosQ0FBVCxFQUFZO0FBQzNELGdCQUFJUixRQUFRMUQsRUFBRSxJQUFGLENBQVo7QUFBQSxnQkFDSTRsQixTQUFTbGlCLE1BQU02YSxRQUFOLENBQWVtSCxRQUFmLENBRGI7O0FBR0EsZ0JBQUlFLE1BQUosRUFBWTtBQUNWbGUsMkJBQWFoRSxNQUFNckMsSUFBTixDQUFXLFFBQVgsQ0FBYjtBQUNBcUMsb0JBQU1yQyxJQUFOLENBQVcsUUFBWCxFQUFxQjRELFdBQVcsWUFBVztBQUN6QzdDLHNCQUFNeWYsS0FBTixDQUFZbmUsTUFBTXNQLFFBQU4sQ0FBZSxzQkFBZixDQUFaO0FBQ0QsZUFGb0IsRUFFbEI1USxNQUFNK1EsT0FBTixDQUFjeVIsVUFGSSxDQUFyQjtBQUdEO0FBQ0YsV0FWRCxFQVVHclgsRUFWSCxDQVVNLDRCQVZOLEVBVW9DLFVBQVNySixDQUFULEVBQVk7QUFDOUMsZ0JBQUlSLFFBQVExRCxFQUFFLElBQUYsQ0FBWjtBQUFBLGdCQUNJNGxCLFNBQVNsaUIsTUFBTTZhLFFBQU4sQ0FBZW1ILFFBQWYsQ0FEYjtBQUVBLGdCQUFJRSxVQUFVeGpCLE1BQU0rUSxPQUFOLENBQWMrUyxTQUE1QixFQUF1QztBQUNyQyxrQkFBSXhpQixNQUFNbkQsSUFBTixDQUFXLGVBQVgsTUFBZ0MsTUFBaEMsSUFBMEM2QixNQUFNK1EsT0FBTixDQUFjMlMsU0FBNUQsRUFBdUU7QUFBRSx1QkFBTyxLQUFQO0FBQWU7O0FBRXhGcGUsMkJBQWFoRSxNQUFNckMsSUFBTixDQUFXLFFBQVgsQ0FBYjtBQUNBcUMsb0JBQU1yQyxJQUFOLENBQVcsUUFBWCxFQUFxQjRELFdBQVcsWUFBVztBQUN6QzdDLHNCQUFNeWdCLEtBQU4sQ0FBWW5mLEtBQVo7QUFDRCxlQUZvQixFQUVsQnRCLE1BQU0rUSxPQUFOLENBQWNnVCxXQUZJLENBQXJCO0FBR0Q7QUFDRixXQXJCRDtBQXNCRDtBQUNELGFBQUszRixVQUFMLENBQWdCalQsRUFBaEIsQ0FBbUIseUJBQW5CLEVBQThDLFVBQVNySixDQUFULEVBQVk7QUFDeEQsY0FBSTlDLFdBQVdwQixFQUFFa0UsRUFBRXNKLE1BQUosRUFBWTBTLFlBQVosQ0FBeUIsSUFBekIsRUFBK0IsbUJBQS9CLENBQWY7QUFBQSxjQUNJa0csUUFBUWhrQixNQUFNc2IsS0FBTixDQUFZMkksS0FBWixDQUFrQmpsQixRQUFsQixJQUE4QixDQUFDLENBRDNDO0FBQUEsY0FFSW9lLFlBQVk0RyxRQUFRaGtCLE1BQU1zYixLQUFkLEdBQXNCdGMsU0FBUzJZLFFBQVQsQ0FBa0IsSUFBbEIsRUFBd0JvRyxHQUF4QixDQUE0Qi9lLFFBQTVCLENBRnRDO0FBQUEsY0FHSXFlLFlBSEo7QUFBQSxjQUlJQyxZQUpKOztBQU1BRixvQkFBVXZkLElBQVYsQ0FBZSxVQUFTd0IsQ0FBVCxFQUFZO0FBQ3pCLGdCQUFJekQsRUFBRSxJQUFGLEVBQVErTSxFQUFSLENBQVczTCxRQUFYLENBQUosRUFBMEI7QUFDeEJxZSw2QkFBZUQsVUFBVW5TLEVBQVYsQ0FBYTVKLElBQUUsQ0FBZixDQUFmO0FBQ0FpYyw2QkFBZUYsVUFBVW5TLEVBQVYsQ0FBYTVKLElBQUUsQ0FBZixDQUFmO0FBQ0E7QUFDRDtBQUNGLFdBTkQ7O0FBUUEsY0FBSTZpQixjQUFjLFlBQVc7QUFDM0IsZ0JBQUksQ0FBQ2xsQixTQUFTMkwsRUFBVCxDQUFZLGFBQVosQ0FBTCxFQUFpQztBQUMvQjJTLDJCQUFhMU0sUUFBYixDQUFzQixTQUF0QixFQUFpQ3RGLEtBQWpDO0FBQ0F4SixnQkFBRXVKLGNBQUY7QUFDRDtBQUNGLFdBTEQ7QUFBQSxjQUtHOFksY0FBYyxZQUFXO0FBQzFCOUcseUJBQWF6TSxRQUFiLENBQXNCLFNBQXRCLEVBQWlDdEYsS0FBakM7QUFDQXhKLGNBQUV1SixjQUFGO0FBQ0QsV0FSRDtBQUFBLGNBUUcrWSxVQUFVLFlBQVc7QUFDdEIsZ0JBQUl6VCxPQUFPM1IsU0FBUzRSLFFBQVQsQ0FBa0Isd0JBQWxCLENBQVg7QUFDQSxnQkFBSUQsS0FBS2hRLE1BQVQsRUFBaUI7QUFDZlgsb0JBQU15ZixLQUFOLENBQVk5TyxJQUFaO0FBQ0EzUix1QkFBU3VDLElBQVQsQ0FBYyxjQUFkLEVBQThCK0osS0FBOUI7QUFDQXhKLGdCQUFFdUosY0FBRjtBQUNELGFBSkQsTUFJTztBQUFFO0FBQVM7QUFDbkIsV0FmRDtBQUFBLGNBZUdnWixXQUFXLFlBQVc7QUFDdkI7QUFDQSxnQkFBSTNHLFFBQVExZSxTQUFTOEgsTUFBVCxDQUFnQixJQUFoQixFQUFzQkEsTUFBdEIsQ0FBNkIsSUFBN0IsQ0FBWjtBQUNBNFcsa0JBQU05TSxRQUFOLENBQWUsU0FBZixFQUEwQnRGLEtBQTFCO0FBQ0F0TCxrQkFBTXlnQixLQUFOLENBQVkvQyxLQUFaO0FBQ0E1YixjQUFFdUosY0FBRjtBQUNBO0FBQ0QsV0F0QkQ7QUF1QkEsY0FBSXJCLFlBQVk7QUFDZHlULGtCQUFNMkcsT0FEUTtBQUVkMUcsbUJBQU8sWUFBVztBQUNoQjFkLG9CQUFNeWdCLEtBQU4sQ0FBWXpnQixNQUFNaEIsUUFBbEI7QUFDQWdCLG9CQUFNb2UsVUFBTixDQUFpQjdjLElBQWpCLENBQXNCLFNBQXRCLEVBQWlDK0osS0FBakMsR0FGZ0IsQ0FFMEI7QUFDMUN4SixnQkFBRXVKLGNBQUY7QUFDRCxhQU5hO0FBT2RkLHFCQUFTLFlBQVc7QUFDbEJ6SSxnQkFBRStiLHdCQUFGO0FBQ0Q7QUFUYSxXQUFoQjs7QUFZQSxjQUFJbUcsS0FBSixFQUFXO0FBQ1QsZ0JBQUloa0IsTUFBTXNrQixXQUFOLEVBQUosRUFBeUI7QUFBRTtBQUN6QixrQkFBSXhtQixXQUFXSSxHQUFYLEVBQUosRUFBc0I7QUFBRTtBQUN0Qk4sa0JBQUV5TSxNQUFGLENBQVNMLFNBQVQsRUFBb0I7QUFDbEIyUix3QkFBTXVJLFdBRFk7QUFFbEI5SCxzQkFBSStILFdBRmM7QUFHbEJySSx3QkFBTXVJLFFBSFk7QUFJbEJwSSw0QkFBVW1JO0FBSlEsaUJBQXBCO0FBTUQsZUFQRCxNQU9PO0FBQUU7QUFDUHhtQixrQkFBRXlNLE1BQUYsQ0FBU0wsU0FBVCxFQUFvQjtBQUNsQjJSLHdCQUFNdUksV0FEWTtBQUVsQjlILHNCQUFJK0gsV0FGYztBQUdsQnJJLHdCQUFNc0ksT0FIWTtBQUlsQm5JLDRCQUFVb0k7QUFKUSxpQkFBcEI7QUFNRDtBQUNGLGFBaEJELE1BZ0JPO0FBQUU7QUFDUCxrQkFBSXZtQixXQUFXSSxHQUFYLEVBQUosRUFBc0I7QUFBRTtBQUN0Qk4sa0JBQUV5TSxNQUFGLENBQVNMLFNBQVQsRUFBb0I7QUFDbEI4Uix3QkFBTXFJLFdBRFk7QUFFbEJsSSw0QkFBVWlJLFdBRlE7QUFHbEJ2SSx3QkFBTXlJLE9BSFk7QUFJbEJoSSxzQkFBSWlJO0FBSmMsaUJBQXBCO0FBTUQsZUFQRCxNQU9PO0FBQUU7QUFDUHptQixrQkFBRXlNLE1BQUYsQ0FBU0wsU0FBVCxFQUFvQjtBQUNsQjhSLHdCQUFNb0ksV0FEWTtBQUVsQmpJLDRCQUFVa0ksV0FGUTtBQUdsQnhJLHdCQUFNeUksT0FIWTtBQUlsQmhJLHNCQUFJaUk7QUFKYyxpQkFBcEI7QUFNRDtBQUNGO0FBQ0YsV0FsQ0QsTUFrQ087QUFBRTtBQUNQLGdCQUFJdm1CLFdBQVdJLEdBQVgsRUFBSixFQUFzQjtBQUFFO0FBQ3RCTixnQkFBRXlNLE1BQUYsQ0FBU0wsU0FBVCxFQUFvQjtBQUNsQjhSLHNCQUFNdUksUUFEWTtBQUVsQnBJLDBCQUFVbUksT0FGUTtBQUdsQnpJLHNCQUFNdUksV0FIWTtBQUlsQjlILG9CQUFJK0g7QUFKYyxlQUFwQjtBQU1ELGFBUEQsTUFPTztBQUFFO0FBQ1B2bUIsZ0JBQUV5TSxNQUFGLENBQVNMLFNBQVQsRUFBb0I7QUFDbEI4UixzQkFBTXNJLE9BRFk7QUFFbEJuSSwwQkFBVW9JLFFBRlE7QUFHbEIxSSxzQkFBTXVJLFdBSFk7QUFJbEI5SCxvQkFBSStIO0FBSmMsZUFBcEI7QUFNRDtBQUNGO0FBQ0RybUIscUJBQVdtTCxRQUFYLENBQW9CYSxTQUFwQixDQUE4QmhJLENBQTlCLEVBQWlDLGNBQWpDLEVBQWlEa0ksU0FBakQ7QUFFRCxTQXZHRDtBQXdHRDs7QUFFRDs7Ozs7O0FBblBXO0FBQUE7QUFBQSx3Q0F3UE87QUFDaEIsWUFBSTJWLFFBQVEvaEIsRUFBRTRFLFNBQVMwRixJQUFYLENBQVo7QUFBQSxZQUNJbEksUUFBUSxJQURaO0FBRUEyZixjQUFNblUsR0FBTixDQUFVLGtEQUFWLEVBQ01MLEVBRE4sQ0FDUyxrREFEVCxFQUM2RCxVQUFTckosQ0FBVCxFQUFZO0FBQ2xFLGNBQUkwYyxRQUFReGUsTUFBTWhCLFFBQU4sQ0FBZXVDLElBQWYsQ0FBb0JPLEVBQUVzSixNQUF0QixDQUFaO0FBQ0EsY0FBSW9ULE1BQU03ZCxNQUFWLEVBQWtCO0FBQUU7QUFBUzs7QUFFN0JYLGdCQUFNeWdCLEtBQU47QUFDQWQsZ0JBQU1uVSxHQUFOLENBQVUsa0RBQVY7QUFDRCxTQVBOO0FBUUQ7O0FBRUQ7Ozs7Ozs7O0FBclFXO0FBQUE7QUFBQSw0QkE0UUxtRixJQTVRSyxFQTRRQztBQUNWLFlBQUk0SyxNQUFNLEtBQUtELEtBQUwsQ0FBVzJJLEtBQVgsQ0FBaUIsS0FBSzNJLEtBQUwsQ0FBVzVRLE1BQVgsQ0FBa0IsVUFBU3JKLENBQVQsRUFBWVksRUFBWixFQUFnQjtBQUMzRCxpQkFBT3JFLEVBQUVxRSxFQUFGLEVBQU1WLElBQU4sQ0FBV29QLElBQVgsRUFBaUJoUSxNQUFqQixHQUEwQixDQUFqQztBQUNELFNBRjBCLENBQWpCLENBQVY7QUFHQSxZQUFJNGpCLFFBQVE1VCxLQUFLN0osTUFBTCxDQUFZLCtCQUFaLEVBQTZDNlEsUUFBN0MsQ0FBc0QsK0JBQXRELENBQVo7QUFDQSxhQUFLOEksS0FBTCxDQUFXOEQsS0FBWCxFQUFrQmhKLEdBQWxCO0FBQ0E1SyxhQUFLdkUsR0FBTCxDQUFTLFlBQVQsRUFBdUIsUUFBdkIsRUFBaUN3RCxRQUFqQyxDQUEwQyxvQkFBMUMsRUFDSzlJLE1BREwsQ0FDWSwrQkFEWixFQUM2QzhJLFFBRDdDLENBQ3NELFdBRHREO0FBRUEsWUFBSXFLLFFBQVFuYyxXQUFXMkksR0FBWCxDQUFlQyxnQkFBZixDQUFnQ2lLLElBQWhDLEVBQXNDLElBQXRDLEVBQTRDLElBQTVDLENBQVo7QUFDQSxZQUFJLENBQUNzSixLQUFMLEVBQVk7QUFDVixjQUFJdUssV0FBVyxLQUFLelQsT0FBTCxDQUFhbVMsU0FBYixLQUEyQixNQUEzQixHQUFvQyxRQUFwQyxHQUErQyxPQUE5RDtBQUFBLGNBQ0l1QixZQUFZOVQsS0FBSzdKLE1BQUwsQ0FBWSw2QkFBWixDQURoQjtBQUVBMmQsb0JBQVU1Z0IsV0FBVixXQUE4QjJnQixRQUE5QixFQUEwQzVVLFFBQTFDLFlBQTRELEtBQUttQixPQUFMLENBQWFtUyxTQUF6RTtBQUNBakosa0JBQVFuYyxXQUFXMkksR0FBWCxDQUFlQyxnQkFBZixDQUFnQ2lLLElBQWhDLEVBQXNDLElBQXRDLEVBQTRDLElBQTVDLENBQVI7QUFDQSxjQUFJLENBQUNzSixLQUFMLEVBQVk7QUFDVndLLHNCQUFVNWdCLFdBQVYsWUFBK0IsS0FBS2tOLE9BQUwsQ0FBYW1TLFNBQTVDLEVBQXlEdFQsUUFBekQsQ0FBa0UsYUFBbEU7QUFDRDtBQUNELGVBQUt1VCxPQUFMLEdBQWUsSUFBZjtBQUNEO0FBQ0R4UyxhQUFLdkUsR0FBTCxDQUFTLFlBQVQsRUFBdUIsRUFBdkI7QUFDQSxZQUFJLEtBQUsyRSxPQUFMLENBQWEyTyxZQUFqQixFQUErQjtBQUFFLGVBQUtrRCxlQUFMO0FBQXlCO0FBQzFEOzs7O0FBSUEsYUFBSzVqQixRQUFMLENBQWNFLE9BQWQsQ0FBc0Isc0JBQXRCLEVBQThDLENBQUN5UixJQUFELENBQTlDO0FBQ0Q7O0FBRUQ7Ozs7Ozs7O0FBeFNXO0FBQUE7QUFBQSw0QkErU0xyUCxLQS9TSyxFQStTRWlhLEdBL1NGLEVBK1NPO0FBQ2hCLFlBQUltSixRQUFKO0FBQ0EsWUFBSXBqQixTQUFTQSxNQUFNWCxNQUFuQixFQUEyQjtBQUN6QitqQixxQkFBV3BqQixLQUFYO0FBQ0QsU0FGRCxNQUVPLElBQUlpYSxRQUFRcFgsU0FBWixFQUF1QjtBQUM1QnVnQixxQkFBVyxLQUFLcEosS0FBTCxDQUFXMUYsR0FBWCxDQUFlLFVBQVN2VSxDQUFULEVBQVlZLEVBQVosRUFBZ0I7QUFDeEMsbUJBQU9aLE1BQU1rYSxHQUFiO0FBQ0QsV0FGVSxDQUFYO0FBR0QsU0FKTSxNQUtGO0FBQ0htSixxQkFBVyxLQUFLMWxCLFFBQWhCO0FBQ0Q7QUFDRCxZQUFJMmxCLG1CQUFtQkQsU0FBU3ZJLFFBQVQsQ0FBa0IsV0FBbEIsS0FBa0N1SSxTQUFTbmpCLElBQVQsQ0FBYyxZQUFkLEVBQTRCWixNQUE1QixHQUFxQyxDQUE5Rjs7QUFFQSxZQUFJZ2tCLGdCQUFKLEVBQXNCO0FBQ3BCRCxtQkFBU25qQixJQUFULENBQWMsY0FBZCxFQUE4QndjLEdBQTlCLENBQWtDMkcsUUFBbEMsRUFBNEN2bUIsSUFBNUMsQ0FBaUQ7QUFDL0MsNkJBQWlCO0FBRDhCLFdBQWpELEVBRUcwRixXQUZILENBRWUsV0FGZjs7QUFJQTZnQixtQkFBU25qQixJQUFULENBQWMsdUJBQWQsRUFBdUNzQyxXQUF2QyxDQUFtRCxvQkFBbkQ7O0FBRUEsY0FBSSxLQUFLc2YsT0FBTCxJQUFnQnVCLFNBQVNuakIsSUFBVCxDQUFjLGFBQWQsRUFBNkJaLE1BQWpELEVBQXlEO0FBQ3ZELGdCQUFJNmpCLFdBQVcsS0FBS3pULE9BQUwsQ0FBYW1TLFNBQWIsS0FBMkIsTUFBM0IsR0FBb0MsT0FBcEMsR0FBOEMsTUFBN0Q7QUFDQXdCLHFCQUFTbmpCLElBQVQsQ0FBYywrQkFBZCxFQUErQ3djLEdBQS9DLENBQW1EMkcsUUFBbkQsRUFDUzdnQixXQURULHdCQUMwQyxLQUFLa04sT0FBTCxDQUFhbVMsU0FEdkQsRUFFU3RULFFBRlQsWUFFMkI0VSxRQUYzQjtBQUdBLGlCQUFLckIsT0FBTCxHQUFlLEtBQWY7QUFDRDtBQUNEOzs7O0FBSUEsZUFBS25rQixRQUFMLENBQWNFLE9BQWQsQ0FBc0Isc0JBQXRCLEVBQThDLENBQUN3bEIsUUFBRCxDQUE5QztBQUNEO0FBQ0Y7O0FBRUQ7Ozs7O0FBblZXO0FBQUE7QUFBQSxnQ0F1VkQ7QUFDUixhQUFLdEcsVUFBTCxDQUFnQjVTLEdBQWhCLENBQW9CLGtCQUFwQixFQUF3Q2pNLFVBQXhDLENBQW1ELGVBQW5ELEVBQ0tzRSxXQURMLENBQ2lCLCtFQURqQjtBQUVBakcsVUFBRTRFLFNBQVMwRixJQUFYLEVBQWlCc0QsR0FBakIsQ0FBcUIsa0JBQXJCO0FBQ0ExTixtQkFBV3FTLElBQVgsQ0FBZ0JVLElBQWhCLENBQXFCLEtBQUs3UixRQUExQixFQUFvQyxVQUFwQztBQUNBbEIsbUJBQVdzQixnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBN1ZVOztBQUFBO0FBQUE7O0FBZ1diOzs7OztBQUdBMGpCLGVBQWEvTCxRQUFiLEdBQXdCO0FBQ3RCOzs7OztBQUtBOE0sa0JBQWMsS0FOUTtBQU90Qjs7Ozs7QUFLQUMsZUFBVyxJQVpXO0FBYXRCOzs7OztBQUtBdEIsZ0JBQVksRUFsQlU7QUFtQnRCOzs7OztBQUtBa0IsZUFBVyxLQXhCVztBQXlCdEI7Ozs7OztBQU1BSyxpQkFBYSxHQS9CUztBQWdDdEI7Ozs7O0FBS0FiLGVBQVcsTUFyQ1c7QUFzQ3RCOzs7OztBQUtBeEQsa0JBQWMsSUEzQ1E7QUE0Q3RCOzs7OztBQUtBa0Usd0JBQW9CLElBakRFO0FBa0R0Qjs7Ozs7QUFLQVosbUJBQWUsVUF2RE87QUF3RHRCOzs7OztBQUtBQyxnQkFBWSxhQTdEVTtBQThEdEI7Ozs7O0FBS0FVLGlCQUFhO0FBbkVTLEdBQXhCOztBQXNFQTtBQUNBN2xCLGFBQVdNLE1BQVgsQ0FBa0Iwa0IsWUFBbEIsRUFBZ0MsY0FBaEM7QUFFQyxDQTVhQSxDQTRhQ3RjLE1BNWFELENBQUQ7Q0NGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNUksQ0FBVCxFQUFZOztBQUViOzs7Ozs7O0FBRmEsTUFTUGduQixTQVRPO0FBVVg7Ozs7Ozs7QUFPQSx1QkFBWS9kLE9BQVosRUFBcUJrSyxPQUFyQixFQUE2QjtBQUFBOztBQUMzQixXQUFLL1IsUUFBTCxHQUFnQjZILE9BQWhCO0FBQ0EsV0FBS2tLLE9BQUwsR0FBZ0JuVCxFQUFFeU0sTUFBRixDQUFTLEVBQVQsRUFBYXVhLFVBQVU3TixRQUF2QixFQUFpQyxLQUFLL1gsUUFBTCxDQUFjQyxJQUFkLEVBQWpDLEVBQXVEOFIsT0FBdkQsQ0FBaEI7O0FBRUEsV0FBS2pSLEtBQUw7O0FBRUFoQyxpQkFBV1ksY0FBWCxDQUEwQixJQUExQixFQUFnQyxXQUFoQztBQUNEOztBQUVEOzs7Ozs7QUExQlc7QUFBQTtBQUFBLDhCQThCSDtBQUNOLFlBQUltbUIsT0FBTyxLQUFLN2xCLFFBQUwsQ0FBY2IsSUFBZCxDQUFtQixnQkFBbkIsS0FBd0MsRUFBbkQ7QUFDQSxZQUFJMm1CLFdBQVcsS0FBSzlsQixRQUFMLENBQWN1QyxJQUFkLDZCQUE2Q3NqQixJQUE3QyxRQUFmOztBQUVBLGFBQUtDLFFBQUwsR0FBZ0JBLFNBQVNua0IsTUFBVCxHQUFrQm1rQixRQUFsQixHQUE2QixLQUFLOWxCLFFBQUwsQ0FBY3VDLElBQWQsQ0FBbUIsd0JBQW5CLENBQTdDO0FBQ0EsYUFBS3ZDLFFBQUwsQ0FBY2IsSUFBZCxDQUFtQixhQUFuQixFQUFtQzBtQixRQUFRL21CLFdBQVdpQixXQUFYLENBQXVCLENBQXZCLEVBQTBCLElBQTFCLENBQTNDO0FBQ0gsYUFBS0MsUUFBTCxDQUFjYixJQUFkLENBQW1CLGFBQW5CLEVBQW1DMG1CLFFBQVEvbUIsV0FBV2lCLFdBQVgsQ0FBdUIsQ0FBdkIsRUFBMEIsSUFBMUIsQ0FBM0M7O0FBRUcsYUFBS2dtQixTQUFMLEdBQWlCLEtBQUsvbEIsUUFBTCxDQUFjdUMsSUFBZCxDQUFtQixrQkFBbkIsRUFBdUNaLE1BQXZDLEdBQWdELENBQWpFO0FBQ0EsYUFBS3FrQixRQUFMLEdBQWdCLEtBQUtobUIsUUFBTCxDQUFjOGUsWUFBZCxDQUEyQnRiLFNBQVMwRixJQUFwQyxFQUEwQyxrQkFBMUMsRUFBOER2SCxNQUE5RCxHQUF1RSxDQUF2RjtBQUNBLGFBQUtza0IsSUFBTCxHQUFZLEtBQVo7QUFDQSxhQUFLakYsWUFBTCxHQUFvQjtBQUNsQmtGLDJCQUFpQixLQUFLQyxXQUFMLENBQWlCemYsSUFBakIsQ0FBc0IsSUFBdEIsQ0FEQztBQUVsQjBmLGdDQUFzQixLQUFLQyxnQkFBTCxDQUFzQjNmLElBQXRCLENBQTJCLElBQTNCO0FBRkosU0FBcEI7O0FBS0EsWUFBSTRmLE9BQU8sS0FBS3RtQixRQUFMLENBQWN1QyxJQUFkLENBQW1CLEtBQW5CLENBQVg7QUFDQSxZQUFJZ2tCLFFBQUo7QUFDQSxZQUFHLEtBQUt4VSxPQUFMLENBQWF5VSxVQUFoQixFQUEyQjtBQUN6QkQscUJBQVcsS0FBS0UsUUFBTCxFQUFYO0FBQ0E3bkIsWUFBRTBHLE1BQUYsRUFBVTZHLEVBQVYsQ0FBYSx1QkFBYixFQUFzQyxLQUFLc2EsUUFBTCxDQUFjL2YsSUFBZCxDQUFtQixJQUFuQixDQUF0QztBQUNELFNBSEQsTUFHSztBQUNILGVBQUt1UixPQUFMO0FBQ0Q7QUFDRCxZQUFJc08sYUFBYXBoQixTQUFiLElBQTBCb2hCLGFBQWEsS0FBeEMsSUFBa0RBLGFBQWFwaEIsU0FBbEUsRUFBNEU7QUFDMUUsY0FBR21oQixLQUFLM2tCLE1BQVIsRUFBZTtBQUNiN0MsdUJBQVd3VCxjQUFYLENBQTBCZ1UsSUFBMUIsRUFBZ0MsS0FBS0ksT0FBTCxDQUFhaGdCLElBQWIsQ0FBa0IsSUFBbEIsQ0FBaEM7QUFDRCxXQUZELE1BRUs7QUFDSCxpQkFBS2dnQixPQUFMO0FBQ0Q7QUFDRjtBQUNGOztBQUVEOzs7OztBQS9EVztBQUFBO0FBQUEscUNBbUVJO0FBQ2IsYUFBS1QsSUFBTCxHQUFZLEtBQVo7QUFDQSxhQUFLam1CLFFBQUwsQ0FBY3dNLEdBQWQsQ0FBa0I7QUFDaEIsMkJBQWlCLEtBQUt3VSxZQUFMLENBQWtCb0Ysb0JBRG5CO0FBRWhCLGlDQUF1QixLQUFLcEYsWUFBTCxDQUFrQmtGLGVBRnpCO0FBR25CLGlDQUF1QixLQUFLbEYsWUFBTCxDQUFrQmtGO0FBSHRCLFNBQWxCO0FBS0Q7O0FBRUQ7Ozs7O0FBNUVXO0FBQUE7QUFBQSxrQ0FnRkNwakIsQ0FoRkQsRUFnRkk7QUFDYixhQUFLNGpCLE9BQUw7QUFDRDs7QUFFRDs7Ozs7QUFwRlc7QUFBQTtBQUFBLHVDQXdGTTVqQixDQXhGTixFQXdGUztBQUNsQixZQUFHQSxFQUFFc0osTUFBRixLQUFhLEtBQUtwTSxRQUFMLENBQWMsQ0FBZCxDQUFoQixFQUFpQztBQUFFLGVBQUswbUIsT0FBTDtBQUFpQjtBQUNyRDs7QUFFRDs7Ozs7QUE1Rlc7QUFBQTtBQUFBLGdDQWdHRDtBQUNSLFlBQUkxbEIsUUFBUSxJQUFaO0FBQ0EsYUFBSzJsQixZQUFMO0FBQ0EsWUFBRyxLQUFLWixTQUFSLEVBQWtCO0FBQ2hCLGVBQUsvbEIsUUFBTCxDQUFjbU0sRUFBZCxDQUFpQiw0QkFBakIsRUFBK0MsS0FBSzZVLFlBQUwsQ0FBa0JvRixvQkFBakU7QUFDRCxTQUZELE1BRUs7QUFDSCxlQUFLcG1CLFFBQUwsQ0FBY21NLEVBQWQsQ0FBaUIscUJBQWpCLEVBQXdDLEtBQUs2VSxZQUFMLENBQWtCa0YsZUFBMUQ7QUFDSCxlQUFLbG1CLFFBQUwsQ0FBY21NLEVBQWQsQ0FBaUIscUJBQWpCLEVBQXdDLEtBQUs2VSxZQUFMLENBQWtCa0YsZUFBMUQ7QUFDRTtBQUNELGFBQUtELElBQUwsR0FBWSxJQUFaO0FBQ0Q7O0FBRUQ7Ozs7O0FBNUdXO0FBQUE7QUFBQSxpQ0FnSEE7QUFDVCxZQUFJTSxXQUFXLENBQUN6bkIsV0FBV2dHLFVBQVgsQ0FBc0I2RyxFQUF0QixDQUF5QixLQUFLb0csT0FBTCxDQUFheVUsVUFBdEMsQ0FBaEI7QUFDQSxZQUFHRCxRQUFILEVBQVk7QUFDVixjQUFHLEtBQUtOLElBQVIsRUFBYTtBQUNYLGlCQUFLVSxZQUFMO0FBQ0EsaUJBQUtiLFFBQUwsQ0FBYzFZLEdBQWQsQ0FBa0IsUUFBbEIsRUFBNEIsTUFBNUI7QUFDRDtBQUNGLFNBTEQsTUFLSztBQUNILGNBQUcsQ0FBQyxLQUFLNlksSUFBVCxFQUFjO0FBQ1osaUJBQUtoTyxPQUFMO0FBQ0Q7QUFDRjtBQUNELGVBQU9zTyxRQUFQO0FBQ0Q7O0FBRUQ7Ozs7O0FBL0hXO0FBQUE7QUFBQSxvQ0FtSUc7QUFDWjtBQUNEOztBQUVEOzs7OztBQXZJVztBQUFBO0FBQUEsZ0NBMklEO0FBQ1IsWUFBRyxDQUFDLEtBQUt4VSxPQUFMLENBQWE2VSxlQUFqQixFQUFpQztBQUMvQixjQUFHLEtBQUtDLFVBQUwsRUFBSCxFQUFxQjtBQUNuQixpQkFBS2YsUUFBTCxDQUFjMVksR0FBZCxDQUFrQixRQUFsQixFQUE0QixNQUE1QjtBQUNBLG1CQUFPLEtBQVA7QUFDRDtBQUNGO0FBQ0QsWUFBSSxLQUFLMkUsT0FBTCxDQUFhK1UsYUFBakIsRUFBZ0M7QUFDOUIsZUFBS0MsZUFBTCxDQUFxQixLQUFLQyxnQkFBTCxDQUFzQnRnQixJQUF0QixDQUEyQixJQUEzQixDQUFyQjtBQUNELFNBRkQsTUFFSztBQUNILGVBQUt1Z0IsVUFBTCxDQUFnQixLQUFLQyxXQUFMLENBQWlCeGdCLElBQWpCLENBQXNCLElBQXRCLENBQWhCO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7QUF6Slc7QUFBQTtBQUFBLG1DQTZKRTtBQUNYLFlBQUksQ0FBQyxLQUFLb2YsUUFBTCxDQUFjLENBQWQsQ0FBRCxJQUFxQixDQUFDLEtBQUtBLFFBQUwsQ0FBYyxDQUFkLENBQTFCLEVBQTRDO0FBQzFDLGlCQUFPLElBQVA7QUFDRDtBQUNELGVBQU8sS0FBS0EsUUFBTCxDQUFjLENBQWQsRUFBaUJoZCxxQkFBakIsR0FBeUNaLEdBQXpDLEtBQWlELEtBQUs0ZCxRQUFMLENBQWMsQ0FBZCxFQUFpQmhkLHFCQUFqQixHQUF5Q1osR0FBakc7QUFDRDs7QUFFRDs7Ozs7O0FBcEtXO0FBQUE7QUFBQSxpQ0F5S0E2SCxFQXpLQSxFQXlLSTtBQUNiLFlBQUlvWCxVQUFVLEVBQWQ7QUFDQSxhQUFJLElBQUk5a0IsSUFBSSxDQUFSLEVBQVcra0IsTUFBTSxLQUFLdEIsUUFBTCxDQUFjbmtCLE1BQW5DLEVBQTJDVSxJQUFJK2tCLEdBQS9DLEVBQW9EL2tCLEdBQXBELEVBQXdEO0FBQ3RELGVBQUt5akIsUUFBTCxDQUFjempCLENBQWQsRUFBaUJ1QixLQUFqQixDQUF1QjRFLE1BQXZCLEdBQWdDLE1BQWhDO0FBQ0EyZSxrQkFBUWhuQixJQUFSLENBQWEsS0FBSzJsQixRQUFMLENBQWN6akIsQ0FBZCxFQUFpQmdsQixZQUE5QjtBQUNEO0FBQ0R0WCxXQUFHb1gsT0FBSDtBQUNEOztBQUVEOzs7Ozs7QUFsTFc7QUFBQTtBQUFBLHNDQXVMS3BYLEVBdkxMLEVBdUxTO0FBQ2xCLFlBQUl1WCxrQkFBbUIsS0FBS3hCLFFBQUwsQ0FBY25rQixNQUFkLEdBQXVCLEtBQUtta0IsUUFBTCxDQUFjaFIsS0FBZCxHQUFzQnZNLE1BQXRCLEdBQStCTCxHQUF0RCxHQUE0RCxDQUFuRjtBQUFBLFlBQ0lxZixTQUFTLEVBRGI7QUFBQSxZQUVJQyxRQUFRLENBRlo7QUFHQTtBQUNBRCxlQUFPQyxLQUFQLElBQWdCLEVBQWhCO0FBQ0EsYUFBSSxJQUFJbmxCLElBQUksQ0FBUixFQUFXK2tCLE1BQU0sS0FBS3RCLFFBQUwsQ0FBY25rQixNQUFuQyxFQUEyQ1UsSUFBSStrQixHQUEvQyxFQUFvRC9rQixHQUFwRCxFQUF3RDtBQUN0RCxlQUFLeWpCLFFBQUwsQ0FBY3pqQixDQUFkLEVBQWlCdUIsS0FBakIsQ0FBdUI0RSxNQUF2QixHQUFnQyxNQUFoQztBQUNBO0FBQ0EsY0FBSWlmLGNBQWM3b0IsRUFBRSxLQUFLa25CLFFBQUwsQ0FBY3pqQixDQUFkLENBQUYsRUFBb0JrRyxNQUFwQixHQUE2QkwsR0FBL0M7QUFDQSxjQUFJdWYsZUFBYUgsZUFBakIsRUFBa0M7QUFDaENFO0FBQ0FELG1CQUFPQyxLQUFQLElBQWdCLEVBQWhCO0FBQ0FGLDhCQUFnQkcsV0FBaEI7QUFDRDtBQUNERixpQkFBT0MsS0FBUCxFQUFjcm5CLElBQWQsQ0FBbUIsQ0FBQyxLQUFLMmxCLFFBQUwsQ0FBY3pqQixDQUFkLENBQUQsRUFBa0IsS0FBS3lqQixRQUFMLENBQWN6akIsQ0FBZCxFQUFpQmdsQixZQUFuQyxDQUFuQjtBQUNEOztBQUVELGFBQUssSUFBSUssSUFBSSxDQUFSLEVBQVdDLEtBQUtKLE9BQU81bEIsTUFBNUIsRUFBb0MrbEIsSUFBSUMsRUFBeEMsRUFBNENELEdBQTVDLEVBQWlEO0FBQy9DLGNBQUlQLFVBQVV2b0IsRUFBRTJvQixPQUFPRyxDQUFQLENBQUYsRUFBYTFrQixHQUFiLENBQWlCLFlBQVU7QUFBRSxtQkFBTyxLQUFLLENBQUwsQ0FBUDtBQUFpQixXQUE5QyxFQUFnRDhLLEdBQWhELEVBQWQ7QUFDQSxjQUFJekgsTUFBY3hFLEtBQUt3RSxHQUFMLENBQVM5QixLQUFULENBQWUsSUFBZixFQUFxQjRpQixPQUFyQixDQUFsQjtBQUNBSSxpQkFBT0csQ0FBUCxFQUFVdm5CLElBQVYsQ0FBZWtHLEdBQWY7QUFDRDtBQUNEMEosV0FBR3dYLE1BQUg7QUFDRDs7QUFFRDs7Ozs7OztBQWpOVztBQUFBO0FBQUEsa0NBdU5DSixPQXZORCxFQXVOVTtBQUNuQixZQUFJOWdCLE1BQU14RSxLQUFLd0UsR0FBTCxDQUFTOUIsS0FBVCxDQUFlLElBQWYsRUFBcUI0aUIsT0FBckIsQ0FBVjtBQUNBOzs7O0FBSUEsYUFBS25uQixRQUFMLENBQWNFLE9BQWQsQ0FBc0IsMkJBQXRCOztBQUVBLGFBQUs0bEIsUUFBTCxDQUFjMVksR0FBZCxDQUFrQixRQUFsQixFQUE0Qi9HLEdBQTVCOztBQUVBOzs7O0FBSUMsYUFBS3JHLFFBQUwsQ0FBY0UsT0FBZCxDQUFzQiw0QkFBdEI7QUFDRjs7QUFFRDs7Ozs7Ozs7O0FBeE9XO0FBQUE7QUFBQSx1Q0FnUE1xbkIsTUFoUE4sRUFnUGM7QUFDdkI7OztBQUdBLGFBQUt2bkIsUUFBTCxDQUFjRSxPQUFkLENBQXNCLDJCQUF0QjtBQUNBLGFBQUssSUFBSW1DLElBQUksQ0FBUixFQUFXK2tCLE1BQU1HLE9BQU81bEIsTUFBN0IsRUFBcUNVLElBQUkra0IsR0FBekMsRUFBK0Mva0IsR0FBL0MsRUFBb0Q7QUFDbEQsY0FBSXVsQixnQkFBZ0JMLE9BQU9sbEIsQ0FBUCxFQUFVVixNQUE5QjtBQUFBLGNBQ0kwRSxNQUFNa2hCLE9BQU9sbEIsQ0FBUCxFQUFVdWxCLGdCQUFnQixDQUExQixDQURWO0FBRUEsY0FBSUEsaUJBQWUsQ0FBbkIsRUFBc0I7QUFDcEJocEIsY0FBRTJvQixPQUFPbGxCLENBQVAsRUFBVSxDQUFWLEVBQWEsQ0FBYixDQUFGLEVBQW1CK0ssR0FBbkIsQ0FBdUIsRUFBQyxVQUFTLE1BQVYsRUFBdkI7QUFDQTtBQUNEO0FBQ0Q7Ozs7QUFJQSxlQUFLcE4sUUFBTCxDQUFjRSxPQUFkLENBQXNCLDhCQUF0QjtBQUNBLGVBQUssSUFBSXduQixJQUFJLENBQVIsRUFBV0csT0FBUUQsZ0JBQWMsQ0FBdEMsRUFBMENGLElBQUlHLElBQTlDLEVBQXFESCxHQUFyRCxFQUEwRDtBQUN4RDlvQixjQUFFMm9CLE9BQU9sbEIsQ0FBUCxFQUFVcWxCLENBQVYsRUFBYSxDQUFiLENBQUYsRUFBbUJ0YSxHQUFuQixDQUF1QixFQUFDLFVBQVMvRyxHQUFWLEVBQXZCO0FBQ0Q7QUFDRDs7OztBQUlBLGVBQUtyRyxRQUFMLENBQWNFLE9BQWQsQ0FBc0IsK0JBQXRCO0FBQ0Q7QUFDRDs7O0FBR0MsYUFBS0YsUUFBTCxDQUFjRSxPQUFkLENBQXNCLDRCQUF0QjtBQUNGOztBQUVEOzs7OztBQWhSVztBQUFBO0FBQUEsZ0NBb1JEO0FBQ1IsYUFBS3ltQixZQUFMO0FBQ0EsYUFBS2IsUUFBTCxDQUFjMVksR0FBZCxDQUFrQixRQUFsQixFQUE0QixNQUE1Qjs7QUFFQXRPLG1CQUFXc0IsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDtBQXpSVTs7QUFBQTtBQUFBOztBQTRSYjs7Ozs7QUFHQXdsQixZQUFVN04sUUFBVixHQUFxQjtBQUNuQjs7Ozs7QUFLQTZPLHFCQUFpQixLQU5FO0FBT25COzs7OztBQUtBRSxtQkFBZSxLQVpJO0FBYW5COzs7OztBQUtBTixnQkFBWTtBQWxCTyxHQUFyQjs7QUFxQkE7QUFDQTFuQixhQUFXTSxNQUFYLENBQWtCd21CLFNBQWxCLEVBQTZCLFdBQTdCO0FBRUMsQ0F2VEEsQ0F1VENwZSxNQXZURCxDQUFEO0NDRkE7Ozs7OztBQUVBLENBQUMsVUFBUzVJLENBQVQsRUFBWTs7QUFFYjs7Ozs7OztBQUZhLE1BU1BrcEIsV0FUTztBQVVYOzs7Ozs7O0FBT0EseUJBQVlqZ0IsT0FBWixFQUFxQmtLLE9BQXJCLEVBQThCO0FBQUE7O0FBQzVCLFdBQUsvUixRQUFMLEdBQWdCNkgsT0FBaEI7QUFDQSxXQUFLa0ssT0FBTCxHQUFlblQsRUFBRXlNLE1BQUYsQ0FBUyxFQUFULEVBQWF5YyxZQUFZL1AsUUFBekIsRUFBbUNoRyxPQUFuQyxDQUFmO0FBQ0EsV0FBS2dXLEtBQUwsR0FBYSxFQUFiO0FBQ0EsV0FBS0MsV0FBTCxHQUFtQixFQUFuQjs7QUFFQSxXQUFLbG5CLEtBQUw7QUFDQSxXQUFLbVgsT0FBTDs7QUFFQW5aLGlCQUFXWSxjQUFYLENBQTBCLElBQTFCLEVBQWdDLGFBQWhDO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUE3Qlc7QUFBQTtBQUFBLDhCQWtDSDtBQUNOLGFBQUt1b0IsZUFBTDtBQUNBLGFBQUtDLGNBQUw7QUFDQSxhQUFLeEIsT0FBTDtBQUNEOztBQUVEOzs7Ozs7QUF4Q1c7QUFBQTtBQUFBLGdDQTZDRDtBQUFBOztBQUNSOW5CLFVBQUUwRyxNQUFGLEVBQVU2RyxFQUFWLENBQWEsdUJBQWIsRUFBc0NyTixXQUFXaUYsSUFBWCxDQUFnQkMsUUFBaEIsQ0FBeUIsWUFBTTtBQUNuRSxpQkFBSzBpQixPQUFMO0FBQ0QsU0FGcUMsRUFFbkMsRUFGbUMsQ0FBdEM7QUFHRDs7QUFFRDs7Ozs7O0FBbkRXO0FBQUE7QUFBQSxnQ0F3REQ7QUFDUixZQUFJL0QsS0FBSjs7QUFFQTtBQUNBLGFBQUssSUFBSXRnQixDQUFULElBQWMsS0FBSzBsQixLQUFuQixFQUEwQjtBQUN4QixjQUFHLEtBQUtBLEtBQUwsQ0FBV3hhLGNBQVgsQ0FBMEJsTCxDQUExQixDQUFILEVBQWlDO0FBQy9CLGdCQUFJOGxCLE9BQU8sS0FBS0osS0FBTCxDQUFXMWxCLENBQVgsQ0FBWDtBQUNBLGdCQUFJaUQsT0FBT3lJLFVBQVAsQ0FBa0JvYSxLQUFLdGEsS0FBdkIsRUFBOEJHLE9BQWxDLEVBQTJDO0FBQ3pDMlUsc0JBQVF3RixJQUFSO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFlBQUl4RixLQUFKLEVBQVc7QUFDVCxlQUFLcGIsT0FBTCxDQUFhb2IsTUFBTXlGLElBQW5CO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7O0FBMUVXO0FBQUE7QUFBQSx3Q0ErRU87QUFDaEIsYUFBSyxJQUFJL2xCLENBQVQsSUFBY3ZELFdBQVdnRyxVQUFYLENBQXNCa0ksT0FBcEMsRUFBNkM7QUFDM0MsY0FBSWxPLFdBQVdnRyxVQUFYLENBQXNCa0ksT0FBdEIsQ0FBOEJPLGNBQTlCLENBQTZDbEwsQ0FBN0MsQ0FBSixFQUFxRDtBQUNuRCxnQkFBSXdMLFFBQVEvTyxXQUFXZ0csVUFBWCxDQUFzQmtJLE9BQXRCLENBQThCM0ssQ0FBOUIsQ0FBWjtBQUNBeWxCLHdCQUFZTyxlQUFaLENBQTRCeGEsTUFBTXhPLElBQWxDLElBQTBDd08sTUFBTUwsS0FBaEQ7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQ7Ozs7Ozs7O0FBeEZXO0FBQUE7QUFBQSxxQ0ErRkkzRixPQS9GSixFQStGYTtBQUN0QixZQUFJeWdCLFlBQVksRUFBaEI7QUFDQSxZQUFJUCxLQUFKOztBQUVBLFlBQUksS0FBS2hXLE9BQUwsQ0FBYWdXLEtBQWpCLEVBQXdCO0FBQ3RCQSxrQkFBUSxLQUFLaFcsT0FBTCxDQUFhZ1csS0FBckI7QUFDRCxTQUZELE1BR0s7QUFDSEEsa0JBQVEsS0FBSy9uQixRQUFMLENBQWNDLElBQWQsQ0FBbUIsYUFBbkIsRUFBa0MwaUIsS0FBbEMsQ0FBd0MsVUFBeEMsQ0FBUjtBQUNEOztBQUVELGFBQUssSUFBSXRnQixDQUFULElBQWMwbEIsS0FBZCxFQUFxQjtBQUNuQixjQUFHQSxNQUFNeGEsY0FBTixDQUFxQmxMLENBQXJCLENBQUgsRUFBNEI7QUFDMUIsZ0JBQUk4bEIsT0FBT0osTUFBTTFsQixDQUFOLEVBQVNILEtBQVQsQ0FBZSxDQUFmLEVBQWtCLENBQUMsQ0FBbkIsRUFBc0JXLEtBQXRCLENBQTRCLElBQTVCLENBQVg7QUFDQSxnQkFBSXVsQixPQUFPRCxLQUFLam1CLEtBQUwsQ0FBVyxDQUFYLEVBQWMsQ0FBQyxDQUFmLEVBQWtCd1UsSUFBbEIsQ0FBdUIsRUFBdkIsQ0FBWDtBQUNBLGdCQUFJN0ksUUFBUXNhLEtBQUtBLEtBQUt4bUIsTUFBTCxHQUFjLENBQW5CLENBQVo7O0FBRUEsZ0JBQUltbUIsWUFBWU8sZUFBWixDQUE0QnhhLEtBQTVCLENBQUosRUFBd0M7QUFDdENBLHNCQUFRaWEsWUFBWU8sZUFBWixDQUE0QnhhLEtBQTVCLENBQVI7QUFDRDs7QUFFRHlhLHNCQUFVbm9CLElBQVYsQ0FBZTtBQUNiaW9CLG9CQUFNQSxJQURPO0FBRWJ2YSxxQkFBT0E7QUFGTSxhQUFmO0FBSUQ7QUFDRjs7QUFFRCxhQUFLa2EsS0FBTCxHQUFhTyxTQUFiO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUE5SFc7QUFBQTtBQUFBLDhCQW9JSEYsSUFwSUcsRUFvSUc7QUFDWixZQUFJLEtBQUtKLFdBQUwsS0FBcUJJLElBQXpCLEVBQStCOztBQUUvQixZQUFJcG5CLFFBQVEsSUFBWjtBQUFBLFlBQ0lkLFVBQVUseUJBRGQ7O0FBR0E7QUFDQSxZQUFJLEtBQUtGLFFBQUwsQ0FBYyxDQUFkLEVBQWlCdW9CLFFBQWpCLEtBQThCLEtBQWxDLEVBQXlDO0FBQ3ZDLGVBQUt2b0IsUUFBTCxDQUFjYixJQUFkLENBQW1CLEtBQW5CLEVBQTBCaXBCLElBQTFCLEVBQWdDamMsRUFBaEMsQ0FBbUMsTUFBbkMsRUFBMkMsWUFBVztBQUNwRG5MLGtCQUFNZ25CLFdBQU4sR0FBb0JJLElBQXBCO0FBQ0QsV0FGRCxFQUdDbG9CLE9BSEQsQ0FHU0EsT0FIVDtBQUlEO0FBQ0Q7QUFOQSxhQU9LLElBQUlrb0IsS0FBS3pGLEtBQUwsQ0FBVyx5Q0FBWCxDQUFKLEVBQTJEO0FBQzlELGlCQUFLM2lCLFFBQUwsQ0FBY29OLEdBQWQsQ0FBa0IsRUFBRSxvQkFBb0IsU0FBT2diLElBQVAsR0FBWSxHQUFsQyxFQUFsQixFQUNLbG9CLE9BREwsQ0FDYUEsT0FEYjtBQUVEO0FBQ0Q7QUFKSyxlQUtBO0FBQ0h0QixnQkFBRWtQLEdBQUYsQ0FBTXNhLElBQU4sRUFBWSxVQUFTSSxRQUFULEVBQW1CO0FBQzdCeG5CLHNCQUFNaEIsUUFBTixDQUFleW9CLElBQWYsQ0FBb0JELFFBQXBCLEVBQ010b0IsT0FETixDQUNjQSxPQURkO0FBRUF0QixrQkFBRTRwQixRQUFGLEVBQVlubkIsVUFBWjtBQUNBTCxzQkFBTWduQixXQUFOLEdBQW9CSSxJQUFwQjtBQUNELGVBTEQ7QUFNRDs7QUFFRDs7OztBQUlBO0FBQ0Q7O0FBRUQ7Ozs7O0FBdktXO0FBQUE7QUFBQSxnQ0EyS0Q7QUFDUjtBQUNEO0FBN0tVOztBQUFBO0FBQUE7O0FBZ0xiOzs7OztBQUdBTixjQUFZL1AsUUFBWixHQUF1QjtBQUNyQjs7OztBQUlBZ1EsV0FBTztBQUxjLEdBQXZCOztBQVFBRCxjQUFZTyxlQUFaLEdBQThCO0FBQzVCLGlCQUFhLHFDQURlO0FBRTVCLGdCQUFZLG9DQUZnQjtBQUc1QixjQUFVO0FBSGtCLEdBQTlCOztBQU1BO0FBQ0F2cEIsYUFBV00sTUFBWCxDQUFrQjBvQixXQUFsQixFQUErQixhQUEvQjtBQUVDLENBcE1BLENBb01DdGdCLE1BcE1ELENBQUQ7Q0NGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNUksQ0FBVCxFQUFZOztBQUViOzs7OztBQUZhLE1BT1A4cEIsUUFQTztBQVFYOzs7Ozs7O0FBT0Esc0JBQVk3Z0IsT0FBWixFQUFxQmtLLE9BQXJCLEVBQThCO0FBQUE7O0FBQzVCLFdBQUsvUixRQUFMLEdBQWdCNkgsT0FBaEI7QUFDQSxXQUFLa0ssT0FBTCxHQUFnQm5ULEVBQUV5TSxNQUFGLENBQVMsRUFBVCxFQUFhcWQsU0FBUzNRLFFBQXRCLEVBQWdDLEtBQUsvWCxRQUFMLENBQWNDLElBQWQsRUFBaEMsRUFBc0Q4UixPQUF0RCxDQUFoQjs7QUFFQSxXQUFLalIsS0FBTDtBQUNBLFdBQUs2bkIsVUFBTDs7QUFFQTdwQixpQkFBV1ksY0FBWCxDQUEwQixJQUExQixFQUFnQyxVQUFoQztBQUNEOztBQUVEOzs7Ozs7QUF6Qlc7QUFBQTtBQUFBLDhCQTZCSDtBQUNOLFlBQUkrTyxLQUFLLEtBQUt6TyxRQUFMLENBQWMsQ0FBZCxFQUFpQnlPLEVBQWpCLElBQXVCM1AsV0FBV2lCLFdBQVgsQ0FBdUIsQ0FBdkIsRUFBMEIsVUFBMUIsQ0FBaEM7QUFDQSxZQUFJaUIsUUFBUSxJQUFaO0FBQ0EsYUFBSzRuQixRQUFMLEdBQWdCaHFCLEVBQUUsd0JBQUYsQ0FBaEI7QUFDQSxhQUFLaXFCLE1BQUwsR0FBYyxLQUFLN29CLFFBQUwsQ0FBY3VDLElBQWQsQ0FBbUIsR0FBbkIsQ0FBZDtBQUNBLGFBQUt2QyxRQUFMLENBQWNiLElBQWQsQ0FBbUI7QUFDakIseUJBQWVzUCxFQURFO0FBRWpCLHlCQUFlQSxFQUZFO0FBR2pCLGdCQUFNQTtBQUhXLFNBQW5CO0FBS0EsYUFBS3FhLE9BQUwsR0FBZWxxQixHQUFmO0FBQ0EsYUFBS3dpQixTQUFMLEdBQWlCQyxTQUFTL2IsT0FBTzhELFdBQWhCLEVBQTZCLEVBQTdCLENBQWpCOztBQUVBLGFBQUs2TyxPQUFMO0FBQ0Q7O0FBRUQ7Ozs7OztBQTdDVztBQUFBO0FBQUEsbUNBa0RFO0FBQ1gsWUFBSWpYLFFBQVEsSUFBWjtBQUFBLFlBQ0lrSSxPQUFPMUYsU0FBUzBGLElBRHBCO0FBQUEsWUFFSXVmLE9BQU9qbEIsU0FBU3VQLGVBRnBCOztBQUlBLGFBQUtnVyxNQUFMLEdBQWMsRUFBZDtBQUNBLGFBQUtDLFNBQUwsR0FBaUJubkIsS0FBS0MsS0FBTCxDQUFXRCxLQUFLd0UsR0FBTCxDQUFTZixPQUFPMmpCLFdBQWhCLEVBQTZCUixLQUFLUyxZQUFsQyxDQUFYLENBQWpCO0FBQ0EsYUFBS0MsU0FBTCxHQUFpQnRuQixLQUFLQyxLQUFMLENBQVdELEtBQUt3RSxHQUFMLENBQVM2QyxLQUFLa2dCLFlBQWQsRUFBNEJsZ0IsS0FBS21lLFlBQWpDLEVBQStDb0IsS0FBS1MsWUFBcEQsRUFBa0VULEtBQUtXLFlBQXZFLEVBQXFGWCxLQUFLcEIsWUFBMUYsQ0FBWCxDQUFqQjs7QUFFQSxhQUFLdUIsUUFBTCxDQUFjL25CLElBQWQsQ0FBbUIsWUFBVTtBQUMzQixjQUFJd29CLE9BQU96cUIsRUFBRSxJQUFGLENBQVg7QUFBQSxjQUNJMHFCLEtBQUt6bkIsS0FBS0MsS0FBTCxDQUFXdW5CLEtBQUs5Z0IsTUFBTCxHQUFjTCxHQUFkLEdBQW9CbEgsTUFBTStRLE9BQU4sQ0FBY3dYLFNBQTdDLENBRFQ7QUFFQUYsZUFBS0csV0FBTCxHQUFtQkYsRUFBbkI7QUFDQXRvQixnQkFBTStuQixNQUFOLENBQWE1b0IsSUFBYixDQUFrQm1wQixFQUFsQjtBQUNELFNBTEQ7QUFNRDs7QUFFRDs7Ozs7QUFuRVc7QUFBQTtBQUFBLGdDQXVFRDtBQUNSLFlBQUl0b0IsUUFBUSxJQUFaO0FBQUEsWUFDSTJmLFFBQVEvaEIsRUFBRSxZQUFGLENBRFo7QUFBQSxZQUVJOEQsT0FBTztBQUNMeU4sb0JBQVVuUCxNQUFNK1EsT0FBTixDQUFjd1AsaUJBRG5CO0FBRUxrSSxrQkFBVXpvQixNQUFNK1EsT0FBTixDQUFjeVA7QUFGbkIsU0FGWDtBQU1BNWlCLFVBQUUwRyxNQUFGLEVBQVV5TCxHQUFWLENBQWMsTUFBZCxFQUFzQixZQUFVO0FBQzlCLGNBQUcvUCxNQUFNK1EsT0FBTixDQUFjMlgsV0FBakIsRUFBNkI7QUFDM0IsZ0JBQUdDLFNBQVNDLElBQVosRUFBaUI7QUFDZjVvQixvQkFBTTZvQixXQUFOLENBQWtCRixTQUFTQyxJQUEzQjtBQUNEO0FBQ0Y7QUFDRDVvQixnQkFBTTJuQixVQUFOO0FBQ0EzbkIsZ0JBQU04b0IsYUFBTjtBQUNELFNBUkQ7O0FBVUEsYUFBSzlwQixRQUFMLENBQWNtTSxFQUFkLENBQWlCO0FBQ2YsaUNBQXVCLEtBQUtoSyxNQUFMLENBQVl1RSxJQUFaLENBQWlCLElBQWpCLENBRFI7QUFFZixpQ0FBdUIsS0FBS29qQixhQUFMLENBQW1CcGpCLElBQW5CLENBQXdCLElBQXhCO0FBRlIsU0FBakIsRUFHR3lGLEVBSEgsQ0FHTSxtQkFITixFQUcyQixjQUgzQixFQUcyQyxVQUFTckosQ0FBVCxFQUFZO0FBQ25EQSxZQUFFdUosY0FBRjtBQUNBLGNBQUkwZCxVQUFZLEtBQUtDLFlBQUwsQ0FBa0IsTUFBbEIsQ0FBaEI7QUFDQWhwQixnQkFBTTZvQixXQUFOLENBQWtCRSxPQUFsQjtBQUNELFNBUEg7QUFRQW5yQixVQUFFMEcsTUFBRixFQUFVNkcsRUFBVixDQUFhLFVBQWIsRUFBeUIsVUFBU3JKLENBQVQsRUFBWTtBQUNuQyxjQUFHOUIsTUFBTStRLE9BQU4sQ0FBYzJYLFdBQWpCLEVBQThCO0FBQzVCMW9CLGtCQUFNNm9CLFdBQU4sQ0FBa0J2a0IsT0FBT3FrQixRQUFQLENBQWdCQyxJQUFsQztBQUNEO0FBQ0YsU0FKRDtBQUtEOztBQUVEOzs7Ozs7QUF2R1c7QUFBQTtBQUFBLGtDQTRHQ0ssR0E1R0QsRUE0R007QUFDZjtBQUNBLFlBQUksQ0FBQ3JyQixFQUFFcXJCLEdBQUYsRUFBT3RvQixNQUFaLEVBQW9CO0FBQUMsaUJBQU8sS0FBUDtBQUFjO0FBQ25DLGFBQUt1b0IsYUFBTCxHQUFxQixJQUFyQjtBQUNBLFlBQUlscEIsUUFBUSxJQUFaO0FBQUEsWUFDSW9nQixZQUFZdmYsS0FBS0MsS0FBTCxDQUFXbEQsRUFBRXFyQixHQUFGLEVBQU8xaEIsTUFBUCxHQUFnQkwsR0FBaEIsR0FBc0IsS0FBSzZKLE9BQUwsQ0FBYXdYLFNBQWIsR0FBeUIsQ0FBL0MsR0FBbUQsS0FBS3hYLE9BQUwsQ0FBYW9ZLFNBQTNFLENBRGhCOztBQUdBdnJCLFVBQUUsWUFBRixFQUFnQmdmLElBQWhCLENBQXFCLElBQXJCLEVBQTJCNU4sT0FBM0IsQ0FDRSxFQUFFK1EsV0FBV0ssU0FBYixFQURGLEVBRUUsS0FBS3JQLE9BQUwsQ0FBYXdQLGlCQUZmLEVBR0UsS0FBS3hQLE9BQUwsQ0FBYXlQLGVBSGYsRUFJRSxZQUFXO0FBQUN4Z0IsZ0JBQU1rcEIsYUFBTixHQUFzQixLQUF0QixDQUE2QmxwQixNQUFNOG9CLGFBQU47QUFBc0IsU0FKakU7QUFNRDs7QUFFRDs7Ozs7QUEzSFc7QUFBQTtBQUFBLCtCQStIRjtBQUNQLGFBQUtuQixVQUFMO0FBQ0EsYUFBS21CLGFBQUw7QUFDRDs7QUFFRDs7Ozs7OztBQXBJVztBQUFBO0FBQUEsc0NBMElHLHdCQUEwQjtBQUN0QyxZQUFHLEtBQUtJLGFBQVIsRUFBdUI7QUFBQztBQUFRO0FBQ2hDLFlBQUlFLFNBQVMsZ0JBQWlCL0ksU0FBUy9iLE9BQU84RCxXQUFoQixFQUE2QixFQUE3QixDQUE5QjtBQUFBLFlBQ0lpaEIsTUFESjs7QUFHQSxZQUFHRCxTQUFTLEtBQUtwQixTQUFkLEtBQTRCLEtBQUtHLFNBQXBDLEVBQThDO0FBQUVrQixtQkFBUyxLQUFLdEIsTUFBTCxDQUFZcG5CLE1BQVosR0FBcUIsQ0FBOUI7QUFBa0MsU0FBbEYsTUFDSyxJQUFHeW9CLFNBQVMsS0FBS3JCLE1BQUwsQ0FBWSxDQUFaLENBQVosRUFBMkI7QUFBRXNCLG1CQUFTbGxCLFNBQVQ7QUFBcUIsU0FBbEQsTUFDRDtBQUNGLGNBQUltbEIsU0FBUyxLQUFLbEosU0FBTCxHQUFpQmdKLE1BQTlCO0FBQUEsY0FDSXBwQixRQUFRLElBRFo7QUFBQSxjQUVJdXBCLGFBQWEsS0FBS3hCLE1BQUwsQ0FBWXJkLE1BQVosQ0FBbUIsVUFBU3RLLENBQVQsRUFBWWlCLENBQVosRUFBYztBQUM1QyxtQkFBT2lvQixTQUFTbHBCLElBQUlKLE1BQU0rUSxPQUFOLENBQWNvWSxTQUFsQixJQUErQkMsTUFBeEMsR0FBaURocEIsSUFBSUosTUFBTStRLE9BQU4sQ0FBY29ZLFNBQWxCLEdBQThCbnBCLE1BQU0rUSxPQUFOLENBQWN3WCxTQUE1QyxJQUF5RGEsTUFBakg7QUFDRCxXQUZZLENBRmpCO0FBS0FDLG1CQUFTRSxXQUFXNW9CLE1BQVgsR0FBb0I0b0IsV0FBVzVvQixNQUFYLEdBQW9CLENBQXhDLEdBQTRDLENBQXJEO0FBQ0Q7O0FBRUQsYUFBS21uQixPQUFMLENBQWFqa0IsV0FBYixDQUF5QixLQUFLa04sT0FBTCxDQUFhckIsV0FBdEM7QUFDQSxhQUFLb1ksT0FBTCxHQUFlLEtBQUtELE1BQUwsQ0FBWW5kLE1BQVosQ0FBbUIsYUFBYSxLQUFLa2QsUUFBTCxDQUFjM2MsRUFBZCxDQUFpQm9lLE1BQWpCLEVBQXlCcHFCLElBQXpCLENBQThCLGlCQUE5QixDQUFiLEdBQWdFLElBQW5GLEVBQXlGMlEsUUFBekYsQ0FBa0csS0FBS21CLE9BQUwsQ0FBYXJCLFdBQS9HLENBQWY7O0FBRUEsWUFBRyxLQUFLcUIsT0FBTCxDQUFhMlgsV0FBaEIsRUFBNEI7QUFDMUIsY0FBSUUsT0FBTyxFQUFYO0FBQ0EsY0FBR1MsVUFBVWxsQixTQUFiLEVBQXVCO0FBQ3JCeWtCLG1CQUFPLEtBQUtkLE9BQUwsQ0FBYSxDQUFiLEVBQWdCa0IsWUFBaEIsQ0FBNkIsTUFBN0IsQ0FBUDtBQUNEO0FBQ0QsY0FBR0osU0FBU3RrQixPQUFPcWtCLFFBQVAsQ0FBZ0JDLElBQTVCLEVBQWtDO0FBQ2hDLGdCQUFHdGtCLE9BQU9rbEIsT0FBUCxDQUFlQyxTQUFsQixFQUE0QjtBQUMxQm5sQixxQkFBT2tsQixPQUFQLENBQWVDLFNBQWYsQ0FBeUIsSUFBekIsRUFBK0IsSUFBL0IsRUFBcUNiLElBQXJDO0FBQ0QsYUFGRCxNQUVLO0FBQ0h0a0IscUJBQU9xa0IsUUFBUCxDQUFnQkMsSUFBaEIsR0FBdUJBLElBQXZCO0FBQ0Q7QUFDRjtBQUNGOztBQUVELGFBQUt4SSxTQUFMLEdBQWlCZ0osTUFBakI7QUFDQTs7OztBQUlBLGFBQUtwcUIsUUFBTCxDQUFjRSxPQUFkLENBQXNCLG9CQUF0QixFQUE0QyxDQUFDLEtBQUs0b0IsT0FBTixDQUE1QztBQUNEOztBQUVEOzs7OztBQW5MVztBQUFBO0FBQUEsZ0NBdUxEO0FBQ1IsYUFBSzlvQixRQUFMLENBQWN3TSxHQUFkLENBQWtCLDBCQUFsQixFQUNLakssSUFETCxPQUNjLEtBQUt3UCxPQUFMLENBQWFyQixXQUQzQixFQUMwQzdMLFdBRDFDLENBQ3NELEtBQUtrTixPQUFMLENBQWFyQixXQURuRTs7QUFHQSxZQUFHLEtBQUtxQixPQUFMLENBQWEyWCxXQUFoQixFQUE0QjtBQUMxQixjQUFJRSxPQUFPLEtBQUtkLE9BQUwsQ0FBYSxDQUFiLEVBQWdCa0IsWUFBaEIsQ0FBNkIsTUFBN0IsQ0FBWDtBQUNBMWtCLGlCQUFPcWtCLFFBQVAsQ0FBZ0JDLElBQWhCLENBQXFCcmlCLE9BQXJCLENBQTZCcWlCLElBQTdCLEVBQW1DLEVBQW5DO0FBQ0Q7O0FBRUQ5cUIsbUJBQVdzQixnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBak1VOztBQUFBO0FBQUE7O0FBb01iOzs7OztBQUdBc29CLFdBQVMzUSxRQUFULEdBQW9CO0FBQ2xCOzs7OztBQUtBd0osdUJBQW1CLEdBTkQ7QUFPbEI7Ozs7O0FBS0FDLHFCQUFpQixRQVpDO0FBYWxCOzs7OztBQUtBK0gsZUFBVyxFQWxCTztBQW1CbEI7Ozs7O0FBS0E3WSxpQkFBYSxRQXhCSztBQXlCbEI7Ozs7O0FBS0FnWixpQkFBYSxLQTlCSztBQStCbEI7Ozs7O0FBS0FTLGVBQVc7QUFwQ08sR0FBcEI7O0FBdUNBO0FBQ0FyckIsYUFBV00sTUFBWCxDQUFrQnNwQixRQUFsQixFQUE0QixVQUE1QjtBQUVDLENBalBBLENBaVBDbGhCLE1BalBELENBQUQ7Q0NGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNUksQ0FBVCxFQUFZOztBQUViOzs7Ozs7OztBQUZhLE1BVVA4ckIsU0FWTztBQVdYOzs7Ozs7O0FBT0EsdUJBQVk3aUIsT0FBWixFQUFxQmtLLE9BQXJCLEVBQThCO0FBQUE7O0FBQzVCLFdBQUsvUixRQUFMLEdBQWdCNkgsT0FBaEI7QUFDQSxXQUFLa0ssT0FBTCxHQUFlblQsRUFBRXlNLE1BQUYsQ0FBUyxFQUFULEVBQWFxZixVQUFVM1MsUUFBdkIsRUFBaUMsS0FBSy9YLFFBQUwsQ0FBY0MsSUFBZCxFQUFqQyxFQUF1RDhSLE9BQXZELENBQWY7QUFDQSxXQUFLNFksWUFBTCxHQUFvQi9yQixHQUFwQjtBQUNBLFdBQUtnc0IsU0FBTCxHQUFpQmhzQixHQUFqQjs7QUFFQSxXQUFLa0MsS0FBTDtBQUNBLFdBQUttWCxPQUFMOztBQUVBblosaUJBQVdZLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsV0FBaEM7QUFDQVosaUJBQVdtTCxRQUFYLENBQW9CMkIsUUFBcEIsQ0FBNkIsV0FBN0IsRUFBMEM7QUFDeEMsa0JBQVU7QUFEOEIsT0FBMUM7QUFJRDs7QUFFRDs7Ozs7OztBQWxDVztBQUFBO0FBQUEsOEJBdUNIO0FBQ04sWUFBSTZDLEtBQUssS0FBS3pPLFFBQUwsQ0FBY2IsSUFBZCxDQUFtQixJQUFuQixDQUFUOztBQUVBLGFBQUthLFFBQUwsQ0FBY2IsSUFBZCxDQUFtQixhQUFuQixFQUFrQyxNQUFsQzs7QUFFQSxhQUFLYSxRQUFMLENBQWM0USxRQUFkLG9CQUF3QyxLQUFLbUIsT0FBTCxDQUFhOFksVUFBckQ7O0FBRUE7QUFDQSxhQUFLRCxTQUFMLEdBQWlCaHNCLEVBQUU0RSxRQUFGLEVBQ2RqQixJQURjLENBQ1QsaUJBQWVrTSxFQUFmLEdBQWtCLG1CQUFsQixHQUFzQ0EsRUFBdEMsR0FBeUMsb0JBQXpDLEdBQThEQSxFQUE5RCxHQUFpRSxJQUR4RCxFQUVkdFAsSUFGYyxDQUVULGVBRlMsRUFFUSxPQUZSLEVBR2RBLElBSGMsQ0FHVCxlQUhTLEVBR1FzUCxFQUhSLENBQWpCOztBQUtBO0FBQ0EsWUFBSSxLQUFLc0QsT0FBTCxDQUFhK1ksY0FBYixLQUFnQyxJQUFwQyxFQUEwQztBQUN4QyxjQUFJQyxVQUFVdm5CLFNBQVNDLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBZDtBQUNBLGNBQUl1bkIsa0JBQWtCcHNCLEVBQUUsS0FBS29CLFFBQVAsRUFBaUJvTixHQUFqQixDQUFxQixVQUFyQixNQUFxQyxPQUFyQyxHQUErQyxrQkFBL0MsR0FBb0UscUJBQTFGO0FBQ0EyZCxrQkFBUUUsWUFBUixDQUFxQixPQUFyQixFQUE4QiwyQkFBMkJELGVBQXpEO0FBQ0EsZUFBS0UsUUFBTCxHQUFnQnRzQixFQUFFbXNCLE9BQUYsQ0FBaEI7QUFDQSxjQUFHQyxvQkFBb0Isa0JBQXZCLEVBQTJDO0FBQ3pDcHNCLGNBQUUsTUFBRixFQUFVb2hCLE1BQVYsQ0FBaUIsS0FBS2tMLFFBQXRCO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsaUJBQUtsckIsUUFBTCxDQUFjMlksUUFBZCxDQUF1QiwyQkFBdkIsRUFBb0RxSCxNQUFwRCxDQUEyRCxLQUFLa0wsUUFBaEU7QUFDRDtBQUNGOztBQUVELGFBQUtuWixPQUFMLENBQWFvWixVQUFiLEdBQTBCLEtBQUtwWixPQUFMLENBQWFvWixVQUFiLElBQTJCLElBQUlyUSxNQUFKLENBQVcsS0FBSy9JLE9BQUwsQ0FBYXFaLFdBQXhCLEVBQXFDLEdBQXJDLEVBQTBDcmxCLElBQTFDLENBQStDLEtBQUsvRixRQUFMLENBQWMsQ0FBZCxFQUFpQlYsU0FBaEUsQ0FBckQ7O0FBRUEsWUFBSSxLQUFLeVMsT0FBTCxDQUFhb1osVUFBYixLQUE0QixJQUFoQyxFQUFzQztBQUNwQyxlQUFLcFosT0FBTCxDQUFhc1osUUFBYixHQUF3QixLQUFLdFosT0FBTCxDQUFhc1osUUFBYixJQUF5QixLQUFLcnJCLFFBQUwsQ0FBYyxDQUFkLEVBQWlCVixTQUFqQixDQUEyQnFqQixLQUEzQixDQUFpQyx1Q0FBakMsRUFBMEUsQ0FBMUUsRUFBNkU5ZixLQUE3RSxDQUFtRixHQUFuRixFQUF3RixDQUF4RixDQUFqRDtBQUNBLGVBQUt5b0IsYUFBTDtBQUNEO0FBQ0QsWUFBSSxDQUFDLEtBQUt2WixPQUFMLENBQWF3WixjQUFkLEtBQWlDLElBQXJDLEVBQTJDO0FBQ3pDLGVBQUt4WixPQUFMLENBQWF3WixjQUFiLEdBQThCamtCLFdBQVdoQyxPQUFPcUosZ0JBQVAsQ0FBd0IvUCxFQUFFLG1CQUFGLEVBQXVCLENBQXZCLENBQXhCLEVBQW1Ec1Msa0JBQTlELElBQW9GLElBQWxIO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7O0FBNUVXO0FBQUE7QUFBQSxnQ0FpRkQ7QUFDUixhQUFLbFIsUUFBTCxDQUFjd00sR0FBZCxDQUFrQiwyQkFBbEIsRUFBK0NMLEVBQS9DLENBQWtEO0FBQ2hELDZCQUFtQixLQUFLc1MsSUFBTCxDQUFVL1gsSUFBVixDQUFlLElBQWYsQ0FENkI7QUFFaEQsOEJBQW9CLEtBQUtnWSxLQUFMLENBQVdoWSxJQUFYLENBQWdCLElBQWhCLENBRjRCO0FBR2hELCtCQUFxQixLQUFLbVcsTUFBTCxDQUFZblcsSUFBWixDQUFpQixJQUFqQixDQUgyQjtBQUloRCxrQ0FBd0IsS0FBSzhrQixlQUFMLENBQXFCOWtCLElBQXJCLENBQTBCLElBQTFCO0FBSndCLFNBQWxEOztBQU9BLFlBQUksS0FBS3FMLE9BQUwsQ0FBYTJPLFlBQWIsS0FBOEIsSUFBbEMsRUFBd0M7QUFDdEMsY0FBSXZKLFVBQVUsS0FBS3BGLE9BQUwsQ0FBYStZLGNBQWIsR0FBOEIsS0FBS0ksUUFBbkMsR0FBOEN0c0IsRUFBRSwyQkFBRixDQUE1RDtBQUNBdVksa0JBQVFoTCxFQUFSLENBQVcsRUFBQyxzQkFBc0IsS0FBS3VTLEtBQUwsQ0FBV2hZLElBQVgsQ0FBZ0IsSUFBaEIsQ0FBdkIsRUFBWDtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7O0FBL0ZXO0FBQUE7QUFBQSxzQ0FtR0s7QUFDZCxZQUFJMUYsUUFBUSxJQUFaOztBQUVBcEMsVUFBRTBHLE1BQUYsRUFBVTZHLEVBQVYsQ0FBYSx1QkFBYixFQUFzQyxZQUFXO0FBQy9DLGNBQUlyTixXQUFXZ0csVUFBWCxDQUFzQjZJLE9BQXRCLENBQThCM00sTUFBTStRLE9BQU4sQ0FBY3NaLFFBQTVDLENBQUosRUFBMkQ7QUFDekRycUIsa0JBQU15cUIsTUFBTixDQUFhLElBQWI7QUFDRCxXQUZELE1BRU87QUFDTHpxQixrQkFBTXlxQixNQUFOLENBQWEsS0FBYjtBQUNEO0FBQ0YsU0FORCxFQU1HMWEsR0FOSCxDQU1PLG1CQU5QLEVBTTRCLFlBQVc7QUFDckMsY0FBSWpTLFdBQVdnRyxVQUFYLENBQXNCNkksT0FBdEIsQ0FBOEIzTSxNQUFNK1EsT0FBTixDQUFjc1osUUFBNUMsQ0FBSixFQUEyRDtBQUN6RHJxQixrQkFBTXlxQixNQUFOLENBQWEsSUFBYjtBQUNEO0FBQ0YsU0FWRDtBQVdEOztBQUVEOzs7Ozs7QUFuSFc7QUFBQTtBQUFBLDZCQXdISk4sVUF4SEksRUF3SFE7QUFDakIsWUFBSU8sVUFBVSxLQUFLMXJCLFFBQUwsQ0FBY3VDLElBQWQsQ0FBbUIsY0FBbkIsQ0FBZDtBQUNBLFlBQUk0b0IsVUFBSixFQUFnQjtBQUNkLGVBQUt6TSxLQUFMO0FBQ0EsZUFBS3lNLFVBQUwsR0FBa0IsSUFBbEI7QUFDQSxlQUFLbnJCLFFBQUwsQ0FBY2IsSUFBZCxDQUFtQixhQUFuQixFQUFrQyxPQUFsQztBQUNBLGVBQUthLFFBQUwsQ0FBY3dNLEdBQWQsQ0FBa0IsbUNBQWxCO0FBQ0EsY0FBSWtmLFFBQVEvcEIsTUFBWixFQUFvQjtBQUFFK3BCLG9CQUFRemEsSUFBUjtBQUFpQjtBQUN4QyxTQU5ELE1BTU87QUFDTCxlQUFLa2EsVUFBTCxHQUFrQixLQUFsQjtBQUNBLGVBQUtuckIsUUFBTCxDQUFjYixJQUFkLENBQW1CLGFBQW5CLEVBQWtDLE1BQWxDO0FBQ0EsZUFBS2EsUUFBTCxDQUFjbU0sRUFBZCxDQUFpQjtBQUNmLCtCQUFtQixLQUFLc1MsSUFBTCxDQUFVL1gsSUFBVixDQUFlLElBQWYsQ0FESjtBQUVmLGlDQUFxQixLQUFLbVcsTUFBTCxDQUFZblcsSUFBWixDQUFpQixJQUFqQjtBQUZOLFdBQWpCO0FBSUEsY0FBSWdsQixRQUFRL3BCLE1BQVosRUFBb0I7QUFDbEIrcEIsb0JBQVE3YSxJQUFSO0FBQ0Q7QUFDRjtBQUNGOztBQUVEOzs7OztBQTdJVztBQUFBO0FBQUEscUNBaUpJekcsS0FqSkosRUFpSlc7QUFDckIsZUFBTyxLQUFQO0FBQ0E7O0FBRUQ7Ozs7Ozs7O0FBckpXO0FBQUE7QUFBQSwyQkE0Sk5BLEtBNUpNLEVBNEpDbEssT0E1SkQsRUE0SlU7QUFDbkIsWUFBSSxLQUFLRixRQUFMLENBQWNtZCxRQUFkLENBQXVCLFNBQXZCLEtBQXFDLEtBQUtnTyxVQUE5QyxFQUEwRDtBQUFFO0FBQVM7QUFDckUsWUFBSW5xQixRQUFRLElBQVo7O0FBRUEsWUFBSWQsT0FBSixFQUFhO0FBQ1gsZUFBS3lxQixZQUFMLEdBQW9CenFCLE9BQXBCO0FBQ0Q7O0FBRUQsWUFBSSxLQUFLNlIsT0FBTCxDQUFhNFosT0FBYixLQUF5QixLQUE3QixFQUFvQztBQUNsQ3JtQixpQkFBT3NtQixRQUFQLENBQWdCLENBQWhCLEVBQW1CLENBQW5CO0FBQ0QsU0FGRCxNQUVPLElBQUksS0FBSzdaLE9BQUwsQ0FBYTRaLE9BQWIsS0FBeUIsUUFBN0IsRUFBdUM7QUFDNUNybUIsaUJBQU9zbUIsUUFBUCxDQUFnQixDQUFoQixFQUFrQnBvQixTQUFTMEYsSUFBVCxDQUFja2dCLFlBQWhDO0FBQ0Q7O0FBRUQ7Ozs7QUFJQXBvQixjQUFNaEIsUUFBTixDQUFlNFEsUUFBZixDQUF3QixTQUF4Qjs7QUFFQSxhQUFLZ2EsU0FBTCxDQUFlenJCLElBQWYsQ0FBb0IsZUFBcEIsRUFBcUMsTUFBckM7QUFDQSxhQUFLYSxRQUFMLENBQWNiLElBQWQsQ0FBbUIsYUFBbkIsRUFBa0MsT0FBbEMsRUFDS2UsT0FETCxDQUNhLHFCQURiOztBQUdBO0FBQ0EsWUFBSSxLQUFLNlIsT0FBTCxDQUFhOFosYUFBYixLQUErQixLQUFuQyxFQUEwQztBQUN4Q2p0QixZQUFFLE1BQUYsRUFBVWdTLFFBQVYsQ0FBbUIsb0JBQW5CLEVBQXlDekUsRUFBekMsQ0FBNEMsV0FBNUMsRUFBeUQsS0FBSzJmLGNBQTlEO0FBQ0Q7O0FBRUQsWUFBSSxLQUFLL1osT0FBTCxDQUFhK1ksY0FBYixLQUFnQyxJQUFwQyxFQUEwQztBQUN4QyxlQUFLSSxRQUFMLENBQWN0YSxRQUFkLENBQXVCLFlBQXZCO0FBQ0Q7O0FBRUQsWUFBSSxLQUFLbUIsT0FBTCxDQUFhMk8sWUFBYixLQUE4QixJQUE5QixJQUFzQyxLQUFLM08sT0FBTCxDQUFhK1ksY0FBYixLQUFnQyxJQUExRSxFQUFnRjtBQUM5RSxlQUFLSSxRQUFMLENBQWN0YSxRQUFkLENBQXVCLGFBQXZCO0FBQ0Q7O0FBRUQsWUFBSSxLQUFLbUIsT0FBTCxDQUFhNFIsU0FBYixLQUEyQixJQUEvQixFQUFxQztBQUNuQyxlQUFLM2pCLFFBQUwsQ0FBYytRLEdBQWQsQ0FBa0JqUyxXQUFXd0UsYUFBWCxDQUF5QixLQUFLdEQsUUFBOUIsQ0FBbEIsRUFBMkQsWUFBVztBQUNwRWdCLGtCQUFNaEIsUUFBTixDQUFldUMsSUFBZixDQUFvQixXQUFwQixFQUFpQzBKLEVBQWpDLENBQW9DLENBQXBDLEVBQXVDSyxLQUF2QztBQUNELFdBRkQ7QUFHRDs7QUFFRCxZQUFJLEtBQUt5RixPQUFMLENBQWFqRyxTQUFiLEtBQTJCLElBQS9CLEVBQXFDO0FBQ25DLGVBQUs5TCxRQUFMLENBQWMyWSxRQUFkLENBQXVCLDJCQUF2QixFQUFvRHhaLElBQXBELENBQXlELFVBQXpELEVBQXFFLElBQXJFO0FBQ0FMLHFCQUFXbUwsUUFBWCxDQUFvQjZCLFNBQXBCLENBQThCLEtBQUs5TCxRQUFuQztBQUNEO0FBQ0Y7O0FBRUQ7Ozs7Ozs7QUE3TVc7QUFBQTtBQUFBLDRCQW1OTCtQLEVBbk5LLEVBbU5EO0FBQ1IsWUFBSSxDQUFDLEtBQUsvUCxRQUFMLENBQWNtZCxRQUFkLENBQXVCLFNBQXZCLENBQUQsSUFBc0MsS0FBS2dPLFVBQS9DLEVBQTJEO0FBQUU7QUFBUzs7QUFFdEUsWUFBSW5xQixRQUFRLElBQVo7O0FBRUFBLGNBQU1oQixRQUFOLENBQWU2RSxXQUFmLENBQTJCLFNBQTNCOztBQUVBLGFBQUs3RSxRQUFMLENBQWNiLElBQWQsQ0FBbUIsYUFBbkIsRUFBa0MsTUFBbEM7QUFDRTs7OztBQURGLFNBS0tlLE9BTEwsQ0FLYSxxQkFMYjs7QUFPQTtBQUNBLFlBQUksS0FBSzZSLE9BQUwsQ0FBYThaLGFBQWIsS0FBK0IsS0FBbkMsRUFBMEM7QUFDeENqdEIsWUFBRSxNQUFGLEVBQVVpRyxXQUFWLENBQXNCLG9CQUF0QixFQUE0QzJILEdBQTVDLENBQWdELFdBQWhELEVBQTZELEtBQUtzZixjQUFsRTtBQUNEOztBQUVELFlBQUksS0FBSy9aLE9BQUwsQ0FBYStZLGNBQWIsS0FBZ0MsSUFBcEMsRUFBMEM7QUFDeEMsZUFBS0ksUUFBTCxDQUFjcm1CLFdBQWQsQ0FBMEIsWUFBMUI7QUFDRDs7QUFFRCxZQUFJLEtBQUtrTixPQUFMLENBQWEyTyxZQUFiLEtBQThCLElBQTlCLElBQXNDLEtBQUszTyxPQUFMLENBQWErWSxjQUFiLEtBQWdDLElBQTFFLEVBQWdGO0FBQzlFLGVBQUtJLFFBQUwsQ0FBY3JtQixXQUFkLENBQTBCLGFBQTFCO0FBQ0Q7O0FBRUQsYUFBSytsQixTQUFMLENBQWV6ckIsSUFBZixDQUFvQixlQUFwQixFQUFxQyxPQUFyQzs7QUFFQSxZQUFJLEtBQUs0UyxPQUFMLENBQWFqRyxTQUFiLEtBQTJCLElBQS9CLEVBQXFDO0FBQ25DLGVBQUs5TCxRQUFMLENBQWMyWSxRQUFkLENBQXVCLDJCQUF2QixFQUFvRHBZLFVBQXBELENBQStELFVBQS9EO0FBQ0F6QixxQkFBV21MLFFBQVgsQ0FBb0JzQyxZQUFwQixDQUFpQyxLQUFLdk0sUUFBdEM7QUFDRDtBQUNGOztBQUVEOzs7Ozs7O0FBdFBXO0FBQUE7QUFBQSw2QkE0UEpvSyxLQTVQSSxFQTRQR2xLLE9BNVBILEVBNFBZO0FBQ3JCLFlBQUksS0FBS0YsUUFBTCxDQUFjbWQsUUFBZCxDQUF1QixTQUF2QixDQUFKLEVBQXVDO0FBQ3JDLGVBQUt1QixLQUFMLENBQVd0VSxLQUFYLEVBQWtCbEssT0FBbEI7QUFDRCxTQUZELE1BR0s7QUFDSCxlQUFLdWUsSUFBTCxDQUFVclUsS0FBVixFQUFpQmxLLE9BQWpCO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7O0FBclFXO0FBQUE7QUFBQSxzQ0EwUUs0QyxDQTFRTCxFQTBRUTtBQUFBOztBQUNqQmhFLG1CQUFXbUwsUUFBWCxDQUFvQmEsU0FBcEIsQ0FBOEJoSSxDQUE5QixFQUFpQyxXQUFqQyxFQUE4QztBQUM1QzRiLGlCQUFPLFlBQU07QUFDWCxtQkFBS0EsS0FBTDtBQUNBLG1CQUFLaU0sWUFBTCxDQUFrQnJlLEtBQWxCO0FBQ0EsbUJBQU8sSUFBUDtBQUNELFdBTDJDO0FBTTVDZixtQkFBUyxZQUFNO0FBQ2J6SSxjQUFFaVQsZUFBRjtBQUNBalQsY0FBRXVKLGNBQUY7QUFDRDtBQVQyQyxTQUE5QztBQVdEOztBQUVEOzs7OztBQXhSVztBQUFBO0FBQUEsZ0NBNFJEO0FBQ1IsYUFBS3FTLEtBQUw7QUFDQSxhQUFLMWUsUUFBTCxDQUFjd00sR0FBZCxDQUFrQiwyQkFBbEI7QUFDQSxhQUFLMGUsUUFBTCxDQUFjMWUsR0FBZCxDQUFrQixlQUFsQjs7QUFFQTFOLG1CQUFXc0IsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDtBQWxTVTs7QUFBQTtBQUFBOztBQXFTYnNxQixZQUFVM1MsUUFBVixHQUFxQjtBQUNuQjs7Ozs7QUFLQTJJLGtCQUFjLElBTks7O0FBUW5COzs7OztBQUtBb0ssb0JBQWdCLElBYkc7O0FBZW5COzs7OztBQUtBZSxtQkFBZSxJQXBCSTs7QUFzQm5COzs7OztBQUtBTixvQkFBZ0IsQ0EzQkc7O0FBNkJuQjs7Ozs7QUFLQVYsZ0JBQVksTUFsQ087O0FBb0NuQjs7Ozs7QUFLQWMsYUFBUyxJQXpDVTs7QUEyQ25COzs7OztBQUtBUixnQkFBWSxLQWhETzs7QUFrRG5COzs7OztBQUtBRSxjQUFVLElBdkRTOztBQXlEbkI7Ozs7O0FBS0ExSCxlQUFXLElBOURROztBQWdFbkI7Ozs7OztBQU1BeUgsaUJBQWEsYUF0RU07O0FBd0VuQjs7Ozs7QUFLQXRmLGVBQVc7QUE3RVEsR0FBckI7O0FBZ0ZBO0FBQ0FoTixhQUFXTSxNQUFYLENBQWtCc3JCLFNBQWxCLEVBQTZCLFdBQTdCO0FBRUMsQ0F4WEEsQ0F3WENsakIsTUF4WEQsQ0FBRDtDQ0ZBOzs7Ozs7QUFFQSxDQUFDLFVBQVM1SSxDQUFULEVBQVk7O0FBRWI7Ozs7Ozs7OztBQUZhLE1BV1BtdEIsS0FYTztBQVlYOzs7Ozs7QUFNQSxtQkFBWWxrQixPQUFaLEVBQXFCa0ssT0FBckIsRUFBNkI7QUFBQTs7QUFDM0IsV0FBSy9SLFFBQUwsR0FBZ0I2SCxPQUFoQjtBQUNBLFdBQUtrSyxPQUFMLEdBQWVuVCxFQUFFeU0sTUFBRixDQUFTLEVBQVQsRUFBYTBnQixNQUFNaFUsUUFBbkIsRUFBNkIsS0FBSy9YLFFBQUwsQ0FBY0MsSUFBZCxFQUE3QixFQUFtRDhSLE9BQW5ELENBQWY7O0FBRUEsV0FBS2pSLEtBQUw7O0FBRUFoQyxpQkFBV1ksY0FBWCxDQUEwQixJQUExQixFQUFnQyxPQUFoQztBQUNBWixpQkFBV21MLFFBQVgsQ0FBb0IyQixRQUFwQixDQUE2QixPQUE3QixFQUFzQztBQUNwQyxlQUFPO0FBQ0wseUJBQWUsTUFEVjtBQUVMLHdCQUFjO0FBRlQsU0FENkI7QUFLcEMsZUFBTztBQUNMLHdCQUFjLE1BRFQ7QUFFTCx5QkFBZTtBQUZWO0FBTDZCLE9BQXRDO0FBVUQ7O0FBRUQ7Ozs7Ozs7QUFyQ1c7QUFBQTtBQUFBLDhCQTBDSDtBQUNOO0FBQ0EsYUFBS29nQixNQUFMOztBQUVBLGFBQUszTCxRQUFMLEdBQWdCLEtBQUtyZ0IsUUFBTCxDQUFjdUMsSUFBZCxPQUF1QixLQUFLd1AsT0FBTCxDQUFha2EsY0FBcEMsQ0FBaEI7QUFDQSxhQUFLQyxPQUFMLEdBQWUsS0FBS2xzQixRQUFMLENBQWN1QyxJQUFkLE9BQXVCLEtBQUt3UCxPQUFMLENBQWFvYSxVQUFwQyxDQUFmOztBQUVBLFlBQUlDLFVBQVUsS0FBS3BzQixRQUFMLENBQWN1QyxJQUFkLENBQW1CLEtBQW5CLENBQWQ7QUFBQSxZQUNJOHBCLGFBQWEsS0FBS0gsT0FBTCxDQUFheGdCLE1BQWIsQ0FBb0IsWUFBcEIsQ0FEakI7QUFBQSxZQUVJK0MsS0FBSyxLQUFLek8sUUFBTCxDQUFjLENBQWQsRUFBaUJ5TyxFQUFqQixJQUF1QjNQLFdBQVdpQixXQUFYLENBQXVCLENBQXZCLEVBQTBCLE9BQTFCLENBRmhDOztBQUlBLGFBQUtDLFFBQUwsQ0FBY2IsSUFBZCxDQUFtQjtBQUNqQix5QkFBZXNQLEVBREU7QUFFakIsZ0JBQU1BO0FBRlcsU0FBbkI7O0FBS0EsWUFBSSxDQUFDNGQsV0FBVzFxQixNQUFoQixFQUF3QjtBQUN0QixlQUFLdXFCLE9BQUwsQ0FBYWpnQixFQUFiLENBQWdCLENBQWhCLEVBQW1CMkUsUUFBbkIsQ0FBNEIsV0FBNUI7QUFDRDs7QUFFRCxZQUFJLENBQUMsS0FBS21CLE9BQUwsQ0FBYXVhLE1BQWxCLEVBQTBCO0FBQ3hCLGVBQUtKLE9BQUwsQ0FBYXRiLFFBQWIsQ0FBc0IsYUFBdEI7QUFDRDs7QUFFRCxZQUFJd2IsUUFBUXpxQixNQUFaLEVBQW9CO0FBQ2xCN0MscUJBQVd3VCxjQUFYLENBQTBCOFosT0FBMUIsRUFBbUMsS0FBS0csZ0JBQUwsQ0FBc0I3bEIsSUFBdEIsQ0FBMkIsSUFBM0IsQ0FBbkM7QUFDRCxTQUZELE1BRU87QUFDTCxlQUFLNmxCLGdCQUFMLEdBREssQ0FDbUI7QUFDekI7O0FBRUQsWUFBSSxLQUFLeGEsT0FBTCxDQUFheWEsT0FBakIsRUFBMEI7QUFDeEIsZUFBS0MsWUFBTDtBQUNEOztBQUVELGFBQUt4VSxPQUFMOztBQUVBLFlBQUksS0FBS2xHLE9BQUwsQ0FBYTJhLFFBQWIsSUFBeUIsS0FBS1IsT0FBTCxDQUFhdnFCLE1BQWIsR0FBc0IsQ0FBbkQsRUFBc0Q7QUFDcEQsZUFBS2dyQixPQUFMO0FBQ0Q7O0FBRUQsWUFBSSxLQUFLNWEsT0FBTCxDQUFhNmEsVUFBakIsRUFBNkI7QUFBRTtBQUM3QixlQUFLdk0sUUFBTCxDQUFjbGhCLElBQWQsQ0FBbUIsVUFBbkIsRUFBK0IsQ0FBL0I7QUFDRDtBQUNGOztBQUVEOzs7Ozs7QUF2Rlc7QUFBQTtBQUFBLHFDQTRGSTtBQUNiLGFBQUswdEIsUUFBTCxHQUFnQixLQUFLN3NCLFFBQUwsQ0FBY3VDLElBQWQsT0FBdUIsS0FBS3dQLE9BQUwsQ0FBYSthLFlBQXBDLEVBQW9EdnFCLElBQXBELENBQXlELFFBQXpELENBQWhCO0FBQ0Q7O0FBRUQ7Ozs7O0FBaEdXO0FBQUE7QUFBQSxnQ0FvR0Q7QUFDUixZQUFJdkIsUUFBUSxJQUFaO0FBQ0EsYUFBS21ELEtBQUwsR0FBYSxJQUFJckYsV0FBV2dULEtBQWYsQ0FDWCxLQUFLOVIsUUFETSxFQUVYO0FBQ0VtUSxvQkFBVSxLQUFLNEIsT0FBTCxDQUFhZ2IsVUFEekI7QUFFRTNhLG9CQUFVO0FBRlosU0FGVyxFQU1YLFlBQVc7QUFDVHBSLGdCQUFNZ3NCLFdBQU4sQ0FBa0IsSUFBbEI7QUFDRCxTQVJVLENBQWI7QUFTQSxhQUFLN29CLEtBQUwsQ0FBV3FDLEtBQVg7QUFDRDs7QUFFRDs7Ozs7O0FBbEhXO0FBQUE7QUFBQSx5Q0F1SFE7QUFDakIsWUFBSXhGLFFBQVEsSUFBWjtBQUNBLGFBQUtpc0IsaUJBQUw7QUFDRDs7QUFFRDs7Ozs7OztBQTVIVztBQUFBO0FBQUEsd0NBa0lPbGQsRUFsSVAsRUFrSVc7QUFBQztBQUNyQixZQUFJMUosTUFBTSxDQUFWO0FBQUEsWUFBYTZtQixJQUFiO0FBQUEsWUFBbUIxSyxVQUFVLENBQTdCO0FBQUEsWUFBZ0N4aEIsUUFBUSxJQUF4Qzs7QUFFQSxhQUFLa3JCLE9BQUwsQ0FBYXJyQixJQUFiLENBQWtCLFlBQVc7QUFDM0Jxc0IsaUJBQU8sS0FBS3BrQixxQkFBTCxHQUE2Qk4sTUFBcEM7QUFDQTVKLFlBQUUsSUFBRixFQUFRTyxJQUFSLENBQWEsWUFBYixFQUEyQnFqQixPQUEzQjs7QUFFQSxjQUFJeGhCLE1BQU1rckIsT0FBTixDQUFjeGdCLE1BQWQsQ0FBcUIsWUFBckIsRUFBbUMsQ0FBbkMsTUFBMEMxSyxNQUFNa3JCLE9BQU4sQ0FBY2pnQixFQUFkLENBQWlCdVcsT0FBakIsRUFBMEIsQ0FBMUIsQ0FBOUMsRUFBNEU7QUFBQztBQUMzRTVqQixjQUFFLElBQUYsRUFBUXdPLEdBQVIsQ0FBWSxFQUFDLFlBQVksVUFBYixFQUF5QixXQUFXLE1BQXBDLEVBQVo7QUFDRDtBQUNEL0csZ0JBQU02bUIsT0FBTzdtQixHQUFQLEdBQWE2bUIsSUFBYixHQUFvQjdtQixHQUExQjtBQUNBbWM7QUFDRCxTQVREOztBQVdBLFlBQUlBLFlBQVksS0FBSzBKLE9BQUwsQ0FBYXZxQixNQUE3QixFQUFxQztBQUNuQyxlQUFLMGUsUUFBTCxDQUFjalQsR0FBZCxDQUFrQixFQUFDLFVBQVUvRyxHQUFYLEVBQWxCLEVBRG1DLENBQ0M7QUFDcEMsY0FBRzBKLEVBQUgsRUFBTztBQUFDQSxlQUFHMUosR0FBSDtBQUFTLFdBRmtCLENBRWpCO0FBQ25CO0FBQ0Y7O0FBRUQ7Ozs7OztBQXRKVztBQUFBO0FBQUEsc0NBMkpLbUMsTUEzSkwsRUEySmE7QUFDdEIsYUFBSzBqQixPQUFMLENBQWFyckIsSUFBYixDQUFrQixZQUFXO0FBQzNCakMsWUFBRSxJQUFGLEVBQVF3TyxHQUFSLENBQVksWUFBWixFQUEwQjVFLE1BQTFCO0FBQ0QsU0FGRDtBQUdEOztBQUVEOzs7Ozs7QUFqS1c7QUFBQTtBQUFBLGdDQXNLRDtBQUNSLFlBQUl4SCxRQUFRLElBQVo7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUtoQixRQUFMLENBQWN3TSxHQUFkLENBQWtCLHNCQUFsQixFQUEwQ0wsRUFBMUMsQ0FBNkM7QUFDM0MsaUNBQXVCLEtBQUtvZ0IsZ0JBQUwsQ0FBc0I3bEIsSUFBdEIsQ0FBMkIsSUFBM0I7QUFEb0IsU0FBN0M7QUFHQSxZQUFJLEtBQUt3bEIsT0FBTCxDQUFhdnFCLE1BQWIsR0FBc0IsQ0FBMUIsRUFBNkI7O0FBRTNCLGNBQUksS0FBS29RLE9BQUwsQ0FBYXlDLEtBQWpCLEVBQXdCO0FBQ3RCLGlCQUFLMFgsT0FBTCxDQUFhMWYsR0FBYixDQUFpQix3Q0FBakIsRUFDQ0wsRUFERCxDQUNJLG9CQURKLEVBQzBCLFVBQVNySixDQUFULEVBQVc7QUFDbkNBLGdCQUFFdUosY0FBRjtBQUNBckwsb0JBQU1nc0IsV0FBTixDQUFrQixJQUFsQjtBQUNELGFBSkQsRUFJRzdnQixFQUpILENBSU0scUJBSk4sRUFJNkIsVUFBU3JKLENBQVQsRUFBVztBQUN0Q0EsZ0JBQUV1SixjQUFGO0FBQ0FyTCxvQkFBTWdzQixXQUFOLENBQWtCLEtBQWxCO0FBQ0QsYUFQRDtBQVFEO0FBQ0Q7O0FBRUEsY0FBSSxLQUFLamIsT0FBTCxDQUFhMmEsUUFBakIsRUFBMkI7QUFDekIsaUJBQUtSLE9BQUwsQ0FBYS9mLEVBQWIsQ0FBZ0IsZ0JBQWhCLEVBQWtDLFlBQVc7QUFDM0NuTCxvQkFBTWhCLFFBQU4sQ0FBZUMsSUFBZixDQUFvQixXQUFwQixFQUFpQ2UsTUFBTWhCLFFBQU4sQ0FBZUMsSUFBZixDQUFvQixXQUFwQixJQUFtQyxLQUFuQyxHQUEyQyxJQUE1RTtBQUNBZSxvQkFBTW1ELEtBQU4sQ0FBWW5ELE1BQU1oQixRQUFOLENBQWVDLElBQWYsQ0FBb0IsV0FBcEIsSUFBbUMsT0FBbkMsR0FBNkMsT0FBekQ7QUFDRCxhQUhEOztBQUtBLGdCQUFJLEtBQUs4UixPQUFMLENBQWFvYixZQUFqQixFQUErQjtBQUM3QixtQkFBS250QixRQUFMLENBQWNtTSxFQUFkLENBQWlCLHFCQUFqQixFQUF3QyxZQUFXO0FBQ2pEbkwsc0JBQU1tRCxLQUFOLENBQVlrTyxLQUFaO0FBQ0QsZUFGRCxFQUVHbEcsRUFGSCxDQUVNLHFCQUZOLEVBRTZCLFlBQVc7QUFDdEMsb0JBQUksQ0FBQ25MLE1BQU1oQixRQUFOLENBQWVDLElBQWYsQ0FBb0IsV0FBcEIsQ0FBTCxFQUF1QztBQUNyQ2Usd0JBQU1tRCxLQUFOLENBQVlxQyxLQUFaO0FBQ0Q7QUFDRixlQU5EO0FBT0Q7QUFDRjs7QUFFRCxjQUFJLEtBQUt1TCxPQUFMLENBQWFxYixVQUFqQixFQUE2QjtBQUMzQixnQkFBSUMsWUFBWSxLQUFLcnRCLFFBQUwsQ0FBY3VDLElBQWQsT0FBdUIsS0FBS3dQLE9BQUwsQ0FBYXViLFNBQXBDLFdBQW1ELEtBQUt2YixPQUFMLENBQWF3YixTQUFoRSxDQUFoQjtBQUNBRixzQkFBVWx1QixJQUFWLENBQWUsVUFBZixFQUEyQixDQUEzQjtBQUNBO0FBREEsYUFFQ2dOLEVBRkQsQ0FFSSxrQ0FGSixFQUV3QyxVQUFTckosQ0FBVCxFQUFXO0FBQ3hEQSxnQkFBRXVKLGNBQUY7QUFDT3JMLG9CQUFNZ3NCLFdBQU4sQ0FBa0JwdUIsRUFBRSxJQUFGLEVBQVF1ZSxRQUFSLENBQWlCbmMsTUFBTStRLE9BQU4sQ0FBY3ViLFNBQS9CLENBQWxCO0FBQ0QsYUFMRDtBQU1EOztBQUVELGNBQUksS0FBS3ZiLE9BQUwsQ0FBYXlhLE9BQWpCLEVBQTBCO0FBQ3hCLGlCQUFLSyxRQUFMLENBQWMxZ0IsRUFBZCxDQUFpQixrQ0FBakIsRUFBcUQsWUFBVztBQUM5RCxrQkFBSSxhQUFhcEcsSUFBYixDQUFrQixLQUFLekcsU0FBdkIsQ0FBSixFQUF1QztBQUFFLHVCQUFPLEtBQVA7QUFBZSxlQURNLENBQ047QUFDeEQsa0JBQUlpZCxNQUFNM2QsRUFBRSxJQUFGLEVBQVFxQixJQUFSLENBQWEsT0FBYixDQUFWO0FBQUEsa0JBQ0FtTCxNQUFNbVIsTUFBTXZiLE1BQU1rckIsT0FBTixDQUFjeGdCLE1BQWQsQ0FBcUIsWUFBckIsRUFBbUN6TCxJQUFuQyxDQUF3QyxPQUF4QyxDQURaO0FBQUEsa0JBRUF1dEIsU0FBU3hzQixNQUFNa3JCLE9BQU4sQ0FBY2pnQixFQUFkLENBQWlCc1EsR0FBakIsQ0FGVDs7QUFJQXZiLG9CQUFNZ3NCLFdBQU4sQ0FBa0I1aEIsR0FBbEIsRUFBdUJvaUIsTUFBdkIsRUFBK0JqUixHQUEvQjtBQUNELGFBUEQ7QUFRRDs7QUFFRCxjQUFJLEtBQUt4SyxPQUFMLENBQWE2YSxVQUFqQixFQUE2QjtBQUMzQixpQkFBS3ZNLFFBQUwsQ0FBY3RCLEdBQWQsQ0FBa0IsS0FBSzhOLFFBQXZCLEVBQWlDMWdCLEVBQWpDLENBQW9DLGtCQUFwQyxFQUF3RCxVQUFTckosQ0FBVCxFQUFZO0FBQ2xFO0FBQ0FoRSx5QkFBV21MLFFBQVgsQ0FBb0JhLFNBQXBCLENBQThCaEksQ0FBOUIsRUFBaUMsT0FBakMsRUFBMEM7QUFDeENnYSxzQkFBTSxZQUFXO0FBQ2Y5Yix3QkFBTWdzQixXQUFOLENBQWtCLElBQWxCO0FBQ0QsaUJBSHVDO0FBSXhDL1AsMEJBQVUsWUFBVztBQUNuQmpjLHdCQUFNZ3NCLFdBQU4sQ0FBa0IsS0FBbEI7QUFDRCxpQkFOdUM7QUFPeEN6aEIseUJBQVMsWUFBVztBQUFFO0FBQ3BCLHNCQUFJM00sRUFBRWtFLEVBQUVzSixNQUFKLEVBQVlULEVBQVosQ0FBZTNLLE1BQU02ckIsUUFBckIsQ0FBSixFQUFvQztBQUNsQzdyQiwwQkFBTTZyQixRQUFOLENBQWVuaEIsTUFBZixDQUFzQixZQUF0QixFQUFvQ1ksS0FBcEM7QUFDRDtBQUNGO0FBWHVDLGVBQTFDO0FBYUQsYUFmRDtBQWdCRDtBQUNGO0FBQ0Y7O0FBRUQ7Ozs7QUExUFc7QUFBQTtBQUFBLCtCQTZQRjtBQUNQO0FBQ0EsWUFBSSxPQUFPLEtBQUs0ZixPQUFaLElBQXVCLFdBQTNCLEVBQXdDO0FBQ3RDO0FBQ0Q7O0FBRUQsWUFBSSxLQUFLQSxPQUFMLENBQWF2cUIsTUFBYixHQUFzQixDQUExQixFQUE2QjtBQUMzQjtBQUNBLGVBQUszQixRQUFMLENBQWN3TSxHQUFkLENBQWtCLFdBQWxCLEVBQStCakssSUFBL0IsQ0FBb0MsR0FBcEMsRUFBeUNpSyxHQUF6QyxDQUE2QyxXQUE3Qzs7QUFFQTtBQUNBLGNBQUksS0FBS3VGLE9BQUwsQ0FBYTJhLFFBQWpCLEVBQTJCO0FBQ3pCLGlCQUFLdm9CLEtBQUwsQ0FBV2dPLE9BQVg7QUFDRDs7QUFFRDtBQUNBLGVBQUsrWixPQUFMLENBQWFyckIsSUFBYixDQUFrQixVQUFTb0MsRUFBVCxFQUFhO0FBQzdCckUsY0FBRXFFLEVBQUYsRUFBTTRCLFdBQU4sQ0FBa0IsMkJBQWxCLEVBQ0d0RSxVQURILENBQ2MsV0FEZCxFQUVHMFEsSUFGSDtBQUdELFdBSkQ7O0FBTUE7QUFDQSxlQUFLaWIsT0FBTCxDQUFhcFgsS0FBYixHQUFxQmxFLFFBQXJCLENBQThCLFdBQTlCLEVBQTJDQyxJQUEzQzs7QUFFQTtBQUNBLGVBQUs3USxRQUFMLENBQWNFLE9BQWQsQ0FBc0Isc0JBQXRCLEVBQThDLENBQUMsS0FBS2dzQixPQUFMLENBQWFwWCxLQUFiLEVBQUQsQ0FBOUM7O0FBRUE7QUFDQSxjQUFJLEtBQUsvQyxPQUFMLENBQWF5YSxPQUFqQixFQUEwQjtBQUN4QixpQkFBS2lCLGNBQUwsQ0FBb0IsQ0FBcEI7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQ7Ozs7Ozs7OztBQWhTVztBQUFBO0FBQUEsa0NBd1NDQyxLQXhTRCxFQXdTUUMsV0F4U1IsRUF3U3FCcFIsR0F4U3JCLEVBd1MwQjtBQUNuQyxZQUFJLENBQUMsS0FBSzJQLE9BQVYsRUFBbUI7QUFBQztBQUFTLFNBRE0sQ0FDTDtBQUM5QixZQUFJMEIsWUFBWSxLQUFLMUIsT0FBTCxDQUFheGdCLE1BQWIsQ0FBb0IsWUFBcEIsRUFBa0NPLEVBQWxDLENBQXFDLENBQXJDLENBQWhCOztBQUVBLFlBQUksT0FBT2xHLElBQVAsQ0FBWTZuQixVQUFVLENBQVYsRUFBYXR1QixTQUF6QixDQUFKLEVBQXlDO0FBQUUsaUJBQU8sS0FBUDtBQUFlLFNBSnZCLENBSXdCOztBQUUzRCxZQUFJdXVCLGNBQWMsS0FBSzNCLE9BQUwsQ0FBYXBYLEtBQWIsRUFBbEI7QUFBQSxZQUNBZ1osYUFBYSxLQUFLNUIsT0FBTCxDQUFhNkIsSUFBYixFQURiO0FBQUEsWUFFQUMsUUFBUU4sUUFBUSxPQUFSLEdBQWtCLE1BRjFCO0FBQUEsWUFHQU8sU0FBU1AsUUFBUSxNQUFSLEdBQWlCLE9BSDFCO0FBQUEsWUFJQTFzQixRQUFRLElBSlI7QUFBQSxZQUtBa3RCLFNBTEE7O0FBT0EsWUFBSSxDQUFDUCxXQUFMLEVBQWtCO0FBQUU7QUFDbEJPLHNCQUFZUixRQUFRO0FBQ25CLGVBQUszYixPQUFMLENBQWFvYyxZQUFiLEdBQTRCUCxVQUFVOVEsSUFBVixPQUFtQixLQUFLL0ssT0FBTCxDQUFhb2EsVUFBaEMsRUFBOEN4cUIsTUFBOUMsR0FBdURpc0IsVUFBVTlRLElBQVYsT0FBbUIsS0FBSy9LLE9BQUwsQ0FBYW9hLFVBQWhDLENBQXZELEdBQXVHMEIsV0FBbkksR0FBaUpELFVBQVU5USxJQUFWLE9BQW1CLEtBQUsvSyxPQUFMLENBQWFvYSxVQUFoQyxDQUR0SSxHQUNvTDtBQUUvTCxlQUFLcGEsT0FBTCxDQUFhb2MsWUFBYixHQUE0QlAsVUFBVTFRLElBQVYsT0FBbUIsS0FBS25MLE9BQUwsQ0FBYW9hLFVBQWhDLEVBQThDeHFCLE1BQTlDLEdBQXVEaXNCLFVBQVUxUSxJQUFWLE9BQW1CLEtBQUtuTCxPQUFMLENBQWFvYSxVQUFoQyxDQUF2RCxHQUF1RzJCLFVBQW5JLEdBQWdKRixVQUFVMVEsSUFBVixPQUFtQixLQUFLbkwsT0FBTCxDQUFhb2EsVUFBaEMsQ0FIakosQ0FEZ0IsQ0FJZ0w7QUFDak0sU0FMRCxNQUtPO0FBQ0wrQixzQkFBWVAsV0FBWjtBQUNEOztBQUVELFlBQUlPLFVBQVV2c0IsTUFBZCxFQUFzQjtBQUNwQjs7OztBQUlBLGVBQUszQixRQUFMLENBQWNFLE9BQWQsQ0FBc0IsNEJBQXRCLEVBQW9ELENBQUMwdEIsU0FBRCxFQUFZTSxTQUFaLENBQXBEOztBQUVBLGNBQUksS0FBS25jLE9BQUwsQ0FBYXlhLE9BQWpCLEVBQTBCO0FBQ3hCalEsa0JBQU1BLE9BQU8sS0FBSzJQLE9BQUwsQ0FBYWpILEtBQWIsQ0FBbUJpSixTQUFuQixDQUFiLENBRHdCLENBQ29CO0FBQzVDLGlCQUFLVCxjQUFMLENBQW9CbFIsR0FBcEI7QUFDRDs7QUFFRCxjQUFJLEtBQUt4SyxPQUFMLENBQWF1YSxNQUFiLElBQXVCLENBQUMsS0FBS3RzQixRQUFMLENBQWMyTCxFQUFkLENBQWlCLFNBQWpCLENBQTVCLEVBQXlEO0FBQ3ZEN00sdUJBQVc4USxNQUFYLENBQWtCQyxTQUFsQixDQUNFcWUsVUFBVXRkLFFBQVYsQ0FBbUIsV0FBbkIsRUFBZ0N4RCxHQUFoQyxDQUFvQyxFQUFDLFlBQVksVUFBYixFQUF5QixPQUFPLENBQWhDLEVBQXBDLENBREYsRUFFRSxLQUFLMkUsT0FBTCxnQkFBMEJpYyxLQUExQixDQUZGLEVBR0UsWUFBVTtBQUNSRSx3QkFBVTlnQixHQUFWLENBQWMsRUFBQyxZQUFZLFVBQWIsRUFBeUIsV0FBVyxPQUFwQyxFQUFkLEVBQ0NqTyxJQURELENBQ00sV0FETixFQUNtQixRQURuQjtBQUVILGFBTkQ7O0FBUUFMLHVCQUFXOFEsTUFBWCxDQUFrQkssVUFBbEIsQ0FDRTJkLFVBQVUvb0IsV0FBVixDQUFzQixXQUF0QixDQURGLEVBRUUsS0FBS2tOLE9BQUwsZUFBeUJrYyxNQUF6QixDQUZGLEVBR0UsWUFBVTtBQUNSTCx3QkFBVXJ0QixVQUFWLENBQXFCLFdBQXJCO0FBQ0Esa0JBQUdTLE1BQU0rUSxPQUFOLENBQWMyYSxRQUFkLElBQTBCLENBQUMxckIsTUFBTW1ELEtBQU4sQ0FBWStOLFFBQTFDLEVBQW1EO0FBQ2pEbFIsc0JBQU1tRCxLQUFOLENBQVlnTyxPQUFaO0FBQ0Q7QUFDRDtBQUNELGFBVEg7QUFVRCxXQW5CRCxNQW1CTztBQUNMeWIsc0JBQVUvb0IsV0FBVixDQUFzQixpQkFBdEIsRUFBeUN0RSxVQUF6QyxDQUFvRCxXQUFwRCxFQUFpRTBRLElBQWpFO0FBQ0FpZCxzQkFBVXRkLFFBQVYsQ0FBbUIsaUJBQW5CLEVBQXNDelIsSUFBdEMsQ0FBMkMsV0FBM0MsRUFBd0QsUUFBeEQsRUFBa0UwUixJQUFsRTtBQUNBLGdCQUFJLEtBQUtrQixPQUFMLENBQWEyYSxRQUFiLElBQXlCLENBQUMsS0FBS3ZvQixLQUFMLENBQVcrTixRQUF6QyxFQUFtRDtBQUNqRCxtQkFBSy9OLEtBQUwsQ0FBV2dPLE9BQVg7QUFDRDtBQUNGO0FBQ0g7Ozs7QUFJRSxlQUFLblMsUUFBTCxDQUFjRSxPQUFkLENBQXNCLHNCQUF0QixFQUE4QyxDQUFDZ3VCLFNBQUQsQ0FBOUM7QUFDRDtBQUNGOztBQUVEOzs7Ozs7O0FBNVdXO0FBQUE7QUFBQSxxQ0FrWEkzUixHQWxYSixFQWtYUztBQUNsQixZQUFJNlIsYUFBYSxLQUFLcHVCLFFBQUwsQ0FBY3VDLElBQWQsT0FBdUIsS0FBS3dQLE9BQUwsQ0FBYSthLFlBQXBDLEVBQ2hCdnFCLElBRGdCLENBQ1gsWUFEVyxFQUNHc0MsV0FESCxDQUNlLFdBRGYsRUFDNEI4YyxJQUQ1QixFQUFqQjtBQUFBLFlBRUEwTSxPQUFPRCxXQUFXN3JCLElBQVgsQ0FBZ0IsV0FBaEIsRUFBNkIrckIsTUFBN0IsRUFGUDtBQUFBLFlBR0FDLGFBQWEsS0FBSzFCLFFBQUwsQ0FBYzVnQixFQUFkLENBQWlCc1EsR0FBakIsRUFBc0IzTCxRQUF0QixDQUErQixXQUEvQixFQUE0Q29QLE1BQTVDLENBQW1EcU8sSUFBbkQsQ0FIYjtBQUlEOztBQUVEOzs7OztBQXpYVztBQUFBO0FBQUEsZ0NBNlhEO0FBQ1IsYUFBS3J1QixRQUFMLENBQWN3TSxHQUFkLENBQWtCLFdBQWxCLEVBQStCakssSUFBL0IsQ0FBb0MsR0FBcEMsRUFBeUNpSyxHQUF6QyxDQUE2QyxXQUE3QyxFQUEwRDlJLEdBQTFELEdBQWdFdU4sSUFBaEU7QUFDQW5TLG1CQUFXc0IsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDtBQWhZVTs7QUFBQTtBQUFBOztBQW1ZYjJyQixRQUFNaFUsUUFBTixHQUFpQjtBQUNmOzs7OztBQUtBeVUsYUFBUyxJQU5NO0FBT2Y7Ozs7O0FBS0FZLGdCQUFZLElBWkc7QUFhZjs7Ozs7QUFLQW9CLHFCQUFpQixnQkFsQkY7QUFtQmY7Ozs7O0FBS0FDLG9CQUFnQixpQkF4QkQ7QUF5QmY7Ozs7OztBQU1BQyxvQkFBZ0IsZUEvQkQ7QUFnQ2Y7Ozs7O0FBS0FDLG1CQUFlLGdCQXJDQTtBQXNDZjs7Ozs7QUFLQWpDLGNBQVUsSUEzQ0s7QUE0Q2Y7Ozs7O0FBS0FLLGdCQUFZLElBakRHO0FBa0RmOzs7OztBQUtBb0Isa0JBQWMsSUF2REM7QUF3RGY7Ozs7O0FBS0EzWixXQUFPLElBN0RRO0FBOERmOzs7OztBQUtBMlksa0JBQWMsSUFuRUM7QUFvRWY7Ozs7O0FBS0FQLGdCQUFZLElBekVHO0FBMEVmOzs7OztBQUtBWCxvQkFBZ0IsaUJBL0VEO0FBZ0ZmOzs7OztBQUtBRSxnQkFBWSxhQXJGRztBQXNGZjs7Ozs7QUFLQVcsa0JBQWMsZUEzRkM7QUE0RmY7Ozs7O0FBS0FRLGVBQVcsWUFqR0k7QUFrR2Y7Ozs7O0FBS0FDLGVBQVcsZ0JBdkdJO0FBd0dmOzs7OztBQUtBakIsWUFBUTtBQTdHTyxHQUFqQjs7QUFnSEE7QUFDQXh0QixhQUFXTSxNQUFYLENBQWtCMnNCLEtBQWxCLEVBQXlCLE9BQXpCO0FBRUMsQ0F0ZkEsQ0FzZkN2a0IsTUF0ZkQsQ0FBRDtDQ0ZBOzs7Ozs7QUFFQSxDQUFDLFVBQVM1SSxDQUFULEVBQVk7O0FBRWI7Ozs7Ozs7Ozs7QUFGYSxNQVlQZ3dCLGNBWk87QUFhWDs7Ozs7OztBQU9BLDRCQUFZL21CLE9BQVosRUFBcUJrSyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLL1IsUUFBTCxHQUFnQnBCLEVBQUVpSixPQUFGLENBQWhCO0FBQ0EsV0FBS2tnQixLQUFMLEdBQWEsS0FBSy9uQixRQUFMLENBQWNDLElBQWQsQ0FBbUIsaUJBQW5CLENBQWI7QUFDQSxXQUFLNHVCLFNBQUwsR0FBaUIsSUFBakI7QUFDQSxXQUFLQyxhQUFMLEdBQXFCLElBQXJCOztBQUVBLFdBQUtodUIsS0FBTDtBQUNBLFdBQUttWCxPQUFMOztBQUVBblosaUJBQVdZLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsZ0JBQWhDO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUFoQ1c7QUFBQTtBQUFBLDhCQXFDSDtBQUNOO0FBQ0EsWUFBSSxPQUFPLEtBQUtxb0IsS0FBWixLQUFzQixRQUExQixFQUFvQztBQUNsQyxjQUFJZ0gsWUFBWSxFQUFoQjs7QUFFQTtBQUNBLGNBQUloSCxRQUFRLEtBQUtBLEtBQUwsQ0FBV2xsQixLQUFYLENBQWlCLEdBQWpCLENBQVo7O0FBRUE7QUFDQSxlQUFLLElBQUlSLElBQUksQ0FBYixFQUFnQkEsSUFBSTBsQixNQUFNcG1CLE1BQTFCLEVBQWtDVSxHQUFsQyxFQUF1QztBQUNyQyxnQkFBSThsQixPQUFPSixNQUFNMWxCLENBQU4sRUFBU1EsS0FBVCxDQUFlLEdBQWYsQ0FBWDtBQUNBLGdCQUFJbXNCLFdBQVc3RyxLQUFLeG1CLE1BQUwsR0FBYyxDQUFkLEdBQWtCd21CLEtBQUssQ0FBTCxDQUFsQixHQUE0QixPQUEzQztBQUNBLGdCQUFJOEcsYUFBYTlHLEtBQUt4bUIsTUFBTCxHQUFjLENBQWQsR0FBa0J3bUIsS0FBSyxDQUFMLENBQWxCLEdBQTRCQSxLQUFLLENBQUwsQ0FBN0M7O0FBRUEsZ0JBQUkrRyxZQUFZRCxVQUFaLE1BQTRCLElBQWhDLEVBQXNDO0FBQ3BDRix3QkFBVUMsUUFBVixJQUFzQkUsWUFBWUQsVUFBWixDQUF0QjtBQUNEO0FBQ0Y7O0FBRUQsZUFBS2xILEtBQUwsR0FBYWdILFNBQWI7QUFDRDs7QUFFRCxZQUFJLENBQUNud0IsRUFBRXV3QixhQUFGLENBQWdCLEtBQUtwSCxLQUFyQixDQUFMLEVBQWtDO0FBQ2hDLGVBQUtxSCxrQkFBTDtBQUNEO0FBQ0Q7QUFDQSxhQUFLcHZCLFFBQUwsQ0FBY2IsSUFBZCxDQUFtQixhQUFuQixFQUFtQyxLQUFLYSxRQUFMLENBQWNiLElBQWQsQ0FBbUIsYUFBbkIsS0FBcUNMLFdBQVdpQixXQUFYLENBQXVCLENBQXZCLEVBQTBCLGlCQUExQixDQUF4RTtBQUNEOztBQUVEOzs7Ozs7QUFsRVc7QUFBQTtBQUFBLGdDQXVFRDtBQUNSLFlBQUlpQixRQUFRLElBQVo7O0FBRUFwQyxVQUFFMEcsTUFBRixFQUFVNkcsRUFBVixDQUFhLHVCQUFiLEVBQXNDLFlBQVc7QUFDL0NuTCxnQkFBTW91QixrQkFBTjtBQUNELFNBRkQ7QUFHQTtBQUNBO0FBQ0E7QUFDRDs7QUFFRDs7Ozs7O0FBbEZXO0FBQUE7QUFBQSwyQ0F1RlU7QUFDbkIsWUFBSUMsU0FBSjtBQUFBLFlBQWVydUIsUUFBUSxJQUF2QjtBQUNBO0FBQ0FwQyxVQUFFaUMsSUFBRixDQUFPLEtBQUtrbkIsS0FBWixFQUFtQixVQUFTMWQsR0FBVCxFQUFjO0FBQy9CLGNBQUl2TCxXQUFXZ0csVUFBWCxDQUFzQjZJLE9BQXRCLENBQThCdEQsR0FBOUIsQ0FBSixFQUF3QztBQUN0Q2dsQix3QkFBWWhsQixHQUFaO0FBQ0Q7QUFDRixTQUpEOztBQU1BO0FBQ0EsWUFBSSxDQUFDZ2xCLFNBQUwsRUFBZ0I7O0FBRWhCO0FBQ0EsWUFBSSxLQUFLUCxhQUFMLFlBQThCLEtBQUsvRyxLQUFMLENBQVdzSCxTQUFYLEVBQXNCandCLE1BQXhELEVBQWdFOztBQUVoRTtBQUNBUixVQUFFaUMsSUFBRixDQUFPcXVCLFdBQVAsRUFBb0IsVUFBUzdrQixHQUFULEVBQWNtRCxLQUFkLEVBQXFCO0FBQ3ZDeE0sZ0JBQU1oQixRQUFOLENBQWU2RSxXQUFmLENBQTJCMkksTUFBTThoQixRQUFqQztBQUNELFNBRkQ7O0FBSUE7QUFDQSxhQUFLdHZCLFFBQUwsQ0FBYzRRLFFBQWQsQ0FBdUIsS0FBS21YLEtBQUwsQ0FBV3NILFNBQVgsRUFBc0JDLFFBQTdDOztBQUVBO0FBQ0EsWUFBSSxLQUFLUixhQUFULEVBQXdCLEtBQUtBLGFBQUwsQ0FBbUJTLE9BQW5CO0FBQ3hCLGFBQUtULGFBQUwsR0FBcUIsSUFBSSxLQUFLL0csS0FBTCxDQUFXc0gsU0FBWCxFQUFzQmp3QixNQUExQixDQUFpQyxLQUFLWSxRQUF0QyxFQUFnRCxFQUFoRCxDQUFyQjtBQUNEOztBQUVEOzs7OztBQW5IVztBQUFBO0FBQUEsZ0NBdUhEO0FBQ1IsYUFBSzh1QixhQUFMLENBQW1CUyxPQUFuQjtBQUNBM3dCLFVBQUUwRyxNQUFGLEVBQVVrSCxHQUFWLENBQWMsb0JBQWQ7QUFDQTFOLG1CQUFXc0IsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDtBQTNIVTs7QUFBQTtBQUFBOztBQThIYnd1QixpQkFBZTdXLFFBQWYsR0FBMEIsRUFBMUI7O0FBRUE7QUFDQSxNQUFJbVgsY0FBYztBQUNoQk0sY0FBVTtBQUNSRixnQkFBVSxVQURGO0FBRVJsd0IsY0FBUU4sV0FBV0UsUUFBWCxDQUFvQixlQUFwQixLQUF3QztBQUZ4QyxLQURNO0FBS2pCeXdCLGVBQVc7QUFDUkgsZ0JBQVUsV0FERjtBQUVSbHdCLGNBQVFOLFdBQVdFLFFBQVgsQ0FBb0IsV0FBcEIsS0FBb0M7QUFGcEMsS0FMTTtBQVNoQjB3QixlQUFXO0FBQ1RKLGdCQUFVLGdCQUREO0FBRVRsd0IsY0FBUU4sV0FBV0UsUUFBWCxDQUFvQixnQkFBcEIsS0FBeUM7QUFGeEM7QUFUSyxHQUFsQjs7QUFlQTtBQUNBRixhQUFXTSxNQUFYLENBQWtCd3ZCLGNBQWxCLEVBQWtDLGdCQUFsQztBQUVDLENBbkpBLENBbUpDcG5CLE1BbkpELENBQUQ7Q0NGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNUksQ0FBVCxFQUFZOztBQUViOzs7Ozs7QUFGYSxNQVFQK3dCLGdCQVJPO0FBU1g7Ozs7Ozs7QUFPQSw4QkFBWTluQixPQUFaLEVBQXFCa0ssT0FBckIsRUFBOEI7QUFBQTs7QUFDNUIsV0FBSy9SLFFBQUwsR0FBZ0JwQixFQUFFaUosT0FBRixDQUFoQjtBQUNBLFdBQUtrSyxPQUFMLEdBQWVuVCxFQUFFeU0sTUFBRixDQUFTLEVBQVQsRUFBYXNrQixpQkFBaUI1WCxRQUE5QixFQUF3QyxLQUFLL1gsUUFBTCxDQUFjQyxJQUFkLEVBQXhDLEVBQThEOFIsT0FBOUQsQ0FBZjs7QUFFQSxXQUFLalIsS0FBTDtBQUNBLFdBQUttWCxPQUFMOztBQUVBblosaUJBQVdZLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0Msa0JBQWhDO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUExQlc7QUFBQTtBQUFBLDhCQStCSDtBQUNOLFlBQUlrd0IsV0FBVyxLQUFLNXZCLFFBQUwsQ0FBY0MsSUFBZCxDQUFtQixtQkFBbkIsQ0FBZjtBQUNBLFlBQUksQ0FBQzJ2QixRQUFMLEVBQWU7QUFDYm51QixrQkFBUUMsS0FBUixDQUFjLGtFQUFkO0FBQ0Q7O0FBRUQsYUFBS211QixXQUFMLEdBQW1CanhCLFFBQU1neEIsUUFBTixDQUFuQjtBQUNBLGFBQUtFLFFBQUwsR0FBZ0IsS0FBSzl2QixRQUFMLENBQWN1QyxJQUFkLENBQW1CLGVBQW5CLENBQWhCO0FBQ0EsYUFBS3dQLE9BQUwsR0FBZW5ULEVBQUV5TSxNQUFGLENBQVMsRUFBVCxFQUFhLEtBQUswRyxPQUFsQixFQUEyQixLQUFLOGQsV0FBTCxDQUFpQjV2QixJQUFqQixFQUEzQixDQUFmOztBQUVBO0FBQ0EsWUFBRyxLQUFLOFIsT0FBTCxDQUFhL0IsT0FBaEIsRUFBeUI7QUFDdkIsY0FBSStmLFFBQVEsS0FBS2hlLE9BQUwsQ0FBYS9CLE9BQWIsQ0FBcUJuTixLQUFyQixDQUEyQixHQUEzQixDQUFaOztBQUVBLGVBQUttdEIsV0FBTCxHQUFtQkQsTUFBTSxDQUFOLENBQW5CO0FBQ0EsZUFBS0UsWUFBTCxHQUFvQkYsTUFBTSxDQUFOLEtBQVksSUFBaEM7QUFDRDs7QUFFRCxhQUFLRyxPQUFMO0FBQ0Q7O0FBRUQ7Ozs7OztBQXBEVztBQUFBO0FBQUEsZ0NBeUREO0FBQ1IsWUFBSWx2QixRQUFRLElBQVo7O0FBRUEsYUFBS212QixnQkFBTCxHQUF3QixLQUFLRCxPQUFMLENBQWF4cEIsSUFBYixDQUFrQixJQUFsQixDQUF4Qjs7QUFFQTlILFVBQUUwRyxNQUFGLEVBQVU2RyxFQUFWLENBQWEsdUJBQWIsRUFBc0MsS0FBS2drQixnQkFBM0M7O0FBRUEsYUFBS0wsUUFBTCxDQUFjM2pCLEVBQWQsQ0FBaUIsMkJBQWpCLEVBQThDLEtBQUtpa0IsVUFBTCxDQUFnQjFwQixJQUFoQixDQUFxQixJQUFyQixDQUE5QztBQUNEOztBQUVEOzs7Ozs7QUFuRVc7QUFBQTtBQUFBLGdDQXdFRDtBQUNSO0FBQ0EsWUFBSSxDQUFDNUgsV0FBV2dHLFVBQVgsQ0FBc0I2SSxPQUF0QixDQUE4QixLQUFLb0UsT0FBTCxDQUFhc2UsT0FBM0MsQ0FBTCxFQUEwRDtBQUN4RCxlQUFLcndCLFFBQUwsQ0FBYzZRLElBQWQ7QUFDQSxlQUFLZ2YsV0FBTCxDQUFpQjVlLElBQWpCO0FBQ0Q7O0FBRUQ7QUFMQSxhQU1LO0FBQ0gsaUJBQUtqUixRQUFMLENBQWNpUixJQUFkO0FBQ0EsaUJBQUs0ZSxXQUFMLENBQWlCaGYsSUFBakI7QUFDRDtBQUNGOztBQUVEOzs7Ozs7QUF0Rlc7QUFBQTtBQUFBLG1DQTJGRTtBQUFBOztBQUNYLFlBQUksQ0FBQy9SLFdBQVdnRyxVQUFYLENBQXNCNkksT0FBdEIsQ0FBOEIsS0FBS29FLE9BQUwsQ0FBYXNlLE9BQTNDLENBQUwsRUFBMEQ7QUFDeEQsY0FBRyxLQUFLdGUsT0FBTCxDQUFhL0IsT0FBaEIsRUFBeUI7QUFDdkIsZ0JBQUksS0FBSzZmLFdBQUwsQ0FBaUJsa0IsRUFBakIsQ0FBb0IsU0FBcEIsQ0FBSixFQUFvQztBQUNsQzdNLHlCQUFXOFEsTUFBWCxDQUFrQkMsU0FBbEIsQ0FBNEIsS0FBS2dnQixXQUFqQyxFQUE4QyxLQUFLRyxXQUFuRCxFQUFnRSxZQUFNO0FBQ3BFOzs7O0FBSUEsdUJBQUtod0IsUUFBTCxDQUFjRSxPQUFkLENBQXNCLDZCQUF0QjtBQUNBLHVCQUFLMnZCLFdBQUwsQ0FBaUJ0dEIsSUFBakIsQ0FBc0IsZUFBdEIsRUFBdUN1QixjQUF2QyxDQUFzRCxxQkFBdEQ7QUFDRCxlQVBEO0FBUUQsYUFURCxNQVVLO0FBQ0hoRix5QkFBVzhRLE1BQVgsQ0FBa0JLLFVBQWxCLENBQTZCLEtBQUs0ZixXQUFsQyxFQUErQyxLQUFLSSxZQUFwRCxFQUFrRSxZQUFNO0FBQ3RFOzs7O0FBSUEsdUJBQUtqd0IsUUFBTCxDQUFjRSxPQUFkLENBQXNCLDZCQUF0QjtBQUNELGVBTkQ7QUFPRDtBQUNGLFdBcEJELE1BcUJLO0FBQ0gsaUJBQUsydkIsV0FBTCxDQUFpQmhULE1BQWpCLENBQXdCLENBQXhCO0FBQ0EsaUJBQUtnVCxXQUFMLENBQWlCdHRCLElBQWpCLENBQXNCLGVBQXRCLEVBQXVDckMsT0FBdkMsQ0FBK0MscUJBQS9DOztBQUVBOzs7O0FBSUEsaUJBQUtGLFFBQUwsQ0FBY0UsT0FBZCxDQUFzQiw2QkFBdEI7QUFDRDtBQUNGO0FBQ0Y7QUE3SFU7QUFBQTtBQUFBLGdDQStIRDtBQUNSLGFBQUtGLFFBQUwsQ0FBY3dNLEdBQWQsQ0FBa0Isc0JBQWxCO0FBQ0EsYUFBS3NqQixRQUFMLENBQWN0akIsR0FBZCxDQUFrQixzQkFBbEI7O0FBRUE1TixVQUFFMEcsTUFBRixFQUFVa0gsR0FBVixDQUFjLHVCQUFkLEVBQXVDLEtBQUsyakIsZ0JBQTVDOztBQUVBcnhCLG1CQUFXc0IsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDtBQXRJVTs7QUFBQTtBQUFBOztBQXlJYnV2QixtQkFBaUI1WCxRQUFqQixHQUE0QjtBQUMxQjs7Ozs7QUFLQXNZLGFBQVMsUUFOaUI7O0FBUTFCOzs7OztBQUtBcmdCLGFBQVM7QUFiaUIsR0FBNUI7O0FBZ0JBO0FBQ0FsUixhQUFXTSxNQUFYLENBQWtCdXdCLGdCQUFsQixFQUFvQyxrQkFBcEM7QUFFQyxDQTVKQSxDQTRKQ25vQixNQTVKRCxDQUFEO0NDRkE7Ozs7OztBQUVBLENBQUMsVUFBUzVJLENBQVQsRUFBWTs7QUFFYjs7Ozs7Ozs7OztBQUZhLE1BWVAweEIsTUFaTztBQWFYOzs7Ozs7QUFNQSxvQkFBWXpvQixPQUFaLEVBQXFCa0ssT0FBckIsRUFBOEI7QUFBQTs7QUFDNUIsV0FBSy9SLFFBQUwsR0FBZ0I2SCxPQUFoQjtBQUNBLFdBQUtrSyxPQUFMLEdBQWVuVCxFQUFFeU0sTUFBRixDQUFTLEVBQVQsRUFBYWlsQixPQUFPdlksUUFBcEIsRUFBOEIsS0FBSy9YLFFBQUwsQ0FBY0MsSUFBZCxFQUE5QixFQUFvRDhSLE9BQXBELENBQWY7QUFDQSxXQUFLalIsS0FBTDs7QUFFQWhDLGlCQUFXWSxjQUFYLENBQTBCLElBQTFCLEVBQWdDLFFBQWhDO0FBQ0FaLGlCQUFXbUwsUUFBWCxDQUFvQjJCLFFBQXBCLENBQTZCLFFBQTdCLEVBQXVDO0FBQ3JDLGlCQUFTLE1BRDRCO0FBRXJDLGlCQUFTLE1BRjRCO0FBR3JDLGtCQUFVO0FBSDJCLE9BQXZDO0FBS0Q7O0FBRUQ7Ozs7OztBQWhDVztBQUFBO0FBQUEsOEJBb0NIO0FBQ04sYUFBSzZDLEVBQUwsR0FBVSxLQUFLek8sUUFBTCxDQUFjYixJQUFkLENBQW1CLElBQW5CLENBQVY7QUFDQSxhQUFLOGUsUUFBTCxHQUFnQixLQUFoQjtBQUNBLGFBQUtzUyxNQUFMLEdBQWMsRUFBQ0MsSUFBSTF4QixXQUFXZ0csVUFBWCxDQUFzQm1JLE9BQTNCLEVBQWQ7QUFDQSxhQUFLd2pCLFFBQUwsR0FBZ0JDLGFBQWhCOztBQUVBLGFBQUt2TyxPQUFMLEdBQWV2akIsbUJBQWlCLEtBQUs2UCxFQUF0QixTQUE4QjlNLE1BQTlCLEdBQXVDL0MsbUJBQWlCLEtBQUs2UCxFQUF0QixRQUF2QyxHQUF1RTdQLHFCQUFtQixLQUFLNlAsRUFBeEIsUUFBdEY7QUFDQSxhQUFLMFQsT0FBTCxDQUFhaGpCLElBQWIsQ0FBa0I7QUFDaEIsMkJBQWlCLEtBQUtzUCxFQUROO0FBRWhCLDJCQUFpQixJQUZEO0FBR2hCLHNCQUFZO0FBSEksU0FBbEI7O0FBTUEsWUFBSSxLQUFLc0QsT0FBTCxDQUFhNGUsVUFBYixJQUEyQixLQUFLM3dCLFFBQUwsQ0FBY21kLFFBQWQsQ0FBdUIsTUFBdkIsQ0FBL0IsRUFBK0Q7QUFDN0QsZUFBS3BMLE9BQUwsQ0FBYTRlLFVBQWIsR0FBMEIsSUFBMUI7QUFDQSxlQUFLNWUsT0FBTCxDQUFhZ1osT0FBYixHQUF1QixLQUF2QjtBQUNEO0FBQ0QsWUFBSSxLQUFLaFosT0FBTCxDQUFhZ1osT0FBYixJQUF3QixDQUFDLEtBQUtHLFFBQWxDLEVBQTRDO0FBQzFDLGVBQUtBLFFBQUwsR0FBZ0IsS0FBSzBGLFlBQUwsQ0FBa0IsS0FBS25pQixFQUF2QixDQUFoQjtBQUNEOztBQUVELGFBQUt6TyxRQUFMLENBQWNiLElBQWQsQ0FBbUI7QUFDZixrQkFBUSxRQURPO0FBRWYseUJBQWUsSUFGQTtBQUdmLDJCQUFpQixLQUFLc1AsRUFIUDtBQUlmLHlCQUFlLEtBQUtBO0FBSkwsU0FBbkI7O0FBT0EsWUFBRyxLQUFLeWMsUUFBUixFQUFrQjtBQUNoQixlQUFLbHJCLFFBQUwsQ0FBY3N1QixNQUFkLEdBQXVCM3BCLFFBQXZCLENBQWdDLEtBQUt1bUIsUUFBckM7QUFDRCxTQUZELE1BRU87QUFDTCxlQUFLbHJCLFFBQUwsQ0FBY3N1QixNQUFkLEdBQXVCM3BCLFFBQXZCLENBQWdDL0YsRUFBRSxLQUFLbVQsT0FBTCxDQUFhcE4sUUFBZixDQUFoQztBQUNBLGVBQUszRSxRQUFMLENBQWM0USxRQUFkLENBQXVCLGlCQUF2QjtBQUNEO0FBQ0QsYUFBS3FILE9BQUw7QUFDQSxZQUFJLEtBQUtsRyxPQUFMLENBQWE4ZSxRQUFiLElBQXlCdnJCLE9BQU9xa0IsUUFBUCxDQUFnQkMsSUFBaEIsV0FBK0IsS0FBS25iLEVBQWpFLEVBQXdFO0FBQ3RFN1AsWUFBRTBHLE1BQUYsRUFBVXlMLEdBQVYsQ0FBYyxnQkFBZCxFQUFnQyxLQUFLME4sSUFBTCxDQUFVL1gsSUFBVixDQUFlLElBQWYsQ0FBaEM7QUFDRDtBQUNGOztBQUVEOzs7OztBQTVFVztBQUFBO0FBQUEscUNBZ0ZJO0FBQ2IsZUFBTzlILEVBQUUsYUFBRixFQUNKZ1MsUUFESSxDQUNLLGdCQURMLEVBRUpqTSxRQUZJLENBRUssS0FBS29OLE9BQUwsQ0FBYXBOLFFBRmxCLENBQVA7QUFHRDs7QUFFRDs7Ozs7O0FBdEZXO0FBQUE7QUFBQSx3Q0EyRk87QUFDaEIsWUFBSThELFFBQVEsS0FBS3pJLFFBQUwsQ0FBYzh3QixVQUFkLEVBQVo7QUFDQSxZQUFJQSxhQUFhbHlCLEVBQUUwRyxNQUFGLEVBQVVtRCxLQUFWLEVBQWpCO0FBQ0EsWUFBSUQsU0FBUyxLQUFLeEksUUFBTCxDQUFjK3dCLFdBQWQsRUFBYjtBQUNBLFlBQUlBLGNBQWNueUIsRUFBRTBHLE1BQUYsRUFBVWtELE1BQVYsRUFBbEI7QUFDQSxZQUFJSixJQUFKLEVBQVVGLEdBQVY7QUFDQSxZQUFJLEtBQUs2SixPQUFMLENBQWFwSSxPQUFiLEtBQXlCLE1BQTdCLEVBQXFDO0FBQ25DdkIsaUJBQU9pWixTQUFTLENBQUN5UCxhQUFhcm9CLEtBQWQsSUFBdUIsQ0FBaEMsRUFBbUMsRUFBbkMsQ0FBUDtBQUNELFNBRkQsTUFFTztBQUNMTCxpQkFBT2laLFNBQVMsS0FBS3RQLE9BQUwsQ0FBYXBJLE9BQXRCLEVBQStCLEVBQS9CLENBQVA7QUFDRDtBQUNELFlBQUksS0FBS29JLE9BQUwsQ0FBYXJJLE9BQWIsS0FBeUIsTUFBN0IsRUFBcUM7QUFDbkMsY0FBSWxCLFNBQVN1b0IsV0FBYixFQUEwQjtBQUN4QjdvQixrQkFBTW1aLFNBQVN4ZixLQUFLMGMsR0FBTCxDQUFTLEdBQVQsRUFBY3dTLGNBQWMsRUFBNUIsQ0FBVCxFQUEwQyxFQUExQyxDQUFOO0FBQ0QsV0FGRCxNQUVPO0FBQ0w3b0Isa0JBQU1tWixTQUFTLENBQUMwUCxjQUFjdm9CLE1BQWYsSUFBeUIsQ0FBbEMsRUFBcUMsRUFBckMsQ0FBTjtBQUNEO0FBQ0YsU0FORCxNQU1PO0FBQ0xOLGdCQUFNbVosU0FBUyxLQUFLdFAsT0FBTCxDQUFhckksT0FBdEIsRUFBK0IsRUFBL0IsQ0FBTjtBQUNEO0FBQ0QsYUFBSzFKLFFBQUwsQ0FBY29OLEdBQWQsQ0FBa0IsRUFBQ2xGLEtBQUtBLE1BQU0sSUFBWixFQUFsQjtBQUNBO0FBQ0E7QUFDQSxZQUFHLENBQUMsS0FBS2dqQixRQUFOLElBQW1CLEtBQUtuWixPQUFMLENBQWFwSSxPQUFiLEtBQXlCLE1BQS9DLEVBQXdEO0FBQ3RELGVBQUszSixRQUFMLENBQWNvTixHQUFkLENBQWtCLEVBQUNoRixNQUFNQSxPQUFPLElBQWQsRUFBbEI7QUFDQSxlQUFLcEksUUFBTCxDQUFjb04sR0FBZCxDQUFrQixFQUFDNGpCLFFBQVEsS0FBVCxFQUFsQjtBQUNEO0FBRUY7O0FBRUQ7Ozs7O0FBekhXO0FBQUE7QUFBQSxnQ0E2SEQ7QUFBQTs7QUFDUixZQUFJaHdCLFFBQVEsSUFBWjs7QUFFQSxhQUFLaEIsUUFBTCxDQUFjbU0sRUFBZCxDQUFpQjtBQUNmLDZCQUFtQixLQUFLc1MsSUFBTCxDQUFVL1gsSUFBVixDQUFlLElBQWYsQ0FESjtBQUVmLDhCQUFvQixVQUFDMEQsS0FBRCxFQUFRcEssUUFBUixFQUFxQjtBQUN2QyxnQkFBS29LLE1BQU1nQyxNQUFOLEtBQWlCcEwsTUFBTWhCLFFBQU4sQ0FBZSxDQUFmLENBQWxCLElBQ0NwQixFQUFFd0wsTUFBTWdDLE1BQVIsRUFBZ0JvUyxPQUFoQixDQUF3QixpQkFBeEIsRUFBMkMsQ0FBM0MsTUFBa0R4ZSxRQUR2RCxFQUNrRTtBQUFFO0FBQ2xFLHFCQUFPLE9BQUswZSxLQUFMLENBQVduYSxLQUFYLFFBQVA7QUFDRDtBQUNGLFdBUGM7QUFRZiwrQkFBcUIsS0FBS3NZLE1BQUwsQ0FBWW5XLElBQVosQ0FBaUIsSUFBakIsQ0FSTjtBQVNmLGlDQUF1QixZQUFXO0FBQ2hDMUYsa0JBQU1pd0IsZUFBTjtBQUNEO0FBWGMsU0FBakI7O0FBY0EsWUFBSSxLQUFLOU8sT0FBTCxDQUFheGdCLE1BQWpCLEVBQXlCO0FBQ3ZCLGVBQUt3Z0IsT0FBTCxDQUFhaFcsRUFBYixDQUFnQixtQkFBaEIsRUFBcUMsVUFBU3JKLENBQVQsRUFBWTtBQUMvQyxnQkFBSUEsRUFBRXdILEtBQUYsS0FBWSxFQUFaLElBQWtCeEgsRUFBRXdILEtBQUYsS0FBWSxFQUFsQyxFQUFzQztBQUNwQ3hILGdCQUFFaVQsZUFBRjtBQUNBalQsZ0JBQUV1SixjQUFGO0FBQ0FyTCxvQkFBTXlkLElBQU47QUFDRDtBQUNGLFdBTkQ7QUFPRDs7QUFFRCxZQUFJLEtBQUsxTSxPQUFMLENBQWEyTyxZQUFiLElBQTZCLEtBQUszTyxPQUFMLENBQWFnWixPQUE5QyxFQUF1RDtBQUNyRCxlQUFLRyxRQUFMLENBQWMxZSxHQUFkLENBQWtCLFlBQWxCLEVBQWdDTCxFQUFoQyxDQUFtQyxpQkFBbkMsRUFBc0QsVUFBU3JKLENBQVQsRUFBWTtBQUNoRSxnQkFBSUEsRUFBRXNKLE1BQUYsS0FBYXBMLE1BQU1oQixRQUFOLENBQWUsQ0FBZixDQUFiLElBQ0ZwQixFQUFFZ2lCLFFBQUYsQ0FBVzVmLE1BQU1oQixRQUFOLENBQWUsQ0FBZixDQUFYLEVBQThCOEMsRUFBRXNKLE1BQWhDLENBREUsSUFFQSxDQUFDeE4sRUFBRWdpQixRQUFGLENBQVdwZCxRQUFYLEVBQXFCVixFQUFFc0osTUFBdkIsQ0FGTCxFQUVxQztBQUMvQjtBQUNMO0FBQ0RwTCxrQkFBTTBkLEtBQU47QUFDRCxXQVBEO0FBUUQ7QUFDRCxZQUFJLEtBQUszTSxPQUFMLENBQWE4ZSxRQUFqQixFQUEyQjtBQUN6Qmp5QixZQUFFMEcsTUFBRixFQUFVNkcsRUFBVix5QkFBbUMsS0FBS3NDLEVBQXhDLEVBQThDLEtBQUt5aUIsWUFBTCxDQUFrQnhxQixJQUFsQixDQUF1QixJQUF2QixDQUE5QztBQUNEO0FBQ0Y7O0FBRUQ7Ozs7O0FBdktXO0FBQUE7QUFBQSxtQ0EyS0U1RCxDQTNLRixFQTJLSztBQUNkLFlBQUd3QyxPQUFPcWtCLFFBQVAsQ0FBZ0JDLElBQWhCLEtBQTJCLE1BQU0sS0FBS25iLEVBQXRDLElBQTZDLENBQUMsS0FBS3dQLFFBQXRELEVBQStEO0FBQUUsZUFBS1EsSUFBTDtBQUFjLFNBQS9FLE1BQ0k7QUFBRSxlQUFLQyxLQUFMO0FBQWU7QUFDdEI7O0FBR0Q7Ozs7Ozs7QUFqTFc7QUFBQTtBQUFBLDZCQXVMSjtBQUFBOztBQUNMLFlBQUksS0FBSzNNLE9BQUwsQ0FBYThlLFFBQWpCLEVBQTJCO0FBQ3pCLGNBQUlqSCxhQUFXLEtBQUtuYixFQUFwQjs7QUFFQSxjQUFJbkosT0FBT2tsQixPQUFQLENBQWVDLFNBQW5CLEVBQThCO0FBQzVCbmxCLG1CQUFPa2xCLE9BQVAsQ0FBZUMsU0FBZixDQUF5QixJQUF6QixFQUErQixJQUEvQixFQUFxQ2IsSUFBckM7QUFDRCxXQUZELE1BRU87QUFDTHRrQixtQkFBT3FrQixRQUFQLENBQWdCQyxJQUFoQixHQUF1QkEsSUFBdkI7QUFDRDtBQUNGOztBQUVELGFBQUszTCxRQUFMLEdBQWdCLElBQWhCOztBQUVBO0FBQ0EsYUFBS2plLFFBQUwsQ0FDS29OLEdBREwsQ0FDUyxFQUFFLGNBQWMsUUFBaEIsRUFEVCxFQUVLeUQsSUFGTCxHQUdLa1EsU0FITCxDQUdlLENBSGY7QUFJQSxZQUFJLEtBQUtoUCxPQUFMLENBQWFnWixPQUFqQixFQUEwQjtBQUN4QixlQUFLRyxRQUFMLENBQWM5ZCxHQUFkLENBQWtCLEVBQUMsY0FBYyxRQUFmLEVBQWxCLEVBQTRDeUQsSUFBNUM7QUFDRDs7QUFFRCxhQUFLb2dCLGVBQUw7O0FBRUEsYUFBS2p4QixRQUFMLENBQ0dpUixJQURILEdBRUc3RCxHQUZILENBRU8sRUFBRSxjQUFjLEVBQWhCLEVBRlA7O0FBSUEsWUFBRyxLQUFLOGQsUUFBUixFQUFrQjtBQUNoQixlQUFLQSxRQUFMLENBQWM5ZCxHQUFkLENBQWtCLEVBQUMsY0FBYyxFQUFmLEVBQWxCLEVBQXNDNkQsSUFBdEM7QUFDQSxjQUFHLEtBQUtqUixRQUFMLENBQWNtZCxRQUFkLENBQXVCLE1BQXZCLENBQUgsRUFBbUM7QUFDakMsaUJBQUsrTixRQUFMLENBQWN0YSxRQUFkLENBQXVCLE1BQXZCO0FBQ0QsV0FGRCxNQUVPLElBQUksS0FBSzVRLFFBQUwsQ0FBY21kLFFBQWQsQ0FBdUIsTUFBdkIsQ0FBSixFQUFvQztBQUN6QyxpQkFBSytOLFFBQUwsQ0FBY3RhLFFBQWQsQ0FBdUIsTUFBdkI7QUFDRDtBQUNGOztBQUdELFlBQUksQ0FBQyxLQUFLbUIsT0FBTCxDQUFhb2YsY0FBbEIsRUFBa0M7QUFDaEM7Ozs7O0FBS0EsZUFBS254QixRQUFMLENBQWNFLE9BQWQsQ0FBc0IsbUJBQXRCLEVBQTJDLEtBQUt1TyxFQUFoRDtBQUNEOztBQUVELFlBQUl6TixRQUFRLElBQVo7O0FBRUEsaUJBQVNvd0Isb0JBQVQsR0FBZ0M7QUFDOUIsY0FBSXB3QixNQUFNeXZCLFFBQVYsRUFBb0I7QUFDbEIsZ0JBQUcsQ0FBQ3p2QixNQUFNcXdCLGlCQUFWLEVBQTZCO0FBQzNCcndCLG9CQUFNcXdCLGlCQUFOLEdBQTBCL3JCLE9BQU84RCxXQUFqQztBQUNEO0FBQ0R4SyxjQUFFLFlBQUYsRUFBZ0JnUyxRQUFoQixDQUF5QixnQkFBekI7QUFDRCxXQUxELE1BTUs7QUFDSGhTLGNBQUUsTUFBRixFQUFVZ1MsUUFBVixDQUFtQixnQkFBbkI7QUFDRDtBQUNGO0FBQ0Q7QUFDQSxZQUFJLEtBQUttQixPQUFMLENBQWFpZSxXQUFqQixFQUE4QjtBQUFBO0FBQUEsZ0JBQ25Cc0IsY0FEbUIsR0FDNUIsWUFBeUI7QUFDdkJ0d0Isb0JBQU1oQixRQUFOLENBQ0diLElBREgsQ0FDUTtBQUNKLCtCQUFlLEtBRFg7QUFFSiw0QkFBWSxDQUFDO0FBRlQsZUFEUixFQUtHbU4sS0FMSDtBQU1BOGtCO0FBQ0F0eUIseUJBQVdtTCxRQUFYLENBQW9CNkIsU0FBcEIsQ0FBOEI5SyxNQUFNaEIsUUFBcEM7QUFDRCxhQVYyQjs7QUFXNUIsZ0JBQUksT0FBSytSLE9BQUwsQ0FBYWdaLE9BQWpCLEVBQTBCO0FBQ3hCanNCLHlCQUFXOFEsTUFBWCxDQUFrQkMsU0FBbEIsQ0FBNEIsT0FBS3FiLFFBQWpDLEVBQTJDLFNBQTNDO0FBQ0Q7QUFDRHBzQix1QkFBVzhRLE1BQVgsQ0FBa0JDLFNBQWxCLENBQTRCLE9BQUs3UCxRQUFqQyxFQUEyQyxPQUFLK1IsT0FBTCxDQUFhaWUsV0FBeEQsRUFBcUUsWUFBTTtBQUN6RSxrQkFBRyxPQUFLaHdCLFFBQVIsRUFBa0I7QUFBRTtBQUNsQix1QkFBS3V4QixpQkFBTCxHQUF5Qnp5QixXQUFXbUwsUUFBWCxDQUFvQndCLGFBQXBCLENBQWtDLE9BQUt6TCxRQUF2QyxDQUF6QjtBQUNBc3hCO0FBQ0Q7QUFDRixhQUxEO0FBZDRCO0FBb0I3QjtBQUNEO0FBckJBLGFBc0JLO0FBQ0gsZ0JBQUksS0FBS3ZmLE9BQUwsQ0FBYWdaLE9BQWpCLEVBQTBCO0FBQ3hCLG1CQUFLRyxRQUFMLENBQWNyYSxJQUFkLENBQW1CLENBQW5CO0FBQ0Q7QUFDRCxpQkFBSzdRLFFBQUwsQ0FBYzZRLElBQWQsQ0FBbUIsS0FBS2tCLE9BQUwsQ0FBYXlmLFNBQWhDO0FBQ0Q7O0FBRUQ7QUFDQSxhQUFLeHhCLFFBQUwsQ0FDR2IsSUFESCxDQUNRO0FBQ0oseUJBQWUsS0FEWDtBQUVKLHNCQUFZLENBQUM7QUFGVCxTQURSLEVBS0dtTixLQUxIO0FBTUF4TixtQkFBV21MLFFBQVgsQ0FBb0I2QixTQUFwQixDQUE4QixLQUFLOUwsUUFBbkM7O0FBRUE7Ozs7QUFJQSxhQUFLQSxRQUFMLENBQWNFLE9BQWQsQ0FBc0IsZ0JBQXRCOztBQUVBa3hCOztBQUVBdnRCLG1CQUFXLFlBQU07QUFDZixpQkFBSzR0QixjQUFMO0FBQ0QsU0FGRCxFQUVHLENBRkg7QUFHRDs7QUFFRDs7Ozs7QUF2U1c7QUFBQTtBQUFBLHVDQTJTTTtBQUNmLFlBQUl6d0IsUUFBUSxJQUFaO0FBQ0EsWUFBRyxDQUFDLEtBQUtoQixRQUFULEVBQW1CO0FBQUU7QUFBUyxTQUZmLENBRWdCO0FBQy9CLGFBQUt1eEIsaUJBQUwsR0FBeUJ6eUIsV0FBV21MLFFBQVgsQ0FBb0J3QixhQUFwQixDQUFrQyxLQUFLekwsUUFBdkMsQ0FBekI7O0FBRUEsWUFBSSxDQUFDLEtBQUsrUixPQUFMLENBQWFnWixPQUFkLElBQXlCLEtBQUtoWixPQUFMLENBQWEyTyxZQUF0QyxJQUFzRCxDQUFDLEtBQUszTyxPQUFMLENBQWE0ZSxVQUF4RSxFQUFvRjtBQUNsRi94QixZQUFFLE1BQUYsRUFBVXVOLEVBQVYsQ0FBYSxpQkFBYixFQUFnQyxVQUFTckosQ0FBVCxFQUFZO0FBQzFDLGdCQUFJQSxFQUFFc0osTUFBRixLQUFhcEwsTUFBTWhCLFFBQU4sQ0FBZSxDQUFmLENBQWIsSUFDRnBCLEVBQUVnaUIsUUFBRixDQUFXNWYsTUFBTWhCLFFBQU4sQ0FBZSxDQUFmLENBQVgsRUFBOEI4QyxFQUFFc0osTUFBaEMsQ0FERSxJQUVBLENBQUN4TixFQUFFZ2lCLFFBQUYsQ0FBV3BkLFFBQVgsRUFBcUJWLEVBQUVzSixNQUF2QixDQUZMLEVBRXFDO0FBQUU7QUFBUztBQUNoRHBMLGtCQUFNMGQsS0FBTjtBQUNELFdBTEQ7QUFNRDs7QUFFRCxZQUFJLEtBQUszTSxPQUFMLENBQWEyZixVQUFqQixFQUE2QjtBQUMzQjl5QixZQUFFMEcsTUFBRixFQUFVNkcsRUFBVixDQUFhLG1CQUFiLEVBQWtDLFVBQVNySixDQUFULEVBQVk7QUFDNUNoRSx1QkFBV21MLFFBQVgsQ0FBb0JhLFNBQXBCLENBQThCaEksQ0FBOUIsRUFBaUMsUUFBakMsRUFBMkM7QUFDekM0YixxQkFBTyxZQUFXO0FBQ2hCLG9CQUFJMWQsTUFBTStRLE9BQU4sQ0FBYzJmLFVBQWxCLEVBQThCO0FBQzVCMXdCLHdCQUFNMGQsS0FBTjtBQUNBMWQsd0JBQU1taEIsT0FBTixDQUFjN1YsS0FBZDtBQUNEO0FBQ0Y7QUFOd0MsYUFBM0M7QUFRRCxXQVREO0FBVUQ7O0FBRUQ7QUFDQSxhQUFLdE0sUUFBTCxDQUFjbU0sRUFBZCxDQUFpQixtQkFBakIsRUFBc0MsVUFBU3JKLENBQVQsRUFBWTtBQUNoRCxjQUFJcVUsVUFBVXZZLEVBQUUsSUFBRixDQUFkO0FBQ0E7QUFDQUUscUJBQVdtTCxRQUFYLENBQW9CYSxTQUFwQixDQUE4QmhJLENBQTlCLEVBQWlDLFFBQWpDLEVBQTJDO0FBQ3pDMmIsa0JBQU0sWUFBVztBQUNmLGtCQUFJemQsTUFBTWhCLFFBQU4sQ0FBZXVDLElBQWYsQ0FBb0IsUUFBcEIsRUFBOEJvSixFQUE5QixDQUFpQzNLLE1BQU1oQixRQUFOLENBQWV1QyxJQUFmLENBQW9CLGNBQXBCLENBQWpDLENBQUosRUFBMkU7QUFDekVzQiwyQkFBVyxZQUFXO0FBQUU7QUFDdEI3Qyx3QkFBTW1oQixPQUFOLENBQWM3VixLQUFkO0FBQ0QsaUJBRkQsRUFFRyxDQUZIO0FBR0QsZUFKRCxNQUlPLElBQUk2SyxRQUFReEwsRUFBUixDQUFXM0ssTUFBTXV3QixpQkFBakIsQ0FBSixFQUF5QztBQUFFO0FBQ2hEdndCLHNCQUFNeWQsSUFBTjtBQUNEO0FBQ0YsYUFUd0M7QUFVekNDLG1CQUFPLFlBQVc7QUFDaEIsa0JBQUkxZCxNQUFNK1EsT0FBTixDQUFjMmYsVUFBbEIsRUFBOEI7QUFDNUIxd0Isc0JBQU0wZCxLQUFOO0FBQ0ExZCxzQkFBTW1oQixPQUFOLENBQWM3VixLQUFkO0FBQ0Q7QUFDRixhQWZ3QztBQWdCekNmLHFCQUFTLFVBQVNjLGNBQVQsRUFBeUI7QUFDaEMsa0JBQUlBLGNBQUosRUFBb0I7QUFDbEJ2SixrQkFBRXVKLGNBQUY7QUFDRDtBQUNGO0FBcEJ3QyxXQUEzQztBQXNCRCxTQXpCRDtBQTBCRDs7QUFFRDs7Ozs7O0FBbldXO0FBQUE7QUFBQSw4QkF3V0g7QUFDTixZQUFJLENBQUMsS0FBSzRSLFFBQU4sSUFBa0IsQ0FBQyxLQUFLamUsUUFBTCxDQUFjMkwsRUFBZCxDQUFpQixVQUFqQixDQUF2QixFQUFxRDtBQUNuRCxpQkFBTyxLQUFQO0FBQ0Q7QUFDRCxZQUFJM0ssUUFBUSxJQUFaOztBQUVBO0FBQ0EsWUFBSSxLQUFLK1EsT0FBTCxDQUFha2UsWUFBakIsRUFBK0I7QUFDN0IsY0FBSSxLQUFLbGUsT0FBTCxDQUFhZ1osT0FBakIsRUFBMEI7QUFDeEJqc0IsdUJBQVc4USxNQUFYLENBQWtCSyxVQUFsQixDQUE2QixLQUFLaWIsUUFBbEMsRUFBNEMsVUFBNUMsRUFBd0R5RyxRQUF4RDtBQUNELFdBRkQsTUFHSztBQUNIQTtBQUNEOztBQUVEN3lCLHFCQUFXOFEsTUFBWCxDQUFrQkssVUFBbEIsQ0FBNkIsS0FBS2pRLFFBQWxDLEVBQTRDLEtBQUsrUixPQUFMLENBQWFrZSxZQUF6RDtBQUNEO0FBQ0Q7QUFWQSxhQVdLO0FBQ0gsZ0JBQUksS0FBS2xlLE9BQUwsQ0FBYWdaLE9BQWpCLEVBQTBCO0FBQ3hCLG1CQUFLRyxRQUFMLENBQWNqYSxJQUFkLENBQW1CLENBQW5CLEVBQXNCMGdCLFFBQXRCO0FBQ0QsYUFGRCxNQUdLO0FBQ0hBO0FBQ0Q7O0FBRUQsaUJBQUszeEIsUUFBTCxDQUFjaVIsSUFBZCxDQUFtQixLQUFLYyxPQUFMLENBQWE2ZixTQUFoQztBQUNEOztBQUVEO0FBQ0EsWUFBSSxLQUFLN2YsT0FBTCxDQUFhMmYsVUFBakIsRUFBNkI7QUFDM0I5eUIsWUFBRTBHLE1BQUYsRUFBVWtILEdBQVYsQ0FBYyxtQkFBZDtBQUNEOztBQUVELFlBQUksQ0FBQyxLQUFLdUYsT0FBTCxDQUFhZ1osT0FBZCxJQUF5QixLQUFLaFosT0FBTCxDQUFhMk8sWUFBMUMsRUFBd0Q7QUFDdEQ5aEIsWUFBRSxNQUFGLEVBQVU0TixHQUFWLENBQWMsaUJBQWQ7QUFDRDs7QUFFRCxhQUFLeE0sUUFBTCxDQUFjd00sR0FBZCxDQUFrQixtQkFBbEI7O0FBRUEsaUJBQVNtbEIsUUFBVCxHQUFvQjtBQUNsQixjQUFJM3dCLE1BQU15dkIsUUFBVixFQUFvQjtBQUNsQjd4QixjQUFFLFlBQUYsRUFBZ0JpRyxXQUFoQixDQUE0QixnQkFBNUI7QUFDQSxnQkFBRzdELE1BQU1xd0IsaUJBQVQsRUFBNEI7QUFDMUJ6eUIsZ0JBQUUsTUFBRixFQUFVbWlCLFNBQVYsQ0FBb0IvZixNQUFNcXdCLGlCQUExQjtBQUNBcndCLG9CQUFNcXdCLGlCQUFOLEdBQTBCLElBQTFCO0FBQ0Q7QUFDRixXQU5ELE1BT0s7QUFDSHp5QixjQUFFLE1BQUYsRUFBVWlHLFdBQVYsQ0FBc0IsZ0JBQXRCO0FBQ0Q7O0FBR0QvRixxQkFBV21MLFFBQVgsQ0FBb0JzQyxZQUFwQixDQUFpQ3ZMLE1BQU1oQixRQUF2Qzs7QUFFQWdCLGdCQUFNaEIsUUFBTixDQUFlYixJQUFmLENBQW9CLGFBQXBCLEVBQW1DLElBQW5DOztBQUVBOzs7O0FBSUE2QixnQkFBTWhCLFFBQU4sQ0FBZUUsT0FBZixDQUF1QixrQkFBdkI7QUFDRDs7QUFFRDs7OztBQUlBLFlBQUksS0FBSzZSLE9BQUwsQ0FBYThmLFlBQWpCLEVBQStCO0FBQzdCLGVBQUs3eEIsUUFBTCxDQUFjeW9CLElBQWQsQ0FBbUIsS0FBS3pvQixRQUFMLENBQWN5b0IsSUFBZCxFQUFuQjtBQUNEOztBQUVELGFBQUt4SyxRQUFMLEdBQWdCLEtBQWhCO0FBQ0MsWUFBSWpkLE1BQU0rUSxPQUFOLENBQWM4ZSxRQUFsQixFQUE0QjtBQUMxQixjQUFJdnJCLE9BQU9rbEIsT0FBUCxDQUFlc0gsWUFBbkIsRUFBaUM7QUFDL0J4c0IsbUJBQU9rbEIsT0FBUCxDQUFlc0gsWUFBZixDQUE0QixFQUE1QixFQUFnQ3R1QixTQUFTdXVCLEtBQXpDLEVBQWdEenNCLE9BQU9xa0IsUUFBUCxDQUFnQnFJLElBQWhCLENBQXFCenFCLE9BQXJCLE9BQWlDLEtBQUtrSCxFQUF0QyxFQUE0QyxFQUE1QyxDQUFoRDtBQUNELFdBRkQsTUFFTztBQUNMbkosbUJBQU9xa0IsUUFBUCxDQUFnQkMsSUFBaEIsR0FBdUIsRUFBdkI7QUFDRDtBQUNGO0FBQ0g7O0FBRUQ7Ozs7O0FBMWJXO0FBQUE7QUFBQSwrQkE4YkY7QUFDUCxZQUFJLEtBQUszTCxRQUFULEVBQW1CO0FBQ2pCLGVBQUtTLEtBQUw7QUFDRCxTQUZELE1BRU87QUFDTCxlQUFLRCxJQUFMO0FBQ0Q7QUFDRjtBQXBjVTtBQUFBOzs7QUFzY1g7Ozs7QUF0Y1csZ0NBMGNEO0FBQ1IsWUFBSSxLQUFLMU0sT0FBTCxDQUFhZ1osT0FBakIsRUFBMEI7QUFDeEIsZUFBSy9xQixRQUFMLENBQWMyRSxRQUFkLENBQXVCL0YsRUFBRSxLQUFLbVQsT0FBTCxDQUFhcE4sUUFBZixDQUF2QixFQUR3QixDQUMwQjtBQUNsRCxlQUFLdW1CLFFBQUwsQ0FBY2phLElBQWQsR0FBcUJ6RSxHQUFyQixHQUEyQndWLE1BQTNCO0FBQ0Q7QUFDRCxhQUFLaGlCLFFBQUwsQ0FBY2lSLElBQWQsR0FBcUJ6RSxHQUFyQjtBQUNBLGFBQUsyVixPQUFMLENBQWEzVixHQUFiLENBQWlCLEtBQWpCO0FBQ0E1TixVQUFFMEcsTUFBRixFQUFVa0gsR0FBVixpQkFBNEIsS0FBS2lDLEVBQWpDOztBQUVBM1AsbUJBQVdzQixnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBcGRVOztBQUFBO0FBQUE7O0FBdWRia3dCLFNBQU92WSxRQUFQLEdBQWtCO0FBQ2hCOzs7OztBQUtBaVksaUJBQWEsRUFORztBQU9oQjs7Ozs7QUFLQUMsa0JBQWMsRUFaRTtBQWFoQjs7Ozs7QUFLQXVCLGVBQVcsQ0FsQks7QUFtQmhCOzs7OztBQUtBSSxlQUFXLENBeEJLO0FBeUJoQjs7Ozs7QUFLQWxSLGtCQUFjLElBOUJFO0FBK0JoQjs7Ozs7QUFLQWdSLGdCQUFZLElBcENJO0FBcUNoQjs7Ozs7QUFLQVAsb0JBQWdCLEtBMUNBO0FBMkNoQjs7Ozs7QUFLQXpuQixhQUFTLE1BaERPO0FBaURoQjs7Ozs7QUFLQUMsYUFBUyxNQXRETztBQXVEaEI7Ozs7O0FBS0FnbkIsZ0JBQVksS0E1REk7QUE2RGhCOzs7OztBQUtBc0Isa0JBQWMsRUFsRUU7QUFtRWhCOzs7OztBQUtBbEgsYUFBUyxJQXhFTztBQXlFaEI7Ozs7O0FBS0E4RyxrQkFBYyxLQTlFRTtBQStFaEI7Ozs7O0FBS0FoQixjQUFVLEtBcEZNO0FBcUZkOzs7OztBQUtGbHNCLGNBQVU7O0FBMUZNLEdBQWxCOztBQThGQTtBQUNBN0YsYUFBV00sTUFBWCxDQUFrQmt4QixNQUFsQixFQUEwQixRQUExQjs7QUFFQSxXQUFTNEIsV0FBVCxHQUF1QjtBQUNyQixXQUFPLHNCQUFxQm5zQixJQUFyQixDQUEwQlQsT0FBT1UsU0FBUCxDQUFpQkMsU0FBM0M7QUFBUDtBQUNEOztBQUVELFdBQVNrc0IsWUFBVCxHQUF3QjtBQUN0QixXQUFPLFdBQVVwc0IsSUFBVixDQUFlVCxPQUFPVSxTQUFQLENBQWlCQyxTQUFoQztBQUFQO0FBQ0Q7O0FBRUQsV0FBU3lxQixXQUFULEdBQXVCO0FBQ3JCLFdBQU93QixpQkFBaUJDLGNBQXhCO0FBQ0Q7QUFFQSxDQXBrQkEsQ0Fva0JDM3FCLE1BcGtCRCxDQUFEO0NDRkE7Ozs7OztBQUVBLENBQUMsVUFBUzVJLENBQVQsRUFBWTs7QUFFYjs7Ozs7Ozs7O0FBRmEsTUFXUHd6QixNQVhPO0FBWVg7Ozs7OztBQU1BLG9CQUFZdnFCLE9BQVosRUFBcUJrSyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLL1IsUUFBTCxHQUFnQjZILE9BQWhCO0FBQ0EsV0FBS2tLLE9BQUwsR0FBZW5ULEVBQUV5TSxNQUFGLENBQVMsRUFBVCxFQUFhK21CLE9BQU9yYSxRQUFwQixFQUE4QixLQUFLL1gsUUFBTCxDQUFjQyxJQUFkLEVBQTlCLEVBQW9EOFIsT0FBcEQsQ0FBZjs7QUFFQSxXQUFLalIsS0FBTDs7QUFFQWhDLGlCQUFXWSxjQUFYLENBQTBCLElBQTFCLEVBQWdDLFFBQWhDO0FBQ0FaLGlCQUFXbUwsUUFBWCxDQUFvQjJCLFFBQXBCLENBQTZCLFFBQTdCLEVBQXVDO0FBQ3JDLGVBQU87QUFDTCx5QkFBZSxVQURWO0FBRUwsc0JBQVksVUFGUDtBQUdMLHdCQUFjLFVBSFQ7QUFJTCx3QkFBYyxVQUpUO0FBS0wsK0JBQXFCLGVBTGhCO0FBTUwsNEJBQWtCLGVBTmI7QUFPTCw4QkFBb0IsZUFQZjtBQVFMLDhCQUFvQjtBQVJmLFNBRDhCO0FBV3JDLGVBQU87QUFDTCx3QkFBYyxVQURUO0FBRUwseUJBQWUsVUFGVjtBQUdMLDhCQUFvQixlQUhmO0FBSUwsK0JBQXFCO0FBSmhCO0FBWDhCLE9BQXZDO0FBa0JEOztBQUVEOzs7Ozs7O0FBN0NXO0FBQUE7QUFBQSw4QkFrREg7QUFDTixhQUFLeW1CLE1BQUwsR0FBYyxLQUFLcnlCLFFBQUwsQ0FBY3VDLElBQWQsQ0FBbUIsT0FBbkIsQ0FBZDtBQUNBLGFBQUsrdkIsT0FBTCxHQUFlLEtBQUt0eUIsUUFBTCxDQUFjdUMsSUFBZCxDQUFtQixzQkFBbkIsQ0FBZjs7QUFFQSxhQUFLZ3dCLE9BQUwsR0FBZSxLQUFLRCxPQUFMLENBQWFybUIsRUFBYixDQUFnQixDQUFoQixDQUFmO0FBQ0EsYUFBS3VtQixNQUFMLEdBQWMsS0FBS0gsTUFBTCxDQUFZMXdCLE1BQVosR0FBcUIsS0FBSzB3QixNQUFMLENBQVlwbUIsRUFBWixDQUFlLENBQWYsQ0FBckIsR0FBeUNyTixRQUFNLEtBQUsyekIsT0FBTCxDQUFhcHpCLElBQWIsQ0FBa0IsZUFBbEIsQ0FBTixDQUF2RDtBQUNBLGFBQUtzekIsS0FBTCxHQUFhLEtBQUt6eUIsUUFBTCxDQUFjdUMsSUFBZCxDQUFtQixvQkFBbkIsRUFBeUM2SyxHQUF6QyxDQUE2QyxLQUFLMkUsT0FBTCxDQUFhMmdCLFFBQWIsR0FBd0IsUUFBeEIsR0FBbUMsT0FBaEYsRUFBeUYsQ0FBekYsQ0FBYjs7QUFFQSxZQUFJQyxRQUFRLEtBQVo7QUFBQSxZQUNJM3hCLFFBQVEsSUFEWjtBQUVBLFlBQUksS0FBSytRLE9BQUwsQ0FBYTZnQixRQUFiLElBQXlCLEtBQUs1eUIsUUFBTCxDQUFjbWQsUUFBZCxDQUF1QixLQUFLcEwsT0FBTCxDQUFhOGdCLGFBQXBDLENBQTdCLEVBQWlGO0FBQy9FLGVBQUs5Z0IsT0FBTCxDQUFhNmdCLFFBQWIsR0FBd0IsSUFBeEI7QUFDQSxlQUFLNXlCLFFBQUwsQ0FBYzRRLFFBQWQsQ0FBdUIsS0FBS21CLE9BQUwsQ0FBYThnQixhQUFwQztBQUNEO0FBQ0QsWUFBSSxDQUFDLEtBQUtSLE1BQUwsQ0FBWTF3QixNQUFqQixFQUF5QjtBQUN2QixlQUFLMHdCLE1BQUwsR0FBY3p6QixJQUFJbWdCLEdBQUosQ0FBUSxLQUFLeVQsTUFBYixDQUFkO0FBQ0EsZUFBS3pnQixPQUFMLENBQWErZ0IsT0FBYixHQUF1QixJQUF2QjtBQUNEOztBQUVELGFBQUtDLFlBQUwsQ0FBa0IsQ0FBbEI7O0FBRUEsWUFBSSxLQUFLVCxPQUFMLENBQWEsQ0FBYixDQUFKLEVBQXFCO0FBQ25CLGVBQUt2Z0IsT0FBTCxDQUFhaWhCLFdBQWIsR0FBMkIsSUFBM0I7QUFDQSxlQUFLQyxRQUFMLEdBQWdCLEtBQUtYLE9BQUwsQ0FBYXJtQixFQUFiLENBQWdCLENBQWhCLENBQWhCO0FBQ0EsZUFBS2luQixPQUFMLEdBQWUsS0FBS2IsTUFBTCxDQUFZMXdCLE1BQVosR0FBcUIsQ0FBckIsR0FBeUIsS0FBSzB3QixNQUFMLENBQVlwbUIsRUFBWixDQUFlLENBQWYsQ0FBekIsR0FBNkNyTixRQUFNLEtBQUtxMEIsUUFBTCxDQUFjOXpCLElBQWQsQ0FBbUIsZUFBbkIsQ0FBTixDQUE1RDs7QUFFQSxjQUFJLENBQUMsS0FBS2t6QixNQUFMLENBQVksQ0FBWixDQUFMLEVBQXFCO0FBQ25CLGlCQUFLQSxNQUFMLEdBQWMsS0FBS0EsTUFBTCxDQUFZdFQsR0FBWixDQUFnQixLQUFLbVUsT0FBckIsQ0FBZDtBQUNEO0FBQ0RQLGtCQUFRLElBQVI7O0FBRUE7QUFDQSxlQUFLSSxZQUFMLENBQWtCLENBQWxCO0FBQ0Q7O0FBRUQ7QUFDQSxhQUFLSSxVQUFMOztBQUVBLGFBQUtsYixPQUFMO0FBQ0Q7QUF6RlU7QUFBQTtBQUFBLG1DQTJGRTtBQUFBOztBQUNYLFlBQUcsS0FBS3FhLE9BQUwsQ0FBYSxDQUFiLENBQUgsRUFBb0I7QUFDbEIsZUFBS2MsYUFBTCxDQUFtQixLQUFLYixPQUF4QixFQUFpQyxLQUFLRixNQUFMLENBQVlwbUIsRUFBWixDQUFlLENBQWYsRUFBa0JzRCxHQUFsQixFQUFqQyxFQUEwRCxJQUExRCxFQUFnRSxZQUFNO0FBQ3BFLG1CQUFLNmpCLGFBQUwsQ0FBbUIsT0FBS0gsUUFBeEIsRUFBa0MsT0FBS1osTUFBTCxDQUFZcG1CLEVBQVosQ0FBZSxDQUFmLEVBQWtCc0QsR0FBbEIsRUFBbEMsRUFBMkQsSUFBM0Q7QUFDRCxXQUZEO0FBR0QsU0FKRCxNQUlPO0FBQ0wsZUFBSzZqQixhQUFMLENBQW1CLEtBQUtiLE9BQXhCLEVBQWlDLEtBQUtGLE1BQUwsQ0FBWXBtQixFQUFaLENBQWUsQ0FBZixFQUFrQnNELEdBQWxCLEVBQWpDLEVBQTBELElBQTFEO0FBQ0Q7QUFDRjtBQW5HVTtBQUFBO0FBQUEsZ0NBcUdEO0FBQ1IsYUFBSzRqQixVQUFMO0FBQ0Q7QUFDRDs7Ozs7O0FBeEdXO0FBQUE7QUFBQSxnQ0E2R0QzbEIsS0E3R0MsRUE2R007QUFDZixZQUFJNmxCLFdBQVdDLFFBQVE5bEIsUUFBUSxLQUFLdUUsT0FBTCxDQUFhdkwsS0FBN0IsRUFBb0MsS0FBS3VMLE9BQUwsQ0FBYXJPLEdBQWIsR0FBbUIsS0FBS3FPLE9BQUwsQ0FBYXZMLEtBQXBFLENBQWY7O0FBRUEsZ0JBQU8sS0FBS3VMLE9BQUwsQ0FBYXdoQixxQkFBcEI7QUFDQSxlQUFLLEtBQUw7QUFDRUYsdUJBQVcsS0FBS0csYUFBTCxDQUFtQkgsUUFBbkIsQ0FBWDtBQUNBO0FBQ0YsZUFBSyxLQUFMO0FBQ0VBLHVCQUFXLEtBQUtJLGFBQUwsQ0FBbUJKLFFBQW5CLENBQVg7QUFDQTtBQU5GOztBQVNBLGVBQU9BLFNBQVNLLE9BQVQsQ0FBaUIsQ0FBakIsQ0FBUDtBQUNEOztBQUVEOzs7Ozs7QUE1SFc7QUFBQTtBQUFBLDZCQWlJSkwsUUFqSUksRUFpSU07QUFDZixnQkFBTyxLQUFLdGhCLE9BQUwsQ0FBYXdoQixxQkFBcEI7QUFDQSxlQUFLLEtBQUw7QUFDRUYsdUJBQVcsS0FBS0ksYUFBTCxDQUFtQkosUUFBbkIsQ0FBWDtBQUNBO0FBQ0YsZUFBSyxLQUFMO0FBQ0VBLHVCQUFXLEtBQUtHLGFBQUwsQ0FBbUJILFFBQW5CLENBQVg7QUFDQTtBQU5GO0FBUUEsWUFBSTdsQixRQUFRLENBQUMsS0FBS3VFLE9BQUwsQ0FBYXJPLEdBQWIsR0FBbUIsS0FBS3FPLE9BQUwsQ0FBYXZMLEtBQWpDLElBQTBDNnNCLFFBQTFDLEdBQXFELEtBQUt0aEIsT0FBTCxDQUFhdkwsS0FBOUU7O0FBRUEsZUFBT2dILEtBQVA7QUFDRDs7QUFFRDs7Ozs7O0FBL0lXO0FBQUE7QUFBQSxvQ0FvSkdBLEtBcEpILEVBb0pVO0FBQ25CLGVBQU9tbUIsUUFBUSxLQUFLNWhCLE9BQUwsQ0FBYTZoQixhQUFyQixFQUFzQ3BtQixTQUFPLEtBQUt1RSxPQUFMLENBQWE2aEIsYUFBYixHQUEyQixDQUFsQyxDQUFELEdBQXVDLENBQTVFLENBQVA7QUFDRDs7QUFFRDs7Ozs7O0FBeEpXO0FBQUE7QUFBQSxvQ0E2SkdwbUIsS0E3SkgsRUE2SlU7QUFDbkIsZUFBTyxDQUFDM0wsS0FBS0UsR0FBTCxDQUFTLEtBQUtnUSxPQUFMLENBQWE2aEIsYUFBdEIsRUFBcUNwbUIsS0FBckMsSUFBOEMsQ0FBL0MsS0FBcUQsS0FBS3VFLE9BQUwsQ0FBYTZoQixhQUFiLEdBQTZCLENBQWxGLENBQVA7QUFDRDs7QUFFRDs7Ozs7Ozs7Ozs7QUFqS1c7QUFBQTtBQUFBLG9DQTJLR0MsS0EzS0gsRUEyS1VsSyxRQTNLVixFQTJLb0JtSyxRQTNLcEIsRUEySzhCL2pCLEVBM0s5QixFQTJLa0M7QUFDM0M7QUFDQSxZQUFJLEtBQUsvUCxRQUFMLENBQWNtZCxRQUFkLENBQXVCLEtBQUtwTCxPQUFMLENBQWE4Z0IsYUFBcEMsQ0FBSixFQUF3RDtBQUN0RDtBQUNEO0FBQ0Q7QUFDQWxKLG1CQUFXcmlCLFdBQVdxaUIsUUFBWCxDQUFYLENBTjJDLENBTVg7O0FBRWhDO0FBQ0EsWUFBSUEsV0FBVyxLQUFLNVgsT0FBTCxDQUFhdkwsS0FBNUIsRUFBbUM7QUFBRW1qQixxQkFBVyxLQUFLNVgsT0FBTCxDQUFhdkwsS0FBeEI7QUFBZ0MsU0FBckUsTUFDSyxJQUFJbWpCLFdBQVcsS0FBSzVYLE9BQUwsQ0FBYXJPLEdBQTVCLEVBQWlDO0FBQUVpbUIscUJBQVcsS0FBSzVYLE9BQUwsQ0FBYXJPLEdBQXhCO0FBQThCOztBQUV0RSxZQUFJaXZCLFFBQVEsS0FBSzVnQixPQUFMLENBQWFpaEIsV0FBekI7O0FBRUEsWUFBSUwsS0FBSixFQUFXO0FBQUU7QUFDWCxjQUFJLEtBQUtMLE9BQUwsQ0FBYXJOLEtBQWIsQ0FBbUI0TyxLQUFuQixNQUE4QixDQUFsQyxFQUFxQztBQUNuQyxnQkFBSUUsUUFBUXpzQixXQUFXLEtBQUsyckIsUUFBTCxDQUFjOXpCLElBQWQsQ0FBbUIsZUFBbkIsQ0FBWCxDQUFaO0FBQ0F3cUIsdUJBQVdBLFlBQVlvSyxLQUFaLEdBQW9CQSxRQUFRLEtBQUtoaUIsT0FBTCxDQUFhaWlCLElBQXpDLEdBQWdEckssUUFBM0Q7QUFDRCxXQUhELE1BR087QUFDTCxnQkFBSXNLLFFBQVEzc0IsV0FBVyxLQUFLaXJCLE9BQUwsQ0FBYXB6QixJQUFiLENBQWtCLGVBQWxCLENBQVgsQ0FBWjtBQUNBd3FCLHVCQUFXQSxZQUFZc0ssS0FBWixHQUFvQkEsUUFBUSxLQUFLbGlCLE9BQUwsQ0FBYWlpQixJQUF6QyxHQUFnRHJLLFFBQTNEO0FBQ0Q7QUFDRjs7QUFFRDtBQUNBO0FBQ0EsWUFBSSxLQUFLNVgsT0FBTCxDQUFhMmdCLFFBQWIsSUFBeUIsQ0FBQ29CLFFBQTlCLEVBQXdDO0FBQ3RDbksscUJBQVcsS0FBSzVYLE9BQUwsQ0FBYXJPLEdBQWIsR0FBbUJpbUIsUUFBOUI7QUFDRDs7QUFFRCxZQUFJM29CLFFBQVEsSUFBWjtBQUFBLFlBQ0lrekIsT0FBTyxLQUFLbmlCLE9BQUwsQ0FBYTJnQixRQUR4QjtBQUFBLFlBRUl5QixPQUFPRCxPQUFPLFFBQVAsR0FBa0IsT0FGN0I7QUFBQSxZQUdJRSxPQUFPRixPQUFPLEtBQVAsR0FBZSxNQUgxQjtBQUFBLFlBSUlHLFlBQVlSLE1BQU0sQ0FBTixFQUFTL3FCLHFCQUFULEdBQWlDcXJCLElBQWpDLENBSmhCO0FBQUEsWUFLSUcsVUFBVSxLQUFLdDBCLFFBQUwsQ0FBYyxDQUFkLEVBQWlCOEkscUJBQWpCLEdBQXlDcXJCLElBQXpDLENBTGQ7O0FBTUk7QUFDQWQsbUJBQVcsS0FBS2tCLFNBQUwsQ0FBZTVLLFFBQWYsQ0FQZjs7QUFRSTtBQUNBNkssbUJBQVcsQ0FBQ0YsVUFBVUQsU0FBWCxJQUF3QmhCLFFBVHZDOztBQVVJO0FBQ0FvQixtQkFBVyxDQUFDbkIsUUFBUWtCLFFBQVIsRUFBa0JGLE9BQWxCLElBQTZCLEdBQTlCLEVBQW1DWixPQUFuQyxDQUEyQyxLQUFLM2hCLE9BQUwsQ0FBYTJpQixPQUF4RCxDQVhmO0FBWUk7QUFDQS9LLG1CQUFXcmlCLFdBQVdxaUIsU0FBUytKLE9BQVQsQ0FBaUIsS0FBSzNoQixPQUFMLENBQWEyaUIsT0FBOUIsQ0FBWCxDQUFYO0FBQ0E7QUFDSixZQUFJdG5CLE1BQU0sRUFBVjs7QUFFQSxhQUFLdW5CLFVBQUwsQ0FBZ0JkLEtBQWhCLEVBQXVCbEssUUFBdkI7O0FBRUE7QUFDQSxZQUFJZ0osS0FBSixFQUFXO0FBQ1QsY0FBSWlDLGFBQWEsS0FBS3RDLE9BQUwsQ0FBYXJOLEtBQWIsQ0FBbUI0TyxLQUFuQixNQUE4QixDQUEvQzs7QUFDSTtBQUNBZ0IsYUFGSjs7QUFHSTtBQUNBQyxzQkFBYSxDQUFDLEVBQUV4QixRQUFRZSxTQUFSLEVBQW1CQyxPQUFuQixJQUE4QixHQUFoQyxDQUpsQjtBQUtBO0FBQ0EsY0FBSU0sVUFBSixFQUFnQjtBQUNkO0FBQ0F4bkIsZ0JBQUlnbkIsSUFBSixJQUFlSyxRQUFmO0FBQ0E7QUFDQUksa0JBQU12dEIsV0FBVyxLQUFLMnJCLFFBQUwsQ0FBYyxDQUFkLEVBQWlCcnZCLEtBQWpCLENBQXVCd3dCLElBQXZCLENBQVgsSUFBMkNLLFFBQTNDLEdBQXNESyxTQUE1RDtBQUNBO0FBQ0E7QUFDQSxnQkFBSS9rQixNQUFNLE9BQU9BLEVBQVAsS0FBYyxVQUF4QixFQUFvQztBQUFFQTtBQUFPLGFBUC9CLENBTytCO0FBQzlDLFdBUkQsTUFRTztBQUNMO0FBQ0EsZ0JBQUlnbEIsWUFBWXp0QixXQUFXLEtBQUtpckIsT0FBTCxDQUFhLENBQWIsRUFBZ0IzdUIsS0FBaEIsQ0FBc0J3d0IsSUFBdEIsQ0FBWCxDQUFoQjtBQUNBO0FBQ0E7QUFDQVMsa0JBQU1KLFlBQVlwdEIsTUFBTTB0QixTQUFOLElBQW1CLENBQUMsS0FBS2hqQixPQUFMLENBQWFpakIsWUFBYixHQUE0QixLQUFLampCLE9BQUwsQ0FBYXZMLEtBQTFDLEtBQWtELENBQUMsS0FBS3VMLE9BQUwsQ0FBYXJPLEdBQWIsR0FBaUIsS0FBS3FPLE9BQUwsQ0FBYXZMLEtBQS9CLElBQXNDLEdBQXhGLENBQW5CLEdBQWtIdXVCLFNBQTlILElBQTJJRCxTQUFqSjtBQUNEO0FBQ0Q7QUFDQTFuQix1QkFBVyttQixJQUFYLElBQXdCVSxHQUF4QjtBQUNEOztBQUVELGFBQUs3MEIsUUFBTCxDQUFjK1EsR0FBZCxDQUFrQixxQkFBbEIsRUFBeUMsWUFBVztBQUNwQzs7OztBQUlBL1AsZ0JBQU1oQixRQUFOLENBQWVFLE9BQWYsQ0FBdUIsaUJBQXZCLEVBQTBDLENBQUMyekIsS0FBRCxDQUExQztBQUNILFNBTmI7O0FBUUE7QUFDQSxZQUFJb0IsV0FBVyxLQUFLajFCLFFBQUwsQ0FBY0MsSUFBZCxDQUFtQixVQUFuQixJQUFpQyxPQUFLLEVBQXRDLEdBQTJDLEtBQUs4UixPQUFMLENBQWFrakIsUUFBdkU7O0FBRUFuMkIsbUJBQVdvUixJQUFYLENBQWdCK2tCLFFBQWhCLEVBQTBCcEIsS0FBMUIsRUFBaUMsWUFBVztBQUMxQztBQUNBO0FBQ0E7QUFDQSxjQUFJeHNCLE1BQU1vdEIsUUFBTixDQUFKLEVBQXFCO0FBQ25CWixrQkFBTXptQixHQUFOLENBQVVnbkIsSUFBVixFQUFtQmYsV0FBVyxHQUE5QjtBQUNELFdBRkQsTUFHSztBQUNIUSxrQkFBTXptQixHQUFOLENBQVVnbkIsSUFBVixFQUFtQkssUUFBbkI7QUFDRDs7QUFFRCxjQUFJLENBQUN6ekIsTUFBTStRLE9BQU4sQ0FBY2loQixXQUFuQixFQUFnQztBQUM5QjtBQUNBaHlCLGtCQUFNeXhCLEtBQU4sQ0FBWXJsQixHQUFaLENBQWdCK21CLElBQWhCLEVBQXlCZCxXQUFXLEdBQXBDO0FBQ0QsV0FIRCxNQUdPO0FBQ0w7QUFDQXJ5QixrQkFBTXl4QixLQUFOLENBQVlybEIsR0FBWixDQUFnQkEsR0FBaEI7QUFDRDtBQUNGLFNBbEJEOztBQXFCQTs7OztBQUlBOUcscUJBQWF0RixNQUFNdWlCLE9BQW5CO0FBQ0F2aUIsY0FBTXVpQixPQUFOLEdBQWdCMWYsV0FBVyxZQUFVO0FBQ25DN0MsZ0JBQU1oQixRQUFOLENBQWVFLE9BQWYsQ0FBdUIsbUJBQXZCLEVBQTRDLENBQUMyekIsS0FBRCxDQUE1QztBQUNELFNBRmUsRUFFYjd5QixNQUFNK1EsT0FBTixDQUFjbWpCLFlBRkQsQ0FBaEI7QUFHRDs7QUFFRDs7Ozs7OztBQWpTVztBQUFBO0FBQUEsbUNBdVNFM1ksR0F2U0YsRUF1U087QUFDaEIsWUFBSTRZLFVBQVc1WSxRQUFRLENBQVIsR0FBWSxLQUFLeEssT0FBTCxDQUFhaWpCLFlBQXpCLEdBQXdDLEtBQUtqakIsT0FBTCxDQUFhcWpCLFVBQXBFO0FBQ0EsWUFBSTNtQixLQUFLLEtBQUs0akIsTUFBTCxDQUFZcG1CLEVBQVosQ0FBZXNRLEdBQWYsRUFBb0JwZCxJQUFwQixDQUF5QixJQUF6QixLQUFrQ0wsV0FBV2lCLFdBQVgsQ0FBdUIsQ0FBdkIsRUFBMEIsUUFBMUIsQ0FBM0M7QUFDQSxhQUFLc3lCLE1BQUwsQ0FBWXBtQixFQUFaLENBQWVzUSxHQUFmLEVBQW9CcGQsSUFBcEIsQ0FBeUI7QUFDdkIsZ0JBQU1zUCxFQURpQjtBQUV2QixpQkFBTyxLQUFLc0QsT0FBTCxDQUFhck8sR0FGRztBQUd2QixpQkFBTyxLQUFLcU8sT0FBTCxDQUFhdkwsS0FIRztBQUl2QixrQkFBUSxLQUFLdUwsT0FBTCxDQUFhaWlCO0FBSkUsU0FBekI7QUFNQSxhQUFLM0IsTUFBTCxDQUFZcG1CLEVBQVosQ0FBZXNRLEdBQWYsRUFBb0JoTixHQUFwQixDQUF3QjRsQixPQUF4QjtBQUNBLGFBQUs3QyxPQUFMLENBQWFybUIsRUFBYixDQUFnQnNRLEdBQWhCLEVBQXFCcGQsSUFBckIsQ0FBMEI7QUFDeEIsa0JBQVEsUUFEZ0I7QUFFeEIsMkJBQWlCc1AsRUFGTztBQUd4QiwyQkFBaUIsS0FBS3NELE9BQUwsQ0FBYXJPLEdBSE47QUFJeEIsMkJBQWlCLEtBQUtxTyxPQUFMLENBQWF2TCxLQUpOO0FBS3hCLDJCQUFpQjJ1QixPQUxPO0FBTXhCLDhCQUFvQixLQUFLcGpCLE9BQUwsQ0FBYTJnQixRQUFiLEdBQXdCLFVBQXhCLEdBQXFDLFlBTmpDO0FBT3hCLHNCQUFZO0FBUFksU0FBMUI7QUFTRDs7QUFFRDs7Ozs7Ozs7QUE1VFc7QUFBQTtBQUFBLGlDQW1VQUgsT0FuVUEsRUFtVVNoakIsR0FuVVQsRUFtVWM7QUFDdkIsWUFBSWdOLE1BQU0sS0FBS3hLLE9BQUwsQ0FBYWloQixXQUFiLEdBQTJCLEtBQUtWLE9BQUwsQ0FBYXJOLEtBQWIsQ0FBbUJzTixPQUFuQixDQUEzQixHQUF5RCxDQUFuRTtBQUNBLGFBQUtGLE1BQUwsQ0FBWXBtQixFQUFaLENBQWVzUSxHQUFmLEVBQW9CaE4sR0FBcEIsQ0FBd0JBLEdBQXhCO0FBQ0FnakIsZ0JBQVFwekIsSUFBUixDQUFhLGVBQWIsRUFBOEJvUSxHQUE5QjtBQUNEOztBQUVEOzs7Ozs7Ozs7Ozs7QUF6VVc7QUFBQTtBQUFBLG1DQW9WRXpNLENBcFZGLEVBb1ZLeXZCLE9BcFZMLEVBb1ZjaGpCLEdBcFZkLEVBb1ZtQjtBQUM1QixZQUFJL0IsS0FBSixFQUFXNm5CLE1BQVg7QUFDQSxZQUFJLENBQUM5bEIsR0FBTCxFQUFVO0FBQUM7QUFDVHpNLFlBQUV1SixjQUFGO0FBQ0EsY0FBSXJMLFFBQVEsSUFBWjtBQUFBLGNBQ0kweEIsV0FBVyxLQUFLM2dCLE9BQUwsQ0FBYTJnQixRQUQ1QjtBQUFBLGNBRUlyakIsUUFBUXFqQixXQUFXLFFBQVgsR0FBc0IsT0FGbEM7QUFBQSxjQUdJNVAsWUFBWTRQLFdBQVcsS0FBWCxHQUFtQixNQUhuQztBQUFBLGNBSUk0QyxjQUFjNUMsV0FBVzV2QixFQUFFZ1IsS0FBYixHQUFxQmhSLEVBQUU4USxLQUp6QztBQUFBLGNBS0kyaEIsZUFBZSxLQUFLaEQsT0FBTCxDQUFhLENBQWIsRUFBZ0J6cEIscUJBQWhCLEdBQXdDdUcsS0FBeEMsSUFBaUQsQ0FMcEU7QUFBQSxjQU1JbW1CLFNBQVMsS0FBS3gxQixRQUFMLENBQWMsQ0FBZCxFQUFpQjhJLHFCQUFqQixHQUF5Q3VHLEtBQXpDLENBTmI7QUFBQSxjQU9Jb21CLGVBQWUvQyxXQUFXOXpCLEVBQUUwRyxNQUFGLEVBQVV5YixTQUFWLEVBQVgsR0FBbUNuaUIsRUFBRTBHLE1BQUYsRUFBVW93QixVQUFWLEVBUHREOztBQVVBLGNBQUlDLGFBQWEsS0FBSzMxQixRQUFMLENBQWN1SSxNQUFkLEdBQXVCdWEsU0FBdkIsQ0FBakI7O0FBRUE7QUFDQTtBQUNBLGNBQUloZ0IsRUFBRTBTLE9BQUYsS0FBYzFTLEVBQUVnUixLQUFwQixFQUEyQjtBQUFFd2hCLDBCQUFjQSxjQUFjRyxZQUE1QjtBQUEyQztBQUN4RSxjQUFJRyxlQUFlTixjQUFjSyxVQUFqQztBQUNBLGNBQUlFLEtBQUo7QUFDQSxjQUFJRCxlQUFlLENBQW5CLEVBQXNCO0FBQ3BCQyxvQkFBUSxDQUFSO0FBQ0QsV0FGRCxNQUVPLElBQUlELGVBQWVKLE1BQW5CLEVBQTJCO0FBQ2hDSyxvQkFBUUwsTUFBUjtBQUNELFdBRk0sTUFFQTtBQUNMSyxvQkFBUUQsWUFBUjtBQUNEO0FBQ0QsY0FBSUUsWUFBWXhDLFFBQVF1QyxLQUFSLEVBQWVMLE1BQWYsQ0FBaEI7O0FBRUFob0Isa0JBQVEsS0FBS3VvQixNQUFMLENBQVlELFNBQVosQ0FBUjs7QUFFQTtBQUNBLGNBQUloM0IsV0FBV0ksR0FBWCxNQUFvQixDQUFDLEtBQUs2UyxPQUFMLENBQWEyZ0IsUUFBdEMsRUFBZ0Q7QUFBQ2xsQixvQkFBUSxLQUFLdUUsT0FBTCxDQUFhck8sR0FBYixHQUFtQjhKLEtBQTNCO0FBQWtDOztBQUVuRkEsa0JBQVF4TSxNQUFNZzFCLFlBQU4sQ0FBbUIsSUFBbkIsRUFBeUJ4b0IsS0FBekIsQ0FBUjtBQUNBO0FBQ0E2bkIsbUJBQVMsS0FBVDs7QUFFQSxjQUFJLENBQUM5QyxPQUFMLEVBQWM7QUFBQztBQUNiLGdCQUFJMEQsZUFBZUMsWUFBWSxLQUFLM0QsT0FBakIsRUFBMEJ6UCxTQUExQixFQUFxQytTLEtBQXJDLEVBQTRDeG1CLEtBQTVDLENBQW5CO0FBQUEsZ0JBQ0k4bUIsZUFBZUQsWUFBWSxLQUFLakQsUUFBakIsRUFBMkJuUSxTQUEzQixFQUFzQytTLEtBQXRDLEVBQTZDeG1CLEtBQTdDLENBRG5CO0FBRUlrakIsc0JBQVUwRCxnQkFBZ0JFLFlBQWhCLEdBQStCLEtBQUs1RCxPQUFwQyxHQUE4QyxLQUFLVSxRQUE3RDtBQUNMO0FBRUYsU0EzQ0QsTUEyQ087QUFBQztBQUNOemxCLGtCQUFRLEtBQUt3b0IsWUFBTCxDQUFrQixJQUFsQixFQUF3QnptQixHQUF4QixDQUFSO0FBQ0E4bEIsbUJBQVMsSUFBVDtBQUNEOztBQUVELGFBQUtqQyxhQUFMLENBQW1CYixPQUFuQixFQUE0Qi9rQixLQUE1QixFQUFtQzZuQixNQUFuQztBQUNEOztBQUVEOzs7Ozs7OztBQXpZVztBQUFBO0FBQUEsbUNBZ1pFOUMsT0FoWkYsRUFnWlcva0IsS0FoWlgsRUFnWmtCO0FBQzNCLFlBQUkrQixHQUFKO0FBQUEsWUFDRXlrQixPQUFPLEtBQUtqaUIsT0FBTCxDQUFhaWlCLElBRHRCO0FBQUEsWUFFRW9DLE1BQU05dUIsV0FBVzBzQixPQUFLLENBQWhCLENBRlI7QUFBQSxZQUdFNXJCLElBSEY7QUFBQSxZQUdRaXVCLFFBSFI7QUFBQSxZQUdrQkMsUUFIbEI7QUFJQSxZQUFJLENBQUMsQ0FBQy9ELE9BQU4sRUFBZTtBQUNiaGpCLGdCQUFNakksV0FBV2lyQixRQUFRcHpCLElBQVIsQ0FBYSxlQUFiLENBQVgsQ0FBTjtBQUNELFNBRkQsTUFHSztBQUNIb1EsZ0JBQU0vQixLQUFOO0FBQ0Q7QUFDRHBGLGVBQU9tSCxNQUFNeWtCLElBQWI7QUFDQXFDLG1CQUFXOW1CLE1BQU1uSCxJQUFqQjtBQUNBa3VCLG1CQUFXRCxXQUFXckMsSUFBdEI7QUFDQSxZQUFJNXJCLFNBQVMsQ0FBYixFQUFnQjtBQUNkLGlCQUFPbUgsR0FBUDtBQUNEO0FBQ0RBLGNBQU1BLE9BQU84bUIsV0FBV0QsR0FBbEIsR0FBd0JFLFFBQXhCLEdBQW1DRCxRQUF6QztBQUNBLGVBQU85bUIsR0FBUDtBQUNEOztBQUVEOzs7Ozs7QUFyYVc7QUFBQTtBQUFBLGdDQTBhRDtBQUNSLGFBQUtnbkIsZ0JBQUwsQ0FBc0IsS0FBS2hFLE9BQTNCO0FBQ0EsWUFBRyxLQUFLRCxPQUFMLENBQWEsQ0FBYixDQUFILEVBQW9CO0FBQ2xCLGVBQUtpRSxnQkFBTCxDQUFzQixLQUFLdEQsUUFBM0I7QUFDRDtBQUNGOztBQUdEOzs7Ozs7O0FBbGJXO0FBQUE7QUFBQSx1Q0F3Yk1WLE9BeGJOLEVBd2JlO0FBQ3hCLFlBQUl2eEIsUUFBUSxJQUFaO0FBQUEsWUFDSXcxQixTQURKO0FBQUEsWUFFSXJ5QixLQUZKOztBQUlFLGFBQUtrdUIsTUFBTCxDQUFZN2xCLEdBQVosQ0FBZ0Isa0JBQWhCLEVBQW9DTCxFQUFwQyxDQUF1QyxrQkFBdkMsRUFBMkQsVUFBU3JKLENBQVQsRUFBWTtBQUNyRSxjQUFJeVosTUFBTXZiLE1BQU1xeEIsTUFBTixDQUFhcE4sS0FBYixDQUFtQnJtQixFQUFFLElBQUYsQ0FBbkIsQ0FBVjtBQUNBb0MsZ0JBQU15MUIsWUFBTixDQUFtQjN6QixDQUFuQixFQUFzQjlCLE1BQU1zeEIsT0FBTixDQUFjcm1CLEVBQWQsQ0FBaUJzUSxHQUFqQixDQUF0QixFQUE2QzNkLEVBQUUsSUFBRixFQUFRMlEsR0FBUixFQUE3QztBQUNELFNBSEQ7O0FBS0EsWUFBSSxLQUFLd0MsT0FBTCxDQUFhMmtCLFdBQWpCLEVBQThCO0FBQzVCLGVBQUsxMkIsUUFBTCxDQUFjd00sR0FBZCxDQUFrQixpQkFBbEIsRUFBcUNMLEVBQXJDLENBQXdDLGlCQUF4QyxFQUEyRCxVQUFTckosQ0FBVCxFQUFZO0FBQ3JFLGdCQUFJOUIsTUFBTWhCLFFBQU4sQ0FBZUMsSUFBZixDQUFvQixVQUFwQixDQUFKLEVBQXFDO0FBQUUscUJBQU8sS0FBUDtBQUFlOztBQUV0RCxnQkFBSSxDQUFDckIsRUFBRWtFLEVBQUVzSixNQUFKLEVBQVlULEVBQVosQ0FBZSxzQkFBZixDQUFMLEVBQTZDO0FBQzNDLGtCQUFJM0ssTUFBTStRLE9BQU4sQ0FBY2loQixXQUFsQixFQUErQjtBQUM3Qmh5QixzQkFBTXkxQixZQUFOLENBQW1CM3pCLENBQW5CO0FBQ0QsZUFGRCxNQUVPO0FBQ0w5QixzQkFBTXkxQixZQUFOLENBQW1CM3pCLENBQW5CLEVBQXNCOUIsTUFBTXV4QixPQUE1QjtBQUNEO0FBQ0Y7QUFDRixXQVZEO0FBV0Q7O0FBRUgsWUFBSSxLQUFLeGdCLE9BQUwsQ0FBYTRrQixTQUFqQixFQUE0QjtBQUMxQixlQUFLckUsT0FBTCxDQUFhM2QsUUFBYjs7QUFFQSxjQUFJZ00sUUFBUS9oQixFQUFFLE1BQUYsQ0FBWjtBQUNBMnpCLGtCQUNHL2xCLEdBREgsQ0FDTyxxQkFEUCxFQUVHTCxFQUZILENBRU0scUJBRk4sRUFFNkIsVUFBU3JKLENBQVQsRUFBWTtBQUNyQ3l2QixvQkFBUTNoQixRQUFSLENBQWlCLGFBQWpCO0FBQ0E1UCxrQkFBTXl4QixLQUFOLENBQVk3aEIsUUFBWixDQUFxQixhQUFyQixFQUZxQyxDQUVEO0FBQ3BDNVAsa0JBQU1oQixRQUFOLENBQWVDLElBQWYsQ0FBb0IsVUFBcEIsRUFBZ0MsSUFBaEM7O0FBRUF1MkIsd0JBQVk1M0IsRUFBRWtFLEVBQUU4ekIsYUFBSixDQUFaOztBQUVBalcsa0JBQU14VSxFQUFOLENBQVMscUJBQVQsRUFBZ0MsVUFBU3JKLENBQVQsRUFBWTtBQUMxQ0EsZ0JBQUV1SixjQUFGO0FBQ0FyTCxvQkFBTXkxQixZQUFOLENBQW1CM3pCLENBQW5CLEVBQXNCMHpCLFNBQXRCO0FBRUQsYUFKRCxFQUlHcnFCLEVBSkgsQ0FJTSxtQkFKTixFQUkyQixVQUFTckosQ0FBVCxFQUFZO0FBQ3JDOUIsb0JBQU15MUIsWUFBTixDQUFtQjN6QixDQUFuQixFQUFzQjB6QixTQUF0Qjs7QUFFQWpFLHNCQUFRMXRCLFdBQVIsQ0FBb0IsYUFBcEI7QUFDQTdELG9CQUFNeXhCLEtBQU4sQ0FBWTV0QixXQUFaLENBQXdCLGFBQXhCO0FBQ0E3RCxvQkFBTWhCLFFBQU4sQ0FBZUMsSUFBZixDQUFvQixVQUFwQixFQUFnQyxLQUFoQzs7QUFFQTBnQixvQkFBTW5VLEdBQU4sQ0FBVSx1Q0FBVjtBQUNELGFBWkQ7QUFhSCxXQXRCRDtBQXVCQTtBQXZCQSxXQXdCQ0wsRUF4QkQsQ0F3QkksMkNBeEJKLEVBd0JpRCxVQUFTckosQ0FBVCxFQUFZO0FBQzNEQSxjQUFFdUosY0FBRjtBQUNELFdBMUJEO0FBMkJEOztBQUVEa21CLGdCQUFRL2xCLEdBQVIsQ0FBWSxtQkFBWixFQUFpQ0wsRUFBakMsQ0FBb0MsbUJBQXBDLEVBQXlELFVBQVNySixDQUFULEVBQVk7QUFDbkUsY0FBSSt6QixXQUFXajRCLEVBQUUsSUFBRixDQUFmO0FBQUEsY0FDSTJkLE1BQU12YixNQUFNK1EsT0FBTixDQUFjaWhCLFdBQWQsR0FBNEJoeUIsTUFBTXN4QixPQUFOLENBQWNyTixLQUFkLENBQW9CNFIsUUFBcEIsQ0FBNUIsR0FBNEQsQ0FEdEU7QUFBQSxjQUVJQyxXQUFXeHZCLFdBQVd0RyxNQUFNcXhCLE1BQU4sQ0FBYXBtQixFQUFiLENBQWdCc1EsR0FBaEIsRUFBcUJoTixHQUFyQixFQUFYLENBRmY7QUFBQSxjQUdJd25CLFFBSEo7O0FBS0E7QUFDQWo0QixxQkFBV21MLFFBQVgsQ0FBb0JhLFNBQXBCLENBQThCaEksQ0FBOUIsRUFBaUMsUUFBakMsRUFBMkM7QUFDekNrMEIsc0JBQVUsWUFBVztBQUNuQkQseUJBQVdELFdBQVc5MUIsTUFBTStRLE9BQU4sQ0FBY2lpQixJQUFwQztBQUNELGFBSHdDO0FBSXpDaUQsc0JBQVUsWUFBVztBQUNuQkYseUJBQVdELFdBQVc5MUIsTUFBTStRLE9BQU4sQ0FBY2lpQixJQUFwQztBQUNELGFBTndDO0FBT3pDa0QsMkJBQWUsWUFBVztBQUN4QkgseUJBQVdELFdBQVc5MUIsTUFBTStRLE9BQU4sQ0FBY2lpQixJQUFkLEdBQXFCLEVBQTNDO0FBQ0QsYUFUd0M7QUFVekNtRCwyQkFBZSxZQUFXO0FBQ3hCSix5QkFBV0QsV0FBVzkxQixNQUFNK1EsT0FBTixDQUFjaWlCLElBQWQsR0FBcUIsRUFBM0M7QUFDRCxhQVp3QztBQWF6Q3pvQixxQkFBUyxZQUFXO0FBQUU7QUFDcEJ6SSxnQkFBRXVKLGNBQUY7QUFDQXJMLG9CQUFNb3lCLGFBQU4sQ0FBb0J5RCxRQUFwQixFQUE4QkUsUUFBOUIsRUFBd0MsSUFBeEM7QUFDRDtBQWhCd0MsV0FBM0M7QUFrQkE7Ozs7QUFJRCxTQTdCRDtBQThCRDs7QUFFRDs7OztBQWpoQlc7QUFBQTtBQUFBLGdDQW9oQkQ7QUFDUixhQUFLekUsT0FBTCxDQUFhOWxCLEdBQWIsQ0FBaUIsWUFBakI7QUFDQSxhQUFLNmxCLE1BQUwsQ0FBWTdsQixHQUFaLENBQWdCLFlBQWhCO0FBQ0EsYUFBS3hNLFFBQUwsQ0FBY3dNLEdBQWQsQ0FBa0IsWUFBbEI7O0FBRUFsRyxxQkFBYSxLQUFLaWQsT0FBbEI7O0FBRUF6a0IsbUJBQVdzQixnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBNWhCVTs7QUFBQTtBQUFBOztBQStoQmJneUIsU0FBT3JhLFFBQVAsR0FBa0I7QUFDaEI7Ozs7O0FBS0F2UixXQUFPLENBTlM7QUFPaEI7Ozs7O0FBS0E5QyxTQUFLLEdBWlc7QUFhaEI7Ozs7O0FBS0Fzd0IsVUFBTSxDQWxCVTtBQW1CaEI7Ozs7O0FBS0FnQixrQkFBYyxDQXhCRTtBQXlCaEI7Ozs7O0FBS0FJLGdCQUFZLEdBOUJJO0FBK0JoQjs7Ozs7QUFLQXRDLGFBQVMsS0FwQ087QUFxQ2hCOzs7OztBQUtBNEQsaUJBQWEsSUExQ0c7QUEyQ2hCOzs7OztBQUtBaEUsY0FBVSxLQWhETTtBQWlEaEI7Ozs7O0FBS0FpRSxlQUFXLElBdERLO0FBdURoQjs7Ozs7QUFLQS9ELGNBQVUsS0E1RE07QUE2RGhCOzs7OztBQUtBSSxpQkFBYSxLQWxFRztBQW1FaEI7OztBQUdBO0FBQ0E7Ozs7O0FBS0EwQixhQUFTLENBNUVPO0FBNkVoQjs7O0FBR0E7QUFDQTs7Ozs7QUFLQU8sY0FBVSxHQXRGTSxFQXNGRjtBQUNkOzs7OztBQUtBcEMsbUJBQWUsVUE1RkM7QUE2RmhCOzs7OztBQUtBdUUsb0JBQWdCLEtBbEdBO0FBbUdoQjs7Ozs7QUFLQWxDLGtCQUFjLEdBeEdFO0FBeUdoQjs7Ozs7QUFLQXRCLG1CQUFlLENBOUdDO0FBK0doQjs7Ozs7QUFLQUwsMkJBQXVCO0FBcEhQLEdBQWxCOztBQXVIQSxXQUFTRCxPQUFULENBQWlCK0QsSUFBakIsRUFBdUJDLEdBQXZCLEVBQTRCO0FBQzFCLFdBQVFELE9BQU9DLEdBQWY7QUFDRDtBQUNELFdBQVNwQixXQUFULENBQXFCM0QsT0FBckIsRUFBOEJ0ZSxHQUE5QixFQUFtQ3NqQixRQUFuQyxFQUE2Q2xvQixLQUE3QyxFQUFvRDtBQUNsRCxXQUFPeE4sS0FBS3FTLEdBQUwsQ0FBVXFlLFFBQVE5b0IsUUFBUixHQUFtQndLLEdBQW5CLElBQTJCc2UsUUFBUWxqQixLQUFSLE1BQW1CLENBQS9DLEdBQXFEa29CLFFBQTlELENBQVA7QUFDRDtBQUNELFdBQVM1RCxPQUFULENBQWlCNkQsSUFBakIsRUFBdUJocUIsS0FBdkIsRUFBOEI7QUFDNUIsV0FBTzNMLEtBQUs0MUIsR0FBTCxDQUFTanFCLEtBQVQsSUFBZ0IzTCxLQUFLNDFCLEdBQUwsQ0FBU0QsSUFBVCxDQUF2QjtBQUNEOztBQUVEO0FBQ0ExNEIsYUFBV00sTUFBWCxDQUFrQmd6QixNQUFsQixFQUEwQixRQUExQjtBQUVDLENBbnFCQSxDQW1xQkM1cUIsTUFucUJELENBQUQ7Q0NGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNUksQ0FBVCxFQUFZOztBQUViOzs7Ozs7O0FBRmEsTUFTUDg0QixNQVRPO0FBVVg7Ozs7OztBQU1BLG9CQUFZN3ZCLE9BQVosRUFBcUJrSyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLL1IsUUFBTCxHQUFnQjZILE9BQWhCO0FBQ0EsV0FBS2tLLE9BQUwsR0FBZW5ULEVBQUV5TSxNQUFGLENBQVMsRUFBVCxFQUFhcXNCLE9BQU8zZixRQUFwQixFQUE4QixLQUFLL1gsUUFBTCxDQUFjQyxJQUFkLEVBQTlCLEVBQW9EOFIsT0FBcEQsQ0FBZjs7QUFFQSxXQUFLalIsS0FBTDs7QUFFQWhDLGlCQUFXWSxjQUFYLENBQTBCLElBQTFCLEVBQWdDLFFBQWhDO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUF6Qlc7QUFBQTtBQUFBLDhCQThCSDtBQUNOLFlBQUkyaUIsVUFBVSxLQUFLcmlCLFFBQUwsQ0FBYzhILE1BQWQsQ0FBcUIseUJBQXJCLENBQWQ7QUFBQSxZQUNJMkcsS0FBSyxLQUFLek8sUUFBTCxDQUFjLENBQWQsRUFBaUJ5TyxFQUFqQixJQUF1QjNQLFdBQVdpQixXQUFYLENBQXVCLENBQXZCLEVBQTBCLFFBQTFCLENBRGhDO0FBQUEsWUFFSWlCLFFBQVEsSUFGWjs7QUFJQSxZQUFJLENBQUNxaEIsUUFBUTFnQixNQUFiLEVBQXFCO0FBQ25CLGVBQUtnMkIsVUFBTCxHQUFrQixJQUFsQjtBQUNEO0FBQ0QsYUFBS0MsVUFBTCxHQUFrQnZWLFFBQVExZ0IsTUFBUixHQUFpQjBnQixPQUFqQixHQUEyQnpqQixFQUFFLEtBQUttVCxPQUFMLENBQWE4bEIsU0FBZixFQUEwQkMsU0FBMUIsQ0FBb0MsS0FBSzkzQixRQUF6QyxDQUE3QztBQUNBLGFBQUs0M0IsVUFBTCxDQUFnQmhuQixRQUFoQixDQUF5QixLQUFLbUIsT0FBTCxDQUFha2EsY0FBdEM7O0FBRUEsYUFBS2pzQixRQUFMLENBQWM0USxRQUFkLENBQXVCLEtBQUttQixPQUFMLENBQWFnbUIsV0FBcEMsRUFDYzU0QixJQURkLENBQ21CLEVBQUMsZUFBZXNQLEVBQWhCLEVBRG5COztBQUdBLGFBQUt1cEIsV0FBTCxHQUFtQixLQUFLam1CLE9BQUwsQ0FBYWttQixVQUFoQztBQUNBLGFBQUtDLE9BQUwsR0FBZSxLQUFmO0FBQ0F0NUIsVUFBRTBHLE1BQUYsRUFBVXlMLEdBQVYsQ0FBYyxnQkFBZCxFQUFnQyxZQUFVO0FBQ3hDO0FBQ0EvUCxnQkFBTW0zQixlQUFOLEdBQXdCbjNCLE1BQU1oQixRQUFOLENBQWVvTixHQUFmLENBQW1CLFNBQW5CLEtBQWlDLE1BQWpDLEdBQTBDLENBQTFDLEdBQThDcE0sTUFBTWhCLFFBQU4sQ0FBZSxDQUFmLEVBQWtCOEkscUJBQWxCLEdBQTBDTixNQUFoSDtBQUNBeEgsZ0JBQU00MkIsVUFBTixDQUFpQnhxQixHQUFqQixDQUFxQixRQUFyQixFQUErQnBNLE1BQU1tM0IsZUFBckM7QUFDQW4zQixnQkFBTW8zQixVQUFOLEdBQW1CcDNCLE1BQU1tM0IsZUFBekI7QUFDQSxjQUFHbjNCLE1BQU0rUSxPQUFOLENBQWN2SSxNQUFkLEtBQXlCLEVBQTVCLEVBQStCO0FBQzdCeEksa0JBQU1taEIsT0FBTixHQUFnQnZqQixFQUFFLE1BQU1vQyxNQUFNK1EsT0FBTixDQUFjdkksTUFBdEIsQ0FBaEI7QUFDRCxXQUZELE1BRUs7QUFDSHhJLGtCQUFNcTNCLFlBQU47QUFDRDs7QUFFRHIzQixnQkFBTXMzQixTQUFOLENBQWdCLFlBQVU7QUFDeEIsZ0JBQUlDLFNBQVNqekIsT0FBTzhELFdBQXBCO0FBQ0FwSSxrQkFBTXczQixLQUFOLENBQVksS0FBWixFQUFtQkQsTUFBbkI7QUFDQTtBQUNBLGdCQUFJLENBQUN2M0IsTUFBTWszQixPQUFYLEVBQW9CO0FBQ2xCbDNCLG9CQUFNeTNCLGFBQU4sQ0FBcUJGLFVBQVV2M0IsTUFBTTAzQixRQUFqQixHQUE2QixLQUE3QixHQUFxQyxJQUF6RDtBQUNEO0FBQ0YsV0FQRDtBQVFBMTNCLGdCQUFNaVgsT0FBTixDQUFjeEosR0FBRzVMLEtBQUgsQ0FBUyxHQUFULEVBQWM4MUIsT0FBZCxHQUF3QmppQixJQUF4QixDQUE2QixHQUE3QixDQUFkO0FBQ0QsU0FwQkQ7QUFxQkQ7O0FBRUQ7Ozs7OztBQXJFVztBQUFBO0FBQUEscUNBMEVJO0FBQ2IsWUFBSXhPLE1BQU0sS0FBSzZKLE9BQUwsQ0FBYTZtQixTQUFiLElBQTBCLEVBQTFCLEdBQStCLENBQS9CLEdBQW1DLEtBQUs3bUIsT0FBTCxDQUFhNm1CLFNBQTFEO0FBQUEsWUFDSUMsTUFBTSxLQUFLOW1CLE9BQUwsQ0FBYSttQixTQUFiLElBQXlCLEVBQXpCLEdBQThCdDFCLFNBQVN1UCxlQUFULENBQXlCcVcsWUFBdkQsR0FBc0UsS0FBS3JYLE9BQUwsQ0FBYSttQixTQUQ3RjtBQUFBLFlBRUlDLE1BQU0sQ0FBQzd3QixHQUFELEVBQU0yd0IsR0FBTixDQUZWO0FBQUEsWUFHSUcsU0FBUyxFQUhiO0FBSUEsYUFBSyxJQUFJMzJCLElBQUksQ0FBUixFQUFXK2tCLE1BQU0yUixJQUFJcDNCLE1BQTFCLEVBQWtDVSxJQUFJK2tCLEdBQUosSUFBVzJSLElBQUkxMkIsQ0FBSixDQUE3QyxFQUFxREEsR0FBckQsRUFBMEQ7QUFDeEQsY0FBSWluQixFQUFKO0FBQ0EsY0FBSSxPQUFPeVAsSUFBSTEyQixDQUFKLENBQVAsS0FBa0IsUUFBdEIsRUFBZ0M7QUFDOUJpbkIsaUJBQUt5UCxJQUFJMTJCLENBQUosQ0FBTDtBQUNELFdBRkQsTUFFTztBQUNMLGdCQUFJNDJCLFFBQVFGLElBQUkxMkIsQ0FBSixFQUFPUSxLQUFQLENBQWEsR0FBYixDQUFaO0FBQUEsZ0JBQ0kyRyxTQUFTNUssUUFBTXE2QixNQUFNLENBQU4sQ0FBTixDQURiOztBQUdBM1AsaUJBQUs5ZixPQUFPakIsTUFBUCxHQUFnQkwsR0FBckI7QUFDQSxnQkFBSSt3QixNQUFNLENBQU4sS0FBWUEsTUFBTSxDQUFOLEVBQVNwNUIsV0FBVCxPQUEyQixRQUEzQyxFQUFxRDtBQUNuRHlwQixvQkFBTTlmLE9BQU8sQ0FBUCxFQUFVVixxQkFBVixHQUFrQ04sTUFBeEM7QUFDRDtBQUNGO0FBQ0R3d0IsaUJBQU8zMkIsQ0FBUCxJQUFZaW5CLEVBQVo7QUFDRDs7QUFHRCxhQUFLUCxNQUFMLEdBQWNpUSxNQUFkO0FBQ0E7QUFDRDs7QUFFRDs7Ozs7O0FBcEdXO0FBQUE7QUFBQSw4QkF5R0h2cUIsRUF6R0csRUF5R0M7QUFDVixZQUFJek4sUUFBUSxJQUFaO0FBQUEsWUFDSW9WLGlCQUFpQixLQUFLQSxjQUFMLGtCQUFtQzNILEVBRHhEO0FBRUEsWUFBSSxLQUFLd1gsSUFBVCxFQUFlO0FBQUU7QUFBUztBQUMxQixZQUFJLEtBQUtpVCxRQUFULEVBQW1CO0FBQ2pCLGVBQUtqVCxJQUFMLEdBQVksSUFBWjtBQUNBcm5CLFlBQUUwRyxNQUFGLEVBQVVrSCxHQUFWLENBQWM0SixjQUFkLEVBQ1VqSyxFQURWLENBQ2FpSyxjQURiLEVBQzZCLFVBQVN0VCxDQUFULEVBQVk7QUFDOUIsZ0JBQUk5QixNQUFNZzNCLFdBQU4sS0FBc0IsQ0FBMUIsRUFBNkI7QUFDM0JoM0Isb0JBQU1nM0IsV0FBTixHQUFvQmgzQixNQUFNK1EsT0FBTixDQUFja21CLFVBQWxDO0FBQ0FqM0Isb0JBQU1zM0IsU0FBTixDQUFnQixZQUFXO0FBQ3pCdDNCLHNCQUFNdzNCLEtBQU4sQ0FBWSxLQUFaLEVBQW1CbHpCLE9BQU84RCxXQUExQjtBQUNELGVBRkQ7QUFHRCxhQUxELE1BS087QUFDTHBJLG9CQUFNZzNCLFdBQU47QUFDQWgzQixvQkFBTXczQixLQUFOLENBQVksS0FBWixFQUFtQmx6QixPQUFPOEQsV0FBMUI7QUFDRDtBQUNILFdBWFQ7QUFZRDs7QUFFRCxhQUFLcEosUUFBTCxDQUFjd00sR0FBZCxDQUFrQixxQkFBbEIsRUFDY0wsRUFEZCxDQUNpQixxQkFEakIsRUFDd0MsVUFBU3JKLENBQVQsRUFBWUcsRUFBWixFQUFnQjtBQUN2Q2pDLGdCQUFNczNCLFNBQU4sQ0FBZ0IsWUFBVztBQUN6QnQzQixrQkFBTXczQixLQUFOLENBQVksS0FBWjtBQUNBLGdCQUFJeDNCLE1BQU1rNEIsUUFBVixFQUFvQjtBQUNsQixrQkFBSSxDQUFDbDRCLE1BQU1pbEIsSUFBWCxFQUFpQjtBQUNmamxCLHNCQUFNaVgsT0FBTixDQUFjeEosRUFBZDtBQUNEO0FBQ0YsYUFKRCxNQUlPLElBQUl6TixNQUFNaWxCLElBQVYsRUFBZ0I7QUFDckJqbEIsb0JBQU1tNEIsZUFBTixDQUFzQi9pQixjQUF0QjtBQUNEO0FBQ0YsV0FURDtBQVVoQixTQVpEO0FBYUQ7O0FBRUQ7Ozs7OztBQTVJVztBQUFBO0FBQUEsc0NBaUpLQSxjQWpKTCxFQWlKcUI7QUFDOUIsYUFBSzZQLElBQUwsR0FBWSxLQUFaO0FBQ0FybkIsVUFBRTBHLE1BQUYsRUFBVWtILEdBQVYsQ0FBYzRKLGNBQWQ7O0FBRUE7Ozs7O0FBS0MsYUFBS3BXLFFBQUwsQ0FBY0UsT0FBZCxDQUFzQixpQkFBdEI7QUFDRjs7QUFFRDs7Ozs7OztBQTdKVztBQUFBO0FBQUEsNEJBbUtMazVCLFVBbktLLEVBbUtPYixNQW5LUCxFQW1LZTtBQUN4QixZQUFJYSxVQUFKLEVBQWdCO0FBQUUsZUFBS2QsU0FBTDtBQUFtQjs7QUFFckMsWUFBSSxDQUFDLEtBQUtZLFFBQVYsRUFBb0I7QUFDbEIsY0FBSSxLQUFLaEIsT0FBVCxFQUFrQjtBQUNoQixpQkFBS08sYUFBTCxDQUFtQixJQUFuQjtBQUNEO0FBQ0QsaUJBQU8sS0FBUDtBQUNEOztBQUVELFlBQUksQ0FBQ0YsTUFBTCxFQUFhO0FBQUVBLG1CQUFTanpCLE9BQU84RCxXQUFoQjtBQUE4Qjs7QUFFN0MsWUFBSW12QixVQUFVLEtBQUtHLFFBQW5CLEVBQTZCO0FBQzNCLGNBQUlILFVBQVUsS0FBS2MsV0FBbkIsRUFBZ0M7QUFDOUIsZ0JBQUksQ0FBQyxLQUFLbkIsT0FBVixFQUFtQjtBQUNqQixtQkFBS29CLFVBQUw7QUFDRDtBQUNGLFdBSkQsTUFJTztBQUNMLGdCQUFJLEtBQUtwQixPQUFULEVBQWtCO0FBQ2hCLG1CQUFLTyxhQUFMLENBQW1CLEtBQW5CO0FBQ0Q7QUFDRjtBQUNGLFNBVkQsTUFVTztBQUNMLGNBQUksS0FBS1AsT0FBVCxFQUFrQjtBQUNoQixpQkFBS08sYUFBTCxDQUFtQixJQUFuQjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRDs7Ozs7Ozs7QUFoTVc7QUFBQTtBQUFBLG1DQXVNRTtBQUNYLFlBQUl6M0IsUUFBUSxJQUFaO0FBQUEsWUFDSXU0QixVQUFVLEtBQUt4bkIsT0FBTCxDQUFhd25CLE9BRDNCO0FBQUEsWUFFSUMsT0FBT0QsWUFBWSxLQUFaLEdBQW9CLFdBQXBCLEdBQWtDLGNBRjdDO0FBQUEsWUFHSUUsYUFBYUYsWUFBWSxLQUFaLEdBQW9CLFFBQXBCLEdBQStCLEtBSGhEO0FBQUEsWUFJSW5zQixNQUFNLEVBSlY7O0FBTUFBLFlBQUlvc0IsSUFBSixJQUFlLEtBQUt6bkIsT0FBTCxDQUFheW5CLElBQWIsQ0FBZjtBQUNBcHNCLFlBQUltc0IsT0FBSixJQUFlLENBQWY7QUFDQW5zQixZQUFJcXNCLFVBQUosSUFBa0IsTUFBbEI7QUFDQSxhQUFLdkIsT0FBTCxHQUFlLElBQWY7QUFDQSxhQUFLbDRCLFFBQUwsQ0FBYzZFLFdBQWQsd0JBQStDNDBCLFVBQS9DLEVBQ2M3b0IsUUFEZCxxQkFDeUMyb0IsT0FEekMsRUFFY25zQixHQUZkLENBRWtCQSxHQUZsQjtBQUdhOzs7OztBQUhiLFNBUWNsTixPQVJkLHdCQVEyQ3E1QixPQVIzQztBQVNBLGFBQUt2NUIsUUFBTCxDQUFjbU0sRUFBZCxDQUFpQixpRkFBakIsRUFBb0csWUFBVztBQUM3R25MLGdCQUFNczNCLFNBQU47QUFDRCxTQUZEO0FBR0Q7O0FBRUQ7Ozs7Ozs7OztBQWhPVztBQUFBO0FBQUEsb0NBd09Hb0IsS0F4T0gsRUF3T1U7QUFDbkIsWUFBSUgsVUFBVSxLQUFLeG5CLE9BQUwsQ0FBYXduQixPQUEzQjtBQUFBLFlBQ0lJLGFBQWFKLFlBQVksS0FEN0I7QUFBQSxZQUVJbnNCLE1BQU0sRUFGVjtBQUFBLFlBR0l3c0IsV0FBVyxDQUFDLEtBQUs3USxNQUFMLEdBQWMsS0FBS0EsTUFBTCxDQUFZLENBQVosSUFBaUIsS0FBS0EsTUFBTCxDQUFZLENBQVosQ0FBL0IsR0FBZ0QsS0FBSzhRLFlBQXRELElBQXNFLEtBQUt6QixVQUgxRjtBQUFBLFlBSUlvQixPQUFPRyxhQUFhLFdBQWIsR0FBMkIsY0FKdEM7QUFBQSxZQUtJRixhQUFhRSxhQUFhLFFBQWIsR0FBd0IsS0FMekM7QUFBQSxZQU1JRyxjQUFjSixRQUFRLEtBQVIsR0FBZ0IsUUFObEM7O0FBUUF0c0IsWUFBSW9zQixJQUFKLElBQVksQ0FBWjs7QUFFQXBzQixZQUFJLFFBQUosSUFBZ0IsTUFBaEI7QUFDQSxZQUFHc3NCLEtBQUgsRUFBVTtBQUNSdHNCLGNBQUksS0FBSixJQUFhLENBQWI7QUFDRCxTQUZELE1BRU87QUFDTEEsY0FBSSxLQUFKLElBQWF3c0IsUUFBYjtBQUNEOztBQUVELGFBQUsxQixPQUFMLEdBQWUsS0FBZjtBQUNBLGFBQUtsNEIsUUFBTCxDQUFjNkUsV0FBZCxxQkFBNEMwMEIsT0FBNUMsRUFDYzNvQixRQURkLHdCQUM0Q2twQixXQUQ1QyxFQUVjMXNCLEdBRmQsQ0FFa0JBLEdBRmxCO0FBR2E7Ozs7O0FBSGIsU0FRY2xOLE9BUmQsNEJBUStDNDVCLFdBUi9DO0FBU0Q7O0FBRUQ7Ozs7Ozs7QUF0UVc7QUFBQTtBQUFBLGdDQTRRRC9wQixFQTVRQyxFQTRRRztBQUNaLGFBQUttcEIsUUFBTCxHQUFnQnA2QixXQUFXZ0csVUFBWCxDQUFzQjZHLEVBQXRCLENBQXlCLEtBQUtvRyxPQUFMLENBQWFnb0IsUUFBdEMsQ0FBaEI7QUFDQSxZQUFJLENBQUMsS0FBS2IsUUFBVixFQUFvQjtBQUNsQixjQUFJbnBCLE1BQU0sT0FBT0EsRUFBUCxLQUFjLFVBQXhCLEVBQW9DO0FBQUVBO0FBQU87QUFDOUM7QUFDRCxZQUFJL08sUUFBUSxJQUFaO0FBQUEsWUFDSWc1QixlQUFlLEtBQUtwQyxVQUFMLENBQWdCLENBQWhCLEVBQW1COXVCLHFCQUFuQixHQUEyQ0wsS0FEOUQ7QUFBQSxZQUVJd3hCLE9BQU8zMEIsT0FBT3FKLGdCQUFQLENBQXdCLEtBQUtpcEIsVUFBTCxDQUFnQixDQUFoQixDQUF4QixDQUZYO0FBQUEsWUFHSXNDLFFBQVE3WSxTQUFTNFksS0FBSyxjQUFMLENBQVQsRUFBK0IsRUFBL0IsQ0FIWjtBQUFBLFlBSUlFLFFBQVE5WSxTQUFTNFksS0FBSyxlQUFMLENBQVQsRUFBZ0MsRUFBaEMsQ0FKWjs7QUFNQSxZQUFJLEtBQUs5WCxPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYXhnQixNQUFqQyxFQUF5QztBQUN2QyxlQUFLazRCLFlBQUwsR0FBb0IsS0FBSzFYLE9BQUwsQ0FBYSxDQUFiLEVBQWdCcloscUJBQWhCLEdBQXdDTixNQUE1RDtBQUNELFNBRkQsTUFFTztBQUNMLGVBQUs2dkIsWUFBTDtBQUNEOztBQUVELGFBQUtyNEIsUUFBTCxDQUFjb04sR0FBZCxDQUFrQjtBQUNoQix1QkFBZ0I0c0IsZUFBZUUsS0FBZixHQUF1QkMsS0FBdkM7QUFEZ0IsU0FBbEI7O0FBSUEsWUFBSUMscUJBQXFCLEtBQUtwNkIsUUFBTCxDQUFjLENBQWQsRUFBaUI4SSxxQkFBakIsR0FBeUNOLE1BQXpDLElBQW1ELEtBQUsydkIsZUFBakY7QUFDQSxZQUFJLEtBQUtuNEIsUUFBTCxDQUFjb04sR0FBZCxDQUFrQixTQUFsQixLQUFnQyxNQUFwQyxFQUE0QztBQUMxQ2d0QiwrQkFBcUIsQ0FBckI7QUFDRDtBQUNELGFBQUtqQyxlQUFMLEdBQXVCaUMsa0JBQXZCO0FBQ0EsYUFBS3hDLFVBQUwsQ0FBZ0J4cUIsR0FBaEIsQ0FBb0I7QUFDbEI1RSxrQkFBUTR4QjtBQURVLFNBQXBCO0FBR0EsYUFBS2hDLFVBQUwsR0FBa0JnQyxrQkFBbEI7O0FBRUEsWUFBSSxDQUFDLEtBQUtsQyxPQUFWLEVBQW1CO0FBQ2pCLGNBQUksS0FBS2w0QixRQUFMLENBQWNtZCxRQUFkLENBQXVCLGNBQXZCLENBQUosRUFBNEM7QUFDMUMsZ0JBQUl5YyxXQUFXLENBQUMsS0FBSzdRLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVksQ0FBWixJQUFpQixLQUFLNk8sVUFBTCxDQUFnQnJ2QixNQUFoQixHQUF5QkwsR0FBeEQsR0FBOEQsS0FBSzJ4QixZQUFwRSxJQUFvRixLQUFLekIsVUFBeEc7QUFDQSxpQkFBS3A0QixRQUFMLENBQWNvTixHQUFkLENBQWtCLEtBQWxCLEVBQXlCd3NCLFFBQXpCO0FBQ0Q7QUFDRjs7QUFFRCxhQUFLUyxlQUFMLENBQXFCRCxrQkFBckIsRUFBeUMsWUFBVztBQUNsRCxjQUFJcnFCLE1BQU0sT0FBT0EsRUFBUCxLQUFjLFVBQXhCLEVBQW9DO0FBQUVBO0FBQU87QUFDOUMsU0FGRDtBQUdEOztBQUVEOzs7Ozs7O0FBdlRXO0FBQUE7QUFBQSxzQ0E2VEtxb0IsVUE3VEwsRUE2VGlCcm9CLEVBN1RqQixFQTZUcUI7QUFDOUIsWUFBSSxDQUFDLEtBQUttcEIsUUFBVixFQUFvQjtBQUNsQixjQUFJbnBCLE1BQU0sT0FBT0EsRUFBUCxLQUFjLFVBQXhCLEVBQW9DO0FBQUVBO0FBQU8sV0FBN0MsTUFDSztBQUFFLG1CQUFPLEtBQVA7QUFBZTtBQUN2QjtBQUNELFlBQUl1cUIsT0FBT0MsT0FBTyxLQUFLeG9CLE9BQUwsQ0FBYXlvQixTQUFwQixDQUFYO0FBQUEsWUFDSUMsT0FBT0YsT0FBTyxLQUFLeG9CLE9BQUwsQ0FBYTJvQixZQUFwQixDQURYO0FBQUEsWUFFSWhDLFdBQVcsS0FBSzNQLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVksQ0FBWixDQUFkLEdBQStCLEtBQUs1RyxPQUFMLENBQWE1WixNQUFiLEdBQXNCTCxHQUZwRTtBQUFBLFlBR0lteEIsY0FBYyxLQUFLdFEsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWSxDQUFaLENBQWQsR0FBK0IyUCxXQUFXLEtBQUttQixZQUhqRTs7QUFJSTtBQUNBO0FBQ0E3USxvQkFBWTFqQixPQUFPMmpCLFdBTnZCOztBQVFBLFlBQUksS0FBS2xYLE9BQUwsQ0FBYXduQixPQUFiLEtBQXlCLEtBQTdCLEVBQW9DO0FBQ2xDYixzQkFBWTRCLElBQVo7QUFDQWpCLHlCQUFnQmpCLGFBQWFrQyxJQUE3QjtBQUNELFNBSEQsTUFHTyxJQUFJLEtBQUt2b0IsT0FBTCxDQUFhd25CLE9BQWIsS0FBeUIsUUFBN0IsRUFBdUM7QUFDNUNiLHNCQUFhMVAsYUFBYW9QLGFBQWFxQyxJQUExQixDQUFiO0FBQ0FwQix5QkFBZ0JyUSxZQUFZeVIsSUFBNUI7QUFDRCxTQUhNLE1BR0E7QUFDTDtBQUNEOztBQUVELGFBQUsvQixRQUFMLEdBQWdCQSxRQUFoQjtBQUNBLGFBQUtXLFdBQUwsR0FBbUJBLFdBQW5COztBQUVBLFlBQUl0cEIsTUFBTSxPQUFPQSxFQUFQLEtBQWMsVUFBeEIsRUFBb0M7QUFBRUE7QUFBTztBQUM5Qzs7QUFFRDs7Ozs7OztBQTFWVztBQUFBO0FBQUEsZ0NBZ1dEO0FBQ1IsYUFBSzBvQixhQUFMLENBQW1CLElBQW5COztBQUVBLGFBQUt6NEIsUUFBTCxDQUFjNkUsV0FBZCxDQUE2QixLQUFLa04sT0FBTCxDQUFhZ21CLFdBQTFDLDZCQUNjM3FCLEdBRGQsQ0FDa0I7QUFDSDVFLGtCQUFRLEVBREw7QUFFSE4sZUFBSyxFQUZGO0FBR0hDLGtCQUFRLEVBSEw7QUFJSCx1QkFBYTtBQUpWLFNBRGxCLEVBT2NxRSxHQVBkLENBT2tCLHFCQVBsQjtBQVFBLFlBQUksS0FBSzJWLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFheGdCLE1BQWpDLEVBQXlDO0FBQ3ZDLGVBQUt3Z0IsT0FBTCxDQUFhM1YsR0FBYixDQUFpQixrQkFBakI7QUFDRDtBQUNENU4sVUFBRTBHLE1BQUYsRUFBVWtILEdBQVYsQ0FBYyxLQUFLNEosY0FBbkI7O0FBRUEsWUFBSSxLQUFLdWhCLFVBQVQsRUFBcUI7QUFDbkIsZUFBSzMzQixRQUFMLENBQWMraEIsTUFBZDtBQUNELFNBRkQsTUFFTztBQUNMLGVBQUs2VixVQUFMLENBQWdCL3lCLFdBQWhCLENBQTRCLEtBQUtrTixPQUFMLENBQWFrYSxjQUF6QyxFQUNnQjdlLEdBRGhCLENBQ29CO0FBQ0g1RSxvQkFBUTtBQURMLFdBRHBCO0FBSUQ7QUFDRDFKLG1CQUFXc0IsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDtBQXpYVTs7QUFBQTtBQUFBOztBQTRYYnMzQixTQUFPM2YsUUFBUCxHQUFrQjtBQUNoQjs7Ozs7QUFLQThmLGVBQVcsbUNBTks7QUFPaEI7Ozs7O0FBS0EwQixhQUFTLEtBWk87QUFhaEI7Ozs7O0FBS0EvdkIsWUFBUSxFQWxCUTtBQW1CaEI7Ozs7O0FBS0FvdkIsZUFBVyxFQXhCSztBQXlCaEI7Ozs7O0FBS0FFLGVBQVcsRUE5Qks7QUErQmhCOzs7OztBQUtBMEIsZUFBVyxDQXBDSztBQXFDaEI7Ozs7O0FBS0FFLGtCQUFjLENBMUNFO0FBMkNoQjs7Ozs7QUFLQVgsY0FBVSxRQWhETTtBQWlEaEI7Ozs7O0FBS0FoQyxpQkFBYSxRQXRERztBQXVEaEI7Ozs7O0FBS0E5TCxvQkFBZ0Isa0JBNURBO0FBNkRoQjs7Ozs7QUFLQWdNLGdCQUFZLENBQUM7QUFsRUcsR0FBbEI7O0FBcUVBOzs7O0FBSUEsV0FBU3NDLE1BQVQsQ0FBZ0JJLEVBQWhCLEVBQW9CO0FBQ2xCLFdBQU90WixTQUFTL2IsT0FBT3FKLGdCQUFQLENBQXdCbkwsU0FBUzBGLElBQWpDLEVBQXVDLElBQXZDLEVBQTZDMHhCLFFBQXRELEVBQWdFLEVBQWhFLElBQXNFRCxFQUE3RTtBQUNEOztBQUVEO0FBQ0E3N0IsYUFBV00sTUFBWCxDQUFrQnM0QixNQUFsQixFQUEwQixRQUExQjtBQUVDLENBNWNBLENBNGNDbHdCLE1BNWNELENBQUQ7Q0NGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNUksQ0FBVCxFQUFZOztBQUViOzs7Ozs7O0FBRmEsTUFTUGk4QixJQVRPO0FBVVg7Ozs7Ozs7QUFPQSxrQkFBWWh6QixPQUFaLEVBQXFCa0ssT0FBckIsRUFBOEI7QUFBQTs7QUFDNUIsV0FBSy9SLFFBQUwsR0FBZ0I2SCxPQUFoQjtBQUNBLFdBQUtrSyxPQUFMLEdBQWVuVCxFQUFFeU0sTUFBRixDQUFTLEVBQVQsRUFBYXd2QixLQUFLOWlCLFFBQWxCLEVBQTRCLEtBQUsvWCxRQUFMLENBQWNDLElBQWQsRUFBNUIsRUFBa0Q4UixPQUFsRCxDQUFmOztBQUVBLFdBQUtqUixLQUFMO0FBQ0FoQyxpQkFBV1ksY0FBWCxDQUEwQixJQUExQixFQUFnQyxNQUFoQztBQUNBWixpQkFBV21MLFFBQVgsQ0FBb0IyQixRQUFwQixDQUE2QixNQUE3QixFQUFxQztBQUNuQyxpQkFBUyxNQUQwQjtBQUVuQyxpQkFBUyxNQUYwQjtBQUduQyx1QkFBZSxNQUhvQjtBQUluQyxvQkFBWSxVQUp1QjtBQUtuQyxzQkFBYyxNQUxxQjtBQU1uQyxzQkFBYztBQUNkO0FBQ0E7QUFSbUMsT0FBckM7QUFVRDs7QUFFRDs7Ozs7O0FBbkNXO0FBQUE7QUFBQSw4QkF1Q0g7QUFDTixZQUFJNUssUUFBUSxJQUFaOztBQUVBLGFBQUtoQixRQUFMLENBQWNiLElBQWQsQ0FBbUIsRUFBQyxRQUFRLFNBQVQsRUFBbkI7QUFDQSxhQUFLMjdCLFVBQUwsR0FBa0IsS0FBSzk2QixRQUFMLENBQWN1QyxJQUFkLE9BQXVCLEtBQUt3UCxPQUFMLENBQWFncEIsU0FBcEMsQ0FBbEI7QUFDQSxhQUFLbmUsV0FBTCxHQUFtQmhlLDJCQUF5QixLQUFLb0IsUUFBTCxDQUFjLENBQWQsRUFBaUJ5TyxFQUExQyxRQUFuQjs7QUFFQSxhQUFLcXNCLFVBQUwsQ0FBZ0JqNkIsSUFBaEIsQ0FBcUIsWUFBVTtBQUM3QixjQUFJeUIsUUFBUTFELEVBQUUsSUFBRixDQUFaO0FBQUEsY0FDSTRnQixRQUFRbGQsTUFBTUMsSUFBTixDQUFXLEdBQVgsQ0FEWjtBQUFBLGNBRUkwYixXQUFXM2IsTUFBTTZhLFFBQU4sTUFBa0JuYyxNQUFNK1EsT0FBTixDQUFjaXBCLGVBQWhDLENBRmY7QUFBQSxjQUdJcFIsT0FBT3BLLE1BQU0sQ0FBTixFQUFTb0ssSUFBVCxDQUFjMW5CLEtBQWQsQ0FBb0IsQ0FBcEIsQ0FIWDtBQUFBLGNBSUl1YSxTQUFTK0MsTUFBTSxDQUFOLEVBQVMvUSxFQUFULEdBQWMrUSxNQUFNLENBQU4sRUFBUy9RLEVBQXZCLEdBQStCbWIsSUFBL0IsV0FKYjtBQUFBLGNBS0loTixjQUFjaGUsUUFBTWdyQixJQUFOLENBTGxCOztBQU9BdG5CLGdCQUFNbkQsSUFBTixDQUFXLEVBQUMsUUFBUSxjQUFULEVBQVg7O0FBRUFxZ0IsZ0JBQU1yZ0IsSUFBTixDQUFXO0FBQ1Qsb0JBQVEsS0FEQztBQUVULDZCQUFpQnlxQixJQUZSO0FBR1QsNkJBQWlCM0wsUUFIUjtBQUlULGtCQUFNeEI7QUFKRyxXQUFYOztBQU9BRyxzQkFBWXpkLElBQVosQ0FBaUI7QUFDZixvQkFBUSxVQURPO0FBRWYsMkJBQWUsQ0FBQzhlLFFBRkQ7QUFHZiwrQkFBbUJ4QjtBQUhKLFdBQWpCOztBQU1BLGNBQUd3QixZQUFZamQsTUFBTStRLE9BQU4sQ0FBYzRSLFNBQTdCLEVBQXVDO0FBQ3JDL2tCLGNBQUUwRyxNQUFGLEVBQVUyMUIsSUFBVixDQUFlLFlBQVc7QUFDeEJyOEIsZ0JBQUUsWUFBRixFQUFnQm9SLE9BQWhCLENBQXdCLEVBQUUrUSxXQUFXemUsTUFBTWlHLE1BQU4sR0FBZUwsR0FBNUIsRUFBeEIsRUFBMkRsSCxNQUFNK1EsT0FBTixDQUFjbXBCLG1CQUF6RSxFQUE4RixZQUFNO0FBQ2xHMWIsc0JBQU1sVCxLQUFOO0FBQ0QsZUFGRDtBQUdELGFBSkQ7QUFLRDs7QUFFRDtBQUNBLGNBQUl0TCxNQUFNK1EsT0FBTixDQUFjOGUsUUFBbEIsRUFBNEI7QUFDMUIsZ0JBQUlybkIsU0FBU2xFLE9BQU9xa0IsUUFBUCxDQUFnQkMsSUFBN0I7QUFDQTtBQUNBLGdCQUFHcGdCLE9BQU83SCxNQUFWLEVBQWtCO0FBQ2hCLGtCQUFJNmQsUUFBUWxkLE1BQU1DLElBQU4sQ0FBVyxZQUFVaUgsTUFBVixHQUFpQixJQUE1QixDQUFaO0FBQ0Esa0JBQUlnVyxNQUFNN2QsTUFBVixFQUFrQjtBQUNoQlgsc0JBQU1tNkIsU0FBTixDQUFnQnY4QixFQUFFNEssTUFBRixDQUFoQjs7QUFFQTtBQUNBLG9CQUFJeEksTUFBTStRLE9BQU4sQ0FBY3FwQixjQUFsQixFQUFrQztBQUNoQ3g4QixvQkFBRTBHLE1BQUYsRUFBVTIxQixJQUFWLENBQWUsWUFBVztBQUN4Qix3QkFBSTF5QixTQUFTakcsTUFBTWlHLE1BQU4sRUFBYjtBQUNBM0osc0JBQUUsWUFBRixFQUFnQm9SLE9BQWhCLENBQXdCLEVBQUUrUSxXQUFXeFksT0FBT0wsR0FBcEIsRUFBeEIsRUFBbURsSCxNQUFNK1EsT0FBTixDQUFjbXBCLG1CQUFqRTtBQUNELG1CQUhEO0FBSUQ7O0FBRUQ7Ozs7QUFJQzU0QixzQkFBTXBDLE9BQU4sQ0FBYyxrQkFBZCxFQUFrQyxDQUFDc2YsS0FBRCxFQUFRNWdCLEVBQUU0SyxNQUFGLENBQVIsQ0FBbEM7QUFDRDtBQUNIO0FBQ0Y7QUFDRixTQXhERDs7QUEwREEsWUFBRyxLQUFLdUksT0FBTCxDQUFhc3BCLFdBQWhCLEVBQTZCO0FBQzNCLGNBQUlqUCxVQUFVLEtBQUt4UCxXQUFMLENBQWlCcmEsSUFBakIsQ0FBc0IsS0FBdEIsQ0FBZDs7QUFFQSxjQUFJNnBCLFFBQVF6cUIsTUFBWixFQUFvQjtBQUNsQjdDLHVCQUFXd1QsY0FBWCxDQUEwQjhaLE9BQTFCLEVBQW1DLEtBQUtrUCxVQUFMLENBQWdCNTBCLElBQWhCLENBQXFCLElBQXJCLENBQW5DO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsaUJBQUs0MEIsVUFBTDtBQUNEO0FBQ0Y7O0FBRUQsYUFBS3JqQixPQUFMO0FBQ0Q7O0FBRUQ7Ozs7O0FBckhXO0FBQUE7QUFBQSxnQ0F5SEQ7QUFDUixhQUFLc2pCLGNBQUw7QUFDQSxhQUFLQyxnQkFBTDtBQUNBLGFBQUtDLG1CQUFMLEdBQTJCLElBQTNCOztBQUVBLFlBQUksS0FBSzFwQixPQUFMLENBQWFzcEIsV0FBakIsRUFBOEI7QUFDNUIsZUFBS0ksbUJBQUwsR0FBMkIsS0FBS0gsVUFBTCxDQUFnQjUwQixJQUFoQixDQUFxQixJQUFyQixDQUEzQjs7QUFFQTlILFlBQUUwRyxNQUFGLEVBQVU2RyxFQUFWLENBQWEsdUJBQWIsRUFBc0MsS0FBS3N2QixtQkFBM0M7QUFDRDtBQUNGOztBQUVEOzs7OztBQXJJVztBQUFBO0FBQUEseUNBeUlRO0FBQ2pCLFlBQUl6NkIsUUFBUSxJQUFaOztBQUVBLGFBQUtoQixRQUFMLENBQ0d3TSxHQURILENBQ08sZUFEUCxFQUVHTCxFQUZILENBRU0sZUFGTixRQUUyQixLQUFLNEYsT0FBTCxDQUFhZ3BCLFNBRnhDLEVBRXFELFVBQVNqNEIsQ0FBVCxFQUFXO0FBQzVEQSxZQUFFdUosY0FBRjtBQUNBdkosWUFBRWlULGVBQUY7QUFDQS9VLGdCQUFNMDZCLGdCQUFOLENBQXVCOThCLEVBQUUsSUFBRixDQUF2QjtBQUNELFNBTkg7QUFPRDs7QUFFRDs7Ozs7QUFySlc7QUFBQTtBQUFBLHVDQXlKTTtBQUNmLFlBQUlvQyxRQUFRLElBQVo7O0FBRUEsYUFBSzg1QixVQUFMLENBQWdCdHVCLEdBQWhCLENBQW9CLGlCQUFwQixFQUF1Q0wsRUFBdkMsQ0FBMEMsaUJBQTFDLEVBQTZELFVBQVNySixDQUFULEVBQVc7QUFDdEUsY0FBSUEsRUFBRXdILEtBQUYsS0FBWSxDQUFoQixFQUFtQjs7QUFHbkIsY0FBSXRLLFdBQVdwQixFQUFFLElBQUYsQ0FBZjtBQUFBLGNBQ0V3ZixZQUFZcGUsU0FBUzhILE1BQVQsQ0FBZ0IsSUFBaEIsRUFBc0I4SixRQUF0QixDQUErQixJQUEvQixDQURkO0FBQUEsY0FFRXlNLFlBRkY7QUFBQSxjQUdFQyxZQUhGOztBQUtBRixvQkFBVXZkLElBQVYsQ0FBZSxVQUFTd0IsQ0FBVCxFQUFZO0FBQ3pCLGdCQUFJekQsRUFBRSxJQUFGLEVBQVErTSxFQUFSLENBQVczTCxRQUFYLENBQUosRUFBMEI7QUFDeEIsa0JBQUlnQixNQUFNK1EsT0FBTixDQUFjNHBCLFVBQWxCLEVBQThCO0FBQzVCdGQsK0JBQWVoYyxNQUFNLENBQU4sR0FBVStiLFVBQVUyUCxJQUFWLEVBQVYsR0FBNkIzUCxVQUFVblMsRUFBVixDQUFhNUosSUFBRSxDQUFmLENBQTVDO0FBQ0FpYywrQkFBZWpjLE1BQU0rYixVQUFVemMsTUFBVixHQUFrQixDQUF4QixHQUE0QnljLFVBQVV0SixLQUFWLEVBQTVCLEdBQWdEc0osVUFBVW5TLEVBQVYsQ0FBYTVKLElBQUUsQ0FBZixDQUEvRDtBQUNELGVBSEQsTUFHTztBQUNMZ2MsK0JBQWVELFVBQVVuUyxFQUFWLENBQWFwSyxLQUFLd0UsR0FBTCxDQUFTLENBQVQsRUFBWWhFLElBQUUsQ0FBZCxDQUFiLENBQWY7QUFDQWljLCtCQUFlRixVQUFVblMsRUFBVixDQUFhcEssS0FBSzBjLEdBQUwsQ0FBU2xjLElBQUUsQ0FBWCxFQUFjK2IsVUFBVXpjLE1BQVYsR0FBaUIsQ0FBL0IsQ0FBYixDQUFmO0FBQ0Q7QUFDRDtBQUNEO0FBQ0YsV0FYRDs7QUFhQTtBQUNBN0MscUJBQVdtTCxRQUFYLENBQW9CYSxTQUFwQixDQUE4QmhJLENBQTlCLEVBQWlDLE1BQWpDLEVBQXlDO0FBQ3ZDMmIsa0JBQU0sWUFBVztBQUNmemUsdUJBQVN1QyxJQUFULENBQWMsY0FBZCxFQUE4QitKLEtBQTlCO0FBQ0F0TCxvQkFBTTA2QixnQkFBTixDQUF1QjE3QixRQUF2QjtBQUNELGFBSnNDO0FBS3ZDaWQsc0JBQVUsWUFBVztBQUNuQm9CLDJCQUFhOWIsSUFBYixDQUFrQixjQUFsQixFQUFrQytKLEtBQWxDO0FBQ0F0TCxvQkFBTTA2QixnQkFBTixDQUF1QnJkLFlBQXZCO0FBQ0QsYUFSc0M7QUFTdkN2QixrQkFBTSxZQUFXO0FBQ2Z3QiwyQkFBYS9iLElBQWIsQ0FBa0IsY0FBbEIsRUFBa0MrSixLQUFsQztBQUNBdEwsb0JBQU0wNkIsZ0JBQU4sQ0FBdUJwZCxZQUF2QjtBQUNELGFBWnNDO0FBYXZDL1MscUJBQVMsWUFBVztBQUNsQnpJLGdCQUFFaVQsZUFBRjtBQUNBalQsZ0JBQUV1SixjQUFGO0FBQ0Q7QUFoQnNDLFdBQXpDO0FBa0JELFNBekNEO0FBMENEOztBQUVEOzs7Ozs7O0FBeE1XO0FBQUE7QUFBQSx1Q0E4TU04SyxPQTlNTixFQThNZTs7QUFFeEI7OztBQUdBLFlBQUlBLFFBQVFnRyxRQUFSLE1BQW9CLEtBQUtwTCxPQUFMLENBQWFpcEIsZUFBakMsQ0FBSixFQUF5RDtBQUNyRCxjQUFHLEtBQUtqcEIsT0FBTCxDQUFhNnBCLGNBQWhCLEVBQWdDO0FBQzVCLGlCQUFLQyxZQUFMLENBQWtCMWtCLE9BQWxCOztBQUVEOzs7O0FBSUMsaUJBQUtuWCxRQUFMLENBQWNFLE9BQWQsQ0FBc0Isa0JBQXRCLEVBQTBDLENBQUNpWCxPQUFELENBQTFDO0FBQ0g7QUFDRDtBQUNIOztBQUVELFlBQUkya0IsVUFBVSxLQUFLOTdCLFFBQUwsQ0FDUnVDLElBRFEsT0FDQyxLQUFLd1AsT0FBTCxDQUFhZ3BCLFNBRGQsU0FDMkIsS0FBS2hwQixPQUFMLENBQWFpcEIsZUFEeEMsQ0FBZDtBQUFBLFlBRU1lLFdBQVc1a0IsUUFBUTVVLElBQVIsQ0FBYSxjQUFiLENBRmpCO0FBQUEsWUFHTXFuQixPQUFPbVMsU0FBUyxDQUFULEVBQVluUyxJQUh6QjtBQUFBLFlBSU1vUyxpQkFBaUIsS0FBS3BmLFdBQUwsQ0FBaUJyYSxJQUFqQixDQUFzQnFuQixJQUF0QixDQUp2Qjs7QUFNQTtBQUNBLGFBQUtpUyxZQUFMLENBQWtCQyxPQUFsQjs7QUFFQTtBQUNBLGFBQUtHLFFBQUwsQ0FBYzlrQixPQUFkOztBQUVBO0FBQ0EsWUFBSSxLQUFLcEYsT0FBTCxDQUFhOGUsUUFBakIsRUFBMkI7QUFDekIsY0FBSXJuQixTQUFTMk4sUUFBUTVVLElBQVIsQ0FBYSxHQUFiLEVBQWtCcEQsSUFBbEIsQ0FBdUIsTUFBdkIsQ0FBYjs7QUFFQSxjQUFJLEtBQUs0UyxPQUFMLENBQWFtcUIsYUFBakIsRUFBZ0M7QUFDOUIxUixvQkFBUUMsU0FBUixDQUFrQixFQUFsQixFQUFzQixFQUF0QixFQUEwQmpoQixNQUExQjtBQUNELFdBRkQsTUFFTztBQUNMZ2hCLG9CQUFRc0gsWUFBUixDQUFxQixFQUFyQixFQUF5QixFQUF6QixFQUE2QnRvQixNQUE3QjtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7QUFJQSxhQUFLeEosUUFBTCxDQUFjRSxPQUFkLENBQXNCLGdCQUF0QixFQUF3QyxDQUFDaVgsT0FBRCxFQUFVNmtCLGNBQVYsQ0FBeEM7O0FBRUE7QUFDQUEsdUJBQWV6NUIsSUFBZixDQUFvQixlQUFwQixFQUFxQ3JDLE9BQXJDLENBQTZDLHFCQUE3QztBQUNEOztBQUVEOzs7Ozs7QUFqUVc7QUFBQTtBQUFBLCtCQXNRRmlYLE9BdFFFLEVBc1FPO0FBQ2QsWUFBSTRrQixXQUFXNWtCLFFBQVE1VSxJQUFSLENBQWEsY0FBYixDQUFmO0FBQUEsWUFDSXFuQixPQUFPbVMsU0FBUyxDQUFULEVBQVluUyxJQUR2QjtBQUFBLFlBRUlvUyxpQkFBaUIsS0FBS3BmLFdBQUwsQ0FBaUJyYSxJQUFqQixDQUFzQnFuQixJQUF0QixDQUZyQjs7QUFJQXpTLGdCQUFRdkcsUUFBUixNQUFvQixLQUFLbUIsT0FBTCxDQUFhaXBCLGVBQWpDOztBQUVBZSxpQkFBUzU4QixJQUFULENBQWMsRUFBQyxpQkFBaUIsTUFBbEIsRUFBZDs7QUFFQTY4Qix1QkFDR3ByQixRQURILE1BQ2UsS0FBS21CLE9BQUwsQ0FBYW9xQixnQkFENUIsRUFFR2g5QixJQUZILENBRVEsRUFBQyxlQUFlLE9BQWhCLEVBRlI7QUFHSDs7QUFFRDs7Ozs7O0FBcFJXO0FBQUE7QUFBQSxtQ0F5UkVnWSxPQXpSRixFQXlSVztBQUNwQixZQUFJaWxCLGlCQUFpQmpsQixRQUNsQnRTLFdBRGtCLE1BQ0gsS0FBS2tOLE9BQUwsQ0FBYWlwQixlQURWLEVBRWxCejRCLElBRmtCLENBRWIsY0FGYSxFQUdsQnBELElBSGtCLENBR2IsRUFBRSxpQkFBaUIsT0FBbkIsRUFIYSxDQUFyQjs7QUFLQVAsZ0JBQU13OUIsZUFBZWo5QixJQUFmLENBQW9CLGVBQXBCLENBQU4sRUFDRzBGLFdBREgsTUFDa0IsS0FBS2tOLE9BQUwsQ0FBYW9xQixnQkFEL0IsRUFFR2g5QixJQUZILENBRVEsRUFBRSxlQUFlLE1BQWpCLEVBRlI7QUFHRDs7QUFFRDs7Ozs7O0FBcFNXO0FBQUE7QUFBQSxnQ0F5U0RpRCxJQXpTQyxFQXlTSztBQUNkLFlBQUlpNkIsS0FBSjs7QUFFQSxZQUFJLE9BQU9qNkIsSUFBUCxLQUFnQixRQUFwQixFQUE4QjtBQUM1Qmk2QixrQkFBUWo2QixLQUFLLENBQUwsRUFBUXFNLEVBQWhCO0FBQ0QsU0FGRCxNQUVPO0FBQ0w0dEIsa0JBQVFqNkIsSUFBUjtBQUNEOztBQUVELFlBQUlpNkIsTUFBTS83QixPQUFOLENBQWMsR0FBZCxJQUFxQixDQUF6QixFQUE0QjtBQUMxQis3Qix3QkFBWUEsS0FBWjtBQUNEOztBQUVELFlBQUlsbEIsVUFBVSxLQUFLMmpCLFVBQUwsQ0FBZ0J2NEIsSUFBaEIsYUFBK0I4NUIsS0FBL0IsU0FBMEN2MEIsTUFBMUMsT0FBcUQsS0FBS2lLLE9BQUwsQ0FBYWdwQixTQUFsRSxDQUFkOztBQUVBLGFBQUtXLGdCQUFMLENBQXNCdmtCLE9BQXRCO0FBQ0Q7QUF6VFU7QUFBQTs7QUEwVFg7Ozs7Ozs7QUExVFcsbUNBaVVFO0FBQ1gsWUFBSTlRLE1BQU0sQ0FBVjtBQUNBLGFBQUt1VyxXQUFMLENBQ0dyYSxJQURILE9BQ1ksS0FBS3dQLE9BQUwsQ0FBYXVxQixVQUR6QixFQUVHbHZCLEdBRkgsQ0FFTyxRQUZQLEVBRWlCLEVBRmpCLEVBR0d2TSxJQUhILENBR1EsWUFBVztBQUNmLGNBQUkwN0IsUUFBUTM5QixFQUFFLElBQUYsQ0FBWjtBQUFBLGNBQ0lxZixXQUFXc2UsTUFBTXBmLFFBQU4sTUFBa0IsS0FBS3BMLE9BQUwsQ0FBYW9xQixnQkFBL0IsQ0FEZjs7QUFHQSxjQUFJLENBQUNsZSxRQUFMLEVBQWU7QUFDYnNlLGtCQUFNbnZCLEdBQU4sQ0FBVSxFQUFDLGNBQWMsUUFBZixFQUF5QixXQUFXLE9BQXBDLEVBQVY7QUFDRDs7QUFFRCxjQUFJOGYsT0FBTyxLQUFLcGtCLHFCQUFMLEdBQTZCTixNQUF4Qzs7QUFFQSxjQUFJLENBQUN5VixRQUFMLEVBQWU7QUFDYnNlLGtCQUFNbnZCLEdBQU4sQ0FBVTtBQUNSLDRCQUFjLEVBRE47QUFFUix5QkFBVztBQUZILGFBQVY7QUFJRDs7QUFFRC9HLGdCQUFNNm1CLE9BQU83bUIsR0FBUCxHQUFhNm1CLElBQWIsR0FBb0I3bUIsR0FBMUI7QUFDRCxTQXJCSCxFQXNCRytHLEdBdEJILENBc0JPLFFBdEJQLEVBc0JvQi9HLEdBdEJwQjtBQXVCRDs7QUFFRDs7Ozs7QUE1Vlc7QUFBQTtBQUFBLGdDQWdXRDtBQUNSLGFBQUtyRyxRQUFMLENBQ0d1QyxJQURILE9BQ1ksS0FBS3dQLE9BQUwsQ0FBYWdwQixTQUR6QixFQUVHdnVCLEdBRkgsQ0FFTyxVQUZQLEVBRW1CeUUsSUFGbkIsR0FFMEJ2TixHQUYxQixHQUdHbkIsSUFISCxPQUdZLEtBQUt3UCxPQUFMLENBQWF1cUIsVUFIekIsRUFJR3JyQixJQUpIOztBQU1BLFlBQUksS0FBS2MsT0FBTCxDQUFhc3BCLFdBQWpCLEVBQThCO0FBQzVCLGNBQUksS0FBS0ksbUJBQUwsSUFBNEIsSUFBaEMsRUFBc0M7QUFDbkM3OEIsY0FBRTBHLE1BQUYsRUFBVWtILEdBQVYsQ0FBYyx1QkFBZCxFQUF1QyxLQUFLaXZCLG1CQUE1QztBQUNGO0FBQ0Y7O0FBRUQzOEIsbUJBQVdzQixnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBOVdVOztBQUFBO0FBQUE7O0FBaVhieTZCLE9BQUs5aUIsUUFBTCxHQUFnQjtBQUNkOzs7OztBQUtBOFksY0FBVSxLQU5JOztBQVFkOzs7OztBQUtBdUssb0JBQWdCLEtBYkY7O0FBZWQ7Ozs7O0FBS0FGLHlCQUFxQixHQXBCUDs7QUFzQmQ7Ozs7O0FBS0FnQixtQkFBZSxLQTNCRDs7QUE2QmQ7Ozs7OztBQU1BdlksZUFBVyxLQW5DRzs7QUFxQ2Q7Ozs7O0FBS0FnWSxnQkFBWSxJQTFDRTs7QUE0Q2Q7Ozs7O0FBS0FOLGlCQUFhLEtBakRDOztBQW1EZDs7Ozs7QUFLQU8sb0JBQWdCLEtBeERGOztBQTBEZDs7Ozs7QUFLQWIsZUFBVyxZQS9ERzs7QUFpRWQ7Ozs7O0FBS0FDLHFCQUFpQixXQXRFSDs7QUF3RWQ7Ozs7O0FBS0FzQixnQkFBWSxZQTdFRTs7QUErRWQ7Ozs7O0FBS0FILHNCQUFrQjtBQXBGSixHQUFoQjs7QUF1RkE7QUFDQXI5QixhQUFXTSxNQUFYLENBQWtCeTdCLElBQWxCLEVBQXdCLE1BQXhCO0FBRUMsQ0EzY0EsQ0EyY0NyekIsTUEzY0QsQ0FBRDtDQ0ZBOzs7Ozs7QUFFQSxDQUFDLFVBQVM1SSxDQUFULEVBQVk7O0FBRWI7Ozs7Ozs7QUFGYSxNQVNQNDlCLE9BVE87QUFVWDs7Ozs7OztBQU9BLHFCQUFZMzBCLE9BQVosRUFBcUJrSyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLL1IsUUFBTCxHQUFnQjZILE9BQWhCO0FBQ0EsV0FBS2tLLE9BQUwsR0FBZW5ULEVBQUV5TSxNQUFGLENBQVMsRUFBVCxFQUFhbXhCLFFBQVF6a0IsUUFBckIsRUFBK0JsUSxRQUFRNUgsSUFBUixFQUEvQixFQUErQzhSLE9BQS9DLENBQWY7QUFDQSxXQUFLelMsU0FBTCxHQUFpQixFQUFqQjs7QUFFQSxXQUFLd0IsS0FBTDtBQUNBLFdBQUttWCxPQUFMOztBQUVBblosaUJBQVdZLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsU0FBaEM7QUFDRDs7QUFFRDs7Ozs7OztBQTVCVztBQUFBO0FBQUEsOEJBaUNIO0FBQ04sWUFBSXF3QixLQUFKO0FBQ0E7QUFDQSxZQUFJLEtBQUtoZSxPQUFMLENBQWEvQixPQUFqQixFQUEwQjtBQUN4QitmLGtCQUFRLEtBQUtoZSxPQUFMLENBQWEvQixPQUFiLENBQXFCbk4sS0FBckIsQ0FBMkIsR0FBM0IsQ0FBUjs7QUFFQSxlQUFLbXRCLFdBQUwsR0FBbUJELE1BQU0sQ0FBTixDQUFuQjtBQUNBLGVBQUtFLFlBQUwsR0FBb0JGLE1BQU0sQ0FBTixLQUFZLElBQWhDO0FBQ0Q7QUFDRDtBQU5BLGFBT0s7QUFDSEEsb0JBQVEsS0FBSy92QixRQUFMLENBQWNDLElBQWQsQ0FBbUIsU0FBbkIsQ0FBUjtBQUNBO0FBQ0EsaUJBQUtYLFNBQUwsR0FBaUJ5d0IsTUFBTSxDQUFOLE1BQWEsR0FBYixHQUFtQkEsTUFBTTd0QixLQUFOLENBQVksQ0FBWixDQUFuQixHQUFvQzZ0QixLQUFyRDtBQUNEOztBQUVEO0FBQ0EsWUFBSXRoQixLQUFLLEtBQUt6TyxRQUFMLENBQWMsQ0FBZCxFQUFpQnlPLEVBQTFCO0FBQ0E3UCwyQkFBaUI2UCxFQUFqQix5QkFBdUNBLEVBQXZDLDBCQUE4REEsRUFBOUQsU0FDR3RQLElBREgsQ0FDUSxlQURSLEVBQ3lCc1AsRUFEekI7QUFFQTtBQUNBLGFBQUt6TyxRQUFMLENBQWNiLElBQWQsQ0FBbUIsZUFBbkIsRUFBb0MsS0FBS2EsUUFBTCxDQUFjMkwsRUFBZCxDQUFpQixTQUFqQixJQUE4QixLQUE5QixHQUFzQyxJQUExRTtBQUNEOztBQUVEOzs7Ozs7QUF6RFc7QUFBQTtBQUFBLGdDQThERDtBQUNSLGFBQUszTCxRQUFMLENBQWN3TSxHQUFkLENBQWtCLG1CQUFsQixFQUF1Q0wsRUFBdkMsQ0FBMEMsbUJBQTFDLEVBQStELEtBQUswUSxNQUFMLENBQVluVyxJQUFaLENBQWlCLElBQWpCLENBQS9EO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUFsRVc7QUFBQTtBQUFBLCtCQXdFRjtBQUNQLGFBQU0sS0FBS3FMLE9BQUwsQ0FBYS9CLE9BQWIsR0FBdUIsZ0JBQXZCLEdBQTBDLGNBQWhEO0FBQ0Q7QUExRVU7QUFBQTtBQUFBLHFDQTRFSTtBQUNiLGFBQUtoUSxRQUFMLENBQWN5OEIsV0FBZCxDQUEwQixLQUFLbjlCLFNBQS9COztBQUVBLFlBQUkybUIsT0FBTyxLQUFLam1CLFFBQUwsQ0FBY21kLFFBQWQsQ0FBdUIsS0FBSzdkLFNBQTVCLENBQVg7QUFDQSxZQUFJMm1CLElBQUosRUFBVTtBQUNSOzs7O0FBSUEsZUFBS2ptQixRQUFMLENBQWNFLE9BQWQsQ0FBc0IsZUFBdEI7QUFDRCxTQU5ELE1BT0s7QUFDSDs7OztBQUlBLGVBQUtGLFFBQUwsQ0FBY0UsT0FBZCxDQUFzQixnQkFBdEI7QUFDRDs7QUFFRCxhQUFLdzhCLFdBQUwsQ0FBaUJ6VyxJQUFqQjtBQUNBLGFBQUtqbUIsUUFBTCxDQUFjdUMsSUFBZCxDQUFtQixlQUFuQixFQUFvQ3JDLE9BQXBDLENBQTRDLHFCQUE1QztBQUNEO0FBakdVO0FBQUE7QUFBQSx1Q0FtR007QUFDZixZQUFJYyxRQUFRLElBQVo7O0FBRUEsWUFBSSxLQUFLaEIsUUFBTCxDQUFjMkwsRUFBZCxDQUFpQixTQUFqQixDQUFKLEVBQWlDO0FBQy9CN00scUJBQVc4USxNQUFYLENBQWtCQyxTQUFsQixDQUE0QixLQUFLN1AsUUFBakMsRUFBMkMsS0FBS2d3QixXQUFoRCxFQUE2RCxZQUFXO0FBQ3RFaHZCLGtCQUFNMDdCLFdBQU4sQ0FBa0IsSUFBbEI7QUFDQSxpQkFBS3g4QixPQUFMLENBQWEsZUFBYjtBQUNBLGlCQUFLcUMsSUFBTCxDQUFVLGVBQVYsRUFBMkJyQyxPQUEzQixDQUFtQyxxQkFBbkM7QUFDRCxXQUpEO0FBS0QsU0FORCxNQU9LO0FBQ0hwQixxQkFBVzhRLE1BQVgsQ0FBa0JLLFVBQWxCLENBQTZCLEtBQUtqUSxRQUFsQyxFQUE0QyxLQUFLaXdCLFlBQWpELEVBQStELFlBQVc7QUFDeEVqdkIsa0JBQU0wN0IsV0FBTixDQUFrQixLQUFsQjtBQUNBLGlCQUFLeDhCLE9BQUwsQ0FBYSxnQkFBYjtBQUNBLGlCQUFLcUMsSUFBTCxDQUFVLGVBQVYsRUFBMkJyQyxPQUEzQixDQUFtQyxxQkFBbkM7QUFDRCxXQUpEO0FBS0Q7QUFDRjtBQXBIVTtBQUFBO0FBQUEsa0NBc0hDK2xCLElBdEhELEVBc0hPO0FBQ2hCLGFBQUtqbUIsUUFBTCxDQUFjYixJQUFkLENBQW1CLGVBQW5CLEVBQW9DOG1CLE9BQU8sSUFBUCxHQUFjLEtBQWxEO0FBQ0Q7O0FBRUQ7Ozs7O0FBMUhXO0FBQUE7QUFBQSxnQ0E4SEQ7QUFDUixhQUFLam1CLFFBQUwsQ0FBY3dNLEdBQWQsQ0FBa0IsYUFBbEI7QUFDQTFOLG1CQUFXc0IsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDtBQWpJVTs7QUFBQTtBQUFBOztBQW9JYm84QixVQUFRemtCLFFBQVIsR0FBbUI7QUFDakI7Ozs7O0FBS0EvSCxhQUFTO0FBTlEsR0FBbkI7O0FBU0E7QUFDQWxSLGFBQVdNLE1BQVgsQ0FBa0JvOUIsT0FBbEIsRUFBMkIsU0FBM0I7QUFFQyxDQWhKQSxDQWdKQ2gxQixNQWhKRCxDQUFEO0NDRkE7Ozs7OztBQUVBLENBQUMsVUFBUzVJLENBQVQsRUFBWTs7QUFFYjs7Ozs7Ozs7QUFGYSxNQVVQKzlCLE9BVk87QUFXWDs7Ozs7OztBQU9BLHFCQUFZOTBCLE9BQVosRUFBcUJrSyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLL1IsUUFBTCxHQUFnQjZILE9BQWhCO0FBQ0EsV0FBS2tLLE9BQUwsR0FBZW5ULEVBQUV5TSxNQUFGLENBQVMsRUFBVCxFQUFhc3hCLFFBQVE1a0IsUUFBckIsRUFBK0IsS0FBSy9YLFFBQUwsQ0FBY0MsSUFBZCxFQUEvQixFQUFxRDhSLE9BQXJELENBQWY7O0FBRUEsV0FBS2tNLFFBQUwsR0FBZ0IsS0FBaEI7QUFDQSxXQUFLMmUsT0FBTCxHQUFlLEtBQWY7QUFDQSxXQUFLOTdCLEtBQUw7O0FBRUFoQyxpQkFBV1ksY0FBWCxDQUEwQixJQUExQixFQUFnQyxTQUFoQztBQUNEOztBQUVEOzs7Ozs7QUE3Qlc7QUFBQTtBQUFBLDhCQWlDSDtBQUNOLFlBQUltOUIsU0FBUyxLQUFLNzhCLFFBQUwsQ0FBY2IsSUFBZCxDQUFtQixrQkFBbkIsS0FBMENMLFdBQVdpQixXQUFYLENBQXVCLENBQXZCLEVBQTBCLFNBQTFCLENBQXZEOztBQUVBLGFBQUtnUyxPQUFMLENBQWF1USxhQUFiLEdBQTZCLEtBQUt2USxPQUFMLENBQWF1USxhQUFiLElBQThCLEtBQUt3YSxpQkFBTCxDQUF1QixLQUFLOThCLFFBQTVCLENBQTNEO0FBQ0EsYUFBSytSLE9BQUwsQ0FBYWdyQixPQUFiLEdBQXVCLEtBQUtockIsT0FBTCxDQUFhZ3JCLE9BQWIsSUFBd0IsS0FBSy84QixRQUFMLENBQWNiLElBQWQsQ0FBbUIsT0FBbkIsQ0FBL0M7QUFDQSxhQUFLNjlCLFFBQUwsR0FBZ0IsS0FBS2pyQixPQUFMLENBQWFpckIsUUFBYixHQUF3QnArQixFQUFFLEtBQUttVCxPQUFMLENBQWFpckIsUUFBZixDQUF4QixHQUFtRCxLQUFLQyxjQUFMLENBQW9CSixNQUFwQixDQUFuRTs7QUFFQSxZQUFJLEtBQUs5cUIsT0FBTCxDQUFhbXJCLFNBQWpCLEVBQTRCO0FBQzFCLGVBQUtGLFFBQUwsQ0FBY3I0QixRQUFkLENBQXVCbkIsU0FBUzBGLElBQWhDLEVBQ0d1ZixJQURILENBQ1EsS0FBSzFXLE9BQUwsQ0FBYWdyQixPQURyQixFQUVHOXJCLElBRkg7QUFHRCxTQUpELE1BSU87QUFDTCxlQUFLK3JCLFFBQUwsQ0FBY3I0QixRQUFkLENBQXVCbkIsU0FBUzBGLElBQWhDLEVBQ0c0RixJQURILENBQ1EsS0FBS2lELE9BQUwsQ0FBYWdyQixPQURyQixFQUVHOXJCLElBRkg7QUFHRDs7QUFFRCxhQUFLalIsUUFBTCxDQUFjYixJQUFkLENBQW1CO0FBQ2pCLG1CQUFTLEVBRFE7QUFFakIsOEJBQW9CMDlCLE1BRkg7QUFHakIsMkJBQWlCQSxNQUhBO0FBSWpCLHlCQUFlQSxNQUpFO0FBS2pCLHlCQUFlQTtBQUxFLFNBQW5CLEVBTUdqc0IsUUFOSCxDQU1ZLEtBQUttQixPQUFMLENBQWFvckIsWUFOekI7O0FBUUE7QUFDQSxhQUFLMWEsYUFBTCxHQUFxQixFQUFyQjtBQUNBLGFBQUtELE9BQUwsR0FBZSxDQUFmO0FBQ0EsYUFBS0ssWUFBTCxHQUFvQixLQUFwQjs7QUFFQSxhQUFLNUssT0FBTDtBQUNEOztBQUVEOzs7OztBQWxFVztBQUFBO0FBQUEsd0NBc0VPcFEsT0F0RVAsRUFzRWdCO0FBQ3pCLFlBQUksQ0FBQ0EsT0FBTCxFQUFjO0FBQUUsaUJBQU8sRUFBUDtBQUFZO0FBQzVCO0FBQ0EsWUFBSTRCLFdBQVc1QixRQUFRLENBQVIsRUFBV3ZJLFNBQVgsQ0FBcUJxakIsS0FBckIsQ0FBMkIsdUJBQTNCLENBQWY7QUFDSWxaLG1CQUFXQSxXQUFXQSxTQUFTLENBQVQsQ0FBWCxHQUF5QixFQUFwQztBQUNKLGVBQU9BLFFBQVA7QUFDRDtBQTVFVTtBQUFBOztBQTZFWDs7OztBQTdFVyxxQ0FpRklnRixFQWpGSixFQWlGUTtBQUNqQixZQUFJMnVCLGtCQUFrQixDQUFJLEtBQUtyckIsT0FBTCxDQUFhc3JCLFlBQWpCLFNBQWlDLEtBQUt0ckIsT0FBTCxDQUFhdVEsYUFBOUMsU0FBK0QsS0FBS3ZRLE9BQUwsQ0FBYXFyQixlQUE1RSxFQUErRmw2QixJQUEvRixFQUF0QjtBQUNBLFlBQUlvNkIsWUFBYTErQixFQUFFLGFBQUYsRUFBaUJnUyxRQUFqQixDQUEwQndzQixlQUExQixFQUEyQ2orQixJQUEzQyxDQUFnRDtBQUMvRCxrQkFBUSxTQUR1RDtBQUUvRCx5QkFBZSxJQUZnRDtBQUcvRCw0QkFBa0IsS0FINkM7QUFJL0QsMkJBQWlCLEtBSjhDO0FBSy9ELGdCQUFNc1A7QUFMeUQsU0FBaEQsQ0FBakI7QUFPQSxlQUFPNnVCLFNBQVA7QUFDRDs7QUFFRDs7Ozs7O0FBN0ZXO0FBQUE7QUFBQSxrQ0FrR0M3ekIsUUFsR0QsRUFrR1c7QUFDcEIsYUFBS2daLGFBQUwsQ0FBbUJ0aUIsSUFBbkIsQ0FBd0JzSixXQUFXQSxRQUFYLEdBQXNCLFFBQTlDOztBQUVBO0FBQ0EsWUFBSSxDQUFDQSxRQUFELElBQWMsS0FBS2daLGFBQUwsQ0FBbUJuaUIsT0FBbkIsQ0FBMkIsS0FBM0IsSUFBb0MsQ0FBdEQsRUFBMEQ7QUFDeEQsZUFBSzA4QixRQUFMLENBQWNwc0IsUUFBZCxDQUF1QixLQUF2QjtBQUNELFNBRkQsTUFFTyxJQUFJbkgsYUFBYSxLQUFiLElBQXVCLEtBQUtnWixhQUFMLENBQW1CbmlCLE9BQW5CLENBQTJCLFFBQTNCLElBQXVDLENBQWxFLEVBQXNFO0FBQzNFLGVBQUswOEIsUUFBTCxDQUFjbjRCLFdBQWQsQ0FBMEI0RSxRQUExQjtBQUNELFNBRk0sTUFFQSxJQUFJQSxhQUFhLE1BQWIsSUFBd0IsS0FBS2daLGFBQUwsQ0FBbUJuaUIsT0FBbkIsQ0FBMkIsT0FBM0IsSUFBc0MsQ0FBbEUsRUFBc0U7QUFDM0UsZUFBSzA4QixRQUFMLENBQWNuNEIsV0FBZCxDQUEwQjRFLFFBQTFCLEVBQ0ttSCxRQURMLENBQ2MsT0FEZDtBQUVELFNBSE0sTUFHQSxJQUFJbkgsYUFBYSxPQUFiLElBQXlCLEtBQUtnWixhQUFMLENBQW1CbmlCLE9BQW5CLENBQTJCLE1BQTNCLElBQXFDLENBQWxFLEVBQXNFO0FBQzNFLGVBQUswOEIsUUFBTCxDQUFjbjRCLFdBQWQsQ0FBMEI0RSxRQUExQixFQUNLbUgsUUFETCxDQUNjLE1BRGQ7QUFFRDs7QUFFRDtBQUxPLGFBTUYsSUFBSSxDQUFDbkgsUUFBRCxJQUFjLEtBQUtnWixhQUFMLENBQW1CbmlCLE9BQW5CLENBQTJCLEtBQTNCLElBQW9DLENBQUMsQ0FBbkQsSUFBMEQsS0FBS21pQixhQUFMLENBQW1CbmlCLE9BQW5CLENBQTJCLE1BQTNCLElBQXFDLENBQW5HLEVBQXVHO0FBQzFHLGlCQUFLMDhCLFFBQUwsQ0FBY3BzQixRQUFkLENBQXVCLE1BQXZCO0FBQ0QsV0FGSSxNQUVFLElBQUluSCxhQUFhLEtBQWIsSUFBdUIsS0FBS2daLGFBQUwsQ0FBbUJuaUIsT0FBbkIsQ0FBMkIsUUFBM0IsSUFBdUMsQ0FBQyxDQUEvRCxJQUFzRSxLQUFLbWlCLGFBQUwsQ0FBbUJuaUIsT0FBbkIsQ0FBMkIsTUFBM0IsSUFBcUMsQ0FBL0csRUFBbUg7QUFDeEgsaUJBQUswOEIsUUFBTCxDQUFjbjRCLFdBQWQsQ0FBMEI0RSxRQUExQixFQUNLbUgsUUFETCxDQUNjLE1BRGQ7QUFFRCxXQUhNLE1BR0EsSUFBSW5ILGFBQWEsTUFBYixJQUF3QixLQUFLZ1osYUFBTCxDQUFtQm5pQixPQUFuQixDQUEyQixPQUEzQixJQUFzQyxDQUFDLENBQS9ELElBQXNFLEtBQUttaUIsYUFBTCxDQUFtQm5pQixPQUFuQixDQUEyQixRQUEzQixJQUF1QyxDQUFqSCxFQUFxSDtBQUMxSCxpQkFBSzA4QixRQUFMLENBQWNuNEIsV0FBZCxDQUEwQjRFLFFBQTFCO0FBQ0QsV0FGTSxNQUVBLElBQUlBLGFBQWEsT0FBYixJQUF5QixLQUFLZ1osYUFBTCxDQUFtQm5pQixPQUFuQixDQUEyQixNQUEzQixJQUFxQyxDQUFDLENBQS9ELElBQXNFLEtBQUttaUIsYUFBTCxDQUFtQm5pQixPQUFuQixDQUEyQixRQUEzQixJQUF1QyxDQUFqSCxFQUFxSDtBQUMxSCxpQkFBSzA4QixRQUFMLENBQWNuNEIsV0FBZCxDQUEwQjRFLFFBQTFCO0FBQ0Q7QUFDRDtBQUhPLGVBSUY7QUFDSCxtQkFBS3V6QixRQUFMLENBQWNuNEIsV0FBZCxDQUEwQjRFLFFBQTFCO0FBQ0Q7QUFDRCxhQUFLb1osWUFBTCxHQUFvQixJQUFwQjtBQUNBLGFBQUtMLE9BQUw7QUFDRDs7QUFFRDs7Ozs7O0FBcklXO0FBQUE7QUFBQSxxQ0EwSUk7QUFDYixZQUFJL1ksV0FBVyxLQUFLcXpCLGlCQUFMLENBQXVCLEtBQUtFLFFBQTVCLENBQWY7QUFBQSxZQUNJTyxXQUFXeitCLFdBQVcySSxHQUFYLENBQWVFLGFBQWYsQ0FBNkIsS0FBS3ExQixRQUFsQyxDQURmO0FBQUEsWUFFSWx6QixjQUFjaEwsV0FBVzJJLEdBQVgsQ0FBZUUsYUFBZixDQUE2QixLQUFLM0gsUUFBbEMsQ0FGbEI7QUFBQSxZQUdJOGlCLFlBQWFyWixhQUFhLE1BQWIsR0FBc0IsTUFBdEIsR0FBaUNBLGFBQWEsT0FBZCxHQUF5QixNQUF6QixHQUFrQyxLQUhuRjtBQUFBLFlBSUk0RixRQUFTeVQsY0FBYyxLQUFmLEdBQXdCLFFBQXhCLEdBQW1DLE9BSi9DO0FBQUEsWUFLSXZhLFNBQVU4RyxVQUFVLFFBQVgsR0FBdUIsS0FBSzBDLE9BQUwsQ0FBYXJJLE9BQXBDLEdBQThDLEtBQUtxSSxPQUFMLENBQWFwSSxPQUx4RTtBQUFBLFlBTUkzSSxRQUFRLElBTlo7O0FBUUEsWUFBS3U4QixTQUFTOTBCLEtBQVQsSUFBa0I4MEIsU0FBUzcwQixVQUFULENBQW9CRCxLQUF2QyxJQUFrRCxDQUFDLEtBQUsrWixPQUFOLElBQWlCLENBQUMxakIsV0FBVzJJLEdBQVgsQ0FBZUMsZ0JBQWYsQ0FBZ0MsS0FBS3MxQixRQUFyQyxDQUF4RSxFQUF5SDtBQUN2SCxlQUFLQSxRQUFMLENBQWN6MEIsTUFBZCxDQUFxQnpKLFdBQVcySSxHQUFYLENBQWVHLFVBQWYsQ0FBMEIsS0FBS28xQixRQUEvQixFQUF5QyxLQUFLaDlCLFFBQTlDLEVBQXdELGVBQXhELEVBQXlFLEtBQUsrUixPQUFMLENBQWFySSxPQUF0RixFQUErRixLQUFLcUksT0FBTCxDQUFhcEksT0FBNUcsRUFBcUgsSUFBckgsQ0FBckIsRUFBaUp5RCxHQUFqSixDQUFxSjtBQUNySjtBQUNFLHFCQUFTdEQsWUFBWXBCLFVBQVosQ0FBdUJELEtBQXZCLEdBQWdDLEtBQUtzSixPQUFMLENBQWFwSSxPQUFiLEdBQXVCLENBRm1GO0FBR25KLHNCQUFVO0FBSHlJLFdBQXJKO0FBS0EsaUJBQU8sS0FBUDtBQUNEOztBQUVELGFBQUtxekIsUUFBTCxDQUFjejBCLE1BQWQsQ0FBcUJ6SixXQUFXMkksR0FBWCxDQUFlRyxVQUFmLENBQTBCLEtBQUtvMUIsUUFBL0IsRUFBeUMsS0FBS2g5QixRQUE5QyxFQUF1RCxhQUFheUosWUFBWSxRQUF6QixDQUF2RCxFQUEyRixLQUFLc0ksT0FBTCxDQUFhckksT0FBeEcsRUFBaUgsS0FBS3FJLE9BQUwsQ0FBYXBJLE9BQTlILENBQXJCOztBQUVBLGVBQU0sQ0FBQzdLLFdBQVcySSxHQUFYLENBQWVDLGdCQUFmLENBQWdDLEtBQUtzMUIsUUFBckMsQ0FBRCxJQUFtRCxLQUFLeGEsT0FBOUQsRUFBdUU7QUFDckUsZUFBS1UsV0FBTCxDQUFpQnpaLFFBQWpCO0FBQ0EsZUFBSzBaLFlBQUw7QUFDRDtBQUNGOztBQUVEOzs7Ozs7O0FBcEtXO0FBQUE7QUFBQSw2QkEwS0o7QUFDTCxZQUFJLEtBQUtwUixPQUFMLENBQWF5ckIsTUFBYixLQUF3QixLQUF4QixJQUFpQyxDQUFDMStCLFdBQVdnRyxVQUFYLENBQXNCNkcsRUFBdEIsQ0FBeUIsS0FBS29HLE9BQUwsQ0FBYXlyQixNQUF0QyxDQUF0QyxFQUFxRjtBQUNuRjtBQUNBLGlCQUFPLEtBQVA7QUFDRDs7QUFFRCxZQUFJeDhCLFFBQVEsSUFBWjtBQUNBLGFBQUtnOEIsUUFBTCxDQUFjNXZCLEdBQWQsQ0FBa0IsWUFBbEIsRUFBZ0MsUUFBaEMsRUFBMEN5RCxJQUExQztBQUNBLGFBQUtzUyxZQUFMOztBQUVBOzs7O0FBSUEsYUFBS25qQixRQUFMLENBQWNFLE9BQWQsQ0FBc0Isb0JBQXRCLEVBQTRDLEtBQUs4OEIsUUFBTCxDQUFjNzlCLElBQWQsQ0FBbUIsSUFBbkIsQ0FBNUM7O0FBR0EsYUFBSzY5QixRQUFMLENBQWM3OUIsSUFBZCxDQUFtQjtBQUNqQiw0QkFBa0IsSUFERDtBQUVqQix5QkFBZTtBQUZFLFNBQW5CO0FBSUE2QixjQUFNaWQsUUFBTixHQUFpQixJQUFqQjtBQUNBO0FBQ0EsYUFBSytlLFFBQUwsQ0FBY3BmLElBQWQsR0FBcUIzTSxJQUFyQixHQUE0QjdELEdBQTVCLENBQWdDLFlBQWhDLEVBQThDLEVBQTlDLEVBQWtEcXdCLE1BQWxELENBQXlELEtBQUsxckIsT0FBTCxDQUFhMnJCLGNBQXRFLEVBQXNGLFlBQVc7QUFDL0Y7QUFDRCxTQUZEO0FBR0E7Ozs7QUFJQSxhQUFLMTlCLFFBQUwsQ0FBY0UsT0FBZCxDQUFzQixpQkFBdEI7QUFDRDs7QUFFRDs7Ozs7O0FBM01XO0FBQUE7QUFBQSw2QkFnTko7QUFDTDtBQUNBLFlBQUljLFFBQVEsSUFBWjtBQUNBLGFBQUtnOEIsUUFBTCxDQUFjcGYsSUFBZCxHQUFxQnplLElBQXJCLENBQTBCO0FBQ3hCLHlCQUFlLElBRFM7QUFFeEIsNEJBQWtCO0FBRk0sU0FBMUIsRUFHRzZXLE9BSEgsQ0FHVyxLQUFLakUsT0FBTCxDQUFhNHJCLGVBSHhCLEVBR3lDLFlBQVc7QUFDbEQzOEIsZ0JBQU1pZCxRQUFOLEdBQWlCLEtBQWpCO0FBQ0FqZCxnQkFBTTQ3QixPQUFOLEdBQWdCLEtBQWhCO0FBQ0EsY0FBSTU3QixNQUFNNmhCLFlBQVYsRUFBd0I7QUFDdEI3aEIsa0JBQU1nOEIsUUFBTixDQUNNbjRCLFdBRE4sQ0FDa0I3RCxNQUFNODdCLGlCQUFOLENBQXdCOTdCLE1BQU1nOEIsUUFBOUIsQ0FEbEIsRUFFTXBzQixRQUZOLENBRWU1UCxNQUFNK1EsT0FBTixDQUFjdVEsYUFGN0I7O0FBSUR0aEIsa0JBQU15aEIsYUFBTixHQUFzQixFQUF0QjtBQUNBemhCLGtCQUFNd2hCLE9BQU4sR0FBZ0IsQ0FBaEI7QUFDQXhoQixrQkFBTTZoQixZQUFOLEdBQXFCLEtBQXJCO0FBQ0E7QUFDRixTQWZEO0FBZ0JBOzs7O0FBSUEsYUFBSzdpQixRQUFMLENBQWNFLE9BQWQsQ0FBc0IsaUJBQXRCO0FBQ0Q7O0FBRUQ7Ozs7OztBQTFPVztBQUFBO0FBQUEsZ0NBK09EO0FBQ1IsWUFBSWMsUUFBUSxJQUFaO0FBQ0EsWUFBSXM4QixZQUFZLEtBQUtOLFFBQXJCO0FBQ0EsWUFBSVksVUFBVSxLQUFkOztBQUVBLFlBQUksQ0FBQyxLQUFLN3JCLE9BQUwsQ0FBYThTLFlBQWxCLEVBQWdDOztBQUU5QixlQUFLN2tCLFFBQUwsQ0FDQ21NLEVBREQsQ0FDSSx1QkFESixFQUM2QixVQUFTckosQ0FBVCxFQUFZO0FBQ3ZDLGdCQUFJLENBQUM5QixNQUFNaWQsUUFBWCxFQUFxQjtBQUNuQmpkLG9CQUFNdWlCLE9BQU4sR0FBZ0IxZixXQUFXLFlBQVc7QUFDcEM3QyxzQkFBTTZQLElBQU47QUFDRCxlQUZlLEVBRWI3UCxNQUFNK1EsT0FBTixDQUFjeVIsVUFGRCxDQUFoQjtBQUdEO0FBQ0YsV0FQRCxFQVFDclgsRUFSRCxDQVFJLHVCQVJKLEVBUTZCLFVBQVNySixDQUFULEVBQVk7QUFDdkN3RCx5QkFBYXRGLE1BQU11aUIsT0FBbkI7QUFDQSxnQkFBSSxDQUFDcWEsT0FBRCxJQUFhNThCLE1BQU00N0IsT0FBTixJQUFpQixDQUFDNTdCLE1BQU0rUSxPQUFOLENBQWMyUyxTQUFqRCxFQUE2RDtBQUMzRDFqQixvQkFBTWlRLElBQU47QUFDRDtBQUNGLFdBYkQ7QUFjRDs7QUFFRCxZQUFJLEtBQUtjLE9BQUwsQ0FBYTJTLFNBQWpCLEVBQTRCO0FBQzFCLGVBQUsxa0IsUUFBTCxDQUFjbU0sRUFBZCxDQUFpQixzQkFBakIsRUFBeUMsVUFBU3JKLENBQVQsRUFBWTtBQUNuREEsY0FBRStiLHdCQUFGO0FBQ0EsZ0JBQUk3ZCxNQUFNNDdCLE9BQVYsRUFBbUI7QUFDakI7QUFDQTtBQUNELGFBSEQsTUFHTztBQUNMNTdCLG9CQUFNNDdCLE9BQU4sR0FBZ0IsSUFBaEI7QUFDQSxrQkFBSSxDQUFDNTdCLE1BQU0rUSxPQUFOLENBQWM4UyxZQUFkLElBQThCLENBQUM3akIsTUFBTWhCLFFBQU4sQ0FBZWIsSUFBZixDQUFvQixVQUFwQixDQUFoQyxLQUFvRSxDQUFDNkIsTUFBTWlkLFFBQS9FLEVBQXlGO0FBQ3ZGamQsc0JBQU02UCxJQUFOO0FBQ0Q7QUFDRjtBQUNGLFdBWEQ7QUFZRCxTQWJELE1BYU87QUFDTCxlQUFLN1EsUUFBTCxDQUFjbU0sRUFBZCxDQUFpQixzQkFBakIsRUFBeUMsVUFBU3JKLENBQVQsRUFBWTtBQUNuREEsY0FBRStiLHdCQUFGO0FBQ0E3ZCxrQkFBTTQ3QixPQUFOLEdBQWdCLElBQWhCO0FBQ0QsV0FIRDtBQUlEOztBQUVELFlBQUksQ0FBQyxLQUFLN3FCLE9BQUwsQ0FBYThyQixlQUFsQixFQUFtQztBQUNqQyxlQUFLNzlCLFFBQUwsQ0FDQ21NLEVBREQsQ0FDSSxvQ0FESixFQUMwQyxVQUFTckosQ0FBVCxFQUFZO0FBQ3BEOUIsa0JBQU1pZCxRQUFOLEdBQWlCamQsTUFBTWlRLElBQU4sRUFBakIsR0FBZ0NqUSxNQUFNNlAsSUFBTixFQUFoQztBQUNELFdBSEQ7QUFJRDs7QUFFRCxhQUFLN1EsUUFBTCxDQUFjbU0sRUFBZCxDQUFpQjtBQUNmO0FBQ0E7QUFDQSw4QkFBb0IsS0FBSzhFLElBQUwsQ0FBVXZLLElBQVYsQ0FBZSxJQUFmO0FBSEwsU0FBakI7O0FBTUEsYUFBSzFHLFFBQUwsQ0FDR21NLEVBREgsQ0FDTSxrQkFETixFQUMwQixVQUFTckosQ0FBVCxFQUFZO0FBQ2xDODZCLG9CQUFVLElBQVY7QUFDQSxjQUFJNThCLE1BQU00N0IsT0FBVixFQUFtQjtBQUNqQjtBQUNBO0FBQ0EsZ0JBQUcsQ0FBQzU3QixNQUFNK1EsT0FBTixDQUFjMlMsU0FBbEIsRUFBNkI7QUFBRWtaLHdCQUFVLEtBQVY7QUFBa0I7QUFDakQsbUJBQU8sS0FBUDtBQUNELFdBTEQsTUFLTztBQUNMNThCLGtCQUFNNlAsSUFBTjtBQUNEO0FBQ0YsU0FYSCxFQWFHMUUsRUFiSCxDQWFNLHFCQWJOLEVBYTZCLFVBQVNySixDQUFULEVBQVk7QUFDckM4NkIsb0JBQVUsS0FBVjtBQUNBNThCLGdCQUFNNDdCLE9BQU4sR0FBZ0IsS0FBaEI7QUFDQTU3QixnQkFBTWlRLElBQU47QUFDRCxTQWpCSCxFQW1CRzlFLEVBbkJILENBbUJNLHFCQW5CTixFQW1CNkIsWUFBVztBQUNwQyxjQUFJbkwsTUFBTWlkLFFBQVYsRUFBb0I7QUFDbEJqZCxrQkFBTW1pQixZQUFOO0FBQ0Q7QUFDRixTQXZCSDtBQXdCRDs7QUFFRDs7Ozs7QUFqVVc7QUFBQTtBQUFBLCtCQXFVRjtBQUNQLFlBQUksS0FBS2xGLFFBQVQsRUFBbUI7QUFDakIsZUFBS2hOLElBQUw7QUFDRCxTQUZELE1BRU87QUFDTCxlQUFLSixJQUFMO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7QUE3VVc7QUFBQTtBQUFBLGdDQWlWRDtBQUNSLGFBQUs3USxRQUFMLENBQWNiLElBQWQsQ0FBbUIsT0FBbkIsRUFBNEIsS0FBSzY5QixRQUFMLENBQWNsdUIsSUFBZCxFQUE1QixFQUNjdEMsR0FEZCxDQUNrQix5QkFEbEIsRUFFYzNILFdBRmQsQ0FFMEIsd0JBRjFCLEVBR2N0RSxVQUhkLENBR3lCLHNHQUh6Qjs7QUFLQSxhQUFLeThCLFFBQUwsQ0FBY2hiLE1BQWQ7O0FBRUFsakIsbUJBQVdzQixnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBMVZVOztBQUFBO0FBQUE7O0FBNlZidThCLFVBQVE1a0IsUUFBUixHQUFtQjtBQUNqQjhsQixxQkFBaUIsS0FEQTtBQUVqQjs7Ozs7QUFLQXJhLGdCQUFZLEdBUEs7QUFRakI7Ozs7O0FBS0FrYSxvQkFBZ0IsR0FiQztBQWNqQjs7Ozs7QUFLQUMscUJBQWlCLEdBbkJBO0FBb0JqQjs7Ozs7QUFLQTlZLGtCQUFjLEtBekJHO0FBMEJqQjs7Ozs7QUFLQXVZLHFCQUFpQixFQS9CQTtBQWdDakI7Ozs7O0FBS0FDLGtCQUFjLFNBckNHO0FBc0NqQjs7Ozs7QUFLQUYsa0JBQWMsU0EzQ0c7QUE0Q2pCOzs7OztBQUtBSyxZQUFRLE9BakRTO0FBa0RqQjs7Ozs7QUFLQVIsY0FBVSxFQXZETztBQXdEakI7Ozs7O0FBS0FELGFBQVMsRUE3RFE7QUE4RGpCZSxvQkFBZ0IsZUE5REM7QUErRGpCOzs7OztBQUtBcFosZUFBVyxJQXBFTTtBQXFFakI7Ozs7O0FBS0FwQyxtQkFBZSxFQTFFRTtBQTJFakI7Ozs7O0FBS0E1WSxhQUFTLEVBaEZRO0FBaUZqQjs7Ozs7QUFLQUMsYUFBUyxFQXRGUTtBQXVGZjs7Ozs7O0FBTUZ1ekIsZUFBVztBQTdGTSxHQUFuQjs7QUFnR0E7Ozs7QUFJQTtBQUNBcCtCLGFBQVdNLE1BQVgsQ0FBa0J1OUIsT0FBbEIsRUFBMkIsU0FBM0I7QUFFQyxDQXBjQSxDQW9jQ24xQixNQXBjRCxDQUFEO0NDRkE7O0FBRUE7O0FBQ0EsQ0FBQyxZQUFXO0FBQ1YsTUFBSSxDQUFDaEMsS0FBS0MsR0FBVixFQUNFRCxLQUFLQyxHQUFMLEdBQVcsWUFBVztBQUFFLFdBQU8sSUFBSUQsSUFBSixHQUFXRSxPQUFYLEVBQVA7QUFBOEIsR0FBdEQ7O0FBRUYsTUFBSUMsVUFBVSxDQUFDLFFBQUQsRUFBVyxLQUFYLENBQWQ7QUFDQSxPQUFLLElBQUl0RCxJQUFJLENBQWIsRUFBZ0JBLElBQUlzRCxRQUFRaEUsTUFBWixJQUFzQixDQUFDMkQsT0FBT00scUJBQTlDLEVBQXFFLEVBQUV2RCxDQUF2RSxFQUEwRTtBQUN0RSxRQUFJd0QsS0FBS0YsUUFBUXRELENBQVIsQ0FBVDtBQUNBaUQsV0FBT00scUJBQVAsR0FBK0JOLE9BQU9PLEtBQUcsdUJBQVYsQ0FBL0I7QUFDQVAsV0FBT1Esb0JBQVAsR0FBK0JSLE9BQU9PLEtBQUcsc0JBQVYsS0FDRFAsT0FBT08sS0FBRyw2QkFBVixDQUQ5QjtBQUVIO0FBQ0QsTUFBSSx1QkFBdUJFLElBQXZCLENBQTRCVCxPQUFPVSxTQUFQLENBQWlCQyxTQUE3QyxLQUNDLENBQUNYLE9BQU9NLHFCQURULElBQ2tDLENBQUNOLE9BQU9RLG9CQUQ5QyxFQUNvRTtBQUNsRSxRQUFJSSxXQUFXLENBQWY7QUFDQVosV0FBT00scUJBQVAsR0FBK0IsVUFBU08sUUFBVCxFQUFtQjtBQUM5QyxVQUFJVixNQUFNRCxLQUFLQyxHQUFMLEVBQVY7QUFDQSxVQUFJVyxXQUFXdkUsS0FBS3dFLEdBQUwsQ0FBU0gsV0FBVyxFQUFwQixFQUF3QlQsR0FBeEIsQ0FBZjtBQUNBLGFBQU81QixXQUFXLFlBQVc7QUFBRXNDLGlCQUFTRCxXQUFXRSxRQUFwQjtBQUFnQyxPQUF4RCxFQUNXQSxXQUFXWCxHQUR0QixDQUFQO0FBRUgsS0FMRDtBQU1BSCxXQUFPUSxvQkFBUCxHQUE4QlEsWUFBOUI7QUFDRDtBQUNGLENBdEJEOztBQXdCQSxJQUFJb0osY0FBZ0IsQ0FBQyxXQUFELEVBQWMsV0FBZCxDQUFwQjtBQUNBLElBQUlDLGdCQUFnQixDQUFDLGtCQUFELEVBQXFCLGtCQUFyQixDQUFwQjs7QUFFQTtBQUNBLElBQUlvdUIsV0FBWSxZQUFXO0FBQ3pCLE1BQUl4NkIsY0FBYztBQUNoQixrQkFBYyxlQURFO0FBRWhCLHdCQUFvQixxQkFGSjtBQUdoQixxQkFBaUIsZUFIRDtBQUloQixtQkFBZTtBQUpDLEdBQWxCO0FBTUEsTUFBSW5CLE9BQU9rRCxPQUFPOUIsUUFBUCxDQUFnQkMsYUFBaEIsQ0FBOEIsS0FBOUIsQ0FBWDs7QUFFQSxPQUFLLElBQUlFLENBQVQsSUFBY0osV0FBZCxFQUEyQjtBQUN6QixRQUFJLE9BQU9uQixLQUFLd0IsS0FBTCxDQUFXRCxDQUFYLENBQVAsS0FBeUIsV0FBN0IsRUFBMEM7QUFDeEMsYUFBT0osWUFBWUksQ0FBWixDQUFQO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPLElBQVA7QUFDRCxDQWhCYyxFQUFmOztBQWtCQSxTQUFTcU0sT0FBVCxDQUFpQlEsSUFBakIsRUFBdUIzSSxPQUF2QixFQUFnQ2lJLFNBQWhDLEVBQTJDQyxFQUEzQyxFQUErQztBQUM3Q2xJLFlBQVVqSixFQUFFaUosT0FBRixFQUFXb0UsRUFBWCxDQUFjLENBQWQsQ0FBVjs7QUFFQSxNQUFJLENBQUNwRSxRQUFRbEcsTUFBYixFQUFxQjs7QUFFckIsTUFBSW84QixhQUFhLElBQWpCLEVBQXVCO0FBQ3JCdnRCLFdBQU8zSSxRQUFRZ0osSUFBUixFQUFQLEdBQXdCaEosUUFBUW9KLElBQVIsRUFBeEI7QUFDQWxCO0FBQ0E7QUFDRDs7QUFFRCxNQUFJVSxZQUFZRCxPQUFPZCxZQUFZLENBQVosQ0FBUCxHQUF3QkEsWUFBWSxDQUFaLENBQXhDO0FBQ0EsTUFBSWdCLGNBQWNGLE9BQU9iLGNBQWMsQ0FBZCxDQUFQLEdBQTBCQSxjQUFjLENBQWQsQ0FBNUM7O0FBRUE7QUFDQWdCO0FBQ0E5SSxVQUFRK0ksUUFBUixDQUFpQmQsU0FBakI7QUFDQWpJLFVBQVF1RixHQUFSLENBQVksWUFBWixFQUEwQixNQUExQjtBQUNBeEgsd0JBQXNCLFlBQVc7QUFDL0JpQyxZQUFRK0ksUUFBUixDQUFpQkgsU0FBakI7QUFDQSxRQUFJRCxJQUFKLEVBQVUzSSxRQUFRZ0osSUFBUjtBQUNYLEdBSEQ7O0FBS0E7QUFDQWpMLHdCQUFzQixZQUFXO0FBQy9CaUMsWUFBUSxDQUFSLEVBQVdpSixXQUFYO0FBQ0FqSixZQUFRdUYsR0FBUixDQUFZLFlBQVosRUFBMEIsRUFBMUI7QUFDQXZGLFlBQVErSSxRQUFSLENBQWlCRixXQUFqQjtBQUNELEdBSkQ7O0FBTUE7QUFDQTdJLFVBQVFrSixHQUFSLENBQVksZUFBWixFQUE2QkMsTUFBN0I7O0FBRUE7QUFDQSxXQUFTQSxNQUFULEdBQWtCO0FBQ2hCLFFBQUksQ0FBQ1IsSUFBTCxFQUFXM0ksUUFBUW9KLElBQVI7QUFDWE47QUFDQSxRQUFJWixFQUFKLEVBQVFBLEdBQUd4TCxLQUFILENBQVNzRCxPQUFUO0FBQ1Q7O0FBRUQ7QUFDQSxXQUFTOEksS0FBVCxHQUFpQjtBQUNmOUksWUFBUSxDQUFSLEVBQVdqRSxLQUFYLENBQWlCc04sa0JBQWpCLEdBQXNDLENBQXRDO0FBQ0FySixZQUFRaEQsV0FBUixDQUFvQjRMLFlBQVksR0FBWixHQUFrQkMsV0FBbEIsR0FBZ0MsR0FBaEMsR0FBc0NaLFNBQTFEO0FBQ0Q7QUFDRjs7QUFFRCxJQUFJa3VCLFdBQVc7QUFDYm51QixhQUFXLFVBQVNoSSxPQUFULEVBQWtCaUksU0FBbEIsRUFBNkJDLEVBQTdCLEVBQWlDO0FBQzFDQyxZQUFRLElBQVIsRUFBY25JLE9BQWQsRUFBdUJpSSxTQUF2QixFQUFrQ0MsRUFBbEM7QUFDRCxHQUhZOztBQUtiRSxjQUFZLFVBQVNwSSxPQUFULEVBQWtCaUksU0FBbEIsRUFBNkJDLEVBQTdCLEVBQWlDO0FBQzNDQyxZQUFRLEtBQVIsRUFBZW5JLE9BQWYsRUFBd0JpSSxTQUF4QixFQUFtQ0MsRUFBbkM7QUFDRDtBQVBZLENBQWY7OztBQ2hHQXZJLE9BQVEsNEJBQVIsRUFBc0NvWSxJQUF0QyxDQUEyQyxzQ0FBM0M7QUFDQXBZLE9BQVEsMEJBQVIsRUFBb0NvWSxJQUFwQyxDQUF5Qyw0Q0FBekM7OztBQ0RBcFksT0FBT2hFLFFBQVAsRUFBaUJuQyxVQUFqQjs7O0FDQUE7QUFDQXpDLEVBQUUsV0FBRixFQUFldU4sRUFBZixDQUFrQixPQUFsQixFQUEyQixZQUFXO0FBQ3BDdk4sSUFBRTRFLFFBQUYsRUFBWW5DLFVBQVosQ0FBdUIsU0FBdkIsRUFBaUMsT0FBakM7QUFDRCxDQUZEO0NDREE7OztBQ0FBekMsRUFBRTRFLFFBQUYsRUFBWXk2QixLQUFaLENBQWtCLFlBQVk7QUFDMUIsUUFBSUMsU0FBU3QvQixFQUFFLHNEQUFGLENBQWI7O0FBRUFzL0IsV0FBT3I5QixJQUFQLENBQVksWUFBWTtBQUNwQixZQUFJb0MsS0FBS3JFLEVBQUUsSUFBRixDQUFUO0FBQ0FxRSxXQUFHMmMsSUFBSCxDQUFRLDRDQUFSO0FBQ0gsS0FIRDtBQUlILENBUEQ7OztBQ0NBaGhCLEVBQUUwRyxNQUFGLEVBQVVvQixJQUFWLENBQWUsaUNBQWYsRUFBa0QsWUFBWTtBQUMzRCxNQUFJeTNCLFNBQVN2L0IsRUFBRSxtQkFBRixDQUFiO0FBQ0EsTUFBSXcvQixNQUFNRCxPQUFPMTBCLFFBQVAsRUFBVjtBQUNBLE1BQUlqQixTQUFTNUosRUFBRTBHLE1BQUYsRUFBVWtELE1BQVYsRUFBYjtBQUNBQSxXQUFTQSxTQUFTNDFCLElBQUlsMkIsR0FBdEI7QUFDQU0sV0FBU0EsU0FBUzIxQixPQUFPMzFCLE1BQVAsRUFBVCxHQUEwQixDQUFuQzs7QUFFQSxXQUFTNjFCLFlBQVQsR0FBd0I7QUFDdEJGLFdBQU8vd0IsR0FBUCxDQUFXO0FBQ1Asb0JBQWM1RSxTQUFTO0FBRGhCLEtBQVg7QUFHRDs7QUFFRCxNQUFJQSxTQUFTLENBQWIsRUFBZ0I7QUFDZDYxQjtBQUNEO0FBQ0gsQ0FoQkQiLCJmaWxlIjoiZm91bmRhdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbigkKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgRk9VTkRBVElPTl9WRVJTSU9OID0gJzYuMy4wJztcblxuLy8gR2xvYmFsIEZvdW5kYXRpb24gb2JqZWN0XG4vLyBUaGlzIGlzIGF0dGFjaGVkIHRvIHRoZSB3aW5kb3csIG9yIHVzZWQgYXMgYSBtb2R1bGUgZm9yIEFNRC9Ccm93c2VyaWZ5XG52YXIgRm91bmRhdGlvbiA9IHtcbiAgdmVyc2lvbjogRk9VTkRBVElPTl9WRVJTSU9OLFxuXG4gIC8qKlxuICAgKiBTdG9yZXMgaW5pdGlhbGl6ZWQgcGx1Z2lucy5cbiAgICovXG4gIF9wbHVnaW5zOiB7fSxcblxuICAvKipcbiAgICogU3RvcmVzIGdlbmVyYXRlZCB1bmlxdWUgaWRzIGZvciBwbHVnaW4gaW5zdGFuY2VzXG4gICAqL1xuICBfdXVpZHM6IFtdLFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBmb3IgUlRMIHN1cHBvcnRcbiAgICovXG4gIHJ0bDogZnVuY3Rpb24oKXtcbiAgICByZXR1cm4gJCgnaHRtbCcpLmF0dHIoJ2RpcicpID09PSAncnRsJztcbiAgfSxcbiAgLyoqXG4gICAqIERlZmluZXMgYSBGb3VuZGF0aW9uIHBsdWdpbiwgYWRkaW5nIGl0IHRvIHRoZSBgRm91bmRhdGlvbmAgbmFtZXNwYWNlIGFuZCB0aGUgbGlzdCBvZiBwbHVnaW5zIHRvIGluaXRpYWxpemUgd2hlbiByZWZsb3dpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwbHVnaW4gLSBUaGUgY29uc3RydWN0b3Igb2YgdGhlIHBsdWdpbi5cbiAgICovXG4gIHBsdWdpbjogZnVuY3Rpb24ocGx1Z2luLCBuYW1lKSB7XG4gICAgLy8gT2JqZWN0IGtleSB0byB1c2Ugd2hlbiBhZGRpbmcgdG8gZ2xvYmFsIEZvdW5kYXRpb24gb2JqZWN0XG4gICAgLy8gRXhhbXBsZXM6IEZvdW5kYXRpb24uUmV2ZWFsLCBGb3VuZGF0aW9uLk9mZkNhbnZhc1xuICAgIHZhciBjbGFzc05hbWUgPSAobmFtZSB8fCBmdW5jdGlvbk5hbWUocGx1Z2luKSk7XG4gICAgLy8gT2JqZWN0IGtleSB0byB1c2Ugd2hlbiBzdG9yaW5nIHRoZSBwbHVnaW4sIGFsc28gdXNlZCB0byBjcmVhdGUgdGhlIGlkZW50aWZ5aW5nIGRhdGEgYXR0cmlidXRlIGZvciB0aGUgcGx1Z2luXG4gICAgLy8gRXhhbXBsZXM6IGRhdGEtcmV2ZWFsLCBkYXRhLW9mZi1jYW52YXNcbiAgICB2YXIgYXR0ck5hbWUgID0gaHlwaGVuYXRlKGNsYXNzTmFtZSk7XG5cbiAgICAvLyBBZGQgdG8gdGhlIEZvdW5kYXRpb24gb2JqZWN0IGFuZCB0aGUgcGx1Z2lucyBsaXN0IChmb3IgcmVmbG93aW5nKVxuICAgIHRoaXMuX3BsdWdpbnNbYXR0ck5hbWVdID0gdGhpc1tjbGFzc05hbWVdID0gcGx1Z2luO1xuICB9LFxuICAvKipcbiAgICogQGZ1bmN0aW9uXG4gICAqIFBvcHVsYXRlcyB0aGUgX3V1aWRzIGFycmF5IHdpdGggcG9pbnRlcnMgdG8gZWFjaCBpbmRpdmlkdWFsIHBsdWdpbiBpbnN0YW5jZS5cbiAgICogQWRkcyB0aGUgYHpmUGx1Z2luYCBkYXRhLWF0dHJpYnV0ZSB0byBwcm9ncmFtbWF0aWNhbGx5IGNyZWF0ZWQgcGx1Z2lucyB0byBhbGxvdyB1c2Ugb2YgJChzZWxlY3RvcikuZm91bmRhdGlvbihtZXRob2QpIGNhbGxzLlxuICAgKiBBbHNvIGZpcmVzIHRoZSBpbml0aWFsaXphdGlvbiBldmVudCBmb3IgZWFjaCBwbHVnaW4sIGNvbnNvbGlkYXRpbmcgcmVwZXRpdGl2ZSBjb2RlLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGx1Z2luIC0gYW4gaW5zdGFuY2Ugb2YgYSBwbHVnaW4sIHVzdWFsbHkgYHRoaXNgIGluIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHBsdWdpbiwgcGFzc2VkIGFzIGEgY2FtZWxDYXNlZCBzdHJpbmcuXG4gICAqIEBmaXJlcyBQbHVnaW4jaW5pdFxuICAgKi9cbiAgcmVnaXN0ZXJQbHVnaW46IGZ1bmN0aW9uKHBsdWdpbiwgbmFtZSl7XG4gICAgdmFyIHBsdWdpbk5hbWUgPSBuYW1lID8gaHlwaGVuYXRlKG5hbWUpIDogZnVuY3Rpb25OYW1lKHBsdWdpbi5jb25zdHJ1Y3RvcikudG9Mb3dlckNhc2UoKTtcbiAgICBwbHVnaW4udXVpZCA9IHRoaXMuR2V0WW9EaWdpdHMoNiwgcGx1Z2luTmFtZSk7XG5cbiAgICBpZighcGx1Z2luLiRlbGVtZW50LmF0dHIoYGRhdGEtJHtwbHVnaW5OYW1lfWApKXsgcGx1Z2luLiRlbGVtZW50LmF0dHIoYGRhdGEtJHtwbHVnaW5OYW1lfWAsIHBsdWdpbi51dWlkKTsgfVxuICAgIGlmKCFwbHVnaW4uJGVsZW1lbnQuZGF0YSgnemZQbHVnaW4nKSl7IHBsdWdpbi4kZWxlbWVudC5kYXRhKCd6ZlBsdWdpbicsIHBsdWdpbik7IH1cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBwbHVnaW4gaGFzIGluaXRpYWxpemVkLlxuICAgICAgICAgICAqIEBldmVudCBQbHVnaW4jaW5pdFxuICAgICAgICAgICAqL1xuICAgIHBsdWdpbi4kZWxlbWVudC50cmlnZ2VyKGBpbml0LnpmLiR7cGx1Z2luTmFtZX1gKTtcblxuICAgIHRoaXMuX3V1aWRzLnB1c2gocGx1Z2luLnV1aWQpO1xuXG4gICAgcmV0dXJuO1xuICB9LFxuICAvKipcbiAgICogQGZ1bmN0aW9uXG4gICAqIFJlbW92ZXMgdGhlIHBsdWdpbnMgdXVpZCBmcm9tIHRoZSBfdXVpZHMgYXJyYXkuXG4gICAqIFJlbW92ZXMgdGhlIHpmUGx1Z2luIGRhdGEgYXR0cmlidXRlLCBhcyB3ZWxsIGFzIHRoZSBkYXRhLXBsdWdpbi1uYW1lIGF0dHJpYnV0ZS5cbiAgICogQWxzbyBmaXJlcyB0aGUgZGVzdHJveWVkIGV2ZW50IGZvciB0aGUgcGx1Z2luLCBjb25zb2xpZGF0aW5nIHJlcGV0aXRpdmUgY29kZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHBsdWdpbiAtIGFuIGluc3RhbmNlIG9mIGEgcGx1Z2luLCB1c3VhbGx5IGB0aGlzYCBpbiBjb250ZXh0LlxuICAgKiBAZmlyZXMgUGx1Z2luI2Rlc3Ryb3llZFxuICAgKi9cbiAgdW5yZWdpc3RlclBsdWdpbjogZnVuY3Rpb24ocGx1Z2luKXtcbiAgICB2YXIgcGx1Z2luTmFtZSA9IGh5cGhlbmF0ZShmdW5jdGlvbk5hbWUocGx1Z2luLiRlbGVtZW50LmRhdGEoJ3pmUGx1Z2luJykuY29uc3RydWN0b3IpKTtcblxuICAgIHRoaXMuX3V1aWRzLnNwbGljZSh0aGlzLl91dWlkcy5pbmRleE9mKHBsdWdpbi51dWlkKSwgMSk7XG4gICAgcGx1Z2luLiRlbGVtZW50LnJlbW92ZUF0dHIoYGRhdGEtJHtwbHVnaW5OYW1lfWApLnJlbW92ZURhdGEoJ3pmUGx1Z2luJylcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBwbHVnaW4gaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgICAgICAgICAqIEBldmVudCBQbHVnaW4jZGVzdHJveWVkXG4gICAgICAgICAgICovXG4gICAgICAgICAgLnRyaWdnZXIoYGRlc3Ryb3llZC56Zi4ke3BsdWdpbk5hbWV9YCk7XG4gICAgZm9yKHZhciBwcm9wIGluIHBsdWdpbil7XG4gICAgICBwbHVnaW5bcHJvcF0gPSBudWxsOy8vY2xlYW4gdXAgc2NyaXB0IHRvIHByZXAgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAZnVuY3Rpb25cbiAgICogQ2F1c2VzIG9uZSBvciBtb3JlIGFjdGl2ZSBwbHVnaW5zIHRvIHJlLWluaXRpYWxpemUsIHJlc2V0dGluZyBldmVudCBsaXN0ZW5lcnMsIHJlY2FsY3VsYXRpbmcgcG9zaXRpb25zLCBldGMuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5zIC0gb3B0aW9uYWwgc3RyaW5nIG9mIGFuIGluZGl2aWR1YWwgcGx1Z2luIGtleSwgYXR0YWluZWQgYnkgY2FsbGluZyBgJChlbGVtZW50KS5kYXRhKCdwbHVnaW5OYW1lJylgLCBvciBzdHJpbmcgb2YgYSBwbHVnaW4gY2xhc3MgaS5lLiBgJ2Ryb3Bkb3duJ2BcbiAgICogQGRlZmF1bHQgSWYgbm8gYXJndW1lbnQgaXMgcGFzc2VkLCByZWZsb3cgYWxsIGN1cnJlbnRseSBhY3RpdmUgcGx1Z2lucy5cbiAgICovXG4gICByZUluaXQ6IGZ1bmN0aW9uKHBsdWdpbnMpe1xuICAgICB2YXIgaXNKUSA9IHBsdWdpbnMgaW5zdGFuY2VvZiAkO1xuICAgICB0cnl7XG4gICAgICAgaWYoaXNKUSl7XG4gICAgICAgICBwbHVnaW5zLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgICAgJCh0aGlzKS5kYXRhKCd6ZlBsdWdpbicpLl9pbml0KCk7XG4gICAgICAgICB9KTtcbiAgICAgICB9ZWxzZXtcbiAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHBsdWdpbnMsXG4gICAgICAgICBfdGhpcyA9IHRoaXMsXG4gICAgICAgICBmbnMgPSB7XG4gICAgICAgICAgICdvYmplY3QnOiBmdW5jdGlvbihwbGdzKXtcbiAgICAgICAgICAgICBwbGdzLmZvckVhY2goZnVuY3Rpb24ocCl7XG4gICAgICAgICAgICAgICBwID0gaHlwaGVuYXRlKHApO1xuICAgICAgICAgICAgICAgJCgnW2RhdGEtJysgcCArJ10nKS5mb3VuZGF0aW9uKCdfaW5pdCcpO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICB9LFxuICAgICAgICAgICAnc3RyaW5nJzogZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICBwbHVnaW5zID0gaHlwaGVuYXRlKHBsdWdpbnMpO1xuICAgICAgICAgICAgICQoJ1tkYXRhLScrIHBsdWdpbnMgKyddJykuZm91bmRhdGlvbignX2luaXQnKTtcbiAgICAgICAgICAgfSxcbiAgICAgICAgICAgJ3VuZGVmaW5lZCc6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgdGhpc1snb2JqZWN0J10oT2JqZWN0LmtleXMoX3RoaXMuX3BsdWdpbnMpKTtcbiAgICAgICAgICAgfVxuICAgICAgICAgfTtcbiAgICAgICAgIGZuc1t0eXBlXShwbHVnaW5zKTtcbiAgICAgICB9XG4gICAgIH1jYXRjaChlcnIpe1xuICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgfWZpbmFsbHl7XG4gICAgICAgcmV0dXJuIHBsdWdpbnM7XG4gICAgIH1cbiAgIH0sXG5cbiAgLyoqXG4gICAqIHJldHVybnMgYSByYW5kb20gYmFzZS0zNiB1aWQgd2l0aCBuYW1lc3BhY2luZ1xuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aCAtIG51bWJlciBvZiByYW5kb20gYmFzZS0zNiBkaWdpdHMgZGVzaXJlZC4gSW5jcmVhc2UgZm9yIG1vcmUgcmFuZG9tIHN0cmluZ3MuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgLSBuYW1lIG9mIHBsdWdpbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW4gdWlkLCBvcHRpb25hbC5cbiAgICogQGRlZmF1bHQge1N0cmluZ30gJycgLSBpZiBubyBwbHVnaW4gbmFtZSBpcyBwcm92aWRlZCwgbm90aGluZyBpcyBhcHBlbmRlZCB0byB0aGUgdWlkLlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSAtIHVuaXF1ZSBpZFxuICAgKi9cbiAgR2V0WW9EaWdpdHM6IGZ1bmN0aW9uKGxlbmd0aCwgbmFtZXNwYWNlKXtcbiAgICBsZW5ndGggPSBsZW5ndGggfHwgNjtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgoTWF0aC5wb3coMzYsIGxlbmd0aCArIDEpIC0gTWF0aC5yYW5kb20oKSAqIE1hdGgucG93KDM2LCBsZW5ndGgpKSkudG9TdHJpbmcoMzYpLnNsaWNlKDEpICsgKG5hbWVzcGFjZSA/IGAtJHtuYW1lc3BhY2V9YCA6ICcnKTtcbiAgfSxcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgcGx1Z2lucyBvbiBhbnkgZWxlbWVudHMgd2l0aGluIGBlbGVtYCAoYW5kIGBlbGVtYCBpdHNlbGYpIHRoYXQgYXJlbid0IGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtIC0galF1ZXJ5IG9iamVjdCBjb250YWluaW5nIHRoZSBlbGVtZW50IHRvIGNoZWNrIGluc2lkZS4gQWxzbyBjaGVja3MgdGhlIGVsZW1lbnQgaXRzZWxmLCB1bmxlc3MgaXQncyB0aGUgYGRvY3VtZW50YCBvYmplY3QuXG4gICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBwbHVnaW5zIC0gQSBsaXN0IG9mIHBsdWdpbnMgdG8gaW5pdGlhbGl6ZS4gTGVhdmUgdGhpcyBvdXQgdG8gaW5pdGlhbGl6ZSBldmVyeXRoaW5nLlxuICAgKi9cbiAgcmVmbG93OiBmdW5jdGlvbihlbGVtLCBwbHVnaW5zKSB7XG5cbiAgICAvLyBJZiBwbHVnaW5zIGlzIHVuZGVmaW5lZCwganVzdCBncmFiIGV2ZXJ5dGhpbmdcbiAgICBpZiAodHlwZW9mIHBsdWdpbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwbHVnaW5zID0gT2JqZWN0LmtleXModGhpcy5fcGx1Z2lucyk7XG4gICAgfVxuICAgIC8vIElmIHBsdWdpbnMgaXMgYSBzdHJpbmcsIGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBvbmUgaXRlbVxuICAgIGVsc2UgaWYgKHR5cGVvZiBwbHVnaW5zID09PSAnc3RyaW5nJykge1xuICAgICAgcGx1Z2lucyA9IFtwbHVnaW5zXTtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggcGx1Z2luXG4gICAgJC5lYWNoKHBsdWdpbnMsIGZ1bmN0aW9uKGksIG5hbWUpIHtcbiAgICAgIC8vIEdldCB0aGUgY3VycmVudCBwbHVnaW5cbiAgICAgIHZhciBwbHVnaW4gPSBfdGhpcy5fcGx1Z2luc1tuYW1lXTtcblxuICAgICAgLy8gTG9jYWxpemUgdGhlIHNlYXJjaCB0byBhbGwgZWxlbWVudHMgaW5zaWRlIGVsZW0sIGFzIHdlbGwgYXMgZWxlbSBpdHNlbGYsIHVubGVzcyBlbGVtID09PSBkb2N1bWVudFxuICAgICAgdmFyICRlbGVtID0gJChlbGVtKS5maW5kKCdbZGF0YS0nK25hbWUrJ10nKS5hZGRCYWNrKCdbZGF0YS0nK25hbWUrJ10nKTtcblxuICAgICAgLy8gRm9yIGVhY2ggcGx1Z2luIGZvdW5kLCBpbml0aWFsaXplIGl0XG4gICAgICAkZWxlbS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJGVsID0gJCh0aGlzKSxcbiAgICAgICAgICAgIG9wdHMgPSB7fTtcbiAgICAgICAgLy8gRG9uJ3QgZG91YmxlLWRpcCBvbiBwbHVnaW5zXG4gICAgICAgIGlmICgkZWwuZGF0YSgnemZQbHVnaW4nKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIlRyaWVkIHRvIGluaXRpYWxpemUgXCIrbmFtZStcIiBvbiBhbiBlbGVtZW50IHRoYXQgYWxyZWFkeSBoYXMgYSBGb3VuZGF0aW9uIHBsdWdpbi5cIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoJGVsLmF0dHIoJ2RhdGEtb3B0aW9ucycpKXtcbiAgICAgICAgICB2YXIgdGhpbmcgPSAkZWwuYXR0cignZGF0YS1vcHRpb25zJykuc3BsaXQoJzsnKS5mb3JFYWNoKGZ1bmN0aW9uKGUsIGkpe1xuICAgICAgICAgICAgdmFyIG9wdCA9IGUuc3BsaXQoJzonKS5tYXAoZnVuY3Rpb24oZWwpeyByZXR1cm4gZWwudHJpbSgpOyB9KTtcbiAgICAgICAgICAgIGlmKG9wdFswXSkgb3B0c1tvcHRbMF1dID0gcGFyc2VWYWx1ZShvcHRbMV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAkZWwuZGF0YSgnemZQbHVnaW4nLCBuZXcgcGx1Z2luKCQodGhpcyksIG9wdHMpKTtcbiAgICAgICAgfWNhdGNoKGVyKXtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyKTtcbiAgICAgICAgfWZpbmFsbHl7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSxcbiAgZ2V0Rm5OYW1lOiBmdW5jdGlvbk5hbWUsXG4gIHRyYW5zaXRpb25lbmQ6IGZ1bmN0aW9uKCRlbGVtKXtcbiAgICB2YXIgdHJhbnNpdGlvbnMgPSB7XG4gICAgICAndHJhbnNpdGlvbic6ICd0cmFuc2l0aW9uZW5kJyxcbiAgICAgICdXZWJraXRUcmFuc2l0aW9uJzogJ3dlYmtpdFRyYW5zaXRpb25FbmQnLFxuICAgICAgJ01velRyYW5zaXRpb24nOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgICAnT1RyYW5zaXRpb24nOiAnb3RyYW5zaXRpb25lbmQnXG4gICAgfTtcbiAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuICAgICAgICBlbmQ7XG5cbiAgICBmb3IgKHZhciB0IGluIHRyYW5zaXRpb25zKXtcbiAgICAgIGlmICh0eXBlb2YgZWxlbS5zdHlsZVt0XSAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICBlbmQgPSB0cmFuc2l0aW9uc1t0XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoZW5kKXtcbiAgICAgIHJldHVybiBlbmQ7XG4gICAgfWVsc2V7XG4gICAgICBlbmQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICRlbGVtLnRyaWdnZXJIYW5kbGVyKCd0cmFuc2l0aW9uZW5kJywgWyRlbGVtXSk7XG4gICAgICB9LCAxKTtcbiAgICAgIHJldHVybiAndHJhbnNpdGlvbmVuZCc7XG4gICAgfVxuICB9XG59O1xuXG5Gb3VuZGF0aW9uLnV0aWwgPSB7XG4gIC8qKlxuICAgKiBGdW5jdGlvbiBmb3IgYXBwbHlpbmcgYSBkZWJvdW5jZSBlZmZlY3QgdG8gYSBmdW5jdGlvbiBjYWxsLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCBlbmQgb2YgdGltZW91dC5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGRlbGF5IC0gVGltZSBpbiBtcyB0byBkZWxheSB0aGUgY2FsbCBvZiBgZnVuY2AuXG4gICAqIEByZXR1cm5zIGZ1bmN0aW9uXG4gICAqL1xuICB0aHJvdHRsZTogZnVuY3Rpb24gKGZ1bmMsIGRlbGF5KSB7XG4gICAgdmFyIHRpbWVyID0gbnVsbDtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgICAgIGlmICh0aW1lciA9PT0gbnVsbCkge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxuLy8gVE9ETzogY29uc2lkZXIgbm90IG1ha2luZyB0aGlzIGEgalF1ZXJ5IGZ1bmN0aW9uXG4vLyBUT0RPOiBuZWVkIHdheSB0byByZWZsb3cgdnMuIHJlLWluaXRpYWxpemVcbi8qKlxuICogVGhlIEZvdW5kYXRpb24galF1ZXJ5IG1ldGhvZC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBtZXRob2QgLSBBbiBhY3Rpb24gdG8gcGVyZm9ybSBvbiB0aGUgY3VycmVudCBqUXVlcnkgb2JqZWN0LlxuICovXG52YXIgZm91bmRhdGlvbiA9IGZ1bmN0aW9uKG1ldGhvZCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBtZXRob2QsXG4gICAgICAkbWV0YSA9ICQoJ21ldGEuZm91bmRhdGlvbi1tcScpLFxuICAgICAgJG5vSlMgPSAkKCcubm8tanMnKTtcblxuICBpZighJG1ldGEubGVuZ3RoKXtcbiAgICAkKCc8bWV0YSBjbGFzcz1cImZvdW5kYXRpb24tbXFcIj4nKS5hcHBlbmRUbyhkb2N1bWVudC5oZWFkKTtcbiAgfVxuICBpZigkbm9KUy5sZW5ndGgpe1xuICAgICRub0pTLnJlbW92ZUNsYXNzKCduby1qcycpO1xuICB9XG5cbiAgaWYodHlwZSA9PT0gJ3VuZGVmaW5lZCcpey8vbmVlZHMgdG8gaW5pdGlhbGl6ZSB0aGUgRm91bmRhdGlvbiBvYmplY3QsIG9yIGFuIGluZGl2aWR1YWwgcGx1Z2luLlxuICAgIEZvdW5kYXRpb24uTWVkaWFRdWVyeS5faW5pdCgpO1xuICAgIEZvdW5kYXRpb24ucmVmbG93KHRoaXMpO1xuICB9ZWxzZSBpZih0eXBlID09PSAnc3RyaW5nJyl7Ly9hbiBpbmRpdmlkdWFsIG1ldGhvZCB0byBpbnZva2Ugb24gYSBwbHVnaW4gb3IgZ3JvdXAgb2YgcGx1Z2luc1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsvL2NvbGxlY3QgYWxsIHRoZSBhcmd1bWVudHMsIGlmIG5lY2Vzc2FyeVxuICAgIHZhciBwbHVnQ2xhc3MgPSB0aGlzLmRhdGEoJ3pmUGx1Z2luJyk7Ly9kZXRlcm1pbmUgdGhlIGNsYXNzIG9mIHBsdWdpblxuXG4gICAgaWYocGx1Z0NsYXNzICE9PSB1bmRlZmluZWQgJiYgcGx1Z0NsYXNzW21ldGhvZF0gIT09IHVuZGVmaW5lZCl7Ly9tYWtlIHN1cmUgYm90aCB0aGUgY2xhc3MgYW5kIG1ldGhvZCBleGlzdFxuICAgICAgaWYodGhpcy5sZW5ndGggPT09IDEpey8vaWYgdGhlcmUncyBvbmx5IG9uZSwgY2FsbCBpdCBkaXJlY3RseS5cbiAgICAgICAgICBwbHVnQ2xhc3NbbWV0aG9kXS5hcHBseShwbHVnQ2xhc3MsIGFyZ3MpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbihpLCBlbCl7Ly9vdGhlcndpc2UgbG9vcCB0aHJvdWdoIHRoZSBqUXVlcnkgY29sbGVjdGlvbiBhbmQgaW52b2tlIHRoZSBtZXRob2Qgb24gZWFjaFxuICAgICAgICAgIHBsdWdDbGFzc1ttZXRob2RdLmFwcGx5KCQoZWwpLmRhdGEoJ3pmUGx1Z2luJyksIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9ZWxzZXsvL2Vycm9yIGZvciBubyBjbGFzcyBvciBubyBtZXRob2RcbiAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcIldlJ3JlIHNvcnJ5LCAnXCIgKyBtZXRob2QgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBtZXRob2QgZm9yIFwiICsgKHBsdWdDbGFzcyA/IGZ1bmN0aW9uTmFtZShwbHVnQ2xhc3MpIDogJ3RoaXMgZWxlbWVudCcpICsgJy4nKTtcbiAgICB9XG4gIH1lbHNley8vZXJyb3IgZm9yIGludmFsaWQgYXJndW1lbnQgdHlwZVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFdlJ3JlIHNvcnJ5LCAke3R5cGV9IGlzIG5vdCBhIHZhbGlkIHBhcmFtZXRlci4gWW91IG11c3QgdXNlIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbWV0aG9kIHlvdSB3aXNoIHRvIGludm9rZS5gKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbndpbmRvdy5Gb3VuZGF0aW9uID0gRm91bmRhdGlvbjtcbiQuZm4uZm91bmRhdGlvbiA9IGZvdW5kYXRpb247XG5cbi8vIFBvbHlmaWxsIGZvciByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbihmdW5jdGlvbigpIHtcbiAgaWYgKCFEYXRlLm5vdyB8fCAhd2luZG93LkRhdGUubm93KVxuICAgIHdpbmRvdy5EYXRlLm5vdyA9IERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsgfTtcblxuICB2YXIgdmVuZG9ycyA9IFsnd2Via2l0JywgJ21veiddO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvcnMubGVuZ3RoICYmICF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK2kpIHtcbiAgICAgIHZhciB2cCA9IHZlbmRvcnNbaV07XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93W3ZwKydSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9ICh3aW5kb3dbdnArJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHdpbmRvd1t2cCsnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10pO1xuICB9XG4gIGlmICgvaVAoYWR8aG9uZXxvZCkuKk9TIDYvLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpXG4gICAgfHwgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgIXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIHZhciBsYXN0VGltZSA9IDA7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICB2YXIgbmV4dFRpbWUgPSBNYXRoLm1heChsYXN0VGltZSArIDE2LCBub3cpO1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2sobGFzdFRpbWUgPSBuZXh0VGltZSk7IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUaW1lIC0gbm93KTtcbiAgICB9O1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGNsZWFyVGltZW91dDtcbiAgfVxuICAvKipcbiAgICogUG9seWZpbGwgZm9yIHBlcmZvcm1hbmNlLm5vdywgcmVxdWlyZWQgYnkgckFGXG4gICAqL1xuICBpZighd2luZG93LnBlcmZvcm1hbmNlIHx8ICF3aW5kb3cucGVyZm9ybWFuY2Uubm93KXtcbiAgICB3aW5kb3cucGVyZm9ybWFuY2UgPSB7XG4gICAgICBzdGFydDogRGF0ZS5ub3coKSxcbiAgICAgIG5vdzogZnVuY3Rpb24oKXsgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLnN0YXJ0OyB9XG4gICAgfTtcbiAgfVxufSkoKTtcbmlmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHtcbiAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihvVGhpcykge1xuICAgIGlmICh0eXBlb2YgdGhpcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gY2xvc2VzdCB0aGluZyBwb3NzaWJsZSB0byB0aGUgRUNNQVNjcmlwdCA1XG4gICAgICAvLyBpbnRlcm5hbCBJc0NhbGxhYmxlIGZ1bmN0aW9uXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAtIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGJvdW5kIGlzIG5vdCBjYWxsYWJsZScpO1xuICAgIH1cblxuICAgIHZhciBhQXJncyAgID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcbiAgICAgICAgZlRvQmluZCA9IHRoaXMsXG4gICAgICAgIGZOT1AgICAgPSBmdW5jdGlvbigpIHt9LFxuICAgICAgICBmQm91bmQgID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGZUb0JpbmQuYXBwbHkodGhpcyBpbnN0YW5jZW9mIGZOT1BcbiAgICAgICAgICAgICAgICAgPyB0aGlzXG4gICAgICAgICAgICAgICAgIDogb1RoaXMsXG4gICAgICAgICAgICAgICAgIGFBcmdzLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgICAgIH07XG5cbiAgICBpZiAodGhpcy5wcm90b3R5cGUpIHtcbiAgICAgIC8vIG5hdGl2ZSBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSBhIHByb3RvdHlwZVxuICAgICAgZk5PUC5wcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcbiAgICB9XG4gICAgZkJvdW5kLnByb3RvdHlwZSA9IG5ldyBmTk9QKCk7XG5cbiAgICByZXR1cm4gZkJvdW5kO1xuICB9O1xufVxuLy8gUG9seWZpbGwgdG8gZ2V0IHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gSUU5XG5mdW5jdGlvbiBmdW5jdGlvbk5hbWUoZm4pIHtcbiAgaWYgKEZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZnVuY05hbWVSZWdleCA9IC9mdW5jdGlvblxccyhbXihdezEsfSlcXCgvO1xuICAgIHZhciByZXN1bHRzID0gKGZ1bmNOYW1lUmVnZXgpLmV4ZWMoKGZuKS50b1N0cmluZygpKTtcbiAgICByZXR1cm4gKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAxKSA/IHJlc3VsdHNbMV0udHJpbSgpIDogXCJcIjtcbiAgfVxuICBlbHNlIGlmIChmbi5wcm90b3R5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmbi5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiBmbi5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxufVxuZnVuY3Rpb24gcGFyc2VWYWx1ZShzdHIpe1xuICBpZiAoJ3RydWUnID09PSBzdHIpIHJldHVybiB0cnVlO1xuICBlbHNlIGlmICgnZmFsc2UnID09PSBzdHIpIHJldHVybiBmYWxzZTtcbiAgZWxzZSBpZiAoIWlzTmFOKHN0ciAqIDEpKSByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICByZXR1cm4gc3RyO1xufVxuLy8gQ29udmVydCBQYXNjYWxDYXNlIHRvIGtlYmFiLWNhc2Vcbi8vIFRoYW5rIHlvdTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvODk1NTU4MFxuZnVuY3Rpb24gaHlwaGVuYXRlKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMS0kMicpLnRvTG93ZXJDYXNlKCk7XG59XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuRm91bmRhdGlvbi5Cb3ggPSB7XG4gIEltTm90VG91Y2hpbmdZb3U6IEltTm90VG91Y2hpbmdZb3UsXG4gIEdldERpbWVuc2lvbnM6IEdldERpbWVuc2lvbnMsXG4gIEdldE9mZnNldHM6IEdldE9mZnNldHNcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0aGUgZGltZW5zaW9ucyBvZiBhbiBlbGVtZW50IHRvIGEgY29udGFpbmVyIGFuZCBkZXRlcm1pbmVzIGNvbGxpc2lvbiBldmVudHMgd2l0aCBjb250YWluZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byB0ZXN0IGZvciBjb2xsaXNpb25zLlxuICogQHBhcmFtIHtqUXVlcnl9IHBhcmVudCAtIGpRdWVyeSBvYmplY3QgdG8gdXNlIGFzIGJvdW5kaW5nIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbHJPbmx5IC0gc2V0IHRvIHRydWUgdG8gY2hlY2sgbGVmdCBhbmQgcmlnaHQgdmFsdWVzIG9ubHkuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRiT25seSAtIHNldCB0byB0cnVlIHRvIGNoZWNrIHRvcCBhbmQgYm90dG9tIHZhbHVlcyBvbmx5LlxuICogQGRlZmF1bHQgaWYgbm8gcGFyZW50IG9iamVjdCBwYXNzZWQsIGRldGVjdHMgY29sbGlzaW9ucyB3aXRoIGB3aW5kb3dgLlxuICogQHJldHVybnMge0Jvb2xlYW59IC0gdHJ1ZSBpZiBjb2xsaXNpb24gZnJlZSwgZmFsc2UgaWYgYSBjb2xsaXNpb24gaW4gYW55IGRpcmVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gSW1Ob3RUb3VjaGluZ1lvdShlbGVtZW50LCBwYXJlbnQsIGxyT25seSwgdGJPbmx5KSB7XG4gIHZhciBlbGVEaW1zID0gR2V0RGltZW5zaW9ucyhlbGVtZW50KSxcbiAgICAgIHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodDtcblxuICBpZiAocGFyZW50KSB7XG4gICAgdmFyIHBhckRpbXMgPSBHZXREaW1lbnNpb25zKHBhcmVudCk7XG5cbiAgICBib3R0b20gPSAoZWxlRGltcy5vZmZzZXQudG9wICsgZWxlRGltcy5oZWlnaHQgPD0gcGFyRGltcy5oZWlnaHQgKyBwYXJEaW1zLm9mZnNldC50b3ApO1xuICAgIHRvcCAgICA9IChlbGVEaW1zLm9mZnNldC50b3AgPj0gcGFyRGltcy5vZmZzZXQudG9wKTtcbiAgICBsZWZ0ICAgPSAoZWxlRGltcy5vZmZzZXQubGVmdCA+PSBwYXJEaW1zLm9mZnNldC5sZWZ0KTtcbiAgICByaWdodCAgPSAoZWxlRGltcy5vZmZzZXQubGVmdCArIGVsZURpbXMud2lkdGggPD0gcGFyRGltcy53aWR0aCArIHBhckRpbXMub2Zmc2V0LmxlZnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIGJvdHRvbSA9IChlbGVEaW1zLm9mZnNldC50b3AgKyBlbGVEaW1zLmhlaWdodCA8PSBlbGVEaW1zLndpbmRvd0RpbXMuaGVpZ2h0ICsgZWxlRGltcy53aW5kb3dEaW1zLm9mZnNldC50b3ApO1xuICAgIHRvcCAgICA9IChlbGVEaW1zLm9mZnNldC50b3AgPj0gZWxlRGltcy53aW5kb3dEaW1zLm9mZnNldC50b3ApO1xuICAgIGxlZnQgICA9IChlbGVEaW1zLm9mZnNldC5sZWZ0ID49IGVsZURpbXMud2luZG93RGltcy5vZmZzZXQubGVmdCk7XG4gICAgcmlnaHQgID0gKGVsZURpbXMub2Zmc2V0LmxlZnQgKyBlbGVEaW1zLndpZHRoIDw9IGVsZURpbXMud2luZG93RGltcy53aWR0aCk7XG4gIH1cblxuICB2YXIgYWxsRGlycyA9IFtib3R0b20sIHRvcCwgbGVmdCwgcmlnaHRdO1xuXG4gIGlmIChsck9ubHkpIHtcbiAgICByZXR1cm4gbGVmdCA9PT0gcmlnaHQgPT09IHRydWU7XG4gIH1cblxuICBpZiAodGJPbmx5KSB7XG4gICAgcmV0dXJuIHRvcCA9PT0gYm90dG9tID09PSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGFsbERpcnMuaW5kZXhPZihmYWxzZSkgPT09IC0xO1xufTtcblxuLyoqXG4gKiBVc2VzIG5hdGl2ZSBtZXRob2RzIHRvIHJldHVybiBhbiBvYmplY3Qgb2YgZGltZW5zaW9uIHZhbHVlcy5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtqUXVlcnkgfHwgSFRNTH0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3Qgb3IgRE9NIGVsZW1lbnQgZm9yIHdoaWNoIHRvIGdldCB0aGUgZGltZW5zaW9ucy4gQ2FuIGJlIGFueSBlbGVtZW50IG90aGVyIHRoYXQgZG9jdW1lbnQgb3Igd2luZG93LlxuICogQHJldHVybnMge09iamVjdH0gLSBuZXN0ZWQgb2JqZWN0IG9mIGludGVnZXIgcGl4ZWwgdmFsdWVzXG4gKiBUT0RPIC0gaWYgZWxlbWVudCBpcyB3aW5kb3csIHJldHVybiBvbmx5IHRob3NlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gR2V0RGltZW5zaW9ucyhlbGVtLCB0ZXN0KXtcbiAgZWxlbSA9IGVsZW0ubGVuZ3RoID8gZWxlbVswXSA6IGVsZW07XG5cbiAgaWYgKGVsZW0gPT09IHdpbmRvdyB8fCBlbGVtID09PSBkb2N1bWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkknbSBzb3JyeSwgRGF2ZS4gSSdtIGFmcmFpZCBJIGNhbid0IGRvIHRoYXQuXCIpO1xuICB9XG5cbiAgdmFyIHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgcGFyUmVjdCA9IGVsZW0ucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHdpblJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgd2luWSA9IHdpbmRvdy5wYWdlWU9mZnNldCxcbiAgICAgIHdpblggPSB3aW5kb3cucGFnZVhPZmZzZXQ7XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgIG9mZnNldDoge1xuICAgICAgdG9wOiByZWN0LnRvcCArIHdpblksXG4gICAgICBsZWZ0OiByZWN0LmxlZnQgKyB3aW5YXG4gICAgfSxcbiAgICBwYXJlbnREaW1zOiB7XG4gICAgICB3aWR0aDogcGFyUmVjdC53aWR0aCxcbiAgICAgIGhlaWdodDogcGFyUmVjdC5oZWlnaHQsXG4gICAgICBvZmZzZXQ6IHtcbiAgICAgICAgdG9wOiBwYXJSZWN0LnRvcCArIHdpblksXG4gICAgICAgIGxlZnQ6IHBhclJlY3QubGVmdCArIHdpblhcbiAgICAgIH1cbiAgICB9LFxuICAgIHdpbmRvd0RpbXM6IHtcbiAgICAgIHdpZHRoOiB3aW5SZWN0LndpZHRoLFxuICAgICAgaGVpZ2h0OiB3aW5SZWN0LmhlaWdodCxcbiAgICAgIG9mZnNldDoge1xuICAgICAgICB0b3A6IHdpblksXG4gICAgICAgIGxlZnQ6IHdpblhcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCBvZiB0b3AgYW5kIGxlZnQgaW50ZWdlciBwaXhlbCB2YWx1ZXMgZm9yIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGVsZW1lbnRzLFxuICogc3VjaCBhczogVG9vbHRpcCwgUmV2ZWFsLCBhbmQgRHJvcGRvd25cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgZWxlbWVudCBiZWluZyBwb3NpdGlvbmVkLlxuICogQHBhcmFtIHtqUXVlcnl9IGFuY2hvciAtIGpRdWVyeSBvYmplY3QgZm9yIHRoZSBlbGVtZW50J3MgYW5jaG9yIHBvaW50LlxuICogQHBhcmFtIHtTdHJpbmd9IHBvc2l0aW9uIC0gYSBzdHJpbmcgcmVsYXRpbmcgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQsIHJlbGF0aXZlIHRvIGl0J3MgYW5jaG9yXG4gKiBAcGFyYW0ge051bWJlcn0gdk9mZnNldCAtIGludGVnZXIgcGl4ZWwgdmFsdWUgb2YgZGVzaXJlZCB2ZXJ0aWNhbCBzZXBhcmF0aW9uIGJldHdlZW4gYW5jaG9yIGFuZCBlbGVtZW50LlxuICogQHBhcmFtIHtOdW1iZXJ9IGhPZmZzZXQgLSBpbnRlZ2VyIHBpeGVsIHZhbHVlIG9mIGRlc2lyZWQgaG9yaXpvbnRhbCBzZXBhcmF0aW9uIGJldHdlZW4gYW5jaG9yIGFuZCBlbGVtZW50LlxuICogQHBhcmFtIHtCb29sZWFufSBpc092ZXJmbG93IC0gaWYgYSBjb2xsaXNpb24gZXZlbnQgaXMgZGV0ZWN0ZWQsIHNldHMgdG8gdHJ1ZSB0byBkZWZhdWx0IHRoZSBlbGVtZW50IHRvIGZ1bGwgd2lkdGggLSBhbnkgZGVzaXJlZCBvZmZzZXQuXG4gKiBUT0RPIGFsdGVyL3Jld3JpdGUgdG8gd29yayB3aXRoIGBlbWAgdmFsdWVzIGFzIHdlbGwvaW5zdGVhZCBvZiBwaXhlbHNcbiAqL1xuZnVuY3Rpb24gR2V0T2Zmc2V0cyhlbGVtZW50LCBhbmNob3IsIHBvc2l0aW9uLCB2T2Zmc2V0LCBoT2Zmc2V0LCBpc092ZXJmbG93KSB7XG4gIHZhciAkZWxlRGltcyA9IEdldERpbWVuc2lvbnMoZWxlbWVudCksXG4gICAgICAkYW5jaG9yRGltcyA9IGFuY2hvciA/IEdldERpbWVuc2lvbnMoYW5jaG9yKSA6IG51bGw7XG5cbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAoRm91bmRhdGlvbi5ydGwoKSA/ICRhbmNob3JEaW1zLm9mZnNldC5sZWZ0IC0gJGVsZURpbXMud2lkdGggKyAkYW5jaG9yRGltcy53aWR0aCA6ICRhbmNob3JEaW1zLm9mZnNldC5sZWZ0KSxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wIC0gKCRlbGVEaW1zLmhlaWdodCArIHZPZmZzZXQpXG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6ICRhbmNob3JEaW1zLm9mZnNldC5sZWZ0IC0gKCRlbGVEaW1zLndpZHRoICsgaE9mZnNldCksXG4gICAgICAgIHRvcDogJGFuY2hvckRpbXMub2Zmc2V0LnRvcFxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgKyAkYW5jaG9yRGltcy53aWR0aCArIGhPZmZzZXQsXG4gICAgICAgIHRvcDogJGFuY2hvckRpbXMub2Zmc2V0LnRvcFxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2VudGVyIHRvcCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAoJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgKyAoJGFuY2hvckRpbXMud2lkdGggLyAyKSkgLSAoJGVsZURpbXMud2lkdGggLyAyKSxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wIC0gKCRlbGVEaW1zLmhlaWdodCArIHZPZmZzZXQpXG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjZW50ZXIgYm90dG9tJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGlzT3ZlcmZsb3cgPyBoT2Zmc2V0IDogKCgkYW5jaG9yRGltcy5vZmZzZXQubGVmdCArICgkYW5jaG9yRGltcy53aWR0aCAvIDIpKSAtICgkZWxlRGltcy53aWR0aCAvIDIpKSxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wICsgJGFuY2hvckRpbXMuaGVpZ2h0ICsgdk9mZnNldFxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2VudGVyIGxlZnQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgLSAoJGVsZURpbXMud2lkdGggKyBoT2Zmc2V0KSxcbiAgICAgICAgdG9wOiAoJGFuY2hvckRpbXMub2Zmc2V0LnRvcCArICgkYW5jaG9yRGltcy5oZWlnaHQgLyAyKSkgLSAoJGVsZURpbXMuaGVpZ2h0IC8gMilcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NlbnRlciByaWdodCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAkYW5jaG9yRGltcy5vZmZzZXQubGVmdCArICRhbmNob3JEaW1zLndpZHRoICsgaE9mZnNldCArIDEsXG4gICAgICAgIHRvcDogKCRhbmNob3JEaW1zLm9mZnNldC50b3AgKyAoJGFuY2hvckRpbXMuaGVpZ2h0IC8gMikpIC0gKCRlbGVEaW1zLmhlaWdodCAvIDIpXG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogKCRlbGVEaW1zLndpbmRvd0RpbXMub2Zmc2V0LmxlZnQgKyAoJGVsZURpbXMud2luZG93RGltcy53aWR0aCAvIDIpKSAtICgkZWxlRGltcy53aWR0aCAvIDIpLFxuICAgICAgICB0b3A6ICgkZWxlRGltcy53aW5kb3dEaW1zLm9mZnNldC50b3AgKyAoJGVsZURpbXMud2luZG93RGltcy5oZWlnaHQgLyAyKSkgLSAoJGVsZURpbXMuaGVpZ2h0IC8gMilcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JldmVhbCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAoJGVsZURpbXMud2luZG93RGltcy53aWR0aCAtICRlbGVEaW1zLndpZHRoKSAvIDIsXG4gICAgICAgIHRvcDogJGVsZURpbXMud2luZG93RGltcy5vZmZzZXQudG9wICsgdk9mZnNldFxuICAgICAgfVxuICAgIGNhc2UgJ3JldmVhbCBmdWxsJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6ICRlbGVEaW1zLndpbmRvd0RpbXMub2Zmc2V0LmxlZnQsXG4gICAgICAgIHRvcDogJGVsZURpbXMud2luZG93RGltcy5vZmZzZXQudG9wXG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0IGJvdHRvbSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAkYW5jaG9yRGltcy5vZmZzZXQubGVmdCxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wICsgJGFuY2hvckRpbXMuaGVpZ2h0ICsgdk9mZnNldFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0IGJvdHRvbSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAkYW5jaG9yRGltcy5vZmZzZXQubGVmdCArICRhbmNob3JEaW1zLndpZHRoICsgaE9mZnNldCAtICRlbGVEaW1zLndpZHRoLFxuICAgICAgICB0b3A6ICRhbmNob3JEaW1zLm9mZnNldC50b3AgKyAkYW5jaG9yRGltcy5oZWlnaHQgKyB2T2Zmc2V0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IChGb3VuZGF0aW9uLnJ0bCgpID8gJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgLSAkZWxlRGltcy53aWR0aCArICRhbmNob3JEaW1zLndpZHRoIDogJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgKyBoT2Zmc2V0KSxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wICsgJGFuY2hvckRpbXMuaGVpZ2h0ICsgdk9mZnNldFxuICAgICAgfVxuICB9XG59XG5cbn0oalF1ZXJ5KTtcbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogVGhpcyB1dGlsIHdhcyBjcmVhdGVkIGJ5IE1hcml1cyBPbGJlcnR6ICpcbiAqIFBsZWFzZSB0aGFuayBNYXJpdXMgb24gR2l0SHViIC9vd2xiZXJ0eiAqXG4gKiBvciB0aGUgd2ViIGh0dHA6Ly93d3cubWFyaXVzb2xiZXJ0ei5kZS8gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuY29uc3Qga2V5Q29kZXMgPSB7XG4gIDk6ICdUQUInLFxuICAxMzogJ0VOVEVSJyxcbiAgMjc6ICdFU0NBUEUnLFxuICAzMjogJ1NQQUNFJyxcbiAgMzc6ICdBUlJPV19MRUZUJyxcbiAgMzg6ICdBUlJPV19VUCcsXG4gIDM5OiAnQVJST1dfUklHSFQnLFxuICA0MDogJ0FSUk9XX0RPV04nXG59XG5cbnZhciBjb21tYW5kcyA9IHt9XG5cbnZhciBLZXlib2FyZCA9IHtcbiAga2V5czogZ2V0S2V5Q29kZXMoa2V5Q29kZXMpLFxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIChrZXlib2FyZCkgZXZlbnQgYW5kIHJldHVybnMgYSBTdHJpbmcgdGhhdCByZXByZXNlbnRzIGl0cyBrZXlcbiAgICogQ2FuIGJlIHVzZWQgbGlrZSBGb3VuZGF0aW9uLnBhcnNlS2V5KGV2ZW50KSA9PT0gRm91bmRhdGlvbi5rZXlzLlNQQUNFXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gdGhlIGV2ZW50IGdlbmVyYXRlZCBieSB0aGUgZXZlbnQgaGFuZGxlclxuICAgKiBAcmV0dXJuIFN0cmluZyBrZXkgLSBTdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBrZXkgcHJlc3NlZFxuICAgKi9cbiAgcGFyc2VLZXkoZXZlbnQpIHtcbiAgICB2YXIga2V5ID0ga2V5Q29kZXNbZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZV0gfHwgU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC53aGljaCkudG9VcHBlckNhc2UoKTtcblxuICAgIC8vIFJlbW92ZSB1bi1wcmludGFibGUgY2hhcmFjdGVycywgZS5nLiBmb3IgYGZyb21DaGFyQ29kZWAgY2FsbHMgZm9yIENUUkwgb25seSBldmVudHNcbiAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxXKy8sICcnKTtcblxuICAgIGlmIChldmVudC5zaGlmdEtleSkga2V5ID0gYFNISUZUXyR7a2V5fWA7XG4gICAgaWYgKGV2ZW50LmN0cmxLZXkpIGtleSA9IGBDVFJMXyR7a2V5fWA7XG4gICAgaWYgKGV2ZW50LmFsdEtleSkga2V5ID0gYEFMVF8ke2tleX1gO1xuXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHVuZGVyc2NvcmUsIGluIGNhc2Ugb25seSBtb2RpZmllcnMgd2VyZSB1c2VkIChlLmcuIG9ubHkgYENUUkxfQUxUYClcbiAgICBrZXkgPSBrZXkucmVwbGFjZSgvXyQvLCAnJyk7XG5cbiAgICByZXR1cm4ga2V5O1xuICB9LFxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBnaXZlbiAoa2V5Ym9hcmQpIGV2ZW50XG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gdGhlIGV2ZW50IGdlbmVyYXRlZCBieSB0aGUgZXZlbnQgaGFuZGxlclxuICAgKiBAcGFyYW0ge1N0cmluZ30gY29tcG9uZW50IC0gRm91bmRhdGlvbiBjb21wb25lbnQncyBuYW1lLCBlLmcuIFNsaWRlciBvciBSZXZlYWxcbiAgICogQHBhcmFtIHtPYmplY3RzfSBmdW5jdGlvbnMgLSBjb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSB0byBiZSBleGVjdXRlZFxuICAgKi9cbiAgaGFuZGxlS2V5KGV2ZW50LCBjb21wb25lbnQsIGZ1bmN0aW9ucykge1xuICAgIHZhciBjb21tYW5kTGlzdCA9IGNvbW1hbmRzW2NvbXBvbmVudF0sXG4gICAgICBrZXlDb2RlID0gdGhpcy5wYXJzZUtleShldmVudCksXG4gICAgICBjbWRzLFxuICAgICAgY29tbWFuZCxcbiAgICAgIGZuO1xuXG4gICAgaWYgKCFjb21tYW5kTGlzdCkgcmV0dXJuIGNvbnNvbGUud2FybignQ29tcG9uZW50IG5vdCBkZWZpbmVkIScpO1xuXG4gICAgaWYgKHR5cGVvZiBjb21tYW5kTGlzdC5sdHIgPT09ICd1bmRlZmluZWQnKSB7IC8vIHRoaXMgY29tcG9uZW50IGRvZXMgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBsdHIgYW5kIHJ0bFxuICAgICAgICBjbWRzID0gY29tbWFuZExpc3Q7IC8vIHVzZSBwbGFpbiBsaXN0XG4gICAgfSBlbHNlIHsgLy8gbWVyZ2UgbHRyIGFuZCBydGw6IGlmIGRvY3VtZW50IGlzIHJ0bCwgcnRsIG92ZXJ3cml0ZXMgbHRyIGFuZCB2aWNlIHZlcnNhXG4gICAgICAgIGlmIChGb3VuZGF0aW9uLnJ0bCgpKSBjbWRzID0gJC5leHRlbmQoe30sIGNvbW1hbmRMaXN0Lmx0ciwgY29tbWFuZExpc3QucnRsKTtcblxuICAgICAgICBlbHNlIGNtZHMgPSAkLmV4dGVuZCh7fSwgY29tbWFuZExpc3QucnRsLCBjb21tYW5kTGlzdC5sdHIpO1xuICAgIH1cbiAgICBjb21tYW5kID0gY21kc1trZXlDb2RlXTtcblxuICAgIGZuID0gZnVuY3Rpb25zW2NvbW1hbmRdO1xuICAgIGlmIChmbiAmJiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBmdW5jdGlvbiAgaWYgZXhpc3RzXG4gICAgICB2YXIgcmV0dXJuVmFsdWUgPSBmbi5hcHBseSgpO1xuICAgICAgaWYgKGZ1bmN0aW9ucy5oYW5kbGVkIHx8IHR5cGVvZiBmdW5jdGlvbnMuaGFuZGxlZCA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGZ1bmN0aW9uIHdoZW4gZXZlbnQgd2FzIGhhbmRsZWRcbiAgICAgICAgICBmdW5jdGlvbnMuaGFuZGxlZChyZXR1cm5WYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmdW5jdGlvbnMudW5oYW5kbGVkIHx8IHR5cGVvZiBmdW5jdGlvbnMudW5oYW5kbGVkID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgZnVuY3Rpb24gd2hlbiBldmVudCB3YXMgbm90IGhhbmRsZWRcbiAgICAgICAgICBmdW5jdGlvbnMudW5oYW5kbGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbGwgZm9jdXNhYmxlIGVsZW1lbnRzIHdpdGhpbiB0aGUgZ2l2ZW4gYCRlbGVtZW50YFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIHNlYXJjaCB3aXRoaW5cbiAgICogQHJldHVybiB7alF1ZXJ5fSAkZm9jdXNhYmxlIC0gYWxsIGZvY3VzYWJsZSBlbGVtZW50cyB3aXRoaW4gYCRlbGVtZW50YFxuICAgKi9cbiAgZmluZEZvY3VzYWJsZSgkZWxlbWVudCkge1xuICAgIGlmKCEkZWxlbWVudCkge3JldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiAkZWxlbWVudC5maW5kKCdhW2hyZWZdLCBhcmVhW2hyZWZdLCBpbnB1dDpub3QoW2Rpc2FibGVkXSksIHNlbGVjdDpub3QoW2Rpc2FibGVkXSksIHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSwgYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgaWZyYW1lLCBvYmplY3QsIGVtYmVkLCAqW3RhYmluZGV4XSwgKltjb250ZW50ZWRpdGFibGVdJykuZmlsdGVyKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCEkKHRoaXMpLmlzKCc6dmlzaWJsZScpIHx8ICQodGhpcykuYXR0cigndGFiaW5kZXgnKSA8IDApIHsgcmV0dXJuIGZhbHNlOyB9IC8vb25seSBoYXZlIHZpc2libGUgZWxlbWVudHMgYW5kIHRob3NlIHRoYXQgaGF2ZSBhIHRhYmluZGV4IGdyZWF0ZXIgb3IgZXF1YWwgMFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbXBvbmVudCBuYW1lIG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbXBvbmVudCAtIEZvdW5kYXRpb24gY29tcG9uZW50LCBlLmcuIFNsaWRlciBvciBSZXZlYWxcbiAgICogQHJldHVybiBTdHJpbmcgY29tcG9uZW50TmFtZVxuICAgKi9cblxuICByZWdpc3Rlcihjb21wb25lbnROYW1lLCBjbWRzKSB7XG4gICAgY29tbWFuZHNbY29tcG9uZW50TmFtZV0gPSBjbWRzO1xuICB9LCAgXG5cbiAgLyoqXG4gICAqIFRyYXBzIHRoZSBmb2N1cyBpbiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICogQHBhcmFtICB7alF1ZXJ5fSAkZWxlbWVudCAgalF1ZXJ5IG9iamVjdCB0byB0cmFwIHRoZSBmb3VjcyBpbnRvLlxuICAgKi9cbiAgdHJhcEZvY3VzKCRlbGVtZW50KSB7XG4gICAgdmFyICRmb2N1c2FibGUgPSBGb3VuZGF0aW9uLktleWJvYXJkLmZpbmRGb2N1c2FibGUoJGVsZW1lbnQpLFxuICAgICAgICAkZmlyc3RGb2N1c2FibGUgPSAkZm9jdXNhYmxlLmVxKDApLFxuICAgICAgICAkbGFzdEZvY3VzYWJsZSA9ICRmb2N1c2FibGUuZXEoLTEpO1xuXG4gICAgJGVsZW1lbnQub24oJ2tleWRvd24uemYudHJhcGZvY3VzJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC50YXJnZXQgPT09ICRsYXN0Rm9jdXNhYmxlWzBdICYmIEZvdW5kYXRpb24uS2V5Ym9hcmQucGFyc2VLZXkoZXZlbnQpID09PSAnVEFCJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkZmlyc3RGb2N1c2FibGUuZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PT0gJGZpcnN0Rm9jdXNhYmxlWzBdICYmIEZvdW5kYXRpb24uS2V5Ym9hcmQucGFyc2VLZXkoZXZlbnQpID09PSAnU0hJRlRfVEFCJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkbGFzdEZvY3VzYWJsZS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICAvKipcbiAgICogUmVsZWFzZXMgdGhlIHRyYXBwZWQgZm9jdXMgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICogQHBhcmFtICB7alF1ZXJ5fSAkZWxlbWVudCAgalF1ZXJ5IG9iamVjdCB0byByZWxlYXNlIHRoZSBmb2N1cyBmb3IuXG4gICAqL1xuICByZWxlYXNlRm9jdXMoJGVsZW1lbnQpIHtcbiAgICAkZWxlbWVudC5vZmYoJ2tleWRvd24uemYudHJhcGZvY3VzJyk7XG4gIH1cbn1cblxuLypcbiAqIENvbnN0YW50cyBmb3IgZWFzaWVyIGNvbXBhcmluZy5cbiAqIENhbiBiZSB1c2VkIGxpa2UgRm91bmRhdGlvbi5wYXJzZUtleShldmVudCkgPT09IEZvdW5kYXRpb24ua2V5cy5TUEFDRVxuICovXG5mdW5jdGlvbiBnZXRLZXlDb2RlcyhrY3MpIHtcbiAgdmFyIGsgPSB7fTtcbiAgZm9yICh2YXIga2MgaW4ga2NzKSBrW2tjc1trY11dID0ga2NzW2tjXTtcbiAgcmV0dXJuIGs7XG59XG5cbkZvdW5kYXRpb24uS2V5Ym9hcmQgPSBLZXlib2FyZDtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vLyBEZWZhdWx0IHNldCBvZiBtZWRpYSBxdWVyaWVzXG5jb25zdCBkZWZhdWx0UXVlcmllcyA9IHtcbiAgJ2RlZmF1bHQnIDogJ29ubHkgc2NyZWVuJyxcbiAgbGFuZHNjYXBlIDogJ29ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSknLFxuICBwb3J0cmFpdCA6ICdvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknLFxuICByZXRpbmEgOiAnb25seSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCcgK1xuICAgICdvbmx5IHNjcmVlbiBhbmQgKG1pbi0tbW96LWRldmljZS1waXhlbC1yYXRpbzogMiksJyArXG4gICAgJ29ubHkgc2NyZWVuIGFuZCAoLW8tbWluLWRldmljZS1waXhlbC1yYXRpbzogMi8xKSwnICtcbiAgICAnb25seSBzY3JlZW4gYW5kIChtaW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwnICtcbiAgICAnb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSwnICtcbiAgICAnb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjogMmRwcHgpJ1xufTtcblxudmFyIE1lZGlhUXVlcnkgPSB7XG4gIHF1ZXJpZXM6IFtdLFxuXG4gIGN1cnJlbnQ6ICcnLFxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgbWVkaWEgcXVlcnkgaGVscGVyLCBieSBleHRyYWN0aW5nIHRoZSBicmVha3BvaW50IGxpc3QgZnJvbSB0aGUgQ1NTIGFuZCBhY3RpdmF0aW5nIHRoZSBicmVha3BvaW50IHdhdGNoZXIuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBleHRyYWN0ZWRTdHlsZXMgPSAkKCcuZm91bmRhdGlvbi1tcScpLmNzcygnZm9udC1mYW1pbHknKTtcbiAgICB2YXIgbmFtZWRRdWVyaWVzO1xuXG4gICAgbmFtZWRRdWVyaWVzID0gcGFyc2VTdHlsZVRvT2JqZWN0KGV4dHJhY3RlZFN0eWxlcyk7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gbmFtZWRRdWVyaWVzKSB7XG4gICAgICBpZihuYW1lZFF1ZXJpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBzZWxmLnF1ZXJpZXMucHVzaCh7XG4gICAgICAgICAgbmFtZToga2V5LFxuICAgICAgICAgIHZhbHVlOiBgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICR7bmFtZWRRdWVyaWVzW2tleV19KWBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50ID0gdGhpcy5fZ2V0Q3VycmVudFNpemUoKTtcblxuICAgIHRoaXMuX3dhdGNoZXIoKTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzY3JlZW4gaXMgYXQgbGVhc3QgYXMgd2lkZSBhcyBhIGJyZWFrcG9pbnQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2l6ZSAtIE5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGJyZWFrcG9pbnQgbWF0Y2hlcywgYGZhbHNlYCBpZiBpdCdzIHNtYWxsZXIuXG4gICAqL1xuICBhdExlYXN0KHNpemUpIHtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmdldChzaXplKTtcblxuICAgIGlmIChxdWVyeSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5KS5tYXRjaGVzO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzY3JlZW4gbWF0Y2hlcyB0byBhIGJyZWFrcG9pbnQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2l6ZSAtIE5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgdG8gY2hlY2ssIGVpdGhlciAnc21hbGwgb25seScgb3IgJ3NtYWxsJy4gT21pdHRpbmcgJ29ubHknIGZhbGxzIGJhY2sgdG8gdXNpbmcgYXRMZWFzdCgpIG1ldGhvZC5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgYnJlYWtwb2ludCBtYXRjaGVzLCBgZmFsc2VgIGlmIGl0IGRvZXMgbm90LlxuICAgKi9cbiAgaXMoc2l6ZSkge1xuICAgIHNpemUgPSBzaXplLnRyaW0oKS5zcGxpdCgnICcpO1xuICAgIGlmKHNpemUubGVuZ3RoID4gMSAmJiBzaXplWzFdID09PSAnb25seScpIHtcbiAgICAgIGlmKHNpemVbMF0gPT09IHRoaXMuX2dldEN1cnJlbnRTaXplKCkpIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hdExlYXN0KHNpemVbMF0pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1lZGlhIHF1ZXJ5IG9mIGEgYnJlYWtwb2ludC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzaXplIC0gTmFtZSBvZiB0aGUgYnJlYWtwb2ludCB0byBnZXQuXG4gICAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH0gLSBUaGUgbWVkaWEgcXVlcnkgb2YgdGhlIGJyZWFrcG9pbnQsIG9yIGBudWxsYCBpZiB0aGUgYnJlYWtwb2ludCBkb2Vzbid0IGV4aXN0LlxuICAgKi9cbiAgZ2V0KHNpemUpIHtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMucXVlcmllcykge1xuICAgICAgaWYodGhpcy5xdWVyaWVzLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcmllc1tpXTtcbiAgICAgICAgaWYgKHNpemUgPT09IHF1ZXJ5Lm5hbWUpIHJldHVybiBxdWVyeS52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBicmVha3BvaW50IG5hbWUgYnkgdGVzdGluZyBldmVyeSBicmVha3BvaW50IGFuZCByZXR1cm5pbmcgdGhlIGxhc3Qgb25lIHRvIG1hdGNoICh0aGUgYmlnZ2VzdCBvbmUpLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge1N0cmluZ30gTmFtZSBvZiB0aGUgY3VycmVudCBicmVha3BvaW50LlxuICAgKi9cbiAgX2dldEN1cnJlbnRTaXplKCkge1xuICAgIHZhciBtYXRjaGVkO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcmllc1tpXTtcblxuICAgICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5LnZhbHVlKS5tYXRjaGVzKSB7XG4gICAgICAgIG1hdGNoZWQgPSBxdWVyeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1hdGNoZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZC5uYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZDtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlcyB0aGUgYnJlYWtwb2ludCB3YXRjaGVyLCB3aGljaCBmaXJlcyBhbiBldmVudCBvbiB0aGUgd2luZG93IHdoZW5ldmVyIHRoZSBicmVha3BvaW50IGNoYW5nZXMuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3dhdGNoZXIoKSB7XG4gICAgJCh3aW5kb3cpLm9uKCdyZXNpemUuemYubWVkaWFxdWVyeScsICgpID0+IHtcbiAgICAgIHZhciBuZXdTaXplID0gdGhpcy5fZ2V0Q3VycmVudFNpemUoKSwgY3VycmVudFNpemUgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgIGlmIChuZXdTaXplICE9PSBjdXJyZW50U2l6ZSkge1xuICAgICAgICAvLyBDaGFuZ2UgdGhlIGN1cnJlbnQgbWVkaWEgcXVlcnlcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbmV3U2l6ZTtcblxuICAgICAgICAvLyBCcm9hZGNhc3QgdGhlIG1lZGlhIHF1ZXJ5IGNoYW5nZSBvbiB0aGUgd2luZG93XG4gICAgICAgICQod2luZG93KS50cmlnZ2VyKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCBbbmV3U2l6ZSwgY3VycmVudFNpemVdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufTtcblxuRm91bmRhdGlvbi5NZWRpYVF1ZXJ5ID0gTWVkaWFRdWVyeTtcblxuLy8gbWF0Y2hNZWRpYSgpIHBvbHlmaWxsIC0gVGVzdCBhIENTUyBtZWRpYSB0eXBlL3F1ZXJ5IGluIEpTLlxuLy8gQXV0aG9ycyAmIGNvcHlyaWdodCAoYykgMjAxMjogU2NvdHQgSmVobCwgUGF1bCBJcmlzaCwgTmljaG9sYXMgWmFrYXMsIERhdmlkIEtuaWdodC4gRHVhbCBNSVQvQlNEIGxpY2Vuc2VcbndpbmRvdy5tYXRjaE1lZGlhIHx8ICh3aW5kb3cubWF0Y2hNZWRpYSA9IGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gRm9yIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBtYXRjaE1lZGl1bSBhcGkgc3VjaCBhcyBJRSA5IGFuZCB3ZWJraXRcbiAgdmFyIHN0eWxlTWVkaWEgPSAod2luZG93LnN0eWxlTWVkaWEgfHwgd2luZG93Lm1lZGlhKTtcblxuICAvLyBGb3IgdGhvc2UgdGhhdCBkb24ndCBzdXBwb3J0IG1hdGNoTWVkaXVtXG4gIGlmICghc3R5bGVNZWRpYSkge1xuICAgIHZhciBzdHlsZSAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSxcbiAgICBzY3JpcHQgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXSxcbiAgICBpbmZvICAgICAgICA9IG51bGw7XG5cbiAgICBzdHlsZS50eXBlICA9ICd0ZXh0L2Nzcyc7XG4gICAgc3R5bGUuaWQgICAgPSAnbWF0Y2htZWRpYWpzLXRlc3QnO1xuXG4gICAgc2NyaXB0ICYmIHNjcmlwdC5wYXJlbnROb2RlICYmIHNjcmlwdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzdHlsZSwgc2NyaXB0KTtcblxuICAgIC8vICdzdHlsZS5jdXJyZW50U3R5bGUnIGlzIHVzZWQgYnkgSUUgPD0gOCBhbmQgJ3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlJyBmb3IgYWxsIG90aGVyIGJyb3dzZXJzXG4gICAgaW5mbyA9ICgnZ2V0Q29tcHV0ZWRTdHlsZScgaW4gd2luZG93KSAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdHlsZSwgbnVsbCkgfHwgc3R5bGUuY3VycmVudFN0eWxlO1xuXG4gICAgc3R5bGVNZWRpYSA9IHtcbiAgICAgIG1hdGNoTWVkaXVtKG1lZGlhKSB7XG4gICAgICAgIHZhciB0ZXh0ID0gYEBtZWRpYSAke21lZGlhfXsgI21hdGNobWVkaWFqcy10ZXN0IHsgd2lkdGg6IDFweDsgfSB9YDtcblxuICAgICAgICAvLyAnc3R5bGUuc3R5bGVTaGVldCcgaXMgdXNlZCBieSBJRSA8PSA4IGFuZCAnc3R5bGUudGV4dENvbnRlbnQnIGZvciBhbGwgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICAgICAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSB0ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gdGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRlc3QgaWYgbWVkaWEgcXVlcnkgaXMgdHJ1ZSBvciBmYWxzZVxuICAgICAgICByZXR1cm4gaW5mby53aWR0aCA9PT0gJzFweCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG1lZGlhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoZXM6IHN0eWxlTWVkaWEubWF0Y2hNZWRpdW0obWVkaWEgfHwgJ2FsbCcpLFxuICAgICAgbWVkaWE6IG1lZGlhIHx8ICdhbGwnXG4gICAgfTtcbiAgfVxufSgpKTtcblxuLy8gVGhhbmsgeW91OiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3F1ZXJ5LXN0cmluZ1xuZnVuY3Rpb24gcGFyc2VTdHlsZVRvT2JqZWN0KHN0cikge1xuICB2YXIgc3R5bGVPYmplY3QgPSB7fTtcblxuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3R5bGVPYmplY3Q7XG4gIH1cblxuICBzdHIgPSBzdHIudHJpbSgpLnNsaWNlKDEsIC0xKTsgLy8gYnJvd3NlcnMgcmUtcXVvdGUgc3RyaW5nIHN0eWxlIHZhbHVlc1xuXG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIHN0eWxlT2JqZWN0O1xuICB9XG5cbiAgc3R5bGVPYmplY3QgPSBzdHIuc3BsaXQoJyYnKS5yZWR1Y2UoZnVuY3Rpb24ocmV0LCBwYXJhbSkge1xuICAgIHZhciBwYXJ0cyA9IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCAnICcpLnNwbGl0KCc9Jyk7XG4gICAgdmFyIGtleSA9IHBhcnRzWzBdO1xuICAgIHZhciB2YWwgPSBwYXJ0c1sxXTtcbiAgICBrZXkgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5KTtcblxuICAgIC8vIG1pc3NpbmcgYD1gIHNob3VsZCBiZSBgbnVsbGA6XG4gICAgLy8gaHR0cDovL3czLm9yZy9UUi8yMDEyL1dELXVybC0yMDEyMDUyNC8jY29sbGVjdC11cmwtcGFyYW1ldGVyc1xuICAgIHZhbCA9IHZhbCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlY29kZVVSSUNvbXBvbmVudCh2YWwpO1xuXG4gICAgaWYgKCFyZXQuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgcmV0W2tleV0gPSB2YWw7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJldFtrZXldKSkge1xuICAgICAgcmV0W2tleV0ucHVzaCh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IFtyZXRba2V5XSwgdmFsXTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSwge30pO1xuXG4gIHJldHVybiBzdHlsZU9iamVjdDtcbn1cblxuRm91bmRhdGlvbi5NZWRpYVF1ZXJ5ID0gTWVkaWFRdWVyeTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIE1vdGlvbiBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24ubW90aW9uXG4gKi9cblxuY29uc3QgaW5pdENsYXNzZXMgICA9IFsnbXVpLWVudGVyJywgJ211aS1sZWF2ZSddO1xuY29uc3QgYWN0aXZlQ2xhc3NlcyA9IFsnbXVpLWVudGVyLWFjdGl2ZScsICdtdWktbGVhdmUtYWN0aXZlJ107XG5cbmNvbnN0IE1vdGlvbiA9IHtcbiAgYW5pbWF0ZUluOiBmdW5jdGlvbihlbGVtZW50LCBhbmltYXRpb24sIGNiKSB7XG4gICAgYW5pbWF0ZSh0cnVlLCBlbGVtZW50LCBhbmltYXRpb24sIGNiKTtcbiAgfSxcblxuICBhbmltYXRlT3V0OiBmdW5jdGlvbihlbGVtZW50LCBhbmltYXRpb24sIGNiKSB7XG4gICAgYW5pbWF0ZShmYWxzZSwgZWxlbWVudCwgYW5pbWF0aW9uLCBjYik7XG4gIH1cbn1cblxuZnVuY3Rpb24gTW92ZShkdXJhdGlvbiwgZWxlbSwgZm4pe1xuICB2YXIgYW5pbSwgcHJvZywgc3RhcnQgPSBudWxsO1xuICAvLyBjb25zb2xlLmxvZygnY2FsbGVkJyk7XG5cbiAgaWYgKGR1cmF0aW9uID09PSAwKSB7XG4gICAgZm4uYXBwbHkoZWxlbSk7XG4gICAgZWxlbS50cmlnZ2VyKCdmaW5pc2hlZC56Zi5hbmltYXRlJywgW2VsZW1dKS50cmlnZ2VySGFuZGxlcignZmluaXNoZWQuemYuYW5pbWF0ZScsIFtlbGVtXSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gbW92ZSh0cyl7XG4gICAgaWYoIXN0YXJ0KSBzdGFydCA9IHRzO1xuICAgIC8vIGNvbnNvbGUubG9nKHN0YXJ0LCB0cyk7XG4gICAgcHJvZyA9IHRzIC0gc3RhcnQ7XG4gICAgZm4uYXBwbHkoZWxlbSk7XG5cbiAgICBpZihwcm9nIDwgZHVyYXRpb24peyBhbmltID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShtb3ZlLCBlbGVtKTsgfVxuICAgIGVsc2V7XG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYW5pbSk7XG4gICAgICBlbGVtLnRyaWdnZXIoJ2ZpbmlzaGVkLnpmLmFuaW1hdGUnLCBbZWxlbV0pLnRyaWdnZXJIYW5kbGVyKCdmaW5pc2hlZC56Zi5hbmltYXRlJywgW2VsZW1dKTtcbiAgICB9XG4gIH1cbiAgYW5pbSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobW92ZSk7XG59XG5cbi8qKlxuICogQW5pbWF0ZXMgYW4gZWxlbWVudCBpbiBvciBvdXQgdXNpbmcgYSBDU1MgdHJhbnNpdGlvbiBjbGFzcy5cbiAqIEBmdW5jdGlvblxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNJbiAtIERlZmluZXMgaWYgdGhlIGFuaW1hdGlvbiBpcyBpbiBvciBvdXQuXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudCAtIGpRdWVyeSBvciBIVE1MIG9iamVjdCB0byBhbmltYXRlLlxuICogQHBhcmFtIHtTdHJpbmd9IGFuaW1hdGlvbiAtIENTUyBjbGFzcyB0byB1c2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYiAtIENhbGxiYWNrIHRvIHJ1biB3aGVuIGFuaW1hdGlvbiBpcyBmaW5pc2hlZC5cbiAqL1xuZnVuY3Rpb24gYW5pbWF0ZShpc0luLCBlbGVtZW50LCBhbmltYXRpb24sIGNiKSB7XG4gIGVsZW1lbnQgPSAkKGVsZW1lbnQpLmVxKDApO1xuXG4gIGlmICghZWxlbWVudC5sZW5ndGgpIHJldHVybjtcblxuICB2YXIgaW5pdENsYXNzID0gaXNJbiA/IGluaXRDbGFzc2VzWzBdIDogaW5pdENsYXNzZXNbMV07XG4gIHZhciBhY3RpdmVDbGFzcyA9IGlzSW4gPyBhY3RpdmVDbGFzc2VzWzBdIDogYWN0aXZlQ2xhc3Nlc1sxXTtcblxuICAvLyBTZXQgdXAgdGhlIGFuaW1hdGlvblxuICByZXNldCgpO1xuXG4gIGVsZW1lbnRcbiAgICAuYWRkQ2xhc3MoYW5pbWF0aW9uKVxuICAgIC5jc3MoJ3RyYW5zaXRpb24nLCAnbm9uZScpO1xuXG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgZWxlbWVudC5hZGRDbGFzcyhpbml0Q2xhc3MpO1xuICAgIGlmIChpc0luKSBlbGVtZW50LnNob3coKTtcbiAgfSk7XG5cbiAgLy8gU3RhcnQgdGhlIGFuaW1hdGlvblxuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgIGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGg7XG4gICAgZWxlbWVudFxuICAgICAgLmNzcygndHJhbnNpdGlvbicsICcnKVxuICAgICAgLmFkZENsYXNzKGFjdGl2ZUNsYXNzKTtcbiAgfSk7XG5cbiAgLy8gQ2xlYW4gdXAgdGhlIGFuaW1hdGlvbiB3aGVuIGl0IGZpbmlzaGVzXG4gIGVsZW1lbnQub25lKEZvdW5kYXRpb24udHJhbnNpdGlvbmVuZChlbGVtZW50KSwgZmluaXNoKTtcblxuICAvLyBIaWRlcyB0aGUgZWxlbWVudCAoZm9yIG91dCBhbmltYXRpb25zKSwgcmVzZXRzIHRoZSBlbGVtZW50LCBhbmQgcnVucyBhIGNhbGxiYWNrXG4gIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICBpZiAoIWlzSW4pIGVsZW1lbnQuaGlkZSgpO1xuICAgIHJlc2V0KCk7XG4gICAgaWYgKGNiKSBjYi5hcHBseShlbGVtZW50KTtcbiAgfVxuXG4gIC8vIFJlc2V0cyB0cmFuc2l0aW9ucyBhbmQgcmVtb3ZlcyBtb3Rpb24tc3BlY2lmaWMgY2xhc3Nlc1xuICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBlbGVtZW50WzBdLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IDA7XG4gICAgZWxlbWVudC5yZW1vdmVDbGFzcyhgJHtpbml0Q2xhc3N9ICR7YWN0aXZlQ2xhc3N9ICR7YW5pbWF0aW9ufWApO1xuICB9XG59XG5cbkZvdW5kYXRpb24uTW92ZSA9IE1vdmU7XG5Gb3VuZGF0aW9uLk1vdGlvbiA9IE1vdGlvbjtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG5jb25zdCBOZXN0ID0ge1xuICBGZWF0aGVyKG1lbnUsIHR5cGUgPSAnemYnKSB7XG4gICAgbWVudS5hdHRyKCdyb2xlJywgJ21lbnViYXInKTtcblxuICAgIHZhciBpdGVtcyA9IG1lbnUuZmluZCgnbGknKS5hdHRyKHsncm9sZSc6ICdtZW51aXRlbSd9KSxcbiAgICAgICAgc3ViTWVudUNsYXNzID0gYGlzLSR7dHlwZX0tc3VibWVudWAsXG4gICAgICAgIHN1Ykl0ZW1DbGFzcyA9IGAke3N1Yk1lbnVDbGFzc30taXRlbWAsXG4gICAgICAgIGhhc1N1YkNsYXNzID0gYGlzLSR7dHlwZX0tc3VibWVudS1wYXJlbnRgO1xuXG4gICAgaXRlbXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIHZhciAkaXRlbSA9ICQodGhpcyksXG4gICAgICAgICAgJHN1YiA9ICRpdGVtLmNoaWxkcmVuKCd1bCcpO1xuXG4gICAgICBpZiAoJHN1Yi5sZW5ndGgpIHtcbiAgICAgICAgJGl0ZW1cbiAgICAgICAgICAuYWRkQ2xhc3MoaGFzU3ViQ2xhc3MpXG4gICAgICAgICAgLmF0dHIoe1xuICAgICAgICAgICAgJ2FyaWEtaGFzcG9wdXAnOiB0cnVlLFxuICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiAkaXRlbS5jaGlsZHJlbignYTpmaXJzdCcpLnRleHQoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIE5vdGU6ICBEcmlsbGRvd25zIGJlaGF2ZSBkaWZmZXJlbnRseSBpbiBob3cgdGhleSBoaWRlLCBhbmQgc28gbmVlZFxuICAgICAgICAgIC8vIGFkZGl0aW9uYWwgYXR0cmlidXRlcy4gIFdlIHNob3VsZCBsb29rIGlmIHRoaXMgcG9zc2libHkgb3Zlci1nZW5lcmFsaXplZFxuICAgICAgICAgIC8vIHV0aWxpdHkgKE5lc3QpIGlzIGFwcHJvcHJpYXRlIHdoZW4gd2UgcmV3b3JrIG1lbnVzIGluIDYuNFxuICAgICAgICAgIGlmKHR5cGUgPT09ICdkcmlsbGRvd24nKSB7XG4gICAgICAgICAgICAkaXRlbS5hdHRyKHsnYXJpYS1leHBhbmRlZCc6IGZhbHNlfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICRzdWJcbiAgICAgICAgICAuYWRkQ2xhc3MoYHN1Ym1lbnUgJHtzdWJNZW51Q2xhc3N9YClcbiAgICAgICAgICAuYXR0cih7XG4gICAgICAgICAgICAnZGF0YS1zdWJtZW51JzogJycsXG4gICAgICAgICAgICAncm9sZSc6ICdtZW51J1xuICAgICAgICAgIH0pO1xuICAgICAgICBpZih0eXBlID09PSAnZHJpbGxkb3duJykge1xuICAgICAgICAgICRzdWIuYXR0cih7J2FyaWEtaGlkZGVuJzogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgkaXRlbS5wYXJlbnQoJ1tkYXRhLXN1Ym1lbnVdJykubGVuZ3RoKSB7XG4gICAgICAgICRpdGVtLmFkZENsYXNzKGBpcy1zdWJtZW51LWl0ZW0gJHtzdWJJdGVtQ2xhc3N9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm47XG4gIH0sXG5cbiAgQnVybihtZW51LCB0eXBlKSB7XG4gICAgdmFyIC8vaXRlbXMgPSBtZW51LmZpbmQoJ2xpJyksXG4gICAgICAgIHN1Yk1lbnVDbGFzcyA9IGBpcy0ke3R5cGV9LXN1Ym1lbnVgLFxuICAgICAgICBzdWJJdGVtQ2xhc3MgPSBgJHtzdWJNZW51Q2xhc3N9LWl0ZW1gLFxuICAgICAgICBoYXNTdWJDbGFzcyA9IGBpcy0ke3R5cGV9LXN1Ym1lbnUtcGFyZW50YDtcblxuICAgIG1lbnVcbiAgICAgIC5maW5kKCc+bGksIC5tZW51LCAubWVudSA+IGxpJylcbiAgICAgIC5yZW1vdmVDbGFzcyhgJHtzdWJNZW51Q2xhc3N9ICR7c3ViSXRlbUNsYXNzfSAke2hhc1N1YkNsYXNzfSBpcy1zdWJtZW51LWl0ZW0gc3VibWVudSBpcy1hY3RpdmVgKVxuICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtc3VibWVudScpLmNzcygnZGlzcGxheScsICcnKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCAgICAgIG1lbnUuZmluZCgnLicgKyBzdWJNZW51Q2xhc3MgKyAnLCAuJyArIHN1Ykl0ZW1DbGFzcyArICcsIC5oYXMtc3VibWVudSwgLmlzLXN1Ym1lbnUtaXRlbSwgLnN1Ym1lbnUsIFtkYXRhLXN1Ym1lbnVdJylcbiAgICAvLyAgICAgICAgICAgLnJlbW92ZUNsYXNzKHN1Yk1lbnVDbGFzcyArICcgJyArIHN1Ykl0ZW1DbGFzcyArICcgaGFzLXN1Ym1lbnUgaXMtc3VibWVudS1pdGVtIHN1Ym1lbnUnKVxuICAgIC8vICAgICAgICAgICAucmVtb3ZlQXR0cignZGF0YS1zdWJtZW51JykpO1xuICAgIC8vIGl0ZW1zLmVhY2goZnVuY3Rpb24oKXtcbiAgICAvLyAgIHZhciAkaXRlbSA9ICQodGhpcyksXG4gICAgLy8gICAgICAgJHN1YiA9ICRpdGVtLmNoaWxkcmVuKCd1bCcpO1xuICAgIC8vICAgaWYoJGl0ZW0ucGFyZW50KCdbZGF0YS1zdWJtZW51XScpLmxlbmd0aCl7XG4gICAgLy8gICAgICRpdGVtLnJlbW92ZUNsYXNzKCdpcy1zdWJtZW51LWl0ZW0gJyArIHN1Ykl0ZW1DbGFzcyk7XG4gICAgLy8gICB9XG4gICAgLy8gICBpZigkc3ViLmxlbmd0aCl7XG4gICAgLy8gICAgICRpdGVtLnJlbW92ZUNsYXNzKCdoYXMtc3VibWVudScpO1xuICAgIC8vICAgICAkc3ViLnJlbW92ZUNsYXNzKCdzdWJtZW51ICcgKyBzdWJNZW51Q2xhc3MpLnJlbW92ZUF0dHIoJ2RhdGEtc3VibWVudScpO1xuICAgIC8vICAgfVxuICAgIC8vIH0pO1xuICB9XG59XG5cbkZvdW5kYXRpb24uTmVzdCA9IE5lc3Q7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuZnVuY3Rpb24gVGltZXIoZWxlbSwgb3B0aW9ucywgY2IpIHtcbiAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgIGR1cmF0aW9uID0gb3B0aW9ucy5kdXJhdGlvbiwvL29wdGlvbnMgaXMgYW4gb2JqZWN0IGZvciBlYXNpbHkgYWRkaW5nIGZlYXR1cmVzIGxhdGVyLlxuICAgICAgbmFtZVNwYWNlID0gT2JqZWN0LmtleXMoZWxlbS5kYXRhKCkpWzBdIHx8ICd0aW1lcicsXG4gICAgICByZW1haW4gPSAtMSxcbiAgICAgIHN0YXJ0LFxuICAgICAgdGltZXI7XG5cbiAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuXG4gIHRoaXMucmVzdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgIHJlbWFpbiA9IC0xO1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgdGhpcy5zdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAvLyBpZighZWxlbS5kYXRhKCdwYXVzZWQnKSl7IHJldHVybiBmYWxzZTsgfS8vbWF5YmUgaW1wbGVtZW50IHRoaXMgc2FuaXR5IGNoZWNrIGlmIHVzZWQgZm9yIG90aGVyIHRoaW5ncy5cbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIHJlbWFpbiA9IHJlbWFpbiA8PSAwID8gZHVyYXRpb24gOiByZW1haW47XG4gICAgZWxlbS5kYXRhKCdwYXVzZWQnLCBmYWxzZSk7XG4gICAgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgaWYob3B0aW9ucy5pbmZpbml0ZSl7XG4gICAgICAgIF90aGlzLnJlc3RhcnQoKTsvL3JlcnVuIHRoZSB0aW1lci5cbiAgICAgIH1cbiAgICAgIGlmIChjYiAmJiB0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHsgY2IoKTsgfVxuICAgIH0sIHJlbWFpbik7XG4gICAgZWxlbS50cmlnZ2VyKGB0aW1lcnN0YXJ0LnpmLiR7bmFtZVNwYWNlfWApO1xuICB9XG5cbiAgdGhpcy5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgIC8vaWYoZWxlbS5kYXRhKCdwYXVzZWQnKSl7IHJldHVybiBmYWxzZTsgfS8vbWF5YmUgaW1wbGVtZW50IHRoaXMgc2FuaXR5IGNoZWNrIGlmIHVzZWQgZm9yIG90aGVyIHRoaW5ncy5cbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIGVsZW0uZGF0YSgncGF1c2VkJywgdHJ1ZSk7XG4gICAgdmFyIGVuZCA9IERhdGUubm93KCk7XG4gICAgcmVtYWluID0gcmVtYWluIC0gKGVuZCAtIHN0YXJ0KTtcbiAgICBlbGVtLnRyaWdnZXIoYHRpbWVycGF1c2VkLnpmLiR7bmFtZVNwYWNlfWApO1xuICB9XG59XG5cbi8qKlxuICogUnVucyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gaW1hZ2VzIGFyZSBmdWxseSBsb2FkZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gaW1hZ2VzIC0gSW1hZ2UocykgdG8gY2hlY2sgaWYgbG9hZGVkLlxuICogQHBhcmFtIHtGdW5jfSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiBpbWFnZSBpcyBmdWxseSBsb2FkZWQuXG4gKi9cbmZ1bmN0aW9uIG9uSW1hZ2VzTG9hZGVkKGltYWdlcywgY2FsbGJhY2spe1xuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICB1bmxvYWRlZCA9IGltYWdlcy5sZW5ndGg7XG5cbiAgaWYgKHVubG9hZGVkID09PSAwKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxuXG4gIGltYWdlcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIC8vIENoZWNrIGlmIGltYWdlIGlzIGxvYWRlZFxuICAgIGlmICh0aGlzLmNvbXBsZXRlIHx8ICh0aGlzLnJlYWR5U3RhdGUgPT09IDQpIHx8ICh0aGlzLnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpKSB7XG4gICAgICBzaW5nbGVJbWFnZUxvYWRlZCgpO1xuICAgIH1cbiAgICAvLyBGb3JjZSBsb2FkIHRoZSBpbWFnZVxuICAgIGVsc2Uge1xuICAgICAgLy8gZml4IGZvciBJRS4gU2VlIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvanF1ZXJ5L2ZpeGluZy1sb2FkLWluLWllLWZvci1jYWNoZWQtaW1hZ2VzL1xuICAgICAgdmFyIHNyYyA9ICQodGhpcykuYXR0cignc3JjJyk7XG4gICAgICAkKHRoaXMpLmF0dHIoJ3NyYycsIHNyYyArICc/JyArIChuZXcgRGF0ZSgpLmdldFRpbWUoKSkpO1xuICAgICAgJCh0aGlzKS5vbmUoJ2xvYWQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgc2luZ2xlSW1hZ2VMb2FkZWQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gc2luZ2xlSW1hZ2VMb2FkZWQoKSB7XG4gICAgdW5sb2FkZWQtLTtcbiAgICBpZiAodW5sb2FkZWQgPT09IDApIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG59XG5cbkZvdW5kYXRpb24uVGltZXIgPSBUaW1lcjtcbkZvdW5kYXRpb24ub25JbWFnZXNMb2FkZWQgPSBvbkltYWdlc0xvYWRlZDtcblxufShqUXVlcnkpO1xuIiwiLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8qKldvcmsgaW5zcGlyZWQgYnkgbXVsdGlwbGUganF1ZXJ5IHN3aXBlIHBsdWdpbnMqKlxuLy8qKkRvbmUgYnkgWW9oYWkgQXJhcmF0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuKGZ1bmN0aW9uKCQpIHtcblxuICAkLnNwb3RTd2lwZSA9IHtcbiAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgIGVuYWJsZWQ6ICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICBwcmV2ZW50RGVmYXVsdDogZmFsc2UsXG4gICAgbW92ZVRocmVzaG9sZDogNzUsXG4gICAgdGltZVRocmVzaG9sZDogMjAwXG4gIH07XG5cbiAgdmFyICAgc3RhcnRQb3NYLFxuICAgICAgICBzdGFydFBvc1ksXG4gICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgZWxhcHNlZFRpbWUsXG4gICAgICAgIGlzTW92aW5nID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gb25Ub3VjaEVuZCgpIHtcbiAgICAvLyAgYWxlcnQodGhpcyk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIG9uVG91Y2hFbmQpO1xuICAgIGlzTW92aW5nID0gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBvblRvdWNoTW92ZShlKSB7XG4gICAgaWYgKCQuc3BvdFN3aXBlLnByZXZlbnREZWZhdWx0KSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgIGlmKGlzTW92aW5nKSB7XG4gICAgICB2YXIgeCA9IGUudG91Y2hlc1swXS5wYWdlWDtcbiAgICAgIHZhciB5ID0gZS50b3VjaGVzWzBdLnBhZ2VZO1xuICAgICAgdmFyIGR4ID0gc3RhcnRQb3NYIC0geDtcbiAgICAgIHZhciBkeSA9IHN0YXJ0UG9zWSAtIHk7XG4gICAgICB2YXIgZGlyO1xuICAgICAgZWxhcHNlZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0VGltZTtcbiAgICAgIGlmKE1hdGguYWJzKGR4KSA+PSAkLnNwb3RTd2lwZS5tb3ZlVGhyZXNob2xkICYmIGVsYXBzZWRUaW1lIDw9ICQuc3BvdFN3aXBlLnRpbWVUaHJlc2hvbGQpIHtcbiAgICAgICAgZGlyID0gZHggPiAwID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICAgIH1cbiAgICAgIC8vIGVsc2UgaWYoTWF0aC5hYnMoZHkpID49ICQuc3BvdFN3aXBlLm1vdmVUaHJlc2hvbGQgJiYgZWxhcHNlZFRpbWUgPD0gJC5zcG90U3dpcGUudGltZVRocmVzaG9sZCkge1xuICAgICAgLy8gICBkaXIgPSBkeSA+IDAgPyAnZG93bicgOiAndXAnO1xuICAgICAgLy8gfVxuICAgICAgaWYoZGlyKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25Ub3VjaEVuZC5jYWxsKHRoaXMpO1xuICAgICAgICAkKHRoaXMpLnRyaWdnZXIoJ3N3aXBlJywgZGlyKS50cmlnZ2VyKGBzd2lwZSR7ZGlyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVG91Y2hTdGFydChlKSB7XG4gICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPT0gMSkge1xuICAgICAgc3RhcnRQb3NYID0gZS50b3VjaGVzWzBdLnBhZ2VYO1xuICAgICAgc3RhcnRQb3NZID0gZS50b3VjaGVzWzBdLnBhZ2VZO1xuICAgICAgaXNNb3ZpbmcgPSB0cnVlO1xuICAgICAgc3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG9uVG91Y2hNb3ZlLCBmYWxzZSk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyICYmIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVhcmRvd24oKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgfVxuXG4gICQuZXZlbnQuc3BlY2lhbC5zd2lwZSA9IHsgc2V0dXA6IGluaXQgfTtcblxuICAkLmVhY2goWydsZWZ0JywgJ3VwJywgJ2Rvd24nLCAncmlnaHQnXSwgZnVuY3Rpb24gKCkge1xuICAgICQuZXZlbnQuc3BlY2lhbFtgc3dpcGUke3RoaXN9YF0gPSB7IHNldHVwOiBmdW5jdGlvbigpe1xuICAgICAgJCh0aGlzKS5vbignc3dpcGUnLCAkLm5vb3ApO1xuICAgIH0gfTtcbiAgfSk7XG59KShqUXVlcnkpO1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIE1ldGhvZCBmb3IgYWRkaW5nIHBzdWVkbyBkcmFnIGV2ZW50cyB0byBlbGVtZW50cyAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIWZ1bmN0aW9uKCQpe1xuICAkLmZuLmFkZFRvdWNoID0gZnVuY3Rpb24oKXtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24oaSxlbCl7XG4gICAgICAkKGVsKS5iaW5kKCd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCcsZnVuY3Rpb24oKXtcbiAgICAgICAgLy93ZSBwYXNzIHRoZSBvcmlnaW5hbCBldmVudCBvYmplY3QgYmVjYXVzZSB0aGUgalF1ZXJ5IGV2ZW50XG4gICAgICAgIC8vb2JqZWN0IGlzIG5vcm1hbGl6ZWQgdG8gdzNjIHNwZWNzIGFuZCBkb2VzIG5vdCBwcm92aWRlIHRoZSBUb3VjaExpc3RcbiAgICAgICAgaGFuZGxlVG91Y2goZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgaGFuZGxlVG91Y2ggPSBmdW5jdGlvbihldmVudCl7XG4gICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICAgIGZpcnN0ID0gdG91Y2hlc1swXSxcbiAgICAgICAgICBldmVudFR5cGVzID0ge1xuICAgICAgICAgICAgdG91Y2hzdGFydDogJ21vdXNlZG93bicsXG4gICAgICAgICAgICB0b3VjaG1vdmU6ICdtb3VzZW1vdmUnLFxuICAgICAgICAgICAgdG91Y2hlbmQ6ICdtb3VzZXVwJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZSA9IGV2ZW50VHlwZXNbZXZlbnQudHlwZV0sXG4gICAgICAgICAgc2ltdWxhdGVkRXZlbnRcbiAgICAgICAgO1xuXG4gICAgICBpZignTW91c2VFdmVudCcgaW4gd2luZG93ICYmIHR5cGVvZiB3aW5kb3cuTW91c2VFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzaW11bGF0ZWRFdmVudCA9IG5ldyB3aW5kb3cuTW91c2VFdmVudCh0eXBlLCB7XG4gICAgICAgICAgJ2J1YmJsZXMnOiB0cnVlLFxuICAgICAgICAgICdjYW5jZWxhYmxlJzogdHJ1ZSxcbiAgICAgICAgICAnc2NyZWVuWCc6IGZpcnN0LnNjcmVlblgsXG4gICAgICAgICAgJ3NjcmVlblknOiBmaXJzdC5zY3JlZW5ZLFxuICAgICAgICAgICdjbGllbnRYJzogZmlyc3QuY2xpZW50WCxcbiAgICAgICAgICAnY2xpZW50WSc6IGZpcnN0LmNsaWVudFlcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaW11bGF0ZWRFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50Jyk7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LmluaXRNb3VzZUV2ZW50KHR5cGUsIHRydWUsIHRydWUsIHdpbmRvdywgMSwgZmlyc3Quc2NyZWVuWCwgZmlyc3Quc2NyZWVuWSwgZmlyc3QuY2xpZW50WCwgZmlyc3QuY2xpZW50WSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAvKmxlZnQqLywgbnVsbCk7XG4gICAgICB9XG4gICAgICBmaXJzdC50YXJnZXQuZGlzcGF0Y2hFdmVudChzaW11bGF0ZWRFdmVudCk7XG4gICAgfTtcbiAgfTtcbn0oalF1ZXJ5KTtcblxuXG4vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vKipGcm9tIHRoZSBqUXVlcnkgTW9iaWxlIExpYnJhcnkqKlxuLy8qKm5lZWQgdG8gcmVjcmVhdGUgZnVuY3Rpb25hbGl0eSoqXG4vLyoqYW5kIHRyeSB0byBpbXByb3ZlIGlmIHBvc3NpYmxlKipcbi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4vKiBSZW1vdmluZyB0aGUgalF1ZXJ5IGZ1bmN0aW9uICoqKipcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4oZnVuY3Rpb24oICQsIHdpbmRvdywgdW5kZWZpbmVkICkge1xuXG5cdHZhciAkZG9jdW1lbnQgPSAkKCBkb2N1bWVudCApLFxuXHRcdC8vIHN1cHBvcnRUb3VjaCA9ICQubW9iaWxlLnN1cHBvcnQudG91Y2gsXG5cdFx0dG91Y2hTdGFydEV2ZW50ID0gJ3RvdWNoc3RhcnQnLy9zdXBwb3J0VG91Y2ggPyBcInRvdWNoc3RhcnRcIiA6IFwibW91c2Vkb3duXCIsXG5cdFx0dG91Y2hTdG9wRXZlbnQgPSAndG91Y2hlbmQnLy9zdXBwb3J0VG91Y2ggPyBcInRvdWNoZW5kXCIgOiBcIm1vdXNldXBcIixcblx0XHR0b3VjaE1vdmVFdmVudCA9ICd0b3VjaG1vdmUnLy9zdXBwb3J0VG91Y2ggPyBcInRvdWNobW92ZVwiIDogXCJtb3VzZW1vdmVcIjtcblxuXHQvLyBzZXR1cCBuZXcgZXZlbnQgc2hvcnRjdXRzXG5cdCQuZWFjaCggKCBcInRvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIFwiICtcblx0XHRcInN3aXBlIHN3aXBlbGVmdCBzd2lwZXJpZ2h0XCIgKS5zcGxpdCggXCIgXCIgKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cblx0XHQkLmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRyZXR1cm4gZm4gPyB0aGlzLmJpbmQoIG5hbWUsIGZuICkgOiB0aGlzLnRyaWdnZXIoIG5hbWUgKTtcblx0XHR9O1xuXG5cdFx0Ly8galF1ZXJ5IDwgMS44XG5cdFx0aWYgKCAkLmF0dHJGbiApIHtcblx0XHRcdCQuYXR0ckZuWyBuYW1lIF0gPSB0cnVlO1xuXHRcdH1cblx0fSk7XG5cblx0ZnVuY3Rpb24gdHJpZ2dlckN1c3RvbUV2ZW50KCBvYmosIGV2ZW50VHlwZSwgZXZlbnQsIGJ1YmJsZSApIHtcblx0XHR2YXIgb3JpZ2luYWxUeXBlID0gZXZlbnQudHlwZTtcblx0XHRldmVudC50eXBlID0gZXZlbnRUeXBlO1xuXHRcdGlmICggYnViYmxlICkge1xuXHRcdFx0JC5ldmVudC50cmlnZ2VyKCBldmVudCwgdW5kZWZpbmVkLCBvYmogKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JC5ldmVudC5kaXNwYXRjaC5jYWxsKCBvYmosIGV2ZW50ICk7XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSBvcmlnaW5hbFR5cGU7XG5cdH1cblxuXHQvLyBhbHNvIGhhbmRsZXMgdGFwaG9sZFxuXG5cdC8vIEFsc28gaGFuZGxlcyBzd2lwZWxlZnQsIHN3aXBlcmlnaHRcblx0JC5ldmVudC5zcGVjaWFsLnN3aXBlID0ge1xuXG5cdFx0Ly8gTW9yZSB0aGFuIHRoaXMgaG9yaXpvbnRhbCBkaXNwbGFjZW1lbnQsIGFuZCB3ZSB3aWxsIHN1cHByZXNzIHNjcm9sbGluZy5cblx0XHRzY3JvbGxTdXByZXNzaW9uVGhyZXNob2xkOiAzMCxcblxuXHRcdC8vIE1vcmUgdGltZSB0aGFuIHRoaXMsIGFuZCBpdCBpc24ndCBhIHN3aXBlLlxuXHRcdGR1cmF0aW9uVGhyZXNob2xkOiAxMDAwLFxuXG5cdFx0Ly8gU3dpcGUgaG9yaXpvbnRhbCBkaXNwbGFjZW1lbnQgbXVzdCBiZSBtb3JlIHRoYW4gdGhpcy5cblx0XHRob3Jpem9udGFsRGlzdGFuY2VUaHJlc2hvbGQ6IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvID49IDIgPyAxNSA6IDMwLFxuXG5cdFx0Ly8gU3dpcGUgdmVydGljYWwgZGlzcGxhY2VtZW50IG11c3QgYmUgbGVzcyB0aGFuIHRoaXMuXG5cdFx0dmVydGljYWxEaXN0YW5jZVRocmVzaG9sZDogd2luZG93LmRldmljZVBpeGVsUmF0aW8gPj0gMiA/IDE1IDogMzAsXG5cblx0XHRnZXRMb2NhdGlvbjogZnVuY3Rpb24gKCBldmVudCApIHtcblx0XHRcdHZhciB3aW5QYWdlWCA9IHdpbmRvdy5wYWdlWE9mZnNldCxcblx0XHRcdFx0d2luUGFnZVkgPSB3aW5kb3cucGFnZVlPZmZzZXQsXG5cdFx0XHRcdHggPSBldmVudC5jbGllbnRYLFxuXHRcdFx0XHR5ID0gZXZlbnQuY2xpZW50WTtcblxuXHRcdFx0aWYgKCBldmVudC5wYWdlWSA9PT0gMCAmJiBNYXRoLmZsb29yKCB5ICkgPiBNYXRoLmZsb29yKCBldmVudC5wYWdlWSApIHx8XG5cdFx0XHRcdGV2ZW50LnBhZ2VYID09PSAwICYmIE1hdGguZmxvb3IoIHggKSA+IE1hdGguZmxvb3IoIGV2ZW50LnBhZ2VYICkgKSB7XG5cblx0XHRcdFx0Ly8gaU9TNCBjbGllbnRYL2NsaWVudFkgaGF2ZSB0aGUgdmFsdWUgdGhhdCBzaG91bGQgaGF2ZSBiZWVuXG5cdFx0XHRcdC8vIGluIHBhZ2VYL3BhZ2VZLiBXaGlsZSBwYWdlWC9wYWdlLyBoYXZlIHRoZSB2YWx1ZSAwXG5cdFx0XHRcdHggPSB4IC0gd2luUGFnZVg7XG5cdFx0XHRcdHkgPSB5IC0gd2luUGFnZVk7XG5cdFx0XHR9IGVsc2UgaWYgKCB5IDwgKCBldmVudC5wYWdlWSAtIHdpblBhZ2VZKSB8fCB4IDwgKCBldmVudC5wYWdlWCAtIHdpblBhZ2VYICkgKSB7XG5cblx0XHRcdFx0Ly8gU29tZSBBbmRyb2lkIGJyb3dzZXJzIGhhdmUgdG90YWxseSBib2d1cyB2YWx1ZXMgZm9yIGNsaWVudFgvWVxuXHRcdFx0XHQvLyB3aGVuIHNjcm9sbGluZy96b29taW5nIGEgcGFnZS4gRGV0ZWN0YWJsZSBzaW5jZSBjbGllbnRYL2NsaWVudFlcblx0XHRcdFx0Ly8gc2hvdWxkIG5ldmVyIGJlIHNtYWxsZXIgdGhhbiBwYWdlWC9wYWdlWSBtaW51cyBwYWdlIHNjcm9sbFxuXHRcdFx0XHR4ID0gZXZlbnQucGFnZVggLSB3aW5QYWdlWDtcblx0XHRcdFx0eSA9IGV2ZW50LnBhZ2VZIC0gd2luUGFnZVk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IHgsXG5cdFx0XHRcdHk6IHlcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdHN0YXJ0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgZGF0YSA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlcyA/XG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWyAwIF0gOiBldmVudCxcblx0XHRcdFx0bG9jYXRpb24gPSAkLmV2ZW50LnNwZWNpYWwuc3dpcGUuZ2V0TG9jYXRpb24oIGRhdGEgKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHR0aW1lOiAoIG5ldyBEYXRlKCkgKS5nZXRUaW1lKCksXG5cdFx0XHRcdFx0XHRjb29yZHM6IFsgbG9jYXRpb24ueCwgbG9jYXRpb24ueSBdLFxuXHRcdFx0XHRcdFx0b3JpZ2luOiAkKCBldmVudC50YXJnZXQgKVxuXHRcdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdHN0b3A6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBkYXRhID0gZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzID9cblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbIDAgXSA6IGV2ZW50LFxuXHRcdFx0XHRsb2NhdGlvbiA9ICQuZXZlbnQuc3BlY2lhbC5zd2lwZS5nZXRMb2NhdGlvbiggZGF0YSApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHRpbWU6ICggbmV3IERhdGUoKSApLmdldFRpbWUoKSxcblx0XHRcdFx0XHRcdGNvb3JkczogWyBsb2NhdGlvbi54LCBsb2NhdGlvbi55IF1cblx0XHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRoYW5kbGVTd2lwZTogZnVuY3Rpb24oIHN0YXJ0LCBzdG9wLCB0aGlzT2JqZWN0LCBvcmlnVGFyZ2V0ICkge1xuXHRcdFx0aWYgKCBzdG9wLnRpbWUgLSBzdGFydC50aW1lIDwgJC5ldmVudC5zcGVjaWFsLnN3aXBlLmR1cmF0aW9uVGhyZXNob2xkICYmXG5cdFx0XHRcdE1hdGguYWJzKCBzdGFydC5jb29yZHNbIDAgXSAtIHN0b3AuY29vcmRzWyAwIF0gKSA+ICQuZXZlbnQuc3BlY2lhbC5zd2lwZS5ob3Jpem9udGFsRGlzdGFuY2VUaHJlc2hvbGQgJiZcblx0XHRcdFx0TWF0aC5hYnMoIHN0YXJ0LmNvb3Jkc1sgMSBdIC0gc3RvcC5jb29yZHNbIDEgXSApIDwgJC5ldmVudC5zcGVjaWFsLnN3aXBlLnZlcnRpY2FsRGlzdGFuY2VUaHJlc2hvbGQgKSB7XG5cdFx0XHRcdHZhciBkaXJlY3Rpb24gPSBzdGFydC5jb29yZHNbMF0gPiBzdG9wLmNvb3Jkc1sgMCBdID8gXCJzd2lwZWxlZnRcIiA6IFwic3dpcGVyaWdodFwiO1xuXG5cdFx0XHRcdHRyaWdnZXJDdXN0b21FdmVudCggdGhpc09iamVjdCwgXCJzd2lwZVwiLCAkLkV2ZW50KCBcInN3aXBlXCIsIHsgdGFyZ2V0OiBvcmlnVGFyZ2V0LCBzd2lwZXN0YXJ0OiBzdGFydCwgc3dpcGVzdG9wOiBzdG9wIH0pLCB0cnVlICk7XG5cdFx0XHRcdHRyaWdnZXJDdXN0b21FdmVudCggdGhpc09iamVjdCwgZGlyZWN0aW9uLCQuRXZlbnQoIGRpcmVjdGlvbiwgeyB0YXJnZXQ6IG9yaWdUYXJnZXQsIHN3aXBlc3RhcnQ6IHN0YXJ0LCBzd2lwZXN0b3A6IHN0b3AgfSApLCB0cnVlICk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0fSxcblxuXHRcdC8vIFRoaXMgc2VydmVzIGFzIGEgZmxhZyB0byBlbnN1cmUgdGhhdCBhdCBtb3N0IG9uZSBzd2lwZSBldmVudCBldmVudCBpc1xuXHRcdC8vIGluIHdvcmsgYXQgYW55IGdpdmVuIHRpbWVcblx0XHRldmVudEluUHJvZ3Jlc3M6IGZhbHNlLFxuXG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGV2ZW50cyxcblx0XHRcdFx0dGhpc09iamVjdCA9IHRoaXMsXG5cdFx0XHRcdCR0aGlzID0gJCggdGhpc09iamVjdCApLFxuXHRcdFx0XHRjb250ZXh0ID0ge307XG5cblx0XHRcdC8vIFJldHJpZXZlIHRoZSBldmVudHMgZGF0YSBmb3IgdGhpcyBlbGVtZW50IGFuZCBhZGQgdGhlIHN3aXBlIGNvbnRleHRcblx0XHRcdGV2ZW50cyA9ICQuZGF0YSggdGhpcywgXCJtb2JpbGUtZXZlbnRzXCIgKTtcblx0XHRcdGlmICggIWV2ZW50cyApIHtcblx0XHRcdFx0ZXZlbnRzID0geyBsZW5ndGg6IDAgfTtcblx0XHRcdFx0JC5kYXRhKCB0aGlzLCBcIm1vYmlsZS1ldmVudHNcIiwgZXZlbnRzICk7XG5cdFx0XHR9XG5cdFx0XHRldmVudHMubGVuZ3RoKys7XG5cdFx0XHRldmVudHMuc3dpcGUgPSBjb250ZXh0O1xuXG5cdFx0XHRjb250ZXh0LnN0YXJ0ID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIEJhaWwgaWYgd2UncmUgYWxyZWFkeSB3b3JraW5nIG9uIGEgc3dpcGUgZXZlbnRcblx0XHRcdFx0aWYgKCAkLmV2ZW50LnNwZWNpYWwuc3dpcGUuZXZlbnRJblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQkLmV2ZW50LnNwZWNpYWwuc3dpcGUuZXZlbnRJblByb2dyZXNzID0gdHJ1ZTtcblxuXHRcdFx0XHR2YXIgc3RvcCxcblx0XHRcdFx0XHRzdGFydCA9ICQuZXZlbnQuc3BlY2lhbC5zd2lwZS5zdGFydCggZXZlbnQgKSxcblx0XHRcdFx0XHRvcmlnVGFyZ2V0ID0gZXZlbnQudGFyZ2V0LFxuXHRcdFx0XHRcdGVtaXR0ZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRjb250ZXh0Lm1vdmUgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdFx0aWYgKCAhc3RhcnQgfHwgZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c3RvcCA9ICQuZXZlbnQuc3BlY2lhbC5zd2lwZS5zdG9wKCBldmVudCApO1xuXHRcdFx0XHRcdGlmICggIWVtaXR0ZWQgKSB7XG5cdFx0XHRcdFx0XHRlbWl0dGVkID0gJC5ldmVudC5zcGVjaWFsLnN3aXBlLmhhbmRsZVN3aXBlKCBzdGFydCwgc3RvcCwgdGhpc09iamVjdCwgb3JpZ1RhcmdldCApO1xuXHRcdFx0XHRcdFx0aWYgKCBlbWl0dGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJlc2V0IHRoZSBjb250ZXh0IHRvIG1ha2Ugd2F5IGZvciB0aGUgbmV4dCBzd2lwZSBldmVudFxuXHRcdFx0XHRcdFx0XHQkLmV2ZW50LnNwZWNpYWwuc3dpcGUuZXZlbnRJblByb2dyZXNzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIHByZXZlbnQgc2Nyb2xsaW5nXG5cdFx0XHRcdFx0aWYgKCBNYXRoLmFicyggc3RhcnQuY29vcmRzWyAwIF0gLSBzdG9wLmNvb3Jkc1sgMCBdICkgPiAkLmV2ZW50LnNwZWNpYWwuc3dpcGUuc2Nyb2xsU3VwcmVzc2lvblRocmVzaG9sZCApIHtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnRleHQuc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0ZW1pdHRlZCA9IHRydWU7XG5cblx0XHRcdFx0XHRcdC8vIFJlc2V0IHRoZSBjb250ZXh0IHRvIG1ha2Ugd2F5IGZvciB0aGUgbmV4dCBzd2lwZSBldmVudFxuXHRcdFx0XHRcdFx0JC5ldmVudC5zcGVjaWFsLnN3aXBlLmV2ZW50SW5Qcm9ncmVzcyA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0JGRvY3VtZW50Lm9mZiggdG91Y2hNb3ZlRXZlbnQsIGNvbnRleHQubW92ZSApO1xuXHRcdFx0XHRcdFx0Y29udGV4dC5tb3ZlID0gbnVsbDtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQkZG9jdW1lbnQub24oIHRvdWNoTW92ZUV2ZW50LCBjb250ZXh0Lm1vdmUgKVxuXHRcdFx0XHRcdC5vbmUoIHRvdWNoU3RvcEV2ZW50LCBjb250ZXh0LnN0b3AgKTtcblx0XHRcdH07XG5cdFx0XHQkdGhpcy5vbiggdG91Y2hTdGFydEV2ZW50LCBjb250ZXh0LnN0YXJ0ICk7XG5cdFx0fSxcblxuXHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBldmVudHMsIGNvbnRleHQ7XG5cblx0XHRcdGV2ZW50cyA9ICQuZGF0YSggdGhpcywgXCJtb2JpbGUtZXZlbnRzXCIgKTtcblx0XHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0XHRjb250ZXh0ID0gZXZlbnRzLnN3aXBlO1xuXHRcdFx0XHRkZWxldGUgZXZlbnRzLnN3aXBlO1xuXHRcdFx0XHRldmVudHMubGVuZ3RoLS07XG5cdFx0XHRcdGlmICggZXZlbnRzLmxlbmd0aCA9PT0gMCApIHtcblx0XHRcdFx0XHQkLnJlbW92ZURhdGEoIHRoaXMsIFwibW9iaWxlLWV2ZW50c1wiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBjb250ZXh0ICkge1xuXHRcdFx0XHRpZiAoIGNvbnRleHQuc3RhcnQgKSB7XG5cdFx0XHRcdFx0JCggdGhpcyApLm9mZiggdG91Y2hTdGFydEV2ZW50LCBjb250ZXh0LnN0YXJ0ICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBjb250ZXh0Lm1vdmUgKSB7XG5cdFx0XHRcdFx0JGRvY3VtZW50Lm9mZiggdG91Y2hNb3ZlRXZlbnQsIGNvbnRleHQubW92ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggY29udGV4dC5zdG9wICkge1xuXHRcdFx0XHRcdCRkb2N1bWVudC5vZmYoIHRvdWNoU3RvcEV2ZW50LCBjb250ZXh0LnN0b3AgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0JC5lYWNoKHtcblx0XHRzd2lwZWxlZnQ6IFwic3dpcGUubGVmdFwiLFxuXHRcdHN3aXBlcmlnaHQ6IFwic3dpcGUucmlnaHRcIlxuXHR9LCBmdW5jdGlvbiggZXZlbnQsIHNvdXJjZUV2ZW50ICkge1xuXG5cdFx0JC5ldmVudC5zcGVjaWFsWyBldmVudCBdID0ge1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkKCB0aGlzICkuYmluZCggc291cmNlRXZlbnQsICQubm9vcCApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0JCggdGhpcyApLnVuYmluZCggc291cmNlRXZlbnQgKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9KTtcbn0pKCBqUXVlcnksIHRoaXMgKTtcbiovXG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbmNvbnN0IE11dGF0aW9uT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcHJlZml4ZXMgPSBbJ1dlYktpdCcsICdNb3onLCAnTycsICdNcycsICcnXTtcbiAgZm9yICh2YXIgaT0wOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYCR7cHJlZml4ZXNbaV19TXV0YXRpb25PYnNlcnZlcmAgaW4gd2luZG93KSB7XG4gICAgICByZXR1cm4gd2luZG93W2Ake3ByZWZpeGVzW2ldfU11dGF0aW9uT2JzZXJ2ZXJgXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSgpKTtcblxuY29uc3QgdHJpZ2dlcnMgPSAoZWwsIHR5cGUpID0+IHtcbiAgZWwuZGF0YSh0eXBlKS5zcGxpdCgnICcpLmZvckVhY2goaWQgPT4ge1xuICAgICQoYCMke2lkfWApWyB0eXBlID09PSAnY2xvc2UnID8gJ3RyaWdnZXInIDogJ3RyaWdnZXJIYW5kbGVyJ10oYCR7dHlwZX0uemYudHJpZ2dlcmAsIFtlbF0pO1xuICB9KTtcbn07XG4vLyBFbGVtZW50cyB3aXRoIFtkYXRhLW9wZW5dIHdpbGwgcmV2ZWFsIGEgcGx1Z2luIHRoYXQgc3VwcG9ydHMgaXQgd2hlbiBjbGlja2VkLlxuJChkb2N1bWVudCkub24oJ2NsaWNrLnpmLnRyaWdnZXInLCAnW2RhdGEtb3Blbl0nLCBmdW5jdGlvbigpIHtcbiAgdHJpZ2dlcnMoJCh0aGlzKSwgJ29wZW4nKTtcbn0pO1xuXG4vLyBFbGVtZW50cyB3aXRoIFtkYXRhLWNsb3NlXSB3aWxsIGNsb3NlIGEgcGx1Z2luIHRoYXQgc3VwcG9ydHMgaXQgd2hlbiBjbGlja2VkLlxuLy8gSWYgdXNlZCB3aXRob3V0IGEgdmFsdWUgb24gW2RhdGEtY2xvc2VdLCB0aGUgZXZlbnQgd2lsbCBidWJibGUsIGFsbG93aW5nIGl0IHRvIGNsb3NlIGEgcGFyZW50IGNvbXBvbmVudC5cbiQoZG9jdW1lbnQpLm9uKCdjbGljay56Zi50cmlnZ2VyJywgJ1tkYXRhLWNsb3NlXScsIGZ1bmN0aW9uKCkge1xuICBsZXQgaWQgPSAkKHRoaXMpLmRhdGEoJ2Nsb3NlJyk7XG4gIGlmIChpZCkge1xuICAgIHRyaWdnZXJzKCQodGhpcyksICdjbG9zZScpO1xuICB9XG4gIGVsc2Uge1xuICAgICQodGhpcykudHJpZ2dlcignY2xvc2UuemYudHJpZ2dlcicpO1xuICB9XG59KTtcblxuLy8gRWxlbWVudHMgd2l0aCBbZGF0YS10b2dnbGVdIHdpbGwgdG9nZ2xlIGEgcGx1Z2luIHRoYXQgc3VwcG9ydHMgaXQgd2hlbiBjbGlja2VkLlxuJChkb2N1bWVudCkub24oJ2NsaWNrLnpmLnRyaWdnZXInLCAnW2RhdGEtdG9nZ2xlXScsIGZ1bmN0aW9uKCkge1xuICBsZXQgaWQgPSAkKHRoaXMpLmRhdGEoJ3RvZ2dsZScpO1xuICBpZiAoaWQpIHtcbiAgICB0cmlnZ2VycygkKHRoaXMpLCAndG9nZ2xlJyk7XG4gIH0gZWxzZSB7XG4gICAgJCh0aGlzKS50cmlnZ2VyKCd0b2dnbGUuemYudHJpZ2dlcicpO1xuICB9XG59KTtcblxuLy8gRWxlbWVudHMgd2l0aCBbZGF0YS1jbG9zYWJsZV0gd2lsbCByZXNwb25kIHRvIGNsb3NlLnpmLnRyaWdnZXIgZXZlbnRzLlxuJChkb2N1bWVudCkub24oJ2Nsb3NlLnpmLnRyaWdnZXInLCAnW2RhdGEtY2xvc2FibGVdJywgZnVuY3Rpb24oZSl7XG4gIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIGxldCBhbmltYXRpb24gPSAkKHRoaXMpLmRhdGEoJ2Nsb3NhYmxlJyk7XG5cbiAgaWYoYW5pbWF0aW9uICE9PSAnJyl7XG4gICAgRm91bmRhdGlvbi5Nb3Rpb24uYW5pbWF0ZU91dCgkKHRoaXMpLCBhbmltYXRpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgJCh0aGlzKS50cmlnZ2VyKCdjbG9zZWQuemYnKTtcbiAgICB9KTtcbiAgfWVsc2V7XG4gICAgJCh0aGlzKS5mYWRlT3V0KCkudHJpZ2dlcignY2xvc2VkLnpmJyk7XG4gIH1cbn0pO1xuXG4kKGRvY3VtZW50KS5vbignZm9jdXMuemYudHJpZ2dlciBibHVyLnpmLnRyaWdnZXInLCAnW2RhdGEtdG9nZ2xlLWZvY3VzXScsIGZ1bmN0aW9uKCkge1xuICBsZXQgaWQgPSAkKHRoaXMpLmRhdGEoJ3RvZ2dsZS1mb2N1cycpO1xuICAkKGAjJHtpZH1gKS50cmlnZ2VySGFuZGxlcigndG9nZ2xlLnpmLnRyaWdnZXInLCBbJCh0aGlzKV0pO1xufSk7XG5cbi8qKlxuKiBGaXJlcyBvbmNlIGFmdGVyIGFsbCBvdGhlciBzY3JpcHRzIGhhdmUgbG9hZGVkXG4qIEBmdW5jdGlvblxuKiBAcHJpdmF0ZVxuKi9cbiQod2luZG93KS5vbignbG9hZCcsICgpID0+IHtcbiAgY2hlY2tMaXN0ZW5lcnMoKTtcbn0pO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVycygpIHtcbiAgZXZlbnRzTGlzdGVuZXIoKTtcbiAgcmVzaXplTGlzdGVuZXIoKTtcbiAgc2Nyb2xsTGlzdGVuZXIoKTtcbiAgbXV0YXRlTGlzdGVuZXIoKTtcbiAgY2xvc2VtZUxpc3RlbmVyKCk7XG59XG5cbi8vKioqKioqKiogb25seSBmaXJlcyB0aGlzIGZ1bmN0aW9uIG9uY2Ugb24gbG9hZCwgaWYgdGhlcmUncyBzb21ldGhpbmcgdG8gd2F0Y2ggKioqKioqKipcbmZ1bmN0aW9uIGNsb3NlbWVMaXN0ZW5lcihwbHVnaW5OYW1lKSB7XG4gIHZhciB5ZXRpQm94ZXMgPSAkKCdbZGF0YS15ZXRpLWJveF0nKSxcbiAgICAgIHBsdWdOYW1lcyA9IFsnZHJvcGRvd24nLCAndG9vbHRpcCcsICdyZXZlYWwnXTtcblxuICBpZihwbHVnaW5OYW1lKXtcbiAgICBpZih0eXBlb2YgcGx1Z2luTmFtZSA9PT0gJ3N0cmluZycpe1xuICAgICAgcGx1Z05hbWVzLnB1c2gocGx1Z2luTmFtZSk7XG4gICAgfWVsc2UgaWYodHlwZW9mIHBsdWdpbk5hbWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwbHVnaW5OYW1lWzBdID09PSAnc3RyaW5nJyl7XG4gICAgICBwbHVnTmFtZXMuY29uY2F0KHBsdWdpbk5hbWUpO1xuICAgIH1lbHNle1xuICAgICAgY29uc29sZS5lcnJvcignUGx1Z2luIG5hbWVzIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgfVxuICBpZih5ZXRpQm94ZXMubGVuZ3RoKXtcbiAgICBsZXQgbGlzdGVuZXJzID0gcGx1Z05hbWVzLm1hcCgobmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIGBjbG9zZW1lLnpmLiR7bmFtZX1gO1xuICAgIH0pLmpvaW4oJyAnKTtcblxuICAgICQod2luZG93KS5vZmYobGlzdGVuZXJzKS5vbihsaXN0ZW5lcnMsIGZ1bmN0aW9uKGUsIHBsdWdpbklkKXtcbiAgICAgIGxldCBwbHVnaW4gPSBlLm5hbWVzcGFjZS5zcGxpdCgnLicpWzBdO1xuICAgICAgbGV0IHBsdWdpbnMgPSAkKGBbZGF0YS0ke3BsdWdpbn1dYCkubm90KGBbZGF0YS15ZXRpLWJveD1cIiR7cGx1Z2luSWR9XCJdYCk7XG5cbiAgICAgIHBsdWdpbnMuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICBsZXQgX3RoaXMgPSAkKHRoaXMpO1xuXG4gICAgICAgIF90aGlzLnRyaWdnZXJIYW5kbGVyKCdjbG9zZS56Zi50cmlnZ2VyJywgW190aGlzXSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNpemVMaXN0ZW5lcihkZWJvdW5jZSl7XG4gIGxldCB0aW1lcixcbiAgICAgICRub2RlcyA9ICQoJ1tkYXRhLXJlc2l6ZV0nKTtcbiAgaWYoJG5vZGVzLmxlbmd0aCl7XG4gICAgJCh3aW5kb3cpLm9mZigncmVzaXplLnpmLnRyaWdnZXInKVxuICAgIC5vbigncmVzaXplLnpmLnRyaWdnZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICBpZiAodGltZXIpIHsgY2xlYXJUaW1lb3V0KHRpbWVyKTsgfVxuXG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcblxuICAgICAgICBpZighTXV0YXRpb25PYnNlcnZlcil7Ly9mYWxsYmFjayBmb3IgSUUgOVxuICAgICAgICAgICRub2Rlcy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAkKHRoaXMpLnRyaWdnZXJIYW5kbGVyKCdyZXNpemVtZS56Zi50cmlnZ2VyJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy90cmlnZ2VyIGFsbCBsaXN0ZW5pbmcgZWxlbWVudHMgYW5kIHNpZ25hbCBhIHJlc2l6ZSBldmVudFxuICAgICAgICAkbm9kZXMuYXR0cignZGF0YS1ldmVudHMnLCBcInJlc2l6ZVwiKTtcbiAgICAgIH0sIGRlYm91bmNlIHx8IDEwKTsvL2RlZmF1bHQgdGltZSB0byBlbWl0IHJlc2l6ZSBldmVudFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjcm9sbExpc3RlbmVyKGRlYm91bmNlKXtcbiAgbGV0IHRpbWVyLFxuICAgICAgJG5vZGVzID0gJCgnW2RhdGEtc2Nyb2xsXScpO1xuICBpZigkbm9kZXMubGVuZ3RoKXtcbiAgICAkKHdpbmRvdykub2ZmKCdzY3JvbGwuemYudHJpZ2dlcicpXG4gICAgLm9uKCdzY3JvbGwuemYudHJpZ2dlcicsIGZ1bmN0aW9uKGUpe1xuICAgICAgaWYodGltZXIpeyBjbGVhclRpbWVvdXQodGltZXIpOyB9XG5cbiAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuXG4gICAgICAgIGlmKCFNdXRhdGlvbk9ic2VydmVyKXsvL2ZhbGxiYWNrIGZvciBJRSA5XG4gICAgICAgICAgJG5vZGVzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICQodGhpcykudHJpZ2dlckhhbmRsZXIoJ3Njcm9sbG1lLnpmLnRyaWdnZXInKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvL3RyaWdnZXIgYWxsIGxpc3RlbmluZyBlbGVtZW50cyBhbmQgc2lnbmFsIGEgc2Nyb2xsIGV2ZW50XG4gICAgICAgICRub2Rlcy5hdHRyKCdkYXRhLWV2ZW50cycsIFwic2Nyb2xsXCIpO1xuICAgICAgfSwgZGVib3VuY2UgfHwgMTApOy8vZGVmYXVsdCB0aW1lIHRvIGVtaXQgc2Nyb2xsIGV2ZW50XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbXV0YXRlTGlzdGVuZXIoZGVib3VuY2UpIHtcbiAgICBsZXQgJG5vZGVzID0gJCgnW2RhdGEtbXV0YXRlXScpO1xuICAgIGlmICgkbm9kZXMubGVuZ3RoICYmIE11dGF0aW9uT2JzZXJ2ZXIpe1xuXHRcdFx0Ly90cmlnZ2VyIGFsbCBsaXN0ZW5pbmcgZWxlbWVudHMgYW5kIHNpZ25hbCBhIG11dGF0ZSBldmVudFxuICAgICAgLy9ubyBJRSA5IG9yIDEwXG5cdFx0XHQkbm9kZXMuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHQgICQodGhpcykudHJpZ2dlckhhbmRsZXIoJ211dGF0ZW1lLnpmLnRyaWdnZXInKTtcblx0XHRcdH0pO1xuICAgIH1cbiB9XG5cbmZ1bmN0aW9uIGV2ZW50c0xpc3RlbmVyKCkge1xuICBpZighTXV0YXRpb25PYnNlcnZlcil7IHJldHVybiBmYWxzZTsgfVxuICBsZXQgbm9kZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1yZXNpemVdLCBbZGF0YS1zY3JvbGxdLCBbZGF0YS1tdXRhdGVdJyk7XG5cbiAgLy9lbGVtZW50IGNhbGxiYWNrXG4gIHZhciBsaXN0ZW5pbmdFbGVtZW50c011dGF0aW9uID0gZnVuY3Rpb24gKG11dGF0aW9uUmVjb3Jkc0xpc3QpIHtcbiAgICAgIHZhciAkdGFyZ2V0ID0gJChtdXRhdGlvblJlY29yZHNMaXN0WzBdLnRhcmdldCk7XG5cblx0ICAvL3RyaWdnZXIgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBlbGVtZW50IGRlcGVuZGluZyBvbiB0eXBlXG4gICAgICBzd2l0Y2ggKG11dGF0aW9uUmVjb3Jkc0xpc3RbMF0udHlwZSkge1xuXG4gICAgICAgIGNhc2UgXCJhdHRyaWJ1dGVzXCI6XG4gICAgICAgICAgaWYgKCR0YXJnZXQuYXR0cihcImRhdGEtZXZlbnRzXCIpID09PSBcInNjcm9sbFwiICYmIG11dGF0aW9uUmVjb3Jkc0xpc3RbMF0uYXR0cmlidXRlTmFtZSA9PT0gXCJkYXRhLWV2ZW50c1wiKSB7XG5cdFx0ICBcdCR0YXJnZXQudHJpZ2dlckhhbmRsZXIoJ3Njcm9sbG1lLnpmLnRyaWdnZXInLCBbJHRhcmdldCwgd2luZG93LnBhZ2VZT2Zmc2V0XSk7XG5cdFx0ICB9XG5cdFx0ICBpZiAoJHRhcmdldC5hdHRyKFwiZGF0YS1ldmVudHNcIikgPT09IFwicmVzaXplXCIgJiYgbXV0YXRpb25SZWNvcmRzTGlzdFswXS5hdHRyaWJ1dGVOYW1lID09PSBcImRhdGEtZXZlbnRzXCIpIHtcblx0XHQgIFx0JHRhcmdldC50cmlnZ2VySGFuZGxlcigncmVzaXplbWUuemYudHJpZ2dlcicsIFskdGFyZ2V0XSk7XG5cdFx0ICAgfVxuXHRcdCAgaWYgKG11dGF0aW9uUmVjb3Jkc0xpc3RbMF0uYXR0cmlidXRlTmFtZSA9PT0gXCJzdHlsZVwiKSB7XG5cdFx0XHQgICR0YXJnZXQuY2xvc2VzdChcIltkYXRhLW11dGF0ZV1cIikuYXR0cihcImRhdGEtZXZlbnRzXCIsXCJtdXRhdGVcIik7XG5cdFx0XHQgICR0YXJnZXQuY2xvc2VzdChcIltkYXRhLW11dGF0ZV1cIikudHJpZ2dlckhhbmRsZXIoJ211dGF0ZW1lLnpmLnRyaWdnZXInLCBbJHRhcmdldC5jbG9zZXN0KFwiW2RhdGEtbXV0YXRlXVwiKV0pO1xuXHRcdCAgfVxuXHRcdCAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImNoaWxkTGlzdFwiOlxuXHRcdCAgJHRhcmdldC5jbG9zZXN0KFwiW2RhdGEtbXV0YXRlXVwiKS5hdHRyKFwiZGF0YS1ldmVudHNcIixcIm11dGF0ZVwiKTtcblx0XHQgICR0YXJnZXQuY2xvc2VzdChcIltkYXRhLW11dGF0ZV1cIikudHJpZ2dlckhhbmRsZXIoJ211dGF0ZW1lLnpmLnRyaWdnZXInLCBbJHRhcmdldC5jbG9zZXN0KFwiW2RhdGEtbXV0YXRlXVwiKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvL25vdGhpbmdcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgLy9mb3IgZWFjaCBlbGVtZW50IHRoYXQgbmVlZHMgdG8gbGlzdGVuIGZvciByZXNpemluZywgc2Nyb2xsaW5nLCBvciBtdXRhdGlvbiBhZGQgYSBzaW5nbGUgb2JzZXJ2ZXJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG5vZGVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICB2YXIgZWxlbWVudE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobGlzdGVuaW5nRWxlbWVudHNNdXRhdGlvbik7XG4gICAgICAgIGVsZW1lbnRPYnNlcnZlci5vYnNlcnZlKG5vZGVzW2ldLCB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogZmFsc2UsIHN1YnRyZWU6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogW1wiZGF0YS1ldmVudHNcIiwgXCJzdHlsZVwiXSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFtQSF1cbi8vIEZvdW5kYXRpb24uQ2hlY2tXYXRjaGVycyA9IGNoZWNrV2F0Y2hlcnM7XG5Gb3VuZGF0aW9uLklIZWFyWW91ID0gY2hlY2tMaXN0ZW5lcnM7XG4vLyBGb3VuZGF0aW9uLklTZWVZb3UgPSBzY3JvbGxMaXN0ZW5lcjtcbi8vIEZvdW5kYXRpb24uSUZlZWxZb3UgPSBjbG9zZW1lTGlzdGVuZXI7XG5cbn0oalF1ZXJ5KTtcblxuLy8gZnVuY3Rpb24gZG9tTXV0YXRpb25PYnNlcnZlcihkZWJvdW5jZSkge1xuLy8gICAvLyAhISEgVGhpcyBpcyBjb21pbmcgc29vbiBhbmQgbmVlZHMgbW9yZSB3b3JrOyBub3QgYWN0aXZlICAhISEgLy9cbi8vICAgdmFyIHRpbWVyLFxuLy8gICBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW11dGF0ZV0nKTtcbi8vICAgLy9cbi8vICAgaWYgKG5vZGVzLmxlbmd0aCkge1xuLy8gICAgIC8vIHZhciBNdXRhdGlvbk9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbi8vICAgICAvLyAgIHZhciBwcmVmaXhlcyA9IFsnV2ViS2l0JywgJ01veicsICdPJywgJ01zJywgJyddO1xuLy8gICAgIC8vICAgZm9yICh2YXIgaT0wOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbi8vICAgICAvLyAgICAgaWYgKHByZWZpeGVzW2ldICsgJ011dGF0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykge1xuLy8gICAgIC8vICAgICAgIHJldHVybiB3aW5kb3dbcHJlZml4ZXNbaV0gKyAnTXV0YXRpb25PYnNlcnZlciddO1xuLy8gICAgIC8vICAgICB9XG4vLyAgICAgLy8gICB9XG4vLyAgICAgLy8gICByZXR1cm4gZmFsc2U7XG4vLyAgICAgLy8gfSgpKTtcbi8vXG4vL1xuLy8gICAgIC8vZm9yIHRoZSBib2R5LCB3ZSBuZWVkIHRvIGxpc3RlbiBmb3IgYWxsIGNoYW5nZXMgZWZmZWN0aW5nIHRoZSBzdHlsZSBhbmQgY2xhc3MgYXR0cmlidXRlc1xuLy8gICAgIHZhciBib2R5T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihib2R5TXV0YXRpb24pO1xuLy8gICAgIGJvZHlPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiBmYWxzZSwgc3VidHJlZTp0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6W1wic3R5bGVcIiwgXCJjbGFzc1wiXX0pO1xuLy9cbi8vXG4vLyAgICAgLy9ib2R5IGNhbGxiYWNrXG4vLyAgICAgZnVuY3Rpb24gYm9keU11dGF0aW9uKG11dGF0ZSkge1xuLy8gICAgICAgLy90cmlnZ2VyIGFsbCBsaXN0ZW5pbmcgZWxlbWVudHMgYW5kIHNpZ25hbCBhIG11dGF0aW9uIGV2ZW50XG4vLyAgICAgICBpZiAodGltZXIpIHsgY2xlYXJUaW1lb3V0KHRpbWVyKTsgfVxuLy9cbi8vICAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbi8vICAgICAgICAgYm9keU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbi8vICAgICAgICAgJCgnW2RhdGEtbXV0YXRlXScpLmF0dHIoJ2RhdGEtZXZlbnRzJyxcIm11dGF0ZVwiKTtcbi8vICAgICAgIH0sIGRlYm91bmNlIHx8IDE1MCk7XG4vLyAgICAgfVxuLy8gICB9XG4vLyB9XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogQWJpZGUgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmFiaWRlXG4gKi9cblxuY2xhc3MgQWJpZGUge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBBYmlkZS5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBBYmlkZSNpbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIHRyaWdnZXIgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyAgPSAkLmV4dGVuZCh7fSwgQWJpZGUuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ0FiaWRlJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIEFiaWRlIHBsdWdpbiBhbmQgY2FsbHMgZnVuY3Rpb25zIHRvIGdldCBBYmlkZSBmdW5jdGlvbmluZyBvbiBsb2FkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdGhpcy4kaW5wdXRzID0gdGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcpO1xuXG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgZXZlbnRzIGZvciBBYmlkZS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy5hYmlkZScpXG4gICAgICAub24oJ3Jlc2V0LnpmLmFiaWRlJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgfSlcbiAgICAgIC5vbignc3VibWl0LnpmLmFiaWRlJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUZvcm0oKTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy52YWxpZGF0ZU9uID09PSAnZmllbGRDaGFuZ2UnKSB7XG4gICAgICB0aGlzLiRpbnB1dHNcbiAgICAgICAgLm9mZignY2hhbmdlLnpmLmFiaWRlJylcbiAgICAgICAgLm9uKCdjaGFuZ2UuemYuYWJpZGUnLCAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dCgkKGUudGFyZ2V0KSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGl2ZVZhbGlkYXRlKSB7XG4gICAgICB0aGlzLiRpbnB1dHNcbiAgICAgICAgLm9mZignaW5wdXQuemYuYWJpZGUnKVxuICAgICAgICAub24oJ2lucHV0LnpmLmFiaWRlJywgKGUpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXQoJChlLnRhcmdldCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnZhbGlkYXRlT25CbHVyKSB7XG4gICAgICB0aGlzLiRpbnB1dHNcbiAgICAgICAgLm9mZignYmx1ci56Zi5hYmlkZScpXG4gICAgICAgIC5vbignYmx1ci56Zi5hYmlkZScsIChlKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0KCQoZS50YXJnZXQpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIG5lY2Vzc2FyeSBmdW5jdGlvbnMgdG8gdXBkYXRlIEFiaWRlIHVwb24gRE9NIGNoYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlZmxvdygpIHtcbiAgICB0aGlzLl9pbml0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IGEgZm9ybSBlbGVtZW50IGhhcyB0aGUgcmVxdWlyZWQgYXR0cmlidXRlIGFuZCBpZiBpdCdzIGNoZWNrZWQgb3Igbm90XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBjaGVjayBmb3IgcmVxdWlyZWQgYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBCb29sZWFuIHZhbHVlIGRlcGVuZHMgb24gd2hldGhlciBvciBub3QgYXR0cmlidXRlIGlzIGNoZWNrZWQgb3IgZW1wdHlcbiAgICovXG4gIHJlcXVpcmVkQ2hlY2soJGVsKSB7XG4gICAgaWYgKCEkZWwuYXR0cigncmVxdWlyZWQnKSkgcmV0dXJuIHRydWU7XG5cbiAgICB2YXIgaXNHb29kID0gdHJ1ZTtcblxuICAgIHN3aXRjaCAoJGVsWzBdLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgaXNHb29kID0gJGVsWzBdLmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgY2FzZSAnc2VsZWN0LW9uZSc6XG4gICAgICBjYXNlICdzZWxlY3QtbXVsdGlwbGUnOlxuICAgICAgICB2YXIgb3B0ID0gJGVsLmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpO1xuICAgICAgICBpZiAoIW9wdC5sZW5ndGggfHwgIW9wdC52YWwoKSkgaXNHb29kID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZighJGVsLnZhbCgpIHx8ICEkZWwudmFsKCkubGVuZ3RoKSBpc0dvb2QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNHb29kO1xuICB9XG5cbiAgLyoqXG4gICAqIEJhc2VkIG9uICRlbCwgZ2V0IHRoZSBmaXJzdCBlbGVtZW50IHdpdGggc2VsZWN0b3IgaW4gdGhpcyBvcmRlcjpcbiAgICogMS4gVGhlIGVsZW1lbnQncyBkaXJlY3Qgc2libGluZygncykuXG4gICAqIDMuIFRoZSBlbGVtZW50J3MgcGFyZW50J3MgY2hpbGRyZW4uXG4gICAqXG4gICAqIFRoaXMgYWxsb3dzIGZvciBtdWx0aXBsZSBmb3JtIGVycm9ycyBwZXIgaW5wdXQsIHRob3VnaCBpZiBub25lIGFyZSBmb3VuZCwgbm8gZm9ybSBlcnJvcnMgd2lsbCBiZSBzaG93bi5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbCAtIGpRdWVyeSBvYmplY3QgdG8gdXNlIGFzIHJlZmVyZW5jZSB0byBmaW5kIHRoZSBmb3JtIGVycm9yIHNlbGVjdG9yLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBqUXVlcnkgb2JqZWN0IHdpdGggdGhlIHNlbGVjdG9yLlxuICAgKi9cbiAgZmluZEZvcm1FcnJvcigkZWwpIHtcbiAgICB2YXIgJGVycm9yID0gJGVsLnNpYmxpbmdzKHRoaXMub3B0aW9ucy5mb3JtRXJyb3JTZWxlY3Rvcik7XG5cbiAgICBpZiAoISRlcnJvci5sZW5ndGgpIHtcbiAgICAgICRlcnJvciA9ICRlbC5wYXJlbnQoKS5maW5kKHRoaXMub3B0aW9ucy5mb3JtRXJyb3JTZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuICRlcnJvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhpcyBvcmRlcjpcbiAgICogMi4gVGhlIDxsYWJlbD4gd2l0aCB0aGUgYXR0cmlidXRlIGBbZm9yPVwic29tZUlucHV0SWRcIl1gXG4gICAqIDMuIFRoZSBgLmNsb3Nlc3QoKWAgPGxhYmVsPlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IG9iamVjdCB0byBjaGVjayBmb3IgcmVxdWlyZWQgYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBCb29sZWFuIHZhbHVlIGRlcGVuZHMgb24gd2hldGhlciBvciBub3QgYXR0cmlidXRlIGlzIGNoZWNrZWQgb3IgZW1wdHlcbiAgICovXG4gIGZpbmRMYWJlbCgkZWwpIHtcbiAgICB2YXIgaWQgPSAkZWxbMF0uaWQ7XG4gICAgdmFyICRsYWJlbCA9IHRoaXMuJGVsZW1lbnQuZmluZChgbGFiZWxbZm9yPVwiJHtpZH1cIl1gKTtcblxuICAgIGlmICghJGxhYmVsLmxlbmd0aCkge1xuICAgICAgcmV0dXJuICRlbC5jbG9zZXN0KCdsYWJlbCcpO1xuICAgIH1cblxuICAgIHJldHVybiAkbGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzZXQgb2YgbGFiZWxzIGFzc29jaWF0ZWQgd2l0aCBhIHNldCBvZiByYWRpbyBlbHMgaW4gdGhpcyBvcmRlclxuICAgKiAyLiBUaGUgPGxhYmVsPiB3aXRoIHRoZSBhdHRyaWJ1dGUgYFtmb3I9XCJzb21lSW5wdXRJZFwiXWBcbiAgICogMy4gVGhlIGAuY2xvc2VzdCgpYCA8bGFiZWw+XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWwgLSBqUXVlcnkgb2JqZWN0IHRvIGNoZWNrIGZvciByZXF1aXJlZCBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMge0Jvb2xlYW59IEJvb2xlYW4gdmFsdWUgZGVwZW5kcyBvbiB3aGV0aGVyIG9yIG5vdCBhdHRyaWJ1dGUgaXMgY2hlY2tlZCBvciBlbXB0eVxuICAgKi9cbiAgZmluZFJhZGlvTGFiZWxzKCRlbHMpIHtcbiAgICB2YXIgbGFiZWxzID0gJGVscy5tYXAoKGksIGVsKSA9PiB7XG4gICAgICB2YXIgaWQgPSBlbC5pZDtcbiAgICAgIHZhciAkbGFiZWwgPSB0aGlzLiRlbGVtZW50LmZpbmQoYGxhYmVsW2Zvcj1cIiR7aWR9XCJdYCk7XG5cbiAgICAgIGlmICghJGxhYmVsLmxlbmd0aCkge1xuICAgICAgICAkbGFiZWwgPSAkKGVsKS5jbG9zZXN0KCdsYWJlbCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICRsYWJlbFswXTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkKGxhYmVscyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyB0aGUgQ1NTIGVycm9yIGNsYXNzIGFzIHNwZWNpZmllZCBieSB0aGUgQWJpZGUgc2V0dGluZ3MgdG8gdGhlIGxhYmVsLCBpbnB1dCwgYW5kIHRoZSBmb3JtXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWwgLSBqUXVlcnkgb2JqZWN0IHRvIGFkZCB0aGUgY2xhc3MgdG9cbiAgICovXG4gIGFkZEVycm9yQ2xhc3NlcygkZWwpIHtcbiAgICB2YXIgJGxhYmVsID0gdGhpcy5maW5kTGFiZWwoJGVsKTtcbiAgICB2YXIgJGZvcm1FcnJvciA9IHRoaXMuZmluZEZvcm1FcnJvcigkZWwpO1xuXG4gICAgaWYgKCRsYWJlbC5sZW5ndGgpIHtcbiAgICAgICRsYWJlbC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMubGFiZWxFcnJvckNsYXNzKTtcbiAgICB9XG5cbiAgICBpZiAoJGZvcm1FcnJvci5sZW5ndGgpIHtcbiAgICAgICRmb3JtRXJyb3IuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmZvcm1FcnJvckNsYXNzKTtcbiAgICB9XG5cbiAgICAkZWwuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmlucHV0RXJyb3JDbGFzcykuYXR0cignZGF0YS1pbnZhbGlkJywgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBDU1MgZXJyb3IgY2xhc3NlcyBldGMgZnJvbSBhbiBlbnRpcmUgcmFkaW8gYnV0dG9uIGdyb3VwXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBncm91cE5hbWUgLSBBIHN0cmluZyB0aGF0IHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIHJhZGlvIGJ1dHRvbiBncm91cFxuICAgKlxuICAgKi9cblxuICByZW1vdmVSYWRpb0Vycm9yQ2xhc3Nlcyhncm91cE5hbWUpIHtcbiAgICB2YXIgJGVscyA9IHRoaXMuJGVsZW1lbnQuZmluZChgOnJhZGlvW25hbWU9XCIke2dyb3VwTmFtZX1cIl1gKTtcbiAgICB2YXIgJGxhYmVscyA9IHRoaXMuZmluZFJhZGlvTGFiZWxzKCRlbHMpO1xuICAgIHZhciAkZm9ybUVycm9ycyA9IHRoaXMuZmluZEZvcm1FcnJvcigkZWxzKTtcblxuICAgIGlmICgkbGFiZWxzLmxlbmd0aCkge1xuICAgICAgJGxhYmVscy5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMubGFiZWxFcnJvckNsYXNzKTtcbiAgICB9XG5cbiAgICBpZiAoJGZvcm1FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAkZm9ybUVycm9ycy5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZm9ybUVycm9yQ2xhc3MpO1xuICAgIH1cblxuICAgICRlbHMucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmlucHV0RXJyb3JDbGFzcykucmVtb3ZlQXR0cignZGF0YS1pbnZhbGlkJyk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIENTUyBlcnJvciBjbGFzcyBhcyBzcGVjaWZpZWQgYnkgdGhlIEFiaWRlIHNldHRpbmdzIGZyb20gdGhlIGxhYmVsLCBpbnB1dCwgYW5kIHRoZSBmb3JtXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWwgLSBqUXVlcnkgb2JqZWN0IHRvIHJlbW92ZSB0aGUgY2xhc3MgZnJvbVxuICAgKi9cbiAgcmVtb3ZlRXJyb3JDbGFzc2VzKCRlbCkge1xuICAgIC8vIHJhZGlvcyBuZWVkIHRvIGNsZWFyIGFsbCBvZiB0aGUgZWxzXG4gICAgaWYoJGVsWzBdLnR5cGUgPT0gJ3JhZGlvJykge1xuICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlUmFkaW9FcnJvckNsYXNzZXMoJGVsLmF0dHIoJ25hbWUnKSk7XG4gICAgfVxuXG4gICAgdmFyICRsYWJlbCA9IHRoaXMuZmluZExhYmVsKCRlbCk7XG4gICAgdmFyICRmb3JtRXJyb3IgPSB0aGlzLmZpbmRGb3JtRXJyb3IoJGVsKTtcblxuICAgIGlmICgkbGFiZWwubGVuZ3RoKSB7XG4gICAgICAkbGFiZWwucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmxhYmVsRXJyb3JDbGFzcyk7XG4gICAgfVxuXG4gICAgaWYgKCRmb3JtRXJyb3IubGVuZ3RoKSB7XG4gICAgICAkZm9ybUVycm9yLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5mb3JtRXJyb3JDbGFzcyk7XG4gICAgfVxuXG4gICAgJGVsLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5pbnB1dEVycm9yQ2xhc3MpLnJlbW92ZUF0dHIoJ2RhdGEtaW52YWxpZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdvZXMgdGhyb3VnaCBhIGZvcm0gdG8gZmluZCBpbnB1dHMgYW5kIHByb2NlZWRzIHRvIHZhbGlkYXRlIHRoZW0gaW4gd2F5cyBzcGVjaWZpYyB0byB0aGVpciB0eXBlXG4gICAqIEBmaXJlcyBBYmlkZSNpbnZhbGlkXG4gICAqIEBmaXJlcyBBYmlkZSN2YWxpZFxuICAgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gdmFsaWRhdGUsIHNob3VsZCBiZSBhbiBIVE1MIGlucHV0XG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBnb29kVG9HbyAtIElmIHRoZSBpbnB1dCBpcyB2YWxpZCBvciBub3QuXG4gICAqL1xuICB2YWxpZGF0ZUlucHV0KCRlbCkge1xuICAgIHZhciBjbGVhclJlcXVpcmUgPSB0aGlzLnJlcXVpcmVkQ2hlY2soJGVsKSxcbiAgICAgICAgdmFsaWRhdGVkID0gZmFsc2UsXG4gICAgICAgIGN1c3RvbVZhbGlkYXRvciA9IHRydWUsXG4gICAgICAgIHZhbGlkYXRvciA9ICRlbC5hdHRyKCdkYXRhLXZhbGlkYXRvcicpLFxuICAgICAgICBlcXVhbFRvID0gdHJ1ZTtcblxuICAgIC8vIGRvbid0IHZhbGlkYXRlIGlnbm9yZWQgaW5wdXRzIG9yIGhpZGRlbiBpbnB1dHNcbiAgICBpZiAoJGVsLmlzKCdbZGF0YS1hYmlkZS1pZ25vcmVdJykgfHwgJGVsLmlzKCdbdHlwZT1cImhpZGRlblwiXScpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKCRlbFswXS50eXBlKSB7XG4gICAgICBjYXNlICdyYWRpbyc6XG4gICAgICAgIHZhbGlkYXRlZCA9IHRoaXMudmFsaWRhdGVSYWRpbygkZWwuYXR0cignbmFtZScpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgdmFsaWRhdGVkID0gY2xlYXJSZXF1aXJlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGNhc2UgJ3NlbGVjdC1vbmUnOlxuICAgICAgY2FzZSAnc2VsZWN0LW11bHRpcGxlJzpcbiAgICAgICAgdmFsaWRhdGVkID0gY2xlYXJSZXF1aXJlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFsaWRhdGVkID0gdGhpcy52YWxpZGF0ZVRleHQoJGVsKTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjdXN0b21WYWxpZGF0b3IgPSB0aGlzLm1hdGNoVmFsaWRhdGlvbigkZWwsIHZhbGlkYXRvciwgJGVsLmF0dHIoJ3JlcXVpcmVkJykpO1xuICAgIH1cblxuICAgIGlmICgkZWwuYXR0cignZGF0YS1lcXVhbHRvJykpIHtcbiAgICAgIGVxdWFsVG8gPSB0aGlzLm9wdGlvbnMudmFsaWRhdG9ycy5lcXVhbFRvKCRlbCk7XG4gICAgfVxuXG5cbiAgICB2YXIgZ29vZFRvR28gPSBbY2xlYXJSZXF1aXJlLCB2YWxpZGF0ZWQsIGN1c3RvbVZhbGlkYXRvciwgZXF1YWxUb10uaW5kZXhPZihmYWxzZSkgPT09IC0xO1xuICAgIHZhciBtZXNzYWdlID0gKGdvb2RUb0dvID8gJ3ZhbGlkJyA6ICdpbnZhbGlkJykgKyAnLnpmLmFiaWRlJztcblxuICAgIGlmIChnb29kVG9Hbykge1xuICAgICAgLy8gUmUtdmFsaWRhdGUgaW5wdXRzIHRoYXQgZGVwZW5kIG9uIHRoaXMgb25lIHdpdGggZXF1YWx0b1xuICAgICAgY29uc3QgZGVwZW5kZW50RWxlbWVudHMgPSB0aGlzLiRlbGVtZW50LmZpbmQoYFtkYXRhLWVxdWFsdG89XCIkeyRlbC5hdHRyKCdpZCcpfVwiXWApO1xuICAgICAgaWYgKGRlcGVuZGVudEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgICAgICBkZXBlbmRlbnRFbGVtZW50cy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpKSB7XG4gICAgICAgICAgICBfdGhpcy52YWxpZGF0ZUlucHV0KCQodGhpcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1tnb29kVG9HbyA/ICdyZW1vdmVFcnJvckNsYXNzZXMnIDogJ2FkZEVycm9yQ2xhc3NlcyddKCRlbCk7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBpbnB1dCBpcyBkb25lIGNoZWNraW5nIGZvciB2YWxpZGF0aW9uLiBFdmVudCB0cmlnZ2VyIGlzIGVpdGhlciBgdmFsaWQuemYuYWJpZGVgIG9yIGBpbnZhbGlkLnpmLmFiaWRlYFxuICAgICAqIFRyaWdnZXIgaW5jbHVkZXMgdGhlIERPTSBlbGVtZW50IG9mIHRoZSBpbnB1dC5cbiAgICAgKiBAZXZlbnQgQWJpZGUjdmFsaWRcbiAgICAgKiBAZXZlbnQgQWJpZGUjaW52YWxpZFxuICAgICAqL1xuICAgICRlbC50cmlnZ2VyKG1lc3NhZ2UsIFskZWxdKTtcblxuICAgIHJldHVybiBnb29kVG9HbztcbiAgfVxuXG4gIC8qKlxuICAgKiBHb2VzIHRocm91Z2ggYSBmb3JtIGFuZCBpZiB0aGVyZSBhcmUgYW55IGludmFsaWQgaW5wdXRzLCBpdCB3aWxsIGRpc3BsYXkgdGhlIGZvcm0gZXJyb3IgZWxlbWVudFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gbm9FcnJvciAtIHRydWUgaWYgbm8gZXJyb3JzIHdlcmUgZGV0ZWN0ZWQuLi5cbiAgICogQGZpcmVzIEFiaWRlI2Zvcm12YWxpZFxuICAgKiBAZmlyZXMgQWJpZGUjZm9ybWludmFsaWRcbiAgICovXG4gIHZhbGlkYXRlRm9ybSgpIHtcbiAgICB2YXIgYWNjID0gW107XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJGlucHV0cy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgYWNjLnB1c2goX3RoaXMudmFsaWRhdGVJbnB1dCgkKHRoaXMpKSk7XG4gICAgfSk7XG5cbiAgICB2YXIgbm9FcnJvciA9IGFjYy5pbmRleE9mKGZhbHNlKSA9PT0gLTE7XG5cbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLWFiaWRlLWVycm9yXScpLmNzcygnZGlzcGxheScsIChub0Vycm9yID8gJ25vbmUnIDogJ2Jsb2NrJykpO1xuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgZm9ybSBpcyBmaW5pc2hlZCB2YWxpZGF0aW5nLiBFdmVudCB0cmlnZ2VyIGlzIGVpdGhlciBgZm9ybXZhbGlkLnpmLmFiaWRlYCBvciBgZm9ybWludmFsaWQuemYuYWJpZGVgLlxuICAgICAqIFRyaWdnZXIgaW5jbHVkZXMgdGhlIGVsZW1lbnQgb2YgdGhlIGZvcm0uXG4gICAgICogQGV2ZW50IEFiaWRlI2Zvcm12YWxpZFxuICAgICAqIEBldmVudCBBYmlkZSNmb3JtaW52YWxpZFxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigobm9FcnJvciA/ICdmb3JtdmFsaWQnIDogJ2Zvcm1pbnZhbGlkJykgKyAnLnpmLmFiaWRlJywgW3RoaXMuJGVsZW1lbnRdKTtcblxuICAgIHJldHVybiBub0Vycm9yO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBvciBhIG5vdCBhIHRleHQgaW5wdXQgaXMgdmFsaWQgYmFzZWQgb24gdGhlIHBhdHRlcm4gc3BlY2lmaWVkIGluIHRoZSBhdHRyaWJ1dGUuIElmIG5vIG1hdGNoaW5nIHBhdHRlcm4gaXMgZm91bmQsIHJldHVybnMgdHJ1ZS5cbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbCAtIGpRdWVyeSBvYmplY3QgdG8gdmFsaWRhdGUsIHNob3VsZCBiZSBhIHRleHQgaW5wdXQgSFRNTCBlbGVtZW50XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXR0ZXJuIC0gc3RyaW5nIHZhbHVlIG9mIG9uZSBvZiB0aGUgUmVnRXggcGF0dGVybnMgaW4gQWJpZGUub3B0aW9ucy5wYXR0ZXJuc1xuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gQm9vbGVhbiB2YWx1ZSBkZXBlbmRzIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBpbnB1dCB2YWx1ZSBtYXRjaGVzIHRoZSBwYXR0ZXJuIHNwZWNpZmllZFxuICAgKi9cbiAgdmFsaWRhdGVUZXh0KCRlbCwgcGF0dGVybikge1xuICAgIC8vIEEgcGF0dGVybiBjYW4gYmUgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgYmUgaW5mZXJlZCBmcm9tIHRoZSBpbnB1dCdzIFwicGF0dGVyblwiIGF0dHJpYnV0ZSwgb3IgaXQncyBcInR5cGVcIiBhdHRyaWJ1dGVcbiAgICBwYXR0ZXJuID0gKHBhdHRlcm4gfHwgJGVsLmF0dHIoJ3BhdHRlcm4nKSB8fCAkZWwuYXR0cigndHlwZScpKTtcbiAgICB2YXIgaW5wdXRUZXh0ID0gJGVsLnZhbCgpO1xuICAgIHZhciB2YWxpZCA9IGZhbHNlO1xuXG4gICAgaWYgKGlucHV0VGV4dC5sZW5ndGgpIHtcbiAgICAgIC8vIElmIHRoZSBwYXR0ZXJuIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudCBpcyBpbiBBYmlkZSdzIGxpc3Qgb2YgcGF0dGVybnMsIHRoZW4gdGVzdCB0aGF0IHJlZ2V4cFxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wYXR0ZXJucy5oYXNPd25Qcm9wZXJ0eShwYXR0ZXJuKSkge1xuICAgICAgICB2YWxpZCA9IHRoaXMub3B0aW9ucy5wYXR0ZXJuc1twYXR0ZXJuXS50ZXN0KGlucHV0VGV4dCk7XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGUgcGF0dGVybiBuYW1lIGlzbid0IGFsc28gdGhlIHR5cGUgYXR0cmlidXRlIG9mIHRoZSBmaWVsZCwgdGhlbiB0ZXN0IGl0IGFzIGEgcmVnZXhwXG4gICAgICBlbHNlIGlmIChwYXR0ZXJuICE9PSAkZWwuYXR0cigndHlwZScpKSB7XG4gICAgICAgIHZhbGlkID0gbmV3IFJlZ0V4cChwYXR0ZXJuKS50ZXN0KGlucHV0VGV4dCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFsaWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBbiBlbXB0eSBmaWVsZCBpcyB2YWxpZCBpZiBpdCdzIG5vdCByZXF1aXJlZFxuICAgIGVsc2UgaWYgKCEkZWwucHJvcCgncmVxdWlyZWQnKSkge1xuICAgICAgdmFsaWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZDtcbiAgIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIGEgbm90IGEgcmFkaW8gaW5wdXQgaXMgdmFsaWQgYmFzZWQgb24gd2hldGhlciBvciBub3QgaXQgaXMgcmVxdWlyZWQgYW5kIHNlbGVjdGVkLiBBbHRob3VnaCB0aGUgZnVuY3Rpb24gdGFyZ2V0cyBhIHNpbmdsZSBgPGlucHV0PmAsIGl0IHZhbGlkYXRlcyBieSBjaGVja2luZyB0aGUgYHJlcXVpcmVkYCBhbmQgYGNoZWNrZWRgIHByb3BlcnRpZXMgb2YgYWxsIHJhZGlvIGJ1dHRvbnMgaW4gaXRzIGdyb3VwLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZ3JvdXBOYW1lIC0gQSBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSByYWRpbyBidXR0b24gZ3JvdXBcbiAgICogQHJldHVybnMge0Jvb2xlYW59IEJvb2xlYW4gdmFsdWUgZGVwZW5kcyBvbiB3aGV0aGVyIG9yIG5vdCBhdCBsZWFzdCBvbmUgcmFkaW8gaW5wdXQgaGFzIGJlZW4gc2VsZWN0ZWQgKGlmIGl0J3MgcmVxdWlyZWQpXG4gICAqL1xuICB2YWxpZGF0ZVJhZGlvKGdyb3VwTmFtZSkge1xuICAgIC8vIElmIGF0IGxlYXN0IG9uZSByYWRpbyBpbiB0aGUgZ3JvdXAgaGFzIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZSwgdGhlIGdyb3VwIGlzIGNvbnNpZGVyZWQgcmVxdWlyZWRcbiAgICAvLyBQZXIgVzNDIHNwZWMsIGFsbCByYWRpbyBidXR0b25zIGluIGEgZ3JvdXAgc2hvdWxkIGhhdmUgYHJlcXVpcmVkYCwgYnV0IHdlJ3JlIGJlaW5nIG5pY2VcbiAgICB2YXIgJGdyb3VwID0gdGhpcy4kZWxlbWVudC5maW5kKGA6cmFkaW9bbmFtZT1cIiR7Z3JvdXBOYW1lfVwiXWApO1xuICAgIHZhciB2YWxpZCA9IGZhbHNlLCByZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLy8gRm9yIHRoZSBncm91cCB0byBiZSByZXF1aXJlZCwgYXQgbGVhc3Qgb25lIHJhZGlvIG5lZWRzIHRvIGJlIHJlcXVpcmVkXG4gICAgJGdyb3VwLmVhY2goKGksIGUpID0+IHtcbiAgICAgIGlmICgkKGUpLmF0dHIoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgcmVxdWlyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmKCFyZXF1aXJlZCkgdmFsaWQ9dHJ1ZTtcblxuICAgIGlmICghdmFsaWQpIHtcbiAgICAgIC8vIEZvciB0aGUgZ3JvdXAgdG8gYmUgdmFsaWQsIGF0IGxlYXN0IG9uZSByYWRpbyBuZWVkcyB0byBiZSBjaGVja2VkXG4gICAgICAkZ3JvdXAuZWFjaCgoaSwgZSkgPT4ge1xuICAgICAgICBpZiAoJChlKS5wcm9wKCdjaGVja2VkJykpIHtcbiAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIHNlbGVjdGVkIGlucHV0IHBhc3NlcyBhIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBNdWx0aXBsZSB2YWxpZGF0aW9ucyBjYW4gYmUgdXNlZCwgaWYgcGFzc2VkIHRvIHRoZSBlbGVtZW50IHdpdGggYGRhdGEtdmFsaWRhdG9yPVwiZm9vIGJhciBiYXpcImAgaW4gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdGVkLlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IGlucHV0IGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWxpZGF0b3JzIC0gYSBzdHJpbmcgb2YgZnVuY3Rpb24gbmFtZXMgbWF0Y2hpbmcgZnVuY3Rpb25zIGluIHRoZSBBYmlkZS5vcHRpb25zLnZhbGlkYXRvcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlcXVpcmVkIC0gc2VsZiBleHBsYW5hdG9yeT9cbiAgICogQHJldHVybnMge0Jvb2xlYW59IC0gdHJ1ZSBpZiB2YWxpZGF0aW9ucyBwYXNzZWQuXG4gICAqL1xuICBtYXRjaFZhbGlkYXRpb24oJGVsLCB2YWxpZGF0b3JzLCByZXF1aXJlZCkge1xuICAgIHJlcXVpcmVkID0gcmVxdWlyZWQgPyB0cnVlIDogZmFsc2U7XG5cbiAgICB2YXIgY2xlYXIgPSB2YWxpZGF0b3JzLnNwbGl0KCcgJykubWFwKCh2KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZhbGlkYXRvcnNbdl0oJGVsLCByZXF1aXJlZCwgJGVsLnBhcmVudCgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2xlYXIuaW5kZXhPZihmYWxzZSkgPT09IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBmb3JtIGlucHV0cyBhbmQgc3R5bGVzXG4gICAqIEBmaXJlcyBBYmlkZSNmb3JtcmVzZXRcbiAgICovXG4gIHJlc2V0Rm9ybSgpIHtcbiAgICB2YXIgJGZvcm0gPSB0aGlzLiRlbGVtZW50LFxuICAgICAgICBvcHRzID0gdGhpcy5vcHRpb25zO1xuXG4gICAgJChgLiR7b3B0cy5sYWJlbEVycm9yQ2xhc3N9YCwgJGZvcm0pLm5vdCgnc21hbGwnKS5yZW1vdmVDbGFzcyhvcHRzLmxhYmVsRXJyb3JDbGFzcyk7XG4gICAgJChgLiR7b3B0cy5pbnB1dEVycm9yQ2xhc3N9YCwgJGZvcm0pLm5vdCgnc21hbGwnKS5yZW1vdmVDbGFzcyhvcHRzLmlucHV0RXJyb3JDbGFzcyk7XG4gICAgJChgJHtvcHRzLmZvcm1FcnJvclNlbGVjdG9yfS4ke29wdHMuZm9ybUVycm9yQ2xhc3N9YCkucmVtb3ZlQ2xhc3Mob3B0cy5mb3JtRXJyb3JDbGFzcyk7XG4gICAgJGZvcm0uZmluZCgnW2RhdGEtYWJpZGUtZXJyb3JdJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAkKCc6aW5wdXQnLCAkZm9ybSkubm90KCc6YnV0dG9uLCA6c3VibWl0LCA6cmVzZXQsIDpoaWRkZW4sIDpyYWRpbywgOmNoZWNrYm94LCBbZGF0YS1hYmlkZS1pZ25vcmVdJykudmFsKCcnKS5yZW1vdmVBdHRyKCdkYXRhLWludmFsaWQnKTtcbiAgICAkKCc6aW5wdXQ6cmFkaW8nLCAkZm9ybSkubm90KCdbZGF0YS1hYmlkZS1pZ25vcmVdJykucHJvcCgnY2hlY2tlZCcsZmFsc2UpLnJlbW92ZUF0dHIoJ2RhdGEtaW52YWxpZCcpO1xuICAgICQoJzppbnB1dDpjaGVja2JveCcsICRmb3JtKS5ub3QoJ1tkYXRhLWFiaWRlLWlnbm9yZV0nKS5wcm9wKCdjaGVja2VkJyxmYWxzZSkucmVtb3ZlQXR0cignZGF0YS1pbnZhbGlkJyk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgZm9ybSBoYXMgYmVlbiByZXNldC5cbiAgICAgKiBAZXZlbnQgQWJpZGUjZm9ybXJlc2V0XG4gICAgICovXG4gICAgJGZvcm0udHJpZ2dlcignZm9ybXJlc2V0LnpmLmFiaWRlJywgWyRmb3JtXSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgQWJpZGUuXG4gICAqIFJlbW92ZXMgZXJyb3Igc3R5bGVzIGFuZCBjbGFzc2VzIGZyb20gZWxlbWVudHMsIHdpdGhvdXQgcmVzZXR0aW5nIHRoZWlyIHZhbHVlcy5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAub2ZmKCcuYWJpZGUnKVxuICAgICAgLmZpbmQoJ1tkYXRhLWFiaWRlLWVycm9yXScpXG4gICAgICAgIC5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuXG4gICAgdGhpcy4kaW5wdXRzXG4gICAgICAub2ZmKCcuYWJpZGUnKVxuICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLnJlbW92ZUVycm9yQ2xhc3NlcygkKHRoaXMpKTtcbiAgICAgIH0pO1xuXG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBzZXR0aW5ncyBmb3IgcGx1Z2luXG4gKi9cbkFiaWRlLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgZXZlbnQgdG8gdmFsaWRhdGUgaW5wdXRzLiBDaGVja2JveGVzIGFuZCByYWRpb3MgdmFsaWRhdGUgaW1tZWRpYXRlbHkuXG4gICAqIFJlbW92ZSBvciBjaGFuZ2UgdGhpcyB2YWx1ZSBmb3IgbWFudWFsIHZhbGlkYXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ2ZpZWxkQ2hhbmdlJ1xuICAgKi9cbiAgdmFsaWRhdGVPbjogJ2ZpZWxkQ2hhbmdlJyxcblxuICAvKipcbiAgICogQ2xhc3MgdG8gYmUgYXBwbGllZCB0byBpbnB1dCBsYWJlbHMgb24gZmFpbGVkIHZhbGlkYXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ2lzLWludmFsaWQtbGFiZWwnXG4gICAqL1xuICBsYWJlbEVycm9yQ2xhc3M6ICdpcy1pbnZhbGlkLWxhYmVsJyxcblxuICAvKipcbiAgICogQ2xhc3MgdG8gYmUgYXBwbGllZCB0byBpbnB1dHMgb24gZmFpbGVkIHZhbGlkYXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ2lzLWludmFsaWQtaW5wdXQnXG4gICAqL1xuICBpbnB1dEVycm9yQ2xhc3M6ICdpcy1pbnZhbGlkLWlucHV0JyxcblxuICAvKipcbiAgICogQ2xhc3Mgc2VsZWN0b3IgdG8gdXNlIHRvIHRhcmdldCBGb3JtIEVycm9ycyBmb3Igc2hvdy9oaWRlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICcuZm9ybS1lcnJvcidcbiAgICovXG4gIGZvcm1FcnJvclNlbGVjdG9yOiAnLmZvcm0tZXJyb3InLFxuXG4gIC8qKlxuICAgKiBDbGFzcyBhZGRlZCB0byBGb3JtIEVycm9ycyBvbiBmYWlsZWQgdmFsaWRhdGlvbi5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnaXMtdmlzaWJsZSdcbiAgICovXG4gIGZvcm1FcnJvckNsYXNzOiAnaXMtdmlzaWJsZScsXG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIHZhbGlkYXRlIHRleHQgaW5wdXRzIG9uIGFueSB2YWx1ZSBjaGFuZ2UuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIGxpdmVWYWxpZGF0ZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIHZhbGlkYXRlIGlucHV0cyBvbiBibHVyLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICB2YWxpZGF0ZU9uQmx1cjogZmFsc2UsXG5cbiAgcGF0dGVybnM6IHtcbiAgICBhbHBoYSA6IC9eW2EtekEtWl0rJC8sXG4gICAgYWxwaGFfbnVtZXJpYyA6IC9eW2EtekEtWjAtOV0rJC8sXG4gICAgaW50ZWdlciA6IC9eWy0rXT9cXGQrJC8sXG4gICAgbnVtYmVyIDogL15bLStdP1xcZCooPzpbXFwuXFwsXVxcZCspPyQvLFxuXG4gICAgLy8gYW1leCwgdmlzYSwgZGluZXJzXG4gICAgY2FyZCA6IC9eKD86NFswLTldezEyfSg/OlswLTldezN9KT98NVsxLTVdWzAtOV17MTR9fDYoPzowMTF8NVswLTldWzAtOV0pWzAtOV17MTJ9fDNbNDddWzAtOV17MTN9fDMoPzowWzAtNV18WzY4XVswLTldKVswLTldezExfXwoPzoyMTMxfDE4MDB8MzVcXGR7M30pXFxkezExfSkkLyxcbiAgICBjdnYgOiAvXihbMC05XSl7Myw0fSQvLFxuXG4gICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uvc3RhdGVzLW9mLXRoZS10eXBlLWF0dHJpYnV0ZS5odG1sI3ZhbGlkLWUtbWFpbC1hZGRyZXNzXG4gICAgZW1haWwgOiAvXlthLXpBLVowLTkuISMkJSYnKitcXC89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSskLyxcblxuICAgIHVybCA6IC9eKGh0dHBzP3xmdHB8ZmlsZXxzc2gpOlxcL1xcLygoKChbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6KSpAKT8oKChcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSkpfCgoKFthLXpBLVpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16QS1aXXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpBLVpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16QS1aXXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2EtekEtWl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2EtekEtWl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpBLVpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16QS1aXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLj8pKDpcXGQqKT8pKFxcLygoKFthLXpBLVpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCkrKFxcLygoW2EtekEtWl18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKSopKik/KT8oXFw/KCgoW2EtekEtWl18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKXxbXFx1RTAwMC1cXHVGOEZGXXxcXC98XFw/KSopPyhcXCMoKChbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApfFxcL3xcXD8pKik/JC8sXG4gICAgLy8gYWJjLmRlXG4gICAgZG9tYWluIDogL14oW2EtekEtWjAtOV0oW2EtekEtWjAtOVxcLV17MCw2MX1bYS16QS1aMC05XSk/XFwuKStbYS16QS1aXXsyLDh9JC8sXG5cbiAgICBkYXRldGltZSA6IC9eKFswLTJdWzAtOV17M30pXFwtKFswLTFdWzAtOV0pXFwtKFswLTNdWzAtOV0pVChbMC01XVswLTldKVxcOihbMC01XVswLTldKVxcOihbMC01XVswLTldKShafChbXFwtXFwrXShbMC0xXVswLTldKVxcOjAwKSkkLyxcbiAgICAvLyBZWVlZLU1NLUREXG4gICAgZGF0ZSA6IC8oPzoxOXwyMClbMC05XXsyfS0oPzooPzowWzEtOV18MVswLTJdKS0oPzowWzEtOV18MVswLTldfDJbMC05XSl8KD86KD8hMDIpKD86MFsxLTldfDFbMC0yXSktKD86MzApKXwoPzooPzowWzEzNTc4XXwxWzAyXSktMzEpKSQvLFxuICAgIC8vIEhIOk1NOlNTXG4gICAgdGltZSA6IC9eKDBbMC05XXwxWzAtOV18MlswLTNdKSg6WzAtNV1bMC05XSl7Mn0kLyxcbiAgICBkYXRlSVNPIDogL15cXGR7NH1bXFwvXFwtXVxcZHsxLDJ9W1xcL1xcLV1cXGR7MSwyfSQvLFxuICAgIC8vIE1NL0REL1lZWVlcbiAgICBtb250aF9kYXlfeWVhciA6IC9eKDBbMS05XXwxWzAxMl0pWy0gXFwvLl0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSlbLSBcXC8uXVxcZHs0fSQvLFxuICAgIC8vIEREL01NL1lZWVlcbiAgICBkYXlfbW9udGhfeWVhciA6IC9eKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gXFwvLl0oMFsxLTldfDFbMDEyXSlbLSBcXC8uXVxcZHs0fSQvLFxuXG4gICAgLy8gI0ZGRiBvciAjRkZGRkZGXG4gICAgY29sb3IgOiAvXiM/KFthLWZBLUYwLTldezZ9fFthLWZBLUYwLTldezN9KSQvXG4gIH0sXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHZhbGlkYXRpb24gZnVuY3Rpb25zIHRvIGJlIHVzZWQuIGBlcXVhbFRvYCBiZWluZyB0aGUgb25seSBkZWZhdWx0IGluY2x1ZGVkIGZ1bmN0aW9uLlxuICAgKiBGdW5jdGlvbnMgc2hvdWxkIHJldHVybiBvbmx5IGEgYm9vbGVhbiBpZiB0aGUgaW5wdXQgaXMgdmFsaWQgb3Igbm90LiBGdW5jdGlvbnMgYXJlIGdpdmVuIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOlxuICAgKiBlbCA6IFRoZSBqUXVlcnkgZWxlbWVudCB0byB2YWxpZGF0ZS5cbiAgICogcmVxdWlyZWQgOiBCb29sZWFuIHZhbHVlIG9mIHRoZSByZXF1aXJlZCBhdHRyaWJ1dGUgYmUgcHJlc2VudCBvciBub3QuXG4gICAqIHBhcmVudCA6IFRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBpbnB1dC5cbiAgICogQG9wdGlvblxuICAgKi9cbiAgdmFsaWRhdG9yczoge1xuICAgIGVxdWFsVG86IGZ1bmN0aW9uIChlbCwgcmVxdWlyZWQsIHBhcmVudCkge1xuICAgICAgcmV0dXJuICQoYCMke2VsLmF0dHIoJ2RhdGEtZXF1YWx0bycpfWApLnZhbCgpID09PSBlbC52YWwoKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKEFiaWRlLCAnQWJpZGUnKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIEFjY29yZGlvbiBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uYWNjb3JkaW9uXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmtleWJvYXJkXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1vdGlvblxuICovXG5cbmNsYXNzIEFjY29yZGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGFuIGFjY29yZGlvbi5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBBY2NvcmRpb24jaW5pdFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBpbnRvIGFuIGFjY29yZGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBhIHBsYWluIG9iamVjdCB3aXRoIHNldHRpbmdzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG9wdGlvbnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIEFjY29yZGlvbi5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnQWNjb3JkaW9uJyk7XG4gICAgRm91bmRhdGlvbi5LZXlib2FyZC5yZWdpc3RlcignQWNjb3JkaW9uJywge1xuICAgICAgJ0VOVEVSJzogJ3RvZ2dsZScsXG4gICAgICAnU1BBQ0UnOiAndG9nZ2xlJyxcbiAgICAgICdBUlJPV19ET1dOJzogJ25leHQnLFxuICAgICAgJ0FSUk9XX1VQJzogJ3ByZXZpb3VzJ1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBhY2NvcmRpb24gYnkgYW5pbWF0aW5nIHRoZSBwcmVzZXQgYWN0aXZlIHBhbmUocykuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ3JvbGUnLCAndGFibGlzdCcpO1xuICAgIHRoaXMuJHRhYnMgPSB0aGlzLiRlbGVtZW50LmNoaWxkcmVuKCdbZGF0YS1hY2NvcmRpb24taXRlbV0nKTtcblxuICAgIHRoaXMuJHRhYnMuZWFjaChmdW5jdGlvbihpZHgsIGVsKSB7XG4gICAgICB2YXIgJGVsID0gJChlbCksXG4gICAgICAgICAgJGNvbnRlbnQgPSAkZWwuY2hpbGRyZW4oJ1tkYXRhLXRhYi1jb250ZW50XScpLFxuICAgICAgICAgIGlkID0gJGNvbnRlbnRbMF0uaWQgfHwgRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAnYWNjb3JkaW9uJyksXG4gICAgICAgICAgbGlua0lkID0gZWwuaWQgfHwgYCR7aWR9LWxhYmVsYDtcblxuICAgICAgJGVsLmZpbmQoJ2E6Zmlyc3QnKS5hdHRyKHtcbiAgICAgICAgJ2FyaWEtY29udHJvbHMnOiBpZCxcbiAgICAgICAgJ3JvbGUnOiAndGFiJyxcbiAgICAgICAgJ2lkJzogbGlua0lkLFxuICAgICAgICAnYXJpYS1leHBhbmRlZCc6IGZhbHNlLFxuICAgICAgICAnYXJpYS1zZWxlY3RlZCc6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgJGNvbnRlbnQuYXR0cih7J3JvbGUnOiAndGFicGFuZWwnLCAnYXJpYS1sYWJlbGxlZGJ5JzogbGlua0lkLCAnYXJpYS1oaWRkZW4nOiB0cnVlLCAnaWQnOiBpZH0pO1xuICAgIH0pO1xuICAgIHZhciAkaW5pdEFjdGl2ZSA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmlzLWFjdGl2ZScpLmNoaWxkcmVuKCdbZGF0YS10YWItY29udGVudF0nKTtcbiAgICBpZigkaW5pdEFjdGl2ZS5sZW5ndGgpe1xuICAgICAgdGhpcy5kb3duKCRpbml0QWN0aXZlLCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBoYW5kbGVycyBmb3IgaXRlbXMgd2l0aGluIHRoZSBhY2NvcmRpb24uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLiR0YWJzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgJGVsZW0gPSAkKHRoaXMpO1xuICAgICAgdmFyICR0YWJDb250ZW50ID0gJGVsZW0uY2hpbGRyZW4oJ1tkYXRhLXRhYi1jb250ZW50XScpO1xuICAgICAgaWYgKCR0YWJDb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAkZWxlbS5jaGlsZHJlbignYScpLm9mZignY2xpY2suemYuYWNjb3JkaW9uIGtleWRvd24uemYuYWNjb3JkaW9uJylcbiAgICAgICAgICAgICAgIC5vbignY2xpY2suemYuYWNjb3JkaW9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy50b2dnbGUoJHRhYkNvbnRlbnQpO1xuICAgICAgICB9KS5vbigna2V5ZG93bi56Zi5hY2NvcmRpb24nLCBmdW5jdGlvbihlKXtcbiAgICAgICAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnQWNjb3JkaW9uJywge1xuICAgICAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgX3RoaXMudG9nZ2xlKCR0YWJDb250ZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyICRhID0gJGVsZW0ubmV4dCgpLmZpbmQoJ2EnKS5mb2N1cygpO1xuICAgICAgICAgICAgICBpZiAoIV90aGlzLm9wdGlvbnMubXVsdGlFeHBhbmQpIHtcbiAgICAgICAgICAgICAgICAkYS50cmlnZ2VyKCdjbGljay56Zi5hY2NvcmRpb24nKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgJGEgPSAkZWxlbS5wcmV2KCkuZmluZCgnYScpLmZvY3VzKCk7XG4gICAgICAgICAgICAgIGlmICghX3RoaXMub3B0aW9ucy5tdWx0aUV4cGFuZCkge1xuICAgICAgICAgICAgICAgICRhLnRyaWdnZXIoJ2NsaWNrLnpmLmFjY29yZGlvbicpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYW5kbGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBzZWxlY3RlZCBjb250ZW50IHBhbmUncyBvcGVuL2Nsb3NlIHN0YXRlLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHRhcmdldCAtIGpRdWVyeSBvYmplY3Qgb2YgdGhlIHBhbmUgdG8gdG9nZ2xlIChgLmFjY29yZGlvbi1jb250ZW50YCkuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgdG9nZ2xlKCR0YXJnZXQpIHtcbiAgICBpZigkdGFyZ2V0LnBhcmVudCgpLmhhc0NsYXNzKCdpcy1hY3RpdmUnKSkge1xuICAgICAgdGhpcy51cCgkdGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb3duKCR0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgYWNjb3JkaW9uIHRhYiBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBBY2NvcmRpb24gcGFuZSB0byBvcGVuIChgLmFjY29yZGlvbi1jb250ZW50YCkuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gZmlyc3RUaW1lIC0gZmxhZyB0byBkZXRlcm1pbmUgaWYgcmVmbG93IHNob3VsZCBoYXBwZW4uXG4gICAqIEBmaXJlcyBBY2NvcmRpb24jZG93blxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRvd24oJHRhcmdldCwgZmlyc3RUaW1lKSB7XG4gICAgJHRhcmdldFxuICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgZmFsc2UpXG4gICAgICAucGFyZW50KCdbZGF0YS10YWItY29udGVudF0nKVxuICAgICAgLmFkZEJhY2soKVxuICAgICAgLnBhcmVudCgpLmFkZENsYXNzKCdpcy1hY3RpdmUnKTtcblxuICAgIGlmICghdGhpcy5vcHRpb25zLm11bHRpRXhwYW5kICYmICFmaXJzdFRpbWUpIHtcbiAgICAgIHZhciAkY3VycmVudEFjdGl2ZSA9IHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oJy5pcy1hY3RpdmUnKS5jaGlsZHJlbignW2RhdGEtdGFiLWNvbnRlbnRdJyk7XG4gICAgICBpZiAoJGN1cnJlbnRBY3RpdmUubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudXAoJGN1cnJlbnRBY3RpdmUubm90KCR0YXJnZXQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkdGFyZ2V0LnNsaWRlRG93bih0aGlzLm9wdGlvbnMuc2xpZGVTcGVlZCwgKCkgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXJlcyB3aGVuIHRoZSB0YWIgaXMgZG9uZSBvcGVuaW5nLlxuICAgICAgICogQGV2ZW50IEFjY29yZGlvbiNkb3duXG4gICAgICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignZG93bi56Zi5hY2NvcmRpb24nLCBbJHRhcmdldF0pO1xuICAgIH0pO1xuXG4gICAgJChgIyR7JHRhcmdldC5hdHRyKCdhcmlhLWxhYmVsbGVkYnknKX1gKS5hdHRyKHtcbiAgICAgICdhcmlhLWV4cGFuZGVkJzogdHJ1ZSxcbiAgICAgICdhcmlhLXNlbGVjdGVkJzogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgdGFiIGRlZmluZWQgYnkgYCR0YXJnZXRgLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHRhcmdldCAtIEFjY29yZGlvbiB0YWIgdG8gY2xvc2UgKGAuYWNjb3JkaW9uLWNvbnRlbnRgKS5cbiAgICogQGZpcmVzIEFjY29yZGlvbiN1cFxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIHVwKCR0YXJnZXQpIHtcbiAgICB2YXIgJGF1bnRzID0gJHRhcmdldC5wYXJlbnQoKS5zaWJsaW5ncygpLFxuICAgICAgICBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZigoIXRoaXMub3B0aW9ucy5hbGxvd0FsbENsb3NlZCAmJiAhJGF1bnRzLmhhc0NsYXNzKCdpcy1hY3RpdmUnKSkgfHwgISR0YXJnZXQucGFyZW50KCkuaGFzQ2xhc3MoJ2lzLWFjdGl2ZScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm91bmRhdGlvbi5Nb3ZlKHRoaXMub3B0aW9ucy5zbGlkZVNwZWVkLCAkdGFyZ2V0LCBmdW5jdGlvbigpe1xuICAgICAgJHRhcmdldC5zbGlkZVVwKF90aGlzLm9wdGlvbnMuc2xpZGVTcGVlZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdGFiIGlzIGRvbmUgY29sbGFwc2luZyB1cC5cbiAgICAgICAgICogQGV2ZW50IEFjY29yZGlvbiN1cFxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMuJGVsZW1lbnQudHJpZ2dlcigndXAuemYuYWNjb3JkaW9uJywgWyR0YXJnZXRdKTtcbiAgICAgIH0pO1xuICAgIC8vIH0pO1xuXG4gICAgJHRhcmdldC5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpXG4gICAgICAgICAgIC5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlJyk7XG5cbiAgICAkKGAjJHskdGFyZ2V0LmF0dHIoJ2FyaWEtbGFiZWxsZWRieScpfWApLmF0dHIoe1xuICAgICAnYXJpYS1leHBhbmRlZCc6IGZhbHNlLFxuICAgICAnYXJpYS1zZWxlY3RlZCc6IGZhbHNlXG4gICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyBhbiBpbnN0YW5jZSBvZiBhbiBhY2NvcmRpb24uXG4gICAqIEBmaXJlcyBBY2NvcmRpb24jZGVzdHJveWVkXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLXRhYi1jb250ZW50XScpLnN0b3AodHJ1ZSkuc2xpZGVVcCgwKS5jc3MoJ2Rpc3BsYXknLCAnJyk7XG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdhJykub2ZmKCcuemYuYWNjb3JkaW9uJyk7XG5cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuQWNjb3JkaW9uLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQW1vdW50IG9mIHRpbWUgdG8gYW5pbWF0ZSB0aGUgb3BlbmluZyBvZiBhbiBhY2NvcmRpb24gcGFuZS5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAyNTBcbiAgICovXG4gIHNsaWRlU3BlZWQ6IDI1MCxcbiAgLyoqXG4gICAqIEFsbG93IHRoZSBhY2NvcmRpb24gdG8gaGF2ZSBtdWx0aXBsZSBvcGVuIHBhbmVzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBtdWx0aUV4cGFuZDogZmFsc2UsXG4gIC8qKlxuICAgKiBBbGxvdyB0aGUgYWNjb3JkaW9uIHRvIGNsb3NlIGFsbCBwYW5lcy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgYWxsb3dBbGxDbG9zZWQ6IGZhbHNlXG59O1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oQWNjb3JkaW9uLCAnQWNjb3JkaW9uJyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBBY2NvcmRpb25NZW51IG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5hY2NvcmRpb25NZW51XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmtleWJvYXJkXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1vdGlvblxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5uZXN0XG4gKi9cblxuY2xhc3MgQWNjb3JkaW9uTWVudSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGFuIGFjY29yZGlvbiBtZW51LlxuICAgKiBAY2xhc3NcbiAgICogQGZpcmVzIEFjY29yZGlvbk1lbnUjaW5pdFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBpbnRvIGFuIGFjY29yZGlvbiBtZW51LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIEFjY29yZGlvbk1lbnUuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIEZvdW5kYXRpb24uTmVzdC5GZWF0aGVyKHRoaXMuJGVsZW1lbnQsICdhY2NvcmRpb24nKTtcblxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ0FjY29yZGlvbk1lbnUnKTtcbiAgICBGb3VuZGF0aW9uLktleWJvYXJkLnJlZ2lzdGVyKCdBY2NvcmRpb25NZW51Jywge1xuICAgICAgJ0VOVEVSJzogJ3RvZ2dsZScsXG4gICAgICAnU1BBQ0UnOiAndG9nZ2xlJyxcbiAgICAgICdBUlJPV19SSUdIVCc6ICdvcGVuJyxcbiAgICAgICdBUlJPV19VUCc6ICd1cCcsXG4gICAgICAnQVJST1dfRE9XTic6ICdkb3duJyxcbiAgICAgICdBUlJPV19MRUZUJzogJ2Nsb3NlJyxcbiAgICAgICdFU0NBUEUnOiAnY2xvc2VBbGwnXG4gICAgfSk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBhY2NvcmRpb24gbWVudSBieSBoaWRpbmcgYWxsIG5lc3RlZCBtZW51cy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtc3VibWVudV0nKS5ub3QoJy5pcy1hY3RpdmUnKS5zbGlkZVVwKDApOy8vLmZpbmQoJ2EnKS5jc3MoJ3BhZGRpbmctbGVmdCcsICcxcmVtJyk7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKHtcbiAgICAgICdyb2xlJzogJ21lbnUnLFxuICAgICAgJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJzogdGhpcy5vcHRpb25zLm11bHRpT3BlblxuICAgIH0pO1xuXG4gICAgdGhpcy4kbWVudUxpbmtzID0gdGhpcy4kZWxlbWVudC5maW5kKCcuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50Jyk7XG4gICAgdGhpcy4kbWVudUxpbmtzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIHZhciBsaW5rSWQgPSB0aGlzLmlkIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ2FjYy1tZW51LWxpbmsnKSxcbiAgICAgICAgICAkZWxlbSA9ICQodGhpcyksXG4gICAgICAgICAgJHN1YiA9ICRlbGVtLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpLFxuICAgICAgICAgIHN1YklkID0gJHN1YlswXS5pZCB8fCBGb3VuZGF0aW9uLkdldFlvRGlnaXRzKDYsICdhY2MtbWVudScpLFxuICAgICAgICAgIGlzQWN0aXZlID0gJHN1Yi5oYXNDbGFzcygnaXMtYWN0aXZlJyk7XG4gICAgICAkZWxlbS5hdHRyKHtcbiAgICAgICAgJ2FyaWEtY29udHJvbHMnOiBzdWJJZCxcbiAgICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBpc0FjdGl2ZSxcbiAgICAgICAgJ3JvbGUnOiAnbWVudWl0ZW0nLFxuICAgICAgICAnaWQnOiBsaW5rSWRcbiAgICAgIH0pO1xuICAgICAgJHN1Yi5hdHRyKHtcbiAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IGxpbmtJZCxcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogIWlzQWN0aXZlLFxuICAgICAgICAncm9sZSc6ICdtZW51JyxcbiAgICAgICAgJ2lkJzogc3ViSWRcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBpbml0UGFuZXMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pcy1hY3RpdmUnKTtcbiAgICBpZihpbml0UGFuZXMubGVuZ3RoKXtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICBpbml0UGFuZXMuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICBfdGhpcy5kb3duKCQodGhpcykpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX2V2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgaGFuZGxlcnMgZm9yIGl0ZW1zIHdpdGhpbiB0aGUgbWVudS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnbGknKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyICRzdWJtZW51ID0gJCh0aGlzKS5jaGlsZHJlbignW2RhdGEtc3VibWVudV0nKTtcblxuICAgICAgaWYgKCRzdWJtZW51Lmxlbmd0aCkge1xuICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCdhJykub2ZmKCdjbGljay56Zi5hY2NvcmRpb25NZW51Jykub24oJ2NsaWNrLnpmLmFjY29yZGlvbk1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgX3RoaXMudG9nZ2xlKCRzdWJtZW51KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkub24oJ2tleWRvd24uemYuYWNjb3JkaW9ubWVudScsIGZ1bmN0aW9uKGUpe1xuICAgICAgdmFyICRlbGVtZW50ID0gJCh0aGlzKSxcbiAgICAgICAgICAkZWxlbWVudHMgPSAkZWxlbWVudC5wYXJlbnQoJ3VsJykuY2hpbGRyZW4oJ2xpJyksXG4gICAgICAgICAgJHByZXZFbGVtZW50LFxuICAgICAgICAgICRuZXh0RWxlbWVudCxcbiAgICAgICAgICAkdGFyZ2V0ID0gJGVsZW1lbnQuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJyk7XG5cbiAgICAgICRlbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgaWYgKCQodGhpcykuaXMoJGVsZW1lbnQpKSB7XG4gICAgICAgICAgJHByZXZFbGVtZW50ID0gJGVsZW1lbnRzLmVxKE1hdGgubWF4KDAsIGktMSkpLmZpbmQoJ2EnKS5maXJzdCgpO1xuICAgICAgICAgICRuZXh0RWxlbWVudCA9ICRlbGVtZW50cy5lcShNYXRoLm1pbihpKzEsICRlbGVtZW50cy5sZW5ndGgtMSkpLmZpbmQoJ2EnKS5maXJzdCgpO1xuXG4gICAgICAgICAgaWYgKCQodGhpcykuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdOnZpc2libGUnKS5sZW5ndGgpIHsgLy8gaGFzIG9wZW4gc3ViIG1lbnVcbiAgICAgICAgICAgICRuZXh0RWxlbWVudCA9ICRlbGVtZW50LmZpbmQoJ2xpOmZpcnN0LWNoaWxkJykuZmluZCgnYScpLmZpcnN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkKHRoaXMpLmlzKCc6Zmlyc3QtY2hpbGQnKSkgeyAvLyBpcyBmaXJzdCBlbGVtZW50IG9mIHN1YiBtZW51XG4gICAgICAgICAgICAkcHJldkVsZW1lbnQgPSAkZWxlbWVudC5wYXJlbnRzKCdsaScpLmZpcnN0KCkuZmluZCgnYScpLmZpcnN0KCk7XG4gICAgICAgICAgfSBlbHNlIGlmICgkcHJldkVsZW1lbnQucGFyZW50cygnbGknKS5maXJzdCgpLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XTp2aXNpYmxlJykubGVuZ3RoKSB7IC8vIGlmIHByZXZpb3VzIGVsZW1lbnQgaGFzIG9wZW4gc3ViIG1lbnVcbiAgICAgICAgICAgICRwcmV2RWxlbWVudCA9ICRwcmV2RWxlbWVudC5wYXJlbnRzKCdsaScpLmZpbmQoJ2xpOmxhc3QtY2hpbGQnKS5maW5kKCdhJykuZmlyc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCQodGhpcykuaXMoJzpsYXN0LWNoaWxkJykpIHsgLy8gaXMgbGFzdCBlbGVtZW50IG9mIHN1YiBtZW51XG4gICAgICAgICAgICAkbmV4dEVsZW1lbnQgPSAkZWxlbWVudC5wYXJlbnRzKCdsaScpLmZpcnN0KCkubmV4dCgnbGknKS5maW5kKCdhJykuZmlyc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnQWNjb3JkaW9uTWVudScsIHtcbiAgICAgICAgb3BlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCR0YXJnZXQuaXMoJzpoaWRkZW4nKSkge1xuICAgICAgICAgICAgX3RoaXMuZG93bigkdGFyZ2V0KTtcbiAgICAgICAgICAgICR0YXJnZXQuZmluZCgnbGknKS5maXJzdCgpLmZpbmQoJ2EnKS5maXJzdCgpLmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCR0YXJnZXQubGVuZ3RoICYmICEkdGFyZ2V0LmlzKCc6aGlkZGVuJykpIHsgLy8gY2xvc2UgYWN0aXZlIHN1YiBvZiB0aGlzIGl0ZW1cbiAgICAgICAgICAgIF90aGlzLnVwKCR0YXJnZXQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJGVsZW1lbnQucGFyZW50KCdbZGF0YS1zdWJtZW51XScpLmxlbmd0aCkgeyAvLyBjbG9zZSBjdXJyZW50bHkgb3BlbiBzdWJcbiAgICAgICAgICAgIF90aGlzLnVwKCRlbGVtZW50LnBhcmVudCgnW2RhdGEtc3VibWVudV0nKSk7XG4gICAgICAgICAgICAkZWxlbWVudC5wYXJlbnRzKCdsaScpLmZpcnN0KCkuZmluZCgnYScpLmZpcnN0KCkuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAkcHJldkVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZG93bjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJG5leHRFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCRlbGVtZW50LmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpLmxlbmd0aCkge1xuICAgICAgICAgICAgX3RoaXMudG9nZ2xlKCRlbGVtZW50LmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlQWxsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5oaWRlQWxsKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZWQ6IGZ1bmN0aW9uKHByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgaWYgKHByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pOy8vLmF0dHIoJ3RhYmluZGV4JywgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIGFsbCBwYW5lcyBvZiB0aGUgbWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBoaWRlQWxsKCkge1xuICAgIHRoaXMudXAodGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1zdWJtZW51XScpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhbGwgcGFuZXMgb2YgdGhlIG1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgc2hvd0FsbCgpIHtcbiAgICB0aGlzLmRvd24odGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1zdWJtZW51XScpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBvcGVuL2Nsb3NlIHN0YXRlIG9mIGEgc3VibWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdGFyZ2V0IC0gdGhlIHN1Ym1lbnUgdG8gdG9nZ2xlXG4gICAqL1xuICB0b2dnbGUoJHRhcmdldCl7XG4gICAgaWYoISR0YXJnZXQuaXMoJzphbmltYXRlZCcpKSB7XG4gICAgICBpZiAoISR0YXJnZXQuaXMoJzpoaWRkZW4nKSkge1xuICAgICAgICB0aGlzLnVwKCR0YXJnZXQpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZG93bigkdGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIHN1Yi1tZW51IGRlZmluZWQgYnkgYCR0YXJnZXRgLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHRhcmdldCAtIFN1Yi1tZW51IHRvIG9wZW4uXG4gICAqIEBmaXJlcyBBY2NvcmRpb25NZW51I2Rvd25cbiAgICovXG4gIGRvd24oJHRhcmdldCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZighdGhpcy5vcHRpb25zLm11bHRpT3Blbikge1xuICAgICAgdGhpcy51cCh0aGlzLiRlbGVtZW50LmZpbmQoJy5pcy1hY3RpdmUnKS5ub3QoJHRhcmdldC5wYXJlbnRzVW50aWwodGhpcy4kZWxlbWVudCkuYWRkKCR0YXJnZXQpKSk7XG4gICAgfVxuXG4gICAgJHRhcmdldC5hZGRDbGFzcygnaXMtYWN0aXZlJykuYXR0cih7J2FyaWEtaGlkZGVuJzogZmFsc2V9KVxuICAgICAgLnBhcmVudCgnLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCcpLmF0dHIoeydhcmlhLWV4cGFuZGVkJzogdHJ1ZX0pO1xuXG4gICAgICAvL0ZvdW5kYXRpb24uTW92ZSh0aGlzLm9wdGlvbnMuc2xpZGVTcGVlZCwgJHRhcmdldCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICR0YXJnZXQuc2xpZGVEb3duKF90aGlzLm9wdGlvbnMuc2xpZGVTcGVlZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIG1lbnUgaXMgZG9uZSBvcGVuaW5nLlxuICAgICAgICAgICAqIEBldmVudCBBY2NvcmRpb25NZW51I2Rvd25cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBfdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdkb3duLnpmLmFjY29yZGlvbk1lbnUnLCBbJHRhcmdldF0pO1xuICAgICAgICB9KTtcbiAgICAgIC8vfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBzdWItbWVudSBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC4gQWxsIHN1Yi1tZW51cyBpbnNpZGUgdGhlIHRhcmdldCB3aWxsIGJlIGNsb3NlZCBhcyB3ZWxsLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHRhcmdldCAtIFN1Yi1tZW51IHRvIGNsb3NlLlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uTWVudSN1cFxuICAgKi9cbiAgdXAoJHRhcmdldCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgLy9Gb3VuZGF0aW9uLk1vdmUodGhpcy5vcHRpb25zLnNsaWRlU3BlZWQsICR0YXJnZXQsIGZ1bmN0aW9uKCl7XG4gICAgICAkdGFyZ2V0LnNsaWRlVXAoX3RoaXMub3B0aW9ucy5zbGlkZVNwZWVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBtZW51IGlzIGRvbmUgY29sbGFwc2luZyB1cC5cbiAgICAgICAgICogQGV2ZW50IEFjY29yZGlvbk1lbnUjdXBcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3VwLnpmLmFjY29yZGlvbk1lbnUnLCBbJHRhcmdldF0pO1xuICAgICAgfSk7XG4gICAgLy99KTtcblxuICAgIHZhciAkbWVudXMgPSAkdGFyZ2V0LmZpbmQoJ1tkYXRhLXN1Ym1lbnVdJykuc2xpZGVVcCgwKS5hZGRCYWNrKCkuYXR0cignYXJpYS1oaWRkZW4nLCB0cnVlKTtcblxuICAgICRtZW51cy5wYXJlbnQoJy5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQnKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFuIGluc3RhbmNlIG9mIGFjY29yZGlvbiBtZW51LlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uTWVudSNkZXN0cm95ZWRcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1zdWJtZW51XScpLnNsaWRlRG93bigwKS5jc3MoJ2Rpc3BsYXknLCAnJyk7XG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdhJykub2ZmKCdjbGljay56Zi5hY2NvcmRpb25NZW51Jyk7XG5cbiAgICBGb3VuZGF0aW9uLk5lc3QuQnVybih0aGlzLiRlbGVtZW50LCAnYWNjb3JkaW9uJyk7XG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cbkFjY29yZGlvbk1lbnUuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdGltZSB0byBhbmltYXRlIHRoZSBvcGVuaW5nIG9mIGEgc3VibWVudSBpbiBtcy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAyNTBcbiAgICovXG4gIHNsaWRlU3BlZWQ6IDI1MCxcbiAgLyoqXG4gICAqIEFsbG93IHRoZSBtZW51IHRvIGhhdmUgbXVsdGlwbGUgb3BlbiBwYW5lcy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSB0cnVlXG4gICAqL1xuICBtdWx0aU9wZW46IHRydWVcbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihBY2NvcmRpb25NZW51LCAnQWNjb3JkaW9uTWVudScpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogRHJpbGxkb3duIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5kcmlsbGRvd25cbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubW90aW9uXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm5lc3RcbiAqL1xuXG5jbGFzcyBEcmlsbGRvd24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhIGRyaWxsZG93biBtZW51LlxuICAgKiBAY2xhc3NcbiAgICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIG1ha2UgaW50byBhbiBhY2NvcmRpb24gbWVudS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBEcmlsbGRvd24uZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIEZvdW5kYXRpb24uTmVzdC5GZWF0aGVyKHRoaXMuJGVsZW1lbnQsICdkcmlsbGRvd24nKTtcblxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ0RyaWxsZG93bicpO1xuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ0RyaWxsZG93bicsIHtcbiAgICAgICdFTlRFUic6ICdvcGVuJyxcbiAgICAgICdTUEFDRSc6ICdvcGVuJyxcbiAgICAgICdBUlJPV19SSUdIVCc6ICduZXh0JyxcbiAgICAgICdBUlJPV19VUCc6ICd1cCcsXG4gICAgICAnQVJST1dfRE9XTic6ICdkb3duJyxcbiAgICAgICdBUlJPV19MRUZUJzogJ3ByZXZpb3VzJyxcbiAgICAgICdFU0NBUEUnOiAnY2xvc2UnLFxuICAgICAgJ1RBQic6ICdkb3duJyxcbiAgICAgICdTSElGVF9UQUInOiAndXAnXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGRyaWxsZG93biBieSBjcmVhdGluZyBqUXVlcnkgY29sbGVjdGlvbnMgb2YgZWxlbWVudHNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHRoaXMuJHN1Ym1lbnVBbmNob3JzID0gdGhpcy4kZWxlbWVudC5maW5kKCdsaS5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQnKS5jaGlsZHJlbignYScpO1xuICAgIHRoaXMuJHN1Ym1lbnVzID0gdGhpcy4kc3VibWVudUFuY2hvcnMucGFyZW50KCdsaScpLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpO1xuICAgIHRoaXMuJG1lbnVJdGVtcyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnbGknKS5ub3QoJy5qcy1kcmlsbGRvd24tYmFjaycpLmF0dHIoJ3JvbGUnLCAnbWVudWl0ZW0nKS5maW5kKCdhJyk7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCdkYXRhLW11dGF0ZScsICh0aGlzLiRlbGVtZW50LmF0dHIoJ2RhdGEtZHJpbGxkb3duJykgfHwgRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAnZHJpbGxkb3duJykpKTtcblxuICAgIHRoaXMuX3ByZXBhcmVNZW51KCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJFdmVudHMoKTtcblxuICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogcHJlcGFyZXMgZHJpbGxkb3duIG1lbnUgYnkgc2V0dGluZyBhdHRyaWJ1dGVzIHRvIGxpbmtzIGFuZCBlbGVtZW50c1xuICAgKiBzZXRzIGEgbWluIGhlaWdodCB0byBwcmV2ZW50IGNvbnRlbnQganVtcGluZ1xuICAgKiB3cmFwcyB0aGUgZWxlbWVudCBpZiBub3QgYWxyZWFkeSB3cmFwcGVkXG4gICAqIEBwcml2YXRlXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX3ByZXBhcmVNZW51KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgLy8gaWYoIXRoaXMub3B0aW9ucy5ob2xkT3Blbil7XG4gICAgLy8gICB0aGlzLl9tZW51TGlua0V2ZW50cygpO1xuICAgIC8vIH1cbiAgICB0aGlzLiRzdWJtZW51QW5jaG9ycy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgJGxpbmsgPSAkKHRoaXMpO1xuICAgICAgdmFyICRzdWIgPSAkbGluay5wYXJlbnQoKTtcbiAgICAgIGlmKF90aGlzLm9wdGlvbnMucGFyZW50TGluayl7XG4gICAgICAgICRsaW5rLmNsb25lKCkucHJlcGVuZFRvKCRzdWIuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJykpLndyYXAoJzxsaSBjbGFzcz1cImlzLXN1Ym1lbnUtcGFyZW50LWl0ZW0gaXMtc3VibWVudS1pdGVtIGlzLWRyaWxsZG93bi1zdWJtZW51LWl0ZW1cIiByb2xlPVwibWVudS1pdGVtXCI+PC9saT4nKTtcbiAgICAgIH1cbiAgICAgICRsaW5rLmRhdGEoJ3NhdmVkSHJlZicsICRsaW5rLmF0dHIoJ2hyZWYnKSkucmVtb3ZlQXR0cignaHJlZicpLmF0dHIoJ3RhYmluZGV4JywgMCk7XG4gICAgICAkbGluay5jaGlsZHJlbignW2RhdGEtc3VibWVudV0nKVxuICAgICAgICAgIC5hdHRyKHtcbiAgICAgICAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICAgICAgICAndGFiaW5kZXgnOiAwLFxuICAgICAgICAgICAgJ3JvbGUnOiAnbWVudSdcbiAgICAgICAgICB9KTtcbiAgICAgIF90aGlzLl9ldmVudHMoJGxpbmspO1xuICAgIH0pO1xuICAgIHRoaXMuJHN1Ym1lbnVzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIHZhciAkbWVudSA9ICQodGhpcyksXG4gICAgICAgICAgJGJhY2sgPSAkbWVudS5maW5kKCcuanMtZHJpbGxkb3duLWJhY2snKTtcbiAgICAgIGlmKCEkYmFjay5sZW5ndGgpe1xuICAgICAgICBzd2l0Y2ggKF90aGlzLm9wdGlvbnMuYmFja0J1dHRvblBvc2l0aW9uKSB7XG4gICAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgICAgICAgJG1lbnUuYXBwZW5kKF90aGlzLm9wdGlvbnMuYmFja0J1dHRvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgICAgICAkbWVudS5wcmVwZW5kKF90aGlzLm9wdGlvbnMuYmFja0J1dHRvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlVuc3VwcG9ydGVkIGJhY2tCdXR0b25Qb3NpdGlvbiB2YWx1ZSAnXCIgKyBfdGhpcy5vcHRpb25zLmJhY2tCdXR0b25Qb3NpdGlvbiArIFwiJ1wiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX3RoaXMuX2JhY2soJG1lbnUpO1xuICAgIH0pO1xuXG4gICAgaWYoIXRoaXMub3B0aW9ucy5hdXRvSGVpZ2h0KSB7XG4gICAgICB0aGlzLiRzdWJtZW51cy5hZGRDbGFzcygnZHJpbGxkb3duLXN1Ym1lbnUtY292ZXItcHJldmlvdXMnKTtcbiAgICB9XG5cbiAgICBpZighdGhpcy4kZWxlbWVudC5wYXJlbnQoKS5oYXNDbGFzcygnaXMtZHJpbGxkb3duJykpe1xuICAgICAgdGhpcy4kd3JhcHBlciA9ICQodGhpcy5vcHRpb25zLndyYXBwZXIpLmFkZENsYXNzKCdpcy1kcmlsbGRvd24nKTtcbiAgICAgIGlmKHRoaXMub3B0aW9ucy5hbmltYXRlSGVpZ2h0KSB0aGlzLiR3cmFwcGVyLmFkZENsYXNzKCdhbmltYXRlLWhlaWdodCcpO1xuICAgICAgdGhpcy4kd3JhcHBlciA9IHRoaXMuJGVsZW1lbnQud3JhcCh0aGlzLiR3cmFwcGVyKS5wYXJlbnQoKS5jc3ModGhpcy5fZ2V0TWF4RGltcygpKTtcbiAgICB9XG4gIH1cblxuICBfcmVzaXplKCkge1xuICAgIHRoaXMuJHdyYXBwZXIuY3NzKHsnbWF4LXdpZHRoJzogJ25vbmUnLCAnbWluLWhlaWdodCc6ICdub25lJ30pO1xuICAgIC8vIF9nZXRNYXhEaW1zIGhhcyBzaWRlIGVmZmVjdHMgKGJvbykgYnV0IGNhbGxpbmcgaXQgc2hvdWxkIHVwZGF0ZSBhbGwgb3RoZXIgbmVjZXNzYXJ5IGhlaWdodHMgJiB3aWR0aHNcbiAgICB0aGlzLiR3cmFwcGVyLmNzcyh0aGlzLl9nZXRNYXhEaW1zKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgaGFuZGxlcnMgdG8gZWxlbWVudHMgaW4gdGhlIG1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW0gLSB0aGUgY3VycmVudCBtZW51IGl0ZW0gdG8gYWRkIGhhbmRsZXJzIHRvLlxuICAgKi9cbiAgX2V2ZW50cygkZWxlbSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAkZWxlbS5vZmYoJ2NsaWNrLnpmLmRyaWxsZG93bicpXG4gICAgLm9uKCdjbGljay56Zi5kcmlsbGRvd24nLCBmdW5jdGlvbihlKXtcbiAgICAgIGlmKCQoZS50YXJnZXQpLnBhcmVudHNVbnRpbCgndWwnLCAnbGknKS5oYXNDbGFzcygnaXMtZHJpbGxkb3duLXN1Ym1lbnUtcGFyZW50Jykpe1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmKGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQuZmlyc3RFbGVtZW50Q2hpbGQpe1xuICAgICAgLy8gICByZXR1cm4gZmFsc2U7XG4gICAgICAvLyB9XG4gICAgICBfdGhpcy5fc2hvdygkZWxlbS5wYXJlbnQoJ2xpJykpO1xuXG4gICAgICBpZihfdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayl7XG4gICAgICAgIHZhciAkYm9keSA9ICQoJ2JvZHknKTtcbiAgICAgICAgJGJvZHkub2ZmKCcuemYuZHJpbGxkb3duJykub24oJ2NsaWNrLnpmLmRyaWxsZG93bicsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgIGlmIChlLnRhcmdldCA9PT0gX3RoaXMuJGVsZW1lbnRbMF0gfHwgJC5jb250YWlucyhfdGhpcy4kZWxlbWVudFswXSwgZS50YXJnZXQpKSB7IHJldHVybjsgfVxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy5faGlkZUFsbCgpO1xuICAgICAgICAgICRib2R5Lm9mZignLnpmLmRyaWxsZG93bicpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblx0ICB0aGlzLiRlbGVtZW50Lm9uKCdtdXRhdGVtZS56Zi50cmlnZ2VyJywgdGhpcy5fcmVzaXplLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgaGFuZGxlcnMgdG8gdGhlIG1lbnUgZWxlbWVudC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVnaXN0ZXJFdmVudHMoKSB7XG4gICAgaWYodGhpcy5vcHRpb25zLnNjcm9sbFRvcCl7XG4gICAgICB0aGlzLl9iaW5kSGFuZGxlciA9IHRoaXMuX3Njcm9sbFRvcC5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy4kZWxlbWVudC5vbignb3Blbi56Zi5kcmlsbGRvd24gaGlkZS56Zi5kcmlsbGRvd24gY2xvc2VkLnpmLmRyaWxsZG93bicsdGhpcy5fYmluZEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgdG8gVG9wIG9mIEVsZW1lbnQgb3IgZGF0YS1zY3JvbGwtdG9wLWVsZW1lbnRcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBEcmlsbGRvd24jc2Nyb2xsbWVcbiAgICovXG4gIF9zY3JvbGxUb3AoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgJHNjcm9sbFRvcEVsZW1lbnQgPSBfdGhpcy5vcHRpb25zLnNjcm9sbFRvcEVsZW1lbnQhPScnPyQoX3RoaXMub3B0aW9ucy5zY3JvbGxUb3BFbGVtZW50KTpfdGhpcy4kZWxlbWVudCxcbiAgICAgICAgc2Nyb2xsUG9zID0gcGFyc2VJbnQoJHNjcm9sbFRvcEVsZW1lbnQub2Zmc2V0KCkudG9wK190aGlzLm9wdGlvbnMuc2Nyb2xsVG9wT2Zmc2V0KTtcbiAgICAkKCdodG1sLCBib2R5Jykuc3RvcCh0cnVlKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiBzY3JvbGxQb3MgfSwgX3RoaXMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbiwgX3RoaXMub3B0aW9ucy5hbmltYXRpb25FYXNpbmcsZnVuY3Rpb24oKXtcbiAgICAgIC8qKlxuICAgICAgICAqIEZpcmVzIGFmdGVyIHRoZSBtZW51IGhhcyBzY3JvbGxlZFxuICAgICAgICAqIEBldmVudCBEcmlsbGRvd24jc2Nyb2xsbWVcbiAgICAgICAgKi9cbiAgICAgIGlmKHRoaXM9PT0kKCdodG1sJylbMF0pX3RoaXMuJGVsZW1lbnQudHJpZ2dlcignc2Nyb2xsbWUuemYuZHJpbGxkb3duJyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBrZXlkb3duIGV2ZW50IGxpc3RlbmVyIHRvIGBsaWAncyBpbiB0aGUgbWVudS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9rZXlib2FyZEV2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kbWVudUl0ZW1zLmFkZCh0aGlzLiRlbGVtZW50LmZpbmQoJy5qcy1kcmlsbGRvd24tYmFjayA+IGEsIC5pcy1zdWJtZW51LXBhcmVudC1pdGVtID4gYScpKS5vbigna2V5ZG93bi56Zi5kcmlsbGRvd24nLCBmdW5jdGlvbihlKXtcbiAgICAgIHZhciAkZWxlbWVudCA9ICQodGhpcyksXG4gICAgICAgICAgJGVsZW1lbnRzID0gJGVsZW1lbnQucGFyZW50KCdsaScpLnBhcmVudCgndWwnKS5jaGlsZHJlbignbGknKS5jaGlsZHJlbignYScpLFxuICAgICAgICAgICRwcmV2RWxlbWVudCxcbiAgICAgICAgICAkbmV4dEVsZW1lbnQ7XG5cbiAgICAgICRlbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgaWYgKCQodGhpcykuaXMoJGVsZW1lbnQpKSB7XG4gICAgICAgICAgJHByZXZFbGVtZW50ID0gJGVsZW1lbnRzLmVxKE1hdGgubWF4KDAsIGktMSkpO1xuICAgICAgICAgICRuZXh0RWxlbWVudCA9ICRlbGVtZW50cy5lcShNYXRoLm1pbihpKzEsICRlbGVtZW50cy5sZW5ndGgtMSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQuaGFuZGxlS2V5KGUsICdEcmlsbGRvd24nLCB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICgkZWxlbWVudC5pcyhfdGhpcy4kc3VibWVudUFuY2hvcnMpKSB7XG4gICAgICAgICAgICBfdGhpcy5fc2hvdygkZWxlbWVudC5wYXJlbnQoJ2xpJykpO1xuICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCdsaScpLm9uZShGb3VuZGF0aW9uLnRyYW5zaXRpb25lbmQoJGVsZW1lbnQpLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoJ2xpJykuZmluZCgndWwgbGkgYScpLmZpbHRlcihfdGhpcy4kbWVudUl0ZW1zKS5maXJzdCgpLmZvY3VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF90aGlzLl9oaWRlKCRlbGVtZW50LnBhcmVudCgnbGknKS5wYXJlbnQoJ3VsJykpO1xuICAgICAgICAgICRlbGVtZW50LnBhcmVudCgnbGknKS5wYXJlbnQoJ3VsJykub25lKEZvdW5kYXRpb24udHJhbnNpdGlvbmVuZCgkZWxlbWVudCksIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpLnBhcmVudCgnbGknKS5jaGlsZHJlbignYScpLmZpcnN0KCkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICB1cDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJHByZXZFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGRvd246IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRuZXh0RWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgX3RoaXMuX2JhY2soKTtcbiAgICAgICAgICAvL190aGlzLiRtZW51SXRlbXMuZmlyc3QoKS5mb2N1cygpOyAvLyBmb2N1cyB0byBmaXJzdCBlbGVtZW50XG4gICAgICAgIH0sXG4gICAgICAgIG9wZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghJGVsZW1lbnQuaXMoX3RoaXMuJG1lbnVJdGVtcykpIHsgLy8gbm90IG1lbnUgaXRlbSBtZWFucyBiYWNrIGJ1dHRvblxuICAgICAgICAgICAgX3RoaXMuX2hpZGUoJGVsZW1lbnQucGFyZW50KCdsaScpLnBhcmVudCgndWwnKSk7XG4gICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpLm9uZShGb3VuZGF0aW9uLnRyYW5zaXRpb25lbmQoJGVsZW1lbnQpLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgnbGknKS5wYXJlbnQoJ3VsJykucGFyZW50KCdsaScpLmNoaWxkcmVuKCdhJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkZWxlbWVudC5pcyhfdGhpcy4kc3VibWVudUFuY2hvcnMpKSB7XG4gICAgICAgICAgICBfdGhpcy5fc2hvdygkZWxlbWVudC5wYXJlbnQoJ2xpJykpO1xuICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCdsaScpLm9uZShGb3VuZGF0aW9uLnRyYW5zaXRpb25lbmQoJGVsZW1lbnQpLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoJ2xpJykuZmluZCgndWwgbGkgYScpLmZpbHRlcihfdGhpcy4kbWVudUl0ZW1zKS5maXJzdCgpLmZvY3VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24ocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICBpZiAocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7IC8vIGVuZCBrZXlib2FyZEFjY2Vzc1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyBhbGwgb3BlbiBlbGVtZW50cywgYW5kIHJldHVybnMgdG8gcm9vdCBtZW51LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIERyaWxsZG93biNjbG9zZWRcbiAgICovXG4gIF9oaWRlQWxsKCkge1xuICAgIHZhciAkZWxlbSA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmlzLWRyaWxsZG93bi1zdWJtZW51LmlzLWFjdGl2ZScpLmFkZENsYXNzKCdpcy1jbG9zaW5nJyk7XG4gICAgaWYodGhpcy5vcHRpb25zLmF1dG9IZWlnaHQpIHRoaXMuJHdyYXBwZXIuY3NzKHtoZWlnaHQ6JGVsZW0ucGFyZW50KCkuY2xvc2VzdCgndWwnKS5kYXRhKCdjYWxjSGVpZ2h0Jyl9KTtcbiAgICAkZWxlbS5vbmUoRm91bmRhdGlvbi50cmFuc2l0aW9uZW5kKCRlbGVtKSwgZnVuY3Rpb24oZSl7XG4gICAgICAkZWxlbS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlIGlzLWNsb3NpbmcnKTtcbiAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIG1lbnUgaXMgZnVsbHkgY2xvc2VkLlxuICAgICAgICAgKiBAZXZlbnQgRHJpbGxkb3duI2Nsb3NlZFxuICAgICAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Nsb3NlZC56Zi5kcmlsbGRvd24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVyIGZvciBlYWNoIGBiYWNrYCBidXR0b24sIGFuZCBjbG9zZXMgb3BlbiBtZW51cy5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBEcmlsbGRvd24jYmFja1xuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW0gLSB0aGUgY3VycmVudCBzdWItbWVudSB0byBhZGQgYGJhY2tgIGV2ZW50LlxuICAgKi9cbiAgX2JhY2soJGVsZW0pIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICRlbGVtLm9mZignY2xpY2suemYuZHJpbGxkb3duJyk7XG4gICAgJGVsZW0uY2hpbGRyZW4oJy5qcy1kcmlsbGRvd24tYmFjaycpXG4gICAgICAub24oJ2NsaWNrLnpmLmRyaWxsZG93bicsIGZ1bmN0aW9uKGUpe1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnbW91c2V1cCBvbiBiYWNrJyk7XG4gICAgICAgIF90aGlzLl9oaWRlKCRlbGVtKTtcblxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHBhcmVudCBzdWJtZW51LCBjYWxsIHNob3dcbiAgICAgICAgbGV0IHBhcmVudFN1Yk1lbnUgPSAkZWxlbS5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpLnBhcmVudCgnbGknKTtcbiAgICAgICAgaWYgKHBhcmVudFN1Yk1lbnUubGVuZ3RoKSB7XG4gICAgICAgICAgX3RoaXMuX3Nob3cocGFyZW50U3ViTWVudSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgbGlzdGVuZXIgdG8gbWVudSBpdGVtcyB3L28gc3VibWVudXMgdG8gY2xvc2Ugb3BlbiBtZW51cyBvbiBjbGljay5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWVudUxpbmtFdmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLiRtZW51SXRlbXMubm90KCcuaXMtZHJpbGxkb3duLXN1Ym1lbnUtcGFyZW50JylcbiAgICAgICAgLm9mZignY2xpY2suemYuZHJpbGxkb3duJylcbiAgICAgICAgLm9uKCdjbGljay56Zi5kcmlsbGRvd24nLCBmdW5jdGlvbihlKXtcbiAgICAgICAgICAvLyBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIF90aGlzLl9oaWRlQWxsKCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIHN1Ym1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgRHJpbGxkb3duI29wZW5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICRlbGVtIC0gdGhlIGN1cnJlbnQgZWxlbWVudCB3aXRoIGEgc3VibWVudSB0byBvcGVuLCBpLmUuIHRoZSBgbGlgIHRhZy5cbiAgICovXG4gIF9zaG93KCRlbGVtKSB7XG4gICAgaWYodGhpcy5vcHRpb25zLmF1dG9IZWlnaHQpIHRoaXMuJHdyYXBwZXIuY3NzKHtoZWlnaHQ6JGVsZW0uY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJykuZGF0YSgnY2FsY0hlaWdodCcpfSk7XG4gICAgJGVsZW0uYXR0cignYXJpYS1leHBhbmRlZCcsIHRydWUpO1xuICAgICRlbGVtLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpLmFkZENsYXNzKCdpcy1hY3RpdmUnKS5hdHRyKCdhcmlhLWhpZGRlbicsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBzdWJtZW51IGhhcyBvcGVuZWQuXG4gICAgICogQGV2ZW50IERyaWxsZG93biNvcGVuXG4gICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdvcGVuLnpmLmRyaWxsZG93bicsIFskZWxlbV0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBIaWRlcyBhIHN1Ym1lbnVcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBEcmlsbGRvd24jaGlkZVxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW0gLSB0aGUgY3VycmVudCBzdWItbWVudSB0byBoaWRlLCBpLmUuIHRoZSBgdWxgIHRhZy5cbiAgICovXG4gIF9oaWRlKCRlbGVtKSB7XG4gICAgaWYodGhpcy5vcHRpb25zLmF1dG9IZWlnaHQpIHRoaXMuJHdyYXBwZXIuY3NzKHtoZWlnaHQ6JGVsZW0ucGFyZW50KCkuY2xvc2VzdCgndWwnKS5kYXRhKCdjYWxjSGVpZ2h0Jyl9KTtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICRlbGVtLnBhcmVudCgnbGknKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpO1xuICAgICRlbGVtLmF0dHIoJ2FyaWEtaGlkZGVuJywgdHJ1ZSkuYWRkQ2xhc3MoJ2lzLWNsb3NpbmcnKVxuICAgICRlbGVtLmFkZENsYXNzKCdpcy1jbG9zaW5nJylcbiAgICAgICAgIC5vbmUoRm91bmRhdGlvbi50cmFuc2l0aW9uZW5kKCRlbGVtKSwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgJGVsZW0ucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZSBpcy1jbG9zaW5nJyk7XG4gICAgICAgICAgICRlbGVtLmJsdXIoKTtcbiAgICAgICAgIH0pO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIHN1Ym1lbnUgaGFzIGNsb3NlZC5cbiAgICAgKiBAZXZlbnQgRHJpbGxkb3duI2hpZGVcbiAgICAgKi9cbiAgICAkZWxlbS50cmlnZ2VyKCdoaWRlLnpmLmRyaWxsZG93bicsIFskZWxlbV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIG5lc3RlZCBtZW51cyB0byBjYWxjdWxhdGUgdGhlIG1pbi1oZWlnaHQsIGFuZCBtYXgtd2lkdGggZm9yIHRoZSBtZW51LlxuICAgKiBQcmV2ZW50cyBjb250ZW50IGp1bXBpbmcuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldE1heERpbXMoKSB7XG4gICAgdmFyICBtYXhIZWlnaHQgPSAwLCByZXN1bHQgPSB7fSwgX3RoaXMgPSB0aGlzO1xuICAgIHRoaXMuJHN1Ym1lbnVzLmFkZCh0aGlzLiRlbGVtZW50KS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgbnVtT2ZFbGVtcyA9ICQodGhpcykuY2hpbGRyZW4oJ2xpJykubGVuZ3RoO1xuICAgICAgdmFyIGhlaWdodCA9IEZvdW5kYXRpb24uQm94LkdldERpbWVuc2lvbnModGhpcykuaGVpZ2h0O1xuICAgICAgbWF4SGVpZ2h0ID0gaGVpZ2h0ID4gbWF4SGVpZ2h0ID8gaGVpZ2h0IDogbWF4SGVpZ2h0O1xuICAgICAgaWYoX3RoaXMub3B0aW9ucy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgICQodGhpcykuZGF0YSgnY2FsY0hlaWdodCcsaGVpZ2h0KTtcbiAgICAgICAgaWYgKCEkKHRoaXMpLmhhc0NsYXNzKCdpcy1kcmlsbGRvd24tc3VibWVudScpKSByZXN1bHRbJ2hlaWdodCddID0gaGVpZ2h0O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYoIXRoaXMub3B0aW9ucy5hdXRvSGVpZ2h0KSByZXN1bHRbJ21pbi1oZWlnaHQnXSA9IGAke21heEhlaWdodH1weGA7XG5cbiAgICByZXN1bHRbJ21heC13aWR0aCddID0gYCR7dGhpcy4kZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1weGA7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBEcmlsbGRvd24gTWVudVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYodGhpcy5vcHRpb25zLnNjcm9sbFRvcCkgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi5kcmlsbGRvd24nLHRoaXMuX2JpbmRIYW5kbGVyKTtcbiAgICB0aGlzLl9oaWRlQWxsKCk7XG5cdCAgdGhpcy4kZWxlbWVudC5vZmYoJ211dGF0ZW1lLnpmLnRyaWdnZXInKTtcbiAgICBGb3VuZGF0aW9uLk5lc3QuQnVybih0aGlzLiRlbGVtZW50LCAnZHJpbGxkb3duJyk7XG4gICAgdGhpcy4kZWxlbWVudC51bndyYXAoKVxuICAgICAgICAgICAgICAgICAuZmluZCgnLmpzLWRyaWxsZG93bi1iYWNrLCAuaXMtc3VibWVudS1wYXJlbnQtaXRlbScpLnJlbW92ZSgpXG4gICAgICAgICAgICAgICAgIC5lbmQoKS5maW5kKCcuaXMtYWN0aXZlLCAuaXMtY2xvc2luZywgLmlzLWRyaWxsZG93bi1zdWJtZW51JykucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZSBpcy1jbG9zaW5nIGlzLWRyaWxsZG93bi1zdWJtZW51JylcbiAgICAgICAgICAgICAgICAgLmVuZCgpLmZpbmQoJ1tkYXRhLXN1Ym1lbnVdJykucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4gdGFiaW5kZXggcm9sZScpO1xuICAgIHRoaXMuJHN1Ym1lbnVBbmNob3JzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAkKHRoaXMpLm9mZignLnpmLmRyaWxsZG93bicpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kc3VibWVudXMucmVtb3ZlQ2xhc3MoJ2RyaWxsZG93bi1zdWJtZW51LWNvdmVyLXByZXZpb3VzJyk7XG5cbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2EnKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgJGxpbmsgPSAkKHRoaXMpO1xuICAgICAgJGxpbmsucmVtb3ZlQXR0cigndGFiaW5kZXgnKTtcbiAgICAgIGlmKCRsaW5rLmRhdGEoJ3NhdmVkSHJlZicpKXtcbiAgICAgICAgJGxpbmsuYXR0cignaHJlZicsICRsaW5rLmRhdGEoJ3NhdmVkSHJlZicpKS5yZW1vdmVEYXRhKCdzYXZlZEhyZWYnKTtcbiAgICAgIH1lbHNleyByZXR1cm47IH1cbiAgICB9KTtcbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH07XG59XG5cbkRyaWxsZG93bi5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIE1hcmt1cCB1c2VkIGZvciBKUyBnZW5lcmF0ZWQgYmFjayBidXR0b24uIFByZXBlbmRlZCAgb3IgYXBwZW5kZWQgKHNlZSBiYWNrQnV0dG9uUG9zaXRpb24pIHRvIHN1Ym1lbnUgbGlzdHMgYW5kIGRlbGV0ZWQgb24gYGRlc3Ryb3lgIG1ldGhvZCwgJ2pzLWRyaWxsZG93bi1iYWNrJyBjbGFzcyByZXF1aXJlZC4gUmVtb3ZlIHRoZSBiYWNrc2xhc2ggKGBcXGApIGlmIGNvcHkgYW5kIHBhc3RpbmcuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJzxcXGxpPjxcXGE+QmFjazxcXC9hPjxcXC9saT4nXG4gICAqL1xuICBiYWNrQnV0dG9uOiAnPGxpIGNsYXNzPVwianMtZHJpbGxkb3duLWJhY2tcIj48YSB0YWJpbmRleD1cIjBcIj5CYWNrPC9hPjwvbGk+JyxcbiAgLyoqXG4gICAqIFBvc2l0aW9uIHRoZSBiYWNrIGJ1dHRvbiBlaXRoZXIgYXQgdGhlIHRvcCBvciBib3R0b20gb2YgZHJpbGxkb3duIHN1Ym1lbnVzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGJvdHRvbVxuICAgKi9cbiAgYmFja0J1dHRvblBvc2l0aW9uOiAndG9wJyxcbiAgLyoqXG4gICAqIE1hcmt1cCB1c2VkIHRvIHdyYXAgZHJpbGxkb3duIG1lbnUuIFVzZSBhIGNsYXNzIG5hbWUgZm9yIGluZGVwZW5kZW50IHN0eWxpbmc7IHRoZSBKUyBhcHBsaWVkIGNsYXNzOiBgaXMtZHJpbGxkb3duYCBpcyByZXF1aXJlZC4gUmVtb3ZlIHRoZSBiYWNrc2xhc2ggKGBcXGApIGlmIGNvcHkgYW5kIHBhc3RpbmcuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJzxcXGRpdiBjbGFzcz1cImlzLWRyaWxsZG93blwiPjxcXC9kaXY+J1xuICAgKi9cbiAgd3JhcHBlcjogJzxkaXY+PC9kaXY+JyxcbiAgLyoqXG4gICAqIEFkZHMgdGhlIHBhcmVudCBsaW5rIHRvIHRoZSBzdWJtZW51LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBwYXJlbnRMaW5rOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93IHRoZSBtZW51IHRvIHJldHVybiB0byByb290IGxpc3Qgb24gYm9keSBjbGljay5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgY2xvc2VPbkNsaWNrOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93IHRoZSBtZW51IHRvIGF1dG8gYWRqdXN0IGhlaWdodC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgYXV0b0hlaWdodDogZmFsc2UsXG4gIC8qKlxuICAgKiBBbmltYXRlIHRoZSBhdXRvIGFkanVzdCBoZWlnaHQuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIGFuaW1hdGVIZWlnaHQ6IGZhbHNlLFxuICAvKipcbiAgICogU2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIG1lbnUgYWZ0ZXIgb3BlbmluZyBhIHN1Ym1lbnUgb3IgbmF2aWdhdGluZyBiYWNrIHVzaW5nIHRoZSBtZW51IGJhY2sgYnV0dG9uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIHNjcm9sbFRvcDogZmFsc2UsXG4gIC8qKlxuICAgKiBTdHJpbmcganF1ZXJ5IHNlbGVjdG9yIChmb3IgZXhhbXBsZSAnYm9keScpIG9mIGVsZW1lbnQgdG8gdGFrZSBvZmZzZXQoKS50b3AgZnJvbSwgaWYgZW1wdHkgc3RyaW5nIHRoZSBkcmlsbGRvd24gbWVudSBvZmZzZXQoKS50b3AgaXMgdGFrZW5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnJ1xuICAgKi9cbiAgc2Nyb2xsVG9wRWxlbWVudDogJycsXG4gIC8qKlxuICAgKiBTY3JvbGxUb3Agb2Zmc2V0XG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMTAwXG4gICAqL1xuICBzY3JvbGxUb3BPZmZzZXQ6IDAsXG4gIC8qKlxuICAgKiBTY3JvbGwgYW5pbWF0aW9uIGR1cmF0aW9uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgNTAwXG4gICAqL1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvKipcbiAgICogU2Nyb2xsIGFuaW1hdGlvbiBlYXNpbmdcbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnc3dpbmcnXG4gICAqL1xuICBhbmltYXRpb25FYXNpbmc6ICdzd2luZydcbiAgLy8gaG9sZE9wZW46IGZhbHNlXG59O1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oRHJpbGxkb3duLCAnRHJpbGxkb3duJyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBEcm9wZG93biBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uZHJvcGRvd25cbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwuYm94XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRyaWdnZXJzXG4gKi9cblxuY2xhc3MgRHJvcGRvd24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhIGRyb3Bkb3duLlxuICAgKiBAY2xhc3NcbiAgICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIG1ha2UgaW50byBhIGRyb3Bkb3duLlxuICAgKiAgICAgICAgT2JqZWN0IHNob3VsZCBiZSBvZiB0aGUgZHJvcGRvd24gcGFuZWwsIHJhdGhlciB0aGFuIGl0cyBhbmNob3IuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgRHJvcGRvd24uZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdEcm9wZG93bicpO1xuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ0Ryb3Bkb3duJywge1xuICAgICAgJ0VOVEVSJzogJ29wZW4nLFxuICAgICAgJ1NQQUNFJzogJ29wZW4nLFxuICAgICAgJ0VTQ0FQRSc6ICdjbG9zZSdcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgcGx1Z2luIGJ5IHNldHRpbmcvY2hlY2tpbmcgb3B0aW9ucyBhbmQgYXR0cmlidXRlcywgYWRkaW5nIGhlbHBlciB2YXJpYWJsZXMsIGFuZCBzYXZpbmcgdGhlIGFuY2hvci5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB2YXIgJGlkID0gdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpO1xuXG4gICAgdGhpcy4kYW5jaG9yID0gJChgW2RhdGEtdG9nZ2xlPVwiJHskaWR9XCJdYCkubGVuZ3RoID8gJChgW2RhdGEtdG9nZ2xlPVwiJHskaWR9XCJdYCkgOiAkKGBbZGF0YS1vcGVuPVwiJHskaWR9XCJdYCk7XG4gICAgdGhpcy4kYW5jaG9yLmF0dHIoe1xuICAgICAgJ2FyaWEtY29udHJvbHMnOiAkaWQsXG4gICAgICAnZGF0YS1pcy1mb2N1cyc6IGZhbHNlLFxuICAgICAgJ2RhdGEteWV0aS1ib3gnOiAkaWQsXG4gICAgICAnYXJpYS1oYXNwb3B1cCc6IHRydWUsXG4gICAgICAnYXJpYS1leHBhbmRlZCc6IGZhbHNlXG5cbiAgICB9KTtcblxuICAgIGlmKHRoaXMub3B0aW9ucy5wYXJlbnRDbGFzcyl7XG4gICAgICB0aGlzLiRwYXJlbnQgPSB0aGlzLiRlbGVtZW50LnBhcmVudHMoJy4nICsgdGhpcy5vcHRpb25zLnBhcmVudENsYXNzKTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuJHBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbkNsYXNzID0gdGhpcy5nZXRQb3NpdGlvbkNsYXNzKCk7XG4gICAgdGhpcy5jb3VudGVyID0gNDtcbiAgICB0aGlzLnVzZWRQb3NpdGlvbnMgPSBbXTtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoe1xuICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnLFxuICAgICAgJ2RhdGEteWV0aS1ib3gnOiAkaWQsXG4gICAgICAnZGF0YS1yZXNpemUnOiAkaWQsXG4gICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogdGhpcy4kYW5jaG9yWzBdLmlkIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ2RkLWFuY2hvcicpXG4gICAgfSk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBjdXJyZW50IG9yaWVudGF0aW9uIG9mIGRyb3Bkb3duIHBhbmUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBwb3NpdGlvbiAtIHN0cmluZyB2YWx1ZSBvZiBhIHBvc2l0aW9uIGNsYXNzLlxuICAgKi9cbiAgZ2V0UG9zaXRpb25DbGFzcygpIHtcbiAgICB2YXIgdmVydGljYWxQb3NpdGlvbiA9IHRoaXMuJGVsZW1lbnRbMF0uY2xhc3NOYW1lLm1hdGNoKC8odG9wfGxlZnR8cmlnaHR8Ym90dG9tKS9nKTtcbiAgICAgICAgdmVydGljYWxQb3NpdGlvbiA9IHZlcnRpY2FsUG9zaXRpb24gPyB2ZXJ0aWNhbFBvc2l0aW9uWzBdIDogJyc7XG4gICAgdmFyIGhvcml6b250YWxQb3NpdGlvbiA9IC9mbG9hdC0oXFxTKykvLmV4ZWModGhpcy4kYW5jaG9yWzBdLmNsYXNzTmFtZSk7XG4gICAgICAgIGhvcml6b250YWxQb3NpdGlvbiA9IGhvcml6b250YWxQb3NpdGlvbiA/IGhvcml6b250YWxQb3NpdGlvblsxXSA6ICcnO1xuICAgIHZhciBwb3NpdGlvbiA9IGhvcml6b250YWxQb3NpdGlvbiA/IGhvcml6b250YWxQb3NpdGlvbiArICcgJyArIHZlcnRpY2FsUG9zaXRpb24gOiB2ZXJ0aWNhbFBvc2l0aW9uO1xuXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdHMgdGhlIGRyb3Bkb3duIHBhbmVzIG9yaWVudGF0aW9uIGJ5IGFkZGluZy9yZW1vdmluZyBwb3NpdGlvbmluZyBjbGFzc2VzLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBvc2l0aW9uIC0gcG9zaXRpb24gY2xhc3MgdG8gcmVtb3ZlLlxuICAgKi9cbiAgX3JlcG9zaXRpb24ocG9zaXRpb24pIHtcbiAgICB0aGlzLnVzZWRQb3NpdGlvbnMucHVzaChwb3NpdGlvbiA/IHBvc2l0aW9uIDogJ2JvdHRvbScpO1xuICAgIC8vZGVmYXVsdCwgdHJ5IHN3aXRjaGluZyB0byBvcHBvc2l0ZSBzaWRlXG4gICAgaWYoIXBvc2l0aW9uICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZigndG9wJykgPCAwKSl7XG4gICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCd0b3AnKTtcbiAgICB9ZWxzZSBpZihwb3NpdGlvbiA9PT0gJ3RvcCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdib3R0b20nKSA8IDApKXtcbiAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MocG9zaXRpb24pO1xuICAgIH1lbHNlIGlmKHBvc2l0aW9uID09PSAnbGVmdCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdyaWdodCcpIDwgMCkpe1xuICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhwb3NpdGlvbilcbiAgICAgICAgICAuYWRkQ2xhc3MoJ3JpZ2h0Jyk7XG4gICAgfWVsc2UgaWYocG9zaXRpb24gPT09ICdyaWdodCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPCAwKSl7XG4gICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHBvc2l0aW9uKVxuICAgICAgICAgIC5hZGRDbGFzcygnbGVmdCcpO1xuICAgIH1cblxuICAgIC8vaWYgZGVmYXVsdCBjaGFuZ2UgZGlkbid0IHdvcmssIHRyeSBib3R0b20gb3IgbGVmdCBmaXJzdFxuICAgIGVsc2UgaWYoIXBvc2l0aW9uICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZigndG9wJykgPiAtMSkgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPCAwKSl7XG4gICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdsZWZ0Jyk7XG4gICAgfWVsc2UgaWYocG9zaXRpb24gPT09ICd0b3AnICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignYm90dG9tJykgPiAtMSkgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPCAwKSl7XG4gICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHBvc2l0aW9uKVxuICAgICAgICAgIC5hZGRDbGFzcygnbGVmdCcpO1xuICAgIH1lbHNlIGlmKHBvc2l0aW9uID09PSAnbGVmdCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdyaWdodCcpID4gLTEpICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignYm90dG9tJykgPCAwKSl7XG4gICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHBvc2l0aW9uKTtcbiAgICB9ZWxzZSBpZihwb3NpdGlvbiA9PT0gJ3JpZ2h0JyAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2xlZnQnKSA+IC0xKSAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbScpIDwgMCkpe1xuICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhwb3NpdGlvbik7XG4gICAgfVxuICAgIC8vaWYgbm90aGluZyBjbGVhcmVkLCBzZXQgdG8gYm90dG9tXG4gICAgZWxzZXtcbiAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MocG9zaXRpb24pO1xuICAgIH1cbiAgICB0aGlzLmNsYXNzQ2hhbmdlZCA9IHRydWU7XG4gICAgdGhpcy5jb3VudGVyLS07XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcG9zaXRpb24gYW5kIG9yaWVudGF0aW9uIG9mIHRoZSBkcm9wZG93biBwYW5lLCBjaGVja3MgZm9yIGNvbGxpc2lvbnMuXG4gICAqIFJlY3Vyc2l2ZWx5IGNhbGxzIGl0c2VsZiBpZiBhIGNvbGxpc2lvbiBpcyBkZXRlY3RlZCwgd2l0aCBhIG5ldyBwb3NpdGlvbiBjbGFzcy5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0UG9zaXRpb24oKSB7XG4gICAgaWYodGhpcy4kYW5jaG9yLmF0dHIoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ2ZhbHNlJyl7IHJldHVybiBmYWxzZTsgfVxuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb25DbGFzcygpLFxuICAgICAgICAkZWxlRGltcyA9IEZvdW5kYXRpb24uQm94LkdldERpbWVuc2lvbnModGhpcy4kZWxlbWVudCksXG4gICAgICAgICRhbmNob3JEaW1zID0gRm91bmRhdGlvbi5Cb3guR2V0RGltZW5zaW9ucyh0aGlzLiRhbmNob3IpLFxuICAgICAgICBfdGhpcyA9IHRoaXMsXG4gICAgICAgIGRpcmVjdGlvbiA9IChwb3NpdGlvbiA9PT0gJ2xlZnQnID8gJ2xlZnQnIDogKChwb3NpdGlvbiA9PT0gJ3JpZ2h0JykgPyAnbGVmdCcgOiAndG9wJykpLFxuICAgICAgICBwYXJhbSA9IChkaXJlY3Rpb24gPT09ICd0b3AnKSA/ICdoZWlnaHQnIDogJ3dpZHRoJyxcbiAgICAgICAgb2Zmc2V0ID0gKHBhcmFtID09PSAnaGVpZ2h0JykgPyB0aGlzLm9wdGlvbnMudk9mZnNldCA6IHRoaXMub3B0aW9ucy5oT2Zmc2V0O1xuXG4gICAgaWYoKCRlbGVEaW1zLndpZHRoID49ICRlbGVEaW1zLndpbmRvd0RpbXMud2lkdGgpIHx8ICghdGhpcy5jb3VudGVyICYmICFGb3VuZGF0aW9uLkJveC5JbU5vdFRvdWNoaW5nWW91KHRoaXMuJGVsZW1lbnQsIHRoaXMuJHBhcmVudCkpKXtcbiAgICAgIHZhciBuZXdXaWR0aCA9ICRlbGVEaW1zLndpbmRvd0RpbXMud2lkdGgsXG4gICAgICAgICAgcGFyZW50SE9mZnNldCA9IDA7XG4gICAgICBpZih0aGlzLiRwYXJlbnQpe1xuICAgICAgICB2YXIgJHBhcmVudERpbXMgPSBGb3VuZGF0aW9uLkJveC5HZXREaW1lbnNpb25zKHRoaXMuJHBhcmVudCksXG4gICAgICAgICAgICBwYXJlbnRIT2Zmc2V0ID0gJHBhcmVudERpbXMub2Zmc2V0LmxlZnQ7XG4gICAgICAgIGlmICgkcGFyZW50RGltcy53aWR0aCA8IG5ld1dpZHRoKXtcbiAgICAgICAgICBuZXdXaWR0aCA9ICRwYXJlbnREaW1zLndpZHRoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJGVsZW1lbnQub2Zmc2V0KEZvdW5kYXRpb24uQm94LkdldE9mZnNldHModGhpcy4kZWxlbWVudCwgdGhpcy4kYW5jaG9yLCAnY2VudGVyIGJvdHRvbScsIHRoaXMub3B0aW9ucy52T2Zmc2V0LCB0aGlzLm9wdGlvbnMuaE9mZnNldCArIHBhcmVudEhPZmZzZXQsIHRydWUpKS5jc3Moe1xuICAgICAgICAnd2lkdGgnOiBuZXdXaWR0aCAtICh0aGlzLm9wdGlvbnMuaE9mZnNldCAqIDIpLFxuICAgICAgICAnaGVpZ2h0JzogJ2F1dG8nXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2xhc3NDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50Lm9mZnNldChGb3VuZGF0aW9uLkJveC5HZXRPZmZzZXRzKHRoaXMuJGVsZW1lbnQsIHRoaXMuJGFuY2hvciwgcG9zaXRpb24sIHRoaXMub3B0aW9ucy52T2Zmc2V0LCB0aGlzLm9wdGlvbnMuaE9mZnNldCkpO1xuXG4gICAgd2hpbGUoIUZvdW5kYXRpb24uQm94LkltTm90VG91Y2hpbmdZb3UodGhpcy4kZWxlbWVudCwgdGhpcy4kcGFyZW50LCB0cnVlKSAmJiB0aGlzLmNvdW50ZXIpe1xuICAgICAgdGhpcy5fcmVwb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICB0aGlzLl9zZXRQb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgZWxlbWVudCB1dGlsaXppbmcgdGhlIHRyaWdnZXJzIHV0aWxpdHkgbGlicmFyeS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdGhpcy4kZWxlbWVudC5vbih7XG4gICAgICAnb3Blbi56Zi50cmlnZ2VyJzogdGhpcy5vcGVuLmJpbmQodGhpcyksXG4gICAgICAnY2xvc2UuemYudHJpZ2dlcic6IHRoaXMuY2xvc2UuYmluZCh0aGlzKSxcbiAgICAgICd0b2dnbGUuemYudHJpZ2dlcic6IHRoaXMudG9nZ2xlLmJpbmQodGhpcyksXG4gICAgICAncmVzaXplbWUuemYudHJpZ2dlcic6IHRoaXMuX3NldFBvc2l0aW9uLmJpbmQodGhpcylcbiAgICB9KTtcblxuICAgIGlmKHRoaXMub3B0aW9ucy5ob3Zlcil7XG4gICAgICB0aGlzLiRhbmNob3Iub2ZmKCdtb3VzZWVudGVyLnpmLmRyb3Bkb3duIG1vdXNlbGVhdmUuemYuZHJvcGRvd24nKVxuICAgICAgLm9uKCdtb3VzZWVudGVyLnpmLmRyb3Bkb3duJywgZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIGJvZHlEYXRhID0gJCgnYm9keScpLmRhdGEoKTtcbiAgICAgICAgaWYodHlwZW9mKGJvZHlEYXRhLndoYXRpbnB1dCkgPT09ICd1bmRlZmluZWQnIHx8IGJvZHlEYXRhLndoYXRpbnB1dCA9PT0gJ21vdXNlJykge1xuICAgICAgICAgIGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0KTtcbiAgICAgICAgICBfdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgX3RoaXMub3BlbigpO1xuICAgICAgICAgICAgX3RoaXMuJGFuY2hvci5kYXRhKCdob3ZlcicsIHRydWUpO1xuICAgICAgICAgIH0sIF90aGlzLm9wdGlvbnMuaG92ZXJEZWxheSk7XG4gICAgICAgIH1cbiAgICAgIH0pLm9uKCdtb3VzZWxlYXZlLnpmLmRyb3Bkb3duJywgZnVuY3Rpb24oKXtcbiAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVvdXQpO1xuICAgICAgICBfdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgIF90aGlzLmNsb3NlKCk7XG4gICAgICAgICAgX3RoaXMuJGFuY2hvci5kYXRhKCdob3ZlcicsIGZhbHNlKTtcbiAgICAgICAgfSwgX3RoaXMub3B0aW9ucy5ob3ZlckRlbGF5KTtcbiAgICAgIH0pO1xuICAgICAgaWYodGhpcy5vcHRpb25zLmhvdmVyUGFuZSl7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdtb3VzZWVudGVyLnpmLmRyb3Bkb3duIG1vdXNlbGVhdmUuemYuZHJvcGRvd24nKVxuICAgICAgICAgICAgLm9uKCdtb3VzZWVudGVyLnpmLmRyb3Bkb3duJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVvdXQpO1xuICAgICAgICAgICAgfSkub24oJ21vdXNlbGVhdmUuemYuZHJvcGRvd24nLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMudGltZW91dCk7XG4gICAgICAgICAgICAgIF90aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBfdGhpcy4kYW5jaG9yLmRhdGEoJ2hvdmVyJywgZmFsc2UpO1xuICAgICAgICAgICAgICB9LCBfdGhpcy5vcHRpb25zLmhvdmVyRGVsYXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuJGFuY2hvci5hZGQodGhpcy4kZWxlbWVudCkub24oJ2tleWRvd24uemYuZHJvcGRvd24nLCBmdW5jdGlvbihlKSB7XG5cbiAgICAgIHZhciAkdGFyZ2V0ID0gJCh0aGlzKSxcbiAgICAgICAgdmlzaWJsZUZvY3VzYWJsZUVsZW1lbnRzID0gRm91bmRhdGlvbi5LZXlib2FyZC5maW5kRm9jdXNhYmxlKF90aGlzLiRlbGVtZW50KTtcblxuICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC5oYW5kbGVLZXkoZSwgJ0Ryb3Bkb3duJywge1xuICAgICAgICBvcGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoJHRhcmdldC5pcyhfdGhpcy4kYW5jaG9yKSkge1xuICAgICAgICAgICAgX3RoaXMub3BlbigpO1xuICAgICAgICAgICAgX3RoaXMuJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnLCAtMSkuZm9jdXMoKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgICAgIF90aGlzLiRhbmNob3IuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBib2R5IHRvIGNsb3NlIGFueSBkcm9wZG93bnMgb24gYSBjbGljay5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkQm9keUhhbmRsZXIoKSB7XG4gICAgIHZhciAkYm9keSA9ICQoZG9jdW1lbnQuYm9keSkubm90KHRoaXMuJGVsZW1lbnQpLFxuICAgICAgICAgX3RoaXMgPSB0aGlzO1xuICAgICAkYm9keS5vZmYoJ2NsaWNrLnpmLmRyb3Bkb3duJylcbiAgICAgICAgICAub24oJ2NsaWNrLnpmLmRyb3Bkb3duJywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgICBpZihfdGhpcy4kYW5jaG9yLmlzKGUudGFyZ2V0KSB8fCBfdGhpcy4kYW5jaG9yLmZpbmQoZS50YXJnZXQpLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihfdGhpcy4kZWxlbWVudC5maW5kKGUudGFyZ2V0KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICRib2R5Lm9mZignY2xpY2suemYuZHJvcGRvd24nKTtcbiAgICAgICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgZHJvcGRvd24gcGFuZSwgYW5kIGZpcmVzIGEgYnViYmxpbmcgZXZlbnQgdG8gY2xvc2Ugb3RoZXIgZHJvcGRvd25zLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIERyb3Bkb3duI2Nsb3NlbWVcbiAgICogQGZpcmVzIERyb3Bkb3duI3Nob3dcbiAgICovXG4gIG9wZW4oKSB7XG4gICAgLy8gdmFyIF90aGlzID0gdGhpcztcbiAgICAvKipcbiAgICAgKiBGaXJlcyB0byBjbG9zZSBvdGhlciBvcGVuIGRyb3Bkb3duc1xuICAgICAqIEBldmVudCBEcm9wZG93biNjbG9zZW1lXG4gICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjbG9zZW1lLnpmLmRyb3Bkb3duJywgdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpKTtcbiAgICB0aGlzLiRhbmNob3IuYWRkQ2xhc3MoJ2hvdmVyJylcbiAgICAgICAgLmF0dHIoeydhcmlhLWV4cGFuZGVkJzogdHJ1ZX0pO1xuICAgIC8vIHRoaXMuJGVsZW1lbnQvKi5zaG93KCkqLztcbiAgICB0aGlzLl9zZXRQb3NpdGlvbigpO1xuICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2lzLW9wZW4nKVxuICAgICAgICAuYXR0cih7J2FyaWEtaGlkZGVuJzogZmFsc2V9KTtcblxuICAgIGlmKHRoaXMub3B0aW9ucy5hdXRvRm9jdXMpe1xuICAgICAgdmFyICRmb2N1c2FibGUgPSBGb3VuZGF0aW9uLktleWJvYXJkLmZpbmRGb2N1c2FibGUodGhpcy4kZWxlbWVudCk7XG4gICAgICBpZigkZm9jdXNhYmxlLmxlbmd0aCl7XG4gICAgICAgICRmb2N1c2FibGUuZXEoMCkuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZih0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrKXsgdGhpcy5fYWRkQm9keUhhbmRsZXIoKTsgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy50cmFwRm9jdXMpIHtcbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQudHJhcEZvY3VzKHRoaXMuJGVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uY2UgdGhlIGRyb3Bkb3duIGlzIHZpc2libGUuXG4gICAgICogQGV2ZW50IERyb3Bkb3duI3Nob3dcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Nob3cuemYuZHJvcGRvd24nLCBbdGhpcy4kZWxlbWVudF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgb3BlbiBkcm9wZG93biBwYW5lLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIERyb3Bkb3duI2hpZGVcbiAgICovXG4gIGNsb3NlKCkge1xuICAgIGlmKCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpcy1vcGVuJykpe1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCdpcy1vcGVuJylcbiAgICAgICAgLmF0dHIoeydhcmlhLWhpZGRlbic6IHRydWV9KTtcblxuICAgIHRoaXMuJGFuY2hvci5yZW1vdmVDbGFzcygnaG92ZXInKVxuICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKTtcblxuICAgIGlmKHRoaXMuY2xhc3NDaGFuZ2VkKXtcbiAgICAgIHZhciBjdXJQb3NpdGlvbkNsYXNzID0gdGhpcy5nZXRQb3NpdGlvbkNsYXNzKCk7XG4gICAgICBpZihjdXJQb3NpdGlvbkNsYXNzKXtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjdXJQb3NpdGlvbkNsYXNzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLnBvc2l0aW9uQ2xhc3MpXG4gICAgICAgICAgLyouaGlkZSgpKi8uY3NzKHtoZWlnaHQ6ICcnLCB3aWR0aDogJyd9KTtcbiAgICAgIHRoaXMuY2xhc3NDaGFuZ2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmNvdW50ZXIgPSA0O1xuICAgICAgdGhpcy51c2VkUG9zaXRpb25zLmxlbmd0aCA9IDA7XG4gICAgfVxuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignaGlkZS56Zi5kcm9wZG93bicsIFt0aGlzLiRlbGVtZW50XSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnRyYXBGb2N1cykge1xuICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC5yZWxlYXNlRm9jdXModGhpcy4kZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGRyb3Bkb3duIHBhbmUncyB2aXNpYmlsaXR5LlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICBpZih0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpcy1vcGVuJykpe1xuICAgICAgaWYodGhpcy4kYW5jaG9yLmRhdGEoJ2hvdmVyJykpIHJldHVybjtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgZHJvcGRvd24uXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZignLnpmLnRyaWdnZXInKS5oaWRlKCk7XG4gICAgdGhpcy4kYW5jaG9yLm9mZignLnpmLmRyb3Bkb3duJyk7XG5cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuRHJvcGRvd24uZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBDbGFzcyB0aGF0IGRlc2lnbmF0ZXMgYm91bmRpbmcgY29udGFpbmVyIG9mIERyb3Bkb3duIChEZWZhdWx0OiB3aW5kb3cpXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ2Ryb3Bkb3duLXBhcmVudCdcbiAgICovXG4gIHBhcmVudENsYXNzOiBudWxsLFxuICAvKipcbiAgICogQW1vdW50IG9mIHRpbWUgdG8gZGVsYXkgb3BlbmluZyBhIHN1Ym1lbnUgb24gaG92ZXIgZXZlbnQuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMjUwXG4gICAqL1xuICBob3ZlckRlbGF5OiAyNTAsXG4gIC8qKlxuICAgKiBBbGxvdyBzdWJtZW51cyB0byBvcGVuIG9uIGhvdmVyIGV2ZW50c1xuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBob3ZlcjogZmFsc2UsXG4gIC8qKlxuICAgKiBEb24ndCBjbG9zZSBkcm9wZG93biB3aGVuIGhvdmVyaW5nIG92ZXIgZHJvcGRvd24gcGFuZVxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGhvdmVyUGFuZTogZmFsc2UsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcGl4ZWxzIGJldHdlZW4gdGhlIGRyb3Bkb3duIHBhbmUgYW5kIHRoZSB0cmlnZ2VyaW5nIGVsZW1lbnQgb24gb3Blbi5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAxXG4gICAqL1xuICB2T2Zmc2V0OiAxLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHBpeGVscyBiZXR3ZWVuIHRoZSBkcm9wZG93biBwYW5lIGFuZCB0aGUgdHJpZ2dlcmluZyBlbGVtZW50IG9uIG9wZW4uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMVxuICAgKi9cbiAgaE9mZnNldDogMSxcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gYWRqdXN0IG9wZW4gcG9zaXRpb24uIEpTIHdpbGwgdGVzdCBhbmQgZmlsbCB0aGlzIGluLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICd0b3AnXG4gICAqL1xuICBwb3NpdGlvbkNsYXNzOiAnJyxcbiAgLyoqXG4gICAqIEFsbG93IHRoZSBwbHVnaW4gdG8gdHJhcCBmb2N1cyB0byB0aGUgZHJvcGRvd24gcGFuZSBpZiBvcGVuZWQgd2l0aCBrZXlib2FyZCBjb21tYW5kcy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgdHJhcEZvY3VzOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93IHRoZSBwbHVnaW4gdG8gc2V0IGZvY3VzIHRvIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCB3aXRoaW4gdGhlIHBhbmUsIHJlZ2FyZGxlc3Mgb2YgbWV0aG9kIG9mIG9wZW5pbmcuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgdHJ1ZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93cyBhIGNsaWNrIG9uIHRoZSBib2R5IHRvIGNsb3NlIHRoZSBkcm9wZG93bi5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgY2xvc2VPbkNsaWNrOiBmYWxzZVxufVxuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oRHJvcGRvd24sICdEcm9wZG93bicpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogRHJvcGRvd25NZW51IG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5kcm9wZG93bi1tZW51XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmtleWJvYXJkXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmJveFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5uZXN0XG4gKi9cblxuY2xhc3MgRHJvcGRvd25NZW51IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgRHJvcGRvd25NZW51LlxuICAgKiBAY2xhc3NcbiAgICogQGZpcmVzIERyb3Bkb3duTWVudSNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYSBkcm9wZG93biBtZW51LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIERyb3Bkb3duTWVudS5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgRm91bmRhdGlvbi5OZXN0LkZlYXRoZXIodGhpcy4kZWxlbWVudCwgJ2Ryb3Bkb3duJyk7XG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnRHJvcGRvd25NZW51Jyk7XG4gICAgRm91bmRhdGlvbi5LZXlib2FyZC5yZWdpc3RlcignRHJvcGRvd25NZW51Jywge1xuICAgICAgJ0VOVEVSJzogJ29wZW4nLFxuICAgICAgJ1NQQUNFJzogJ29wZW4nLFxuICAgICAgJ0FSUk9XX1JJR0hUJzogJ25leHQnLFxuICAgICAgJ0FSUk9XX1VQJzogJ3VwJyxcbiAgICAgICdBUlJPV19ET1dOJzogJ2Rvd24nLFxuICAgICAgJ0FSUk9XX0xFRlQnOiAncHJldmlvdXMnLFxuICAgICAgJ0VTQ0FQRSc6ICdjbG9zZSdcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgcGx1Z2luLCBhbmQgY2FsbHMgX3ByZXBhcmVNZW51XG4gICAqIEBwcml2YXRlXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIHN1YnMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50Jyk7XG4gICAgdGhpcy4kZWxlbWVudC5jaGlsZHJlbignLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50JykuY2hpbGRyZW4oJy5pcy1kcm9wZG93bi1zdWJtZW51JykuYWRkQ2xhc3MoJ2ZpcnN0LXN1YicpO1xuXG4gICAgdGhpcy4kbWVudUl0ZW1zID0gdGhpcy4kZWxlbWVudC5maW5kKCdbcm9sZT1cIm1lbnVpdGVtXCJdJyk7XG4gICAgdGhpcy4kdGFicyA9IHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oJ1tyb2xlPVwibWVudWl0ZW1cIl0nKTtcbiAgICB0aGlzLiR0YWJzLmZpbmQoJ3VsLmlzLWRyb3Bkb3duLXN1Ym1lbnUnKS5hZGRDbGFzcyh0aGlzLm9wdGlvbnMudmVydGljYWxDbGFzcyk7XG5cbiAgICBpZiAodGhpcy4kZWxlbWVudC5oYXNDbGFzcyh0aGlzLm9wdGlvbnMucmlnaHRDbGFzcykgfHwgdGhpcy5vcHRpb25zLmFsaWdubWVudCA9PT0gJ3JpZ2h0JyB8fCBGb3VuZGF0aW9uLnJ0bCgpIHx8IHRoaXMuJGVsZW1lbnQucGFyZW50cygnLnRvcC1iYXItcmlnaHQnKS5pcygnKicpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuYWxpZ25tZW50ID0gJ3JpZ2h0JztcbiAgICAgIHN1YnMuYWRkQ2xhc3MoJ29wZW5zLWxlZnQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3Vicy5hZGRDbGFzcygnb3BlbnMtcmlnaHQnKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH07XG5cbiAgX2lzVmVydGljYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuJHRhYnMuY3NzKCdkaXNwbGF5JykgPT09ICdibG9jayc7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBsaXN0ZW5lcnMgdG8gZWxlbWVudHMgd2l0aGluIHRoZSBtZW51XG4gICAqIEBwcml2YXRlXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBoYXNUb3VjaCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyB8fCAodHlwZW9mIHdpbmRvdy5vbnRvdWNoc3RhcnQgIT09ICd1bmRlZmluZWQnKSxcbiAgICAgICAgcGFyQ2xhc3MgPSAnaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQnO1xuXG4gICAgLy8gdXNlZCBmb3Igb25DbGljayBhbmQgaW4gdGhlIGtleWJvYXJkIGhhbmRsZXJzXG4gICAgdmFyIGhhbmRsZUNsaWNrRm4gPSBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgJGVsZW0gPSAkKGUudGFyZ2V0KS5wYXJlbnRzVW50aWwoJ3VsJywgYC4ke3BhckNsYXNzfWApLFxuICAgICAgICAgIGhhc1N1YiA9ICRlbGVtLmhhc0NsYXNzKHBhckNsYXNzKSxcbiAgICAgICAgICBoYXNDbGlja2VkID0gJGVsZW0uYXR0cignZGF0YS1pcy1jbGljaycpID09PSAndHJ1ZScsXG4gICAgICAgICAgJHN1YiA9ICRlbGVtLmNoaWxkcmVuKCcuaXMtZHJvcGRvd24tc3VibWVudScpO1xuXG4gICAgICBpZiAoaGFzU3ViKSB7XG4gICAgICAgIGlmIChoYXNDbGlja2VkKSB7XG4gICAgICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayB8fCAoIV90aGlzLm9wdGlvbnMuY2xpY2tPcGVuICYmICFoYXNUb3VjaCkgfHwgKF90aGlzLm9wdGlvbnMuZm9yY2VGb2xsb3cgJiYgaGFzVG91Y2gpKSB7IHJldHVybjsgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIF90aGlzLl9oaWRlKCRlbGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgX3RoaXMuX3Nob3coJHN1Yik7XG4gICAgICAgICAgJGVsZW0uYWRkKCRlbGVtLnBhcmVudHNVbnRpbChfdGhpcy4kZWxlbWVudCwgYC4ke3BhckNsYXNzfWApKS5hdHRyKCdkYXRhLWlzLWNsaWNrJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbGlja09wZW4gfHwgaGFzVG91Y2gpIHtcbiAgICAgIHRoaXMuJG1lbnVJdGVtcy5vbignY2xpY2suemYuZHJvcGRvd25tZW51IHRvdWNoc3RhcnQuemYuZHJvcGRvd25tZW51JywgaGFuZGxlQ2xpY2tGbik7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIExlYWYgZWxlbWVudCBDbGlja3NcbiAgICBpZihfdGhpcy5vcHRpb25zLmNsb3NlT25DbGlja0luc2lkZSl7XG4gICAgICB0aGlzLiRtZW51SXRlbXMub24oJ2NsaWNrLnpmLmRyb3Bkb3dubWVudSB0b3VjaGVuZC56Zi5kcm9wZG93bm1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciAkZWxlbSA9ICQodGhpcyksXG4gICAgICAgICAgICBoYXNTdWIgPSAkZWxlbS5oYXNDbGFzcyhwYXJDbGFzcyk7XG4gICAgICAgIGlmKCFoYXNTdWIpe1xuICAgICAgICAgIF90aGlzLl9oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRpb25zLmRpc2FibGVIb3Zlcikge1xuICAgICAgdGhpcy4kbWVudUl0ZW1zLm9uKCdtb3VzZWVudGVyLnpmLmRyb3Bkb3dubWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyICRlbGVtID0gJCh0aGlzKSxcbiAgICAgICAgICAgIGhhc1N1YiA9ICRlbGVtLmhhc0NsYXNzKHBhckNsYXNzKTtcblxuICAgICAgICBpZiAoaGFzU3ViKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KCRlbGVtLmRhdGEoJ19kZWxheScpKTtcbiAgICAgICAgICAkZWxlbS5kYXRhKCdfZGVsYXknLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Nob3coJGVsZW0uY2hpbGRyZW4oJy5pcy1kcm9wZG93bi1zdWJtZW51JykpO1xuICAgICAgICAgIH0sIF90aGlzLm9wdGlvbnMuaG92ZXJEZWxheSkpO1xuICAgICAgICB9XG4gICAgICB9KS5vbignbW91c2VsZWF2ZS56Zi5kcm9wZG93bm1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciAkZWxlbSA9ICQodGhpcyksXG4gICAgICAgICAgICBoYXNTdWIgPSAkZWxlbS5oYXNDbGFzcyhwYXJDbGFzcyk7XG4gICAgICAgIGlmIChoYXNTdWIgJiYgX3RoaXMub3B0aW9ucy5hdXRvY2xvc2UpIHtcbiAgICAgICAgICBpZiAoJGVsZW0uYXR0cignZGF0YS1pcy1jbGljaycpID09PSAndHJ1ZScgJiYgX3RoaXMub3B0aW9ucy5jbGlja09wZW4pIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICAgICAgICBjbGVhclRpbWVvdXQoJGVsZW0uZGF0YSgnX2RlbGF5JykpO1xuICAgICAgICAgICRlbGVtLmRhdGEoJ19kZWxheScsIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBfdGhpcy5faGlkZSgkZWxlbSk7XG4gICAgICAgICAgfSwgX3RoaXMub3B0aW9ucy5jbG9zaW5nVGltZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy4kbWVudUl0ZW1zLm9uKCdrZXlkb3duLnpmLmRyb3Bkb3dubWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHZhciAkZWxlbWVudCA9ICQoZS50YXJnZXQpLnBhcmVudHNVbnRpbCgndWwnLCAnW3JvbGU9XCJtZW51aXRlbVwiXScpLFxuICAgICAgICAgIGlzVGFiID0gX3RoaXMuJHRhYnMuaW5kZXgoJGVsZW1lbnQpID4gLTEsXG4gICAgICAgICAgJGVsZW1lbnRzID0gaXNUYWIgPyBfdGhpcy4kdGFicyA6ICRlbGVtZW50LnNpYmxpbmdzKCdsaScpLmFkZCgkZWxlbWVudCksXG4gICAgICAgICAgJHByZXZFbGVtZW50LFxuICAgICAgICAgICRuZXh0RWxlbWVudDtcblxuICAgICAgJGVsZW1lbnRzLmVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICBpZiAoJCh0aGlzKS5pcygkZWxlbWVudCkpIHtcbiAgICAgICAgICAkcHJldkVsZW1lbnQgPSAkZWxlbWVudHMuZXEoaS0xKTtcbiAgICAgICAgICAkbmV4dEVsZW1lbnQgPSAkZWxlbWVudHMuZXEoaSsxKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgbmV4dFNpYmxpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCEkZWxlbWVudC5pcygnOmxhc3QtY2hpbGQnKSkge1xuICAgICAgICAgICRuZXh0RWxlbWVudC5jaGlsZHJlbignYTpmaXJzdCcpLmZvY3VzKCk7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9LCBwcmV2U2libGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAkcHJldkVsZW1lbnQuY2hpbGRyZW4oJ2E6Zmlyc3QnKS5mb2N1cygpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9LCBvcGVuU3ViID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciAkc3ViID0gJGVsZW1lbnQuY2hpbGRyZW4oJ3VsLmlzLWRyb3Bkb3duLXN1Ym1lbnUnKTtcbiAgICAgICAgaWYgKCRzdWIubGVuZ3RoKSB7XG4gICAgICAgICAgX3RoaXMuX3Nob3coJHN1Yik7XG4gICAgICAgICAgJGVsZW1lbnQuZmluZCgnbGkgPiBhOmZpcnN0JykuZm9jdXMoKTtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSB7IHJldHVybjsgfVxuICAgICAgfSwgY2xvc2VTdWIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy9pZiAoJGVsZW1lbnQuaXMoJzpmaXJzdC1jaGlsZCcpKSB7XG4gICAgICAgIHZhciBjbG9zZSA9ICRlbGVtZW50LnBhcmVudCgndWwnKS5wYXJlbnQoJ2xpJyk7XG4gICAgICAgIGNsb3NlLmNoaWxkcmVuKCdhOmZpcnN0JykuZm9jdXMoKTtcbiAgICAgICAgX3RoaXMuX2hpZGUoY2xvc2UpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIC8vfVxuICAgICAgfTtcbiAgICAgIHZhciBmdW5jdGlvbnMgPSB7XG4gICAgICAgIG9wZW46IG9wZW5TdWIsXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5faGlkZShfdGhpcy4kZWxlbWVudCk7XG4gICAgICAgICAgX3RoaXMuJG1lbnVJdGVtcy5maW5kKCdhOmZpcnN0JykuZm9jdXMoKTsgLy8gZm9jdXMgdG8gZmlyc3QgZWxlbWVudFxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKGlzVGFiKSB7XG4gICAgICAgIGlmIChfdGhpcy5faXNWZXJ0aWNhbCgpKSB7IC8vIHZlcnRpY2FsIG1lbnVcbiAgICAgICAgICBpZiAoRm91bmRhdGlvbi5ydGwoKSkgeyAvLyByaWdodCBhbGlnbmVkXG4gICAgICAgICAgICAkLmV4dGVuZChmdW5jdGlvbnMsIHtcbiAgICAgICAgICAgICAgZG93bjogbmV4dFNpYmxpbmcsXG4gICAgICAgICAgICAgIHVwOiBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgbmV4dDogY2xvc2VTdWIsXG4gICAgICAgICAgICAgIHByZXZpb3VzOiBvcGVuU3ViXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgeyAvLyBsZWZ0IGFsaWduZWRcbiAgICAgICAgICAgICQuZXh0ZW5kKGZ1bmN0aW9ucywge1xuICAgICAgICAgICAgICBkb3duOiBuZXh0U2libGluZyxcbiAgICAgICAgICAgICAgdXA6IHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICBuZXh0OiBvcGVuU3ViLFxuICAgICAgICAgICAgICBwcmV2aW91czogY2xvc2VTdWJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgLy8gaG9yaXpvbnRhbCBtZW51XG4gICAgICAgICAgaWYgKEZvdW5kYXRpb24ucnRsKCkpIHsgLy8gcmlnaHQgYWxpZ25lZFxuICAgICAgICAgICAgJC5leHRlbmQoZnVuY3Rpb25zLCB7XG4gICAgICAgICAgICAgIG5leHQ6IHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICBwcmV2aW91czogbmV4dFNpYmxpbmcsXG4gICAgICAgICAgICAgIGRvd246IG9wZW5TdWIsXG4gICAgICAgICAgICAgIHVwOiBjbG9zZVN1YlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHsgLy8gbGVmdCBhbGlnbmVkXG4gICAgICAgICAgICAkLmV4dGVuZChmdW5jdGlvbnMsIHtcbiAgICAgICAgICAgICAgbmV4dDogbmV4dFNpYmxpbmcsXG4gICAgICAgICAgICAgIHByZXZpb3VzOiBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgZG93bjogb3BlblN1YixcbiAgICAgICAgICAgICAgdXA6IGNsb3NlU3ViXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IC8vIG5vdCB0YWJzIC0+IG9uZSBzdWJcbiAgICAgICAgaWYgKEZvdW5kYXRpb24ucnRsKCkpIHsgLy8gcmlnaHQgYWxpZ25lZFxuICAgICAgICAgICQuZXh0ZW5kKGZ1bmN0aW9ucywge1xuICAgICAgICAgICAgbmV4dDogY2xvc2VTdWIsXG4gICAgICAgICAgICBwcmV2aW91czogb3BlblN1YixcbiAgICAgICAgICAgIGRvd246IG5leHRTaWJsaW5nLFxuICAgICAgICAgICAgdXA6IHByZXZTaWJsaW5nXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7IC8vIGxlZnQgYWxpZ25lZFxuICAgICAgICAgICQuZXh0ZW5kKGZ1bmN0aW9ucywge1xuICAgICAgICAgICAgbmV4dDogb3BlblN1YixcbiAgICAgICAgICAgIHByZXZpb3VzOiBjbG9zZVN1YixcbiAgICAgICAgICAgIGRvd246IG5leHRTaWJsaW5nLFxuICAgICAgICAgICAgdXA6IHByZXZTaWJsaW5nXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQuaGFuZGxlS2V5KGUsICdEcm9wZG93bk1lbnUnLCBmdW5jdGlvbnMpO1xuXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBib2R5IHRvIGNsb3NlIGFueSBkcm9wZG93bnMgb24gYSBjbGljay5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkQm9keUhhbmRsZXIoKSB7XG4gICAgdmFyICRib2R5ID0gJChkb2N1bWVudC5ib2R5KSxcbiAgICAgICAgX3RoaXMgPSB0aGlzO1xuICAgICRib2R5Lm9mZignbW91c2V1cC56Zi5kcm9wZG93bm1lbnUgdG91Y2hlbmQuemYuZHJvcGRvd25tZW51JylcbiAgICAgICAgIC5vbignbW91c2V1cC56Zi5kcm9wZG93bm1lbnUgdG91Y2hlbmQuemYuZHJvcGRvd25tZW51JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICB2YXIgJGxpbmsgPSBfdGhpcy4kZWxlbWVudC5maW5kKGUudGFyZ2V0KTtcbiAgICAgICAgICAgaWYgKCRsaW5rLmxlbmd0aCkgeyByZXR1cm47IH1cblxuICAgICAgICAgICBfdGhpcy5faGlkZSgpO1xuICAgICAgICAgICAkYm9keS5vZmYoJ21vdXNldXAuemYuZHJvcGRvd25tZW51IHRvdWNoZW5kLnpmLmRyb3Bkb3dubWVudScpO1xuICAgICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYSBkcm9wZG93biBwYW5lLCBhbmQgY2hlY2tzIGZvciBjb2xsaXNpb25zIGZpcnN0LlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHN1YiAtIHVsIGVsZW1lbnQgdGhhdCBpcyBhIHN1Ym1lbnUgdG8gc2hvd1xuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQGZpcmVzIERyb3Bkb3duTWVudSNzaG93XG4gICAqL1xuICBfc2hvdygkc3ViKSB7XG4gICAgdmFyIGlkeCA9IHRoaXMuJHRhYnMuaW5kZXgodGhpcy4kdGFicy5maWx0ZXIoZnVuY3Rpb24oaSwgZWwpIHtcbiAgICAgIHJldHVybiAkKGVsKS5maW5kKCRzdWIpLmxlbmd0aCA+IDA7XG4gICAgfSkpO1xuICAgIHZhciAkc2licyA9ICRzdWIucGFyZW50KCdsaS5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCcpLnNpYmxpbmdzKCdsaS5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCcpO1xuICAgIHRoaXMuX2hpZGUoJHNpYnMsIGlkeCk7XG4gICAgJHN1Yi5jc3MoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJykuYWRkQ2xhc3MoJ2pzLWRyb3Bkb3duLWFjdGl2ZScpXG4gICAgICAgIC5wYXJlbnQoJ2xpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50JykuYWRkQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuICAgIHZhciBjbGVhciA9IEZvdW5kYXRpb24uQm94LkltTm90VG91Y2hpbmdZb3UoJHN1YiwgbnVsbCwgdHJ1ZSk7XG4gICAgaWYgKCFjbGVhcikge1xuICAgICAgdmFyIG9sZENsYXNzID0gdGhpcy5vcHRpb25zLmFsaWdubWVudCA9PT0gJ2xlZnQnID8gJy1yaWdodCcgOiAnLWxlZnQnLFxuICAgICAgICAgICRwYXJlbnRMaSA9ICRzdWIucGFyZW50KCcuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQnKTtcbiAgICAgICRwYXJlbnRMaS5yZW1vdmVDbGFzcyhgb3BlbnMke29sZENsYXNzfWApLmFkZENsYXNzKGBvcGVucy0ke3RoaXMub3B0aW9ucy5hbGlnbm1lbnR9YCk7XG4gICAgICBjbGVhciA9IEZvdW5kYXRpb24uQm94LkltTm90VG91Y2hpbmdZb3UoJHN1YiwgbnVsbCwgdHJ1ZSk7XG4gICAgICBpZiAoIWNsZWFyKSB7XG4gICAgICAgICRwYXJlbnRMaS5yZW1vdmVDbGFzcyhgb3BlbnMtJHt0aGlzLm9wdGlvbnMuYWxpZ25tZW50fWApLmFkZENsYXNzKCdvcGVucy1pbm5lcicpO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgJHN1Yi5jc3MoJ3Zpc2liaWxpdHknLCAnJyk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2spIHsgdGhpcy5fYWRkQm9keUhhbmRsZXIoKTsgfVxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIG5ldyBkcm9wZG93biBwYW5lIGlzIHZpc2libGUuXG4gICAgICogQGV2ZW50IERyb3Bkb3duTWVudSNzaG93XG4gICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdzaG93LnpmLmRyb3Bkb3dubWVudScsIFskc3ViXSk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgYSBzaW5nbGUsIGN1cnJlbnRseSBvcGVuIGRyb3Bkb3duIHBhbmUsIGlmIHBhc3NlZCBhIHBhcmFtZXRlciwgb3RoZXJ3aXNlLCBoaWRlcyBldmVyeXRoaW5nLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtqUXVlcnl9ICRlbGVtIC0gZWxlbWVudCB3aXRoIGEgc3VibWVudSB0byBoaWRlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZHggLSBpbmRleCBvZiB0aGUgJHRhYnMgY29sbGVjdGlvbiB0byBoaWRlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZSgkZWxlbSwgaWR4KSB7XG4gICAgdmFyICR0b0Nsb3NlO1xuICAgIGlmICgkZWxlbSAmJiAkZWxlbS5sZW5ndGgpIHtcbiAgICAgICR0b0Nsb3NlID0gJGVsZW07XG4gICAgfSBlbHNlIGlmIChpZHggIT09IHVuZGVmaW5lZCkge1xuICAgICAgJHRvQ2xvc2UgPSB0aGlzLiR0YWJzLm5vdChmdW5jdGlvbihpLCBlbCkge1xuICAgICAgICByZXR1cm4gaSA9PT0gaWR4O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgJHRvQ2xvc2UgPSB0aGlzLiRlbGVtZW50O1xuICAgIH1cbiAgICB2YXIgc29tZXRoaW5nVG9DbG9zZSA9ICR0b0Nsb3NlLmhhc0NsYXNzKCdpcy1hY3RpdmUnKSB8fCAkdG9DbG9zZS5maW5kKCcuaXMtYWN0aXZlJykubGVuZ3RoID4gMDtcblxuICAgIGlmIChzb21ldGhpbmdUb0Nsb3NlKSB7XG4gICAgICAkdG9DbG9zZS5maW5kKCdsaS5pcy1hY3RpdmUnKS5hZGQoJHRvQ2xvc2UpLmF0dHIoe1xuICAgICAgICAnZGF0YS1pcy1jbGljayc6IGZhbHNlXG4gICAgICB9KS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlJyk7XG5cbiAgICAgICR0b0Nsb3NlLmZpbmQoJ3VsLmpzLWRyb3Bkb3duLWFjdGl2ZScpLnJlbW92ZUNsYXNzKCdqcy1kcm9wZG93bi1hY3RpdmUnKTtcblxuICAgICAgaWYgKHRoaXMuY2hhbmdlZCB8fCAkdG9DbG9zZS5maW5kKCdvcGVucy1pbm5lcicpLmxlbmd0aCkge1xuICAgICAgICB2YXIgb2xkQ2xhc3MgPSB0aGlzLm9wdGlvbnMuYWxpZ25tZW50ID09PSAnbGVmdCcgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICAkdG9DbG9zZS5maW5kKCdsaS5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCcpLmFkZCgkdG9DbG9zZSlcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoYG9wZW5zLWlubmVyIG9wZW5zLSR7dGhpcy5vcHRpb25zLmFsaWdubWVudH1gKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhgb3BlbnMtJHtvbGRDbGFzc31gKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIEZpcmVzIHdoZW4gdGhlIG9wZW4gbWVudXMgYXJlIGNsb3NlZC5cbiAgICAgICAqIEBldmVudCBEcm9wZG93bk1lbnUjaGlkZVxuICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2hpZGUuemYuZHJvcGRvd25tZW51JywgWyR0b0Nsb3NlXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBwbHVnaW4uXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLiRtZW51SXRlbXMub2ZmKCcuemYuZHJvcGRvd25tZW51JykucmVtb3ZlQXR0cignZGF0YS1pcy1jbGljaycpXG4gICAgICAgIC5yZW1vdmVDbGFzcygnaXMtcmlnaHQtYXJyb3cgaXMtbGVmdC1hcnJvdyBpcy1kb3duLWFycm93IG9wZW5zLXJpZ2h0IG9wZW5zLWxlZnQgb3BlbnMtaW5uZXInKTtcbiAgICAkKGRvY3VtZW50LmJvZHkpLm9mZignLnpmLmRyb3Bkb3dubWVudScpO1xuICAgIEZvdW5kYXRpb24uTmVzdC5CdXJuKHRoaXMuJGVsZW1lbnQsICdkcm9wZG93bicpO1xuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIHBsdWdpblxuICovXG5Ecm9wZG93bk1lbnUuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBEaXNhbGxvd3MgaG92ZXIgZXZlbnRzIGZyb20gb3BlbmluZyBzdWJtZW51c1xuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBkaXNhYmxlSG92ZXI6IGZhbHNlLFxuICAvKipcbiAgICogQWxsb3cgYSBzdWJtZW51IHRvIGF1dG9tYXRpY2FsbHkgY2xvc2Ugb24gYSBtb3VzZWxlYXZlIGV2ZW50LCBpZiBub3QgY2xpY2tlZCBvcGVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGF1dG9jbG9zZTogdHJ1ZSxcbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIHRvIGRlbGF5IG9wZW5pbmcgYSBzdWJtZW51IG9uIGhvdmVyIGV2ZW50LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDUwXG4gICAqL1xuICBob3ZlckRlbGF5OiA1MCxcbiAgLyoqXG4gICAqIEFsbG93IGEgc3VibWVudSB0byBvcGVuL3JlbWFpbiBvcGVuIG9uIHBhcmVudCBjbGljayBldmVudC4gQWxsb3dzIGN1cnNvciB0byBtb3ZlIGF3YXkgZnJvbSBtZW51LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGNsaWNrT3BlbjogZmFsc2UsXG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdGltZSB0byBkZWxheSBjbG9zaW5nIGEgc3VibWVudSBvbiBhIG1vdXNlbGVhdmUgZXZlbnQuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgNTAwXG4gICAqL1xuXG4gIGNsb3NpbmdUaW1lOiA1MDAsXG4gIC8qKlxuICAgKiBQb3NpdGlvbiBvZiB0aGUgbWVudSByZWxhdGl2ZSB0byB3aGF0IGRpcmVjdGlvbiB0aGUgc3VibWVudXMgc2hvdWxkIG9wZW4uIEhhbmRsZWQgYnkgSlMuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ2xlZnQnXG4gICAqL1xuICBhbGlnbm1lbnQ6ICdsZWZ0JyxcbiAgLyoqXG4gICAqIEFsbG93IGNsaWNrcyBvbiB0aGUgYm9keSB0byBjbG9zZSBhbnkgb3BlbiBzdWJtZW51cy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSB0cnVlXG4gICAqL1xuICBjbG9zZU9uQ2xpY2s6IHRydWUsXG4gIC8qKlxuICAgKiBBbGxvdyBjbGlja3Mgb24gbGVhZiBhbmNob3IgbGlua3MgdG8gY2xvc2UgYW55IG9wZW4gc3VibWVudXMuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgdHJ1ZVxuICAgKi9cbiAgY2xvc2VPbkNsaWNrSW5zaWRlOiB0cnVlLFxuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB2ZXJ0aWNhbCBvcmllbnRlZCBtZW51cywgRm91bmRhdGlvbiBkZWZhdWx0IGlzIGB2ZXJ0aWNhbGAuIFVwZGF0ZSB0aGlzIGlmIHVzaW5nIHlvdXIgb3duIGNsYXNzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICd2ZXJ0aWNhbCdcbiAgICovXG4gIHZlcnRpY2FsQ2xhc3M6ICd2ZXJ0aWNhbCcsXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIHJpZ2h0LXNpZGUgb3JpZW50ZWQgbWVudXMsIEZvdW5kYXRpb24gZGVmYXVsdCBpcyBgYWxpZ24tcmlnaHRgLiBVcGRhdGUgdGhpcyBpZiB1c2luZyB5b3VyIG93biBjbGFzcy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnYWxpZ24tcmlnaHQnXG4gICAqL1xuICByaWdodENsYXNzOiAnYWxpZ24tcmlnaHQnLFxuICAvKipcbiAgICogQm9vbGVhbiB0byBmb3JjZSBvdmVyaWRlIHRoZSBjbGlja2luZyBvZiBsaW5rcyB0byBwZXJmb3JtIGRlZmF1bHQgYWN0aW9uLCBvbiBzZWNvbmQgdG91Y2ggZXZlbnQgZm9yIG1vYmlsZS5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgZm9yY2VGb2xsb3c6IHRydWVcbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihEcm9wZG93bk1lbnUsICdEcm9wZG93bk1lbnUnKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIEVxdWFsaXplciBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uZXF1YWxpemVyXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1lZGlhUXVlcnlcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudGltZXJBbmRJbWFnZUxvYWRlciBpZiBlcXVhbGl6ZXIgY29udGFpbnMgaW1hZ2VzXG4gKi9cblxuY2xhc3MgRXF1YWxpemVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgRXF1YWxpemVyLlxuICAgKiBAY2xhc3NcbiAgICogQGZpcmVzIEVxdWFsaXplciNpbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIHRyaWdnZXIgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpe1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyAgPSAkLmV4dGVuZCh7fSwgRXF1YWxpemVyLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdFcXVhbGl6ZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgRXF1YWxpemVyIHBsdWdpbiBhbmQgY2FsbHMgZnVuY3Rpb25zIHRvIGdldCBlcXVhbGl6ZXIgZnVuY3Rpb25pbmcgb24gbG9hZC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciBlcUlkID0gdGhpcy4kZWxlbWVudC5hdHRyKCdkYXRhLWVxdWFsaXplcicpIHx8ICcnO1xuICAgIHZhciAkd2F0Y2hlZCA9IHRoaXMuJGVsZW1lbnQuZmluZChgW2RhdGEtZXF1YWxpemVyLXdhdGNoPVwiJHtlcUlkfVwiXWApO1xuXG4gICAgdGhpcy4kd2F0Y2hlZCA9ICR3YXRjaGVkLmxlbmd0aCA/ICR3YXRjaGVkIDogdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1lcXVhbGl6ZXItd2F0Y2hdJyk7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCdkYXRhLXJlc2l6ZScsIChlcUlkIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ2VxJykpKTtcblx0dGhpcy4kZWxlbWVudC5hdHRyKCdkYXRhLW11dGF0ZScsIChlcUlkIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ2VxJykpKTtcblxuICAgIHRoaXMuaGFzTmVzdGVkID0gdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1lcXVhbGl6ZXJdJykubGVuZ3RoID4gMDtcbiAgICB0aGlzLmlzTmVzdGVkID0gdGhpcy4kZWxlbWVudC5wYXJlbnRzVW50aWwoZG9jdW1lbnQuYm9keSwgJ1tkYXRhLWVxdWFsaXplcl0nKS5sZW5ndGggPiAwO1xuICAgIHRoaXMuaXNPbiA9IGZhbHNlO1xuICAgIHRoaXMuX2JpbmRIYW5kbGVyID0ge1xuICAgICAgb25SZXNpemVNZUJvdW5kOiB0aGlzLl9vblJlc2l6ZU1lLmJpbmQodGhpcyksXG4gICAgICBvblBvc3RFcXVhbGl6ZWRCb3VuZDogdGhpcy5fb25Qb3N0RXF1YWxpemVkLmJpbmQodGhpcylcbiAgICB9O1xuXG4gICAgdmFyIGltZ3MgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2ltZycpO1xuICAgIHZhciB0b29TbWFsbDtcbiAgICBpZih0aGlzLm9wdGlvbnMuZXF1YWxpemVPbil7XG4gICAgICB0b29TbWFsbCA9IHRoaXMuX2NoZWNrTVEoKTtcbiAgICAgICQod2luZG93KS5vbignY2hhbmdlZC56Zi5tZWRpYXF1ZXJ5JywgdGhpcy5fY2hlY2tNUS5iaW5kKHRoaXMpKTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuX2V2ZW50cygpO1xuICAgIH1cbiAgICBpZigodG9vU21hbGwgIT09IHVuZGVmaW5lZCAmJiB0b29TbWFsbCA9PT0gZmFsc2UpIHx8IHRvb1NtYWxsID09PSB1bmRlZmluZWQpe1xuICAgICAgaWYoaW1ncy5sZW5ndGgpe1xuICAgICAgICBGb3VuZGF0aW9uLm9uSW1hZ2VzTG9hZGVkKGltZ3MsIHRoaXMuX3JlZmxvdy5iaW5kKHRoaXMpKTtcbiAgICAgIH1lbHNle1xuICAgICAgICB0aGlzLl9yZWZsb3coKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBldmVudCBsaXN0ZW5lcnMgaWYgdGhlIGJyZWFrcG9pbnQgaXMgdG9vIHNtYWxsLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BhdXNlRXZlbnRzKCkge1xuICAgIHRoaXMuaXNPbiA9IGZhbHNlO1xuICAgIHRoaXMuJGVsZW1lbnQub2ZmKHtcbiAgICAgICcuemYuZXF1YWxpemVyJzogdGhpcy5fYmluZEhhbmRsZXIub25Qb3N0RXF1YWxpemVkQm91bmQsXG4gICAgICAncmVzaXplbWUuemYudHJpZ2dlcic6IHRoaXMuX2JpbmRIYW5kbGVyLm9uUmVzaXplTWVCb3VuZCxcblx0ICAnbXV0YXRlbWUuemYudHJpZ2dlcic6IHRoaXMuX2JpbmRIYW5kbGVyLm9uUmVzaXplTWVCb3VuZFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGZ1bmN0aW9uIHRvIGhhbmRsZSAkZWxlbWVudHMgcmVzaXplbWUuemYudHJpZ2dlciwgd2l0aCBib3VuZCB0aGlzIG9uIF9iaW5kSGFuZGxlci5vblJlc2l6ZU1lQm91bmRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblJlc2l6ZU1lKGUpIHtcbiAgICB0aGlzLl9yZWZsb3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBmdW5jdGlvbiB0byBoYW5kbGUgJGVsZW1lbnRzIHBvc3RlcXVhbGl6ZWQuemYuZXF1YWxpemVyLCB3aXRoIGJvdW5kIHRoaXMgb24gX2JpbmRIYW5kbGVyLm9uUG9zdEVxdWFsaXplZEJvdW5kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25Qb3N0RXF1YWxpemVkKGUpIHtcbiAgICBpZihlLnRhcmdldCAhPT0gdGhpcy4kZWxlbWVudFswXSl7IHRoaXMuX3JlZmxvdygpOyB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgZXZlbnRzIGZvciBFcXVhbGl6ZXIuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdGhpcy5fcGF1c2VFdmVudHMoKTtcbiAgICBpZih0aGlzLmhhc05lc3RlZCl7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCdwb3N0ZXF1YWxpemVkLnpmLmVxdWFsaXplcicsIHRoaXMuX2JpbmRIYW5kbGVyLm9uUG9zdEVxdWFsaXplZEJvdW5kKTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInLCB0aGlzLl9iaW5kSGFuZGxlci5vblJlc2l6ZU1lQm91bmQpO1xuXHQgIHRoaXMuJGVsZW1lbnQub24oJ211dGF0ZW1lLnpmLnRyaWdnZXInLCB0aGlzLl9iaW5kSGFuZGxlci5vblJlc2l6ZU1lQm91bmQpO1xuICAgIH1cbiAgICB0aGlzLmlzT24gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgY3VycmVudCBicmVha3BvaW50IHRvIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHNpemUuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tNUSgpIHtcbiAgICB2YXIgdG9vU21hbGwgPSAhRm91bmRhdGlvbi5NZWRpYVF1ZXJ5LmlzKHRoaXMub3B0aW9ucy5lcXVhbGl6ZU9uKTtcbiAgICBpZih0b29TbWFsbCl7XG4gICAgICBpZih0aGlzLmlzT24pe1xuICAgICAgICB0aGlzLl9wYXVzZUV2ZW50cygpO1xuICAgICAgICB0aGlzLiR3YXRjaGVkLmNzcygnaGVpZ2h0JywgJ2F1dG8nKTtcbiAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgIGlmKCF0aGlzLmlzT24pe1xuICAgICAgICB0aGlzLl9ldmVudHMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvb1NtYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgbm9vcCB2ZXJzaW9uIGZvciB0aGUgcGx1Z2luXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfa2lsbHN3aXRjaCgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgbmVjZXNzYXJ5IGZ1bmN0aW9ucyB0byB1cGRhdGUgRXF1YWxpemVyIHVwb24gRE9NIGNoYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlZmxvdygpIHtcbiAgICBpZighdGhpcy5vcHRpb25zLmVxdWFsaXplT25TdGFjayl7XG4gICAgICBpZih0aGlzLl9pc1N0YWNrZWQoKSl7XG4gICAgICAgIHRoaXMuJHdhdGNoZWQuY3NzKCdoZWlnaHQnLCAnYXV0bycpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXF1YWxpemVCeVJvdykge1xuICAgICAgdGhpcy5nZXRIZWlnaHRzQnlSb3codGhpcy5hcHBseUhlaWdodEJ5Um93LmJpbmQodGhpcykpO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5nZXRIZWlnaHRzKHRoaXMuYXBwbHlIZWlnaHQuYmluZCh0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGRldGVybWluZXMgaWYgdGhlIGZpcnN0IDIgZWxlbWVudHMgYXJlICpOT1QqIHN0YWNrZWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaXNTdGFja2VkKCkge1xuICAgIGlmICghdGhpcy4kd2F0Y2hlZFswXSB8fCAhdGhpcy4kd2F0Y2hlZFsxXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiR3YXRjaGVkWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAhPT0gdGhpcy4kd2F0Y2hlZFsxXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIG91dGVyIGhlaWdodHMgb2YgY2hpbGRyZW4gY29udGFpbmVkIHdpdGhpbiBhbiBFcXVhbGl6ZXIgcGFyZW50IGFuZCByZXR1cm5zIHRoZW0gaW4gYW4gYXJyYXlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBBIG5vbi1vcHRpb25hbCBjYWxsYmFjayB0byByZXR1cm4gdGhlIGhlaWdodHMgYXJyYXkgdG8uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gaGVpZ2h0cyAtIEFuIGFycmF5IG9mIGhlaWdodHMgb2YgY2hpbGRyZW4gd2l0aGluIEVxdWFsaXplciBjb250YWluZXJcbiAgICovXG4gIGdldEhlaWdodHMoY2IpIHtcbiAgICB2YXIgaGVpZ2h0cyA9IFtdO1xuICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IHRoaXMuJHdhdGNoZWQubGVuZ3RoOyBpIDwgbGVuOyBpKyspe1xuICAgICAgdGhpcy4kd2F0Y2hlZFtpXS5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICBoZWlnaHRzLnB1c2godGhpcy4kd2F0Y2hlZFtpXS5vZmZzZXRIZWlnaHQpO1xuICAgIH1cbiAgICBjYihoZWlnaHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgb3V0ZXIgaGVpZ2h0cyBvZiBjaGlsZHJlbiBjb250YWluZWQgd2l0aGluIGFuIEVxdWFsaXplciBwYXJlbnQgYW5kIHJldHVybnMgdGhlbSBpbiBhbiBhcnJheVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYiAtIEEgbm9uLW9wdGlvbmFsIGNhbGxiYWNrIHRvIHJldHVybiB0aGUgaGVpZ2h0cyBhcnJheSB0by5cbiAgICogQHJldHVybnMge0FycmF5fSBncm91cHMgLSBBbiBhcnJheSBvZiBoZWlnaHRzIG9mIGNoaWxkcmVuIHdpdGhpbiBFcXVhbGl6ZXIgY29udGFpbmVyIGdyb3VwZWQgYnkgcm93IHdpdGggZWxlbWVudCxoZWlnaHQgYW5kIG1heCBhcyBsYXN0IGNoaWxkXG4gICAqL1xuICBnZXRIZWlnaHRzQnlSb3coY2IpIHtcbiAgICB2YXIgbGFzdEVsVG9wT2Zmc2V0ID0gKHRoaXMuJHdhdGNoZWQubGVuZ3RoID8gdGhpcy4kd2F0Y2hlZC5maXJzdCgpLm9mZnNldCgpLnRvcCA6IDApLFxuICAgICAgICBncm91cHMgPSBbXSxcbiAgICAgICAgZ3JvdXAgPSAwO1xuICAgIC8vZ3JvdXAgYnkgUm93XG4gICAgZ3JvdXBzW2dyb3VwXSA9IFtdO1xuICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IHRoaXMuJHdhdGNoZWQubGVuZ3RoOyBpIDwgbGVuOyBpKyspe1xuICAgICAgdGhpcy4kd2F0Y2hlZFtpXS5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICAvL21heWJlIGNvdWxkIHVzZSB0aGlzLiR3YXRjaGVkW2ldLm9mZnNldFRvcFxuICAgICAgdmFyIGVsT2Zmc2V0VG9wID0gJCh0aGlzLiR3YXRjaGVkW2ldKS5vZmZzZXQoKS50b3A7XG4gICAgICBpZiAoZWxPZmZzZXRUb3AhPWxhc3RFbFRvcE9mZnNldCkge1xuICAgICAgICBncm91cCsrO1xuICAgICAgICBncm91cHNbZ3JvdXBdID0gW107XG4gICAgICAgIGxhc3RFbFRvcE9mZnNldD1lbE9mZnNldFRvcDtcbiAgICAgIH1cbiAgICAgIGdyb3Vwc1tncm91cF0ucHVzaChbdGhpcy4kd2F0Y2hlZFtpXSx0aGlzLiR3YXRjaGVkW2ldLm9mZnNldEhlaWdodF0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwLCBsbiA9IGdyb3Vwcy5sZW5ndGg7IGogPCBsbjsgaisrKSB7XG4gICAgICB2YXIgaGVpZ2h0cyA9ICQoZ3JvdXBzW2pdKS5tYXAoZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXNbMV07IH0pLmdldCgpO1xuICAgICAgdmFyIG1heCAgICAgICAgID0gTWF0aC5tYXguYXBwbHkobnVsbCwgaGVpZ2h0cyk7XG4gICAgICBncm91cHNbal0ucHVzaChtYXgpO1xuICAgIH1cbiAgICBjYihncm91cHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIENTUyBoZWlnaHQgcHJvcGVydHkgb2YgZWFjaCBjaGlsZCBpbiBhbiBFcXVhbGl6ZXIgcGFyZW50IHRvIG1hdGNoIHRoZSB0YWxsZXN0XG4gICAqIEBwYXJhbSB7YXJyYXl9IGhlaWdodHMgLSBBbiBhcnJheSBvZiBoZWlnaHRzIG9mIGNoaWxkcmVuIHdpdGhpbiBFcXVhbGl6ZXIgY29udGFpbmVyXG4gICAqIEBmaXJlcyBFcXVhbGl6ZXIjcHJlZXF1YWxpemVkXG4gICAqIEBmaXJlcyBFcXVhbGl6ZXIjcG9zdGVxdWFsaXplZFxuICAgKi9cbiAgYXBwbHlIZWlnaHQoaGVpZ2h0cykge1xuICAgIHZhciBtYXggPSBNYXRoLm1heC5hcHBseShudWxsLCBoZWlnaHRzKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgdGhlIGhlaWdodHMgYXJlIGFwcGxpZWRcbiAgICAgKiBAZXZlbnQgRXF1YWxpemVyI3ByZWVxdWFsaXplZFxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigncHJlZXF1YWxpemVkLnpmLmVxdWFsaXplcicpO1xuXG4gICAgdGhpcy4kd2F0Y2hlZC5jc3MoJ2hlaWdodCcsIG1heCk7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBoZWlnaHRzIGhhdmUgYmVlbiBhcHBsaWVkXG4gICAgICogQGV2ZW50IEVxdWFsaXplciNwb3N0ZXF1YWxpemVkXG4gICAgICovXG4gICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigncG9zdGVxdWFsaXplZC56Zi5lcXVhbGl6ZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBDU1MgaGVpZ2h0IHByb3BlcnR5IG9mIGVhY2ggY2hpbGQgaW4gYW4gRXF1YWxpemVyIHBhcmVudCB0byBtYXRjaCB0aGUgdGFsbGVzdCBieSByb3dcbiAgICogQHBhcmFtIHthcnJheX0gZ3JvdXBzIC0gQW4gYXJyYXkgb2YgaGVpZ2h0cyBvZiBjaGlsZHJlbiB3aXRoaW4gRXF1YWxpemVyIGNvbnRhaW5lciBncm91cGVkIGJ5IHJvdyB3aXRoIGVsZW1lbnQsaGVpZ2h0IGFuZCBtYXggYXMgbGFzdCBjaGlsZFxuICAgKiBAZmlyZXMgRXF1YWxpemVyI3ByZWVxdWFsaXplZFxuICAgKiBAZmlyZXMgRXF1YWxpemVyI3ByZWVxdWFsaXplZHJvd1xuICAgKiBAZmlyZXMgRXF1YWxpemVyI3Bvc3RlcXVhbGl6ZWRyb3dcbiAgICogQGZpcmVzIEVxdWFsaXplciNwb3N0ZXF1YWxpemVkXG4gICAqL1xuICBhcHBseUhlaWdodEJ5Um93KGdyb3Vwcykge1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSB0aGUgaGVpZ2h0cyBhcmUgYXBwbGllZFxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigncHJlZXF1YWxpemVkLnpmLmVxdWFsaXplcicpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBncm91cHMubGVuZ3RoOyBpIDwgbGVuIDsgaSsrKSB7XG4gICAgICB2YXIgZ3JvdXBzSUxlbmd0aCA9IGdyb3Vwc1tpXS5sZW5ndGgsXG4gICAgICAgICAgbWF4ID0gZ3JvdXBzW2ldW2dyb3Vwc0lMZW5ndGggLSAxXTtcbiAgICAgIGlmIChncm91cHNJTGVuZ3RoPD0yKSB7XG4gICAgICAgICQoZ3JvdXBzW2ldWzBdWzBdKS5jc3MoeydoZWlnaHQnOidhdXRvJ30pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8qKlxuICAgICAgICAqIEZpcmVzIGJlZm9yZSB0aGUgaGVpZ2h0cyBwZXIgcm93IGFyZSBhcHBsaWVkXG4gICAgICAgICogQGV2ZW50IEVxdWFsaXplciNwcmVlcXVhbGl6ZWRyb3dcbiAgICAgICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigncHJlZXF1YWxpemVkcm93LnpmLmVxdWFsaXplcicpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGxlbkogPSAoZ3JvdXBzSUxlbmd0aC0xKTsgaiA8IGxlbkogOyBqKyspIHtcbiAgICAgICAgJChncm91cHNbaV1bal1bMF0pLmNzcyh7J2hlaWdodCc6bWF4fSk7XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBoZWlnaHRzIHBlciByb3cgaGF2ZSBiZWVuIGFwcGxpZWRcbiAgICAgICAgKiBAZXZlbnQgRXF1YWxpemVyI3Bvc3RlcXVhbGl6ZWRyb3dcbiAgICAgICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigncG9zdGVxdWFsaXplZHJvdy56Zi5lcXVhbGl6ZXInKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgaGVpZ2h0cyBoYXZlIGJlZW4gYXBwbGllZFxuICAgICAqL1xuICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Bvc3RlcXVhbGl6ZWQuemYuZXF1YWxpemVyJyk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgRXF1YWxpemVyLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fcGF1c2VFdmVudHMoKTtcbiAgICB0aGlzLiR3YXRjaGVkLmNzcygnaGVpZ2h0JywgJ2F1dG8nKTtcblxuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIHBsdWdpblxuICovXG5FcXVhbGl6ZXIuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBFbmFibGUgaGVpZ2h0IGVxdWFsaXphdGlvbiB3aGVuIHN0YWNrZWQgb24gc21hbGxlciBzY3JlZW5zLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGVxdWFsaXplT25TdGFjazogZmFsc2UsXG4gIC8qKlxuICAgKiBFbmFibGUgaGVpZ2h0IGVxdWFsaXphdGlvbiByb3cgYnkgcm93LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBlcXVhbGl6ZUJ5Um93OiBmYWxzZSxcbiAgLyoqXG4gICAqIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIG1pbmltdW0gYnJlYWtwb2ludCBzaXplIHRoZSBwbHVnaW4gc2hvdWxkIGVxdWFsaXplIGhlaWdodHMgb24uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ21lZGl1bSdcbiAgICovXG4gIGVxdWFsaXplT246ICcnXG59O1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oRXF1YWxpemVyLCAnRXF1YWxpemVyJyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBJbnRlcmNoYW5nZSBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uaW50ZXJjaGFuZ2VcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50aW1lckFuZEltYWdlTG9hZGVyXG4gKi9cblxuY2xhc3MgSW50ZXJjaGFuZ2Uge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBJbnRlcmNoYW5nZS5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBJbnRlcmNoYW5nZSNpbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIHRyaWdnZXIgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgSW50ZXJjaGFuZ2UuZGVmYXVsdHMsIG9wdGlvbnMpO1xuICAgIHRoaXMucnVsZXMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gJyc7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdJbnRlcmNoYW5nZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBJbnRlcmNoYW5nZSBwbHVnaW4gYW5kIGNhbGxzIGZ1bmN0aW9ucyB0byBnZXQgaW50ZXJjaGFuZ2UgZnVuY3Rpb25pbmcgb24gbG9hZC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB0aGlzLl9hZGRCcmVha3BvaW50cygpO1xuICAgIHRoaXMuX2dlbmVyYXRlUnVsZXMoKTtcbiAgICB0aGlzLl9yZWZsb3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBldmVudHMgZm9yIEludGVyY2hhbmdlLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgJCh3aW5kb3cpLm9uKCdyZXNpemUuemYuaW50ZXJjaGFuZ2UnLCBGb3VuZGF0aW9uLnV0aWwudGhyb3R0bGUoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVmbG93KCk7XG4gICAgfSwgNTApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBuZWNlc3NhcnkgZnVuY3Rpb25zIHRvIHVwZGF0ZSBJbnRlcmNoYW5nZSB1cG9uIERPTSBjaGFuZ2VcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVmbG93KCkge1xuICAgIHZhciBtYXRjaDtcblxuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIHJ1bGUsIGJ1dCBvbmx5IHNhdmUgdGhlIGxhc3QgbWF0Y2hcbiAgICBmb3IgKHZhciBpIGluIHRoaXMucnVsZXMpIHtcbiAgICAgIGlmKHRoaXMucnVsZXMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLnJ1bGVzW2ldO1xuICAgICAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEocnVsZS5xdWVyeSkubWF0Y2hlcykge1xuICAgICAgICAgIG1hdGNoID0gcnVsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgdGhpcy5yZXBsYWNlKG1hdGNoLnBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBGb3VuZGF0aW9uIGJyZWFrcG9pbnRzIGFuZCBhZGRzIHRoZW0gdG8gdGhlIEludGVyY2hhbmdlLlNQRUNJQUxfUVVFUklFUyBvYmplY3QuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZEJyZWFrcG9pbnRzKCkge1xuICAgIGZvciAodmFyIGkgaW4gRm91bmRhdGlvbi5NZWRpYVF1ZXJ5LnF1ZXJpZXMpIHtcbiAgICAgIGlmIChGb3VuZGF0aW9uLk1lZGlhUXVlcnkucXVlcmllcy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICB2YXIgcXVlcnkgPSBGb3VuZGF0aW9uLk1lZGlhUXVlcnkucXVlcmllc1tpXTtcbiAgICAgICAgSW50ZXJjaGFuZ2UuU1BFQ0lBTF9RVUVSSUVTW3F1ZXJ5Lm5hbWVdID0gcXVlcnkudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgSW50ZXJjaGFuZ2UgZWxlbWVudCBmb3IgdGhlIHByb3ZpZGVkIG1lZGlhIHF1ZXJ5ICsgY29udGVudCBwYWlyaW5nc1xuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRoYXQgaXMgYW4gSW50ZXJjaGFuZ2UgaW5zdGFuY2VcbiAgICogQHJldHVybnMge0FycmF5fSBzY2VuYXJpb3MgLSBBcnJheSBvZiBvYmplY3RzIHRoYXQgaGF2ZSAnbXEnIGFuZCAncGF0aCcga2V5cyB3aXRoIGNvcnJlc3BvbmRpbmcga2V5c1xuICAgKi9cbiAgX2dlbmVyYXRlUnVsZXMoZWxlbWVudCkge1xuICAgIHZhciBydWxlc0xpc3QgPSBbXTtcbiAgICB2YXIgcnVsZXM7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJ1bGVzKSB7XG4gICAgICBydWxlcyA9IHRoaXMub3B0aW9ucy5ydWxlcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBydWxlcyA9IHRoaXMuJGVsZW1lbnQuZGF0YSgnaW50ZXJjaGFuZ2UnKS5tYXRjaCgvXFxbLio/XFxdL2cpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gcnVsZXMpIHtcbiAgICAgIGlmKHJ1bGVzLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgIHZhciBydWxlID0gcnVsZXNbaV0uc2xpY2UoMSwgLTEpLnNwbGl0KCcsICcpO1xuICAgICAgICB2YXIgcGF0aCA9IHJ1bGUuc2xpY2UoMCwgLTEpLmpvaW4oJycpO1xuICAgICAgICB2YXIgcXVlcnkgPSBydWxlW3J1bGUubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgaWYgKEludGVyY2hhbmdlLlNQRUNJQUxfUVVFUklFU1txdWVyeV0pIHtcbiAgICAgICAgICBxdWVyeSA9IEludGVyY2hhbmdlLlNQRUNJQUxfUVVFUklFU1txdWVyeV07XG4gICAgICAgIH1cblxuICAgICAgICBydWxlc0xpc3QucHVzaCh7XG4gICAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGBzcmNgIHByb3BlcnR5IG9mIGFuIGltYWdlLCBvciBjaGFuZ2UgdGhlIEhUTUwgb2YgYSBjb250YWluZXIsIHRvIHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIC0gUGF0aCB0byB0aGUgaW1hZ2Ugb3IgSFRNTCBwYXJ0aWFsLlxuICAgKiBAZmlyZXMgSW50ZXJjaGFuZ2UjcmVwbGFjZWRcbiAgICovXG4gIHJlcGxhY2UocGF0aCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoID09PSBwYXRoKSByZXR1cm47XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICB0cmlnZ2VyID0gJ3JlcGxhY2VkLnpmLmludGVyY2hhbmdlJztcblxuICAgIC8vIFJlcGxhY2luZyBpbWFnZXNcbiAgICBpZiAodGhpcy4kZWxlbWVudFswXS5ub2RlTmFtZSA9PT0gJ0lNRycpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYXR0cignc3JjJywgcGF0aCkub24oJ2xvYWQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgX3RoaXMuY3VycmVudFBhdGggPSBwYXRoO1xuICAgICAgfSlcbiAgICAgIC50cmlnZ2VyKHRyaWdnZXIpO1xuICAgIH1cbiAgICAvLyBSZXBsYWNpbmcgYmFja2dyb3VuZCBpbWFnZXNcbiAgICBlbHNlIGlmIChwYXRoLm1hdGNoKC9cXC4oZ2lmfGpwZ3xqcGVnfHBuZ3xzdmd8dGlmZikoWz8jXS4qKT8vaSkpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKHsgJ2JhY2tncm91bmQtaW1hZ2UnOiAndXJsKCcrcGF0aCsnKScgfSlcbiAgICAgICAgICAudHJpZ2dlcih0cmlnZ2VyKTtcbiAgICB9XG4gICAgLy8gUmVwbGFjaW5nIEhUTUxcbiAgICBlbHNlIHtcbiAgICAgICQuZ2V0KHBhdGgsIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgIF90aGlzLiRlbGVtZW50Lmh0bWwocmVzcG9uc2UpXG4gICAgICAgICAgICAgLnRyaWdnZXIodHJpZ2dlcik7XG4gICAgICAgICQocmVzcG9uc2UpLmZvdW5kYXRpb24oKTtcbiAgICAgICAgX3RoaXMuY3VycmVudFBhdGggPSBwYXRoO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBjb250ZW50IGluIGFuIEludGVyY2hhbmdlIGVsZW1lbnQgaXMgZG9uZSBiZWluZyBsb2FkZWQuXG4gICAgICogQGV2ZW50IEludGVyY2hhbmdlI3JlcGxhY2VkXG4gICAgICovXG4gICAgLy8gdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdyZXBsYWNlZC56Zi5pbnRlcmNoYW5nZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFuIGluc3RhbmNlIG9mIGludGVyY2hhbmdlLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgLy9UT0RPIHRoaXMuXG4gIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IHNldHRpbmdzIGZvciBwbHVnaW5cbiAqL1xuSW50ZXJjaGFuZ2UuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBSdWxlcyB0byBiZSBhcHBsaWVkIHRvIEludGVyY2hhbmdlIGVsZW1lbnRzLiBTZXQgd2l0aCB0aGUgYGRhdGEtaW50ZXJjaGFuZ2VgIGFycmF5IG5vdGF0aW9uLlxuICAgKiBAb3B0aW9uXG4gICAqL1xuICBydWxlczogbnVsbFxufTtcblxuSW50ZXJjaGFuZ2UuU1BFQ0lBTF9RVUVSSUVTID0ge1xuICAnbGFuZHNjYXBlJzogJ3NjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpJyxcbiAgJ3BvcnRyYWl0JzogJ3NjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknLFxuICAncmV0aW5hJzogJ29ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgb25seSBzY3JlZW4gYW5kIChtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCBvbmx5IHNjcmVlbiBhbmQgKC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIvMSksIG9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIG9ubHkgc2NyZWVuIGFuZCAobWluLXJlc29sdXRpb246IDE5MmRwaSksIG9ubHkgc2NyZWVuIGFuZCAobWluLXJlc29sdXRpb246IDJkcHB4KSdcbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihJbnRlcmNoYW5nZSwgJ0ludGVyY2hhbmdlJyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBNYWdlbGxhbiBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24ubWFnZWxsYW5cbiAqL1xuXG5jbGFzcyBNYWdlbGxhbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIE1hZ2VsbGFuLlxuICAgKiBAY2xhc3NcbiAgICogQGZpcmVzIE1hZ2VsbGFuI2luaXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGFkZCB0aGUgdHJpZ2dlciB0by5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyAgPSAkLmV4dGVuZCh7fSwgTWFnZWxsYW4uZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXQoKTtcbiAgICB0aGlzLmNhbGNQb2ludHMoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ01hZ2VsbGFuJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIE1hZ2VsbGFuIHBsdWdpbiBhbmQgY2FsbHMgZnVuY3Rpb25zIHRvIGdldCBlcXVhbGl6ZXIgZnVuY3Rpb25pbmcgb24gbG9hZC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciBpZCA9IHRoaXMuJGVsZW1lbnRbMF0uaWQgfHwgRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAnbWFnZWxsYW4nKTtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHRoaXMuJHRhcmdldHMgPSAkKCdbZGF0YS1tYWdlbGxhbi10YXJnZXRdJyk7XG4gICAgdGhpcy4kbGlua3MgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2EnKTtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoe1xuICAgICAgJ2RhdGEtcmVzaXplJzogaWQsXG4gICAgICAnZGF0YS1zY3JvbGwnOiBpZCxcbiAgICAgICdpZCc6IGlkXG4gICAgfSk7XG4gICAgdGhpcy4kYWN0aXZlID0gJCgpO1xuICAgIHRoaXMuc2Nyb2xsUG9zID0gcGFyc2VJbnQod2luZG93LnBhZ2VZT2Zmc2V0LCAxMCk7XG5cbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGFuIGFycmF5IG9mIHBpeGVsIHZhbHVlcyB0aGF0IGFyZSB0aGUgZGVtYXJjYXRpb24gbGluZXMgYmV0d2VlbiBsb2NhdGlvbnMgb24gdGhlIHBhZ2UuXG4gICAqIENhbiBiZSBpbnZva2VkIGlmIG5ldyBlbGVtZW50cyBhcmUgYWRkZWQgb3IgdGhlIHNpemUgb2YgYSBsb2NhdGlvbiBjaGFuZ2VzLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGNhbGNQb2ludHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgYm9keSA9IGRvY3VtZW50LmJvZHksXG4gICAgICAgIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICB0aGlzLnBvaW50cyA9IFtdO1xuICAgIHRoaXMud2luSGVpZ2h0ID0gTWF0aC5yb3VuZChNYXRoLm1heCh3aW5kb3cuaW5uZXJIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0KSk7XG4gICAgdGhpcy5kb2NIZWlnaHQgPSBNYXRoLnJvdW5kKE1hdGgubWF4KGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5Lm9mZnNldEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLm9mZnNldEhlaWdodCkpO1xuXG4gICAgdGhpcy4kdGFyZ2V0cy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgJHRhciA9ICQodGhpcyksXG4gICAgICAgICAgcHQgPSBNYXRoLnJvdW5kKCR0YXIub2Zmc2V0KCkudG9wIC0gX3RoaXMub3B0aW9ucy50aHJlc2hvbGQpO1xuICAgICAgJHRhci50YXJnZXRQb2ludCA9IHB0O1xuICAgICAgX3RoaXMucG9pbnRzLnB1c2gocHQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGV2ZW50cyBmb3IgTWFnZWxsYW4uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgICRib2R5ID0gJCgnaHRtbCwgYm9keScpLFxuICAgICAgICBvcHRzID0ge1xuICAgICAgICAgIGR1cmF0aW9uOiBfdGhpcy5vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICAgIGVhc2luZzogICBfdGhpcy5vcHRpb25zLmFuaW1hdGlvbkVhc2luZ1xuICAgICAgICB9O1xuICAgICQod2luZG93KS5vbmUoJ2xvYWQnLCBmdW5jdGlvbigpe1xuICAgICAgaWYoX3RoaXMub3B0aW9ucy5kZWVwTGlua2luZyl7XG4gICAgICAgIGlmKGxvY2F0aW9uLmhhc2gpe1xuICAgICAgICAgIF90aGlzLnNjcm9sbFRvTG9jKGxvY2F0aW9uLmhhc2gpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfdGhpcy5jYWxjUG9pbnRzKCk7XG4gICAgICBfdGhpcy5fdXBkYXRlQWN0aXZlKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRlbGVtZW50Lm9uKHtcbiAgICAgICdyZXNpemVtZS56Zi50cmlnZ2VyJzogdGhpcy5yZWZsb3cuYmluZCh0aGlzKSxcbiAgICAgICdzY3JvbGxtZS56Zi50cmlnZ2VyJzogdGhpcy5fdXBkYXRlQWN0aXZlLmJpbmQodGhpcylcbiAgICB9KS5vbignY2xpY2suemYubWFnZWxsYW4nLCAnYVtocmVmXj1cIiNcIl0nLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdmFyIGFycml2YWwgICA9IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgICAgIF90aGlzLnNjcm9sbFRvTG9jKGFycml2YWwpO1xuICAgICAgfSk7XG4gICAgJCh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmKF90aGlzLm9wdGlvbnMuZGVlcExpbmtpbmcpIHtcbiAgICAgICAgX3RoaXMuc2Nyb2xsVG9Mb2Mod2luZG93LmxvY2F0aW9uLmhhc2gpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIHNjcm9sbCB0byBhIGdpdmVuIGxvY2F0aW9uIG9uIHRoZSBwYWdlLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbG9jIC0gYSBwcm9wZXJseSBmb3JtYXR0ZWQgalF1ZXJ5IGlkIHNlbGVjdG9yLiBFeGFtcGxlOiAnI2ZvbydcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBzY3JvbGxUb0xvYyhsb2MpIHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIHRhcmdldCBkb2VzIG5vdCBleGlzdCB0byBwcmV2ZW50IGVycm9yc1xuICAgIGlmICghJChsb2MpLmxlbmd0aCkge3JldHVybiBmYWxzZTt9XG4gICAgdGhpcy5faW5UcmFuc2l0aW9uID0gdHJ1ZTtcbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBzY3JvbGxQb3MgPSBNYXRoLnJvdW5kKCQobG9jKS5vZmZzZXQoKS50b3AgLSB0aGlzLm9wdGlvbnMudGhyZXNob2xkIC8gMiAtIHRoaXMub3B0aW9ucy5iYXJPZmZzZXQpO1xuXG4gICAgJCgnaHRtbCwgYm9keScpLnN0b3AodHJ1ZSkuYW5pbWF0ZShcbiAgICAgIHsgc2Nyb2xsVG9wOiBzY3JvbGxQb3MgfSxcbiAgICAgIHRoaXMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbixcbiAgICAgIHRoaXMub3B0aW9ucy5hbmltYXRpb25FYXNpbmcsXG4gICAgICBmdW5jdGlvbigpIHtfdGhpcy5faW5UcmFuc2l0aW9uID0gZmFsc2U7IF90aGlzLl91cGRhdGVBY3RpdmUoKX1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIG5lY2Vzc2FyeSBmdW5jdGlvbnMgdG8gdXBkYXRlIE1hZ2VsbGFuIHVwb24gRE9NIGNoYW5nZVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIHJlZmxvdygpIHtcbiAgICB0aGlzLmNhbGNQb2ludHMoKTtcbiAgICB0aGlzLl91cGRhdGVBY3RpdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIGFjdGl2ZSBsb2NhdGlvbiBsaW5rLCBhbmQgdXBkYXRlcyB0aGUgdXJsIGhhc2ggZm9yIHRoZSBwYWdlLCBpZiBkZWVwTGlua2luZyBlbmFibGVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIE1hZ2VsbGFuI3VwZGF0ZVxuICAgKi9cbiAgX3VwZGF0ZUFjdGl2ZSgvKmV2dCwgZWxlbSwgc2Nyb2xsUG9zKi8pIHtcbiAgICBpZih0aGlzLl9pblRyYW5zaXRpb24pIHtyZXR1cm47fVxuICAgIHZhciB3aW5Qb3MgPSAvKnNjcm9sbFBvcyB8fCovIHBhcnNlSW50KHdpbmRvdy5wYWdlWU9mZnNldCwgMTApLFxuICAgICAgICBjdXJJZHg7XG5cbiAgICBpZih3aW5Qb3MgKyB0aGlzLndpbkhlaWdodCA9PT0gdGhpcy5kb2NIZWlnaHQpeyBjdXJJZHggPSB0aGlzLnBvaW50cy5sZW5ndGggLSAxOyB9XG4gICAgZWxzZSBpZih3aW5Qb3MgPCB0aGlzLnBvaW50c1swXSl7IGN1cklkeCA9IHVuZGVmaW5lZDsgfVxuICAgIGVsc2V7XG4gICAgICB2YXIgaXNEb3duID0gdGhpcy5zY3JvbGxQb3MgPCB3aW5Qb3MsXG4gICAgICAgICAgX3RoaXMgPSB0aGlzLFxuICAgICAgICAgIGN1clZpc2libGUgPSB0aGlzLnBvaW50cy5maWx0ZXIoZnVuY3Rpb24ocCwgaSl7XG4gICAgICAgICAgICByZXR1cm4gaXNEb3duID8gcCAtIF90aGlzLm9wdGlvbnMuYmFyT2Zmc2V0IDw9IHdpblBvcyA6IHAgLSBfdGhpcy5vcHRpb25zLmJhck9mZnNldCAtIF90aGlzLm9wdGlvbnMudGhyZXNob2xkIDw9IHdpblBvcztcbiAgICAgICAgICB9KTtcbiAgICAgIGN1cklkeCA9IGN1clZpc2libGUubGVuZ3RoID8gY3VyVmlzaWJsZS5sZW5ndGggLSAxIDogMDtcbiAgICB9XG5cbiAgICB0aGlzLiRhY3RpdmUucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKTtcbiAgICB0aGlzLiRhY3RpdmUgPSB0aGlzLiRsaW5rcy5maWx0ZXIoJ1tocmVmPVwiIycgKyB0aGlzLiR0YXJnZXRzLmVxKGN1cklkeCkuZGF0YSgnbWFnZWxsYW4tdGFyZ2V0JykgKyAnXCJdJykuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKTtcblxuICAgIGlmKHRoaXMub3B0aW9ucy5kZWVwTGlua2luZyl7XG4gICAgICB2YXIgaGFzaCA9IFwiXCI7XG4gICAgICBpZihjdXJJZHggIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgaGFzaCA9IHRoaXMuJGFjdGl2ZVswXS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgIH1cbiAgICAgIGlmKGhhc2ggIT09IHdpbmRvdy5sb2NhdGlvbi5oYXNoKSB7XG4gICAgICAgIGlmKHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSl7XG4gICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsIGhhc2gpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IGhhc2g7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNjcm9sbFBvcyA9IHdpblBvcztcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIG1hZ2VsbGFuIGlzIGZpbmlzaGVkIHVwZGF0aW5nIHRvIHRoZSBuZXcgYWN0aXZlIGVsZW1lbnQuXG4gICAgICogQGV2ZW50IE1hZ2VsbGFuI3VwZGF0ZVxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigndXBkYXRlLnpmLm1hZ2VsbGFuJywgW3RoaXMuJGFjdGl2ZV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFuIGluc3RhbmNlIG9mIE1hZ2VsbGFuIGFuZCByZXNldHMgdGhlIHVybCBvZiB0aGUgd2luZG93LlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi50cmlnZ2VyIC56Zi5tYWdlbGxhbicpXG4gICAgICAgIC5maW5kKGAuJHt0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3N9YCkucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKTtcblxuICAgIGlmKHRoaXMub3B0aW9ucy5kZWVwTGlua2luZyl7XG4gICAgICB2YXIgaGFzaCA9IHRoaXMuJGFjdGl2ZVswXS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoaGFzaCwgJycpO1xuICAgIH1cblxuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIHBsdWdpblxuICovXG5NYWdlbGxhbi5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lLCBpbiBtcywgdGhlIGFuaW1hdGVkIHNjcm9sbGluZyBzaG91bGQgdGFrZSBiZXR3ZWVuIGxvY2F0aW9ucy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSA1MDBcbiAgICovXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiA1MDAsXG4gIC8qKlxuICAgKiBBbmltYXRpb24gc3R5bGUgdG8gdXNlIHdoZW4gc2Nyb2xsaW5nIGJldHdlZW4gbG9jYXRpb25zLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdlYXNlLWluLW91dCdcbiAgICovXG4gIGFuaW1hdGlvbkVhc2luZzogJ2xpbmVhcicsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcGl4ZWxzIHRvIHVzZSBhcyBhIG1hcmtlciBmb3IgbG9jYXRpb24gY2hhbmdlcy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSA1MFxuICAgKi9cbiAgdGhyZXNob2xkOiA1MCxcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIGFjdGl2ZSBsb2NhdGlvbnMgbGluayBvbiB0aGUgbWFnZWxsYW4gY29udGFpbmVyLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdhY3RpdmUnXG4gICAqL1xuICBhY3RpdmVDbGFzczogJ2FjdGl2ZScsXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIHNjcmlwdCB0byBtYW5pcHVsYXRlIHRoZSB1cmwgb2YgdGhlIGN1cnJlbnQgcGFnZSwgYW5kIGlmIHN1cHBvcnRlZCwgYWx0ZXIgdGhlIGhpc3RvcnkuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgdHJ1ZVxuICAgKi9cbiAgZGVlcExpbmtpbmc6IGZhbHNlLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHBpeGVscyB0byBvZmZzZXQgdGhlIHNjcm9sbCBvZiB0aGUgcGFnZSBvbiBpdGVtIGNsaWNrIGlmIHVzaW5nIGEgc3RpY2t5IG5hdiBiYXIuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMjVcbiAgICovXG4gIGJhck9mZnNldDogMFxufVxuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oTWFnZWxsYW4sICdNYWdlbGxhbicpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogT2ZmQ2FudmFzIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5vZmZjYW52YXNcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tb3Rpb25cbiAqL1xuXG5jbGFzcyBPZmZDYW52YXMge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBvZmYtY2FudmFzIHdyYXBwZXIuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgT2ZmQ2FudmFzI2luaXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGluaXRpYWxpemUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgT2ZmQ2FudmFzLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG4gICAgdGhpcy4kbGFzdFRyaWdnZXIgPSAkKCk7XG4gICAgdGhpcy4kdHJpZ2dlcnMgPSAkKCk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdPZmZDYW52YXMnKVxuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ09mZkNhbnZhcycsIHtcbiAgICAgICdFU0NBUEUnOiAnY2xvc2UnXG4gICAgfSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgb2ZmLWNhbnZhcyB3cmFwcGVyIGJ5IGFkZGluZyB0aGUgZXhpdCBvdmVybGF5IChpZiBuZWVkZWQpLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciBpZCA9IHRoaXMuJGVsZW1lbnQuYXR0cignaWQnKTtcblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXG4gICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyhgaXMtdHJhbnNpdGlvbi0ke3RoaXMub3B0aW9ucy50cmFuc2l0aW9ufWApO1xuXG4gICAgLy8gRmluZCB0cmlnZ2VycyB0aGF0IGFmZmVjdCB0aGlzIGVsZW1lbnQgYW5kIGFkZCBhcmlhLWV4cGFuZGVkIHRvIHRoZW1cbiAgICB0aGlzLiR0cmlnZ2VycyA9ICQoZG9jdW1lbnQpXG4gICAgICAuZmluZCgnW2RhdGEtb3Blbj1cIicraWQrJ1wiXSwgW2RhdGEtY2xvc2U9XCInK2lkKydcIl0sIFtkYXRhLXRvZ2dsZT1cIicraWQrJ1wiXScpXG4gICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXG4gICAgICAuYXR0cignYXJpYS1jb250cm9scycsIGlkKTtcblxuICAgIC8vIEFkZCBhbiBvdmVybGF5IG92ZXIgdGhlIGNvbnRlbnQgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb250ZW50T3ZlcmxheSA9PT0gdHJ1ZSkge1xuICAgICAgdmFyIG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHZhciBvdmVybGF5UG9zaXRpb24gPSAkKHRoaXMuJGVsZW1lbnQpLmNzcyhcInBvc2l0aW9uXCIpID09PSAnZml4ZWQnID8gJ2lzLW92ZXJsYXktZml4ZWQnIDogJ2lzLW92ZXJsYXktYWJzb2x1dGUnO1xuICAgICAgb3ZlcmxheS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2pzLW9mZi1jYW52YXMtb3ZlcmxheSAnICsgb3ZlcmxheVBvc2l0aW9uKTtcbiAgICAgIHRoaXMuJG92ZXJsYXkgPSAkKG92ZXJsYXkpO1xuICAgICAgaWYob3ZlcmxheVBvc2l0aW9uID09PSAnaXMtb3ZlcmxheS1maXhlZCcpIHtcbiAgICAgICAgJCgnYm9keScpLmFwcGVuZCh0aGlzLiRvdmVybGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuc2libGluZ3MoJ1tkYXRhLW9mZi1jYW52YXMtY29udGVudF0nKS5hcHBlbmQodGhpcy4kb3ZlcmxheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zLmlzUmV2ZWFsZWQgPSB0aGlzLm9wdGlvbnMuaXNSZXZlYWxlZCB8fCBuZXcgUmVnRXhwKHRoaXMub3B0aW9ucy5yZXZlYWxDbGFzcywgJ2cnKS50ZXN0KHRoaXMuJGVsZW1lbnRbMF0uY2xhc3NOYW1lKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaXNSZXZlYWxlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zLnJldmVhbE9uID0gdGhpcy5vcHRpb25zLnJldmVhbE9uIHx8IHRoaXMuJGVsZW1lbnRbMF0uY2xhc3NOYW1lLm1hdGNoKC8ocmV2ZWFsLWZvci1tZWRpdW18cmV2ZWFsLWZvci1sYXJnZSkvZylbMF0uc3BsaXQoJy0nKVsyXTtcbiAgICAgIHRoaXMuX3NldE1RQ2hlY2tlcigpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMub3B0aW9ucy50cmFuc2l0aW9uVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zLnRyYW5zaXRpb25UaW1lID0gcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSgkKCdbZGF0YS1vZmYtY2FudmFzXScpWzBdKS50cmFuc2l0aW9uRHVyYXRpb24pICogMTAwMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBoYW5kbGVycyB0byB0aGUgb2ZmLWNhbnZhcyB3cmFwcGVyIGFuZCB0aGUgZXhpdCBvdmVybGF5LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi50cmlnZ2VyIC56Zi5vZmZjYW52YXMnKS5vbih7XG4gICAgICAnb3Blbi56Zi50cmlnZ2VyJzogdGhpcy5vcGVuLmJpbmQodGhpcyksXG4gICAgICAnY2xvc2UuemYudHJpZ2dlcic6IHRoaXMuY2xvc2UuYmluZCh0aGlzKSxcbiAgICAgICd0b2dnbGUuemYudHJpZ2dlcic6IHRoaXMudG9nZ2xlLmJpbmQodGhpcyksXG4gICAgICAna2V5ZG93bi56Zi5vZmZjYW52YXMnOiB0aGlzLl9oYW5kbGVLZXlib2FyZC5iaW5kKHRoaXMpXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlT25DbGljayA9PT0gdHJ1ZSkge1xuICAgICAgdmFyICR0YXJnZXQgPSB0aGlzLm9wdGlvbnMuY29udGVudE92ZXJsYXkgPyB0aGlzLiRvdmVybGF5IDogJCgnW2RhdGEtb2ZmLWNhbnZhcy1jb250ZW50XScpO1xuICAgICAgJHRhcmdldC5vbih7J2NsaWNrLnpmLm9mZmNhbnZhcyc6IHRoaXMuY2xvc2UuYmluZCh0aGlzKX0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGV2ZW50IGxpc3RlbmVyIGZvciBlbGVtZW50cyB0aGF0IHdpbGwgcmV2ZWFsIGF0IGNlcnRhaW4gYnJlYWtwb2ludHMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0TVFDaGVja2VyKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAkKHdpbmRvdykub24oJ2NoYW5nZWQuemYubWVkaWFxdWVyeScsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKEZvdW5kYXRpb24uTWVkaWFRdWVyeS5hdExlYXN0KF90aGlzLm9wdGlvbnMucmV2ZWFsT24pKSB7XG4gICAgICAgIF90aGlzLnJldmVhbCh0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLnJldmVhbChmYWxzZSk7XG4gICAgICB9XG4gICAgfSkub25lKCdsb2FkLnpmLm9mZmNhbnZhcycsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKEZvdW5kYXRpb24uTWVkaWFRdWVyeS5hdExlYXN0KF90aGlzLm9wdGlvbnMucmV2ZWFsT24pKSB7XG4gICAgICAgIF90aGlzLnJldmVhbCh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSByZXZlYWxpbmcvaGlkaW5nIHRoZSBvZmYtY2FudmFzIGF0IGJyZWFrcG9pbnRzLCBub3QgdGhlIHNhbWUgYXMgb3Blbi5cbiAgICogQHBhcmFtIHtCb29sZWFufSBpc1JldmVhbGVkIC0gdHJ1ZSBpZiBlbGVtZW50IHNob3VsZCBiZSByZXZlYWxlZC5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICByZXZlYWwoaXNSZXZlYWxlZCkge1xuICAgIHZhciAkY2xvc2VyID0gdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1jbG9zZV0nKTtcbiAgICBpZiAoaXNSZXZlYWxlZCkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgdGhpcy5pc1JldmVhbGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcbiAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdvcGVuLnpmLnRyaWdnZXIgdG9nZ2xlLnpmLnRyaWdnZXInKTtcbiAgICAgIGlmICgkY2xvc2VyLmxlbmd0aCkgeyAkY2xvc2VyLmhpZGUoKTsgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzUmV2ZWFsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgdGhpcy4kZWxlbWVudC5vbih7XG4gICAgICAgICdvcGVuLnpmLnRyaWdnZXInOiB0aGlzLm9wZW4uYmluZCh0aGlzKSxcbiAgICAgICAgJ3RvZ2dsZS56Zi50cmlnZ2VyJzogdGhpcy50b2dnbGUuYmluZCh0aGlzKVxuICAgICAgfSk7XG4gICAgICBpZiAoJGNsb3Nlci5sZW5ndGgpIHtcbiAgICAgICAgJGNsb3Nlci5zaG93KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIHNjcm9sbGluZyBvZiB0aGUgYm9keSB3aGVuIG9mZmNhbnZhcyBpcyBvcGVuIG9uIG1vYmlsZSBTYWZhcmkgYW5kIG90aGVyIHRyb3VibGVzb21lIGJyb3dzZXJzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3N0b3BTY3JvbGxpbmcoZXZlbnQpIHtcbiAgXHRyZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIG9mZi1jYW52YXMgbWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCAtIEV2ZW50IG9iamVjdCBwYXNzZWQgZnJvbSBsaXN0ZW5lci5cbiAgICogQHBhcmFtIHtqUXVlcnl9IHRyaWdnZXIgLSBlbGVtZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBvZmYtY2FudmFzIHRvIG9wZW4uXG4gICAqIEBmaXJlcyBPZmZDYW52YXMjb3BlbmVkXG4gICAqL1xuICBvcGVuKGV2ZW50LCB0cmlnZ2VyKSB7XG4gICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSB8fCB0aGlzLmlzUmV2ZWFsZWQpIHsgcmV0dXJuOyB9XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICB0aGlzLiRsYXN0VHJpZ2dlciA9IHRyaWdnZXI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZVRvID09PSAndG9wJykge1xuICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmZvcmNlVG8gPT09ICdib3R0b20nKSB7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oMCxkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgb2ZmLWNhbnZhcyBtZW51IG9wZW5zLlxuICAgICAqIEBldmVudCBPZmZDYW52YXMjb3BlbmVkXG4gICAgICovXG4gICAgX3RoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2lzLW9wZW4nKVxuXG4gICAgdGhpcy4kdHJpZ2dlcnMuYXR0cignYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpXG4gICAgICAgIC50cmlnZ2VyKCdvcGVuZWQuemYub2ZmY2FudmFzJyk7XG5cbiAgICAvLyBJZiBgY29udGVudFNjcm9sbGAgaXMgc2V0IHRvIGZhbHNlLCBhZGQgY2xhc3MgYW5kIGRpc2FibGUgc2Nyb2xsaW5nIG9uIHRvdWNoIGRldmljZXMuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb250ZW50U2Nyb2xsID09PSBmYWxzZSkge1xuICAgICAgJCgnYm9keScpLmFkZENsYXNzKCdpcy1vZmYtY2FudmFzLW9wZW4nKS5vbigndG91Y2htb3ZlJywgdGhpcy5fc3RvcFNjcm9sbGluZyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb250ZW50T3ZlcmxheSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy4kb3ZlcmxheS5hZGRDbGFzcygnaXMtdmlzaWJsZScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrID09PSB0cnVlICYmIHRoaXMub3B0aW9ucy5jb250ZW50T3ZlcmxheSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy4kb3ZlcmxheS5hZGRDbGFzcygnaXMtY2xvc2FibGUnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Gb2N1cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy4kZWxlbWVudC5vbmUoRm91bmRhdGlvbi50cmFuc2l0aW9uZW5kKHRoaXMuJGVsZW1lbnQpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgX3RoaXMuJGVsZW1lbnQuZmluZCgnYSwgYnV0dG9uJykuZXEoMCkuZm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudHJhcEZvY3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LnNpYmxpbmdzKCdbZGF0YS1vZmYtY2FudmFzLWNvbnRlbnRdJykuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQudHJhcEZvY3VzKHRoaXMuJGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG9mZi1jYW52YXMgbWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gb3B0aW9uYWwgY2IgdG8gZmlyZSBhZnRlciBjbG9zdXJlLlxuICAgKiBAZmlyZXMgT2ZmQ2FudmFzI2Nsb3NlZFxuICAgKi9cbiAgY2xvc2UoY2IpIHtcbiAgICBpZiAoIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSB8fCB0aGlzLmlzUmV2ZWFsZWQpIHsgcmV0dXJuOyB9XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2lzLW9wZW4nKTtcblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpXG4gICAgICAvKipcbiAgICAgICAqIEZpcmVzIHdoZW4gdGhlIG9mZi1jYW52YXMgbWVudSBvcGVucy5cbiAgICAgICAqIEBldmVudCBPZmZDYW52YXMjY2xvc2VkXG4gICAgICAgKi9cbiAgICAgICAgLnRyaWdnZXIoJ2Nsb3NlZC56Zi5vZmZjYW52YXMnKTtcblxuICAgIC8vIElmIGBjb250ZW50U2Nyb2xsYCBpcyBzZXQgdG8gZmFsc2UsIHJlbW92ZSBjbGFzcyBhbmQgcmUtZW5hYmxlIHNjcm9sbGluZyBvbiB0b3VjaCBkZXZpY2VzLlxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29udGVudFNjcm9sbCA9PT0gZmFsc2UpIHtcbiAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygnaXMtb2ZmLWNhbnZhcy1vcGVuJykub2ZmKCd0b3VjaG1vdmUnLCB0aGlzLl9zdG9wU2Nyb2xsaW5nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRlbnRPdmVybGF5ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLiRvdmVybGF5LnJlbW92ZUNsYXNzKCdpcy12aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2sgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmNvbnRlbnRPdmVybGF5ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLiRvdmVybGF5LnJlbW92ZUNsYXNzKCdpcy1jbG9zYWJsZScpO1xuICAgIH1cblxuICAgIHRoaXMuJHRyaWdnZXJzLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMudHJhcEZvY3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LnNpYmxpbmdzKCdbZGF0YS1vZmYtY2FudmFzLWNvbnRlbnRdJykucmVtb3ZlQXR0cigndGFiaW5kZXgnKTtcbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVsZWFzZUZvY3VzKHRoaXMuJGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBvZmYtY2FudmFzIG1lbnUgb3BlbiBvciBjbG9zZWQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgLSBFdmVudCBvYmplY3QgcGFzc2VkIGZyb20gbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSB0cmlnZ2VyIC0gZWxlbWVudCB0aGF0IHRyaWdnZXJlZCB0aGUgb2ZmLWNhbnZhcyB0byBvcGVuLlxuICAgKi9cbiAgdG9nZ2xlKGV2ZW50LCB0cmlnZ2VyKSB7XG4gICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSkge1xuICAgICAgdGhpcy5jbG9zZShldmVudCwgdHJpZ2dlcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5vcGVuKGV2ZW50LCB0cmlnZ2VyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBrZXlib2FyZCBpbnB1dCB3aGVuIGRldGVjdGVkLiBXaGVuIHRoZSBlc2NhcGUga2V5IGlzIHByZXNzZWQsIHRoZSBvZmYtY2FudmFzIG1lbnUgY2xvc2VzLCBhbmQgZm9jdXMgaXMgcmVzdG9yZWQgdG8gdGhlIGVsZW1lbnQgdGhhdCBvcGVuZWQgdGhlIG1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUtleWJvYXJkKGUpIHtcbiAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnT2ZmQ2FudmFzJywge1xuICAgICAgY2xvc2U6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLiRsYXN0VHJpZ2dlci5mb2N1cygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBoYW5kbGVkOiAoKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgb2ZmY2FudmFzIHBsdWdpbi5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZignLnpmLnRyaWdnZXIgLnpmLm9mZmNhbnZhcycpO1xuICAgIHRoaXMuJG92ZXJsYXkub2ZmKCcuemYub2ZmY2FudmFzJyk7XG5cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuT2ZmQ2FudmFzLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQWxsb3cgdGhlIHVzZXIgdG8gY2xpY2sgb3V0c2lkZSBvZiB0aGUgbWVudSB0byBjbG9zZSBpdC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSB0cnVlXG4gICAqL1xuICBjbG9zZU9uQ2xpY2s6IHRydWUsXG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gb3ZlcmxheSBvbiB0b3Agb2YgYFtkYXRhLW9mZi1jYW52YXMtY29udGVudF1gLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGNvbnRlbnRPdmVybGF5OiB0cnVlLFxuXG4gIC8qKlxuICAgKiBFbmFibGUvZGlzYWJsZSBzY3JvbGxpbmcgb2YgdGhlIG1haW4gY29udGVudCB3aGVuIGFuIG9mZiBjYW52YXMgcGFuZWwgaXMgb3Blbi5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSB0cnVlXG4gICAqL1xuICBjb250ZW50U2Nyb2xsOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdGltZSBpbiBtcyB0aGUgb3BlbiBhbmQgY2xvc2UgdHJhbnNpdGlvbiByZXF1aXJlcy4gSWYgbm9uZSBzZWxlY3RlZCwgcHVsbHMgZnJvbSBib2R5IHN0eWxlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDUwMFxuICAgKi9cbiAgdHJhbnNpdGlvblRpbWU6IDAsXG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdHJhbnNpdGlvbiBmb3IgdGhlIG9mZmNhbnZhcyBtZW51LiBPcHRpb25zIGFyZSAncHVzaCcsICdkZXRhY2hlZCcgb3IgJ3NsaWRlJy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBwdXNoXG4gICAqL1xuICB0cmFuc2l0aW9uOiAncHVzaCcsXG5cbiAgLyoqXG4gICAqIEZvcmNlIHRoZSBwYWdlIHRvIHNjcm9sbCB0byB0b3Agb3IgYm90dG9tIG9uIG9wZW4uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgdG9wXG4gICAqL1xuICBmb3JjZVRvOiBudWxsLFxuXG4gIC8qKlxuICAgKiBBbGxvdyB0aGUgb2ZmY2FudmFzIHRvIHJlbWFpbiBvcGVuIGZvciBjZXJ0YWluIGJyZWFrcG9pbnRzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBpc1JldmVhbGVkOiBmYWxzZSxcblxuICAvKipcbiAgICogQnJlYWtwb2ludCBhdCB3aGljaCB0byByZXZlYWwuIEpTIHdpbGwgdXNlIGEgUmVnRXhwIHRvIHRhcmdldCBzdGFuZGFyZCBjbGFzc2VzLCBpZiBjaGFuZ2luZyBjbGFzc25hbWVzLCBwYXNzIHlvdXIgY2xhc3Mgd2l0aCB0aGUgYHJldmVhbENsYXNzYCBvcHRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgcmV2ZWFsLWZvci1sYXJnZVxuICAgKi9cbiAgcmV2ZWFsT246IG51bGwsXG5cbiAgLyoqXG4gICAqIEZvcmNlIGZvY3VzIHRvIHRoZSBvZmZjYW52YXMgb24gb3Blbi4gSWYgdHJ1ZSwgd2lsbCBmb2N1cyB0aGUgb3BlbmluZyB0cmlnZ2VyIG9uIGNsb3NlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGF1dG9Gb2N1czogdHJ1ZSxcblxuICAvKipcbiAgICogQ2xhc3MgdXNlZCB0byBmb3JjZSBhbiBvZmZjYW52YXMgdG8gcmVtYWluIG9wZW4uIEZvdW5kYXRpb24gZGVmYXVsdHMgZm9yIHRoaXMgYXJlIGByZXZlYWwtZm9yLWxhcmdlYCAmIGByZXZlYWwtZm9yLW1lZGl1bWAuXG4gICAqIEBvcHRpb25cbiAgICogVE9ETyBpbXByb3ZlIHRoZSByZWdleCB0ZXN0aW5nIGZvciB0aGlzLlxuICAgKiBAZXhhbXBsZSByZXZlYWwtZm9yLWxhcmdlXG4gICAqL1xuICByZXZlYWxDbGFzczogJ3JldmVhbC1mb3ItJyxcblxuICAvKipcbiAgICogVHJpZ2dlcnMgb3B0aW9uYWwgZm9jdXMgdHJhcHBpbmcgd2hlbiBvcGVuaW5nIGFuIG9mZmNhbnZhcy4gU2V0cyB0YWJpbmRleCBvZiBbZGF0YS1vZmYtY2FudmFzLWNvbnRlbnRdIHRvIC0xIGZvciBhY2Nlc3NpYmlsaXR5IHB1cnBvc2VzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIHRyYXBGb2N1czogZmFsc2Vcbn1cblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKE9mZkNhbnZhcywgJ09mZkNhbnZhcycpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogT3JiaXQgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLm9yYml0XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmtleWJvYXJkXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1vdGlvblxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50aW1lckFuZEltYWdlTG9hZGVyXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRvdWNoXG4gKi9cblxuY2xhc3MgT3JiaXQge1xuICAvKipcbiAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGFuIG9yYml0IGNhcm91c2VsLlxuICAqIEBjbGFzc1xuICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYW4gT3JiaXQgQ2Fyb3VzZWwuXG4gICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKXtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgT3JiaXQuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ09yYml0Jyk7XG4gICAgRm91bmRhdGlvbi5LZXlib2FyZC5yZWdpc3RlcignT3JiaXQnLCB7XG4gICAgICAnbHRyJzoge1xuICAgICAgICAnQVJST1dfUklHSFQnOiAnbmV4dCcsXG4gICAgICAgICdBUlJPV19MRUZUJzogJ3ByZXZpb3VzJ1xuICAgICAgfSxcbiAgICAgICdydGwnOiB7XG4gICAgICAgICdBUlJPV19MRUZUJzogJ25leHQnLFxuICAgICAgICAnQVJST1dfUklHSFQnOiAncHJldmlvdXMnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgKiBJbml0aWFsaXplcyB0aGUgcGx1Z2luIGJ5IGNyZWF0aW5nIGpRdWVyeSBjb2xsZWN0aW9ucywgc2V0dGluZyBhdHRyaWJ1dGVzLCBhbmQgc3RhcnRpbmcgdGhlIGFuaW1hdGlvbi5cbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqL1xuICBfaW5pdCgpIHtcbiAgICAvLyBAVE9ETzogY29uc2lkZXIgZGlzY3Vzc2lvbiBvbiBQUiAjOTI3OCBhYm91dCBET00gcG9sbHV0aW9uIGJ5IGNoYW5nZVNsaWRlXG4gICAgdGhpcy5fcmVzZXQoKTtcblxuICAgIHRoaXMuJHdyYXBwZXIgPSB0aGlzLiRlbGVtZW50LmZpbmQoYC4ke3RoaXMub3B0aW9ucy5jb250YWluZXJDbGFzc31gKTtcbiAgICB0aGlzLiRzbGlkZXMgPSB0aGlzLiRlbGVtZW50LmZpbmQoYC4ke3RoaXMub3B0aW9ucy5zbGlkZUNsYXNzfWApO1xuXG4gICAgdmFyICRpbWFnZXMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2ltZycpLFxuICAgICAgICBpbml0QWN0aXZlID0gdGhpcy4kc2xpZGVzLmZpbHRlcignLmlzLWFjdGl2ZScpLFxuICAgICAgICBpZCA9IHRoaXMuJGVsZW1lbnRbMF0uaWQgfHwgRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAnb3JiaXQnKTtcblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cih7XG4gICAgICAnZGF0YS1yZXNpemUnOiBpZCxcbiAgICAgICdpZCc6IGlkXG4gICAgfSk7XG5cbiAgICBpZiAoIWluaXRBY3RpdmUubGVuZ3RoKSB7XG4gICAgICB0aGlzLiRzbGlkZXMuZXEoMCkuYWRkQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRpb25zLnVzZU1VSSkge1xuICAgICAgdGhpcy4kc2xpZGVzLmFkZENsYXNzKCduby1tb3Rpb251aScpO1xuICAgIH1cblxuICAgIGlmICgkaW1hZ2VzLmxlbmd0aCkge1xuICAgICAgRm91bmRhdGlvbi5vbkltYWdlc0xvYWRlZCgkaW1hZ2VzLCB0aGlzLl9wcmVwYXJlRm9yT3JiaXQuYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ByZXBhcmVGb3JPcmJpdCgpOy8vaGVoZVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYnVsbGV0cykge1xuICAgICAgdGhpcy5fbG9hZEJ1bGxldHMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9ldmVudHMoKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1BsYXkgJiYgdGhpcy4kc2xpZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuZ2VvU3luYygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWNjZXNzaWJsZSkgeyAvLyBhbGxvdyB3cmFwcGVyIHRvIGJlIGZvY3VzYWJsZSB0byBlbmFibGUgYXJyb3cgbmF2aWdhdGlvblxuICAgICAgdGhpcy4kd3JhcHBlci5hdHRyKCd0YWJpbmRleCcsIDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAqIENyZWF0ZXMgYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBidWxsZXRzLCBpZiB0aGV5IGFyZSBiZWluZyB1c2VkLlxuICAqIEBmdW5jdGlvblxuICAqIEBwcml2YXRlXG4gICovXG4gIF9sb2FkQnVsbGV0cygpIHtcbiAgICB0aGlzLiRidWxsZXRzID0gdGhpcy4kZWxlbWVudC5maW5kKGAuJHt0aGlzLm9wdGlvbnMuYm94T2ZCdWxsZXRzfWApLmZpbmQoJ2J1dHRvbicpO1xuICB9XG5cbiAgLyoqXG4gICogU2V0cyBhIGB0aW1lcmAgb2JqZWN0IG9uIHRoZSBvcmJpdCwgYW5kIHN0YXJ0cyB0aGUgY291bnRlciBmb3IgdGhlIG5leHQgc2xpZGUuXG4gICogQGZ1bmN0aW9uXG4gICovXG4gIGdlb1N5bmMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLnRpbWVyID0gbmV3IEZvdW5kYXRpb24uVGltZXIoXG4gICAgICB0aGlzLiRlbGVtZW50LFxuICAgICAge1xuICAgICAgICBkdXJhdGlvbjogdGhpcy5vcHRpb25zLnRpbWVyRGVsYXksXG4gICAgICAgIGluZmluaXRlOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy5jaGFuZ2VTbGlkZSh0cnVlKTtcbiAgICAgIH0pO1xuICAgIHRoaXMudGltZXIuc3RhcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAqIFNldHMgd3JhcHBlciBhbmQgc2xpZGUgaGVpZ2h0cyBmb3IgdGhlIG9yYml0LlxuICAqIEBmdW5jdGlvblxuICAqIEBwcml2YXRlXG4gICovXG4gIF9wcmVwYXJlRm9yT3JiaXQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLl9zZXRXcmFwcGVySGVpZ2h0KCk7XG4gIH1cblxuICAvKipcbiAgKiBDYWx1bGF0ZXMgdGhlIGhlaWdodCBvZiBlYWNoIHNsaWRlIGluIHRoZSBjb2xsZWN0aW9uLCBhbmQgdXNlcyB0aGUgdGFsbGVzdCBvbmUgZm9yIHRoZSB3cmFwcGVyIGhlaWdodC5cbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gYSBjYWxsYmFjayBmdW5jdGlvbiB0byBmaXJlIHdoZW4gY29tcGxldGUuXG4gICovXG4gIF9zZXRXcmFwcGVySGVpZ2h0KGNiKSB7Ly9yZXdyaXRlIHRoaXMgdG8gYGZvcmAgbG9vcFxuICAgIHZhciBtYXggPSAwLCB0ZW1wLCBjb3VudGVyID0gMCwgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kc2xpZGVzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB0ZW1wID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAkKHRoaXMpLmF0dHIoJ2RhdGEtc2xpZGUnLCBjb3VudGVyKTtcblxuICAgICAgaWYgKF90aGlzLiRzbGlkZXMuZmlsdGVyKCcuaXMtYWN0aXZlJylbMF0gIT09IF90aGlzLiRzbGlkZXMuZXEoY291bnRlcilbMF0pIHsvL2lmIG5vdCB0aGUgYWN0aXZlIHNsaWRlLCBzZXQgY3NzIHBvc2l0aW9uIGFuZCBkaXNwbGF5IHByb3BlcnR5XG4gICAgICAgICQodGhpcykuY3NzKHsncG9zaXRpb24nOiAncmVsYXRpdmUnLCAnZGlzcGxheSc6ICdub25lJ30pO1xuICAgICAgfVxuICAgICAgbWF4ID0gdGVtcCA+IG1heCA/IHRlbXAgOiBtYXg7XG4gICAgICBjb3VudGVyKys7XG4gICAgfSk7XG5cbiAgICBpZiAoY291bnRlciA9PT0gdGhpcy4kc2xpZGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy4kd3JhcHBlci5jc3MoeydoZWlnaHQnOiBtYXh9KTsgLy9vbmx5IGNoYW5nZSB0aGUgd3JhcHBlciBoZWlnaHQgcHJvcGVydHkgb25jZS5cbiAgICAgIGlmKGNiKSB7Y2IobWF4KTt9IC8vZmlyZSBjYWxsYmFjayB3aXRoIG1heCBoZWlnaHQgZGltZW5zaW9uLlxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAqIFNldHMgdGhlIG1heC1oZWlnaHQgb2YgZWFjaCBzbGlkZS5cbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqL1xuICBfc2V0U2xpZGVIZWlnaHQoaGVpZ2h0KSB7XG4gICAgdGhpcy4kc2xpZGVzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAkKHRoaXMpLmNzcygnbWF4LWhlaWdodCcsIGhlaWdodCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgKiBBZGRzIGV2ZW50IGxpc3RlbmVycyB0byBiYXNpY2FsbHkgZXZlcnl0aGluZyB3aXRoaW4gdGhlIGVsZW1lbnQuXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAvLyoqTm93IHVzaW5nIGN1c3RvbSBldmVudCAtIHRoYW5rcyB0bzoqKlxuICAgIC8vKiogICAgICBZb2hhaSBBcmFyYXQgb2YgVG9yb250byAgICAgICoqXG4gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAvL1xuICAgIHRoaXMuJGVsZW1lbnQub2ZmKCcucmVzaXplbWUuemYudHJpZ2dlcicpLm9uKHtcbiAgICAgICdyZXNpemVtZS56Zi50cmlnZ2VyJzogdGhpcy5fcHJlcGFyZUZvck9yYml0LmJpbmQodGhpcylcbiAgICB9KVxuICAgIGlmICh0aGlzLiRzbGlkZXMubGVuZ3RoID4gMSkge1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnN3aXBlKSB7XG4gICAgICAgIHRoaXMuJHNsaWRlcy5vZmYoJ3N3aXBlbGVmdC56Zi5vcmJpdCBzd2lwZXJpZ2h0LnpmLm9yYml0JylcbiAgICAgICAgLm9uKCdzd2lwZWxlZnQuemYub3JiaXQnLCBmdW5jdGlvbihlKXtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgX3RoaXMuY2hhbmdlU2xpZGUodHJ1ZSk7XG4gICAgICAgIH0pLm9uKCdzd2lwZXJpZ2h0LnpmLm9yYml0JywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNsaWRlKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9QbGF5KSB7XG4gICAgICAgIHRoaXMuJHNsaWRlcy5vbignY2xpY2suemYub3JiaXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy4kZWxlbWVudC5kYXRhKCdjbGlja2VkT24nLCBfdGhpcy4kZWxlbWVudC5kYXRhKCdjbGlja2VkT24nKSA/IGZhbHNlIDogdHJ1ZSk7XG4gICAgICAgICAgX3RoaXMudGltZXJbX3RoaXMuJGVsZW1lbnQuZGF0YSgnY2xpY2tlZE9uJykgPyAncGF1c2UnIDogJ3N0YXJ0J10oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wYXVzZU9uSG92ZXIpIHtcbiAgICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKCdtb3VzZWVudGVyLnpmLm9yYml0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBfdGhpcy50aW1lci5wYXVzZSgpO1xuICAgICAgICAgIH0pLm9uKCdtb3VzZWxlYXZlLnpmLm9yYml0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoIV90aGlzLiRlbGVtZW50LmRhdGEoJ2NsaWNrZWRPbicpKSB7XG4gICAgICAgICAgICAgIF90aGlzLnRpbWVyLnN0YXJ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5uYXZCdXR0b25zKSB7XG4gICAgICAgIHZhciAkY29udHJvbHMgPSB0aGlzLiRlbGVtZW50LmZpbmQoYC4ke3RoaXMub3B0aW9ucy5uZXh0Q2xhc3N9LCAuJHt0aGlzLm9wdGlvbnMucHJldkNsYXNzfWApO1xuICAgICAgICAkY29udHJvbHMuYXR0cigndGFiaW5kZXgnLCAwKVxuICAgICAgICAvL2Fsc28gbmVlZCB0byBoYW5kbGUgZW50ZXIvcmV0dXJuIGFuZCBzcGFjZWJhciBrZXkgcHJlc3Nlc1xuICAgICAgICAub24oJ2NsaWNrLnpmLm9yYml0IHRvdWNoZW5kLnpmLm9yYml0JywgZnVuY3Rpb24oZSl7XG5cdCAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNsaWRlKCQodGhpcykuaGFzQ2xhc3MoX3RoaXMub3B0aW9ucy5uZXh0Q2xhc3MpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYnVsbGV0cykge1xuICAgICAgICB0aGlzLiRidWxsZXRzLm9uKCdjbGljay56Zi5vcmJpdCB0b3VjaGVuZC56Zi5vcmJpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICgvaXMtYWN0aXZlL2cudGVzdCh0aGlzLmNsYXNzTmFtZSkpIHsgcmV0dXJuIGZhbHNlOyB9Ly9pZiB0aGlzIGlzIGFjdGl2ZSwga2ljayBvdXQgb2YgZnVuY3Rpb24uXG4gICAgICAgICAgdmFyIGlkeCA9ICQodGhpcykuZGF0YSgnc2xpZGUnKSxcbiAgICAgICAgICBsdHIgPSBpZHggPiBfdGhpcy4kc2xpZGVzLmZpbHRlcignLmlzLWFjdGl2ZScpLmRhdGEoJ3NsaWRlJyksXG4gICAgICAgICAgJHNsaWRlID0gX3RoaXMuJHNsaWRlcy5lcShpZHgpO1xuXG4gICAgICAgICAgX3RoaXMuY2hhbmdlU2xpZGUobHRyLCAkc2xpZGUsIGlkeCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFjY2Vzc2libGUpIHtcbiAgICAgICAgdGhpcy4kd3JhcHBlci5hZGQodGhpcy4kYnVsbGV0cykub24oJ2tleWRvd24uemYub3JiaXQnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgLy8gaGFuZGxlIGtleWJvYXJkIGV2ZW50IHdpdGgga2V5Ym9hcmQgdXRpbFxuICAgICAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQuaGFuZGxlS2V5KGUsICdPcmJpdCcsIHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBfdGhpcy5jaGFuZ2VTbGlkZSh0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmV2aW91czogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIF90aGlzLmNoYW5nZVNsaWRlKGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYW5kbGVkOiBmdW5jdGlvbigpIHsgLy8gaWYgYnVsbGV0IGlzIGZvY3VzZWQsIG1ha2Ugc3VyZSBmb2N1cyBtb3Zlc1xuICAgICAgICAgICAgICBpZiAoJChlLnRhcmdldCkuaXMoX3RoaXMuJGJ1bGxldHMpKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuJGJ1bGxldHMuZmlsdGVyKCcuaXMtYWN0aXZlJykuZm9jdXMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIE9yYml0IHNvIGl0IGNhbiBiZSByZWluaXRpYWxpemVkXG4gICAqL1xuICBfcmVzZXQoKSB7XG4gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgYXJlIG5vIHNsaWRlcyAoZmlyc3QgcnVuKVxuICAgIGlmICh0eXBlb2YgdGhpcy4kc2xpZGVzID09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuJHNsaWRlcy5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBSZW1vdmUgb2xkIGV2ZW50c1xuICAgICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi5vcmJpdCcpLmZpbmQoJyonKS5vZmYoJy56Zi5vcmJpdCcpXG5cbiAgICAgIC8vIFJlc3RhcnQgdGltZXIgaWYgYXV0b1BsYXkgaXMgZW5hYmxlZFxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUGxheSkge1xuICAgICAgICB0aGlzLnRpbWVyLnJlc3RhcnQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXQgYWxsIHNsaWRkZXNcbiAgICAgIHRoaXMuJHNsaWRlcy5lYWNoKGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgICQoZWwpLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUgaXMtYWN0aXZlIGlzLWluJylcbiAgICAgICAgICAucmVtb3ZlQXR0cignYXJpYS1saXZlJylcbiAgICAgICAgICAuaGlkZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFNob3cgdGhlIGZpcnN0IHNsaWRlXG4gICAgICB0aGlzLiRzbGlkZXMuZmlyc3QoKS5hZGRDbGFzcygnaXMtYWN0aXZlJykuc2hvdygpO1xuXG4gICAgICAvLyBUcmlnZ2VycyB3aGVuIHRoZSBzbGlkZSBoYXMgZmluaXNoZWQgYW5pbWF0aW5nXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3NsaWRlY2hhbmdlLnpmLm9yYml0JywgW3RoaXMuJHNsaWRlcy5maXJzdCgpXSk7XG5cbiAgICAgIC8vIFNlbGVjdCBmaXJzdCBidWxsZXQgaWYgYnVsbGV0cyBhcmUgcHJlc2VudFxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5idWxsZXRzKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUJ1bGxldHMoMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICogQ2hhbmdlcyB0aGUgY3VycmVudCBzbGlkZSB0byBhIG5ldyBvbmUuXG4gICogQGZ1bmN0aW9uXG4gICogQHBhcmFtIHtCb29sZWFufSBpc0xUUiAtIGZsYWcgaWYgdGhlIHNsaWRlIHNob3VsZCBtb3ZlIGxlZnQgdG8gcmlnaHQuXG4gICogQHBhcmFtIHtqUXVlcnl9IGNob3NlblNsaWRlIC0gdGhlIGpRdWVyeSBlbGVtZW50IG9mIHRoZSBzbGlkZSB0byBzaG93IG5leHQsIGlmIG9uZSBpcyBzZWxlY3RlZC5cbiAgKiBAcGFyYW0ge051bWJlcn0gaWR4IC0gdGhlIGluZGV4IG9mIHRoZSBuZXcgc2xpZGUgaW4gaXRzIGNvbGxlY3Rpb24sIGlmIG9uZSBjaG9zZW4uXG4gICogQGZpcmVzIE9yYml0I3NsaWRlY2hhbmdlXG4gICovXG4gIGNoYW5nZVNsaWRlKGlzTFRSLCBjaG9zZW5TbGlkZSwgaWR4KSB7XG4gICAgaWYgKCF0aGlzLiRzbGlkZXMpIHtyZXR1cm47IH0gLy8gRG9uJ3QgZnJlYWsgb3V0IGlmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgY2xlYW51cFxuICAgIHZhciAkY3VyU2xpZGUgPSB0aGlzLiRzbGlkZXMuZmlsdGVyKCcuaXMtYWN0aXZlJykuZXEoMCk7XG5cbiAgICBpZiAoL211aS9nLnRlc3QoJGN1clNsaWRlWzBdLmNsYXNzTmFtZSkpIHsgcmV0dXJuIGZhbHNlOyB9IC8vaWYgdGhlIHNsaWRlIGlzIGN1cnJlbnRseSBhbmltYXRpbmcsIGtpY2sgb3V0IG9mIHRoZSBmdW5jdGlvblxuXG4gICAgdmFyICRmaXJzdFNsaWRlID0gdGhpcy4kc2xpZGVzLmZpcnN0KCksXG4gICAgJGxhc3RTbGlkZSA9IHRoaXMuJHNsaWRlcy5sYXN0KCksXG4gICAgZGlySW4gPSBpc0xUUiA/ICdSaWdodCcgOiAnTGVmdCcsXG4gICAgZGlyT3V0ID0gaXNMVFIgPyAnTGVmdCcgOiAnUmlnaHQnLFxuICAgIF90aGlzID0gdGhpcyxcbiAgICAkbmV3U2xpZGU7XG5cbiAgICBpZiAoIWNob3NlblNsaWRlKSB7IC8vbW9zdCBvZiB0aGUgdGltZSwgdGhpcyB3aWxsIGJlIGF1dG8gcGxheWVkIG9yIGNsaWNrZWQgZnJvbSB0aGUgbmF2QnV0dG9ucy5cbiAgICAgICRuZXdTbGlkZSA9IGlzTFRSID8gLy9pZiB3cmFwcGluZyBlbmFibGVkLCBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBgbmV4dGAgb3IgYHByZXZgIHNpYmxpbmcsIGlmIG5vdCwgc2VsZWN0IHRoZSBmaXJzdCBvciBsYXN0IHNsaWRlIHRvIGZpbGwgaW4uIGlmIHdyYXBwaW5nIG5vdCBlbmFibGVkLCBhdHRlbXB0IHRvIHNlbGVjdCBgbmV4dGAgb3IgYHByZXZgLCBpZiB0aGVyZSdzIG5vdGhpbmcgdGhlcmUsIHRoZSBmdW5jdGlvbiB3aWxsIGtpY2sgb3V0IG9uIG5leHQgc3RlcC4gQ1JBWlkgTkVTVEVEIFRFUk5BUklFUyEhISEhXG4gICAgICAodGhpcy5vcHRpb25zLmluZmluaXRlV3JhcCA/ICRjdXJTbGlkZS5uZXh0KGAuJHt0aGlzLm9wdGlvbnMuc2xpZGVDbGFzc31gKS5sZW5ndGggPyAkY3VyU2xpZGUubmV4dChgLiR7dGhpcy5vcHRpb25zLnNsaWRlQ2xhc3N9YCkgOiAkZmlyc3RTbGlkZSA6ICRjdXJTbGlkZS5uZXh0KGAuJHt0aGlzLm9wdGlvbnMuc2xpZGVDbGFzc31gKSkvL3BpY2sgbmV4dCBzbGlkZSBpZiBtb3ZpbmcgbGVmdCB0byByaWdodFxuICAgICAgOlxuICAgICAgKHRoaXMub3B0aW9ucy5pbmZpbml0ZVdyYXAgPyAkY3VyU2xpZGUucHJldihgLiR7dGhpcy5vcHRpb25zLnNsaWRlQ2xhc3N9YCkubGVuZ3RoID8gJGN1clNsaWRlLnByZXYoYC4ke3RoaXMub3B0aW9ucy5zbGlkZUNsYXNzfWApIDogJGxhc3RTbGlkZSA6ICRjdXJTbGlkZS5wcmV2KGAuJHt0aGlzLm9wdGlvbnMuc2xpZGVDbGFzc31gKSk7Ly9waWNrIHByZXYgc2xpZGUgaWYgbW92aW5nIHJpZ2h0IHRvIGxlZnRcbiAgICB9IGVsc2Uge1xuICAgICAgJG5ld1NsaWRlID0gY2hvc2VuU2xpZGU7XG4gICAgfVxuXG4gICAgaWYgKCRuZXdTbGlkZS5sZW5ndGgpIHtcbiAgICAgIC8qKlxuICAgICAgKiBUcmlnZ2VycyBiZWZvcmUgdGhlIG5leHQgc2xpZGUgc3RhcnRzIGFuaW1hdGluZyBpbiBhbmQgb25seSBpZiBhIG5leHQgc2xpZGUgaGFzIGJlZW4gZm91bmQuXG4gICAgICAqIEBldmVudCBPcmJpdCNiZWZvcmVzbGlkZWNoYW5nZVxuICAgICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignYmVmb3Jlc2xpZGVjaGFuZ2UuemYub3JiaXQnLCBbJGN1clNsaWRlLCAkbmV3U2xpZGVdKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5idWxsZXRzKSB7XG4gICAgICAgIGlkeCA9IGlkeCB8fCB0aGlzLiRzbGlkZXMuaW5kZXgoJG5ld1NsaWRlKTsgLy9ncmFiIGluZGV4IHRvIHVwZGF0ZSBidWxsZXRzXG4gICAgICAgIHRoaXMuX3VwZGF0ZUJ1bGxldHMoaWR4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy51c2VNVUkgJiYgIXRoaXMuJGVsZW1lbnQuaXMoJzpoaWRkZW4nKSkge1xuICAgICAgICBGb3VuZGF0aW9uLk1vdGlvbi5hbmltYXRlSW4oXG4gICAgICAgICAgJG5ld1NsaWRlLmFkZENsYXNzKCdpcy1hY3RpdmUnKS5jc3Moeydwb3NpdGlvbic6ICdhYnNvbHV0ZScsICd0b3AnOiAwfSksXG4gICAgICAgICAgdGhpcy5vcHRpb25zW2BhbmltSW5Gcm9tJHtkaXJJbn1gXSxcbiAgICAgICAgICBmdW5jdGlvbigpe1xuICAgICAgICAgICAgJG5ld1NsaWRlLmNzcyh7J3Bvc2l0aW9uJzogJ3JlbGF0aXZlJywgJ2Rpc3BsYXknOiAnYmxvY2snfSlcbiAgICAgICAgICAgIC5hdHRyKCdhcmlhLWxpdmUnLCAncG9saXRlJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIEZvdW5kYXRpb24uTW90aW9uLmFuaW1hdGVPdXQoXG4gICAgICAgICAgJGN1clNsaWRlLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUnKSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnNbYGFuaW1PdXRUbyR7ZGlyT3V0fWBdLFxuICAgICAgICAgIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAkY3VyU2xpZGUucmVtb3ZlQXR0cignYXJpYS1saXZlJyk7XG4gICAgICAgICAgICBpZihfdGhpcy5vcHRpb25zLmF1dG9QbGF5ICYmICFfdGhpcy50aW1lci5pc1BhdXNlZCl7XG4gICAgICAgICAgICAgIF90aGlzLnRpbWVyLnJlc3RhcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vZG8gc3R1ZmY/XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkY3VyU2xpZGUucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZSBpcy1pbicpLnJlbW92ZUF0dHIoJ2FyaWEtbGl2ZScpLmhpZGUoKTtcbiAgICAgICAgJG5ld1NsaWRlLmFkZENsYXNzKCdpcy1hY3RpdmUgaXMtaW4nKS5hdHRyKCdhcmlhLWxpdmUnLCAncG9saXRlJykuc2hvdygpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9QbGF5ICYmICF0aGlzLnRpbWVyLmlzUGF1c2VkKSB7XG4gICAgICAgICAgdGhpcy50aW1lci5yZXN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAvKipcbiAgICAqIFRyaWdnZXJzIHdoZW4gdGhlIHNsaWRlIGhhcyBmaW5pc2hlZCBhbmltYXRpbmcgaW4uXG4gICAgKiBAZXZlbnQgT3JiaXQjc2xpZGVjaGFuZ2VcbiAgICAqL1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdzbGlkZWNoYW5nZS56Zi5vcmJpdCcsIFskbmV3U2xpZGVdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgKiBVcGRhdGVzIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGJ1bGxldHMsIGlmIGRpc3BsYXllZC5cbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqIEBwYXJhbSB7TnVtYmVyfSBpZHggLSB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc2xpZGUuXG4gICovXG4gIF91cGRhdGVCdWxsZXRzKGlkeCkge1xuICAgIHZhciAkb2xkQnVsbGV0ID0gdGhpcy4kZWxlbWVudC5maW5kKGAuJHt0aGlzLm9wdGlvbnMuYm94T2ZCdWxsZXRzfWApXG4gICAgLmZpbmQoJy5pcy1hY3RpdmUnKS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlJykuYmx1cigpLFxuICAgIHNwYW4gPSAkb2xkQnVsbGV0LmZpbmQoJ3NwYW46bGFzdCcpLmRldGFjaCgpLFxuICAgICRuZXdCdWxsZXQgPSB0aGlzLiRidWxsZXRzLmVxKGlkeCkuYWRkQ2xhc3MoJ2lzLWFjdGl2ZScpLmFwcGVuZChzcGFuKTtcbiAgfVxuXG4gIC8qKlxuICAqIERlc3Ryb3lzIHRoZSBjYXJvdXNlbCBhbmQgaGlkZXMgdGhlIGVsZW1lbnQuXG4gICogQGZ1bmN0aW9uXG4gICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi5vcmJpdCcpLmZpbmQoJyonKS5vZmYoJy56Zi5vcmJpdCcpLmVuZCgpLmhpZGUoKTtcbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuT3JiaXQuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAqIFRlbGxzIHRoZSBKUyB0byBsb29rIGZvciBhbmQgbG9hZEJ1bGxldHMuXG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlIHRydWVcbiAgKi9cbiAgYnVsbGV0czogdHJ1ZSxcbiAgLyoqXG4gICogVGVsbHMgdGhlIEpTIHRvIGFwcGx5IGV2ZW50IGxpc3RlbmVycyB0byBuYXYgYnV0dG9uc1xuICAqIEBvcHRpb25cbiAgKiBAZXhhbXBsZSB0cnVlXG4gICovXG4gIG5hdkJ1dHRvbnM6IHRydWUsXG4gIC8qKlxuICAqIG1vdGlvbi11aSBhbmltYXRpb24gY2xhc3MgdG8gYXBwbHlcbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgJ3NsaWRlLWluLXJpZ2h0J1xuICAqL1xuICBhbmltSW5Gcm9tUmlnaHQ6ICdzbGlkZS1pbi1yaWdodCcsXG4gIC8qKlxuICAqIG1vdGlvbi11aSBhbmltYXRpb24gY2xhc3MgdG8gYXBwbHlcbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgJ3NsaWRlLW91dC1yaWdodCdcbiAgKi9cbiAgYW5pbU91dFRvUmlnaHQ6ICdzbGlkZS1vdXQtcmlnaHQnLFxuICAvKipcbiAgKiBtb3Rpb24tdWkgYW5pbWF0aW9uIGNsYXNzIHRvIGFwcGx5XG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlICdzbGlkZS1pbi1sZWZ0J1xuICAqXG4gICovXG4gIGFuaW1JbkZyb21MZWZ0OiAnc2xpZGUtaW4tbGVmdCcsXG4gIC8qKlxuICAqIG1vdGlvbi11aSBhbmltYXRpb24gY2xhc3MgdG8gYXBwbHlcbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgJ3NsaWRlLW91dC1sZWZ0J1xuICAqL1xuICBhbmltT3V0VG9MZWZ0OiAnc2xpZGUtb3V0LWxlZnQnLFxuICAvKipcbiAgKiBBbGxvd3MgT3JiaXQgdG8gYXV0b21hdGljYWxseSBhbmltYXRlIG9uIHBhZ2UgbG9hZC5cbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgdHJ1ZVxuICAqL1xuICBhdXRvUGxheTogdHJ1ZSxcbiAgLyoqXG4gICogQW1vdW50IG9mIHRpbWUsIGluIG1zLCBiZXR3ZWVuIHNsaWRlIHRyYW5zaXRpb25zXG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlIDUwMDBcbiAgKi9cbiAgdGltZXJEZWxheTogNTAwMCxcbiAgLyoqXG4gICogQWxsb3dzIE9yYml0IHRvIGluZmluaXRlbHkgbG9vcCB0aHJvdWdoIHRoZSBzbGlkZXNcbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgdHJ1ZVxuICAqL1xuICBpbmZpbml0ZVdyYXA6IHRydWUsXG4gIC8qKlxuICAqIEFsbG93cyB0aGUgT3JiaXQgc2xpZGVzIHRvIGJpbmQgdG8gc3dpcGUgZXZlbnRzIGZvciBtb2JpbGUsIHJlcXVpcmVzIGFuIGFkZGl0aW9uYWwgdXRpbCBsaWJyYXJ5XG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlIHRydWVcbiAgKi9cbiAgc3dpcGU6IHRydWUsXG4gIC8qKlxuICAqIEFsbG93cyB0aGUgdGltaW5nIGZ1bmN0aW9uIHRvIHBhdXNlIGFuaW1hdGlvbiBvbiBob3Zlci5cbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgdHJ1ZVxuICAqL1xuICBwYXVzZU9uSG92ZXI6IHRydWUsXG4gIC8qKlxuICAqIEFsbG93cyBPcmJpdCB0byBiaW5kIGtleWJvYXJkIGV2ZW50cyB0byB0aGUgc2xpZGVyLCB0byBhbmltYXRlIGZyYW1lcyB3aXRoIGFycm93IGtleXNcbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgdHJ1ZVxuICAqL1xuICBhY2Nlc3NpYmxlOiB0cnVlLFxuICAvKipcbiAgKiBDbGFzcyBhcHBsaWVkIHRvIHRoZSBjb250YWluZXIgb2YgT3JiaXRcbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgJ29yYml0LWNvbnRhaW5lcidcbiAgKi9cbiAgY29udGFpbmVyQ2xhc3M6ICdvcmJpdC1jb250YWluZXInLFxuICAvKipcbiAgKiBDbGFzcyBhcHBsaWVkIHRvIGluZGl2aWR1YWwgc2xpZGVzLlxuICAqIEBvcHRpb25cbiAgKiBAZXhhbXBsZSAnb3JiaXQtc2xpZGUnXG4gICovXG4gIHNsaWRlQ2xhc3M6ICdvcmJpdC1zbGlkZScsXG4gIC8qKlxuICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIGJ1bGxldCBjb250YWluZXIuIFlvdSdyZSB3ZWxjb21lLlxuICAqIEBvcHRpb25cbiAgKiBAZXhhbXBsZSAnb3JiaXQtYnVsbGV0cydcbiAgKi9cbiAgYm94T2ZCdWxsZXRzOiAnb3JiaXQtYnVsbGV0cycsXG4gIC8qKlxuICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIGBuZXh0YCBuYXZpZ2F0aW9uIGJ1dHRvbi5cbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgJ29yYml0LW5leHQnXG4gICovXG4gIG5leHRDbGFzczogJ29yYml0LW5leHQnLFxuICAvKipcbiAgKiBDbGFzcyBhcHBsaWVkIHRvIHRoZSBgcHJldmlvdXNgIG5hdmlnYXRpb24gYnV0dG9uLlxuICAqIEBvcHRpb25cbiAgKiBAZXhhbXBsZSAnb3JiaXQtcHJldmlvdXMnXG4gICovXG4gIHByZXZDbGFzczogJ29yYml0LXByZXZpb3VzJyxcbiAgLyoqXG4gICogQm9vbGVhbiB0byBmbGFnIHRoZSBqcyB0byB1c2UgbW90aW9uIHVpIGNsYXNzZXMgb3Igbm90LiBEZWZhdWx0IHRvIHRydWUgZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5LlxuICAqIEBvcHRpb25cbiAgKiBAZXhhbXBsZSB0cnVlXG4gICovXG4gIHVzZU1VSTogdHJ1ZVxufTtcblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKE9yYml0LCAnT3JiaXQnKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIFJlc3BvbnNpdmVNZW51IG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5yZXNwb25zaXZlTWVudVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tZWRpYVF1ZXJ5XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmFjY29yZGlvbk1lbnVcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwuZHJpbGxkb3duXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmRyb3Bkb3duLW1lbnVcbiAqL1xuXG5jbGFzcyBSZXNwb25zaXZlTWVudSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGEgcmVzcG9uc2l2ZSBtZW51LlxuICAgKiBAY2xhc3NcbiAgICogQGZpcmVzIFJlc3BvbnNpdmVNZW51I2luaXRcbiAgICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIG1ha2UgaW50byBhIGRyb3Bkb3duIG1lbnUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICB0aGlzLnJ1bGVzID0gdGhpcy4kZWxlbWVudC5kYXRhKCdyZXNwb25zaXZlLW1lbnUnKTtcbiAgICB0aGlzLmN1cnJlbnRNcSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50UGx1Z2luID0gbnVsbDtcblxuICAgIHRoaXMuX2luaXQoKTtcbiAgICB0aGlzLl9ldmVudHMoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ1Jlc3BvbnNpdmVNZW51Jyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIE1lbnUgYnkgcGFyc2luZyB0aGUgY2xhc3NlcyBmcm9tIHRoZSAnZGF0YS1SZXNwb25zaXZlTWVudScgYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIC8vIFRoZSBmaXJzdCB0aW1lIGFuIEludGVyY2hhbmdlIHBsdWdpbiBpcyBpbml0aWFsaXplZCwgdGhpcy5ydWxlcyBpcyBjb252ZXJ0ZWQgZnJvbSBhIHN0cmluZyBvZiBcImNsYXNzZXNcIiB0byBhbiBvYmplY3Qgb2YgcnVsZXNcbiAgICBpZiAodHlwZW9mIHRoaXMucnVsZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgcnVsZXNUcmVlID0ge307XG5cbiAgICAgIC8vIFBhcnNlIHJ1bGVzIGZyb20gXCJjbGFzc2VzXCIgcHVsbGVkIGZyb20gZGF0YSBhdHRyaWJ1dGVcbiAgICAgIGxldCBydWxlcyA9IHRoaXMucnVsZXMuc3BsaXQoJyAnKTtcblxuICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGV2ZXJ5IHJ1bGUgZm91bmRcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHJ1bGUgPSBydWxlc1tpXS5zcGxpdCgnLScpO1xuICAgICAgICBsZXQgcnVsZVNpemUgPSBydWxlLmxlbmd0aCA+IDEgPyBydWxlWzBdIDogJ3NtYWxsJztcbiAgICAgICAgbGV0IHJ1bGVQbHVnaW4gPSBydWxlLmxlbmd0aCA+IDEgPyBydWxlWzFdIDogcnVsZVswXTtcblxuICAgICAgICBpZiAoTWVudVBsdWdpbnNbcnVsZVBsdWdpbl0gIT09IG51bGwpIHtcbiAgICAgICAgICBydWxlc1RyZWVbcnVsZVNpemVdID0gTWVudVBsdWdpbnNbcnVsZVBsdWdpbl07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5ydWxlcyA9IHJ1bGVzVHJlZTtcbiAgICB9XG5cbiAgICBpZiAoISQuaXNFbXB0eU9iamVjdCh0aGlzLnJ1bGVzKSkge1xuICAgICAgdGhpcy5fY2hlY2tNZWRpYVF1ZXJpZXMoKTtcbiAgICB9XG4gICAgLy8gQWRkIGRhdGEtbXV0YXRlIHNpbmNlIGNoaWxkcmVuIG1heSBuZWVkIGl0LlxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cignZGF0YS1tdXRhdGUnLCAodGhpcy4kZWxlbWVudC5hdHRyKCdkYXRhLW11dGF0ZScpIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ3Jlc3BvbnNpdmUtbWVudScpKSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgZXZlbnRzIGZvciB0aGUgTWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAkKHdpbmRvdykub24oJ2NoYW5nZWQuemYubWVkaWFxdWVyeScsIGZ1bmN0aW9uKCkge1xuICAgICAgX3RoaXMuX2NoZWNrTWVkaWFRdWVyaWVzKCk7XG4gICAgfSk7XG4gICAgLy8gJCh3aW5kb3cpLm9uKCdyZXNpemUuemYuUmVzcG9uc2l2ZU1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAvLyAgIF90aGlzLl9jaGVja01lZGlhUXVlcmllcygpO1xuICAgIC8vIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgY3VycmVudCBzY3JlZW4gd2lkdGggYWdhaW5zdCBhdmFpbGFibGUgbWVkaWEgcXVlcmllcy4gSWYgdGhlIG1lZGlhIHF1ZXJ5IGhhcyBjaGFuZ2VkLCBhbmQgdGhlIHBsdWdpbiBuZWVkZWQgaGFzIGNoYW5nZWQsIHRoZSBwbHVnaW5zIHdpbGwgc3dhcCBvdXQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrTWVkaWFRdWVyaWVzKCkge1xuICAgIHZhciBtYXRjaGVkTXEsIF90aGlzID0gdGhpcztcbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBydWxlIGFuZCBmaW5kIHRoZSBsYXN0IG1hdGNoaW5nIHJ1bGVcbiAgICAkLmVhY2godGhpcy5ydWxlcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICBpZiAoRm91bmRhdGlvbi5NZWRpYVF1ZXJ5LmF0TGVhc3Qoa2V5KSkge1xuICAgICAgICBtYXRjaGVkTXEgPSBrZXk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBObyBtYXRjaD8gTm8gZGljZVxuICAgIGlmICghbWF0Y2hlZE1xKSByZXR1cm47XG5cbiAgICAvLyBQbHVnaW4gYWxyZWFkeSBpbml0aWFsaXplZD8gV2UgZ29vZFxuICAgIGlmICh0aGlzLmN1cnJlbnRQbHVnaW4gaW5zdGFuY2VvZiB0aGlzLnJ1bGVzW21hdGNoZWRNcV0ucGx1Z2luKSByZXR1cm47XG5cbiAgICAvLyBSZW1vdmUgZXhpc3RpbmcgcGx1Z2luLXNwZWNpZmljIENTUyBjbGFzc2VzXG4gICAgJC5lYWNoKE1lbnVQbHVnaW5zLCBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgICBfdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyh2YWx1ZS5jc3NDbGFzcyk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdGhlIENTUyBjbGFzcyBmb3IgdGhlIG5ldyBwbHVnaW5cbiAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMucnVsZXNbbWF0Y2hlZE1xXS5jc3NDbGFzcyk7XG5cbiAgICAvLyBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIG5ldyBwbHVnaW5cbiAgICBpZiAodGhpcy5jdXJyZW50UGx1Z2luKSB0aGlzLmN1cnJlbnRQbHVnaW4uZGVzdHJveSgpO1xuICAgIHRoaXMuY3VycmVudFBsdWdpbiA9IG5ldyB0aGlzLnJ1bGVzW21hdGNoZWRNcV0ucGx1Z2luKHRoaXMuJGVsZW1lbnQsIHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGN1cnJlbnQgcGx1Z2luIG9uIHRoaXMgZWxlbWVudCwgYXMgd2VsbCBhcyB0aGUgd2luZG93IHJlc2l6ZSBoYW5kbGVyIHRoYXQgc3dpdGNoZXMgdGhlIHBsdWdpbnMgb3V0LlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jdXJyZW50UGx1Z2luLmRlc3Ryb3koKTtcbiAgICAkKHdpbmRvdykub2ZmKCcuemYuUmVzcG9uc2l2ZU1lbnUnKTtcbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuUmVzcG9uc2l2ZU1lbnUuZGVmYXVsdHMgPSB7fTtcblxuLy8gVGhlIHBsdWdpbiBtYXRjaGVzIHRoZSBwbHVnaW4gY2xhc3NlcyB3aXRoIHRoZXNlIHBsdWdpbiBpbnN0YW5jZXMuXG52YXIgTWVudVBsdWdpbnMgPSB7XG4gIGRyb3Bkb3duOiB7XG4gICAgY3NzQ2xhc3M6ICdkcm9wZG93bicsXG4gICAgcGx1Z2luOiBGb3VuZGF0aW9uLl9wbHVnaW5zWydkcm9wZG93bi1tZW51J10gfHwgbnVsbFxuICB9LFxuIGRyaWxsZG93bjoge1xuICAgIGNzc0NsYXNzOiAnZHJpbGxkb3duJyxcbiAgICBwbHVnaW46IEZvdW5kYXRpb24uX3BsdWdpbnNbJ2RyaWxsZG93biddIHx8IG51bGxcbiAgfSxcbiAgYWNjb3JkaW9uOiB7XG4gICAgY3NzQ2xhc3M6ICdhY2NvcmRpb24tbWVudScsXG4gICAgcGx1Z2luOiBGb3VuZGF0aW9uLl9wbHVnaW5zWydhY2NvcmRpb24tbWVudSddIHx8IG51bGxcbiAgfVxufTtcblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKFJlc3BvbnNpdmVNZW51LCAnUmVzcG9uc2l2ZU1lbnUnKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIFJlc3BvbnNpdmVUb2dnbGUgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnJlc3BvbnNpdmVUb2dnbGVcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeVxuICovXG5cbmNsYXNzIFJlc3BvbnNpdmVUb2dnbGUge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBUYWIgQmFyLlxuICAgKiBAY2xhc3NcbiAgICogQGZpcmVzIFJlc3BvbnNpdmVUb2dnbGUjaW5pdFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gYXR0YWNoIHRhYiBiYXIgZnVuY3Rpb25hbGl0eSB0by5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBSZXNwb25zaXZlVG9nZ2xlLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdSZXNwb25zaXZlVG9nZ2xlJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHRhYiBiYXIgYnkgZmluZGluZyB0aGUgdGFyZ2V0IGVsZW1lbnQsIHRvZ2dsaW5nIGVsZW1lbnQsIGFuZCBydW5uaW5nIHVwZGF0ZSgpLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciB0YXJnZXRJRCA9IHRoaXMuJGVsZW1lbnQuZGF0YSgncmVzcG9uc2l2ZS10b2dnbGUnKTtcbiAgICBpZiAoIXRhcmdldElEKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdZb3VyIHRhYiBiYXIgbmVlZHMgYW4gSUQgb2YgYSBNZW51IGFzIHRoZSB2YWx1ZSBvZiBkYXRhLXRhYi1iYXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy4kdGFyZ2V0TWVudSA9ICQoYCMke3RhcmdldElEfWApO1xuICAgIHRoaXMuJHRvZ2dsZXIgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLXRvZ2dsZV0nKTtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCB0aGlzLiR0YXJnZXRNZW51LmRhdGEoKSk7XG5cbiAgICAvLyBJZiB0aGV5IHdlcmUgc2V0LCBwYXJzZSB0aGUgYW5pbWF0aW9uIGNsYXNzZXNcbiAgICBpZih0aGlzLm9wdGlvbnMuYW5pbWF0ZSkge1xuICAgICAgbGV0IGlucHV0ID0gdGhpcy5vcHRpb25zLmFuaW1hdGUuc3BsaXQoJyAnKTtcblxuICAgICAgdGhpcy5hbmltYXRpb25JbiA9IGlucHV0WzBdO1xuICAgICAgdGhpcy5hbmltYXRpb25PdXQgPSBpbnB1dFsxXSB8fCBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgbmVjZXNzYXJ5IGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgdGFiIGJhciB0byB3b3JrLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX3VwZGF0ZU1xSGFuZGxlciA9IHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgJCh3aW5kb3cpLm9uKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCB0aGlzLl91cGRhdGVNcUhhbmRsZXIpO1xuXG4gICAgdGhpcy4kdG9nZ2xlci5vbignY2xpY2suemYucmVzcG9uc2l2ZVRvZ2dsZScsIHRoaXMudG9nZ2xlTWVudS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIGN1cnJlbnQgbWVkaWEgcXVlcnkgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0YWIgYmFyIHNob3VsZCBiZSB2aXNpYmxlIG9yIGhpZGRlbi5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlKCkge1xuICAgIC8vIE1vYmlsZVxuICAgIGlmICghRm91bmRhdGlvbi5NZWRpYVF1ZXJ5LmF0TGVhc3QodGhpcy5vcHRpb25zLmhpZGVGb3IpKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LnNob3coKTtcbiAgICAgIHRoaXMuJHRhcmdldE1lbnUuaGlkZSgpO1xuICAgIH1cblxuICAgIC8vIERlc2t0b3BcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQuaGlkZSgpO1xuICAgICAgdGhpcy4kdGFyZ2V0TWVudS5zaG93KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGVsZW1lbnQgYXR0YWNoZWQgdG8gdGhlIHRhYiBiYXIuIFRoZSB0b2dnbGUgb25seSBoYXBwZW5zIGlmIHRoZSBzY3JlZW4gaXMgc21hbGwgZW5vdWdoIHRvIGFsbG93IGl0LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIFJlc3BvbnNpdmVUb2dnbGUjdG9nZ2xlZFxuICAgKi9cbiAgdG9nZ2xlTWVudSgpIHtcbiAgICBpZiAoIUZvdW5kYXRpb24uTWVkaWFRdWVyeS5hdExlYXN0KHRoaXMub3B0aW9ucy5oaWRlRm9yKSkge1xuICAgICAgaWYodGhpcy5vcHRpb25zLmFuaW1hdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuJHRhcmdldE1lbnUuaXMoJzpoaWRkZW4nKSkge1xuICAgICAgICAgIEZvdW5kYXRpb24uTW90aW9uLmFuaW1hdGVJbih0aGlzLiR0YXJnZXRNZW51LCB0aGlzLmFuaW1hdGlvbkluLCAoKSA9PiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGVsZW1lbnQgYXR0YWNoZWQgdG8gdGhlIHRhYiBiYXIgdG9nZ2xlcy5cbiAgICAgICAgICAgICAqIEBldmVudCBSZXNwb25zaXZlVG9nZ2xlI3RvZ2dsZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCd0b2dnbGVkLnpmLnJlc3BvbnNpdmVUb2dnbGUnKTtcbiAgICAgICAgICAgIHRoaXMuJHRhcmdldE1lbnUuZmluZCgnW2RhdGEtbXV0YXRlXScpLnRyaWdnZXJIYW5kbGVyKCdtdXRhdGVtZS56Zi50cmlnZ2VyJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgRm91bmRhdGlvbi5Nb3Rpb24uYW5pbWF0ZU91dCh0aGlzLiR0YXJnZXRNZW51LCB0aGlzLmFuaW1hdGlvbk91dCwgKCkgPT4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBlbGVtZW50IGF0dGFjaGVkIHRvIHRoZSB0YWIgYmFyIHRvZ2dsZXMuXG4gICAgICAgICAgICAgKiBAZXZlbnQgUmVzcG9uc2l2ZVRvZ2dsZSN0b2dnbGVkXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigndG9nZ2xlZC56Zi5yZXNwb25zaXZlVG9nZ2xlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLiR0YXJnZXRNZW51LnRvZ2dsZSgwKTtcbiAgICAgICAgdGhpcy4kdGFyZ2V0TWVudS5maW5kKCdbZGF0YS1tdXRhdGVdJykudHJpZ2dlcignbXV0YXRlbWUuemYudHJpZ2dlcicpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBlbGVtZW50IGF0dGFjaGVkIHRvIHRoZSB0YWIgYmFyIHRvZ2dsZXMuXG4gICAgICAgICAqIEBldmVudCBSZXNwb25zaXZlVG9nZ2xlI3RvZ2dsZWRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigndG9nZ2xlZC56Zi5yZXNwb25zaXZlVG9nZ2xlJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi5yZXNwb25zaXZlVG9nZ2xlJyk7XG4gICAgdGhpcy4kdG9nZ2xlci5vZmYoJy56Zi5yZXNwb25zaXZlVG9nZ2xlJyk7XG5cbiAgICAkKHdpbmRvdykub2ZmKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCB0aGlzLl91cGRhdGVNcUhhbmRsZXIpO1xuXG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cblJlc3BvbnNpdmVUb2dnbGUuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgYnJlYWtwb2ludCBhZnRlciB3aGljaCB0aGUgbWVudSBpcyBhbHdheXMgc2hvd24sIGFuZCB0aGUgdGFiIGJhciBpcyBoaWRkZW4uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ21lZGl1bSdcbiAgICovXG4gIGhpZGVGb3I6ICdtZWRpdW0nLFxuXG4gIC8qKlxuICAgKiBUbyBkZWNpZGUgaWYgdGhlIHRvZ2dsZSBzaG91bGQgYmUgYW5pbWF0ZWQgb3Igbm90LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBhbmltYXRlOiBmYWxzZVxufTtcblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKFJlc3BvbnNpdmVUb2dnbGUsICdSZXNwb25zaXZlVG9nZ2xlJyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBSZXZlYWwgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnJldmVhbFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5rZXlib2FyZFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5ib3hcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudHJpZ2dlcnNcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tb3Rpb24gaWYgdXNpbmcgYW5pbWF0aW9uc1xuICovXG5cbmNsYXNzIFJldmVhbCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJldmVhbC5cbiAgICogQGNsYXNzXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byB1c2UgZm9yIHRoZSBtb2RhbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25hbCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBSZXZlYWwuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdSZXZlYWwnKTtcbiAgICBGb3VuZGF0aW9uLktleWJvYXJkLnJlZ2lzdGVyKCdSZXZlYWwnLCB7XG4gICAgICAnRU5URVInOiAnb3BlbicsXG4gICAgICAnU1BBQ0UnOiAnb3BlbicsXG4gICAgICAnRVNDQVBFJzogJ2Nsb3NlJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgbW9kYWwgYnkgYWRkaW5nIHRoZSBvdmVybGF5IGFuZCBjbG9zZSBidXR0b25zLCAoaWYgc2VsZWN0ZWQpLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdGhpcy5pZCA9IHRoaXMuJGVsZW1lbnQuYXR0cignaWQnKTtcbiAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5jYWNoZWQgPSB7bXE6IEZvdW5kYXRpb24uTWVkaWFRdWVyeS5jdXJyZW50fTtcbiAgICB0aGlzLmlzTW9iaWxlID0gbW9iaWxlU25pZmYoKTtcblxuICAgIHRoaXMuJGFuY2hvciA9ICQoYFtkYXRhLW9wZW49XCIke3RoaXMuaWR9XCJdYCkubGVuZ3RoID8gJChgW2RhdGEtb3Blbj1cIiR7dGhpcy5pZH1cIl1gKSA6ICQoYFtkYXRhLXRvZ2dsZT1cIiR7dGhpcy5pZH1cIl1gKTtcbiAgICB0aGlzLiRhbmNob3IuYXR0cih7XG4gICAgICAnYXJpYS1jb250cm9scyc6IHRoaXMuaWQsXG4gICAgICAnYXJpYS1oYXNwb3B1cCc6IHRydWUsXG4gICAgICAndGFiaW5kZXgnOiAwXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmZ1bGxTY3JlZW4gfHwgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbCcpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZnVsbFNjcmVlbiA9IHRydWU7XG4gICAgICB0aGlzLm9wdGlvbnMub3ZlcmxheSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLm92ZXJsYXkgJiYgIXRoaXMuJG92ZXJsYXkpIHtcbiAgICAgIHRoaXMuJG92ZXJsYXkgPSB0aGlzLl9tYWtlT3ZlcmxheSh0aGlzLmlkKTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoe1xuICAgICAgICAncm9sZSc6ICdkaWFsb2cnLFxuICAgICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlLFxuICAgICAgICAnZGF0YS15ZXRpLWJveCc6IHRoaXMuaWQsXG4gICAgICAgICdkYXRhLXJlc2l6ZSc6IHRoaXMuaWRcbiAgICB9KTtcblxuICAgIGlmKHRoaXMuJG92ZXJsYXkpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQuZGV0YWNoKCkuYXBwZW5kVG8odGhpcy4kb3ZlcmxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQuZGV0YWNoKCkuYXBwZW5kVG8oJCh0aGlzLm9wdGlvbnMuYXBwZW5kVG8pKTtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ3dpdGhvdXQtb3ZlcmxheScpO1xuICAgIH1cbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlZXBMaW5rICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSAoIGAjJHt0aGlzLmlkfWApKSB7XG4gICAgICAkKHdpbmRvdykub25lKCdsb2FkLnpmLnJldmVhbCcsIHRoaXMub3Blbi5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBvdmVybGF5IGRpdiB0byBkaXNwbGF5IGJlaGluZCB0aGUgbW9kYWwuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZU92ZXJsYXkoKSB7XG4gICAgcmV0dXJuICQoJzxkaXY+PC9kaXY+JylcbiAgICAgIC5hZGRDbGFzcygncmV2ZWFsLW92ZXJsYXknKVxuICAgICAgLmFwcGVuZFRvKHRoaXMub3B0aW9ucy5hcHBlbmRUbyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBwb3NpdGlvbiBvZiBtb2RhbFxuICAgKiBUT0RPOiAgRmlndXJlIG91dCBpZiB3ZSBhY3R1YWxseSBuZWVkIHRvIGNhY2hlIHRoZXNlIHZhbHVlcyBvciBpZiBpdCBkb2Vzbid0IG1hdHRlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBvc2l0aW9uKCkge1xuICAgIHZhciB3aWR0aCA9IHRoaXMuJGVsZW1lbnQub3V0ZXJXaWR0aCgpO1xuICAgIHZhciBvdXRlcldpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuJGVsZW1lbnQub3V0ZXJIZWlnaHQoKTtcbiAgICB2YXIgb3V0ZXJIZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCk7XG4gICAgdmFyIGxlZnQsIHRvcDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmhPZmZzZXQgPT09ICdhdXRvJykge1xuICAgICAgbGVmdCA9IHBhcnNlSW50KChvdXRlcldpZHRoIC0gd2lkdGgpIC8gMiwgMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZWZ0ID0gcGFyc2VJbnQodGhpcy5vcHRpb25zLmhPZmZzZXQsIDEwKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy52T2Zmc2V0ID09PSAnYXV0bycpIHtcbiAgICAgIGlmIChoZWlnaHQgPiBvdXRlckhlaWdodCkge1xuICAgICAgICB0b3AgPSBwYXJzZUludChNYXRoLm1pbigxMDAsIG91dGVySGVpZ2h0IC8gMTApLCAxMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSBwYXJzZUludCgob3V0ZXJIZWlnaHQgLSBoZWlnaHQpIC8gNCwgMTApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0b3AgPSBwYXJzZUludCh0aGlzLm9wdGlvbnMudk9mZnNldCwgMTApO1xuICAgIH1cbiAgICB0aGlzLiRlbGVtZW50LmNzcyh7dG9wOiB0b3AgKyAncHgnfSk7XG4gICAgLy8gb25seSB3b3JyeSBhYm91dCBsZWZ0IGlmIHdlIGRvbid0IGhhdmUgYW4gb3ZlcmxheSBvciB3ZSBoYXZlYSAgaG9yaXpvbnRhbCBvZmZzZXQsXG4gICAgLy8gb3RoZXJ3aXNlIHdlJ3JlIHBlcmZlY3RseSBpbiB0aGUgbWlkZGxlXG4gICAgaWYoIXRoaXMuJG92ZXJsYXkgfHwgKHRoaXMub3B0aW9ucy5oT2Zmc2V0ICE9PSAnYXV0bycpKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmNzcyh7bGVmdDogbGVmdCArICdweCd9KTtcbiAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKHttYXJnaW46ICcwcHgnfSk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBoYW5kbGVycyBmb3IgdGhlIG1vZGFsLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kZWxlbWVudC5vbih7XG4gICAgICAnb3Blbi56Zi50cmlnZ2VyJzogdGhpcy5vcGVuLmJpbmQodGhpcyksXG4gICAgICAnY2xvc2UuemYudHJpZ2dlcic6IChldmVudCwgJGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKChldmVudC50YXJnZXQgPT09IF90aGlzLiRlbGVtZW50WzBdKSB8fFxuICAgICAgICAgICAgKCQoZXZlbnQudGFyZ2V0KS5wYXJlbnRzKCdbZGF0YS1jbG9zYWJsZV0nKVswXSA9PT0gJGVsZW1lbnQpKSB7IC8vIG9ubHkgY2xvc2UgcmV2ZWFsIHdoZW4gaXQncyBleHBsaWNpdGx5IGNhbGxlZFxuICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NlLmFwcGx5KHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJ3RvZ2dsZS56Zi50cmlnZ2VyJzogdGhpcy50b2dnbGUuYmluZCh0aGlzKSxcbiAgICAgICdyZXNpemVtZS56Zi50cmlnZ2VyJzogZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLl91cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuJGFuY2hvci5sZW5ndGgpIHtcbiAgICAgIHRoaXMuJGFuY2hvci5vbigna2V5ZG93bi56Zi5yZXZlYWwnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChlLndoaWNoID09PSAxMyB8fCBlLndoaWNoID09PSAzMikge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIF90aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2sgJiYgdGhpcy5vcHRpb25zLm92ZXJsYXkpIHtcbiAgICAgIHRoaXMuJG92ZXJsYXkub2ZmKCcuemYucmV2ZWFsJykub24oJ2NsaWNrLnpmLnJldmVhbCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBfdGhpcy4kZWxlbWVudFswXSB8fFxuICAgICAgICAgICQuY29udGFpbnMoX3RoaXMuJGVsZW1lbnRbMF0sIGUudGFyZ2V0KSB8fFxuICAgICAgICAgICAgISQuY29udGFpbnMoZG9jdW1lbnQsIGUudGFyZ2V0KSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmRlZXBMaW5rKSB7XG4gICAgICAkKHdpbmRvdykub24oYHBvcHN0YXRlLnpmLnJldmVhbDoke3RoaXMuaWR9YCwgdGhpcy5faGFuZGxlU3RhdGUuYmluZCh0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbW9kYWwgbWV0aG9kcyBvbiBiYWNrL2ZvcndhcmQgYnV0dG9uIGNsaWNrcyBvciBhbnkgb3RoZXIgZXZlbnQgdGhhdCB0cmlnZ2VycyBwb3BzdGF0ZS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVTdGF0ZShlKSB7XG4gICAgaWYod2luZG93LmxvY2F0aW9uLmhhc2ggPT09ICggJyMnICsgdGhpcy5pZCkgJiYgIXRoaXMuaXNBY3RpdmUpeyB0aGlzLm9wZW4oKTsgfVxuICAgIGVsc2V7IHRoaXMuY2xvc2UoKTsgfVxuICB9XG5cblxuICAvKipcbiAgICogT3BlbnMgdGhlIG1vZGFsIGNvbnRyb2xsZWQgYnkgYHRoaXMuJGFuY2hvcmAsIGFuZCBjbG9zZXMgYWxsIG90aGVycyBieSBkZWZhdWx0LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIFJldmVhbCNjbG9zZW1lXG4gICAqIEBmaXJlcyBSZXZlYWwjb3BlblxuICAgKi9cbiAgb3BlbigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlZXBMaW5rKSB7XG4gICAgICB2YXIgaGFzaCA9IGAjJHt0aGlzLmlkfWA7XG5cbiAgICAgIGlmICh3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUpIHtcbiAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsIGhhc2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBoYXNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG4gICAgLy8gTWFrZSBlbGVtZW50cyBpbnZpc2libGUsIGJ1dCByZW1vdmUgZGlzcGxheTogbm9uZSBzbyB3ZSBjYW4gZ2V0IHNpemUgYW5kIHBvc2l0aW9uaW5nXG4gICAgdGhpcy4kZWxlbWVudFxuICAgICAgICAuY3NzKHsgJ3Zpc2liaWxpdHknOiAnaGlkZGVuJyB9KVxuICAgICAgICAuc2hvdygpXG4gICAgICAgIC5zY3JvbGxUb3AoMCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICB0aGlzLiRvdmVybGF5LmNzcyh7J3Zpc2liaWxpdHknOiAnaGlkZGVuJ30pLnNob3coKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVQb3NpdGlvbigpO1xuXG4gICAgdGhpcy4kZWxlbWVudFxuICAgICAgLmhpZGUoKVxuICAgICAgLmNzcyh7ICd2aXNpYmlsaXR5JzogJycgfSk7XG5cbiAgICBpZih0aGlzLiRvdmVybGF5KSB7XG4gICAgICB0aGlzLiRvdmVybGF5LmNzcyh7J3Zpc2liaWxpdHknOiAnJ30pLmhpZGUoKTtcbiAgICAgIGlmKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Zhc3QnKSkge1xuICAgICAgICB0aGlzLiRvdmVybGF5LmFkZENsYXNzKCdmYXN0Jyk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ3Nsb3cnKSkge1xuICAgICAgICB0aGlzLiRvdmVybGF5LmFkZENsYXNzKCdzbG93Jyk7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5tdWx0aXBsZU9wZW5lZCkge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXJlcyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIG1vZGFsIG9wZW5zLlxuICAgICAgICogQ2xvc2VzIGFueSBvdGhlciBtb2RhbHMgdGhhdCBhcmUgY3VycmVudGx5IG9wZW5cbiAgICAgICAqIEBldmVudCBSZXZlYWwjY2xvc2VtZVxuICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Nsb3NlbWUuemYucmV2ZWFsJywgdGhpcy5pZCk7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGFkZFJldmVhbE9wZW5DbGFzc2VzKCkge1xuICAgICAgaWYgKF90aGlzLmlzTW9iaWxlKSB7XG4gICAgICAgIGlmKCFfdGhpcy5vcmlnaW5hbFNjcm9sbFBvcykge1xuICAgICAgICAgIF90aGlzLm9yaWdpbmFsU2Nyb2xsUG9zID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgICQoJ2h0bWwsIGJvZHknKS5hZGRDbGFzcygnaXMtcmV2ZWFsLW9wZW4nKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ2lzLXJldmVhbC1vcGVuJyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE1vdGlvbiBVSSBtZXRob2Qgb2YgcmV2ZWFsXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRpb25Jbikge1xuICAgICAgZnVuY3Rpb24gYWZ0ZXJBbmltYXRpb24oKXtcbiAgICAgICAgX3RoaXMuJGVsZW1lbnRcbiAgICAgICAgICAuYXR0cih7XG4gICAgICAgICAgICAnYXJpYS1oaWRkZW4nOiBmYWxzZSxcbiAgICAgICAgICAgICd0YWJpbmRleCc6IC0xXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZm9jdXMoKTtcbiAgICAgICAgYWRkUmV2ZWFsT3BlbkNsYXNzZXMoKTtcbiAgICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC50cmFwRm9jdXMoX3RoaXMuJGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICAgIEZvdW5kYXRpb24uTW90aW9uLmFuaW1hdGVJbih0aGlzLiRvdmVybGF5LCAnZmFkZS1pbicpO1xuICAgICAgfVxuICAgICAgRm91bmRhdGlvbi5Nb3Rpb24uYW5pbWF0ZUluKHRoaXMuJGVsZW1lbnQsIHRoaXMub3B0aW9ucy5hbmltYXRpb25JbiwgKCkgPT4ge1xuICAgICAgICBpZih0aGlzLiRlbGVtZW50KSB7IC8vIHByb3RlY3QgYWdhaW5zdCBvYmplY3QgaGF2aW5nIGJlZW4gcmVtb3ZlZFxuICAgICAgICAgIHRoaXMuZm9jdXNhYmxlRWxlbWVudHMgPSBGb3VuZGF0aW9uLktleWJvYXJkLmZpbmRGb2N1c2FibGUodGhpcy4kZWxlbWVudCk7XG4gICAgICAgICAgYWZ0ZXJBbmltYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGpRdWVyeSBtZXRob2Qgb2YgcmV2ZWFsXG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm92ZXJsYXkpIHtcbiAgICAgICAgdGhpcy4kb3ZlcmxheS5zaG93KDApO1xuICAgICAgfVxuICAgICAgdGhpcy4kZWxlbWVudC5zaG93KHRoaXMub3B0aW9ucy5zaG93RGVsYXkpO1xuICAgIH1cblxuICAgIC8vIGhhbmRsZSBhY2Nlc3NpYmlsaXR5XG4gICAgdGhpcy4kZWxlbWVudFxuICAgICAgLmF0dHIoe1xuICAgICAgICAnYXJpYS1oaWRkZW4nOiBmYWxzZSxcbiAgICAgICAgJ3RhYmluZGV4JzogLTFcbiAgICAgIH0pXG4gICAgICAuZm9jdXMoKTtcbiAgICBGb3VuZGF0aW9uLktleWJvYXJkLnRyYXBGb2N1cyh0aGlzLiRlbGVtZW50KTtcblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIG1vZGFsIGhhcyBzdWNjZXNzZnVsbHkgb3BlbmVkLlxuICAgICAqIEBldmVudCBSZXZlYWwjb3BlblxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignb3Blbi56Zi5yZXZlYWwnKTtcblxuICAgIGFkZFJldmVhbE9wZW5DbGFzc2VzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2V4dHJhSGFuZGxlcnMoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV4dHJhIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgYm9keSBhbmQgd2luZG93IGlmIG5lY2Vzc2FyeS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9leHRyYUhhbmRsZXJzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgaWYoIXRoaXMuJGVsZW1lbnQpIHsgcmV0dXJuOyB9IC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgY2xlYW51cCwgZG9uJ3QgZnJlYWsgb3V0XG4gICAgdGhpcy5mb2N1c2FibGVFbGVtZW50cyA9IEZvdW5kYXRpb24uS2V5Ym9hcmQuZmluZEZvY3VzYWJsZSh0aGlzLiRlbGVtZW50KTtcblxuICAgIGlmICghdGhpcy5vcHRpb25zLm92ZXJsYXkgJiYgdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayAmJiAhdGhpcy5vcHRpb25zLmZ1bGxTY3JlZW4pIHtcbiAgICAgICQoJ2JvZHknKS5vbignY2xpY2suemYucmV2ZWFsJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoZS50YXJnZXQgPT09IF90aGlzLiRlbGVtZW50WzBdIHx8XG4gICAgICAgICAgJC5jb250YWlucyhfdGhpcy4kZWxlbWVudFswXSwgZS50YXJnZXQpIHx8XG4gICAgICAgICAgICAhJC5jb250YWlucyhkb2N1bWVudCwgZS50YXJnZXQpKSB7IHJldHVybjsgfVxuICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uRXNjKSB7XG4gICAgICAkKHdpbmRvdykub24oJ2tleWRvd24uemYucmV2ZWFsJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnUmV2ZWFsJywge1xuICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmNsb3NlT25Fc2MpIHtcbiAgICAgICAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgX3RoaXMuJGFuY2hvci5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBsb2NrIGZvY3VzIHdpdGhpbiBtb2RhbCB3aGlsZSB0YWJiaW5nXG4gICAgdGhpcy4kZWxlbWVudC5vbigna2V5ZG93bi56Zi5yZXZlYWwnLCBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgJHRhcmdldCA9ICQodGhpcyk7XG4gICAgICAvLyBoYW5kbGUga2V5Ym9hcmQgZXZlbnQgd2l0aCBrZXlib2FyZCB1dGlsXG4gICAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnUmV2ZWFsJywge1xuICAgICAgICBvcGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuJGVsZW1lbnQuZmluZCgnOmZvY3VzJykuaXMoX3RoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtY2xvc2VdJykpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyAvLyBzZXQgZm9jdXMgYmFjayB0byBhbmNob3IgaWYgY2xvc2UgYnV0dG9uIGhhcyBiZWVuIGFjdGl2YXRlZFxuICAgICAgICAgICAgICBfdGhpcy4kYW5jaG9yLmZvY3VzKCk7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCR0YXJnZXQuaXMoX3RoaXMuZm9jdXNhYmxlRWxlbWVudHMpKSB7IC8vIGRvbnQndCB0cmlnZ2VyIGlmIGFjdWFsIGVsZW1lbnQgaGFzIGZvY3VzIChpLmUuIGlucHV0cywgbGlua3MsIC4uLilcbiAgICAgICAgICAgIF90aGlzLm9wZW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5jbG9zZU9uRXNjKSB7XG4gICAgICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgX3RoaXMuJGFuY2hvci5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24ocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICBpZiAocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgbW9kYWwuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgUmV2ZWFsI2Nsb3NlZFxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYgKCF0aGlzLmlzQWN0aXZlIHx8ICF0aGlzLiRlbGVtZW50LmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvLyBNb3Rpb24gVUkgbWV0aG9kIG9mIGhpZGluZ1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uT3V0KSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm92ZXJsYXkpIHtcbiAgICAgICAgRm91bmRhdGlvbi5Nb3Rpb24uYW5pbWF0ZU91dCh0aGlzLiRvdmVybGF5LCAnZmFkZS1vdXQnLCBmaW5pc2hVcCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZmluaXNoVXAoKTtcbiAgICAgIH1cblxuICAgICAgRm91bmRhdGlvbi5Nb3Rpb24uYW5pbWF0ZU91dCh0aGlzLiRlbGVtZW50LCB0aGlzLm9wdGlvbnMuYW5pbWF0aW9uT3V0KTtcbiAgICB9XG4gICAgLy8galF1ZXJ5IG1ldGhvZCBvZiBoaWRpbmdcbiAgICBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMub3ZlcmxheSkge1xuICAgICAgICB0aGlzLiRvdmVybGF5LmhpZGUoMCwgZmluaXNoVXApO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGZpbmlzaFVwKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJGVsZW1lbnQuaGlkZSh0aGlzLm9wdGlvbnMuaGlkZURlbGF5KTtcbiAgICB9XG5cbiAgICAvLyBDb25kaXRpb25hbHMgdG8gcmVtb3ZlIGV4dHJhIGV2ZW50IGxpc3RlbmVycyBhZGRlZCBvbiBvcGVuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uRXNjKSB7XG4gICAgICAkKHdpbmRvdykub2ZmKCdrZXlkb3duLnpmLnJldmVhbCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRpb25zLm92ZXJsYXkgJiYgdGhpcy5vcHRpb25zLmNsb3NlT25DbGljaykge1xuICAgICAgJCgnYm9keScpLm9mZignY2xpY2suemYucmV2ZWFsJyk7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJ2tleWRvd24uemYucmV2ZWFsJyk7XG5cbiAgICBmdW5jdGlvbiBmaW5pc2hVcCgpIHtcbiAgICAgIGlmIChfdGhpcy5pc01vYmlsZSkge1xuICAgICAgICAkKCdodG1sLCBib2R5JykucmVtb3ZlQ2xhc3MoJ2lzLXJldmVhbC1vcGVuJyk7XG4gICAgICAgIGlmKF90aGlzLm9yaWdpbmFsU2Nyb2xsUG9zKSB7XG4gICAgICAgICAgJCgnYm9keScpLnNjcm9sbFRvcChfdGhpcy5vcmlnaW5hbFNjcm9sbFBvcyk7XG4gICAgICAgICAgX3RoaXMub3JpZ2luYWxTY3JvbGxQb3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdpcy1yZXZlYWwtb3BlbicpO1xuICAgICAgfVxuXG5cbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVsZWFzZUZvY3VzKF90aGlzLiRlbGVtZW50KTtcblxuICAgICAgX3RoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCB0cnVlKTtcblxuICAgICAgLyoqXG4gICAgICAqIEZpcmVzIHdoZW4gdGhlIG1vZGFsIGlzIGRvbmUgY2xvc2luZy5cbiAgICAgICogQGV2ZW50IFJldmVhbCNjbG9zZWRcbiAgICAgICovXG4gICAgICBfdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjbG9zZWQuemYucmV2ZWFsJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBSZXNldHMgdGhlIG1vZGFsIGNvbnRlbnRcbiAgICAqIFRoaXMgcHJldmVudHMgYSBydW5uaW5nIHZpZGVvIHRvIGtlZXAgZ29pbmcgaW4gdGhlIGJhY2tncm91bmRcbiAgICAqL1xuICAgIGlmICh0aGlzLm9wdGlvbnMucmVzZXRPbkNsb3NlKSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lmh0bWwodGhpcy4kZWxlbWVudC5odG1sKCkpO1xuICAgIH1cblxuICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgaWYgKF90aGlzLm9wdGlvbnMuZGVlcExpbmspIHtcbiAgICAgICBpZiAod2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoJycsIGRvY3VtZW50LnRpdGxlLCB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKGAjJHt0aGlzLmlkfWAsICcnKSk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJyc7XG4gICAgICAgfVxuICAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgb3Blbi9jbG9zZWQgc3RhdGUgb2YgYSBtb2RhbC5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBEZXN0cm95cyBhbiBpbnN0YW5jZSBvZiBhIG1vZGFsLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmFwcGVuZFRvKCQodGhpcy5vcHRpb25zLmFwcGVuZFRvKSk7IC8vIG1vdmUgJGVsZW1lbnQgb3V0c2lkZSBvZiAkb3ZlcmxheSB0byBwcmV2ZW50IGVycm9yIHVucmVnaXN0ZXJQbHVnaW4oKVxuICAgICAgdGhpcy4kb3ZlcmxheS5oaWRlKCkub2ZmKCkucmVtb3ZlKCk7XG4gICAgfVxuICAgIHRoaXMuJGVsZW1lbnQuaGlkZSgpLm9mZigpO1xuICAgIHRoaXMuJGFuY2hvci5vZmYoJy56ZicpO1xuICAgICQod2luZG93KS5vZmYoYC56Zi5yZXZlYWw6JHt0aGlzLmlkfWApO1xuXG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9O1xufVxuXG5SZXZlYWwuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBNb3Rpb24tVUkgY2xhc3MgdG8gdXNlIGZvciBhbmltYXRlZCBlbGVtZW50cy4gSWYgbm9uZSB1c2VkLCBkZWZhdWx0cyB0byBzaW1wbGUgc2hvdy9oaWRlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdzbGlkZS1pbi1sZWZ0J1xuICAgKi9cbiAgYW5pbWF0aW9uSW46ICcnLFxuICAvKipcbiAgICogTW90aW9uLVVJIGNsYXNzIHRvIHVzZSBmb3IgYW5pbWF0ZWQgZWxlbWVudHMuIElmIG5vbmUgdXNlZCwgZGVmYXVsdHMgdG8gc2ltcGxlIHNob3cvaGlkZS5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnc2xpZGUtb3V0LXJpZ2h0J1xuICAgKi9cbiAgYW5pbWF0aW9uT3V0OiAnJyxcbiAgLyoqXG4gICAqIFRpbWUsIGluIG1zLCB0byBkZWxheSB0aGUgb3BlbmluZyBvZiBhIG1vZGFsIGFmdGVyIGEgY2xpY2sgaWYgbm8gYW5pbWF0aW9uIHVzZWQuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMTBcbiAgICovXG4gIHNob3dEZWxheTogMCxcbiAgLyoqXG4gICAqIFRpbWUsIGluIG1zLCB0byBkZWxheSB0aGUgY2xvc2luZyBvZiBhIG1vZGFsIGFmdGVyIGEgY2xpY2sgaWYgbm8gYW5pbWF0aW9uIHVzZWQuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMTBcbiAgICovXG4gIGhpZGVEZWxheTogMCxcbiAgLyoqXG4gICAqIEFsbG93cyBhIGNsaWNrIG9uIHRoZSBib2R5L292ZXJsYXkgdG8gY2xvc2UgdGhlIG1vZGFsLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGNsb3NlT25DbGljazogdHJ1ZSxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgbW9kYWwgdG8gY2xvc2UgaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUgYEVTQ0FQRWAga2V5LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIGNsb3NlT25Fc2M6IHRydWUsXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBhbGxvd3MgbXVsdGlwbGUgbW9kYWxzIHRvIGJlIGRpc3BsYXllZCBhdCBvbmNlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBtdWx0aXBsZU9wZW5lZDogZmFsc2UsXG4gIC8qKlxuICAgKiBEaXN0YW5jZSwgaW4gcGl4ZWxzLCB0aGUgbW9kYWwgc2hvdWxkIHB1c2ggZG93biBmcm9tIHRoZSB0b3Agb2YgdGhlIHNjcmVlbi5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBhdXRvXG4gICAqL1xuICB2T2Zmc2V0OiAnYXV0bycsXG4gIC8qKlxuICAgKiBEaXN0YW5jZSwgaW4gcGl4ZWxzLCB0aGUgbW9kYWwgc2hvdWxkIHB1c2ggaW4gZnJvbSB0aGUgc2lkZSBvZiB0aGUgc2NyZWVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGF1dG9cbiAgICovXG4gIGhPZmZzZXQ6ICdhdXRvJyxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgbW9kYWwgdG8gYmUgZnVsbHNjcmVlbiwgY29tcGxldGVseSBibG9ja2luZyBvdXQgdGhlIHJlc3Qgb2YgdGhlIHZpZXcuIEpTIGNoZWNrcyBmb3IgdGhpcyBhcyB3ZWxsLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBmdWxsU2NyZWVuOiBmYWxzZSxcbiAgLyoqXG4gICAqIFBlcmNlbnRhZ2Ugb2Ygc2NyZWVuIGhlaWdodCB0aGUgbW9kYWwgc2hvdWxkIHB1c2ggdXAgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSB2aWV3LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDEwXG4gICAqL1xuICBidG1PZmZzZXRQY3Q6IDEwLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSBtb2RhbCB0byBnZW5lcmF0ZSBhbiBvdmVybGF5IGRpdiwgd2hpY2ggd2lsbCBjb3ZlciB0aGUgdmlldyB3aGVuIG1vZGFsIG9wZW5zLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIG92ZXJsYXk6IHRydWUsXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIG1vZGFsIHRvIHJlbW92ZSBhbmQgcmVpbmplY3QgbWFya3VwIG9uIGNsb3NlLiBTaG91bGQgYmUgdHJ1ZSBpZiB1c2luZyB2aWRlbyBlbGVtZW50cyB3L28gdXNpbmcgcHJvdmlkZXIncyBhcGksIG90aGVyd2lzZSwgdmlkZW9zIHdpbGwgY29udGludWUgdG8gcGxheSBpbiB0aGUgYmFja2dyb3VuZC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgcmVzZXRPbkNsb3NlOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgbW9kYWwgdG8gYWx0ZXIgdGhlIHVybCBvbiBvcGVuL2Nsb3NlLCBhbmQgYWxsb3dzIHRoZSB1c2Ugb2YgdGhlIGBiYWNrYCBidXR0b24gdG8gY2xvc2UgbW9kYWxzLiBBTFNPLCBhbGxvd3MgYSBtb2RhbCB0byBhdXRvLW1hbmlhY2FsbHkgb3BlbiBvbiBwYWdlIGxvYWQgSUYgdGhlIGhhc2ggPT09IHRoZSBtb2RhbCdzIHVzZXItc2V0IGlkLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBkZWVwTGluazogZmFsc2UsXG4gICAgLyoqXG4gICAqIEFsbG93cyB0aGUgbW9kYWwgdG8gYXBwZW5kIHRvIGN1c3RvbSBkaXYuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIGFwcGVuZFRvOiBcImJvZHlcIlxuXG59O1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oUmV2ZWFsLCAnUmV2ZWFsJyk7XG5cbmZ1bmN0aW9uIGlQaG9uZVNuaWZmKCkge1xuICByZXR1cm4gL2lQKGFkfGhvbmV8b2QpLipPUy8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG59XG5cbmZ1bmN0aW9uIGFuZHJvaWRTbmlmZigpIHtcbiAgcmV0dXJuIC9BbmRyb2lkLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbn1cblxuZnVuY3Rpb24gbW9iaWxlU25pZmYoKSB7XG4gIHJldHVybiBpUGhvbmVTbmlmZigpIHx8IGFuZHJvaWRTbmlmZigpO1xufVxuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogU2xpZGVyIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5zbGlkZXJcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubW90aW9uXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRyaWdnZXJzXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmtleWJvYXJkXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRvdWNoXG4gKi9cblxuY2xhc3MgU2xpZGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSBzbGlkZXIgY29udHJvbC5cbiAgICogQGNsYXNzXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYSBzbGlkZXIgY29udHJvbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBTbGlkZXIuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ1NsaWRlcicpO1xuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ1NsaWRlcicsIHtcbiAgICAgICdsdHInOiB7XG4gICAgICAgICdBUlJPV19SSUdIVCc6ICdpbmNyZWFzZScsXG4gICAgICAgICdBUlJPV19VUCc6ICdpbmNyZWFzZScsXG4gICAgICAgICdBUlJPV19ET1dOJzogJ2RlY3JlYXNlJyxcbiAgICAgICAgJ0FSUk9XX0xFRlQnOiAnZGVjcmVhc2UnLFxuICAgICAgICAnU0hJRlRfQVJST1dfUklHSFQnOiAnaW5jcmVhc2VfZmFzdCcsXG4gICAgICAgICdTSElGVF9BUlJPV19VUCc6ICdpbmNyZWFzZV9mYXN0JyxcbiAgICAgICAgJ1NISUZUX0FSUk9XX0RPV04nOiAnZGVjcmVhc2VfZmFzdCcsXG4gICAgICAgICdTSElGVF9BUlJPV19MRUZUJzogJ2RlY3JlYXNlX2Zhc3QnXG4gICAgICB9LFxuICAgICAgJ3J0bCc6IHtcbiAgICAgICAgJ0FSUk9XX0xFRlQnOiAnaW5jcmVhc2UnLFxuICAgICAgICAnQVJST1dfUklHSFQnOiAnZGVjcmVhc2UnLFxuICAgICAgICAnU0hJRlRfQVJST1dfTEVGVCc6ICdpbmNyZWFzZV9mYXN0JyxcbiAgICAgICAgJ1NISUZUX0FSUk9XX1JJR0hUJzogJ2RlY3JlYXNlX2Zhc3QnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlsaXplcyB0aGUgcGx1Z2luIGJ5IHJlYWRpbmcvc2V0dGluZyBhdHRyaWJ1dGVzLCBjcmVhdGluZyBjb2xsZWN0aW9ucyBhbmQgc2V0dGluZyB0aGUgaW5pdGlhbCBwb3NpdGlvbiBvZiB0aGUgaGFuZGxlKHMpLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHRoaXMuaW5wdXRzID0gdGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dCcpO1xuICAgIHRoaXMuaGFuZGxlcyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtc2xpZGVyLWhhbmRsZV0nKTtcblxuICAgIHRoaXMuJGhhbmRsZSA9IHRoaXMuaGFuZGxlcy5lcSgwKTtcbiAgICB0aGlzLiRpbnB1dCA9IHRoaXMuaW5wdXRzLmxlbmd0aCA/IHRoaXMuaW5wdXRzLmVxKDApIDogJChgIyR7dGhpcy4kaGFuZGxlLmF0dHIoJ2FyaWEtY29udHJvbHMnKX1gKTtcbiAgICB0aGlzLiRmaWxsID0gdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1zbGlkZXItZmlsbF0nKS5jc3ModGhpcy5vcHRpb25zLnZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnLCAwKTtcblxuICAgIHZhciBpc0RibCA9IGZhbHNlLFxuICAgICAgICBfdGhpcyA9IHRoaXM7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlZCB8fCB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKHRoaXMub3B0aW9ucy5kaXNhYmxlZENsYXNzKSkge1xuICAgICAgdGhpcy5vcHRpb25zLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmRpc2FibGVkQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaW5wdXRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5pbnB1dHMgPSAkKCkuYWRkKHRoaXMuJGlucHV0KTtcbiAgICAgIHRoaXMub3B0aW9ucy5iaW5kaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRJbml0QXR0cigwKTtcblxuICAgIGlmICh0aGlzLmhhbmRsZXNbMV0pIHtcbiAgICAgIHRoaXMub3B0aW9ucy5kb3VibGVTaWRlZCA9IHRydWU7XG4gICAgICB0aGlzLiRoYW5kbGUyID0gdGhpcy5oYW5kbGVzLmVxKDEpO1xuICAgICAgdGhpcy4kaW5wdXQyID0gdGhpcy5pbnB1dHMubGVuZ3RoID4gMSA/IHRoaXMuaW5wdXRzLmVxKDEpIDogJChgIyR7dGhpcy4kaGFuZGxlMi5hdHRyKCdhcmlhLWNvbnRyb2xzJyl9YCk7XG5cbiAgICAgIGlmICghdGhpcy5pbnB1dHNbMV0pIHtcbiAgICAgICAgdGhpcy5pbnB1dHMgPSB0aGlzLmlucHV0cy5hZGQodGhpcy4kaW5wdXQyKTtcbiAgICAgIH1cbiAgICAgIGlzRGJsID0gdHJ1ZTtcblxuICAgICAgLy8gdGhpcy4kaGFuZGxlLnRyaWdnZXJIYW5kbGVyKCdjbGljay56Zi5zbGlkZXInKTtcbiAgICAgIHRoaXMuX3NldEluaXRBdHRyKDEpO1xuICAgIH1cblxuICAgIC8vIFNldCBoYW5kbGUgcG9zaXRpb25zXG4gICAgdGhpcy5zZXRIYW5kbGVzKCk7XG5cbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfVxuXG4gIHNldEhhbmRsZXMoKSB7XG4gICAgaWYodGhpcy5oYW5kbGVzWzFdKSB7XG4gICAgICB0aGlzLl9zZXRIYW5kbGVQb3ModGhpcy4kaGFuZGxlLCB0aGlzLmlucHV0cy5lcSgwKS52YWwoKSwgdHJ1ZSwgKCkgPT4ge1xuICAgICAgICB0aGlzLl9zZXRIYW5kbGVQb3ModGhpcy4kaGFuZGxlMiwgdGhpcy5pbnB1dHMuZXEoMSkudmFsKCksIHRydWUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NldEhhbmRsZVBvcyh0aGlzLiRoYW5kbGUsIHRoaXMuaW5wdXRzLmVxKDApLnZhbCgpLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBfcmVmbG93KCkge1xuICAgIHRoaXMuc2V0SGFuZGxlcygpO1xuICB9XG4gIC8qKlxuICAqIEBmdW5jdGlvblxuICAqIEBwcml2YXRlXG4gICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIC0gZmxvYXRpbmcgcG9pbnQgKHRoZSB2YWx1ZSkgdG8gYmUgdHJhbnNmb3JtZWQgdXNpbmcgdG8gYSByZWxhdGl2ZSBwb3NpdGlvbiBvbiB0aGUgc2xpZGVyICh0aGUgaW52ZXJzZSBvZiBfdmFsdWUpXG4gICovXG4gIF9wY3RPZkJhcih2YWx1ZSkge1xuICAgIHZhciBwY3RPZkJhciA9IHBlcmNlbnQodmFsdWUgLSB0aGlzLm9wdGlvbnMuc3RhcnQsIHRoaXMub3B0aW9ucy5lbmQgLSB0aGlzLm9wdGlvbnMuc3RhcnQpXG5cbiAgICBzd2l0Y2godGhpcy5vcHRpb25zLnBvc2l0aW9uVmFsdWVGdW5jdGlvbikge1xuICAgIGNhc2UgXCJwb3dcIjpcbiAgICAgIHBjdE9mQmFyID0gdGhpcy5fbG9nVHJhbnNmb3JtKHBjdE9mQmFyKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJsb2dcIjpcbiAgICAgIHBjdE9mQmFyID0gdGhpcy5fcG93VHJhbnNmb3JtKHBjdE9mQmFyKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBwY3RPZkJhci50b0ZpeGVkKDIpXG4gIH1cblxuICAvKipcbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqIEBwYXJhbSB7TnVtYmVyfSBwY3RPZkJhciAtIGZsb2F0aW5nIHBvaW50LCB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIHNsaWRlciAodHlwaWNhbGx5IGJldHdlZW4gMC0xKSB0byBiZSB0cmFuc2Zvcm1lZCB0byBhIHZhbHVlXG4gICovXG4gIF92YWx1ZShwY3RPZkJhcikge1xuICAgIHN3aXRjaCh0aGlzLm9wdGlvbnMucG9zaXRpb25WYWx1ZUZ1bmN0aW9uKSB7XG4gICAgY2FzZSBcInBvd1wiOlxuICAgICAgcGN0T2ZCYXIgPSB0aGlzLl9wb3dUcmFuc2Zvcm0ocGN0T2ZCYXIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImxvZ1wiOlxuICAgICAgcGN0T2ZCYXIgPSB0aGlzLl9sb2dUcmFuc2Zvcm0ocGN0T2ZCYXIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9ICh0aGlzLm9wdGlvbnMuZW5kIC0gdGhpcy5vcHRpb25zLnN0YXJ0KSAqIHBjdE9mQmFyICsgdGhpcy5vcHRpb25zLnN0YXJ0O1xuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvKipcbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSAtIGZsb2F0aW5nIHBvaW50ICh0eXBpY2FsbHkgYmV0d2VlbiAwLTEpIHRvIGJlIHRyYW5zZm9ybWVkIHVzaW5nIHRoZSBsb2cgZnVuY3Rpb25cbiAgKi9cbiAgX2xvZ1RyYW5zZm9ybSh2YWx1ZSkge1xuICAgIHJldHVybiBiYXNlTG9nKHRoaXMub3B0aW9ucy5ub25MaW5lYXJCYXNlLCAoKHZhbHVlKih0aGlzLm9wdGlvbnMubm9uTGluZWFyQmFzZS0xKSkrMSkpXG4gIH1cblxuICAvKipcbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSAtIGZsb2F0aW5nIHBvaW50ICh0eXBpY2FsbHkgYmV0d2VlbiAwLTEpIHRvIGJlIHRyYW5zZm9ybWVkIHVzaW5nIHRoZSBwb3dlciBmdW5jdGlvblxuICAqL1xuICBfcG93VHJhbnNmb3JtKHZhbHVlKSB7XG4gICAgcmV0dXJuIChNYXRoLnBvdyh0aGlzLm9wdGlvbnMubm9uTGluZWFyQmFzZSwgdmFsdWUpIC0gMSkgLyAodGhpcy5vcHRpb25zLm5vbkxpbmVhckJhc2UgLSAxKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBzZWxlY3RlZCBoYW5kbGUgYW5kIGZpbGwgYmFyLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRobmRsIC0gdGhlIHNlbGVjdGVkIGhhbmRsZSB0byBtb3ZlLlxuICAgKiBAcGFyYW0ge051bWJlcn0gbG9jYXRpb24gLSBmbG9hdGluZyBwb2ludCBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIHZhbHVlcyBvZiB0aGUgc2xpZGVyIGJhci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBjYWxsYmFjayBmdW5jdGlvbiB0byBmaXJlIG9uIGNvbXBsZXRpb24uXG4gICAqIEBmaXJlcyBTbGlkZXIjbW92ZWRcbiAgICogQGZpcmVzIFNsaWRlciNjaGFuZ2VkXG4gICAqL1xuICBfc2V0SGFuZGxlUG9zKCRobmRsLCBsb2NhdGlvbiwgbm9JbnZlcnQsIGNiKSB7XG4gICAgLy8gZG9uJ3QgbW92ZSBpZiB0aGUgc2xpZGVyIGhhcyBiZWVuIGRpc2FibGVkIHNpbmNlIGl0cyBpbml0aWFsaXphdGlvblxuICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKHRoaXMub3B0aW9ucy5kaXNhYmxlZENsYXNzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvL21pZ2h0IG5lZWQgdG8gYWx0ZXIgdGhhdCBzbGlnaHRseSBmb3IgYmFycyB0aGF0IHdpbGwgaGF2ZSBvZGQgbnVtYmVyIHNlbGVjdGlvbnMuXG4gICAgbG9jYXRpb24gPSBwYXJzZUZsb2F0KGxvY2F0aW9uKTsvL29uIGlucHV0IGNoYW5nZSBldmVudHMsIGNvbnZlcnQgc3RyaW5nIHRvIG51bWJlci4uLmdydW1ibGUuXG5cbiAgICAvLyBwcmV2ZW50IHNsaWRlciBmcm9tIHJ1bm5pbmcgb3V0IG9mIGJvdW5kcywgaWYgdmFsdWUgZXhjZWVkcyB0aGUgbGltaXRzIHNldCB0aHJvdWdoIG9wdGlvbnMsIG92ZXJyaWRlIHRoZSB2YWx1ZSB0byBtaW4vbWF4XG4gICAgaWYgKGxvY2F0aW9uIDwgdGhpcy5vcHRpb25zLnN0YXJ0KSB7IGxvY2F0aW9uID0gdGhpcy5vcHRpb25zLnN0YXJ0OyB9XG4gICAgZWxzZSBpZiAobG9jYXRpb24gPiB0aGlzLm9wdGlvbnMuZW5kKSB7IGxvY2F0aW9uID0gdGhpcy5vcHRpb25zLmVuZDsgfVxuXG4gICAgdmFyIGlzRGJsID0gdGhpcy5vcHRpb25zLmRvdWJsZVNpZGVkO1xuXG4gICAgaWYgKGlzRGJsKSB7IC8vdGhpcyBibG9jayBpcyB0byBwcmV2ZW50IDIgaGFuZGxlcyBmcm9tIGNyb3NzaW5nIGVhY2hvdGhlci4gQ291bGQvc2hvdWxkIGJlIGltcHJvdmVkLlxuICAgICAgaWYgKHRoaXMuaGFuZGxlcy5pbmRleCgkaG5kbCkgPT09IDApIHtcbiAgICAgICAgdmFyIGgyVmFsID0gcGFyc2VGbG9hdCh0aGlzLiRoYW5kbGUyLmF0dHIoJ2FyaWEtdmFsdWVub3cnKSk7XG4gICAgICAgIGxvY2F0aW9uID0gbG9jYXRpb24gPj0gaDJWYWwgPyBoMlZhbCAtIHRoaXMub3B0aW9ucy5zdGVwIDogbG9jYXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaDFWYWwgPSBwYXJzZUZsb2F0KHRoaXMuJGhhbmRsZS5hdHRyKCdhcmlhLXZhbHVlbm93JykpO1xuICAgICAgICBsb2NhdGlvbiA9IGxvY2F0aW9uIDw9IGgxVmFsID8gaDFWYWwgKyB0aGlzLm9wdGlvbnMuc3RlcCA6IGxvY2F0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vdGhpcyBpcyBmb3Igc2luZ2xlLWhhbmRsZWQgdmVydGljYWwgc2xpZGVycywgaXQgYWRqdXN0cyB0aGUgdmFsdWUgdG8gYWNjb3VudCBmb3IgdGhlIHNsaWRlciBiZWluZyBcInVwc2lkZS1kb3duXCJcbiAgICAvL2ZvciBjbGljayBhbmQgZHJhZyBldmVudHMsIGl0J3Mgd2VpcmQgZHVlIHRvIHRoZSBzY2FsZSgtMSwgMSkgY3NzIHByb3BlcnR5XG4gICAgaWYgKHRoaXMub3B0aW9ucy52ZXJ0aWNhbCAmJiAhbm9JbnZlcnQpIHtcbiAgICAgIGxvY2F0aW9uID0gdGhpcy5vcHRpb25zLmVuZCAtIGxvY2F0aW9uO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgIHZlcnQgPSB0aGlzLm9wdGlvbnMudmVydGljYWwsXG4gICAgICAgIGhPclcgPSB2ZXJ0ID8gJ2hlaWdodCcgOiAnd2lkdGgnLFxuICAgICAgICBsT3JUID0gdmVydCA/ICd0b3AnIDogJ2xlZnQnLFxuICAgICAgICBoYW5kbGVEaW0gPSAkaG5kbFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtoT3JXXSxcbiAgICAgICAgZWxlbURpbSA9IHRoaXMuJGVsZW1lbnRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbaE9yV10sXG4gICAgICAgIC8vcGVyY2VudGFnZSBvZiBiYXIgbWluL21heCB2YWx1ZSBiYXNlZCBvbiBjbGljayBvciBkcmFnIHBvaW50XG4gICAgICAgIHBjdE9mQmFyID0gdGhpcy5fcGN0T2ZCYXIobG9jYXRpb24pLFxuICAgICAgICAvL251bWJlciBvZiBhY3R1YWwgcGl4ZWxzIHRvIHNoaWZ0IHRoZSBoYW5kbGUsIGJhc2VkIG9uIHRoZSBwZXJjZW50YWdlIG9idGFpbmVkIGFib3ZlXG4gICAgICAgIHB4VG9Nb3ZlID0gKGVsZW1EaW0gLSBoYW5kbGVEaW0pICogcGN0T2ZCYXIsXG4gICAgICAgIC8vcGVyY2VudGFnZSBvZiBiYXIgdG8gc2hpZnQgdGhlIGhhbmRsZVxuICAgICAgICBtb3ZlbWVudCA9IChwZXJjZW50KHB4VG9Nb3ZlLCBlbGVtRGltKSAqIDEwMCkudG9GaXhlZCh0aGlzLm9wdGlvbnMuZGVjaW1hbCk7XG4gICAgICAgIC8vZml4aW5nIHRoZSBkZWNpbWFsIHZhbHVlIGZvciB0aGUgbG9jYXRpb24gbnVtYmVyLCBpcyBwYXNzZWQgdG8gb3RoZXIgbWV0aG9kcyBhcyBhIGZpeGVkIGZsb2F0aW5nLXBvaW50IHZhbHVlXG4gICAgICAgIGxvY2F0aW9uID0gcGFyc2VGbG9hdChsb2NhdGlvbi50b0ZpeGVkKHRoaXMub3B0aW9ucy5kZWNpbWFsKSk7XG4gICAgICAgIC8vIGRlY2xhcmUgZW1wdHkgb2JqZWN0IGZvciBjc3MgYWRqdXN0bWVudHMsIG9ubHkgdXNlZCB3aXRoIDIgaGFuZGxlZC1zbGlkZXJzXG4gICAgdmFyIGNzcyA9IHt9O1xuXG4gICAgdGhpcy5fc2V0VmFsdWVzKCRobmRsLCBsb2NhdGlvbik7XG5cbiAgICAvLyBUT0RPIHVwZGF0ZSB0byBjYWxjdWxhdGUgYmFzZWQgb24gdmFsdWVzIHNldCB0byByZXNwZWN0aXZlIGlucHV0cz8/XG4gICAgaWYgKGlzRGJsKSB7XG4gICAgICB2YXIgaXNMZWZ0SG5kbCA9IHRoaXMuaGFuZGxlcy5pbmRleCgkaG5kbCkgPT09IDAsXG4gICAgICAgICAgLy9lbXB0eSB2YXJpYWJsZSwgd2lsbCBiZSB1c2VkIGZvciBtaW4taGVpZ2h0L3dpZHRoIGZvciBmaWxsIGJhclxuICAgICAgICAgIGRpbSxcbiAgICAgICAgICAvL3BlcmNlbnRhZ2Ugdy9oIG9mIHRoZSBoYW5kbGUgY29tcGFyZWQgdG8gdGhlIHNsaWRlciBiYXJcbiAgICAgICAgICBoYW5kbGVQY3QgPSAgfn4ocGVyY2VudChoYW5kbGVEaW0sIGVsZW1EaW0pICogMTAwKTtcbiAgICAgIC8vaWYgbGVmdCBoYW5kbGUsIHRoZSBtYXRoIGlzIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIGlmIGl0J3MgdGhlIHJpZ2h0IGhhbmRsZSwgYW5kIHRoZSBsZWZ0L3RvcCBwcm9wZXJ0eSBuZWVkcyB0byBiZSBjaGFuZ2VkIGZvciB0aGUgZmlsbCBiYXJcbiAgICAgIGlmIChpc0xlZnRIbmRsKSB7XG4gICAgICAgIC8vbGVmdCBvciB0b3AgcGVyY2VudGFnZSB2YWx1ZSB0byBhcHBseSB0byB0aGUgZmlsbCBiYXIuXG4gICAgICAgIGNzc1tsT3JUXSA9IGAke21vdmVtZW50fSVgO1xuICAgICAgICAvL2NhbGN1bGF0ZSB0aGUgbmV3IG1pbi1oZWlnaHQvd2lkdGggZm9yIHRoZSBmaWxsIGJhci5cbiAgICAgICAgZGltID0gcGFyc2VGbG9hdCh0aGlzLiRoYW5kbGUyWzBdLnN0eWxlW2xPclRdKSAtIG1vdmVtZW50ICsgaGFuZGxlUGN0O1xuICAgICAgICAvL3RoaXMgY2FsbGJhY2sgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgZXJyb3JzIGFuZCBhbGxvdyB0aGUgcHJvcGVyIHBsYWNlbWVudCBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYSAyLWhhbmRsZWQgc2xpZGVyXG4gICAgICAgIC8vcGx1cywgaXQgbWVhbnMgd2UgZG9uJ3QgY2FyZSBpZiAnZGltJyBpc05hTiBvbiBpbml0LCBpdCB3b24ndCBiZSBpbiB0aGUgZnV0dXJlLlxuICAgICAgICBpZiAoY2IgJiYgdHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7IGNiKCk7IH0vL3RoaXMgaXMgb25seSBuZWVkZWQgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiAyIGhhbmRsZWQgc2xpZGVyc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9qdXN0IGNhY2hpbmcgdGhlIHZhbHVlIG9mIHRoZSBsZWZ0L2JvdHRvbSBoYW5kbGUncyBsZWZ0L3RvcCBwcm9wZXJ0eVxuICAgICAgICB2YXIgaGFuZGxlUG9zID0gcGFyc2VGbG9hdCh0aGlzLiRoYW5kbGVbMF0uc3R5bGVbbE9yVF0pO1xuICAgICAgICAvL2NhbGN1bGF0ZSB0aGUgbmV3IG1pbi1oZWlnaHQvd2lkdGggZm9yIHRoZSBmaWxsIGJhci4gVXNlIGlzTmFOIHRvIHByZXZlbnQgZmFsc2UgcG9zaXRpdmVzIGZvciBudW1iZXJzIDw9IDBcbiAgICAgICAgLy9iYXNlZCBvbiB0aGUgcGVyY2VudGFnZSBvZiBtb3ZlbWVudCBvZiB0aGUgaGFuZGxlIGJlaW5nIG1hbmlwdWxhdGVkLCBsZXNzIHRoZSBvcHBvc2luZyBoYW5kbGUncyBsZWZ0L3RvcCBwb3NpdGlvbiwgcGx1cyB0aGUgcGVyY2VudGFnZSB3L2ggb2YgdGhlIGhhbmRsZSBpdHNlbGZcbiAgICAgICAgZGltID0gbW92ZW1lbnQgLSAoaXNOYU4oaGFuZGxlUG9zKSA/ICh0aGlzLm9wdGlvbnMuaW5pdGlhbFN0YXJ0IC0gdGhpcy5vcHRpb25zLnN0YXJ0KS8oKHRoaXMub3B0aW9ucy5lbmQtdGhpcy5vcHRpb25zLnN0YXJ0KS8xMDApIDogaGFuZGxlUG9zKSArIGhhbmRsZVBjdDtcbiAgICAgIH1cbiAgICAgIC8vIGFzc2lnbiB0aGUgbWluLWhlaWdodC93aWR0aCB0byBvdXIgY3NzIG9iamVjdFxuICAgICAgY3NzW2BtaW4tJHtoT3JXfWBdID0gYCR7ZGltfSVgO1xuICAgIH1cblxuICAgIHRoaXMuJGVsZW1lbnQub25lKCdmaW5pc2hlZC56Zi5hbmltYXRlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBoYW5kbGUgaXMgZG9uZSBtb3ZpbmcuXG4gICAgICAgICAgICAgICAgICAgICAqIEBldmVudCBTbGlkZXIjbW92ZWRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLiRlbGVtZW50LnRyaWdnZXIoJ21vdmVkLnpmLnNsaWRlcicsIFskaG5kbF0pO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgLy9iZWNhdXNlIHdlIGRvbid0IGtub3cgZXhhY3RseSBob3cgdGhlIGhhbmRsZSB3aWxsIGJlIG1vdmVkLCBjaGVjayB0aGUgYW1vdW50IG9mIHRpbWUgaXQgc2hvdWxkIHRha2UgdG8gbW92ZS5cbiAgICB2YXIgbW92ZVRpbWUgPSB0aGlzLiRlbGVtZW50LmRhdGEoJ2RyYWdnaW5nJykgPyAxMDAwLzYwIDogdGhpcy5vcHRpb25zLm1vdmVUaW1lO1xuXG4gICAgRm91bmRhdGlvbi5Nb3ZlKG1vdmVUaW1lLCAkaG5kbCwgZnVuY3Rpb24oKSB7XG4gICAgICAvLyBhZGp1c3RpbmcgdGhlIGxlZnQvdG9wIHByb3BlcnR5IG9mIHRoZSBoYW5kbGUsIGJhc2VkIG9uIHRoZSBwZXJjZW50YWdlIGNhbGN1bGF0ZWQgYWJvdmVcbiAgICAgIC8vIGlmIG1vdmVtZW50IGlzTmFOLCB0aGF0IGlzIGJlY2F1c2UgdGhlIHNsaWRlciBpcyBoaWRkZW4gYW5kIHdlIGNhbm5vdCBkZXRlcm1pbmUgaGFuZGxlIHdpZHRoLFxuICAgICAgLy8gZmFsbCBiYWNrIHRvIG5leHQgYmVzdCBndWVzcy5cbiAgICAgIGlmIChpc05hTihtb3ZlbWVudCkpIHtcbiAgICAgICAgJGhuZGwuY3NzKGxPclQsIGAke3BjdE9mQmFyICogMTAwfSVgKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAkaG5kbC5jc3MobE9yVCwgYCR7bW92ZW1lbnR9JWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV90aGlzLm9wdGlvbnMuZG91YmxlU2lkZWQpIHtcbiAgICAgICAgLy9pZiBzaW5nbGUtaGFuZGxlZCwgYSBzaW1wbGUgbWV0aG9kIHRvIGV4cGFuZCB0aGUgZmlsbCBiYXJcbiAgICAgICAgX3RoaXMuJGZpbGwuY3NzKGhPclcsIGAke3BjdE9mQmFyICogMTAwfSVgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vb3RoZXJ3aXNlLCB1c2UgdGhlIGNzcyBvYmplY3Qgd2UgY3JlYXRlZCBhYm92ZVxuICAgICAgICBfdGhpcy4kZmlsbC5jc3MoY3NzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgdmFsdWUgaGFzIG5vdCBiZWVuIGNoYW5nZSBmb3IgYSBnaXZlbiB0aW1lLlxuICAgICAqIEBldmVudCBTbGlkZXIjY2hhbmdlZFxuICAgICAqL1xuICAgIGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0KTtcbiAgICBfdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgX3RoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlZC56Zi5zbGlkZXInLCBbJGhuZGxdKTtcbiAgICB9LCBfdGhpcy5vcHRpb25zLmNoYW5nZWREZWxheSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaW5pdGlhbCBhdHRyaWJ1dGUgZm9yIHRoZSBzbGlkZXIgZWxlbWVudC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZHggLSBpbmRleCBvZiB0aGUgY3VycmVudCBoYW5kbGUvaW5wdXQgdG8gdXNlLlxuICAgKi9cbiAgX3NldEluaXRBdHRyKGlkeCkge1xuICAgIHZhciBpbml0VmFsID0gKGlkeCA9PT0gMCA/IHRoaXMub3B0aW9ucy5pbml0aWFsU3RhcnQgOiB0aGlzLm9wdGlvbnMuaW5pdGlhbEVuZClcbiAgICB2YXIgaWQgPSB0aGlzLmlucHV0cy5lcShpZHgpLmF0dHIoJ2lkJykgfHwgRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAnc2xpZGVyJyk7XG4gICAgdGhpcy5pbnB1dHMuZXEoaWR4KS5hdHRyKHtcbiAgICAgICdpZCc6IGlkLFxuICAgICAgJ21heCc6IHRoaXMub3B0aW9ucy5lbmQsXG4gICAgICAnbWluJzogdGhpcy5vcHRpb25zLnN0YXJ0LFxuICAgICAgJ3N0ZXAnOiB0aGlzLm9wdGlvbnMuc3RlcFxuICAgIH0pO1xuICAgIHRoaXMuaW5wdXRzLmVxKGlkeCkudmFsKGluaXRWYWwpO1xuICAgIHRoaXMuaGFuZGxlcy5lcShpZHgpLmF0dHIoe1xuICAgICAgJ3JvbGUnOiAnc2xpZGVyJyxcbiAgICAgICdhcmlhLWNvbnRyb2xzJzogaWQsXG4gICAgICAnYXJpYS12YWx1ZW1heCc6IHRoaXMub3B0aW9ucy5lbmQsXG4gICAgICAnYXJpYS12YWx1ZW1pbic6IHRoaXMub3B0aW9ucy5zdGFydCxcbiAgICAgICdhcmlhLXZhbHVlbm93JzogaW5pdFZhbCxcbiAgICAgICdhcmlhLW9yaWVudGF0aW9uJzogdGhpcy5vcHRpb25zLnZlcnRpY2FsID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJyxcbiAgICAgICd0YWJpbmRleCc6IDBcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbnB1dCBhbmQgYGFyaWEtdmFsdWVub3dgIHZhbHVlcyBmb3IgdGhlIHNsaWRlciBlbGVtZW50LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRoYW5kbGUgLSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGhhbmRsZS5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbCAtIGZsb2F0aW5nIHBvaW50IG9mIHRoZSBuZXcgdmFsdWUuXG4gICAqL1xuICBfc2V0VmFsdWVzKCRoYW5kbGUsIHZhbCkge1xuICAgIHZhciBpZHggPSB0aGlzLm9wdGlvbnMuZG91YmxlU2lkZWQgPyB0aGlzLmhhbmRsZXMuaW5kZXgoJGhhbmRsZSkgOiAwO1xuICAgIHRoaXMuaW5wdXRzLmVxKGlkeCkudmFsKHZhbCk7XG4gICAgJGhhbmRsZS5hdHRyKCdhcmlhLXZhbHVlbm93JywgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGV2ZW50cyBvbiB0aGUgc2xpZGVyIGVsZW1lbnQuXG4gICAqIENhbGN1bGF0ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBoYW5kbGUuXG4gICAqIElmIHRoZXJlIGFyZSB0d28gaGFuZGxlcyBhbmQgdGhlIGJhciB3YXMgY2xpY2tlZCwgaXQgZGV0ZXJtaW5lcyB3aGljaCBoYW5kbGUgdG8gbW92ZS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlIC0gdGhlIGBldmVudGAgb2JqZWN0IHBhc3NlZCBmcm9tIHRoZSBsaXN0ZW5lci5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICRoYW5kbGUgLSB0aGUgY3VycmVudCBoYW5kbGUgdG8gY2FsY3VsYXRlIGZvciwgaWYgc2VsZWN0ZWQuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWwgLSBmbG9hdGluZyBwb2ludCBudW1iZXIgZm9yIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNsaWRlci5cbiAgICogVE9ETyBjbGVhbiB0aGlzIHVwLCB0aGVyZSdzIGEgbG90IG9mIHJlcGVhdGVkIGNvZGUgYmV0d2VlbiB0aGlzIGFuZCB0aGUgX3NldEhhbmRsZVBvcyBmbi5cbiAgICovXG4gIF9oYW5kbGVFdmVudChlLCAkaGFuZGxlLCB2YWwpIHtcbiAgICB2YXIgdmFsdWUsIGhhc1ZhbDtcbiAgICBpZiAoIXZhbCkgey8vY2xpY2sgb3IgZHJhZyBldmVudHNcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgICAgdmVydGljYWwgPSB0aGlzLm9wdGlvbnMudmVydGljYWwsXG4gICAgICAgICAgcGFyYW0gPSB2ZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJyxcbiAgICAgICAgICBkaXJlY3Rpb24gPSB2ZXJ0aWNhbCA/ICd0b3AnIDogJ2xlZnQnLFxuICAgICAgICAgIGV2ZW50T2Zmc2V0ID0gdmVydGljYWwgPyBlLnBhZ2VZIDogZS5wYWdlWCxcbiAgICAgICAgICBoYWxmT2ZIYW5kbGUgPSB0aGlzLiRoYW5kbGVbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbcGFyYW1dIC8gMixcbiAgICAgICAgICBiYXJEaW0gPSB0aGlzLiRlbGVtZW50WzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3BhcmFtXSxcbiAgICAgICAgICB3aW5kb3dTY3JvbGwgPSB2ZXJ0aWNhbCA/ICQod2luZG93KS5zY3JvbGxUb3AoKSA6ICQod2luZG93KS5zY3JvbGxMZWZ0KCk7XG5cblxuICAgICAgdmFyIGVsZW1PZmZzZXQgPSB0aGlzLiRlbGVtZW50Lm9mZnNldCgpW2RpcmVjdGlvbl07XG5cbiAgICAgIC8vIHRvdWNoIGV2ZW50cyBlbXVsYXRlZCBieSB0aGUgdG91Y2ggdXRpbCBnaXZlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHNjcmVlbiwgYWRkIHdpbmRvdy5zY3JvbGwgdG8gZXZlbnQgY29vcmRpbmF0ZXMuLi5cbiAgICAgIC8vIGJlc3Qgd2F5IHRvIGd1ZXNzIHRoaXMgaXMgc2ltdWxhdGVkIGlzIGlmIGNsaWVudFkgPT0gcGFnZVlcbiAgICAgIGlmIChlLmNsaWVudFkgPT09IGUucGFnZVkpIHsgZXZlbnRPZmZzZXQgPSBldmVudE9mZnNldCArIHdpbmRvd1Njcm9sbDsgfVxuICAgICAgdmFyIGV2ZW50RnJvbUJhciA9IGV2ZW50T2Zmc2V0IC0gZWxlbU9mZnNldDtcbiAgICAgIHZhciBiYXJYWTtcbiAgICAgIGlmIChldmVudEZyb21CYXIgPCAwKSB7XG4gICAgICAgIGJhclhZID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnRGcm9tQmFyID4gYmFyRGltKSB7XG4gICAgICAgIGJhclhZID0gYmFyRGltO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFyWFkgPSBldmVudEZyb21CYXI7XG4gICAgICB9XG4gICAgICB2YXIgb2Zmc2V0UGN0ID0gcGVyY2VudChiYXJYWSwgYmFyRGltKTtcblxuICAgICAgdmFsdWUgPSB0aGlzLl92YWx1ZShvZmZzZXRQY3QpO1xuXG4gICAgICAvLyB0dXJuIGV2ZXJ5dGhpbmcgYXJvdW5kIGZvciBSVEwsIHlheSBtYXRoIVxuICAgICAgaWYgKEZvdW5kYXRpb24ucnRsKCkgJiYgIXRoaXMub3B0aW9ucy52ZXJ0aWNhbCkge3ZhbHVlID0gdGhpcy5vcHRpb25zLmVuZCAtIHZhbHVlO31cblxuICAgICAgdmFsdWUgPSBfdGhpcy5fYWRqdXN0VmFsdWUobnVsbCwgdmFsdWUpO1xuICAgICAgLy9ib29sZWFuIGZsYWcgZm9yIHRoZSBzZXRIYW5kbGVQb3MgZm4sIHNwZWNpZmljYWxseSBmb3IgdmVydGljYWwgc2xpZGVyc1xuICAgICAgaGFzVmFsID0gZmFsc2U7XG5cbiAgICAgIGlmICghJGhhbmRsZSkgey8vZmlndXJlIG91dCB3aGljaCBoYW5kbGUgaXQgaXMsIHBhc3MgaXQgdG8gdGhlIG5leHQgZnVuY3Rpb24uXG4gICAgICAgIHZhciBmaXJzdEhuZGxQb3MgPSBhYnNQb3NpdGlvbih0aGlzLiRoYW5kbGUsIGRpcmVjdGlvbiwgYmFyWFksIHBhcmFtKSxcbiAgICAgICAgICAgIHNlY25kSG5kbFBvcyA9IGFic1Bvc2l0aW9uKHRoaXMuJGhhbmRsZTIsIGRpcmVjdGlvbiwgYmFyWFksIHBhcmFtKTtcbiAgICAgICAgICAgICRoYW5kbGUgPSBmaXJzdEhuZGxQb3MgPD0gc2VjbmRIbmRsUG9zID8gdGhpcy4kaGFuZGxlIDogdGhpcy4kaGFuZGxlMjtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7Ly9jaGFuZ2UgZXZlbnQgb24gaW5wdXRcbiAgICAgIHZhbHVlID0gdGhpcy5fYWRqdXN0VmFsdWUobnVsbCwgdmFsKTtcbiAgICAgIGhhc1ZhbCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0SGFuZGxlUG9zKCRoYW5kbGUsIHZhbHVlLCBoYXNWYWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdGVzIHZhbHVlIGZvciBoYW5kbGUgaW4gcmVnYXJkIHRvIHN0ZXAgdmFsdWUuIHJldHVybnMgYWRqdXN0ZWQgdmFsdWVcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkaGFuZGxlIC0gdGhlIHNlbGVjdGVkIGhhbmRsZS5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIC0gdmFsdWUgdG8gYWRqdXN0LiB1c2VkIGlmICRoYW5kbGUgaXMgZmFsc3lcbiAgICovXG4gIF9hZGp1c3RWYWx1ZSgkaGFuZGxlLCB2YWx1ZSkge1xuICAgIHZhciB2YWwsXG4gICAgICBzdGVwID0gdGhpcy5vcHRpb25zLnN0ZXAsXG4gICAgICBkaXYgPSBwYXJzZUZsb2F0KHN0ZXAvMiksXG4gICAgICBsZWZ0LCBwcmV2X3ZhbCwgbmV4dF92YWw7XG4gICAgaWYgKCEhJGhhbmRsZSkge1xuICAgICAgdmFsID0gcGFyc2VGbG9hdCgkaGFuZGxlLmF0dHIoJ2FyaWEtdmFsdWVub3cnKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFsID0gdmFsdWU7XG4gICAgfVxuICAgIGxlZnQgPSB2YWwgJSBzdGVwO1xuICAgIHByZXZfdmFsID0gdmFsIC0gbGVmdDtcbiAgICBuZXh0X3ZhbCA9IHByZXZfdmFsICsgc3RlcDtcbiAgICBpZiAobGVmdCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgdmFsID0gdmFsID49IHByZXZfdmFsICsgZGl2ID8gbmV4dF92YWwgOiBwcmV2X3ZhbDtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSBzbGlkZXIgZWxlbWVudHMuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB0aGlzLl9ldmVudHNGb3JIYW5kbGUodGhpcy4kaGFuZGxlKTtcbiAgICBpZih0aGlzLmhhbmRsZXNbMV0pIHtcbiAgICAgIHRoaXMuX2V2ZW50c0ZvckhhbmRsZSh0aGlzLiRoYW5kbGUyKTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVycyBhIHBhcnRpY3VsYXIgaGFuZGxlXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGhhbmRsZSAtIHRoZSBjdXJyZW50IGhhbmRsZSB0byBhcHBseSBsaXN0ZW5lcnMgdG8uXG4gICAqL1xuICBfZXZlbnRzRm9ySGFuZGxlKCRoYW5kbGUpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBjdXJIYW5kbGUsXG4gICAgICAgIHRpbWVyO1xuXG4gICAgICB0aGlzLmlucHV0cy5vZmYoJ2NoYW5nZS56Zi5zbGlkZXInKS5vbignY2hhbmdlLnpmLnNsaWRlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIGlkeCA9IF90aGlzLmlucHV0cy5pbmRleCgkKHRoaXMpKTtcbiAgICAgICAgX3RoaXMuX2hhbmRsZUV2ZW50KGUsIF90aGlzLmhhbmRsZXMuZXEoaWR4KSwgJCh0aGlzKS52YWwoKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbGlja1NlbGVjdCkge1xuICAgICAgICB0aGlzLiRlbGVtZW50Lm9mZignY2xpY2suemYuc2xpZGVyJykub24oJ2NsaWNrLnpmLnNsaWRlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuJGVsZW1lbnQuZGF0YSgnZHJhZ2dpbmcnKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgICAgICAgIGlmICghJChlLnRhcmdldCkuaXMoJ1tkYXRhLXNsaWRlci1oYW5kbGVdJykpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmRvdWJsZVNpZGVkKSB7XG4gICAgICAgICAgICAgIF90aGlzLl9oYW5kbGVFdmVudChlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF90aGlzLl9oYW5kbGVFdmVudChlLCBfdGhpcy4kaGFuZGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kcmFnZ2FibGUpIHtcbiAgICAgIHRoaXMuaGFuZGxlcy5hZGRUb3VjaCgpO1xuXG4gICAgICB2YXIgJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgICAkaGFuZGxlXG4gICAgICAgIC5vZmYoJ21vdXNlZG93bi56Zi5zbGlkZXInKVxuICAgICAgICAub24oJ21vdXNlZG93bi56Zi5zbGlkZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgJGhhbmRsZS5hZGRDbGFzcygnaXMtZHJhZ2dpbmcnKTtcbiAgICAgICAgICBfdGhpcy4kZmlsbC5hZGRDbGFzcygnaXMtZHJhZ2dpbmcnKTsvL1xuICAgICAgICAgIF90aGlzLiRlbGVtZW50LmRhdGEoJ2RyYWdnaW5nJywgdHJ1ZSk7XG5cbiAgICAgICAgICBjdXJIYW5kbGUgPSAkKGUuY3VycmVudFRhcmdldCk7XG5cbiAgICAgICAgICAkYm9keS5vbignbW91c2Vtb3ZlLnpmLnNsaWRlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIF90aGlzLl9oYW5kbGVFdmVudChlLCBjdXJIYW5kbGUpO1xuXG4gICAgICAgICAgfSkub24oJ21vdXNldXAuemYuc2xpZGVyJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgX3RoaXMuX2hhbmRsZUV2ZW50KGUsIGN1ckhhbmRsZSk7XG5cbiAgICAgICAgICAgICRoYW5kbGUucmVtb3ZlQ2xhc3MoJ2lzLWRyYWdnaW5nJyk7XG4gICAgICAgICAgICBfdGhpcy4kZmlsbC5yZW1vdmVDbGFzcygnaXMtZHJhZ2dpbmcnKTtcbiAgICAgICAgICAgIF90aGlzLiRlbGVtZW50LmRhdGEoJ2RyYWdnaW5nJywgZmFsc2UpO1xuXG4gICAgICAgICAgICAkYm9keS5vZmYoJ21vdXNlbW92ZS56Zi5zbGlkZXIgbW91c2V1cC56Zi5zbGlkZXInKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAvLyBwcmV2ZW50IGV2ZW50cyB0cmlnZ2VyZWQgYnkgdG91Y2hcbiAgICAgIC5vbignc2VsZWN0c3RhcnQuemYuc2xpZGVyIHRvdWNobW92ZS56Zi5zbGlkZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgICRoYW5kbGUub2ZmKCdrZXlkb3duLnpmLnNsaWRlcicpLm9uKCdrZXlkb3duLnpmLnNsaWRlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHZhciBfJGhhbmRsZSA9ICQodGhpcyksXG4gICAgICAgICAgaWR4ID0gX3RoaXMub3B0aW9ucy5kb3VibGVTaWRlZCA/IF90aGlzLmhhbmRsZXMuaW5kZXgoXyRoYW5kbGUpIDogMCxcbiAgICAgICAgICBvbGRWYWx1ZSA9IHBhcnNlRmxvYXQoX3RoaXMuaW5wdXRzLmVxKGlkeCkudmFsKCkpLFxuICAgICAgICAgIG5ld1ZhbHVlO1xuXG4gICAgICAvLyBoYW5kbGUga2V5Ym9hcmQgZXZlbnQgd2l0aCBrZXlib2FyZCB1dGlsXG4gICAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnU2xpZGVyJywge1xuICAgICAgICBkZWNyZWFzZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBvbGRWYWx1ZSAtIF90aGlzLm9wdGlvbnMuc3RlcDtcbiAgICAgICAgfSxcbiAgICAgICAgaW5jcmVhc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gb2xkVmFsdWUgKyBfdGhpcy5vcHRpb25zLnN0ZXA7XG4gICAgICAgIH0sXG4gICAgICAgIGRlY3JlYXNlX2Zhc3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gb2xkVmFsdWUgLSBfdGhpcy5vcHRpb25zLnN0ZXAgKiAxMDtcbiAgICAgICAgfSxcbiAgICAgICAgaW5jcmVhc2VfZmFzdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBvbGRWYWx1ZSArIF90aGlzLm9wdGlvbnMuc3RlcCAqIDEwO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVkOiBmdW5jdGlvbigpIHsgLy8gb25seSBzZXQgaGFuZGxlIHBvcyB3aGVuIGV2ZW50IHdhcyBoYW5kbGVkIHNwZWNpYWxseVxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy5fc2V0SGFuZGxlUG9zKF8kaGFuZGxlLCBuZXdWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLyppZiAobmV3VmFsdWUpIHsgLy8gaWYgcHJlc3NlZCBrZXkgaGFzIHNwZWNpYWwgZnVuY3Rpb24sIHVwZGF0ZSB2YWx1ZVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIF90aGlzLl9zZXRIYW5kbGVQb3MoXyRoYW5kbGUsIG5ld1ZhbHVlKTtcbiAgICAgIH0qL1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBzbGlkZXIgcGx1Z2luLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmhhbmRsZXMub2ZmKCcuemYuc2xpZGVyJyk7XG4gICAgdGhpcy5pbnB1dHMub2ZmKCcuemYuc2xpZGVyJyk7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi5zbGlkZXInKTtcblxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cblNsaWRlci5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIE1pbmltdW0gdmFsdWUgZm9yIHRoZSBzbGlkZXIgc2NhbGUuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMFxuICAgKi9cbiAgc3RhcnQ6IDAsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHZhbHVlIGZvciB0aGUgc2xpZGVyIHNjYWxlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDEwMFxuICAgKi9cbiAgZW5kOiAxMDAsXG4gIC8qKlxuICAgKiBNaW5pbXVtIHZhbHVlIGNoYW5nZSBwZXIgY2hhbmdlIGV2ZW50LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDFcbiAgICovXG4gIHN0ZXA6IDEsXG4gIC8qKlxuICAgKiBWYWx1ZSBhdCB3aGljaCB0aGUgaGFuZGxlL2lucHV0ICoobGVmdCBoYW5kbGUvZmlyc3QgaW5wdXQpKiBzaG91bGQgYmUgc2V0IHRvIG9uIGluaXRpYWxpemF0aW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDBcbiAgICovXG4gIGluaXRpYWxTdGFydDogMCxcbiAgLyoqXG4gICAqIFZhbHVlIGF0IHdoaWNoIHRoZSByaWdodCBoYW5kbGUvc2Vjb25kIGlucHV0IHNob3VsZCBiZSBzZXQgdG8gb24gaW5pdGlhbGl6YXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMTAwXG4gICAqL1xuICBpbml0aWFsRW5kOiAxMDAsXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIGlucHV0IHRvIGJlIGxvY2F0ZWQgb3V0c2lkZSB0aGUgY29udGFpbmVyIGFuZCB2aXNpYmxlLiBTZXQgdG8gYnkgdGhlIEpTXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIGJpbmRpbmc6IGZhbHNlLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSB1c2VyIHRvIGNsaWNrL3RhcCBvbiB0aGUgc2xpZGVyIGJhciB0byBzZWxlY3QgYSB2YWx1ZS5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSB0cnVlXG4gICAqL1xuICBjbGlja1NlbGVjdDogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGFuZCB1c2UgdGhlIGB2ZXJ0aWNhbGAgY2xhc3MgdG8gY2hhbmdlIGFsaWdubWVudCB0byB2ZXJ0aWNhbC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgdmVydGljYWw6IGZhbHNlLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSB1c2VyIHRvIGRyYWcgdGhlIHNsaWRlciBoYW5kbGUocykgdG8gc2VsZWN0IGEgdmFsdWUuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgdHJ1ZVxuICAgKi9cbiAgZHJhZ2dhYmxlOiB0cnVlLFxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHNsaWRlciBhbmQgcHJldmVudHMgZXZlbnQgbGlzdGVuZXJzIGZyb20gYmVpbmcgYXBwbGllZC4gRG91YmxlIGNoZWNrZWQgYnkgSlMgd2l0aCBgZGlzYWJsZWRDbGFzc2AuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgdXNlIG9mIHR3byBoYW5kbGVzLiBEb3VibGUgY2hlY2tlZCBieSB0aGUgSlMuIENoYW5nZXMgc29tZSBsb2dpYyBoYW5kbGluZy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgZG91YmxlU2lkZWQ6IGZhbHNlLFxuICAvKipcbiAgICogUG90ZW50aWFsIGZ1dHVyZSBmZWF0dXJlLlxuICAgKi9cbiAgLy8gc3RlcHM6IDEwMCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0aGUgcGx1Z2luIHNob3VsZCBnbyB0byBmb3IgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDJcbiAgICovXG4gIGRlY2ltYWw6IDIsXG4gIC8qKlxuICAgKiBUaW1lIGRlbGF5IGZvciBkcmFnZ2VkIGVsZW1lbnRzLlxuICAgKi9cbiAgLy8gZHJhZ0RlbGF5OiAwLFxuICAvKipcbiAgICogVGltZSwgaW4gbXMsIHRvIGFuaW1hdGUgdGhlIG1vdmVtZW50IG9mIGEgc2xpZGVyIGhhbmRsZSBpZiB1c2VyIGNsaWNrcy90YXBzIG9uIHRoZSBiYXIuIE5lZWRzIHRvIGJlIG1hbnVhbGx5IHNldCBpZiB1cGRhdGluZyB0aGUgdHJhbnNpdGlvbiB0aW1lIGluIHRoZSBTYXNzIHNldHRpbmdzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDIwMFxuICAgKi9cbiAgbW92ZVRpbWU6IDIwMCwvL3VwZGF0ZSB0aGlzIGlmIGNoYW5naW5nIHRoZSB0cmFuc2l0aW9uIHRpbWUgaW4gdGhlIHNhc3NcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gZGlzYWJsZWQgc2xpZGVycy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnZGlzYWJsZWQnXG4gICAqL1xuICBkaXNhYmxlZENsYXNzOiAnZGlzYWJsZWQnLFxuICAvKipcbiAgICogV2lsbCBpbnZlcnQgdGhlIGRlZmF1bHQgbGF5b3V0IGZvciBhIHZlcnRpY2FsPHNwYW4gZGF0YS10b29sdGlwIHRpdGxlPVwid2hvIHdvdWxkIGRvIHRoaXM/Pz9cIj4gPC9zcGFuPnNsaWRlci5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgaW52ZXJ0VmVydGljYWw6IGZhbHNlLFxuICAvKipcbiAgICogTWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgYGNoYW5nZWQuemYtc2xpZGVyYCBldmVudCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgdmFsdWUgY2hhbmdlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDUwMFxuICAgKi9cbiAgY2hhbmdlZERlbGF5OiA1MDAsXG4gIC8qKlxuICAqIEJhc2V2YWx1ZSBmb3Igbm9uLWxpbmVhciBzbGlkZXJzXG4gICogQG9wdGlvblxuICAqIEBleGFtcGxlIDVcbiAgKi9cbiAgbm9uTGluZWFyQmFzZTogNSxcbiAgLyoqXG4gICogQmFzZXZhbHVlIGZvciBub24tbGluZWFyIHNsaWRlcnMsIHBvc3NpYmxlIHZhbHVlcyBhcmU6ICdsaW5lYXInLCAncG93JyAmICdsb2cnLiBQb3cgYW5kIExvZyB1c2UgdGhlIG5vbkxpbmVhckJhc2Ugc2V0dGluZy5cbiAgKiBAb3B0aW9uXG4gICogQGV4YW1wbGUgJ2xpbmVhcidcbiAgKi9cbiAgcG9zaXRpb25WYWx1ZUZ1bmN0aW9uOiAnbGluZWFyJyxcbn07XG5cbmZ1bmN0aW9uIHBlcmNlbnQoZnJhYywgbnVtKSB7XG4gIHJldHVybiAoZnJhYyAvIG51bSk7XG59XG5mdW5jdGlvbiBhYnNQb3NpdGlvbigkaGFuZGxlLCBkaXIsIGNsaWNrUG9zLCBwYXJhbSkge1xuICByZXR1cm4gTWF0aC5hYnMoKCRoYW5kbGUucG9zaXRpb24oKVtkaXJdICsgKCRoYW5kbGVbcGFyYW1dKCkgLyAyKSkgLSBjbGlja1Bvcyk7XG59XG5mdW5jdGlvbiBiYXNlTG9nKGJhc2UsIHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLmxvZyh2YWx1ZSkvTWF0aC5sb2coYmFzZSlcbn1cblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKFNsaWRlciwgJ1NsaWRlcicpO1xuXG59KGpRdWVyeSk7XG5cbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBTdGlja3kgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnN0aWNreVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tZWRpYVF1ZXJ5XG4gKi9cblxuY2xhc3MgU3RpY2t5IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSBzdGlja3kgdGhpbmcuXG4gICAqIEBjbGFzc1xuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBzdGlja3kuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBvYmplY3QgcGFzc2VkIHdoZW4gY3JlYXRpbmcgdGhlIGVsZW1lbnQgcHJvZ3JhbW1hdGljYWxseS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgU3RpY2t5LmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdTdGlja3knKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgc3RpY2t5IGVsZW1lbnQgYnkgYWRkaW5nIGNsYXNzZXMsIGdldHRpbmcvc2V0dGluZyBkaW1lbnNpb25zLCBicmVha3BvaW50cyBhbmQgYXR0cmlidXRlc1xuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciAkcGFyZW50ID0gdGhpcy4kZWxlbWVudC5wYXJlbnQoJ1tkYXRhLXN0aWNreS1jb250YWluZXJdJyksXG4gICAgICAgIGlkID0gdGhpcy4kZWxlbWVudFswXS5pZCB8fCBGb3VuZGF0aW9uLkdldFlvRGlnaXRzKDYsICdzdGlja3knKSxcbiAgICAgICAgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKCEkcGFyZW50Lmxlbmd0aCkge1xuICAgICAgdGhpcy53YXNXcmFwcGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy4kY29udGFpbmVyID0gJHBhcmVudC5sZW5ndGggPyAkcGFyZW50IDogJCh0aGlzLm9wdGlvbnMuY29udGFpbmVyKS53cmFwSW5uZXIodGhpcy4kZWxlbWVudCk7XG4gICAgdGhpcy4kY29udGFpbmVyLmFkZENsYXNzKHRoaXMub3B0aW9ucy5jb250YWluZXJDbGFzcyk7XG5cbiAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5zdGlja3lDbGFzcylcbiAgICAgICAgICAgICAgICAgLmF0dHIoeydkYXRhLXJlc2l6ZSc6IGlkfSk7XG5cbiAgICB0aGlzLnNjcm9sbENvdW50ID0gdGhpcy5vcHRpb25zLmNoZWNrRXZlcnk7XG4gICAgdGhpcy5pc1N0dWNrID0gZmFsc2U7XG4gICAgJCh3aW5kb3cpLm9uZSgnbG9hZC56Zi5zdGlja3knLCBmdW5jdGlvbigpe1xuICAgICAgLy9XZSBjYWxjdWxhdGUgdGhlIGNvbnRhaW5lciBoZWlnaHQgdG8gaGF2ZSBjb3JyZWN0IHZhbHVlcyBmb3IgYW5jaG9yIHBvaW50cyBvZmZzZXQgY2FsY3VsYXRpb24uXG4gICAgICBfdGhpcy5jb250YWluZXJIZWlnaHQgPSBfdGhpcy4kZWxlbWVudC5jc3MoXCJkaXNwbGF5XCIpID09IFwibm9uZVwiID8gMCA6IF90aGlzLiRlbGVtZW50WzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgIF90aGlzLiRjb250YWluZXIuY3NzKCdoZWlnaHQnLCBfdGhpcy5jb250YWluZXJIZWlnaHQpO1xuICAgICAgX3RoaXMuZWxlbUhlaWdodCA9IF90aGlzLmNvbnRhaW5lckhlaWdodDtcbiAgICAgIGlmKF90aGlzLm9wdGlvbnMuYW5jaG9yICE9PSAnJyl7XG4gICAgICAgIF90aGlzLiRhbmNob3IgPSAkKCcjJyArIF90aGlzLm9wdGlvbnMuYW5jaG9yKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBfdGhpcy5fcGFyc2VQb2ludHMoKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuX3NldFNpemVzKGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzY3JvbGwgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgICAgIF90aGlzLl9jYWxjKGZhbHNlLCBzY3JvbGwpO1xuICAgICAgICAvL1Vuc3RpY2sgdGhlIGVsZW1lbnQgd2lsbCBlbnN1cmUgdGhhdCBwcm9wZXIgY2xhc3NlcyBhcmUgc2V0LlxuICAgICAgICBpZiAoIV90aGlzLmlzU3R1Y2spIHtcbiAgICAgICAgICBfdGhpcy5fcmVtb3ZlU3RpY2t5KChzY3JvbGwgPj0gX3RoaXMudG9wUG9pbnQpID8gZmFsc2UgOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5fZXZlbnRzKGlkLnNwbGl0KCctJykucmV2ZXJzZSgpLmpvaW4oJy0nKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdXNpbmcgbXVsdGlwbGUgZWxlbWVudHMgYXMgYW5jaG9ycywgY2FsY3VsYXRlcyB0aGUgdG9wIGFuZCBib3R0b20gcGl4ZWwgdmFsdWVzIHRoZSBzdGlja3kgdGhpbmcgc2hvdWxkIHN0aWNrIGFuZCB1bnN0aWNrIG9uLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wYXJzZVBvaW50cygpIHtcbiAgICB2YXIgdG9wID0gdGhpcy5vcHRpb25zLnRvcEFuY2hvciA9PSBcIlwiID8gMSA6IHRoaXMub3B0aW9ucy50b3BBbmNob3IsXG4gICAgICAgIGJ0bSA9IHRoaXMub3B0aW9ucy5idG1BbmNob3I9PSBcIlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCA6IHRoaXMub3B0aW9ucy5idG1BbmNob3IsXG4gICAgICAgIHB0cyA9IFt0b3AsIGJ0bV0sXG4gICAgICAgIGJyZWFrcyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBwdHMubGVuZ3RoOyBpIDwgbGVuICYmIHB0c1tpXTsgaSsrKSB7XG4gICAgICB2YXIgcHQ7XG4gICAgICBpZiAodHlwZW9mIHB0c1tpXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcHQgPSBwdHNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcGxhY2UgPSBwdHNbaV0uc3BsaXQoJzonKSxcbiAgICAgICAgICAgIGFuY2hvciA9ICQoYCMke3BsYWNlWzBdfWApO1xuXG4gICAgICAgIHB0ID0gYW5jaG9yLm9mZnNldCgpLnRvcDtcbiAgICAgICAgaWYgKHBsYWNlWzFdICYmIHBsYWNlWzFdLnRvTG93ZXJDYXNlKCkgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgcHQgKz0gYW5jaG9yWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWtzW2ldID0gcHQ7XG4gICAgfVxuXG5cbiAgICB0aGlzLnBvaW50cyA9IGJyZWFrcztcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBoYW5kbGVycyBmb3IgdGhlIHNjcm9sbGluZyBlbGVtZW50LlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgLSBwc3VlZG8tcmFuZG9tIGlkIGZvciB1bmlxdWUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyLlxuICAgKi9cbiAgX2V2ZW50cyhpZCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgIHNjcm9sbExpc3RlbmVyID0gdGhpcy5zY3JvbGxMaXN0ZW5lciA9IGBzY3JvbGwuemYuJHtpZH1gO1xuICAgIGlmICh0aGlzLmlzT24pIHsgcmV0dXJuOyB9XG4gICAgaWYgKHRoaXMuY2FuU3RpY2spIHtcbiAgICAgIHRoaXMuaXNPbiA9IHRydWU7XG4gICAgICAkKHdpbmRvdykub2ZmKHNjcm9sbExpc3RlbmVyKVxuICAgICAgICAgICAgICAgLm9uKHNjcm9sbExpc3RlbmVyLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgIGlmIChfdGhpcy5zY3JvbGxDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgIF90aGlzLnNjcm9sbENvdW50ID0gX3RoaXMub3B0aW9ucy5jaGVja0V2ZXJ5O1xuICAgICAgICAgICAgICAgICAgIF90aGlzLl9zZXRTaXplcyhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9jYWxjKGZhbHNlLCB3aW5kb3cucGFnZVlPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgIF90aGlzLnNjcm9sbENvdW50LS07XG4gICAgICAgICAgICAgICAgICAgX3RoaXMuX2NhbGMoZmFsc2UsIHdpbmRvdy5wYWdlWU9mZnNldCk7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInKVxuICAgICAgICAgICAgICAgICAub24oJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInLCBmdW5jdGlvbihlLCBlbCkge1xuICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NldFNpemVzKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY2FsYyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5jYW5TdGljaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXMuaXNPbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2V2ZW50cyhpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzLmlzT24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcGF1c2VMaXN0ZW5lcnMoc2Nyb2xsTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGV2ZW50IGhhbmRsZXJzIGZvciBzY3JvbGwgYW5kIGNoYW5nZSBldmVudHMgb24gYW5jaG9yLlxuICAgKiBAZmlyZXMgU3RpY2t5I3BhdXNlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzY3JvbGxMaXN0ZW5lciAtIHVuaXF1ZSwgbmFtZXNwYWNlZCBzY3JvbGwgbGlzdGVuZXIgYXR0YWNoZWQgdG8gYHdpbmRvd2BcbiAgICovXG4gIF9wYXVzZUxpc3RlbmVycyhzY3JvbGxMaXN0ZW5lcikge1xuICAgIHRoaXMuaXNPbiA9IGZhbHNlO1xuICAgICQod2luZG93KS5vZmYoc2Nyb2xsTGlzdGVuZXIpO1xuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgcGx1Z2luIGlzIHBhdXNlZCBkdWUgdG8gcmVzaXplIGV2ZW50IHNocmlua2luZyB0aGUgdmlldy5cbiAgICAgKiBAZXZlbnQgU3RpY2t5I3BhdXNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdwYXVzZS56Zi5zdGlja3knKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgb24gZXZlcnkgYHNjcm9sbGAgZXZlbnQgYW5kIG9uIGBfaW5pdGBcbiAgICogZmlyZXMgZnVuY3Rpb25zIGJhc2VkIG9uIGJvb2xlYW5zIGFuZCBjYWNoZWQgdmFsdWVzXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gY2hlY2tTaXplcyAtIHRydWUgaWYgcGx1Z2luIHNob3VsZCByZWNhbGN1bGF0ZSBzaXplcyBhbmQgYnJlYWtwb2ludHMuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBzY3JvbGwgLSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBwYXNzZWQgZnJvbSBzY3JvbGwgZXZlbnQgY2IgZnVuY3Rpb24uIElmIG5vdCBwYXNzZWQsIGRlZmF1bHRzIHRvIGB3aW5kb3cucGFnZVlPZmZzZXRgLlxuICAgKi9cbiAgX2NhbGMoY2hlY2tTaXplcywgc2Nyb2xsKSB7XG4gICAgaWYgKGNoZWNrU2l6ZXMpIHsgdGhpcy5fc2V0U2l6ZXMoKTsgfVxuXG4gICAgaWYgKCF0aGlzLmNhblN0aWNrKSB7XG4gICAgICBpZiAodGhpcy5pc1N0dWNrKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZVN0aWNreSh0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXNjcm9sbCkgeyBzY3JvbGwgPSB3aW5kb3cucGFnZVlPZmZzZXQ7IH1cblxuICAgIGlmIChzY3JvbGwgPj0gdGhpcy50b3BQb2ludCkge1xuICAgICAgaWYgKHNjcm9sbCA8PSB0aGlzLmJvdHRvbVBvaW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0dWNrKSB7XG4gICAgICAgICAgdGhpcy5fc2V0U3RpY2t5KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3R1Y2spIHtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVTdGlja3koZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmlzU3R1Y2spIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlU3RpY2t5KHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYXVzZXMgdGhlICRlbGVtZW50IHRvIGJlY29tZSBzdHVjay5cbiAgICogQWRkcyBgcG9zaXRpb246IGZpeGVkO2AsIGFuZCBoZWxwZXIgY2xhc3Nlcy5cbiAgICogQGZpcmVzIFN0aWNreSNzdHVja3RvXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFN0aWNreSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBzdGlja1RvID0gdGhpcy5vcHRpb25zLnN0aWNrVG8sXG4gICAgICAgIG1yZ24gPSBzdGlja1RvID09PSAndG9wJyA/ICdtYXJnaW5Ub3AnIDogJ21hcmdpbkJvdHRvbScsXG4gICAgICAgIG5vdFN0dWNrVG8gPSBzdGlja1RvID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCcsXG4gICAgICAgIGNzcyA9IHt9O1xuXG4gICAgY3NzW21yZ25dID0gYCR7dGhpcy5vcHRpb25zW21yZ25dfWVtYDtcbiAgICBjc3Nbc3RpY2tUb10gPSAwO1xuICAgIGNzc1tub3RTdHVja1RvXSA9ICdhdXRvJztcbiAgICB0aGlzLmlzU3R1Y2sgPSB0cnVlO1xuICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYGlzLWFuY2hvcmVkIGlzLWF0LSR7bm90U3R1Y2tUb31gKVxuICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoYGlzLXN0dWNrIGlzLWF0LSR7c3RpY2tUb31gKVxuICAgICAgICAgICAgICAgICAuY3NzKGNzcylcbiAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAqIEZpcmVzIHdoZW4gdGhlICRlbGVtZW50IGhhcyBiZWNvbWUgYHBvc2l0aW9uOiBmaXhlZDtgXG4gICAgICAgICAgICAgICAgICAqIE5hbWVzcGFjZWQgdG8gYHRvcGAgb3IgYGJvdHRvbWAsIGUuZy4gYHN0aWNreS56Zi5zdHVja3RvOnRvcGBcbiAgICAgICAgICAgICAgICAgICogQGV2ZW50IFN0aWNreSNzdHVja3RvXG4gICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAudHJpZ2dlcihgc3RpY2t5LnpmLnN0dWNrdG86JHtzdGlja1RvfWApO1xuICAgIHRoaXMuJGVsZW1lbnQub24oXCJ0cmFuc2l0aW9uZW5kIHdlYmtpdFRyYW5zaXRpb25FbmQgb1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQgTVNUcmFuc2l0aW9uRW5kXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgX3RoaXMuX3NldFNpemVzKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2F1c2VzIHRoZSAkZWxlbWVudCB0byBiZWNvbWUgdW5zdHVjay5cbiAgICogUmVtb3ZlcyBgcG9zaXRpb246IGZpeGVkO2AsIGFuZCBoZWxwZXIgY2xhc3Nlcy5cbiAgICogQWRkcyBvdGhlciBoZWxwZXIgY2xhc3Nlcy5cbiAgICogQHBhcmFtIHtCb29sZWFufSBpc1RvcCAtIHRlbGxzIHRoZSBmdW5jdGlvbiBpZiB0aGUgJGVsZW1lbnQgc2hvdWxkIGFuY2hvciB0byB0aGUgdG9wIG9yIGJvdHRvbSBvZiBpdHMgJGFuY2hvciBlbGVtZW50LlxuICAgKiBAZmlyZXMgU3RpY2t5I3Vuc3R1Y2tmcm9tXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVtb3ZlU3RpY2t5KGlzVG9wKSB7XG4gICAgdmFyIHN0aWNrVG8gPSB0aGlzLm9wdGlvbnMuc3RpY2tUbyxcbiAgICAgICAgc3RpY2tUb1RvcCA9IHN0aWNrVG8gPT09ICd0b3AnLFxuICAgICAgICBjc3MgPSB7fSxcbiAgICAgICAgYW5jaG9yUHQgPSAodGhpcy5wb2ludHMgPyB0aGlzLnBvaW50c1sxXSAtIHRoaXMucG9pbnRzWzBdIDogdGhpcy5hbmNob3JIZWlnaHQpIC0gdGhpcy5lbGVtSGVpZ2h0LFxuICAgICAgICBtcmduID0gc3RpY2tUb1RvcCA/ICdtYXJnaW5Ub3AnIDogJ21hcmdpbkJvdHRvbScsXG4gICAgICAgIG5vdFN0dWNrVG8gPSBzdGlja1RvVG9wID8gJ2JvdHRvbScgOiAndG9wJyxcbiAgICAgICAgdG9wT3JCb3R0b20gPSBpc1RvcCA/ICd0b3AnIDogJ2JvdHRvbSc7XG5cbiAgICBjc3NbbXJnbl0gPSAwO1xuXG4gICAgY3NzWydib3R0b20nXSA9ICdhdXRvJztcbiAgICBpZihpc1RvcCkge1xuICAgICAgY3NzWyd0b3AnXSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNzc1sndG9wJ10gPSBhbmNob3JQdDtcbiAgICB9XG5cbiAgICB0aGlzLmlzU3R1Y2sgPSBmYWxzZTtcbiAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGBpcy1zdHVjayBpcy1hdC0ke3N0aWNrVG99YClcbiAgICAgICAgICAgICAgICAgLmFkZENsYXNzKGBpcy1hbmNob3JlZCBpcy1hdC0ke3RvcE9yQm90dG9tfWApXG4gICAgICAgICAgICAgICAgIC5jc3MoY3NzKVxuICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgJGVsZW1lbnQgaGFzIGJlY29tZSBhbmNob3JlZC5cbiAgICAgICAgICAgICAgICAgICogTmFtZXNwYWNlZCB0byBgdG9wYCBvciBgYm90dG9tYCwgZS5nLiBgc3RpY2t5LnpmLnVuc3R1Y2tmcm9tOmJvdHRvbWBcbiAgICAgICAgICAgICAgICAgICogQGV2ZW50IFN0aWNreSN1bnN0dWNrZnJvbVxuICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgLnRyaWdnZXIoYHN0aWNreS56Zi51bnN0dWNrZnJvbToke3RvcE9yQm90dG9tfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlICRlbGVtZW50IGFuZCAkY29udGFpbmVyIHNpemVzIGZvciBwbHVnaW4uXG4gICAqIENhbGxzIGBfc2V0QnJlYWtQb2ludHNgLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYiAtIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGZpcmUgb24gY29tcGxldGlvbiBvZiBgX3NldEJyZWFrUG9pbnRzYC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRTaXplcyhjYikge1xuICAgIHRoaXMuY2FuU3RpY2sgPSBGb3VuZGF0aW9uLk1lZGlhUXVlcnkuaXModGhpcy5vcHRpb25zLnN0aWNreU9uKTtcbiAgICBpZiAoIXRoaXMuY2FuU3RpY2spIHtcbiAgICAgIGlmIChjYiAmJiB0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHsgY2IoKTsgfVxuICAgIH1cbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBuZXdFbGVtV2lkdGggPSB0aGlzLiRjb250YWluZXJbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsXG4gICAgICAgIGNvbXAgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRjb250YWluZXJbMF0pLFxuICAgICAgICBwZG5nbCA9IHBhcnNlSW50KGNvbXBbJ3BhZGRpbmctbGVmdCddLCAxMCksXG4gICAgICAgIHBkbmdyID0gcGFyc2VJbnQoY29tcFsncGFkZGluZy1yaWdodCddLCAxMCk7XG5cbiAgICBpZiAodGhpcy4kYW5jaG9yICYmIHRoaXMuJGFuY2hvci5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYW5jaG9ySGVpZ2h0ID0gdGhpcy4kYW5jaG9yWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcGFyc2VQb2ludHMoKTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50LmNzcyh7XG4gICAgICAnbWF4LXdpZHRoJzogYCR7bmV3RWxlbVdpZHRoIC0gcGRuZ2wgLSBwZG5ncn1weGBcbiAgICB9KTtcblxuICAgIHZhciBuZXdDb250YWluZXJIZWlnaHQgPSB0aGlzLiRlbGVtZW50WzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCB8fCB0aGlzLmNvbnRhaW5lckhlaWdodDtcbiAgICBpZiAodGhpcy4kZWxlbWVudC5jc3MoXCJkaXNwbGF5XCIpID09IFwibm9uZVwiKSB7XG4gICAgICBuZXdDb250YWluZXJIZWlnaHQgPSAwO1xuICAgIH1cbiAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IG5ld0NvbnRhaW5lckhlaWdodDtcbiAgICB0aGlzLiRjb250YWluZXIuY3NzKHtcbiAgICAgIGhlaWdodDogbmV3Q29udGFpbmVySGVpZ2h0XG4gICAgfSk7XG4gICAgdGhpcy5lbGVtSGVpZ2h0ID0gbmV3Q29udGFpbmVySGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLmlzU3R1Y2spIHtcbiAgICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpcy1hdC1ib3R0b20nKSkge1xuICAgICAgICB2YXIgYW5jaG9yUHQgPSAodGhpcy5wb2ludHMgPyB0aGlzLnBvaW50c1sxXSAtIHRoaXMuJGNvbnRhaW5lci5vZmZzZXQoKS50b3AgOiB0aGlzLmFuY2hvckhlaWdodCkgLSB0aGlzLmVsZW1IZWlnaHQ7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKCd0b3AnLCBhbmNob3JQdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QnJlYWtQb2ludHMobmV3Q29udGFpbmVySGVpZ2h0LCBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChjYiAmJiB0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHsgY2IoKTsgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHVwcGVyIGFuZCBsb3dlciBicmVha3BvaW50cyBmb3IgdGhlIGVsZW1lbnQgdG8gYmVjb21lIHN0aWNreS91bnN0aWNreS5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGVsZW1IZWlnaHQgLSBweCB2YWx1ZSBmb3Igc3RpY2t5LiRlbGVtZW50IGhlaWdodCwgY2FsY3VsYXRlZCBieSBgX3NldFNpemVzYC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gY29tcGxldGlvbi5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRCcmVha1BvaW50cyhlbGVtSGVpZ2h0LCBjYikge1xuICAgIGlmICghdGhpcy5jYW5TdGljaykge1xuICAgICAgaWYgKGNiICYmIHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykgeyBjYigpOyB9XG4gICAgICBlbHNlIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfVxuICAgIHZhciBtVG9wID0gZW1DYWxjKHRoaXMub3B0aW9ucy5tYXJnaW5Ub3ApLFxuICAgICAgICBtQnRtID0gZW1DYWxjKHRoaXMub3B0aW9ucy5tYXJnaW5Cb3R0b20pLFxuICAgICAgICB0b3BQb2ludCA9IHRoaXMucG9pbnRzID8gdGhpcy5wb2ludHNbMF0gOiB0aGlzLiRhbmNob3Iub2Zmc2V0KCkudG9wLFxuICAgICAgICBib3R0b21Qb2ludCA9IHRoaXMucG9pbnRzID8gdGhpcy5wb2ludHNbMV0gOiB0b3BQb2ludCArIHRoaXMuYW5jaG9ySGVpZ2h0LFxuICAgICAgICAvLyB0b3BQb2ludCA9IHRoaXMuJGFuY2hvci5vZmZzZXQoKS50b3AgfHwgdGhpcy5wb2ludHNbMF0sXG4gICAgICAgIC8vIGJvdHRvbVBvaW50ID0gdG9wUG9pbnQgKyB0aGlzLmFuY2hvckhlaWdodCB8fCB0aGlzLnBvaW50c1sxXSxcbiAgICAgICAgd2luSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdGlja1RvID09PSAndG9wJykge1xuICAgICAgdG9wUG9pbnQgLT0gbVRvcDtcbiAgICAgIGJvdHRvbVBvaW50IC09IChlbGVtSGVpZ2h0ICsgbVRvcCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RpY2tUbyA9PT0gJ2JvdHRvbScpIHtcbiAgICAgIHRvcFBvaW50IC09ICh3aW5IZWlnaHQgLSAoZWxlbUhlaWdodCArIG1CdG0pKTtcbiAgICAgIGJvdHRvbVBvaW50IC09ICh3aW5IZWlnaHQgLSBtQnRtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy90aGlzIHdvdWxkIGJlIHRoZSBzdGlja1RvOiBib3RoIG9wdGlvbi4uLiB0cmlja3lcbiAgICB9XG5cbiAgICB0aGlzLnRvcFBvaW50ID0gdG9wUG9pbnQ7XG4gICAgdGhpcy5ib3R0b21Qb2ludCA9IGJvdHRvbVBvaW50O1xuXG4gICAgaWYgKGNiICYmIHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykgeyBjYigpOyB9XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGN1cnJlbnQgc3RpY2t5IGVsZW1lbnQuXG4gICAqIFJlc2V0cyB0aGUgZWxlbWVudCB0byB0aGUgdG9wIHBvc2l0aW9uIGZpcnN0LlxuICAgKiBSZW1vdmVzIGV2ZW50IGxpc3RlbmVycywgSlMtYWRkZWQgY3NzIHByb3BlcnRpZXMgYW5kIGNsYXNzZXMsIGFuZCB1bndyYXBzIHRoZSAkZWxlbWVudCBpZiB0aGUgSlMgYWRkZWQgdGhlICRjb250YWluZXIuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZW1vdmVTdGlja3kodHJ1ZSk7XG5cbiAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGAke3RoaXMub3B0aW9ucy5zdGlja3lDbGFzc30gaXMtYW5jaG9yZWQgaXMtYXQtdG9wYClcbiAgICAgICAgICAgICAgICAgLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnJyxcbiAgICAgICAgICAgICAgICAgICB0b3A6ICcnLFxuICAgICAgICAgICAgICAgICAgIGJvdHRvbTogJycsXG4gICAgICAgICAgICAgICAgICAgJ21heC13aWR0aCc6ICcnXG4gICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgIC5vZmYoJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInKTtcbiAgICBpZiAodGhpcy4kYW5jaG9yICYmIHRoaXMuJGFuY2hvci5sZW5ndGgpIHtcbiAgICAgIHRoaXMuJGFuY2hvci5vZmYoJ2NoYW5nZS56Zi5zdGlja3knKTtcbiAgICB9XG4gICAgJCh3aW5kb3cpLm9mZih0aGlzLnNjcm9sbExpc3RlbmVyKTtcblxuICAgIGlmICh0aGlzLndhc1dyYXBwZWQpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQudW53cmFwKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuY29udGFpbmVyQ2xhc3MpXG4gICAgICAgICAgICAgICAgICAgICAuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnJ1xuICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfVxufVxuXG5TdGlja3kuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBDdXN0b21pemFibGUgY29udGFpbmVyIHRlbXBsYXRlLiBBZGQgeW91ciBvd24gY2xhc3NlcyBmb3Igc3R5bGluZyBhbmQgc2l6aW5nLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICcmbHQ7ZGl2IGRhdGEtc3RpY2t5LWNvbnRhaW5lciBjbGFzcz1cInNtYWxsLTYgY29sdW1uc1wiJmd0OyZsdDsvZGl2Jmd0OydcbiAgICovXG4gIGNvbnRhaW5lcjogJzxkaXYgZGF0YS1zdGlja3ktY29udGFpbmVyPjwvZGl2PicsXG4gIC8qKlxuICAgKiBMb2NhdGlvbiBpbiB0aGUgdmlldyB0aGUgZWxlbWVudCBzdGlja3MgdG8uXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ3RvcCdcbiAgICovXG4gIHN0aWNrVG86ICd0b3AnLFxuICAvKipcbiAgICogSWYgYW5jaG9yZWQgdG8gYSBzaW5nbGUgZWxlbWVudCwgdGhlIGlkIG9mIHRoYXQgZWxlbWVudC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnZXhhbXBsZUlkJ1xuICAgKi9cbiAgYW5jaG9yOiAnJyxcbiAgLyoqXG4gICAqIElmIHVzaW5nIG1vcmUgdGhhbiBvbmUgZWxlbWVudCBhcyBhbmNob3IgcG9pbnRzLCB0aGUgaWQgb2YgdGhlIHRvcCBhbmNob3IuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ2V4YW1wbGVJZDp0b3AnXG4gICAqL1xuICB0b3BBbmNob3I6ICcnLFxuICAvKipcbiAgICogSWYgdXNpbmcgbW9yZSB0aGFuIG9uZSBlbGVtZW50IGFzIGFuY2hvciBwb2ludHMsIHRoZSBpZCBvZiB0aGUgYm90dG9tIGFuY2hvci5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnZXhhbXBsZUlkOmJvdHRvbSdcbiAgICovXG4gIGJ0bUFuY2hvcjogJycsXG4gIC8qKlxuICAgKiBNYXJnaW4sIGluIGBlbWAncyB0byBhcHBseSB0byB0aGUgdG9wIG9mIHRoZSBlbGVtZW50IHdoZW4gaXQgYmVjb21lcyBzdGlja3kuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMVxuICAgKi9cbiAgbWFyZ2luVG9wOiAxLFxuICAvKipcbiAgICogTWFyZ2luLCBpbiBgZW1gJ3MgdG8gYXBwbHkgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZWxlbWVudCB3aGVuIGl0IGJlY29tZXMgc3RpY2t5LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDFcbiAgICovXG4gIG1hcmdpbkJvdHRvbTogMSxcbiAgLyoqXG4gICAqIEJyZWFrcG9pbnQgc3RyaW5nIHRoYXQgaXMgdGhlIG1pbmltdW0gc2NyZWVuIHNpemUgYW4gZWxlbWVudCBzaG91bGQgYmVjb21lIHN0aWNreS5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnbWVkaXVtJ1xuICAgKi9cbiAgc3RpY2t5T246ICdtZWRpdW0nLFxuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byBzdGlja3kgZWxlbWVudCwgYW5kIHJlbW92ZWQgb24gZGVzdHJ1Y3Rpb24uIEZvdW5kYXRpb24gZGVmYXVsdHMgdG8gYHN0aWNreWAuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ3N0aWNreSdcbiAgICovXG4gIHN0aWNreUNsYXNzOiAnc3RpY2t5JyxcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gc3RpY2t5IGNvbnRhaW5lci4gRm91bmRhdGlvbiBkZWZhdWx0cyB0byBgc3RpY2t5LWNvbnRhaW5lcmAuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ3N0aWNreS1jb250YWluZXInXG4gICAqL1xuICBjb250YWluZXJDbGFzczogJ3N0aWNreS1jb250YWluZXInLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHNjcm9sbCBldmVudHMgYmV0d2VlbiB0aGUgcGx1Z2luJ3MgcmVjYWxjdWxhdGluZyBzdGlja3kgcG9pbnRzLiBTZXR0aW5nIGl0IHRvIGAwYCB3aWxsIGNhdXNlIGl0IHRvIHJlY2FsYyBldmVyeSBzY3JvbGwgZXZlbnQsIHNldHRpbmcgaXQgdG8gYC0xYCB3aWxsIHByZXZlbnQgcmVjYWxjIG9uIHNjcm9sbC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSA1MFxuICAgKi9cbiAgY2hlY2tFdmVyeTogLTFcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBlbSB2YWx1ZXNcbiAqIEBwYXJhbSBOdW1iZXIge2VtfSAtIG51bWJlciBvZiBlbSdzIHRvIGNhbGN1bGF0ZSBpbnRvIHBpeGVsc1xuICovXG5mdW5jdGlvbiBlbUNhbGMoZW0pIHtcbiAgcmV0dXJuIHBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHksIG51bGwpLmZvbnRTaXplLCAxMCkgKiBlbTtcbn1cblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKFN0aWNreSwgJ1N0aWNreScpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogVGFicyBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24udGFic1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5rZXlib2FyZFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50aW1lckFuZEltYWdlTG9hZGVyIGlmIHRhYnMgY29udGFpbiBpbWFnZXNcbiAqL1xuXG5jbGFzcyBUYWJzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGFicy5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBUYWJzI2luaXRcbiAgICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIG1ha2UgaW50byB0YWJzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIFRhYnMuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXQoKTtcbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdUYWJzJyk7XG4gICAgRm91bmRhdGlvbi5LZXlib2FyZC5yZWdpc3RlcignVGFicycsIHtcbiAgICAgICdFTlRFUic6ICdvcGVuJyxcbiAgICAgICdTUEFDRSc6ICdvcGVuJyxcbiAgICAgICdBUlJPV19SSUdIVCc6ICduZXh0JyxcbiAgICAgICdBUlJPV19VUCc6ICdwcmV2aW91cycsXG4gICAgICAnQVJST1dfRE9XTic6ICduZXh0JyxcbiAgICAgICdBUlJPV19MRUZUJzogJ3ByZXZpb3VzJ1xuICAgICAgLy8gJ1RBQic6ICduZXh0JyxcbiAgICAgIC8vICdTSElGVF9UQUInOiAncHJldmlvdXMnXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHRhYnMgYnkgc2hvd2luZyBhbmQgZm9jdXNpbmcgKGlmIGF1dG9Gb2N1cz10cnVlKSB0aGUgcHJlc2V0IGFjdGl2ZSB0YWIuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKHsncm9sZSc6ICd0YWJsaXN0J30pO1xuICAgIHRoaXMuJHRhYlRpdGxlcyA9IHRoaXMuJGVsZW1lbnQuZmluZChgLiR7dGhpcy5vcHRpb25zLmxpbmtDbGFzc31gKTtcbiAgICB0aGlzLiR0YWJDb250ZW50ID0gJChgW2RhdGEtdGFicy1jb250ZW50PVwiJHt0aGlzLiRlbGVtZW50WzBdLmlkfVwiXWApO1xuXG4gICAgdGhpcy4kdGFiVGl0bGVzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIHZhciAkZWxlbSA9ICQodGhpcyksXG4gICAgICAgICAgJGxpbmsgPSAkZWxlbS5maW5kKCdhJyksXG4gICAgICAgICAgaXNBY3RpdmUgPSAkZWxlbS5oYXNDbGFzcyhgJHtfdGhpcy5vcHRpb25zLmxpbmtBY3RpdmVDbGFzc31gKSxcbiAgICAgICAgICBoYXNoID0gJGxpbmtbMF0uaGFzaC5zbGljZSgxKSxcbiAgICAgICAgICBsaW5rSWQgPSAkbGlua1swXS5pZCA/ICRsaW5rWzBdLmlkIDogYCR7aGFzaH0tbGFiZWxgLFxuICAgICAgICAgICR0YWJDb250ZW50ID0gJChgIyR7aGFzaH1gKTtcblxuICAgICAgJGVsZW0uYXR0cih7J3JvbGUnOiAncHJlc2VudGF0aW9uJ30pO1xuXG4gICAgICAkbGluay5hdHRyKHtcbiAgICAgICAgJ3JvbGUnOiAndGFiJyxcbiAgICAgICAgJ2FyaWEtY29udHJvbHMnOiBoYXNoLFxuICAgICAgICAnYXJpYS1zZWxlY3RlZCc6IGlzQWN0aXZlLFxuICAgICAgICAnaWQnOiBsaW5rSWRcbiAgICAgIH0pO1xuXG4gICAgICAkdGFiQ29udGVudC5hdHRyKHtcbiAgICAgICAgJ3JvbGUnOiAndGFicGFuZWwnLFxuICAgICAgICAnYXJpYS1oaWRkZW4nOiAhaXNBY3RpdmUsXG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiBsaW5rSWRcbiAgICAgIH0pO1xuXG4gICAgICBpZihpc0FjdGl2ZSAmJiBfdGhpcy5vcHRpb25zLmF1dG9Gb2N1cyl7XG4gICAgICAgICQod2luZG93KS5sb2FkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAkZWxlbS5vZmZzZXQoKS50b3AgfSwgX3RoaXMub3B0aW9ucy5kZWVwTGlua1NtdWRnZURlbGF5LCAoKSA9PiB7XG4gICAgICAgICAgICAkbGluay5mb2N1cygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy91c2UgYnJvd3NlciB0byBvcGVuIGEgdGFiLCBpZiBpdCBleGlzdHMgaW4gdGhpcyB0YWJzZXRcbiAgICAgIGlmIChfdGhpcy5vcHRpb25zLmRlZXBMaW5rKSB7XG4gICAgICAgIHZhciBhbmNob3IgPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcbiAgICAgICAgLy9uZWVkIGEgaGFzaCBhbmQgYSByZWxldmFudCBhbmNob3IgaW4gdGhpcyB0YWJzZXRcbiAgICAgICAgaWYoYW5jaG9yLmxlbmd0aCkge1xuICAgICAgICAgIHZhciAkbGluayA9ICRlbGVtLmZpbmQoJ1tocmVmPVwiJythbmNob3IrJ1wiXScpO1xuICAgICAgICAgIGlmICgkbGluay5sZW5ndGgpIHtcbiAgICAgICAgICAgIF90aGlzLnNlbGVjdFRhYigkKGFuY2hvcikpO1xuXG4gICAgICAgICAgICAvL3JvbGwgdXAgYSBsaXR0bGUgdG8gc2hvdyB0aGUgdGl0bGVzXG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5kZWVwTGlua1NtdWRnZSkge1xuICAgICAgICAgICAgICAkKHdpbmRvdykubG9hZChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gJGVsZW0ub2Zmc2V0KCk7XG4gICAgICAgICAgICAgICAgJCgnaHRtbCwgYm9keScpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IG9mZnNldC50b3AgfSwgX3RoaXMub3B0aW9ucy5kZWVwTGlua1NtdWRnZURlbGF5KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHpwbHVnaW4gaGFzIGRlZXBsaW5rZWQgYXQgcGFnZWxvYWRcbiAgICAgICAgICAgICAgKiBAZXZlbnQgVGFicyNkZWVwbGlua1xuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICRlbGVtLnRyaWdnZXIoJ2RlZXBsaW5rLnpmLnRhYnMnLCBbJGxpbmssICQoYW5jaG9yKV0pO1xuICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmKHRoaXMub3B0aW9ucy5tYXRjaEhlaWdodCkge1xuICAgICAgdmFyICRpbWFnZXMgPSB0aGlzLiR0YWJDb250ZW50LmZpbmQoJ2ltZycpO1xuXG4gICAgICBpZiAoJGltYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgRm91bmRhdGlvbi5vbkltYWdlc0xvYWRlZCgkaW1hZ2VzLCB0aGlzLl9zZXRIZWlnaHQuYmluZCh0aGlzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZXRIZWlnaHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGhhbmRsZXJzIGZvciBpdGVtcyB3aXRoaW4gdGhlIHRhYnMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHRoaXMuX2FkZEtleUhhbmRsZXIoKTtcbiAgICB0aGlzLl9hZGRDbGlja0hhbmRsZXIoKTtcbiAgICB0aGlzLl9zZXRIZWlnaHRNcUhhbmRsZXIgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXRjaEhlaWdodCkge1xuICAgICAgdGhpcy5fc2V0SGVpZ2h0TXFIYW5kbGVyID0gdGhpcy5fc2V0SGVpZ2h0LmJpbmQodGhpcyk7XG5cbiAgICAgICQod2luZG93KS5vbignY2hhbmdlZC56Zi5tZWRpYXF1ZXJ5JywgdGhpcy5fc2V0SGVpZ2h0TXFIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBjbGljayBoYW5kbGVycyBmb3IgaXRlbXMgd2l0aGluIHRoZSB0YWJzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZENsaWNrSGFuZGxlcigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kZWxlbWVudFxuICAgICAgLm9mZignY2xpY2suemYudGFicycpXG4gICAgICAub24oJ2NsaWNrLnpmLnRhYnMnLCBgLiR7dGhpcy5vcHRpb25zLmxpbmtDbGFzc31gLCBmdW5jdGlvbihlKXtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBfdGhpcy5faGFuZGxlVGFiQ2hhbmdlKCQodGhpcykpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBrZXlib2FyZCBldmVudCBoYW5kbGVycyBmb3IgaXRlbXMgd2l0aGluIHRoZSB0YWJzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZEtleUhhbmRsZXIoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJHRhYlRpdGxlcy5vZmYoJ2tleWRvd24uemYudGFicycpLm9uKCdrZXlkb3duLnpmLnRhYnMnLCBmdW5jdGlvbihlKXtcbiAgICAgIGlmIChlLndoaWNoID09PSA5KSByZXR1cm47XG5cblxuICAgICAgdmFyICRlbGVtZW50ID0gJCh0aGlzKSxcbiAgICAgICAgJGVsZW1lbnRzID0gJGVsZW1lbnQucGFyZW50KCd1bCcpLmNoaWxkcmVuKCdsaScpLFxuICAgICAgICAkcHJldkVsZW1lbnQsXG4gICAgICAgICRuZXh0RWxlbWVudDtcblxuICAgICAgJGVsZW1lbnRzLmVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICBpZiAoJCh0aGlzKS5pcygkZWxlbWVudCkpIHtcbiAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy53cmFwT25LZXlzKSB7XG4gICAgICAgICAgICAkcHJldkVsZW1lbnQgPSBpID09PSAwID8gJGVsZW1lbnRzLmxhc3QoKSA6ICRlbGVtZW50cy5lcShpLTEpO1xuICAgICAgICAgICAgJG5leHRFbGVtZW50ID0gaSA9PT0gJGVsZW1lbnRzLmxlbmd0aCAtMSA/ICRlbGVtZW50cy5maXJzdCgpIDogJGVsZW1lbnRzLmVxKGkrMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRwcmV2RWxlbWVudCA9ICRlbGVtZW50cy5lcShNYXRoLm1heCgwLCBpLTEpKTtcbiAgICAgICAgICAgICRuZXh0RWxlbWVudCA9ICRlbGVtZW50cy5lcShNYXRoLm1pbihpKzEsICRlbGVtZW50cy5sZW5ndGgtMSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBoYW5kbGUga2V5Ym9hcmQgZXZlbnQgd2l0aCBrZXlib2FyZCB1dGlsXG4gICAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnVGFicycsIHtcbiAgICAgICAgb3BlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJGVsZW1lbnQuZmluZCgnW3JvbGU9XCJ0YWJcIl0nKS5mb2N1cygpO1xuICAgICAgICAgIF90aGlzLl9oYW5kbGVUYWJDaGFuZ2UoJGVsZW1lbnQpO1xuICAgICAgICB9LFxuICAgICAgICBwcmV2aW91czogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJHByZXZFbGVtZW50LmZpbmQoJ1tyb2xlPVwidGFiXCJdJykuZm9jdXMoKTtcbiAgICAgICAgICBfdGhpcy5faGFuZGxlVGFiQ2hhbmdlKCRwcmV2RWxlbWVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRuZXh0RWxlbWVudC5maW5kKCdbcm9sZT1cInRhYlwiXScpLmZvY3VzKCk7XG4gICAgICAgICAgX3RoaXMuX2hhbmRsZVRhYkNoYW5nZSgkbmV4dEVsZW1lbnQpO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIHRhYiBgJHRhcmdldENvbnRlbnRgIGRlZmluZWQgYnkgYCR0YXJnZXRgLiBDb2xsYXBzZXMgYWN0aXZlIHRhYi5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBUYWIgdG8gb3Blbi5cbiAgICogQGZpcmVzIFRhYnMjY2hhbmdlXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2hhbmRsZVRhYkNoYW5nZSgkdGFyZ2V0KSB7XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBmb3IgYWN0aXZlIGNsYXNzIG9uIHRhcmdldC4gQ29sbGFwc2UgaWYgZXhpc3RzLlxuICAgICAqL1xuICAgIGlmICgkdGFyZ2V0Lmhhc0NsYXNzKGAke3RoaXMub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3N9YCkpIHtcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmFjdGl2ZUNvbGxhcHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZVRhYigkdGFyZ2V0KTtcblxuICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgenBsdWdpbiBoYXMgc3VjY2Vzc2Z1bGx5IGNvbGxhcHNlZCB0YWJzLlxuICAgICAgICAgICAgKiBAZXZlbnQgVGFicyNjb2xsYXBzZVxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY29sbGFwc2UuemYudGFicycsIFskdGFyZ2V0XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciAkb2xkVGFiID0gdGhpcy4kZWxlbWVudC5cbiAgICAgICAgICBmaW5kKGAuJHt0aGlzLm9wdGlvbnMubGlua0NsYXNzfS4ke3RoaXMub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3N9YCksXG4gICAgICAgICAgJHRhYkxpbmsgPSAkdGFyZ2V0LmZpbmQoJ1tyb2xlPVwidGFiXCJdJyksXG4gICAgICAgICAgaGFzaCA9ICR0YWJMaW5rWzBdLmhhc2gsXG4gICAgICAgICAgJHRhcmdldENvbnRlbnQgPSB0aGlzLiR0YWJDb250ZW50LmZpbmQoaGFzaCk7XG5cbiAgICAvL2Nsb3NlIG9sZCB0YWJcbiAgICB0aGlzLl9jb2xsYXBzZVRhYigkb2xkVGFiKTtcblxuICAgIC8vb3BlbiBuZXcgdGFiXG4gICAgdGhpcy5fb3BlblRhYigkdGFyZ2V0KTtcblxuICAgIC8vZWl0aGVyIHJlcGxhY2Ugb3IgdXBkYXRlIGJyb3dzZXIgaGlzdG9yeVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmspIHtcbiAgICAgIHZhciBhbmNob3IgPSAkdGFyZ2V0LmZpbmQoJ2EnKS5hdHRyKCdocmVmJyk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBkYXRlSGlzdG9yeSkge1xuICAgICAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7fSwgJycsIGFuY2hvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgJycsIGFuY2hvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgcGx1Z2luIGhhcyBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0YWJzLlxuICAgICAqIEBldmVudCBUYWJzI2NoYW5nZVxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlLnpmLnRhYnMnLCBbJHRhcmdldCwgJHRhcmdldENvbnRlbnRdKTtcblxuICAgIC8vZmlyZSB0byBjaGlsZHJlbiBhIG11dGF0aW9uIGV2ZW50XG4gICAgJHRhcmdldENvbnRlbnQuZmluZChcIltkYXRhLW11dGF0ZV1cIikudHJpZ2dlcihcIm11dGF0ZW1lLnpmLnRyaWdnZXJcIik7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIHRhYiBgJHRhcmdldENvbnRlbnRgIGRlZmluZWQgYnkgYCR0YXJnZXRgLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHRhcmdldCAtIFRhYiB0byBPcGVuLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIF9vcGVuVGFiKCR0YXJnZXQpIHtcbiAgICAgIHZhciAkdGFiTGluayA9ICR0YXJnZXQuZmluZCgnW3JvbGU9XCJ0YWJcIl0nKSxcbiAgICAgICAgICBoYXNoID0gJHRhYkxpbmtbMF0uaGFzaCxcbiAgICAgICAgICAkdGFyZ2V0Q29udGVudCA9IHRoaXMuJHRhYkNvbnRlbnQuZmluZChoYXNoKTtcblxuICAgICAgJHRhcmdldC5hZGRDbGFzcyhgJHt0aGlzLm9wdGlvbnMubGlua0FjdGl2ZUNsYXNzfWApO1xuXG4gICAgICAkdGFiTGluay5hdHRyKHsnYXJpYS1zZWxlY3RlZCc6ICd0cnVlJ30pO1xuXG4gICAgICAkdGFyZ2V0Q29udGVudFxuICAgICAgICAuYWRkQ2xhc3MoYCR7dGhpcy5vcHRpb25zLnBhbmVsQWN0aXZlQ2xhc3N9YClcbiAgICAgICAgLmF0dHIoeydhcmlhLWhpZGRlbic6ICdmYWxzZSd9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsYXBzZXMgYCR0YXJnZXRDb250ZW50YCBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBUYWIgdG8gT3Blbi5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfY29sbGFwc2VUYWIoJHRhcmdldCkge1xuICAgIHZhciAkdGFyZ2V0X2FuY2hvciA9ICR0YXJnZXRcbiAgICAgIC5yZW1vdmVDbGFzcyhgJHt0aGlzLm9wdGlvbnMubGlua0FjdGl2ZUNsYXNzfWApXG4gICAgICAuZmluZCgnW3JvbGU9XCJ0YWJcIl0nKVxuICAgICAgLmF0dHIoeyAnYXJpYS1zZWxlY3RlZCc6ICdmYWxzZScgfSk7XG5cbiAgICAkKGAjJHskdGFyZ2V0X2FuY2hvci5hdHRyKCdhcmlhLWNvbnRyb2xzJyl9YClcbiAgICAgIC5yZW1vdmVDbGFzcyhgJHt0aGlzLm9wdGlvbnMucGFuZWxBY3RpdmVDbGFzc31gKVxuICAgICAgLmF0dHIoeyAnYXJpYS1oaWRkZW4nOiAndHJ1ZScgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGljIG1ldGhvZCBmb3Igc2VsZWN0aW5nIGEgY29udGVudCBwYW5lIHRvIGRpc3BsYXkuXG4gICAqIEBwYXJhbSB7alF1ZXJ5IHwgU3RyaW5nfSBlbGVtIC0galF1ZXJ5IG9iamVjdCBvciBzdHJpbmcgb2YgdGhlIGlkIG9mIHRoZSBwYW5lIHRvIGRpc3BsYXkuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgc2VsZWN0VGFiKGVsZW0pIHtcbiAgICB2YXIgaWRTdHI7XG5cbiAgICBpZiAodHlwZW9mIGVsZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpZFN0ciA9IGVsZW1bMF0uaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkU3RyID0gZWxlbTtcbiAgICB9XG5cbiAgICBpZiAoaWRTdHIuaW5kZXhPZignIycpIDwgMCkge1xuICAgICAgaWRTdHIgPSBgIyR7aWRTdHJ9YDtcbiAgICB9XG5cbiAgICB2YXIgJHRhcmdldCA9IHRoaXMuJHRhYlRpdGxlcy5maW5kKGBbaHJlZj1cIiR7aWRTdHJ9XCJdYCkucGFyZW50KGAuJHt0aGlzLm9wdGlvbnMubGlua0NsYXNzfWApO1xuXG4gICAgdGhpcy5faGFuZGxlVGFiQ2hhbmdlKCR0YXJnZXQpO1xuICB9O1xuICAvKipcbiAgICogU2V0cyB0aGUgaGVpZ2h0IG9mIGVhY2ggcGFuZWwgdG8gdGhlIGhlaWdodCBvZiB0aGUgdGFsbGVzdCBwYW5lbC5cbiAgICogSWYgZW5hYmxlZCBpbiBvcHRpb25zLCBnZXRzIGNhbGxlZCBvbiBtZWRpYSBxdWVyeSBjaGFuZ2UuXG4gICAqIElmIGxvYWRpbmcgY29udGVudCB2aWEgZXh0ZXJuYWwgc291cmNlLCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IG9yIHdpdGggX3JlZmxvdy5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0SGVpZ2h0KCkge1xuICAgIHZhciBtYXggPSAwO1xuICAgIHRoaXMuJHRhYkNvbnRlbnRcbiAgICAgIC5maW5kKGAuJHt0aGlzLm9wdGlvbnMucGFuZWxDbGFzc31gKVxuICAgICAgLmNzcygnaGVpZ2h0JywgJycpXG4gICAgICAuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhbmVsID0gJCh0aGlzKSxcbiAgICAgICAgICAgIGlzQWN0aXZlID0gcGFuZWwuaGFzQ2xhc3MoYCR7dGhpcy5vcHRpb25zLnBhbmVsQWN0aXZlQ2xhc3N9YCk7XG5cbiAgICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICAgIHBhbmVsLmNzcyh7J3Zpc2liaWxpdHknOiAnaGlkZGVuJywgJ2Rpc3BsYXknOiAnYmxvY2snfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGVtcCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXG4gICAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgICBwYW5lbC5jc3Moe1xuICAgICAgICAgICAgJ3Zpc2liaWxpdHknOiAnJyxcbiAgICAgICAgICAgICdkaXNwbGF5JzogJydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1heCA9IHRlbXAgPiBtYXggPyB0ZW1wIDogbWF4O1xuICAgICAgfSlcbiAgICAgIC5jc3MoJ2hlaWdodCcsIGAke21heH1weGApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFuIGluc3RhbmNlIG9mIGFuIHRhYnMuXG4gICAqIEBmaXJlcyBUYWJzI2Rlc3Ryb3llZFxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAuZmluZChgLiR7dGhpcy5vcHRpb25zLmxpbmtDbGFzc31gKVxuICAgICAgLm9mZignLnpmLnRhYnMnKS5oaWRlKCkuZW5kKClcbiAgICAgIC5maW5kKGAuJHt0aGlzLm9wdGlvbnMucGFuZWxDbGFzc31gKVxuICAgICAgLmhpZGUoKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubWF0Y2hIZWlnaHQpIHtcbiAgICAgIGlmICh0aGlzLl9zZXRIZWlnaHRNcUhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgJCh3aW5kb3cpLm9mZignY2hhbmdlZC56Zi5tZWRpYXF1ZXJ5JywgdGhpcy5fc2V0SGVpZ2h0TXFIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuVGFicy5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgd2luZG93IHRvIHNjcm9sbCB0byBjb250ZW50IG9mIHBhbmUgc3BlY2lmaWVkIGJ5IGhhc2ggYW5jaG9yXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgZmFsc2VcbiAgICovXG4gIGRlZXBMaW5rOiBmYWxzZSxcblxuICAvKipcbiAgICogQWRqdXN0IHRoZSBkZWVwIGxpbmsgc2Nyb2xsIHRvIG1ha2Ugc3VyZSB0aGUgdG9wIG9mIHRoZSB0YWIgcGFuZWwgaXMgdmlzaWJsZVxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBkZWVwTGlua1NtdWRnZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEFuaW1hdGlvbiB0aW1lIChtcykgZm9yIHRoZSBkZWVwIGxpbmsgYWRqdXN0bWVudFxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDMwMFxuICAgKi9cbiAgZGVlcExpbmtTbXVkZ2VEZWxheTogMzAwLFxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGJyb3dzZXIgaGlzdG9yeSB3aXRoIHRoZSBvcGVuIHRhYlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICB1cGRhdGVIaXN0b3J5OiBmYWxzZSxcblxuICAvKipcbiAgICogQWxsb3dzIHRoZSB3aW5kb3cgdG8gc2Nyb2xsIHRvIGNvbnRlbnQgb2YgYWN0aXZlIHBhbmUgb24gbG9hZCBpZiBzZXQgdG8gdHJ1ZS5cbiAgICogTm90IHJlY29tbWVuZGVkIGlmIG1vcmUgdGhhbiBvbmUgdGFiIHBhbmVsIHBlciBwYWdlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBBbGxvd3Mga2V5Ym9hcmQgaW5wdXQgdG8gJ3dyYXAnIGFyb3VuZCB0aGUgdGFiIGxpbmtzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIHRydWVcbiAgICovXG4gIHdyYXBPbktleXM6IHRydWUsXG5cbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgdGFiIGNvbnRlbnQgcGFuZXMgdG8gbWF0Y2ggaGVpZ2h0cyBpZiBzZXQgdG8gdHJ1ZS5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgbWF0Y2hIZWlnaHQ6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBBbGxvd3MgYWN0aXZlIHRhYnMgdG8gY29sbGFwc2Ugd2hlbiBjbGlja2VkLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBhY3RpdmVDb2xsYXBzZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gYGxpYCdzIGluIHRhYiBsaW5rIGxpc3QuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ3RhYnMtdGl0bGUnXG4gICAqL1xuICBsaW5rQ2xhc3M6ICd0YWJzLXRpdGxlJyxcblxuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgYWN0aXZlIGBsaWAgaW4gdGFiIGxpbmsgbGlzdC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnaXMtYWN0aXZlJ1xuICAgKi9cbiAgbGlua0FjdGl2ZUNsYXNzOiAnaXMtYWN0aXZlJyxcblxuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgY29udGVudCBjb250YWluZXJzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICd0YWJzLXBhbmVsJ1xuICAgKi9cbiAgcGFuZWxDbGFzczogJ3RhYnMtcGFuZWwnLFxuXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIHRoZSBhY3RpdmUgY29udGVudCBjb250YWluZXIuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ2lzLWFjdGl2ZSdcbiAgICovXG4gIHBhbmVsQWN0aXZlQ2xhc3M6ICdpcy1hY3RpdmUnXG59O1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oVGFicywgJ1RhYnMnKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIFRvZ2dsZXIgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnRvZ2dsZXJcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubW90aW9uXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRyaWdnZXJzXG4gKi9cblxuY2xhc3MgVG9nZ2xlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFRvZ2dsZXIuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgVG9nZ2xlciNpbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIHRyaWdnZXIgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgVG9nZ2xlci5kZWZhdWx0cywgZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuY2xhc3NOYW1lID0gJyc7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdUb2dnbGVyJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIFRvZ2dsZXIgcGx1Z2luIGJ5IHBhcnNpbmcgdGhlIHRvZ2dsZSBjbGFzcyBmcm9tIGRhdGEtdG9nZ2xlciwgb3IgYW5pbWF0aW9uIGNsYXNzZXMgZnJvbSBkYXRhLWFuaW1hdGUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIGlucHV0O1xuICAgIC8vIFBhcnNlIGFuaW1hdGlvbiBjbGFzc2VzIGlmIHRoZXkgd2VyZSBzZXRcbiAgICBpZiAodGhpcy5vcHRpb25zLmFuaW1hdGUpIHtcbiAgICAgIGlucHV0ID0gdGhpcy5vcHRpb25zLmFuaW1hdGUuc3BsaXQoJyAnKTtcblxuICAgICAgdGhpcy5hbmltYXRpb25JbiA9IGlucHV0WzBdO1xuICAgICAgdGhpcy5hbmltYXRpb25PdXQgPSBpbnB1dFsxXSB8fCBudWxsO1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIHBhcnNlIHRvZ2dsZSBjbGFzc1xuICAgIGVsc2Uge1xuICAgICAgaW5wdXQgPSB0aGlzLiRlbGVtZW50LmRhdGEoJ3RvZ2dsZXInKTtcbiAgICAgIC8vIEFsbG93IGZvciBhIC4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nXG4gICAgICB0aGlzLmNsYXNzTmFtZSA9IGlucHV0WzBdID09PSAnLicgPyBpbnB1dC5zbGljZSgxKSA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIEFkZCBBUklBIGF0dHJpYnV0ZXMgdG8gdHJpZ2dlcnNcbiAgICB2YXIgaWQgPSB0aGlzLiRlbGVtZW50WzBdLmlkO1xuICAgICQoYFtkYXRhLW9wZW49XCIke2lkfVwiXSwgW2RhdGEtY2xvc2U9XCIke2lkfVwiXSwgW2RhdGEtdG9nZ2xlPVwiJHtpZH1cIl1gKVxuICAgICAgLmF0dHIoJ2FyaWEtY29udHJvbHMnLCBpZCk7XG4gICAgLy8gSWYgdGhlIHRhcmdldCBpcyBoaWRkZW4sIGFkZCBhcmlhLWhpZGRlblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1leHBhbmRlZCcsIHRoaXMuJGVsZW1lbnQuaXMoJzpoaWRkZW4nKSA/IGZhbHNlIDogdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgZXZlbnRzIGZvciB0aGUgdG9nZ2xlIHRyaWdnZXIuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZigndG9nZ2xlLnpmLnRyaWdnZXInKS5vbigndG9nZ2xlLnpmLnRyaWdnZXInLCB0aGlzLnRvZ2dsZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB0YXJnZXQgY2xhc3Mgb24gdGhlIHRhcmdldCBlbGVtZW50LiBBbiBldmVudCBpcyBmaXJlZCBmcm9tIHRoZSBvcmlnaW5hbCB0cmlnZ2VyIGRlcGVuZGluZyBvbiBpZiB0aGUgcmVzdWx0YW50IHN0YXRlIHdhcyBcIm9uXCIgb3IgXCJvZmZcIi5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBUb2dnbGVyI29uXG4gICAqIEBmaXJlcyBUb2dnbGVyI29mZlxuICAgKi9cbiAgdG9nZ2xlKCkge1xuICAgIHRoaXNbIHRoaXMub3B0aW9ucy5hbmltYXRlID8gJ190b2dnbGVBbmltYXRlJyA6ICdfdG9nZ2xlQ2xhc3MnXSgpO1xuICB9XG5cbiAgX3RvZ2dsZUNsYXNzKCkge1xuICAgIHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3ModGhpcy5jbGFzc05hbWUpO1xuXG4gICAgdmFyIGlzT24gPSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKHRoaXMuY2xhc3NOYW1lKTtcbiAgICBpZiAoaXNPbikge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXJlcyBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaGFzIHRoZSBjbGFzcyBhZnRlciBhIHRvZ2dsZS5cbiAgICAgICAqIEBldmVudCBUb2dnbGVyI29uXG4gICAgICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignb24uemYudG9nZ2xlcicpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8qKlxuICAgICAgICogRmlyZXMgaWYgdGhlIHRhcmdldCBlbGVtZW50IGRvZXMgbm90IGhhdmUgdGhlIGNsYXNzIGFmdGVyIGEgdG9nZ2xlLlxuICAgICAgICogQGV2ZW50IFRvZ2dsZXIjb2ZmXG4gICAgICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignb2ZmLnpmLnRvZ2dsZXInKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVBUklBKGlzT24pO1xuICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtbXV0YXRlXScpLnRyaWdnZXIoJ211dGF0ZW1lLnpmLnRyaWdnZXInKTtcbiAgfVxuXG4gIF90b2dnbGVBbmltYXRlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy4kZWxlbWVudC5pcygnOmhpZGRlbicpKSB7XG4gICAgICBGb3VuZGF0aW9uLk1vdGlvbi5hbmltYXRlSW4odGhpcy4kZWxlbWVudCwgdGhpcy5hbmltYXRpb25JbiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLl91cGRhdGVBUklBKHRydWUpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ29uLnpmLnRvZ2dsZXInKTtcbiAgICAgICAgdGhpcy5maW5kKCdbZGF0YS1tdXRhdGVdJykudHJpZ2dlcignbXV0YXRlbWUuemYudHJpZ2dlcicpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgRm91bmRhdGlvbi5Nb3Rpb24uYW5pbWF0ZU91dCh0aGlzLiRlbGVtZW50LCB0aGlzLmFuaW1hdGlvbk91dCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLl91cGRhdGVBUklBKGZhbHNlKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdvZmYuemYudG9nZ2xlcicpO1xuICAgICAgICB0aGlzLmZpbmQoJ1tkYXRhLW11dGF0ZV0nKS50cmlnZ2VyKCdtdXRhdGVtZS56Zi50cmlnZ2VyJyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBfdXBkYXRlQVJJQShpc09uKSB7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgaXNPbiA/IHRydWUgOiBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGluc3RhbmNlIG9mIFRvZ2dsZXIgb24gdGhlIGVsZW1lbnQuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZignLnpmLnRvZ2dsZXInKTtcbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuVG9nZ2xlci5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIFRlbGxzIHRoZSBwbHVnaW4gaWYgdGhlIGVsZW1lbnQgc2hvdWxkIGFuaW1hdGVkIHdoZW4gdG9nZ2xlZC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgYW5pbWF0ZTogZmFsc2Vcbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihUb2dnbGVyLCAnVG9nZ2xlcicpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogVG9vbHRpcCBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24udG9vbHRpcFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5ib3hcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICovXG5cbmNsYXNzIFRvb2x0aXAge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhIFRvb2x0aXAuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgVG9vbHRpcCNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhdHRhY2ggYSB0b29sdGlwIHRvLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9iamVjdCB0byBleHRlbmQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgVG9vbHRpcC5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDbGljayA9IGZhbHNlO1xuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ1Rvb2x0aXAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgdG9vbHRpcCBieSBzZXR0aW5nIHRoZSBjcmVhdGluZyB0aGUgdGlwIGVsZW1lbnQsIGFkZGluZyBpdCdzIHRleHQsIHNldHRpbmcgcHJpdmF0ZSB2YXJpYWJsZXMgYW5kIHNldHRpbmcgYXR0cmlidXRlcyBvbiB0aGUgYW5jaG9yLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIGVsZW1JZCA9IHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1kZXNjcmliZWRieScpIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ3Rvb2x0aXAnKTtcblxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbkNsYXNzID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uQ2xhc3MgfHwgdGhpcy5fZ2V0UG9zaXRpb25DbGFzcyh0aGlzLiRlbGVtZW50KTtcbiAgICB0aGlzLm9wdGlvbnMudGlwVGV4dCA9IHRoaXMub3B0aW9ucy50aXBUZXh0IHx8IHRoaXMuJGVsZW1lbnQuYXR0cigndGl0bGUnKTtcbiAgICB0aGlzLnRlbXBsYXRlID0gdGhpcy5vcHRpb25zLnRlbXBsYXRlID8gJCh0aGlzLm9wdGlvbnMudGVtcGxhdGUpIDogdGhpcy5fYnVpbGRUZW1wbGF0ZShlbGVtSWQpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hbGxvd0h0bWwpIHtcbiAgICAgIHRoaXMudGVtcGxhdGUuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSlcbiAgICAgICAgLmh0bWwodGhpcy5vcHRpb25zLnRpcFRleHQpXG4gICAgICAgIC5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVtcGxhdGUuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSlcbiAgICAgICAgLnRleHQodGhpcy5vcHRpb25zLnRpcFRleHQpXG4gICAgICAgIC5oaWRlKCk7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKHtcbiAgICAgICd0aXRsZSc6ICcnLFxuICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBlbGVtSWQsXG4gICAgICAnZGF0YS15ZXRpLWJveCc6IGVsZW1JZCxcbiAgICAgICdkYXRhLXRvZ2dsZSc6IGVsZW1JZCxcbiAgICAgICdkYXRhLXJlc2l6ZSc6IGVsZW1JZFxuICAgIH0pLmFkZENsYXNzKHRoaXMub3B0aW9ucy50cmlnZ2VyQ2xhc3MpO1xuXG4gICAgLy9oZWxwZXIgdmFyaWFibGVzIHRvIHRyYWNrIG1vdmVtZW50IG9uIGNvbGxpc2lvbnNcbiAgICB0aGlzLnVzZWRQb3NpdGlvbnMgPSBbXTtcbiAgICB0aGlzLmNvdW50ZXIgPSA0O1xuICAgIHRoaXMuY2xhc3NDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFicyB0aGUgY3VycmVudCBwb3NpdGlvbmluZyBjbGFzcywgaWYgcHJlc2VudCwgYW5kIHJldHVybnMgdGhlIHZhbHVlIG9yIGFuIGVtcHR5IHN0cmluZy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRQb3NpdGlvbkNsYXNzKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHsgcmV0dXJuICcnOyB9XG4gICAgLy8gdmFyIHBvc2l0aW9uID0gZWxlbWVudC5hdHRyKCdjbGFzcycpLm1hdGNoKC90b3B8bGVmdHxyaWdodC9nKTtcbiAgICB2YXIgcG9zaXRpb24gPSBlbGVtZW50WzBdLmNsYXNzTmFtZS5tYXRjaCgvXFxiKHRvcHxsZWZ0fHJpZ2h0KVxcYi9nKTtcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA/IHBvc2l0aW9uWzBdIDogJyc7XG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9O1xuICAvKipcbiAgICogYnVpbGRzIHRoZSB0b29sdGlwIGVsZW1lbnQsIGFkZHMgYXR0cmlidXRlcywgYW5kIHJldHVybnMgdGhlIHRlbXBsYXRlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2J1aWxkVGVtcGxhdGUoaWQpIHtcbiAgICB2YXIgdGVtcGxhdGVDbGFzc2VzID0gKGAke3RoaXMub3B0aW9ucy50b29sdGlwQ2xhc3N9ICR7dGhpcy5vcHRpb25zLnBvc2l0aW9uQ2xhc3N9ICR7dGhpcy5vcHRpb25zLnRlbXBsYXRlQ2xhc3Nlc31gKS50cmltKCk7XG4gICAgdmFyICR0ZW1wbGF0ZSA9ICAkKCc8ZGl2PjwvZGl2PicpLmFkZENsYXNzKHRlbXBsYXRlQ2xhc3NlcykuYXR0cih7XG4gICAgICAncm9sZSc6ICd0b29sdGlwJyxcbiAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICAnZGF0YS1pcy1hY3RpdmUnOiBmYWxzZSxcbiAgICAgICdkYXRhLWlzLWZvY3VzJzogZmFsc2UsXG4gICAgICAnaWQnOiBpZFxuICAgIH0pO1xuICAgIHJldHVybiAkdGVtcGxhdGU7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBpZiBhIGNvbGxpc2lvbiBldmVudCBpcyBkZXRlY3RlZC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHBvc2l0aW9uIC0gcG9zaXRpb25pbmcgY2xhc3MgdG8gdHJ5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVwb3NpdGlvbihwb3NpdGlvbikge1xuICAgIHRoaXMudXNlZFBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uID8gcG9zaXRpb24gOiAnYm90dG9tJyk7XG5cbiAgICAvL2RlZmF1bHQsIHRyeSBzd2l0Y2hpbmcgdG8gb3Bwb3NpdGUgc2lkZVxuICAgIGlmICghcG9zaXRpb24gJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCd0b3AnKSA8IDApKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLmFkZENsYXNzKCd0b3AnKTtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAndG9wJyAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbScpIDwgMCkpIHtcbiAgICAgIHRoaXMudGVtcGxhdGUucmVtb3ZlQ2xhc3MocG9zaXRpb24pO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdsZWZ0JyAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ3JpZ2h0JykgPCAwKSkge1xuICAgICAgdGhpcy50ZW1wbGF0ZS5yZW1vdmVDbGFzcyhwb3NpdGlvbilcbiAgICAgICAgICAuYWRkQ2xhc3MoJ3JpZ2h0Jyk7XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ3JpZ2h0JyAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2xlZnQnKSA8IDApKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLnJlbW92ZUNsYXNzKHBvc2l0aW9uKVxuICAgICAgICAgIC5hZGRDbGFzcygnbGVmdCcpO1xuICAgIH1cblxuICAgIC8vaWYgZGVmYXVsdCBjaGFuZ2UgZGlkbid0IHdvcmssIHRyeSBib3R0b20gb3IgbGVmdCBmaXJzdFxuICAgIGVsc2UgaWYgKCFwb3NpdGlvbiAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ3RvcCcpID4gLTEpICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignbGVmdCcpIDwgMCkpIHtcbiAgICAgIHRoaXMudGVtcGxhdGUuYWRkQ2xhc3MoJ2xlZnQnKTtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAndG9wJyAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbScpID4gLTEpICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignbGVmdCcpIDwgMCkpIHtcbiAgICAgIHRoaXMudGVtcGxhdGUucmVtb3ZlQ2xhc3MocG9zaXRpb24pXG4gICAgICAgICAgLmFkZENsYXNzKCdsZWZ0Jyk7XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2xlZnQnICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZigncmlnaHQnKSA+IC0xKSAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbScpIDwgMCkpIHtcbiAgICAgIHRoaXMudGVtcGxhdGUucmVtb3ZlQ2xhc3MocG9zaXRpb24pO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdyaWdodCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPiAtMSkgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdib3R0b20nKSA8IDApKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLnJlbW92ZUNsYXNzKHBvc2l0aW9uKTtcbiAgICB9XG4gICAgLy9pZiBub3RoaW5nIGNsZWFyZWQsIHNldCB0byBib3R0b21cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMudGVtcGxhdGUucmVtb3ZlQ2xhc3MocG9zaXRpb24pO1xuICAgIH1cbiAgICB0aGlzLmNsYXNzQ2hhbmdlZCA9IHRydWU7XG4gICAgdGhpcy5jb3VudGVyLS07XG4gIH1cblxuICAvKipcbiAgICogc2V0cyB0aGUgcG9zaXRpb24gY2xhc3Mgb2YgYW4gZWxlbWVudCBhbmQgcmVjdXJzaXZlbHkgY2FsbHMgaXRzZWxmIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIHBvc3NpYmxlIHBvc2l0aW9ucyB0byBhdHRlbXB0LCBvciB0aGUgdG9vbHRpcCBlbGVtZW50IGlzIG5vIGxvbmdlciBjb2xsaWRpbmcuXG4gICAqIGlmIHRoZSB0b29sdGlwIGlzIGxhcmdlciB0aGFuIHRoZSBzY3JlZW4gd2lkdGgsIGRlZmF1bHQgdG8gZnVsbCB3aWR0aCAtIGFueSB1c2VyIHNlbGVjdGVkIG1hcmdpblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFBvc2l0aW9uKCkge1xuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2dldFBvc2l0aW9uQ2xhc3ModGhpcy50ZW1wbGF0ZSksXG4gICAgICAgICR0aXBEaW1zID0gRm91bmRhdGlvbi5Cb3guR2V0RGltZW5zaW9ucyh0aGlzLnRlbXBsYXRlKSxcbiAgICAgICAgJGFuY2hvckRpbXMgPSBGb3VuZGF0aW9uLkJveC5HZXREaW1lbnNpb25zKHRoaXMuJGVsZW1lbnQpLFxuICAgICAgICBkaXJlY3Rpb24gPSAocG9zaXRpb24gPT09ICdsZWZ0JyA/ICdsZWZ0JyA6ICgocG9zaXRpb24gPT09ICdyaWdodCcpID8gJ2xlZnQnIDogJ3RvcCcpKSxcbiAgICAgICAgcGFyYW0gPSAoZGlyZWN0aW9uID09PSAndG9wJykgPyAnaGVpZ2h0JyA6ICd3aWR0aCcsXG4gICAgICAgIG9mZnNldCA9IChwYXJhbSA9PT0gJ2hlaWdodCcpID8gdGhpcy5vcHRpb25zLnZPZmZzZXQgOiB0aGlzLm9wdGlvbnMuaE9mZnNldCxcbiAgICAgICAgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKCgkdGlwRGltcy53aWR0aCA+PSAkdGlwRGltcy53aW5kb3dEaW1zLndpZHRoKSB8fCAoIXRoaXMuY291bnRlciAmJiAhRm91bmRhdGlvbi5Cb3guSW1Ob3RUb3VjaGluZ1lvdSh0aGlzLnRlbXBsYXRlKSkpIHtcbiAgICAgIHRoaXMudGVtcGxhdGUub2Zmc2V0KEZvdW5kYXRpb24uQm94LkdldE9mZnNldHModGhpcy50ZW1wbGF0ZSwgdGhpcy4kZWxlbWVudCwgJ2NlbnRlciBib3R0b20nLCB0aGlzLm9wdGlvbnMudk9mZnNldCwgdGhpcy5vcHRpb25zLmhPZmZzZXQsIHRydWUpKS5jc3Moe1xuICAgICAgLy8gdGhpcy4kZWxlbWVudC5vZmZzZXQoRm91bmRhdGlvbi5HZXRPZmZzZXRzKHRoaXMudGVtcGxhdGUsIHRoaXMuJGVsZW1lbnQsICdjZW50ZXIgYm90dG9tJywgdGhpcy5vcHRpb25zLnZPZmZzZXQsIHRoaXMub3B0aW9ucy5oT2Zmc2V0LCB0cnVlKSkuY3NzKHtcbiAgICAgICAgJ3dpZHRoJzogJGFuY2hvckRpbXMud2luZG93RGltcy53aWR0aCAtICh0aGlzLm9wdGlvbnMuaE9mZnNldCAqIDIpLFxuICAgICAgICAnaGVpZ2h0JzogJ2F1dG8nXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnRlbXBsYXRlLm9mZnNldChGb3VuZGF0aW9uLkJveC5HZXRPZmZzZXRzKHRoaXMudGVtcGxhdGUsIHRoaXMuJGVsZW1lbnQsJ2NlbnRlciAnICsgKHBvc2l0aW9uIHx8ICdib3R0b20nKSwgdGhpcy5vcHRpb25zLnZPZmZzZXQsIHRoaXMub3B0aW9ucy5oT2Zmc2V0KSk7XG5cbiAgICB3aGlsZSghRm91bmRhdGlvbi5Cb3guSW1Ob3RUb3VjaGluZ1lvdSh0aGlzLnRlbXBsYXRlKSAmJiB0aGlzLmNvdW50ZXIpIHtcbiAgICAgIHRoaXMuX3JlcG9zaXRpb24ocG9zaXRpb24pO1xuICAgICAgdGhpcy5fc2V0UG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmV2ZWFscyB0aGUgdG9vbHRpcCwgYW5kIGZpcmVzIGFuIGV2ZW50IHRvIGNsb3NlIGFueSBvdGhlciBvcGVuIHRvb2x0aXBzIG9uIHRoZSBwYWdlXG4gICAqIEBmaXJlcyBUb29sdGlwI2Nsb3NlbWVcbiAgICogQGZpcmVzIFRvb2x0aXAjc2hvd1xuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zaG93T24gIT09ICdhbGwnICYmICFGb3VuZGF0aW9uLk1lZGlhUXVlcnkuaXModGhpcy5vcHRpb25zLnNob3dPbikpIHtcbiAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ1RoZSBzY3JlZW4gaXMgdG9vIHNtYWxsIHRvIGRpc3BsYXkgdGhpcyB0b29sdGlwJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLnRlbXBsYXRlLmNzcygndmlzaWJpbGl0eScsICdoaWRkZW4nKS5zaG93KCk7XG4gICAgdGhpcy5fc2V0UG9zaXRpb24oKTtcblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHRvIGNsb3NlIGFsbCBvdGhlciBvcGVuIHRvb2x0aXBzIG9uIHRoZSBwYWdlXG4gICAgICogQGV2ZW50IENsb3NlbWUjdG9vbHRpcFxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2xvc2VtZS56Zi50b29sdGlwJywgdGhpcy50ZW1wbGF0ZS5hdHRyKCdpZCcpKTtcblxuXG4gICAgdGhpcy50ZW1wbGF0ZS5hdHRyKHtcbiAgICAgICdkYXRhLWlzLWFjdGl2ZSc6IHRydWUsXG4gICAgICAnYXJpYS1oaWRkZW4nOiBmYWxzZVxuICAgIH0pO1xuICAgIF90aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnRlbXBsYXRlKTtcbiAgICB0aGlzLnRlbXBsYXRlLnN0b3AoKS5oaWRlKCkuY3NzKCd2aXNpYmlsaXR5JywgJycpLmZhZGVJbih0aGlzLm9wdGlvbnMuZmFkZUluRHVyYXRpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgLy9tYXliZSBkbyBzdHVmZj9cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSB0b29sdGlwIGlzIHNob3duXG4gICAgICogQGV2ZW50IFRvb2x0aXAjc2hvd1xuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignc2hvdy56Zi50b29sdGlwJyk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgdGhlIGN1cnJlbnQgdG9vbHRpcCwgYW5kIHJlc2V0cyB0aGUgcG9zaXRpb25pbmcgY2xhc3MgaWYgaXQgd2FzIGNoYW5nZWQgZHVlIHRvIGNvbGxpc2lvblxuICAgKiBAZmlyZXMgVG9vbHRpcCNoaWRlXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgaGlkZSgpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnaGlkaW5nJywgdGhpcy4kZWxlbWVudC5kYXRhKCd5ZXRpLWJveCcpKTtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHRoaXMudGVtcGxhdGUuc3RvcCgpLmF0dHIoe1xuICAgICAgJ2FyaWEtaGlkZGVuJzogdHJ1ZSxcbiAgICAgICdkYXRhLWlzLWFjdGl2ZSc6IGZhbHNlXG4gICAgfSkuZmFkZU91dCh0aGlzLm9wdGlvbnMuZmFkZU91dER1cmF0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIF90aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICBfdGhpcy5pc0NsaWNrID0gZmFsc2U7XG4gICAgICBpZiAoX3RoaXMuY2xhc3NDaGFuZ2VkKSB7XG4gICAgICAgIF90aGlzLnRlbXBsYXRlXG4gICAgICAgICAgICAgLnJlbW92ZUNsYXNzKF90aGlzLl9nZXRQb3NpdGlvbkNsYXNzKF90aGlzLnRlbXBsYXRlKSlcbiAgICAgICAgICAgICAuYWRkQ2xhc3MoX3RoaXMub3B0aW9ucy5wb3NpdGlvbkNsYXNzKTtcblxuICAgICAgIF90aGlzLnVzZWRQb3NpdGlvbnMgPSBbXTtcbiAgICAgICBfdGhpcy5jb3VudGVyID0gNDtcbiAgICAgICBfdGhpcy5jbGFzc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBmaXJlcyB3aGVuIHRoZSB0b29sdGlwIGlzIGhpZGRlblxuICAgICAqIEBldmVudCBUb29sdGlwI2hpZGVcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2hpZGUuemYudG9vbHRpcCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIGFkZHMgZXZlbnQgbGlzdGVuZXJzIGZvciB0aGUgdG9vbHRpcCBhbmQgaXRzIGFuY2hvclxuICAgKiBUT0RPIGNvbWJpbmUgc29tZSBvZiB0aGUgbGlzdGVuZXJzIGxpa2UgZm9jdXMgYW5kIG1vdXNlZW50ZXIsIGV0Yy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgJHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZTtcbiAgICB2YXIgaXNGb2N1cyA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZGlzYWJsZUhvdmVyKSB7XG5cbiAgICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5vbignbW91c2VlbnRlci56Zi50b29sdGlwJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoIV90aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgX3RoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBfdGhpcy5zaG93KCk7XG4gICAgICAgICAgfSwgX3RoaXMub3B0aW9ucy5ob3ZlckRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignbW91c2VsZWF2ZS56Zi50b29sdGlwJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMudGltZW91dCk7XG4gICAgICAgIGlmICghaXNGb2N1cyB8fCAoX3RoaXMuaXNDbGljayAmJiAhX3RoaXMub3B0aW9ucy5jbGlja09wZW4pKSB7XG4gICAgICAgICAgX3RoaXMuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNsaWNrT3Blbikge1xuICAgICAgdGhpcy4kZWxlbWVudC5vbignbW91c2Vkb3duLnpmLnRvb2x0aXAnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChfdGhpcy5pc0NsaWNrKSB7XG4gICAgICAgICAgLy9fdGhpcy5oaWRlKCk7XG4gICAgICAgICAgLy8gX3RoaXMuaXNDbGljayA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLmlzQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgIGlmICgoX3RoaXMub3B0aW9ucy5kaXNhYmxlSG92ZXIgfHwgIV90aGlzLiRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JykpICYmICFfdGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgX3RoaXMuc2hvdygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ21vdXNlZG93bi56Zi50b29sdGlwJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBfdGhpcy5pc0NsaWNrID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRpb25zLmRpc2FibGVGb3JUb3VjaCkge1xuICAgICAgdGhpcy4kZWxlbWVudFxuICAgICAgLm9uKCd0YXAuemYudG9vbHRpcCB0b3VjaGVuZC56Zi50b29sdGlwJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBfdGhpcy5pc0FjdGl2ZSA/IF90aGlzLmhpZGUoKSA6IF90aGlzLnNob3coKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuJGVsZW1lbnQub24oe1xuICAgICAgLy8gJ3RvZ2dsZS56Zi50cmlnZ2VyJzogdGhpcy50b2dnbGUuYmluZCh0aGlzKSxcbiAgICAgIC8vICdjbG9zZS56Zi50cmlnZ2VyJzogdGhpcy5oaWRlLmJpbmQodGhpcylcbiAgICAgICdjbG9zZS56Zi50cmlnZ2VyJzogdGhpcy5oaWRlLmJpbmQodGhpcylcbiAgICB9KTtcblxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5vbignZm9jdXMuemYudG9vbHRpcCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaXNGb2N1cyA9IHRydWU7XG4gICAgICAgIGlmIChfdGhpcy5pc0NsaWNrKSB7XG4gICAgICAgICAgLy8gSWYgd2UncmUgbm90IHNob3dpbmcgb3BlbiBvbiBjbGlja3MsIHdlIG5lZWQgdG8gcHJldGVuZCBhIGNsaWNrLWxhdW5jaGVkIGZvY3VzIGlzbid0XG4gICAgICAgICAgLy8gYSByZWFsIGZvY3VzLCBvdGhlcndpc2Ugb24gaG92ZXIgYW5kIGNvbWUgYmFjayB3ZSBnZXQgYmFkIGJlaGF2aW9yXG4gICAgICAgICAgaWYoIV90aGlzLm9wdGlvbnMuY2xpY2tPcGVuKSB7IGlzRm9jdXMgPSBmYWxzZTsgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5zaG93KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC5vbignZm9jdXNvdXQuemYudG9vbHRpcCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaXNGb2N1cyA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5pc0NsaWNrID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhpZGUoKTtcbiAgICAgIH0pXG5cbiAgICAgIC5vbigncmVzaXplbWUuemYudHJpZ2dlcicsIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoX3RoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICBfdGhpcy5fc2V0UG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogYWRkcyBhIHRvZ2dsZSBtZXRob2QsIGluIGFkZGl0aW9uIHRvIHRoZSBzdGF0aWMgc2hvdygpICYgaGlkZSgpIGZ1bmN0aW9uc1xuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyBhbiBpbnN0YW5jZSBvZiB0b29sdGlwLCByZW1vdmVzIHRlbXBsYXRlIGVsZW1lbnQgZnJvbSB0aGUgdmlldy5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuJGVsZW1lbnQuYXR0cigndGl0bGUnLCB0aGlzLnRlbXBsYXRlLnRleHQoKSlcbiAgICAgICAgICAgICAgICAgLm9mZignLnpmLnRyaWdnZXIgLnpmLnRvb2x0aXAnKVxuICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2hhcy10aXAgdG9wIHJpZ2h0IGxlZnQnKVxuICAgICAgICAgICAgICAgICAucmVtb3ZlQXR0cignYXJpYS1kZXNjcmliZWRieSBhcmlhLWhhc3BvcHVwIGRhdGEtZGlzYWJsZS1ob3ZlciBkYXRhLXJlc2l6ZSBkYXRhLXRvZ2dsZSBkYXRhLXRvb2x0aXAgZGF0YS15ZXRpLWJveCcpO1xuXG4gICAgdGhpcy50ZW1wbGF0ZS5yZW1vdmUoKTtcblxuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfVxufVxuXG5Ub29sdGlwLmRlZmF1bHRzID0ge1xuICBkaXNhYmxlRm9yVG91Y2g6IGZhbHNlLFxuICAvKipcbiAgICogVGltZSwgaW4gbXMsIGJlZm9yZSBhIHRvb2x0aXAgc2hvdWxkIG9wZW4gb24gaG92ZXIuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMjAwXG4gICAqL1xuICBob3ZlckRlbGF5OiAyMDAsXG4gIC8qKlxuICAgKiBUaW1lLCBpbiBtcywgYSB0b29sdGlwIHNob3VsZCB0YWtlIHRvIGZhZGUgaW50byB2aWV3LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDE1MFxuICAgKi9cbiAgZmFkZUluRHVyYXRpb246IDE1MCxcbiAgLyoqXG4gICAqIFRpbWUsIGluIG1zLCBhIHRvb2x0aXAgc2hvdWxkIHRha2UgdG8gZmFkZSBvdXQgb2Ygdmlldy5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAxNTBcbiAgICovXG4gIGZhZGVPdXREdXJhdGlvbjogMTUwLFxuICAvKipcbiAgICogRGlzYWJsZXMgaG92ZXIgZXZlbnRzIGZyb20gb3BlbmluZyB0aGUgdG9vbHRpcCBpZiBzZXQgdG8gdHJ1ZVxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBkaXNhYmxlSG92ZXI6IGZhbHNlLFxuICAvKipcbiAgICogT3B0aW9uYWwgYWRkdGlvbmFsIGNsYXNzZXMgdG8gYXBwbHkgdG8gdGhlIHRvb2x0aXAgdGVtcGxhdGUgb24gaW5pdC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnbXktY29vbC10aXAtY2xhc3MnXG4gICAqL1xuICB0ZW1wbGF0ZUNsYXNzZXM6ICcnLFxuICAvKipcbiAgICogTm9uLW9wdGlvbmFsIGNsYXNzIGFkZGVkIHRvIHRvb2x0aXAgdGVtcGxhdGVzLiBGb3VuZGF0aW9uIGRlZmF1bHQgaXMgJ3Rvb2x0aXAnLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICd0b29sdGlwJ1xuICAgKi9cbiAgdG9vbHRpcENsYXNzOiAndG9vbHRpcCcsXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIHRoZSB0b29sdGlwIGFuY2hvciBlbGVtZW50LlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdoYXMtdGlwJ1xuICAgKi9cbiAgdHJpZ2dlckNsYXNzOiAnaGFzLXRpcCcsXG4gIC8qKlxuICAgKiBNaW5pbXVtIGJyZWFrcG9pbnQgc2l6ZSBhdCB3aGljaCB0byBvcGVuIHRoZSB0b29sdGlwLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdzbWFsbCdcbiAgICovXG4gIHNob3dPbjogJ3NtYWxsJyxcbiAgLyoqXG4gICAqIEN1c3RvbSB0ZW1wbGF0ZSB0byBiZSB1c2VkIHRvIGdlbmVyYXRlIG1hcmt1cCBmb3IgdG9vbHRpcC5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSAnJmx0O2RpdiBjbGFzcz1cInRvb2x0aXBcIiZndDsmbHQ7L2RpdiZndDsnXG4gICAqL1xuICB0ZW1wbGF0ZTogJycsXG4gIC8qKlxuICAgKiBUZXh0IGRpc3BsYXllZCBpbiB0aGUgdG9vbHRpcCB0ZW1wbGF0ZSBvbiBvcGVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlICdTb21lIGNvb2wgc3BhY2UgZmFjdCBoZXJlLidcbiAgICovXG4gIHRpcFRleHQ6ICcnLFxuICB0b3VjaENsb3NlVGV4dDogJ1RhcCB0byBjbG9zZS4nLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSB0b29sdGlwIHRvIHJlbWFpbiBvcGVuIGlmIHRyaWdnZXJlZCB3aXRoIGEgY2xpY2sgb3IgdG91Y2ggZXZlbnQuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgdHJ1ZVxuICAgKi9cbiAgY2xpY2tPcGVuOiB0cnVlLFxuICAvKipcbiAgICogQWRkaXRpb25hbCBwb3NpdGlvbmluZyBjbGFzc2VzLCBzZXQgYnkgdGhlIEpTXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgJ3RvcCdcbiAgICovXG4gIHBvc2l0aW9uQ2xhc3M6ICcnLFxuICAvKipcbiAgICogRGlzdGFuY2UsIGluIHBpeGVscywgdGhlIHRlbXBsYXRlIHNob3VsZCBwdXNoIGF3YXkgZnJvbSB0aGUgYW5jaG9yIG9uIHRoZSBZIGF4aXMuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgMTBcbiAgICovXG4gIHZPZmZzZXQ6IDEwLFxuICAvKipcbiAgICogRGlzdGFuY2UsIGluIHBpeGVscywgdGhlIHRlbXBsYXRlIHNob3VsZCBwdXNoIGF3YXkgZnJvbSB0aGUgYW5jaG9yIG9uIHRoZSBYIGF4aXMsIGlmIGFsaWduZWQgdG8gYSBzaWRlLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIDEyXG4gICAqL1xuICBoT2Zmc2V0OiAxMixcbiAgICAvKipcbiAgICogQWxsb3cgSFRNTCBpbiB0b29sdGlwLiBXYXJuaW5nOiBJZiB5b3UgYXJlIGxvYWRpbmcgdXNlci1nZW5lcmF0ZWQgY29udGVudCBpbnRvIHRvb2x0aXBzLFxuICAgKiBhbGxvd2luZyBIVE1MIG1heSBvcGVuIHlvdXJzZWxmIHVwIHRvIFhTUyBhdHRhY2tzLlxuICAgKiBAb3B0aW9uXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICBhbGxvd0h0bWw6IGZhbHNlXG59O1xuXG4vKipcbiAqIFRPRE8gdXRpbGl6ZSByZXNpemUgZXZlbnQgdHJpZ2dlclxuICovXG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihUb29sdGlwLCAnVG9vbHRpcCcpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIFBvbHlmaWxsIGZvciByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbihmdW5jdGlvbigpIHtcbiAgaWYgKCFEYXRlLm5vdylcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH07XG5cbiAgdmFyIHZlbmRvcnMgPSBbJ3dlYmtpdCcsICdtb3onXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZW5kb3JzLmxlbmd0aCAmJiAhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKytpKSB7XG4gICAgICB2YXIgdnAgPSB2ZW5kb3JzW2ldO1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvd1t2cCsnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSAod2luZG93W3ZwKydDYW5jZWxBbmltYXRpb25GcmFtZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB3aW5kb3dbdnArJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddKTtcbiAgfVxuICBpZiAoL2lQKGFkfGhvbmV8b2QpLipPUyA2Ly50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KVxuICAgIHx8ICF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8ICF3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICB2YXIgbGFzdFRpbWUgPSAwO1xuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdmFyIG5leHRUaW1lID0gTWF0aC5tYXgobGFzdFRpbWUgKyAxNiwgbm93KTtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKGxhc3RUaW1lID0gbmV4dFRpbWUpOyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0VGltZSAtIG5vdyk7XG4gICAgfTtcbiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBjbGVhclRpbWVvdXQ7XG4gIH1cbn0pKCk7XG5cbnZhciBpbml0Q2xhc3NlcyAgID0gWydtdWktZW50ZXInLCAnbXVpLWxlYXZlJ107XG52YXIgYWN0aXZlQ2xhc3NlcyA9IFsnbXVpLWVudGVyLWFjdGl2ZScsICdtdWktbGVhdmUtYWN0aXZlJ107XG5cbi8vIEZpbmQgdGhlIHJpZ2h0IFwidHJhbnNpdGlvbmVuZFwiIGV2ZW50IGZvciB0aGlzIGJyb3dzZXJcbnZhciBlbmRFdmVudCA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHRyYW5zaXRpb25zID0ge1xuICAgICd0cmFuc2l0aW9uJzogJ3RyYW5zaXRpb25lbmQnLFxuICAgICdXZWJraXRUcmFuc2l0aW9uJzogJ3dlYmtpdFRyYW5zaXRpb25FbmQnLFxuICAgICdNb3pUcmFuc2l0aW9uJzogJ3RyYW5zaXRpb25lbmQnLFxuICAgICdPVHJhbnNpdGlvbic6ICdvdHJhbnNpdGlvbmVuZCdcbiAgfVxuICB2YXIgZWxlbSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICBmb3IgKHZhciB0IGluIHRyYW5zaXRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBlbGVtLnN0eWxlW3RdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRyYW5zaXRpb25zW3RdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSkoKTtcblxuZnVuY3Rpb24gYW5pbWF0ZShpc0luLCBlbGVtZW50LCBhbmltYXRpb24sIGNiKSB7XG4gIGVsZW1lbnQgPSAkKGVsZW1lbnQpLmVxKDApO1xuXG4gIGlmICghZWxlbWVudC5sZW5ndGgpIHJldHVybjtcblxuICBpZiAoZW5kRXZlbnQgPT09IG51bGwpIHtcbiAgICBpc0luID8gZWxlbWVudC5zaG93KCkgOiBlbGVtZW50LmhpZGUoKTtcbiAgICBjYigpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBpbml0Q2xhc3MgPSBpc0luID8gaW5pdENsYXNzZXNbMF0gOiBpbml0Q2xhc3Nlc1sxXTtcbiAgdmFyIGFjdGl2ZUNsYXNzID0gaXNJbiA/IGFjdGl2ZUNsYXNzZXNbMF0gOiBhY3RpdmVDbGFzc2VzWzFdO1xuXG4gIC8vIFNldCB1cCB0aGUgYW5pbWF0aW9uXG4gIHJlc2V0KCk7XG4gIGVsZW1lbnQuYWRkQ2xhc3MoYW5pbWF0aW9uKTtcbiAgZWxlbWVudC5jc3MoJ3RyYW5zaXRpb24nLCAnbm9uZScpO1xuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7XG4gICAgZWxlbWVudC5hZGRDbGFzcyhpbml0Q2xhc3MpO1xuICAgIGlmIChpc0luKSBlbGVtZW50LnNob3coKTtcbiAgfSk7XG5cbiAgLy8gU3RhcnQgdGhlIGFuaW1hdGlvblxuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7XG4gICAgZWxlbWVudFswXS5vZmZzZXRXaWR0aDtcbiAgICBlbGVtZW50LmNzcygndHJhbnNpdGlvbicsICcnKTtcbiAgICBlbGVtZW50LmFkZENsYXNzKGFjdGl2ZUNsYXNzKTtcbiAgfSk7XG5cbiAgLy8gQ2xlYW4gdXAgdGhlIGFuaW1hdGlvbiB3aGVuIGl0IGZpbmlzaGVzXG4gIGVsZW1lbnQub25lKCd0cmFuc2l0aW9uZW5kJywgZmluaXNoKTtcblxuICAvLyBIaWRlcyB0aGUgZWxlbWVudCAoZm9yIG91dCBhbmltYXRpb25zKSwgcmVzZXRzIHRoZSBlbGVtZW50LCBhbmQgcnVucyBhIGNhbGxiYWNrXG4gIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICBpZiAoIWlzSW4pIGVsZW1lbnQuaGlkZSgpO1xuICAgIHJlc2V0KCk7XG4gICAgaWYgKGNiKSBjYi5hcHBseShlbGVtZW50KTtcbiAgfVxuXG4gIC8vIFJlc2V0cyB0cmFuc2l0aW9ucyBhbmQgcmVtb3ZlcyBtb3Rpb24tc3BlY2lmaWMgY2xhc3Nlc1xuICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBlbGVtZW50WzBdLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IDA7XG4gICAgZWxlbWVudC5yZW1vdmVDbGFzcyhpbml0Q2xhc3MgKyAnICcgKyBhY3RpdmVDbGFzcyArICcgJyArIGFuaW1hdGlvbik7XG4gIH1cbn1cblxudmFyIE1vdGlvblVJID0ge1xuICBhbmltYXRlSW46IGZ1bmN0aW9uKGVsZW1lbnQsIGFuaW1hdGlvbiwgY2IpIHtcbiAgICBhbmltYXRlKHRydWUsIGVsZW1lbnQsIGFuaW1hdGlvbiwgY2IpO1xuICB9LFxuXG4gIGFuaW1hdGVPdXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGFuaW1hdGlvbiwgY2IpIHtcbiAgICBhbmltYXRlKGZhbHNlLCBlbGVtZW50LCBhbmltYXRpb24sIGNiKTtcbiAgfVxufVxuIiwialF1ZXJ5KCAnaWZyYW1lW3NyYyo9XCJ5b3V0dWJlLmNvbVwiXScpLndyYXAoXCI8ZGl2IGNsYXNzPSdmbGV4LXZpZGVvIHdpZGVzY3JlZW4nLz5cIik7XG5qUXVlcnkoICdpZnJhbWVbc3JjKj1cInZpbWVvLmNvbVwiXScpLndyYXAoXCI8ZGl2IGNsYXNzPSdmbGV4LXZpZGVvIHdpZGVzY3JlZW4gdmltZW8nLz5cIik7XG4iLCJqUXVlcnkoZG9jdW1lbnQpLmZvdW5kYXRpb24oKTtcbiIsIi8vIEpveXJpZGUgZGVtb1xuJCgnI3N0YXJ0LWpyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICQoZG9jdW1lbnQpLmZvdW5kYXRpb24oJ2pveXJpZGUnLCdzdGFydCcpO1xufSk7IiwiIiwiJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgIHZhciB2aWRlb3MgPSAkKCdpZnJhbWVbc3JjKj1cInZpbWVvLmNvbVwiXSwgaWZyYW1lW3NyYyo9XCJ5b3V0dWJlLmNvbVwiXScpO1xuXG4gICAgdmlkZW9zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZWwgPSAkKHRoaXMpO1xuICAgICAgICBlbC53cmFwKCc8ZGl2IGNsYXNzPVwicmVzcG9uc2l2ZS1lbWJlZCB3aWRlc2NyZWVuXCIvPicpO1xuICAgIH0pO1xufSk7XG4iLCJcbiQod2luZG93KS5iaW5kKCcgbG9hZCByZXNpemUgb3JpZW50YXRpb25DaGFuZ2UgJywgZnVuY3Rpb24gKCkge1xuICAgdmFyIGZvb3RlciA9ICQoXCIjZm9vdGVyLWNvbnRhaW5lclwiKTtcbiAgIHZhciBwb3MgPSBmb290ZXIucG9zaXRpb24oKTtcbiAgIHZhciBoZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCk7XG4gICBoZWlnaHQgPSBoZWlnaHQgLSBwb3MudG9wO1xuICAgaGVpZ2h0ID0gaGVpZ2h0IC0gZm9vdGVyLmhlaWdodCgpIC0xO1xuXG4gICBmdW5jdGlvbiBzdGlja3lGb290ZXIoKSB7XG4gICAgIGZvb3Rlci5jc3Moe1xuICAgICAgICAgJ21hcmdpbi10b3AnOiBoZWlnaHQgKyAncHgnXG4gICAgIH0pO1xuICAgfVxuXG4gICBpZiAoaGVpZ2h0ID4gMCkge1xuICAgICBzdGlja3lGb290ZXIoKTtcbiAgIH1cbn0pO1xuIl19 diff --git a/web/app/themes/oe-brixton/assets/scss/components/_buttons.scss b/web/app/themes/oe-brixton/assets/scss/components/_buttons.scss old mode 100755 new mode 100644 index e4f8e26..421bbde --- a/web/app/themes/oe-brixton/assets/scss/components/_buttons.scss +++ b/web/app/themes/oe-brixton/assets/scss/components/_buttons.scss @@ -6,16 +6,3 @@ border-radius: 3px; border: none; } -a.home-hero-button { - background: transparent; - font-size: 1.7rem; - color: $white; - border: 1px solid $white; - padding: 15px; -} - - -a.home-hero-button:hover { - background-color: rgba(254, 254, 254, 0.19); - color: $global-logo-color; -} diff --git a/web/app/themes/oe-brixton/assets/scss/components/_cards.scss b/web/app/themes/oe-brixton/assets/scss/components/_cards.scss new file mode 100644 index 0000000..c55254d --- /dev/null +++ b/web/app/themes/oe-brixton/assets/scss/components/_cards.scss @@ -0,0 +1,29 @@ +.flex-card-example { + @include breakpoint(small) { + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: space-between; + } + + @include breakpoint(medium) { + flex-direction: row; + } + + .card { + + @include breakpoint(small) { + width: 100%; + img { width: 100%; } + } + + @include breakpoint(medium) { + width: 32%; + } + + .card-content { + padding: 1rem; + } + + } +} diff --git a/web/app/themes/oe-brixton/assets/scss/components/_dividers.scss b/web/app/themes/oe-brixton/assets/scss/components/_dividers.scss old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/scss/components/_featured-image.scss b/web/app/themes/oe-brixton/assets/scss/components/_featured-image.scss old mode 100755 new mode 100644 index 14425b3..8ddd687 --- a/web/app/themes/oe-brixton/assets/scss/components/_featured-image.scss +++ b/web/app/themes/oe-brixton/assets/scss/components/_featured-image.scss @@ -1,20 +1,14 @@ -@include breakpoint(small) { - #featured-hero { - background-size: cover; - background-position: center; - background-repeat: no-repeat; - margin: 0 0 rem-calc(32); - position: relative; - height: rem-calc(200); - } +#featured-hero { + background-size: cover; + background-position: center; + background-repeat: no-repeat; + height: rem-calc(100); - .no-featured-image-set { - height: rem-calc(16) !important; - } -} + @include breakpoint(medium) { + height: rem-calc(200); + } -@include breakpoint(medium) { - #featured-hero { - height: rem-calc(400); - } + @include breakpoint(xlarge) { + height: rem-calc(400); + } } diff --git a/web/app/themes/oe-brixton/assets/scss/components/_links.scss b/web/app/themes/oe-brixton/assets/scss/components/_links.scss old mode 100755 new mode 100644 index 8ec7116..86bc956 --- a/web/app/themes/oe-brixton/assets/scss/components/_links.scss +++ b/web/app/themes/oe-brixton/assets/scss/components/_links.scss @@ -1,7 +1,7 @@ -/* Apply outline styles only when input method is keyboard - * remove :focus style via What Input using progressive enhancement - * so :focus isn't left broken if JavaScript fails - */ +// Apply outline styles only when input method is keyboard +// remove :focus style via What Input using progressive enhancement +// so :focus isn't left broken if JavaScript fails + [data-whatinput="mouse"] a:focus, button:focus [data-whatinput="touch"] a:focus, button:focus { outline: none; diff --git a/web/app/themes/oe-brixton/assets/scss/components/_page-builder.scss b/web/app/themes/oe-brixton/assets/scss/components/_page-builder.scss deleted file mode 100755 index 1a82995..0000000 --- a/web/app/themes/oe-brixton/assets/scss/components/_page-builder.scss +++ /dev/null @@ -1,46 +0,0 @@ -/* -* to use in the Page builder -*/ - -.panel-row-style-separator { -.sow-slider-image-wrapper { - padding-top: 90px !important; - @include breakpoint(small) { - padding-top: 20px !important; - } - @include breakpoint(medium) { - padding-top: 200px !important; - } -} -} - -.panel-row-style-home-hero-banner { - .home-hero.panel-widget-style { - .sow-slider-image-wrapper { - @include breakpoint(small) { - padding-top: 80px !important; - } - @include breakpoint(medium) { - padding-top: 350px !important; - } - } - } -} - - - - -.sow-slider-image-wrapper { - .sow-slider-content-wrapper { - .sow-slider-content { - color: $white; - font-size: 4rem; - line-height: 5rem; - margin-bottom: 70px; - } - } -} - -.more-down { - margin-top: 250px; -} diff --git a/web/app/themes/oe-brixton/assets/scss/components/_preloader b/web/app/themes/oe-brixton/assets/scss/components/_preloader deleted file mode 100755 index 96ff7f7..0000000 --- a/web/app/themes/oe-brixton/assets/scss/components/_preloader +++ /dev/null @@ -1,10 +0,0 @@ -.js div#preloader { - position: fixed; - left: 0; - top: 0; - z-index: 999; - width: 100%; - height: 100%; - overflow: visible; - background: #333 url('http://files.mimoymima.com/images/loading.gif') no-repeat center center; -} diff --git a/web/app/themes/oe-brixton/assets/scss/foundation.scss b/web/app/themes/oe-brixton/assets/scss/foundation.scss old mode 100755 new mode 100644 index fcec0dd..3526c67 --- a/web/app/themes/oe-brixton/assets/scss/foundation.scss +++ b/web/app/themes/oe-brixton/assets/scss/foundation.scss @@ -16,6 +16,7 @@ // WP overrides @import "global/wp-admin"; // Fix issues with wp-admin bar positioning @import "global/wp-overrides"; // Override the default WordPress styling for some elements +@import "global/accessibility"; // Third-party libraries @import 'font-awesome'; @@ -28,29 +29,28 @@ @include foundation-grid; // @include foundation-flex-grid; @include foundation-typography; -@include foundation-button; @include foundation-forms; -@include foundation-range-input; +@include foundation-button; @include foundation-accordion; @include foundation-accordion-menu; @include foundation-badge; @include foundation-breadcrumbs; @include foundation-button-group; @include foundation-callout; +@include foundation-card; @include foundation-close-button; +@include foundation-menu; +@include foundation-menu-icon; @include foundation-drilldown-menu; @include foundation-dropdown; @include foundation-dropdown-menu; -@include foundation-flex-video; +@include foundation-responsive-embed; @include foundation-label; @include foundation-media-object; -@include foundation-menu; @include foundation-off-canvas; @include foundation-orbit; @include foundation-pagination; @include foundation-progress-bar; -@include foundation-progress-element; -@include foundation-meter-element; @include foundation-slider; @include foundation-sticky; @include foundation-reveal; @@ -63,7 +63,6 @@ @include foundation-top-bar; @include foundation-visibility-classes; @include foundation-float-classes; -@include foundation-menu-icon; // @include foundation-flex-classes; // Motion UI @@ -79,17 +78,14 @@ @import "modules/navigation"; @import "modules/footer"; @import "modules/sidebar"; +@import "modules/editor-style"; // Components @import "components/buttons"; +@import "components/cards"; @import "components/featured-image"; @import "components/dividers"; @import "components/links"; -@import "components/page-builder"; -@import "components/preloader"; - -// Typography -@import "typography/base"; // Templates @import "templates/front"; @@ -98,4 +94,3 @@ @import "templates/page-sidebar-left"; @import "templates/page-full-width"; @import "templates/single-post"; -@import "templates/list-posts"; diff --git a/web/app/themes/oe-brixton/assets/scss/global/_accessibility.scss b/web/app/themes/oe-brixton/assets/scss/global/_accessibility.scss new file mode 100644 index 0000000..27f4ecb --- /dev/null +++ b/web/app/themes/oe-brixton/assets/scss/global/_accessibility.scss @@ -0,0 +1,29 @@ +// Text meant only for screen readers. Addresses part of theme-check issue #840. +// https://github.com/Automattic/_s/blob/master/style.css +.screen-reader-text { + clip: rect(1px, 1px, 1px, 1px); + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; +} + +.screen-reader-text:focus { + background-color: #f1f1f1; + border-radius: 3px; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + color: #21759b; + display: block; + font-size: 14px; + font-size: 0.875rem; + font-weight: bold; + height: auto; + left: 5px; + line-height: normal; + padding: 15px 23px 14px; + text-decoration: none; + top: 5px; + width: auto; + z-index: 100000; // Above WP toolbar. +} diff --git a/web/app/themes/oe-brixton/assets/scss/global/_settings.scss b/web/app/themes/oe-brixton/assets/scss/global/_settings.scss old mode 100755 new mode 100644 index 8d2a49f..79db2f5 --- a/web/app/themes/oe-brixton/assets/scss/global/_settings.scss +++ b/web/app/themes/oe-brixton/assets/scss/global/_settings.scss @@ -16,11 +16,11 @@ // 11. Button // 12. Button Group // 13. Callout -// 14. Close Button -// 15. Drilldown -// 16. Dropdown -// 17. Dropdown Menu -// 18. Flex Video +// 14. Card +// 15. Close Button +// 16. Drilldown +// 17. Dropdown +// 18. Dropdown Menu // 19. Forms // 20. Label // 21. Media Object @@ -30,40 +30,41 @@ // 25. Orbit // 26. Pagination // 27. Progress Bar -// 28. Reveal -// 29. Slider -// 30. Switch -// 31. Table -// 32. Tabs -// 33. Thumbnail -// 34. Title Bar -// 35. Tooltip -// 36. Top Bar +// 28. Responsive Embed +// 29. Reveal +// 30. Slider +// 31. Switch +// 32. Table +// 33. Tabs +// 34. Thumbnail +// 35. Title Bar +// 36. Tooltip +// 37. Top Bar @import '../../components/foundation-sites/scss/util/util'; -@import url(https://fonts.googleapis.com/css?family=Raleway); - // 1. Global // --------- -$global-font-family: 'Raleway', 'Helvetica Neue', Helvetica, Arial, sans-serif; -$global-logo-color: #3f47cc; + $global-font-size: 100%; $global-width: rem-calc(1200); $global-lineheight: 1.5; -$primary-color: $global-logo-color; -$secondary-color: #777; -$success-color: #3adb76; -$warning-color: #ffae00; -$alert-color: #ec5840; +$foundation-palette: ( + primary: #1779ba, + secondary: #767676, + success: #3adb76, + warning: #ffae00, + alert: #cc4b37, +); $light-gray: #e6e6e6; $medium-gray: #cacaca; $dark-gray: #8a8a8a; $black: #0a0a0a; $white: #fefefe; +$outer-space: #2c3840; $body-background: $white; $body-font-color: $black; -$body-font-family: $global-font-family; +$body-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; $body-antialiased: true; $global-margin: 1rem; $global-padding: 1rem; @@ -73,7 +74,8 @@ $global-radius: 0; $global-text-direction: ltr; $global-flexbox: false; $print-transparent-backgrounds: true; -$footer-background: #272727; + +@include add-foundation-colors; // 2. Breakpoints // -------------- @@ -85,6 +87,7 @@ $breakpoints: ( xlarge: 1200px, xxlarge: 1440px, ); +$print-breakpoint: large; $breakpoint-classes: (small medium large); // 3. The Grid @@ -106,27 +109,27 @@ $header-font-family: $body-font-family; $header-font-weight: $global-weight-normal; $header-font-style: normal; $font-family-monospace: Consolas, 'Liberation Mono', Courier, monospace; -$header-sizes: ( +$header-color: inherit; +$header-lineheight: 1.4; +$header-margin-bottom: 0.5rem; +$header-styles: ( small: ( - 'h1': 24, - 'h2': 20, - 'h3': 19, - 'h4': 18, - 'h5': 17, - 'h6': 16, + 'h1': ('font-size': 24), + 'h2': ('font-size': 20), + 'h3': ('font-size': 19), + 'h4': ('font-size': 18), + 'h5': ('font-size': 17), + 'h6': ('font-size': 16), ), medium: ( - 'h1': 48, - 'h2': 40, - 'h3': 31, - 'h4': 25, - 'h5': 20, - 'h6': 16, + 'h1': ('font-size': 48), + 'h2': ('font-size': 40), + 'h3': ('font-size': 31), + 'h4': ('font-size': 25), + 'h5': ('font-size': 20), + 'h6': ('font-size': 16), ), ); -$header-color: inherit; -$header-lineheight: 1.4; -$header-margin-bottom: 0.5rem; $header-text-rendering: optimizeLegibility; $small-font-size: 80%; $header-small-font-color: $medium-gray; @@ -160,6 +163,7 @@ $blockquote-padding: rem-calc(9 20 0 19); $blockquote-border: 1px solid $medium-gray; $cite-font-size: rem-calc(13); $cite-color: $dark-gray; +$cite-pseudo-content: '\2014 \0020'; $keystroke-font: $font-family-monospace; $keystroke-color: $black; $keystroke-background: $light-gray; @@ -184,9 +188,9 @@ $stat-font-size: 2.5rem; $abide-inputs: true; $abide-labels: true; -$input-background-invalid: $alert-color; -$form-label-color-invalid: $alert-color; -$input-error-color: $alert-color; +$input-background-invalid: get-color(alert); +$form-label-color-invalid: get-color(alert); +$input-error-color: get-color(alert); $input-error-font-size: rem-calc(12); $input-error-font-weight: $global-weight-bold; @@ -195,12 +199,13 @@ $input-error-font-weight: $global-weight-bold; $accordion-background: $white; $accordion-plusminus: true; -$accordion-item-color: foreground($accordion-background, $primary-color); +$accordion-title-font-size: rem-calc(12); +$accordion-item-color: $primary-color; $accordion-item-background-hover: $light-gray; $accordion-item-padding: 1.25rem 1rem; $accordion-content-background: $white; $accordion-content-border: 1px solid $light-gray; -$accordion-content-color: foreground($accordion-background, $primary-color); +$accordion-content-color: $body-font-color; $accordion-content-padding: 1rem; // 8. Accordion Menu @@ -208,12 +213,15 @@ $accordion-content-padding: 1rem; $accordionmenu-arrows: true; $accordionmenu-arrow-color: $primary-color; +$accordionmenu-arrow-size: 6px; // 9. Badge // -------- $badge-background: $primary-color; -$badge-color: foreground($badge-background); +$badge-color: $white; +$badge-color-alt: $black; +$badge-palette: $foundation-palette; $badge-padding: 0.3em; $badge-minwidth: 2.1em; $badge-font-size: 0.6rem; @@ -238,8 +246,8 @@ $button-margin: 0 0 $global-margin 0; $button-fill: solid; $button-background: $primary-color; $button-background-hover: scale-color($button-background, $lightness: -15%); -$button-color: #fff; -$button-color-alt: #000; +$button-color: $white; +$button-color-alt: $black; $button-radius: $global-radius; $button-sizes: ( tiny: 0.6rem, @@ -247,7 +255,11 @@ $button-sizes: ( default: 0.9rem, large: 1.25rem, ); +$button-palette: $foundation-palette; $button-opacity-disabled: 0.25; +$button-background-hover-lightness: -20%; +$button-hollow-hover-lightness: -50%; +$button-transition: background-color 0.25s ease-out, color 0.25s ease-out; // 12. Button Group // ---------------- @@ -256,6 +268,7 @@ $buttongroup-margin: 1rem; $buttongroup-spacing: 1px; $buttongroup-child-selector: '.button'; $buttongroup-expand-max: 6; +$buttongroup-radius-on-each: true; // 13. Callout // ----------- @@ -270,31 +283,54 @@ $callout-font-color-alt: $body-background; $callout-radius: $global-radius; $callout-link-tint: 30%; -// 14. Close Button +// 14. Card +// -------- + +$card-background: $white; +$card-font-color: $body-font-color; +$card-divider-background: $light-gray; +$card-border: 1px solid $light-gray; +$card-shadow: none; +$card-border-radius: $global-radius; +$card-padding: $global-padding; +$card-margin: $global-margin; + +// 15. Close Button // ---------------- $closebutton-position: right top; -$closebutton-offset-horizontal: 1rem; -$closebutton-offset-vertical: 0.5rem; -$closebutton-size: 2em; +$closebutton-offset-horizontal: ( + small: 0.66rem, + medium: 1rem, +); +$closebutton-offset-vertical: ( + small: 0.33em, + medium: 0.5rem, +); +$closebutton-size: ( + small: 1.5em, + medium: 2em, +); $closebutton-lineheight: 1; $closebutton-color: $dark-gray; $closebutton-color-hover: $black; -// 15. Drilldown +// 16. Drilldown // ------------- $drilldown-transition: transform 0.15s linear; $drilldown-arrows: true; $drilldown-arrow-color: $primary-color; +$drilldown-arrow-size: 6px; $drilldown-background: $white; -// 16. Dropdown +// 17. Dropdown // ------------ $dropdown-padding: 1rem; +$dropdown-background: $body-background; $dropdown-border: 1px solid $medium-gray; -$dropdown-font-size: 16rem; +$dropdown-font-size: 1rem; $dropdown-width: 300px; $dropdown-radius: $global-radius; $dropdown-sizes: ( @@ -303,22 +339,16 @@ $dropdown-sizes: ( large: 400px, ); -// 17. Dropdown Menu +// 18. Dropdown Menu // ----------------- $dropdownmenu-arrows: true; $dropdownmenu-arrow-color: $anchor-color; +$dropdownmenu-arrow-size: 6px; $dropdownmenu-min-width: 200px; $dropdownmenu-background: $white; $dropdownmenu-border: 1px solid $medium-gray; -// 18. Flex Video -// -------------- - -$flexvideo-margin-bottom: rem-calc(16); -$flexvideo-ratio: 4 by 3; -$flexvideo-ratio-widescreen: 16 by 9; - // 19. Forms // --------- @@ -327,7 +357,7 @@ $fieldset-padding: rem-calc(20); $fieldset-margin: rem-calc(18 0); $legend-padding: rem-calc(0 3); $form-spacing: rem-calc(16); -$helptext-color: #333; +$helptext-color: $black; $helptext-font-size: rem-calc(13); $helptext-font-style: italic; $input-prefix-color: $black; @@ -339,12 +369,13 @@ $form-label-font-size: rem-calc(14); $form-label-font-weight: $global-weight-normal; $form-label-line-height: 1.8; $select-background: $white; -$select-triangle-color: #333; +$select-triangle-color: $dark-gray; $select-radius: $global-radius; $input-color: $black; $input-placeholder-color: $medium-gray; $input-font-family: inherit; $input-font-size: rem-calc(16); +$input-font-weight: $global-weight-normal; $input-background: $white; $input-background-focus: $white; $input-background-disabled: $light-gray; @@ -352,16 +383,19 @@ $input-border: 1px solid $medium-gray; $input-border-focus: 1px solid $dark-gray; $input-shadow: inset 0 1px 2px rgba($black, 0.1); $input-shadow-focus: 0 0 5px $medium-gray; -$input-cursor-disabled: default; +$input-cursor-disabled: not-allowed; $input-transition: box-shadow 0.5s, border-color 0.25s ease-in-out; $input-number-spinners: true; $input-radius: $global-radius; +$form-button-radius: $global-radius; // 20. Label // --------- $label-background: $primary-color; -$label-color: foreground($label-background); +$label-color: $white; +$label-color-alt: $black; +$label-palette: $foundation-palette; $label-font-size: 0.8rem; $label-padding: 0.33333rem 0.5rem; $label-radius: $global-radius; @@ -379,11 +413,11 @@ $mediaobject-image-width-stacked: 100%; $menu-margin: 0; $menu-margin-nested: 1rem; $menu-item-padding: 0.7rem 1rem; -$menu-item-color: $white; -$menu-item-color-active: #60FF00; -$menu-item-background-active: rgba($white, 0.65);; +$menu-item-color-active: $white; +$menu-item-background-active: get-color(primary); $menu-icon-spacing: 0.25rem; -$menu-background-color: rgba($white, 0.65);; +$menu-item-background-hover: $light-gray; +$menu-border: $light-gray; // 23. Meter // --------- @@ -399,14 +433,17 @@ $meter-fill-bad: $alert-color; // -------------- $offcanvas-size: 250px; -$offcanvas-background: $light-gray; -$offcanvas-zindex: -1; +$offcanvas-vertical-size: 250px; +$offcanvas-background: $outer-space; +$offcanvas-shadow: 0 0 10px rgba($black, 0.7); +$offcanvas-push-zindex: 1; +$offcanvas-overlap-zindex: 10; +$offcanvas-reveal-zindex: 1; $offcanvas-transition-length: 0.5s; $offcanvas-transition-timing: ease; $offcanvas-fixed-reveal: true; $offcanvas-exit-background: rgba($white, 0.25); $maincontent-class: 'off-canvas-content'; -$maincontent-shadow: 0 0 10px rgba($black, 0.5); // 25. Orbit // --------- @@ -434,10 +471,11 @@ $pagination-item-spacing: rem-calc(1); $pagination-radius: $global-radius; $pagination-item-background-hover: $light-gray; $pagination-item-background-current: $primary-color; -$pagination-item-color-current: foreground($pagination-item-background-current); +$pagination-item-color-current: $white; $pagination-item-color-disabled: $medium-gray; $pagination-ellipsis-color: $black; $pagination-mobile-items: false; +$pagination-mobile-current-item: false; $pagination-arrows: true; // 27. Progress Bar @@ -449,24 +487,33 @@ $progress-margin-bottom: $global-margin; $progress-meter-background: $primary-color; $progress-radius: $global-radius; -// 28. Reveal +// 28. Responsive Embed +// -------------------- + +$responsive-embed-margin-bottom: rem-calc(16); +$responsive-embed-ratios: ( + default: 4 by 3, + widescreen: 16 by 9, +); + +// 29. Reveal // ---------- $reveal-background: $white; $reveal-width: 600px; $reveal-max-width: $global-width; -$reveal-offset: rem-calc(100); $reveal-padding: $global-padding; $reveal-border: 1px solid $medium-gray; $reveal-radius: $global-radius; $reveal-zindex: 1005; $reveal-overlay-background: rgba($black, 0.45); -// 29. Slider +// 30. Slider // ---------- +$slider-width-vertical: 0.5rem; +$slider-transition: all 0.2s ease-in-out; $slider-height: 0.5rem; -$slider-width-vertical: $slider-height; $slider-background: $light-gray; $slider-fill-background: $medium-gray; $slider-handle-height: 1.4rem; @@ -474,9 +521,8 @@ $slider-handle-width: 1.4rem; $slider-handle-background: $primary-color; $slider-opacity-disabled: 0.25; $slider-radius: $global-radius; -$slider-transition: all 0.2s ease-in-out; -// 30. Switch +// 31. Switch // ---------- $switch-background: $medium-gray; @@ -492,7 +538,7 @@ $switch-paddle-offset: 0.25rem; $switch-paddle-radius: $global-radius; $switch-paddle-transition: all 0.25s ease-out; -// 31. Table +// 32. Table // --------- $table-background: $white; @@ -502,29 +548,35 @@ $table-padding: rem-calc(8 10 10); $table-hover-scale: 2%; $table-row-hover: darken($table-background, $table-hover-scale); $table-row-stripe-hover: darken($table-background, $table-color-scale + $table-hover-scale); +$table-is-striped: true; $table-striped-background: smart-scale($table-background, $table-color-scale); $table-stripe: even; $table-head-background: smart-scale($table-background, $table-color-scale / 2); +$table-head-row-hover: darken($table-head-background, $table-hover-scale); $table-foot-background: smart-scale($table-background, $table-color-scale); +$table-foot-row-hover: darken($table-foot-background, $table-hover-scale); $table-head-font-color: $body-font-color; +$table-foot-font-color: $body-font-color; $show-header-for-stacked: false; -// 32. Tabs +// 33. Tabs // -------- $tab-margin: 0; $tab-background: $white; +$tab-color: $primary-color; $tab-background-active: $light-gray; -$tab-item-color: foreground($tab-background, $primary-color); +$tab-active-color: $primary-color; +$tab-item-font-size: rem-calc(12); $tab-item-background-hover: $white; $tab-item-padding: 1.25rem 1.5rem; $tab-expand-max: 6; $tab-content-background: $white; $tab-content-border: $light-gray; -$tab-content-color: foreground($tab-background, $primary-color); +$tab-content-color: $body-font-color; $tab-content-padding: 1rem; -// 33. Thumbnail +// 34. Thumbnail // ------------- $thumbnail-border: solid 4px $white; @@ -534,10 +586,10 @@ $thumbnail-shadow-hover: 0 0 6px 1px rgba($primary-color, 0.5); $thumbnail-transition: box-shadow 200ms ease-out; $thumbnail-radius: $global-radius; -// 34. Title Bar +// 35. Title Bar // ------------- -$titlebar-background: $black; +$titlebar-background: $outer-space; $titlebar-color: $white; $titlebar-padding: 0.5rem; $titlebar-text-font-weight: bold; @@ -545,9 +597,11 @@ $titlebar-icon-color: $white; $titlebar-icon-color-hover: $medium-gray; $titlebar-icon-spacing: 0.25rem; -// 35. Tooltip +// 36. Tooltip // ----------- +$has-tip-font-weight: $global-weight-bold; +$has-tip-border-bottom: dotted 1px $dark-gray; $tooltip-background-color: $black; $tooltip-color: $white; $tooltip-padding: 0.75rem; @@ -556,12 +610,12 @@ $tooltip-pip-width: 0.75rem; $tooltip-pip-height: $tooltip-pip-width * 0.866; $tooltip-radius: $global-radius; -// 36. Top Bar +// 37. Top Bar // ----------- $topbar-padding: 0; -$topbar-background: #121212; -$topbar-submenu-background: $topbar-background; -$topbar-link-color: #fff; +$topbar-background: $outer-space; +$topbar-submenu-background: $outer-space; +$topbar-title-spacing: 0.5rem 1rem 0.5rem 0; $topbar-input-width: 200px; $topbar-unstack-breakpoint: medium; diff --git a/web/app/themes/oe-brixton/assets/scss/global/_wp-admin.scss b/web/app/themes/oe-brixton/assets/scss/global/_wp-admin.scss old mode 100755 new mode 100644 index 2fc709c..4780c7c --- a/web/app/themes/oe-brixton/assets/scss/global/_wp-admin.scss +++ b/web/app/themes/oe-brixton/assets/scss/global/_wp-admin.scss @@ -1,11 +1,11 @@ // Fix the issue where the WP admin-bar overlaps the mobile menu #wpadminbar { - position: fixed !important; + position: fixed !important; } // Make sure that the WP admin-bar does not overlap the sticky top bar body.admin-bar.f-topbar-fixed { - .sticky.fixed { - margin-top: rem-calc(32); - } + .sticky.fixed { + margin-top: rem-calc(32); + } } diff --git a/web/app/themes/oe-brixton/assets/scss/global/_wp-overrides.scss b/web/app/themes/oe-brixton/assets/scss/global/_wp-overrides.scss old mode 100755 new mode 100644 index 6867053..aff1fdb --- a/web/app/themes/oe-brixton/assets/scss/global/_wp-overrides.scss +++ b/web/app/themes/oe-brixton/assets/scss/global/_wp-overrides.scss @@ -1,9 +1,8 @@ -.wp-caption{ - padding:rem-calc(4); -} - -.wp-caption img{ - max-width:100%; +.wp-caption > figcaption { + max-width: 100%; + font-size: 0.8rem; + color: #999; + padding: 0.25rem 0; } p.wp-caption-text{ @@ -12,6 +11,20 @@ p.wp-caption-text{ padding:rem-calc(10) 0; } -a.more-link { - float: right; +.alignleft { + float: left; + padding-right: 1rem; + margin: 0; +} + +.alignright { + float: right; + padding-left: 1rem; + margin: 0; +} + +.aligncenter { + display: block; + margin-left: auto; + margin-right: auto; } diff --git a/web/app/themes/oe-brixton/assets/scss/modules/_editor-style.scss b/web/app/themes/oe-brixton/assets/scss/modules/_editor-style.scss new file mode 100644 index 0000000..6a07332 --- /dev/null +++ b/web/app/themes/oe-brixton/assets/scss/modules/_editor-style.scss @@ -0,0 +1,5 @@ +body#tinymce{ + height: auto; // Fix editor style bug + max-width: $grid-row-width; // Give the editor a max-width + padding: rem-calc(20) !important; +} \ No newline at end of file diff --git a/web/app/themes/oe-brixton/assets/scss/modules/_footer.scss b/web/app/themes/oe-brixton/assets/scss/modules/_footer.scss old mode 100755 new mode 100644 index 230365e..8be15fc --- a/web/app/themes/oe-brixton/assets/scss/modules/_footer.scss +++ b/web/app/themes/oe-brixton/assets/scss/modules/_footer.scss @@ -4,108 +4,15 @@ margin: 0 auto; border-top: 1px solid #ccc; margin-top: rem-calc(60); - background-color: $footer-background; - color: #e8e8e8; - font-size: 1rem; - font-family: 'Open Sans', sans-serif; + #footer { @include grid-row(); padding: rem-calc(30) 0; - article#nav_menu-2 { - padding-left: 60px; - } - ul { list-style-type: none; margin: 0; padding: 0; - display: inline-block; - width: 200px; - li { - float: left; - position: relative; - &:before { - content: "\f054"; - font-family: FontAwesome; - left: -1px; - position: absolute; - font-size: 13px; - top: 10px; - } - > a { - color: $white; - } - } } - address.vcard { - font-style: normal; - position: relative; - a { - display: block; - padding: 0 0 5px 16px; - color: #e8e8e8; - font-size: 1rem; - font-family: 'Open Sans', sans-serif; - } - a.url.fn.org { - color: $global-logo-color; - font-size: 2rem; - font-weight: bold; - padding: 0 0 10px 0; - } - a.email { - &:before { - content: "\f003"; - font-family: FontAwesome; - left: -1px; - position: absolute; - font-size: 13px; - padding-top: 5px - } - } - span.tel { - padding: 0 0 10px 16px; - &:before { - content: "\f095"; - font-family: FontAwesome; - left: -1px; - position: absolute; - font-size: 13px; - padding-top: 5px - } - } - span.adr { - padding: 10px 0 10px 16px; - &:before { - content: "\f041"; - font-family: FontAwesome; - left: -1px; - position: absolute; - font-size: 13px; - } - } - - } - } - div#copiright-wrapper { - font-size: 0.9rem; - border-top: rgba(51, 49, 49, 0.84) solid 1px; - background-color: #222121; - height: 65px; - padding-top: 20px; - - #copiright-content { - @include grid-row(); - .copiright-text, .copiright-oe { - background-color: #222121; - } - - - img.oe { - margin-top: -7px; - } - } - } } diff --git a/web/app/themes/oe-brixton/assets/scss/modules/_navigation.scss b/web/app/themes/oe-brixton/assets/scss/modules/_navigation.scss old mode 100755 new mode 100644 index 9ea9e5e..9083667 --- a/web/app/themes/oe-brixton/assets/scss/modules/_navigation.scss +++ b/web/app/themes/oe-brixton/assets/scss/modules/_navigation.scss @@ -1,5 +1,4 @@ -/* Navigation breakpoints */ - +// Navigation breakpoints .desktop-menu, .top-bar-left { @include show-for(medium); } @@ -8,18 +7,38 @@ @include hide-for(medium); } -/* Mobile menu */ - -nav#mobile-menu { - background-color: #0a0a0a; -} - - +// Mobile menu .off-canvas { - ul#menu-main-menu { + > ul.menu { height: 100vh; padding: 1rem; + + a { + color: $white; + font-weight: 600; + font-size: rem-calc(18); + opacity: .75; + } + + .is-accordion-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: $white transparent transparent; + position: absolute; + top: 50%; + margin-top: -3px; + right: 1rem; + } } + + .menu .active > a { background-color: lighten($outer-space, 10%); } + + } .title-bar-title { @@ -29,23 +48,7 @@ nav#mobile-menu { } } -/* Tablet and desktop menu */ - - -.top-bar-right ul { - background-color: transparent; -} - - - - -.top-bar-container { - background-color: $menu-background-color; - z-index: 999; - height: 0px !important; -} - - +// Tablet and desktop menu .top-bar { min-height: 85px; padding: 5px 20px; @@ -75,102 +78,51 @@ nav#mobile-menu { img#logo { max-height: 100px; margin-top: 20px; - background-color: rgba(255, 255, 255, 0.59); + background-color: rgba(255, 255, 255, 0.59); } .menu .home a { font-size: 1rem; - color: $menu-item-color; + color: #B9B9B9; } .menu a { height: 45px; line-height: 45px; - color: $menu-item-color; + color: #e6e6e6; padding-top: 0; padding-bottom: 0; font-weight: bold; - font-size: 1.3rem; + font-size: 0.8rem; line-height: 1; - text-transform: capitalize; - letter-spacing: 0.5px; - - &:hover:not(.button) { - background-color: transparent; - color: $menu-item-color-active; + background-color: #42525D; } - } - .menu .active>a { - background-color: transparent; - color: $menu-item-color-active; - } - - + .menu .active > a { background-color: lighten($outer-space, 10%); } .menu>li:not(.menu-text)>a { padding: 1rem; } - // .menu li:not(:last-child) { border-right: 1px solid #4e4e4e; } - - .dropdown.menu .submenu { - background-color: rgba(0, 0, 0, 0.36); - color: #fefefe; - border: 0; - li { - border-bottom: solid 1px #000; - } - } + .menu li:not(:last-child) { border-right: 1px solid #4e4e4e; } + .dropdown.menu .submenu { border: 0; } .dropdown.menu .has-submenu.is-down-arrow a { padding-right: 1rem; } .dropdown.menu .has-submenu.is-down-arrow > a::after { border: 0; } + .dropdown.menu:first-child > li.is-dropdown-submenu-parent > a::after { display: none; } } -.dropdown.menu > li.is-dropdown-submenu-parent > a::after { display: none; } - -.sticky.is-stuck.is-at-top { - background-color: rgba(241, 237, 237, 0.95); - box-shadow: 0 0 10px rgba($black, 0.4); - - .top-bar { - - min-height: 40px; - - div#nav-wrapper .top-bar-right { - margin-top: 0px; - } - - ul#menu-topmenu { - background-color: transparent; - } - - - .menu a { - color: $black; - } - - .menu .active>a { - color: $menu-item-color-active; - } - - - .dropdown.menu .submenu { - background-color: rgba(241, 237, 237, 0.95); - color: $black; - li { - border-bottom: solid 1px #000; - } - } - +// Basic styles for post navigation. Nicolas Gallagher's "Micro clearfix" +// https://css-tricks.com/snippets/css/clear-fix/ +.post-navigation:before, +.post-navigation:after { + content: ""; + display: table; +} - img#logo { - visibility: hidden; - height: 1px - } - img#logo-s { - visibility: visible; - } - } +.post-navigation:after { + clear:both; +} - } +.nav-previous { float:left; } +.nav-next { float:right; } diff --git a/web/app/themes/oe-brixton/assets/scss/modules/_sidebar.scss b/web/app/themes/oe-brixton/assets/scss/modules/_sidebar.scss old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/scss/site/_featured.scss b/web/app/themes/oe-brixton/assets/scss/site/_featured.scss deleted file mode 100755 index f7cb787..0000000 --- a/web/app/themes/oe-brixton/assets/scss/site/_featured.scss +++ /dev/null @@ -1,20 +0,0 @@ -@media #{$small-up} { - #featured-hero { - background-size: cover; - background-position: center; - background-repeat: no-repeat; - margin: - rem-calc(32) 0 rem-calc(32); - position: relative; - height: rem-calc(200); - } - - .no-featured-image-set { - height: rem-calc(16) !important; - } -} - -@media #{$medium-up} { - #featured-hero { - height: rem-calc(400); - } -} diff --git a/web/app/themes/oe-brixton/assets/scss/templates/_front.scss b/web/app/themes/oe-brixton/assets/scss/templates/_front.scss old mode 100755 new mode 100644 index 3d07029..bbafd57 --- a/web/app/themes/oe-brixton/assets/scss/templates/_front.scss +++ b/web/app/themes/oe-brixton/assets/scss/templates/_front.scss @@ -1,95 +1,206 @@ +// Page header +#front-hero { + .marketing { + @include grid-row(); + max-width: 55rem; + } + + @include breakpoint(small) { + background: url('../images/demo/hero-bg-foundation-6-small.svg') bottom center; + background-size: cover; + background-position: bottom; + padding: rem-calc(65%) 0; + margin: 0 0 rem-calc(32); + height: auto; + position: relative; + text-align: left; + } + + @include breakpoint(medium) { + background: url('../images/demo/hero-bg-foundation-6-large.svg') bottom center; + background-size: cover; + background-position: center; + height: rem-calc(685); + margin: 0 0 rem-calc(72); + } + + #watch { + @include breakpoint(small) { + @include grid-column(7); + @include grid-column-position(-5); + } + + @include breakpoint(medium) { + @include grid-column(12); + @include grid-column-position(0); + } + + section { + display: inline; + } + + a { + color: #B4C9D1; + cursor: pointer; + font-weight: 400; + margin-right: rem-calc(20); + } + + a:hover { + color: #fff; + } + + #stargazers { + :before { + content: "\f09b"; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + text-decoration: inherit; + color: #B4C9D1; + margin-right: rem-calc(8); + } + } + + #twitter { + :before { + content: "\f099"; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + text-decoration: inherit; + color: #B4C9D1; + margin-right: rem-calc(8); + } + } + + } + + .tagline { + @include breakpoint(small) { + @include grid-column(8); + } + + @include breakpoint(medium) { + @include grid-column(5); + padding-top: 6rem; + } + } + + h1 { + color: #fff; + font-weight: 500; + + @include breakpoint(small) { + font-size: 2.2rem; + } + + @include breakpoint(medium) { + font-size: 2.875rem; + } + } + + h4 { + color: #fefefe; + font-weight: 300; + font-size: 1.3125rem; + } + + .download { + margin-top: rem-calc(20); + } +} + // Intro .intro { - @include grid-row(); - - .fp-intro { - - @include breakpoint(small) { - @include grid-column(12); - } - - @include breakpoint(medium) { - @include grid-column(10); - @include grid-column-offset(1); - - h2 { - font-weight: 300; - margin-bottom: 1.5rem; - } - - h4 { - font-size: 1.125rem; - line-height: 1.6; - color: #3F47CC; - margin-bottom: 0.1rem; - } - - } - } + @include grid-row(); + + .fp-intro { + @include breakpoint(small) { + @include grid-column(12); + } + + @include breakpoint(medium) { + @include grid-column(10); + @include grid-column-offset(1); + + h2 { + font-weight: 300; + margin-bottom: 1.5rem; + } + + h4 { + font-size: 1.125rem; + line-height: 1.6; + color: #777; + margin-bottom: 2rem; + } + } + } } // Section divider .section-divider { - @include grid-row(); + @include grid-row(); - hr { - @include grid-column(12); - @extend .dotted; - box-sizing: border-box; - } + hr { + @include grid-column(12); + @extend .dotted; + box-sizing: border-box; + } } // Benefits .benefits { - @include grid-row(); - text-align: center; - - header { - @include grid-column(12); - - h2 { - font-weight: 300; - } - - h4 { - font-size: 1.125rem; - line-height: 1.6; - color: #777; - } - } - - .semantic, - .responsive, - .customizable, - .professional { - @include breakpoint(small) { - @include grid-column(12); - } - - @include breakpoint(medium) { - @include grid-column(3); - } - - img { - padding: 1.25rem; - margin: 1rem auto 0 auto; - } - - h3 { - color: #0a0a0a; - font-weight: 300; - font-size: 1.75rem; - } - - p { font-size: 0.9375rem; } - - } - - .why-foundation { - @include grid-row(); - @include grid-column(12); - margin-top: 4rem; - } - + @include grid-row(); + text-align: center; + + header { + @include grid-column(12); + + h2 { + font-weight: 300; + } + + h4 { + font-size: 1.125rem; + line-height: 1.6; + color: #777; + } + } + + .semantic, + .responsive, + .customizable, + .professional { + @include breakpoint(small) { + @include grid-column(12); + } + + @include breakpoint(medium) { + @include grid-column(3); + } + + img { + padding: 1.25rem; + margin: 1rem auto 0 auto; + } + + h3 { + color: #0a0a0a; + font-weight: 300; + font-size: 1.75rem; + } + + p { + font-size: 0.9375rem; + } + } + + .why-foundation { + @include grid-row(); + @include grid-column(12); + margin-top: 4rem; + } } diff --git a/web/app/themes/oe-brixton/assets/scss/templates/_kitchen-sink.scss b/web/app/themes/oe-brixton/assets/scss/templates/_kitchen-sink.scss old mode 100755 new mode 100644 index 4e11fbd..f7e1bd4 --- a/web/app/themes/oe-brixton/assets/scss/templates/_kitchen-sink.scss +++ b/web/app/themes/oe-brixton/assets/scss/templates/_kitchen-sink.scss @@ -5,14 +5,13 @@ header { @include grid-column(12); - .lead { - font-size: 125%; - line-height: 1.6; - } + .lead { + font-size: 125%; + line-height: 1.6; } + } - #components{ - + #components { hr { margin: 3rem 0; } @@ -28,7 +27,6 @@ } #kitchen-sink-nav { - @include breakpoint(small) { display: none; } @@ -72,9 +70,7 @@ border-top: 0; padding-top: 0; } - } - } .row.display { @@ -90,5 +86,4 @@ background: #e1e1e1; } } - } diff --git a/web/app/themes/oe-brixton/assets/scss/templates/_list-posts.scss b/web/app/themes/oe-brixton/assets/scss/templates/_list-posts.scss deleted file mode 100755 index fe47f55..0000000 --- a/web/app/themes/oe-brixton/assets/scss/templates/_list-posts.scss +++ /dev/null @@ -1,12 +0,0 @@ -.type-post { - h2 { - line-height: 1.8rem; - a { - font-size: 1.8rem; - line-height: 1.8rem; - } - } - img { - padding: 20px 0; - } -} diff --git a/web/app/themes/oe-brixton/assets/scss/templates/_page-default.scss b/web/app/themes/oe-brixton/assets/scss/templates/_page-default.scss old mode 100755 new mode 100644 index b762fc1..0db2589 --- a/web/app/themes/oe-brixton/assets/scss/templates/_page-default.scss +++ b/web/app/themes/oe-brixton/assets/scss/templates/_page-default.scss @@ -11,5 +11,4 @@ @include grid-column(8); } } - } diff --git a/web/app/themes/oe-brixton/assets/scss/templates/_page-full-width.scss b/web/app/themes/oe-brixton/assets/scss/templates/_page-full-width.scss old mode 100755 new mode 100644 index 55e9dfe..77639da --- a/web/app/themes/oe-brixton/assets/scss/templates/_page-full-width.scss +++ b/web/app/themes/oe-brixton/assets/scss/templates/_page-full-width.scss @@ -6,7 +6,5 @@ @include breakpoint(small) { @include grid-column(12); } - } - } diff --git a/web/app/themes/oe-brixton/assets/scss/templates/_page-sidebar-left.scss b/web/app/themes/oe-brixton/assets/scss/templates/_page-sidebar-left.scss old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/assets/scss/templates/_single-post.scss b/web/app/themes/oe-brixton/assets/scss/templates/_single-post.scss old mode 100755 new mode 100644 index 7fe0f92..30a8e0b --- a/web/app/themes/oe-brixton/assets/scss/templates/_single-post.scss +++ b/web/app/themes/oe-brixton/assets/scss/templates/_single-post.scss @@ -1,68 +1,3 @@ - -// Page header -#blog-hero { - .blog-title { - @include grid-row(); - max-width: 55rem; - } - - @include breakpoint(small) { - background-size: cover; - background-position: bottom; - padding: rem-calc(65%) 0; - margin: 0 0 rem-calc(32); - position: relative; - text-align: left; - opacity: 1; - max-height: 350px; - background-color: #333; - } - - @include breakpoint(medium) { - background-size: cover; - background-position: center; - height: rem-calc(685); - margin: 0 0 rem-calc(72); - } - - .tagline { - - @include breakpoint(small) { - @include grid-column(8); - } - - @include breakpoint(medium) { - @include grid-column(12); - padding-top: 6rem; - } - - } - - h1 { - color: #fff; - font-weight: 500; - - @include breakpoint(small) { - font-size: 2.2rem; - } - - @include breakpoint(medium) { - font-size: 2.875rem; - } - - } - - h4 { - color: #fefefe; - font-weight: 300; - font-size: 1.3125rem; - } - - .download { margin-top: rem-calc(20); } - -} - - #single-post { @include grid-row(); margin-top: 3rem; @@ -76,9 +11,4 @@ @include grid-column(8); } } - -} - -#gallery-1 img { - border: none !important; } diff --git a/web/app/themes/oe-brixton/assets/scss/typography/_base.scss b/web/app/themes/oe-brixton/assets/scss/typography/_base.scss deleted file mode 100755 index 7631fc1..0000000 --- a/web/app/themes/oe-brixton/assets/scss/typography/_base.scss +++ /dev/null @@ -1,11 +0,0 @@ -// Generic fonts -p { - line-height: 1.2; - margin-bottom: 1rem; - text-rendering: optimizeLegibility; - vertical-align: baseline; - -webkit-font-smoothing: antialiased; - font-family: 'Open Sans', Arial; - font-weight: 400; - font-size: 1.2rem; -} diff --git a/web/app/themes/oe-brixton/assets/stylesheets/foundation.css b/web/app/themes/oe-brixton/assets/stylesheets/foundation.css old mode 100755 new mode 100644 index f19e5e8..505585c --- a/web/app/themes/oe-brixton/assets/stylesheets/foundation.css +++ b/web/app/themes/oe-brixton/assets/stylesheets/foundation.css @@ -7,10 +7,9 @@ The Foundation framework is built by Zurb Licensed under MIT Open Source */ -@import url(https://fonts.googleapis.com/css?family=Raleway); /** * Foundation for Sites by ZURB - * Version 6.2.1 + * Version 6.3.0 * foundation.zurb.com * Licensed under MIT Open Source */ @@ -20,19 +19,58 @@ body.admin-bar.f-topbar-fixed .sticky.fixed { margin-top: 2rem; } -.wp-caption { - padding: 0.25rem; } - -.wp-caption img { - max-width: 100%; } +.wp-caption > figcaption { + max-width: 100%; + font-size: 0.8rem; + color: #999; + padding: 0.25rem 0; } p.wp-caption-text { font-size: 90%; color: #666; padding: 0.625rem 0; } -a.more-link { - float: right; } +.alignleft { + float: left; + padding-right: 1rem; + margin: 0; } + +.alignright { + float: right; + padding-left: 1rem; + margin: 0; } + +.aligncenter { + display: block; + margin-left: auto; + margin-right: auto; } + +.screen-reader-text { + clip: rect(1px, 1px, 1px, 1px); + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; } + +.screen-reader-text:focus { + background-color: #f1f1f1; + border-radius: 3px; + -webkit-box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + color: #21759b; + display: block; + font-size: 14px; + font-size: 0.875rem; + font-weight: bold; + height: auto; + left: 5px; + line-height: normal; + padding: 15px 23px 14px; + text-decoration: none; + top: 5px; + width: auto; + z-index: 100000; } /*! * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome @@ -49,7 +87,7 @@ a.more-link { .fa { display: inline-block; - font: normal normal normal 14px / 1 FontAwesome; + font: normal normal normal 14px/1 FontAwesome; font-size: inherit; text-rendering: auto; -webkit-font-smoothing: antialiased; @@ -2114,139 +2152,179 @@ a.more-link { .fa-percent:before { content: ""; } -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +/*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */ +/* Document + ========================================================================== */ /** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS and IE text size adjust after device orientation change, - * without disabling user zoom. - */ + * 1. Change the default font family in all browsers (opinionated). + * 2. Correct the line height in all browsers. + * 3. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + */ html { font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; + line-height: 1.15; /* 2 */ + -ms-text-size-adjust: 100%; + /* 3 */ -webkit-text-size-adjust: 100%; - /* 2 */ } + /* 3 */ } +/* Sections + ========================================================================== */ /** - * Remove default margin. - */ + * Remove the margin in all browsers (opinionated). + */ body { margin: 0; } -/* HTML5 display definitions - ========================================================================== */ /** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ + * Add the correct display in IE 9-. + */ article, aside, -details, -figcaption, -figure, footer, header, -hgroup, -main, -menu, nav, -section, -summary { +section { display: block; } /** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ -audio, -canvas, -progress, -video { - display: inline-block; + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; } + +/* Grouping content + ========================================================================== */ +/** + * Add the correct display in IE 9-. + */ +figcaption, +figure { + display: block; } + +/** + * Add the correct margin in IE 8. + */ +figure { + margin: 1em 40px; } + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; /* 1 */ - vertical-align: baseline; + height: 0; + /* 1 */ + overflow: visible; /* 2 */ } /** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ -audio:not([controls]) { - display: none; - height: 0; } + * Add the correct display in IE. + */ +main { + display: block; } /** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. - */ -[hidden], -template { - display: none; } + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ } /* Links - ========================================================================== */ + ========================================================================== */ /** - * Remove the gray background color from active links in IE 10. - */ + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ a { - background-color: transparent; } + background-color: transparent; + /* 1 */ + -webkit-text-decoration-skip: objects; + /* 2 */ } /** - * Improve readability of focused elements when they are also in an - * active/hover state. - */ + * Remove the outline on focused links when they are also active or hovered + * in all browsers (opinionated). + */ a:active, a:hover { - outline: 0; } + outline-width: 0; } /* Text-level semantics - ========================================================================== */ + ========================================================================== */ /** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ + * 1. Remove the bottom border in Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ abbr[title] { - border-bottom: 1px dotted; } + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + text-decoration: underline dotted; + /* 2 */ } /** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. + */ b, strong { - font-weight: bold; } + font-weight: inherit; } /** - * Address styling not present in Safari and Chrome. - */ -dfn { - font-style: italic; } + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; } /** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ -h1 { - font-size: 2em; - margin: 0.67em 0; } + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ } + +/** + * Add the correct font style in Android 4.3-. + */ +dfn { + font-style: italic; } /** - * Address styling not present in IE 8/9. - */ + * Add the correct background and color in IE 9-. + */ mark { - background: #ff0; + background-color: #ff0; color: #000; } /** - * Address inconsistent and variable font size in all browsers. - */ + * Add the correct font size in all browsers. + */ small { font-size: 80%; } /** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ sub, sup { font-size: 75%; @@ -2254,251 +2332,277 @@ sup { position: relative; vertical-align: baseline; } -sup { - top: -0.5em; } - sub { bottom: -0.25em; } -/* Embedded content - ========================================================================== */ -/** - * Remove border when inside `a` element in IE 8/9/10. - */ -img { - border: 0; } - -/** - * Correct overflow not hidden in IE 9/10/11. - */ -svg:not(:root) { - overflow: hidden; } +sup { + top: -0.5em; } -/* Grouping content - ========================================================================== */ +/* Embedded content + ========================================================================== */ /** - * Address margin not present in IE 8/9 and Safari. - */ -figure { - margin: 1em 40px; } + * Add the correct display in IE 9-. + */ +audio, +video { + display: inline-block; } /** - * Address differences between Firefox and other browsers. - */ -hr { - box-sizing: content-box; + * Add the correct display in iOS 4-7. + */ +audio:not([controls]) { + display: none; height: 0; } /** - * Contain overflow in all browsers. - */ -pre { - overflow: auto; } + * Remove the border on images inside links in IE 10-. + */ +img { + border-style: none; } /** - * Address odd `em`-unit font size rendering in all browsers. - */ -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; } + * Hide the overflow in IE. + */ +svg:not(:root) { + overflow: hidden; } /* Forms - ========================================================================== */ + ========================================================================== */ /** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - */ + * 1. Change the font styles in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. + */ button, input, optgroup, select, textarea { - color: inherit; + font-family: sans-serif; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; /* 1 */ - font: inherit; - /* 2 */ margin: 0; - /* 3 */ } + /* 2 */ } /** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ + * Show the overflow in IE. + */ button { overflow: visible; } /** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ button, select { + /* 1 */ text-transform: none; } /** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { +html [type="button"], +[type="reset"], +[type="submit"] { -webkit-appearance: button; - /* 2 */ - cursor: pointer; - /* 3 */ } - -/** - * Re-set default cursor for disabled elements. - */ -button[disabled], -html input[disabled] { - cursor: not-allowed; } + /* 2 */ } -/** - * Remove inner padding and border in Firefox 4+. - */ -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; } +button, +[type="button"], +[type="reset"], +[type="submit"] { + /** + * Remove the inner border and padding in Firefox. + */ + /** + * Restore the focus styles unset by the previous rule. + */ } + button::-moz-focus-inner, + [type="button"]::-moz-focus-inner, + [type="reset"]::-moz-focus-inner, + [type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; } + button:-moz-focusring, + [type="button"]:-moz-focusring, + [type="reset"]:-moz-focusring, + [type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; } /** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ + * Show the overflow in Edge. + */ input { - line-height: normal; } + overflow: visible; } /** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ +[type="checkbox"], +[type="radio"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { height: auto; } /** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. - */ -input[type="search"] { + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type="search"] { -webkit-appearance: textfield; /* 1 */ - box-sizing: content-box; - /* 2 */ } + outline-offset: -2px; + /* 2 */ + /** + * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. + */ } + [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { + -webkit-appearance: none; } /** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ } /** - * Define consistent border, margin, and padding. - * [NOTE] We don't enable this ruleset in Foundation, because we want the
    element to have plain styling. - */ -/* fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; - } */ + * Change the border, margin, and padding in all browsers (opinionated). + */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; } + /** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ legend { - border: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + /* 1 */ + display: table; + /* 1 */ + max-width: 100%; /* 1 */ padding: 0; + /* 3 */ + color: inherit; + /* 2 */ + white-space: normal; + /* 1 */ } + +/** + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + display: inline-block; + /* 1 */ + vertical-align: baseline; /* 2 */ } /** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ + * Remove the default vertical scrollbar in IE. + */ textarea { overflow: auto; } +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Edge, IE, and Firefox. + */ +details { + display: block; } + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; } + +/* + * Add the correct display in IE 9-. + */ +menu { + display: block; } + +/* Scripting + ========================================================================== */ /** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ -optgroup { - font-weight: bold; } + * Add the correct display in IE 9-. + */ +canvas { + display: inline-block; } -/* Tables - ========================================================================== */ /** - * Remove most spacing between table cells. - */ -table { - border-collapse: collapse; - border-spacing: 0; } + * Add the correct display in IE. + */ +template { + display: none; } -td, -th { - padding: 0; } +/* Hidden + ========================================================================== */ +/** + * Add the correct display in IE 10-. + */ +[hidden] { + display: none; } .foundation-mq { font-family: "small=0em&medium=40em&large=64em&xlarge=75em&xxlarge=90em"; } html { - font-size: 100%; - box-sizing: border-box; } + -webkit-box-sizing: border-box; + box-sizing: border-box; + font-size: 100%; } *, *::before, *::after { - box-sizing: inherit; } + -webkit-box-sizing: inherit; + box-sizing: inherit; } body { - padding: 0; margin: 0; - font-family: "Raleway", "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0; + background: #fefefe; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-weight: normal; line-height: 1.5; color: #0a0a0a; - background: #fefefe; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } img { + display: inline-block; + vertical-align: middle; max-width: 100%; height: auto; - -ms-interpolation-mode: bicubic; - display: inline-block; - vertical-align: middle; } + -ms-interpolation-mode: bicubic; } textarea { height: auto; @@ -2509,9 +2613,6 @@ select { width: 100%; border-radius: 0; } -#map_canvas img, -#map_canvas embed, -#map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object, @@ -2521,12 +2622,13 @@ select { max-width: none !important; } button { - -webkit-appearance: none; - -moz-appearance: none; - background: transparent; padding: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; border: 0; border-radius: 0; + background: transparent; line-height: 1; } [data-whatinput='mouse'] button { outline: 0; } @@ -2539,43 +2641,51 @@ button { .row { max-width: 75rem; - margin-left: auto; - margin-right: auto; } + margin-right: auto; + margin-left: auto; } .row::before, .row::after { - content: ' '; - display: table; } + display: table; + content: ' '; } .row::after { clear: both; } .row.collapse > .column, .row.collapse > .columns { - padding-left: 0; - padding-right: 0; } + padding-right: 0; + padding-left: 0; } .row .row { - max-width: none; - margin-left: -0.625rem; margin-right: -0.625rem; - max-width: none; } - @media screen and (min-width: 40em) { + margin-left: -0.625rem; } + @media print, screen and (min-width: 40em) { .row .row { - margin-left: -0.9375rem; - margin-right: -0.9375rem; } } + margin-right: -0.9375rem; + margin-left: -0.9375rem; } } + @media print, screen and (min-width: 64em) { + .row .row { + margin-right: -0.9375rem; + margin-left: -0.9375rem; } } .row .row.collapse { - margin-left: 0; - margin-right: 0; } + margin-right: 0; + margin-left: 0; } .row.expanded { max-width: none; } .row.expanded .row { - margin-left: auto; - margin-right: auto; } + margin-right: auto; + margin-left: auto; } + .row.gutter-small > .column, .row.gutter-small > .columns { + padding-right: 0.625rem; + padding-left: 0.625rem; } + .row.gutter-medium > .column, .row.gutter-medium > .columns { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } .column, .columns { width: 100%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } - @media screen and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { .column, .columns { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } .column:last-child:not(:first-child), .columns:last-child:not(:first-child) { float: right; } .column.end:last-child:last-child, .end.columns:last-child:last-child { @@ -2583,11 +2693,12 @@ button { .column.row.row, .row.row.columns { float: none; } - .row .column.row.row, .row .row.row.columns { - padding-left: 0; - padding-right: 0; - margin-left: 0; - margin-right: 0; } + +.row .column.row.row, .row .row.row.columns { + margin-right: 0; + margin-left: 0; + padding-right: 0; + padding-left: 0; } .small-1 { width: 8.33333%; } @@ -2750,8 +2861,8 @@ button { margin-left: 91.66667%; } .small-up-1 > .column, .small-up-1 > .columns { - width: 100%; - float: left; } + float: left; + width: 100%; } .small-up-1 > .column:nth-of-type(1n), .small-up-1 > .columns:nth-of-type(1n) { clear: none; } .small-up-1 > .column:nth-of-type(1n+1), .small-up-1 > .columns:nth-of-type(1n+1) { @@ -2760,8 +2871,8 @@ button { float: left; } .small-up-2 > .column, .small-up-2 > .columns { - width: 50%; - float: left; } + float: left; + width: 50%; } .small-up-2 > .column:nth-of-type(1n), .small-up-2 > .columns:nth-of-type(1n) { clear: none; } .small-up-2 > .column:nth-of-type(2n+1), .small-up-2 > .columns:nth-of-type(2n+1) { @@ -2770,8 +2881,8 @@ button { float: left; } .small-up-3 > .column, .small-up-3 > .columns { - width: 33.33333%; - float: left; } + float: left; + width: 33.33333%; } .small-up-3 > .column:nth-of-type(1n), .small-up-3 > .columns:nth-of-type(1n) { clear: none; } .small-up-3 > .column:nth-of-type(3n+1), .small-up-3 > .columns:nth-of-type(3n+1) { @@ -2780,8 +2891,8 @@ button { float: left; } .small-up-4 > .column, .small-up-4 > .columns { - width: 25%; - float: left; } + float: left; + width: 25%; } .small-up-4 > .column:nth-of-type(1n), .small-up-4 > .columns:nth-of-type(1n) { clear: none; } .small-up-4 > .column:nth-of-type(4n+1), .small-up-4 > .columns:nth-of-type(4n+1) { @@ -2790,8 +2901,8 @@ button { float: left; } .small-up-5 > .column, .small-up-5 > .columns { - width: 20%; - float: left; } + float: left; + width: 20%; } .small-up-5 > .column:nth-of-type(1n), .small-up-5 > .columns:nth-of-type(1n) { clear: none; } .small-up-5 > .column:nth-of-type(5n+1), .small-up-5 > .columns:nth-of-type(5n+1) { @@ -2800,8 +2911,8 @@ button { float: left; } .small-up-6 > .column, .small-up-6 > .columns { - width: 16.66667%; - float: left; } + float: left; + width: 16.66667%; } .small-up-6 > .column:nth-of-type(1n), .small-up-6 > .columns:nth-of-type(1n) { clear: none; } .small-up-6 > .column:nth-of-type(6n+1), .small-up-6 > .columns:nth-of-type(6n+1) { @@ -2810,8 +2921,8 @@ button { float: left; } .small-up-7 > .column, .small-up-7 > .columns { - width: 14.28571%; - float: left; } + float: left; + width: 14.28571%; } .small-up-7 > .column:nth-of-type(1n), .small-up-7 > .columns:nth-of-type(1n) { clear: none; } .small-up-7 > .column:nth-of-type(7n+1), .small-up-7 > .columns:nth-of-type(7n+1) { @@ -2820,8 +2931,8 @@ button { float: left; } .small-up-8 > .column, .small-up-8 > .columns { - width: 12.5%; - float: left; } + float: left; + width: 12.5%; } .small-up-8 > .column:nth-of-type(1n), .small-up-8 > .columns:nth-of-type(1n) { clear: none; } .small-up-8 > .column:nth-of-type(8n+1), .small-up-8 > .columns:nth-of-type(8n+1) { @@ -2830,31 +2941,37 @@ button { float: left; } .small-collapse > .column, .small-collapse > .columns { - padding-left: 0; - padding-right: 0; } + padding-right: 0; + padding-left: 0; } .small-collapse .row { - margin-left: 0; - margin-right: 0; } + margin-right: 0; + margin-left: 0; } + +.expanded.row .small-collapse.row { + margin-right: 0; + margin-left: 0; } .small-uncollapse > .column, .small-uncollapse > .columns { - padding-left: 0.625rem; - padding-right: 0.625rem; } + padding-right: 0.625rem; + padding-left: 0.625rem; } .small-centered { - float: none; - margin-left: auto; - margin-right: auto; } + margin-right: auto; + margin-left: auto; } + .small-centered, .small-centered:last-child:not(:first-child) { + float: none; + clear: both; } .small-uncentered, .small-push-0, .small-pull-0 { position: static; - margin-left: 0; + float: left; margin-right: 0; - float: left; } + margin-left: 0; } -@media screen and (min-width: 40em) { +@media print, screen and (min-width: 40em) { .medium-1 { width: 8.33333%; } .medium-push-1 { @@ -2970,8 +3087,8 @@ button { .medium-offset-11 { margin-left: 91.66667%; } .medium-up-1 > .column, .medium-up-1 > .columns { - width: 100%; - float: left; } + float: left; + width: 100%; } .medium-up-1 > .column:nth-of-type(1n), .medium-up-1 > .columns:nth-of-type(1n) { clear: none; } .medium-up-1 > .column:nth-of-type(1n+1), .medium-up-1 > .columns:nth-of-type(1n+1) { @@ -2979,8 +3096,8 @@ button { .medium-up-1 > .column:last-child, .medium-up-1 > .columns:last-child { float: left; } .medium-up-2 > .column, .medium-up-2 > .columns { - width: 50%; - float: left; } + float: left; + width: 50%; } .medium-up-2 > .column:nth-of-type(1n), .medium-up-2 > .columns:nth-of-type(1n) { clear: none; } .medium-up-2 > .column:nth-of-type(2n+1), .medium-up-2 > .columns:nth-of-type(2n+1) { @@ -2988,8 +3105,8 @@ button { .medium-up-2 > .column:last-child, .medium-up-2 > .columns:last-child { float: left; } .medium-up-3 > .column, .medium-up-3 > .columns { - width: 33.33333%; - float: left; } + float: left; + width: 33.33333%; } .medium-up-3 > .column:nth-of-type(1n), .medium-up-3 > .columns:nth-of-type(1n) { clear: none; } .medium-up-3 > .column:nth-of-type(3n+1), .medium-up-3 > .columns:nth-of-type(3n+1) { @@ -2997,8 +3114,8 @@ button { .medium-up-3 > .column:last-child, .medium-up-3 > .columns:last-child { float: left; } .medium-up-4 > .column, .medium-up-4 > .columns { - width: 25%; - float: left; } + float: left; + width: 25%; } .medium-up-4 > .column:nth-of-type(1n), .medium-up-4 > .columns:nth-of-type(1n) { clear: none; } .medium-up-4 > .column:nth-of-type(4n+1), .medium-up-4 > .columns:nth-of-type(4n+1) { @@ -3006,8 +3123,8 @@ button { .medium-up-4 > .column:last-child, .medium-up-4 > .columns:last-child { float: left; } .medium-up-5 > .column, .medium-up-5 > .columns { - width: 20%; - float: left; } + float: left; + width: 20%; } .medium-up-5 > .column:nth-of-type(1n), .medium-up-5 > .columns:nth-of-type(1n) { clear: none; } .medium-up-5 > .column:nth-of-type(5n+1), .medium-up-5 > .columns:nth-of-type(5n+1) { @@ -3015,8 +3132,8 @@ button { .medium-up-5 > .column:last-child, .medium-up-5 > .columns:last-child { float: left; } .medium-up-6 > .column, .medium-up-6 > .columns { - width: 16.66667%; - float: left; } + float: left; + width: 16.66667%; } .medium-up-6 > .column:nth-of-type(1n), .medium-up-6 > .columns:nth-of-type(1n) { clear: none; } .medium-up-6 > .column:nth-of-type(6n+1), .medium-up-6 > .columns:nth-of-type(6n+1) { @@ -3024,8 +3141,8 @@ button { .medium-up-6 > .column:last-child, .medium-up-6 > .columns:last-child { float: left; } .medium-up-7 > .column, .medium-up-7 > .columns { - width: 14.28571%; - float: left; } + float: left; + width: 14.28571%; } .medium-up-7 > .column:nth-of-type(1n), .medium-up-7 > .columns:nth-of-type(1n) { clear: none; } .medium-up-7 > .column:nth-of-type(7n+1), .medium-up-7 > .columns:nth-of-type(7n+1) { @@ -3033,8 +3150,8 @@ button { .medium-up-7 > .column:last-child, .medium-up-7 > .columns:last-child { float: left; } .medium-up-8 > .column, .medium-up-8 > .columns { - width: 12.5%; - float: left; } + float: left; + width: 12.5%; } .medium-up-8 > .column:nth-of-type(1n), .medium-up-8 > .columns:nth-of-type(1n) { clear: none; } .medium-up-8 > .column:nth-of-type(8n+1), .medium-up-8 > .columns:nth-of-type(8n+1) { @@ -3042,27 +3159,32 @@ button { .medium-up-8 > .column:last-child, .medium-up-8 > .columns:last-child { float: left; } .medium-collapse > .column, .medium-collapse > .columns { - padding-left: 0; - padding-right: 0; } + padding-right: 0; + padding-left: 0; } .medium-collapse .row { - margin-left: 0; - margin-right: 0; } + margin-right: 0; + margin-left: 0; } + .expanded.row .medium-collapse.row { + margin-right: 0; + margin-left: 0; } .medium-uncollapse > .column, .medium-uncollapse > .columns { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } .medium-centered { - float: none; - margin-left: auto; - margin-right: auto; } + margin-right: auto; + margin-left: auto; } + .medium-centered, .medium-centered:last-child:not(:first-child) { + float: none; + clear: both; } .medium-uncentered, .medium-push-0, .medium-pull-0 { position: static; - margin-left: 0; + float: left; margin-right: 0; - float: left; } } + margin-left: 0; } } -@media screen and (min-width: 64em) { +@media print, screen and (min-width: 64em) { .large-1 { width: 8.33333%; } .large-push-1 { @@ -3178,8 +3300,8 @@ button { .large-offset-11 { margin-left: 91.66667%; } .large-up-1 > .column, .large-up-1 > .columns { - width: 100%; - float: left; } + float: left; + width: 100%; } .large-up-1 > .column:nth-of-type(1n), .large-up-1 > .columns:nth-of-type(1n) { clear: none; } .large-up-1 > .column:nth-of-type(1n+1), .large-up-1 > .columns:nth-of-type(1n+1) { @@ -3187,8 +3309,8 @@ button { .large-up-1 > .column:last-child, .large-up-1 > .columns:last-child { float: left; } .large-up-2 > .column, .large-up-2 > .columns { - width: 50%; - float: left; } + float: left; + width: 50%; } .large-up-2 > .column:nth-of-type(1n), .large-up-2 > .columns:nth-of-type(1n) { clear: none; } .large-up-2 > .column:nth-of-type(2n+1), .large-up-2 > .columns:nth-of-type(2n+1) { @@ -3196,8 +3318,8 @@ button { .large-up-2 > .column:last-child, .large-up-2 > .columns:last-child { float: left; } .large-up-3 > .column, .large-up-3 > .columns { - width: 33.33333%; - float: left; } + float: left; + width: 33.33333%; } .large-up-3 > .column:nth-of-type(1n), .large-up-3 > .columns:nth-of-type(1n) { clear: none; } .large-up-3 > .column:nth-of-type(3n+1), .large-up-3 > .columns:nth-of-type(3n+1) { @@ -3205,8 +3327,8 @@ button { .large-up-3 > .column:last-child, .large-up-3 > .columns:last-child { float: left; } .large-up-4 > .column, .large-up-4 > .columns { - width: 25%; - float: left; } + float: left; + width: 25%; } .large-up-4 > .column:nth-of-type(1n), .large-up-4 > .columns:nth-of-type(1n) { clear: none; } .large-up-4 > .column:nth-of-type(4n+1), .large-up-4 > .columns:nth-of-type(4n+1) { @@ -3214,8 +3336,8 @@ button { .large-up-4 > .column:last-child, .large-up-4 > .columns:last-child { float: left; } .large-up-5 > .column, .large-up-5 > .columns { - width: 20%; - float: left; } + float: left; + width: 20%; } .large-up-5 > .column:nth-of-type(1n), .large-up-5 > .columns:nth-of-type(1n) { clear: none; } .large-up-5 > .column:nth-of-type(5n+1), .large-up-5 > .columns:nth-of-type(5n+1) { @@ -3223,8 +3345,8 @@ button { .large-up-5 > .column:last-child, .large-up-5 > .columns:last-child { float: left; } .large-up-6 > .column, .large-up-6 > .columns { - width: 16.66667%; - float: left; } + float: left; + width: 16.66667%; } .large-up-6 > .column:nth-of-type(1n), .large-up-6 > .columns:nth-of-type(1n) { clear: none; } .large-up-6 > .column:nth-of-type(6n+1), .large-up-6 > .columns:nth-of-type(6n+1) { @@ -3232,8 +3354,8 @@ button { .large-up-6 > .column:last-child, .large-up-6 > .columns:last-child { float: left; } .large-up-7 > .column, .large-up-7 > .columns { - width: 14.28571%; - float: left; } + float: left; + width: 14.28571%; } .large-up-7 > .column:nth-of-type(1n), .large-up-7 > .columns:nth-of-type(1n) { clear: none; } .large-up-7 > .column:nth-of-type(7n+1), .large-up-7 > .columns:nth-of-type(7n+1) { @@ -3241,8 +3363,8 @@ button { .large-up-7 > .column:last-child, .large-up-7 > .columns:last-child { float: left; } .large-up-8 > .column, .large-up-8 > .columns { - width: 12.5%; - float: left; } + float: left; + width: 12.5%; } .large-up-8 > .column:nth-of-type(1n), .large-up-8 > .columns:nth-of-type(1n) { clear: none; } .large-up-8 > .column:nth-of-type(8n+1), .large-up-8 > .columns:nth-of-type(8n+1) { @@ -3250,25 +3372,40 @@ button { .large-up-8 > .column:last-child, .large-up-8 > .columns:last-child { float: left; } .large-collapse > .column, .large-collapse > .columns { - padding-left: 0; - padding-right: 0; } + padding-right: 0; + padding-left: 0; } .large-collapse .row { - margin-left: 0; - margin-right: 0; } + margin-right: 0; + margin-left: 0; } + .expanded.row .large-collapse.row { + margin-right: 0; + margin-left: 0; } .large-uncollapse > .column, .large-uncollapse > .columns { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } .large-centered { - float: none; - margin-left: auto; - margin-right: auto; } + margin-right: auto; + margin-left: auto; } + .large-centered, .large-centered:last-child:not(:first-child) { + float: none; + clear: both; } .large-uncentered, .large-push-0, .large-pull-0 { position: static; - margin-left: 0; + float: left; margin-right: 0; - float: left; } } + margin-left: 0; } } + +.column-block { + margin-bottom: 1.25rem; } + .column-block > :last-child { + margin-bottom: 0; } + @media print, screen and (min-width: 40em) { + .column-block { + margin-bottom: 1.875rem; } + .column-block > :last-child { + margin-bottom: 0; } } div, dl, @@ -3293,9 +3430,9 @@ td { padding: 0; } p { + margin-bottom: 1rem; font-size: inherit; line-height: 1.6; - margin-bottom: 1rem; text-rendering: optimizeLegibility; } em, @@ -3318,42 +3455,57 @@ h3, h4, h5, h6 { - font-family: "Raleway", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: normal; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-style: normal; + font-weight: normal; color: inherit; - text-rendering: optimizeLegibility; - margin-top: 0; - margin-bottom: 0.5rem; - line-height: 1.4; } + text-rendering: optimizeLegibility; } h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: #cacaca; - line-height: 0; } + line-height: 0; + color: #cacaca; } h1 { - font-size: 1.5rem; } + font-size: 1.5rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } h2 { - font-size: 1.25rem; } + font-size: 1.25rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } h3 { - font-size: 1.1875rem; } + font-size: 1.1875rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } h4 { - font-size: 1.125rem; } + font-size: 1.125rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } h5 { - font-size: 1.0625rem; } + font-size: 1.0625rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } h6 { - font-size: 1rem; } + font-size: 1rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } -@media screen and (min-width: 40em) { +@media print, screen and (min-width: 40em) { h1 { font-size: 3rem; } h2 { @@ -3368,38 +3520,38 @@ h6 { font-size: 1rem; } } a { - color: #3f47cc; - text-decoration: none; line-height: inherit; + color: #1779ba; + text-decoration: none; cursor: pointer; } a:hover, a:focus { - color: #3038b5; } + color: #1468a0; } a img { border: 0; } hr { + clear: both; max-width: 75rem; height: 0; - border-right: 0; + margin: 1.25rem auto; border-top: 0; + border-right: 0; border-bottom: 1px solid #cacaca; - border-left: 0; - margin: 1.25rem auto; - clear: both; } + border-left: 0; } ul, ol, dl { - line-height: 1.6; margin-bottom: 1rem; - list-style-position: outside; } + list-style-position: outside; + line-height: 1.6; } li { font-size: inherit; } ul { - list-style-type: disc; - margin-left: 1.25rem; } + margin-left: 1.25rem; + list-style-type: disc; } ol { margin-left: 1.25rem; } @@ -3427,27 +3579,30 @@ cite { font-size: 0.8125rem; color: #8a8a8a; } cite:before { - content: '\2014 \0020'; } + content: "— "; } abbr { + border-bottom: 1px dotted #0a0a0a; color: #0a0a0a; - cursor: help; - border-bottom: 1px dotted #0a0a0a; } + cursor: help; } + +figure { + margin: 0; } code { + padding: 0.125rem 0.3125rem 0.0625rem; + border: 1px solid #cacaca; + background-color: #e6e6e6; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; - color: #0a0a0a; - background-color: #e6e6e6; - border: 1px solid #cacaca; - padding: 0.125rem 0.3125rem 0.0625rem; } + color: #0a0a0a; } kbd { - padding: 0.125rem 0.25rem 0; margin: 0; + padding: 0.125rem 0.25rem 0; background-color: #e6e6e6; - color: #0a0a0a; - font-family: Consolas, "Liberation Mono", Courier, monospace; } + font-family: Consolas, "Liberation Mono", Courier, monospace; + color: #0a0a0a; } .subheader { margin-top: 0.2rem; @@ -3482,7 +3637,7 @@ kbd { .text-justify { text-align: justify; } -@media screen and (min-width: 40em) { +@media print, screen and (min-width: 40em) { .medium-text-left { text-align: left; } .medium-text-right { @@ -3492,7 +3647,7 @@ kbd { .medium-text-justify { text-align: justify; } } -@media screen and (min-width: 64em) { +@media print, screen and (min-width: 64em) { .large-text-left { text-align: left; } .large-text-right { @@ -3508,8 +3663,9 @@ kbd { @media print { * { background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; color: black !important; - box-shadow: none !important; text-shadow: none !important; } .show-for-print { display: block !important; } @@ -3560,152 +3716,42 @@ kbd { h3 { page-break-after: avoid; } } -.button { - display: inline-block; - text-align: center; - line-height: 1; - cursor: pointer; - -webkit-appearance: none; - transition: background-color 0.25s ease-out, color 0.25s ease-out; - vertical-align: middle; - border: 1px solid transparent; - border-radius: 0; - padding: 0.85em 1em; - margin: 0 0 1rem 0; - font-size: 0.9rem; - background-color: #3f47cc; - color: #fff; } - [data-whatinput='mouse'] .button { - outline: 0; } - .button:hover, .button:focus { - background-color: #3037b3; - color: #fff; } - .button.tiny { - font-size: 0.6rem; } - .button.small { - font-size: 0.75rem; } - .button.large { - font-size: 1.25rem; } - .button.expanded { - display: block; - width: 100%; - margin-left: 0; - margin-right: 0; } - .button.primary { - background-color: #2199e8; - color: #fff; } - .button.primary:hover, .button.primary:focus { - background-color: #147cc0; - color: #fff; } - .button.secondary { - background-color: #777; - color: #fff; } - .button.secondary:hover, .button.secondary:focus { - background-color: #5f5f5f; - color: #fff; } - .button.success { - background-color: #3adb76; - color: #fff; } - .button.success:hover, .button.success:focus { - background-color: #22bb5b; - color: #fff; } - .button.warning { - background-color: #ffae00; - color: #fff; } - .button.warning:hover, .button.warning:focus { - background-color: #cc8b00; - color: #fff; } - .button.alert { - background-color: #ec5840; - color: #fff; } - .button.alert:hover, .button.alert:focus { - background-color: #da3116; - color: #fff; } - .button.hollow { - border: 1px solid #2199e8; - color: #2199e8; } - .button.hollow, .button.hollow:hover, .button.hollow:focus { - background-color: transparent; } - .button.hollow:hover, .button.hollow:focus { - border-color: #0c4d78; - color: #0c4d78; } - .button.hollow.primary { - border: 1px solid #2199e8; - color: #2199e8; } - .button.hollow.primary:hover, .button.hollow.primary:focus { - border-color: #0c4d78; - color: #0c4d78; } - .button.hollow.secondary { - border: 1px solid #777; - color: #777; } - .button.hollow.secondary:hover, .button.hollow.secondary:focus { - border-color: #3c3c3c; - color: #3c3c3c; } - .button.hollow.success { - border: 1px solid #3adb76; - color: #3adb76; } - .button.hollow.success:hover, .button.hollow.success:focus { - border-color: #157539; - color: #157539; } - .button.hollow.warning { - border: 1px solid #ffae00; - color: #ffae00; } - .button.hollow.warning:hover, .button.hollow.warning:focus { - border-color: #805700; - color: #805700; } - .button.hollow.alert { - border: 1px solid #ec5840; - color: #ec5840; } - .button.hollow.alert:hover, .button.hollow.alert:focus { - border-color: #881f0e; - color: #881f0e; } - .button.disabled, .button[disabled] { - opacity: 0.25; - cursor: not-allowed; } - .button.dropdown::after { - content: ''; - display: block; - width: 0; - height: 0; - border: inset 0.4em; - border-color: #fefefe transparent transparent; - border-top-style: solid; - border-bottom-width: 0; - position: relative; - top: 0.4em; - float: right; - margin-left: 1em; - display: inline-block; } - .button.arrow-only::after { - margin-left: 0; - float: none; - top: -0.1em; } - [type='text'], [type='password'], [type='date'], [type='datetime'], [type='datetime-local'], [type='month'], [type='week'], [type='email'], [type='number'], [type='search'], [type='tel'], [type='time'], [type='url'], [type='color'], textarea { display: block; - box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; width: 100%; height: 2.4375rem; + margin: 0 0 1rem; padding: 0.5rem; border: 1px solid #cacaca; - margin: 0 0 1rem; + border-radius: 0; + background-color: #fefefe; + -webkit-box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); font-family: inherit; font-size: 1rem; + font-weight: normal; color: #0a0a0a; - background-color: #fefefe; - box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); - border-radius: 0; + -webkit-transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; -webkit-appearance: none; - -moz-appearance: none; } + -moz-appearance: none; + appearance: none; } [type='text']:focus, [type='password']:focus, [type='date']:focus, [type='datetime']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='week']:focus, [type='email']:focus, [type='number']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='url']:focus, [type='color']:focus, textarea:focus { + outline: none; border: 1px solid #8a8a8a; background-color: #fefefe; - outline: none; - box-shadow: 0 0 5px #cacaca; - transition: box-shadow 0.5s, border-color 0.25s ease-in-out; } + -webkit-box-shadow: 0 0 5px #cacaca; + box-shadow: 0 0 5px #cacaca; + -webkit-transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; } textarea { max-width: 100%; } @@ -3732,16 +3778,18 @@ input:disabled, input[readonly], textarea:disabled, textarea[readonly] { background-color: #e6e6e6; - cursor: default; } + cursor: not-allowed; } [type='submit'], [type='button'] { - border-radius: 0; -webkit-appearance: none; - -moz-appearance: none; } + -moz-appearance: none; + appearance: none; + border-radius: 0; } input[type='search'] { - box-sizing: border-box; } + -webkit-box-sizing: border-box; + box-sizing: border-box; } [type='file'], [type='checkbox'], @@ -3751,10 +3799,10 @@ input[type='search'] { [type='checkbox'] + label, [type='radio'] + label { display: inline-block; + vertical-align: baseline; margin-left: 0.5rem; margin-right: 1rem; - margin-bottom: 0; - vertical-align: baseline; } + margin-bottom: 0; } [type='checkbox'] + label[for], [type='radio'] + label[for] { cursor: pointer; } @@ -3781,7 +3829,7 @@ label { margin-top: -0.5rem; font-size: 0.8125rem; font-style: italic; - color: #333; } + color: #0a0a0a; } .input-group { display: table; @@ -3792,17 +3840,21 @@ label { .input-group > :last-child > * { border-radius: 0 0 0 0; } -.input-group-label, .input-group-field, .input-group-button { +.input-group-label, .input-group-field, .input-group-button, .input-group-button a, +.input-group-button input, +.input-group-button button, +.input-group-button label { margin: 0; + white-space: nowrap; display: table-cell; vertical-align: middle; } .input-group-label { - text-align: center; padding: 0 1rem; + border: 1px solid #cacaca; background: #e6e6e6; color: #0a0a0a; - border: 1px solid #cacaca; + text-align: center; white-space: nowrap; width: 1%; height: 100%; } @@ -3819,59 +3871,81 @@ label { padding-top: 0; padding-bottom: 0; text-align: center; - height: 100%; - width: 1%; } + width: 1%; + height: 100%; } .input-group-button a, .input-group-button input, - .input-group-button button { - margin: 0; } + .input-group-button button, + .input-group-button label { + height: 2.5rem; + padding-top: 0; + padding-bottom: 0; + font-size: 1rem; } .input-group .input-group-button { display: table-cell; } fieldset { - border: 0; + margin: 0; padding: 0; - margin: 0; } + border: 0; } legend { - margin-bottom: 0.5rem; - max-width: 100%; } + max-width: 100%; + margin-bottom: 0.5rem; } .fieldset { - border: 1px solid #cacaca; + margin: 1.125rem 0; padding: 1.25rem; - margin: 1.125rem 0; } + border: 1px solid #cacaca; } .fieldset legend { - background: #fefefe; - padding: 0 0.1875rem; margin: 0; - margin-left: -0.1875rem; } + margin-left: -0.1875rem; + padding: 0 0.1875rem; + background: #fefefe; } select { height: 2.4375rem; + margin: 0 0 1rem; padding: 0.5rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; border: 1px solid #cacaca; - margin: 0 0 1rem; - font-size: 1rem; + border-radius: 0; + background-color: #fefefe; font-family: inherit; + font-size: 1rem; line-height: normal; color: #0a0a0a; - background-color: #fefefe; - border-radius: 0; - -webkit-appearance: none; - -moz-appearance: none; - background-image: url('data:image/svg+xml;utf8,'); - background-size: 9px 6px; - background-position: right center; - background-origin: content-box; - background-repeat: no-repeat; } + background-image: url("data:image/svg+xml;utf8,"); + -webkit-background-origin: content-box; + background-origin: content-box; + background-position: right -1rem center; + background-repeat: no-repeat; + -webkit-background-size: 9px 6px; + background-size: 9px 6px; + padding-right: 1.5rem; + -webkit-transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; } @media screen and (min-width: 0\0) { select { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg=="); } } + select:focus { + outline: none; + border: 1px solid #8a8a8a; + background-color: #fefefe; + -webkit-box-shadow: 0 0 5px #cacaca; + box-shadow: 0 0 5px #cacaca; + -webkit-transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; } select:disabled { background-color: #e6e6e6; - cursor: default; } + cursor: not-allowed; } select::-ms-expand { display: none; } select[multiple] { @@ -3879,11 +3953,19 @@ select { background-image: none; } .is-invalid-input:not(:focus) { - background-color: rgba(236, 88, 64, 0.1); - border-color: #ec5840; } + border-color: #cc4b37; + background-color: #f9ecea; } + .is-invalid-input:not(:focus)::-webkit-input-placeholder { + color: #cc4b37; } + .is-invalid-input:not(:focus)::-moz-placeholder { + color: #cc4b37; } + .is-invalid-input:not(:focus):-ms-input-placeholder { + color: #cc4b37; } + .is-invalid-input:not(:focus)::placeholder { + color: #cc4b37; } .is-invalid-label { - color: #ec5840; } + color: #cc4b37; } .form-error { display: none; @@ -3891,168 +3973,281 @@ select { margin-bottom: 1rem; font-size: 0.75rem; font-weight: bold; - color: #ec5840; } + color: #cc4b37; } .form-error.is-visible { display: block; } -input[type="range"] { +.button { + display: inline-block; + vertical-align: middle; + margin: 0 0 1rem 0; + padding: 0.85em 1em; -webkit-appearance: none; - -moz-appearance: none; - display: block; - width: 100%; - height: auto; + border: 1px solid transparent; + border-radius: 0; + -webkit-transition: background-color 0.25s ease-out, color 0.25s ease-out; + transition: background-color 0.25s ease-out, color 0.25s ease-out; + font-size: 0.9rem; + line-height: 1; + text-align: center; cursor: pointer; - margin-top: 0.45rem; - margin-bottom: 0.45rem; - border: 0; - line-height: 1; } - input[type="range"]:focus { + background-color: #1779ba; + color: #fefefe; } + [data-whatinput='mouse'] .button { outline: 0; } - input[type="range"][disabled] { - opacity: 0.25; } - input[type="range"]::-webkit-slider-runnable-track { - height: 0.5rem; - background: #e6e6e6; } - input[type="range"]::-webkit-slider-handle { - -webkit-appearance: none; - background: #3f47cc; - width: 1.4rem; - height: 1.4rem; - margin-top: -0.45rem; } - input[type="range"]::-moz-range-track { - -moz-appearance: none; - height: 0.5rem; - background: #e6e6e6; } - input[type="range"]::-moz-range-thumb { - -moz-appearance: none; - background: #3f47cc; - width: 1.4rem; - height: 1.4rem; - margin-top: -0.45rem; } - input[type="range"]::-ms-track { - height: 0.5rem; - background: #e6e6e6; - color: transparent; - border: 0; - overflow: visible; - border-top: 0.45rem solid #fefefe; - border-bottom: 0.45rem solid #fefefe; } - input[type="range"]::-ms-thumb { - background: #3f47cc; - width: 1.4rem; - height: 1.4rem; - border: 0; } - input[type="range"]::-ms-fill-lower { - background: #cacaca; } - input[type="range"]::-ms-fill-upper { - background: #e6e6e6; } - output { - line-height: 1.4rem; - vertical-align: middle; - margin-left: 0.5em; } + .button:hover, .button:focus { + background-color: #14679e; + color: #fefefe; } + .button.tiny { + font-size: 0.6rem; } + .button.small { + font-size: 0.75rem; } + .button.large { + font-size: 1.25rem; } + .button.expanded { + display: block; + width: 100%; + margin-right: 0; + margin-left: 0; } + .button.primary { + background-color: #1779ba; + color: #fefefe; } + .button.primary:hover, .button.primary:focus { + background-color: #126195; + color: #fefefe; } + .button.secondary { + background-color: #767676; + color: #fefefe; } + .button.secondary:hover, .button.secondary:focus { + background-color: #5e5e5e; + color: #fefefe; } + .button.success { + background-color: #3adb76; + color: #0a0a0a; } + .button.success:hover, .button.success:focus { + background-color: #22bb5b; + color: #0a0a0a; } + .button.warning { + background-color: #ffae00; + color: #0a0a0a; } + .button.warning:hover, .button.warning:focus { + background-color: #cc8b00; + color: #0a0a0a; } + .button.alert { + background-color: #cc4b37; + color: #fefefe; } + .button.alert:hover, .button.alert:focus { + background-color: #a53b2a; + color: #fefefe; } + .button.hollow { + border: 1px solid #1779ba; + color: #1779ba; } + .button.hollow, .button.hollow:hover, .button.hollow:focus { + background-color: transparent; } + .button.hollow:hover, .button.hollow:focus { + border-color: #0c3d5d; + color: #0c3d5d; } + .button.hollow.primary { + border: 1px solid #1779ba; + color: #1779ba; } + .button.hollow.primary:hover, .button.hollow.primary:focus { + border-color: #0c3d5d; + color: #0c3d5d; } + .button.hollow.secondary { + border: 1px solid #767676; + color: #767676; } + .button.hollow.secondary:hover, .button.hollow.secondary:focus { + border-color: #3b3b3b; + color: #3b3b3b; } + .button.hollow.success { + border: 1px solid #3adb76; + color: #3adb76; } + .button.hollow.success:hover, .button.hollow.success:focus { + border-color: #157539; + color: #157539; } + .button.hollow.warning { + border: 1px solid #ffae00; + color: #ffae00; } + .button.hollow.warning:hover, .button.hollow.warning:focus { + border-color: #805700; + color: #805700; } + .button.hollow.alert { + border: 1px solid #cc4b37; + color: #cc4b37; } + .button.hollow.alert:hover, .button.hollow.alert:focus { + border-color: #67251a; + color: #67251a; } + .button.disabled, .button[disabled] { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + background-color: #1779ba; + color: #fefefe; } + .button.disabled.primary, .button[disabled].primary { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.primary:hover, .button.disabled.primary:focus, .button[disabled].primary:hover, .button[disabled].primary:focus { + background-color: #1779ba; + color: #fefefe; } + .button.disabled.secondary, .button[disabled].secondary { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + background-color: #767676; + color: #fefefe; } + .button.disabled.success, .button[disabled].success { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + background-color: #3adb76; + color: #fefefe; } + .button.disabled.warning, .button[disabled].warning { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning:hover, .button[disabled].warning:focus { + background-color: #ffae00; + color: #fefefe; } + .button.disabled.alert, .button[disabled].alert { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + background-color: #cc4b37; + color: #fefefe; } + .button.dropdown::after { + display: block; + width: 0; + height: 0; + border: inset 0.4em; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #fefefe transparent transparent; + position: relative; + top: 0.4em; + display: inline-block; + float: right; + margin-left: 1em; } + .button.arrow-only::after { + top: -0.1em; + float: none; + margin-left: 0; } .accordion { - list-style-type: none; + margin-left: 0; background: #fefefe; - border: 1px solid #e6e6e6; - border-bottom: 0; - border-radius: 0; - margin-left: 0; } + list-style-type: none; } + +.accordion-item:first-child > :first-child { + border-radius: 0 0 0 0; } + +.accordion-item:last-child > :last-child { + border-radius: 0 0 0 0; } .accordion-title { + position: relative; display: block; padding: 1.25rem 1rem; - line-height: 1; + border: 1px solid #e6e6e6; + border-bottom: 0; font-size: 0.75rem; - color: #3f47cc; - position: relative; - border-bottom: 1px solid #e6e6e6; } + line-height: 1; + color: #1779ba; } + :last-child:not(.is-active) > .accordion-title { + border-bottom: 1px solid #e6e6e6; + border-radius: 0 0 0 0; } .accordion-title:hover, .accordion-title:focus { background-color: #e6e6e6; } .accordion-title::before { - content: '+'; position: absolute; - right: 1rem; top: 50%; - margin-top: -0.5rem; } + right: 1rem; + margin-top: -0.5rem; + content: '+'; } .is-active > .accordion-title::before { content: '–'; } .accordion-content { - padding: 1rem; display: none; - border-bottom: 1px solid #e6e6e6; - background-color: #fefefe; } + padding: 1rem; + border: 1px solid #e6e6e6; + border-bottom: 0; + background-color: #fefefe; + color: #0a0a0a; } + :last-child > .accordion-content:last-child { + border-bottom: 1px solid #e6e6e6; } .is-accordion-submenu-parent > a { position: relative; } .is-accordion-submenu-parent > a::after { - content: ''; display: block; width: 0; height: 0; border: inset 6px; - border-color: #3f47cc transparent transparent; - border-top-style: solid; + content: ''; border-bottom-width: 0; + border-top-style: solid; + border-color: #1779ba transparent transparent; position: absolute; top: 50%; - margin-top: -4px; + margin-top: -3px; right: 1rem; } .is-accordion-submenu-parent[aria-expanded='true'] > a::after { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); -webkit-transform-origin: 50% 50%; -ms-transform-origin: 50% 50%; - transform-origin: 50% 50%; - -webkit-transform: scaleY(-1); - -ms-transform: scaleY(-1); - transform: scaleY(-1); } + transform-origin: 50% 50%; } .badge { display: inline-block; - padding: 0.3em; min-width: 2.1em; + padding: 0.3em; + border-radius: 50%; font-size: 0.6rem; text-align: center; - border-radius: 50%; - background: #3f47cc; + background: #1779ba; color: #fefefe; } + .badge.primary { + background: #1779ba; + color: #fefefe; } .badge.secondary { - background: #777; + background: #767676; color: #fefefe; } .badge.success { background: #3adb76; - color: #fefefe; } + color: #0a0a0a; } .badge.warning { background: #ffae00; - color: #fefefe; } + color: #0a0a0a; } .badge.alert { - background: #ec5840; + background: #cc4b37; color: #fefefe; } .breadcrumbs { - list-style: none; - margin: 0 0 1rem 0; } + margin: 0 0 1rem 0; + list-style: none; } .breadcrumbs::before, .breadcrumbs::after { - content: ' '; - display: table; } + display: table; + content: ' '; } .breadcrumbs::after { clear: both; } .breadcrumbs li { float: left; - color: #0a0a0a; font-size: 0.6875rem; + color: #0a0a0a; cursor: default; text-transform: uppercase; } .breadcrumbs li:not(:last-child)::after { - color: #cacaca; - content: "/"; - margin: 0 0.75rem; position: relative; top: 1px; - opacity: 1; } + margin: 0 0.75rem; + opacity: 1; + content: "/"; + color: #cacaca; } .breadcrumbs a { - color: #3f47cc; } + color: #1779ba; } .breadcrumbs a:hover { text-decoration: underline; } .breadcrumbs .disabled { @@ -4063,15 +4258,17 @@ input[type="range"] { margin-bottom: 1rem; font-size: 0; } .button-group::before, .button-group::after { - content: ' '; - display: table; } + display: table; + content: ' '; } .button-group::after { clear: both; } .button-group .button { margin: 0; + margin-right: 1px; + margin-bottom: 1px; font-size: 0.9rem; } - .button-group .button:not(:last-child) { - margin-right: 1px; } + .button-group .button:last-child { + margin-right: 0; } .button-group.tiny .button { font-size: 0.6rem; } .button-group.small .button { @@ -4086,67 +4283,74 @@ input[type="range"] { display: inline-block; width: calc(50% - 1px); margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(2):last-child, .button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button:last-child { + margin-right: -6px; } .button-group.expanded .button:first-child:nth-last-child(3), .button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button { display: inline-block; width: calc(33.33333% - 1px); margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(3):last-child, .button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button:last-child { + margin-right: -6px; } .button-group.expanded .button:first-child:nth-last-child(4), .button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button { display: inline-block; width: calc(25% - 1px); margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(4):last-child, .button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button:last-child { + margin-right: -6px; } .button-group.expanded .button:first-child:nth-last-child(5), .button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button { display: inline-block; width: calc(20% - 1px); margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(5):last-child, .button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button:last-child { + margin-right: -6px; } .button-group.expanded .button:first-child:nth-last-child(6), .button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button { display: inline-block; width: calc(16.66667% - 1px); margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(6):last-child, .button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button:last-child { + margin-right: -6px; } .button-group.primary .button { - background-color: #2199e8; - color: #fff; } + background-color: #1779ba; + color: #fefefe; } .button-group.primary .button:hover, .button-group.primary .button:focus { - background-color: #147cc0; - color: #fff; } + background-color: #126195; + color: #fefefe; } .button-group.secondary .button { - background-color: #777; - color: #fff; } + background-color: #767676; + color: #fefefe; } .button-group.secondary .button:hover, .button-group.secondary .button:focus { - background-color: #5f5f5f; - color: #fff; } + background-color: #5e5e5e; + color: #fefefe; } .button-group.success .button { background-color: #3adb76; - color: #fff; } + color: #0a0a0a; } .button-group.success .button:hover, .button-group.success .button:focus { background-color: #22bb5b; - color: #fff; } + color: #0a0a0a; } .button-group.warning .button { background-color: #ffae00; - color: #fff; } + color: #0a0a0a; } .button-group.warning .button:hover, .button-group.warning .button:focus { background-color: #cc8b00; - color: #fff; } + color: #0a0a0a; } .button-group.alert .button { - background-color: #ec5840; - color: #fff; } + background-color: #cc4b37; + color: #fefefe; } .button-group.alert .button:hover, .button-group.alert .button:focus { - background-color: #da3116; - color: #fff; } + background-color: #a53b2a; + color: #fefefe; } .button-group.stacked .button, .button-group.stacked-for-small .button, .button-group.stacked-for-medium .button { - width: 100%; - border-right: 1px solid transparent; } - .button-group.stacked .button:not(:last-child), .button-group.stacked-for-small .button:not(:last-child), .button-group.stacked-for-medium .button:not(:last-child) { - border-bottom: 1px solid #fefefe; } - @media screen and (min-width: 40em) { + width: 100%; } + .button-group.stacked .button:last-child, .button-group.stacked-for-small .button:last-child, .button-group.stacked-for-medium .button:last-child { + margin-bottom: 0; } + @media print, screen and (min-width: 40em) { .button-group.stacked-for-small .button { - width: auto; } - .button-group.stacked-for-small .button:not(:last-child) { - margin-right: 1px; } } - @media screen and (min-width: 64em) { + width: auto; + margin-bottom: 0; } } + @media print, screen and (min-width: 64em) { .button-group.stacked-for-medium .button { - width: auto; } - .button-group.stacked-for-medium .button:not(:last-child) { - margin-right: 1px; } } + width: auto; + margin-bottom: 0; } } @media screen and (max-width: 39.9375em) { .button-group.stacked-for-small.expanded { display: block; } @@ -4155,27 +4359,32 @@ input[type="range"] { margin-right: 0; } } .callout { + position: relative; margin: 0 0 1rem 0; padding: 1rem; border: 1px solid rgba(10, 10, 10, 0.25); border-radius: 0; - position: relative; - color: #0a0a0a; - background-color: white; } + background-color: white; + color: #0a0a0a; } .callout > :first-child { margin-top: 0; } .callout > :last-child { margin-bottom: 0; } .callout.primary { - background-color: #def0fc; } + background-color: #d7ecfa; + color: #0a0a0a; } .callout.secondary { - background-color: #ebebeb; } + background-color: #eaeaea; + color: #0a0a0a; } .callout.success { - background-color: #e1faea; } + background-color: #e1faea; + color: #0a0a0a; } .callout.warning { - background-color: #fff3d9; } + background-color: #fff3d9; + color: #0a0a0a; } .callout.alert { - background-color: #fce6e2; } + background-color: #f7e4e1; + color: #0a0a0a; } .callout.small { padding-top: 0.5rem; padding-right: 0.5rem; @@ -4187,33 +4396,223 @@ input[type="range"] { padding-bottom: 3rem; padding-left: 3rem; } +.card { + margin-bottom: 1rem; + border: 1px solid #e6e6e6; + border-radius: 0; + background: #fefefe; + -webkit-box-shadow: none; + box-shadow: none; + overflow: hidden; + color: #0a0a0a; } + .card > :last-child { + margin-bottom: 0; } + +.card-divider { + padding: 1rem; + background: #e6e6e6; } + .card-divider > :last-child { + margin-bottom: 0; } + +.card-section { + padding: 1rem; } + .card-section > :last-child { + margin-bottom: 0; } + .close-button { position: absolute; color: #8a8a8a; - right: 1rem; - top: 0.5rem; - font-size: 2em; - line-height: 1; cursor: pointer; } [data-whatinput='mouse'] .close-button { outline: 0; } .close-button:hover, .close-button:focus { color: #0a0a0a; } + .close-button.small { + right: 0.66rem; + top: 0.33em; + font-size: 1.5em; + line-height: 1; } + .close-button, .close-button.medium { + right: 1rem; + top: 0.5rem; + font-size: 2em; + line-height: 1; } + +.menu { + margin: 0; + list-style-type: none; } + .menu > li { + display: table-cell; + vertical-align: middle; } + [data-whatinput='mouse'] .menu > li { + outline: 0; } + .menu > li > a { + display: block; + padding: 0.7rem 1rem; + line-height: 1; } + .menu input, + .menu select, + .menu a, + .menu button { + margin-bottom: 0; } + .menu > li > a img, + .menu > li > a i, + .menu > li > a svg { + vertical-align: middle; } + .menu > li > a img + span, + .menu > li > a i + span, + .menu > li > a svg + span { + vertical-align: middle; } + .menu > li > a img, + .menu > li > a i, + .menu > li > a svg { + margin-right: 0.25rem; + display: inline-block; } + .menu > li, .menu.horizontal > li { + display: table-cell; } + .menu.expanded { + display: table; + width: 100%; + table-layout: fixed; } + .menu.expanded > li:first-child:last-child { + width: 100%; } + .menu.vertical > li { + display: block; } + @media print, screen and (min-width: 40em) { + .menu.medium-horizontal > li { + display: table-cell; } + .menu.medium-expanded { + display: table; + width: 100%; + table-layout: fixed; } + .menu.medium-expanded > li:first-child:last-child { + width: 100%; } + .menu.medium-vertical > li { + display: block; } } + @media print, screen and (min-width: 64em) { + .menu.large-horizontal > li { + display: table-cell; } + .menu.large-expanded { + display: table; + width: 100%; + table-layout: fixed; } + .menu.large-expanded > li:first-child:last-child { + width: 100%; } + .menu.large-vertical > li { + display: block; } } + .menu.simple li { + display: inline-block; + margin-right: 1rem; + line-height: 1; } + .menu.simple a { + padding: 0; } + .menu.align-right::before, .menu.align-right::after { + display: table; + content: ' '; } + .menu.align-right::after { + clear: both; } + .menu.align-right > li { + float: right; } + .menu.icon-top > li > a { + text-align: center; } + .menu.icon-top > li > a img, + .menu.icon-top > li > a i, + .menu.icon-top > li > a svg { + display: block; + margin: 0 auto 0.25rem; } + .menu.icon-top.vertical a > span { + margin: auto; } + .menu.nested { + margin-left: 1rem; } + .menu .active > a { + background: #1779ba; + color: #fefefe; } + .menu.menu-bordered li { + border: 1px solid #e6e6e6; } + .menu.menu-bordered li:not(:first-child) { + border-top: 0; } + .menu.menu-hover li:hover { + background-color: #e6e6e6; } + +.menu-text { + padding-top: 0; + padding-bottom: 0; + padding: 0.7rem 1rem; + font-weight: bold; + line-height: 1; + color: inherit; } + +.menu-centered { + text-align: center; } + .menu-centered > .menu { + display: inline-block; } + +.no-js [data-responsive-menu] ul { + display: none; } + +.menu-icon { + position: relative; + display: inline-block; + vertical-align: middle; + width: 20px; + height: 16px; + cursor: pointer; } + .menu-icon::after { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 2px; + background: #fefefe; + -webkit-box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe; + box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe; + content: ''; } + .menu-icon:hover::after { + background: #cacaca; + -webkit-box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; + box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; } + +.menu-icon.dark { + position: relative; + display: inline-block; + vertical-align: middle; + width: 20px; + height: 16px; + cursor: pointer; } + .menu-icon.dark::after { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 2px; + background: #0a0a0a; + -webkit-box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; + box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; + content: ''; } + .menu-icon.dark:hover::after { + background: #8a8a8a; + -webkit-box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; + box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; } .is-drilldown { position: relative; overflow: hidden; } .is-drilldown li { - display: block !important; } + display: block; } + .is-drilldown.animate-height { + -webkit-transition: height 0.5s; + transition: height 0.5s; } .is-drilldown-submenu { position: absolute; top: 0; left: 100%; z-index: -1; - height: 100%; width: 100%; background: #fefefe; + -webkit-transition: -webkit-transform 0.15s linear; transition: -webkit-transform 0.15s linear; transition: transform 0.15s linear; transition: transform 0.15s linear, -webkit-transform 0.15s linear; } @@ -4228,47 +4627,51 @@ input[type="range"] { -ms-transform: translateX(100%); transform: translateX(100%); } +.drilldown-submenu-cover-previous { + min-height: 100%; } + .is-drilldown-submenu-parent > a { position: relative; } .is-drilldown-submenu-parent > a::after { - content: ''; display: block; width: 0; height: 0; border: inset 6px; - border-color: transparent transparent transparent #3f47cc; - border-left-style: solid; + content: ''; border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #1779ba; position: absolute; top: 50%; margin-top: -6px; right: 1rem; } .js-drilldown-back > a::before { - content: ''; display: block; width: 0; height: 0; border: inset 6px; - border-color: transparent #3f47cc transparent transparent; - border-right-style: solid; + content: ''; border-left-width: 0; + border-right-style: solid; + border-color: transparent #1779ba transparent transparent; border-left-width: 0; display: inline-block; vertical-align: middle; - margin-right: 0.75rem; } + margin-right: 0.75rem; + border-left-width: 0; } .dropdown-pane { - background-color: #fefefe; - border: 1px solid #cacaca; - border-radius: 0; + position: absolute; + z-index: 10; display: block; - font-size: 16rem; + width: 300px; padding: 1rem; - position: absolute; visibility: hidden; - width: 300px; - z-index: 10; } + border: 1px solid #cacaca; + border-radius: 0; + background-color: #fefefe; + font-size: 1rem; } .dropdown-pane.is-open { visibility: visible; } @@ -4282,30 +4685,30 @@ input[type="range"] { width: 400px; } .dropdown.menu > li.opens-left > .is-dropdown-submenu { - left: auto; + top: 100%; right: 0; - top: 100%; } + left: auto; } .dropdown.menu > li.opens-right > .is-dropdown-submenu { + top: 100%; right: auto; - left: 0; - top: 100%; } + left: 0; } .dropdown.menu > li.is-dropdown-submenu-parent > a { - padding-right: 1.5rem; - position: relative; } + position: relative; + padding-right: 1.5rem; } .dropdown.menu > li.is-dropdown-submenu-parent > a::after { - content: ''; display: block; width: 0; height: 0; - border: inset 5px; - border-color: #3f47cc transparent transparent; - border-top-style: solid; + border: inset 6px; + content: ''; border-bottom-width: 0; + border-top-style: solid; + border-color: #1779ba transparent transparent; right: 5px; - margin-top: -2px; } + margin-top: -3px; } [data-whatinput='mouse'] .dropdown.menu a { outline: 0; } @@ -4316,148 +4719,145 @@ input[type="range"] { .dropdown.menu.vertical > li .is-dropdown-submenu { top: 0; } -.dropdown.menu.vertical > li.opens-left .is-dropdown-submenu { - left: auto; - right: 100%; } +.dropdown.menu.vertical > li.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; } -.dropdown.menu.vertical > li.opens-right .is-dropdown-submenu { +.dropdown.menu.vertical > li.opens-right > .is-dropdown-submenu { right: auto; left: 100%; } .dropdown.menu.vertical > li > a::after { - right: 14px; - margin-top: -3px; } + right: 14px; } .dropdown.menu.vertical > li.opens-left > a::after { - content: ''; display: block; width: 0; height: 0; - border: inset 5px; - border-color: transparent #3f47cc transparent transparent; + border: inset 6px; + content: ''; + border-left-width: 0; border-right-style: solid; - border-left-width: 0; } + border-color: transparent #1779ba transparent transparent; } .dropdown.menu.vertical > li.opens-right > a::after { - content: ''; display: block; width: 0; height: 0; - border: inset 5px; - border-color: transparent transparent transparent #3f47cc; + border: inset 6px; + content: ''; + border-right-width: 0; border-left-style: solid; - border-right-width: 0; } + border-color: transparent transparent transparent #1779ba; } -@media screen and (min-width: 40em) { +@media print, screen and (min-width: 40em) { .dropdown.menu.medium-horizontal > li.opens-left > .is-dropdown-submenu { - left: auto; + top: 100%; right: 0; - top: 100%; } + left: auto; } .dropdown.menu.medium-horizontal > li.opens-right > .is-dropdown-submenu { + top: 100%; right: auto; - left: 0; - top: 100%; } + left: 0; } .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a { - padding-right: 1.5rem; - position: relative; } + position: relative; + padding-right: 1.5rem; } .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a::after { - content: ''; display: block; width: 0; height: 0; - border: inset 5px; - border-color: #3f47cc transparent transparent; - border-top-style: solid; + border: inset 6px; + content: ''; border-bottom-width: 0; + border-top-style: solid; + border-color: #1779ba transparent transparent; right: 5px; - margin-top: -2px; } + margin-top: -3px; } .dropdown.menu.medium-vertical > li .is-dropdown-submenu { top: 0; } - .dropdown.menu.medium-vertical > li.opens-left .is-dropdown-submenu { - left: auto; - right: 100%; } - .dropdown.menu.medium-vertical > li.opens-right .is-dropdown-submenu { + .dropdown.menu.medium-vertical > li.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; } + .dropdown.menu.medium-vertical > li.opens-right > .is-dropdown-submenu { right: auto; left: 100%; } .dropdown.menu.medium-vertical > li > a::after { - right: 14px; - margin-top: -3px; } + right: 14px; } .dropdown.menu.medium-vertical > li.opens-left > a::after { - content: ''; display: block; width: 0; height: 0; - border: inset 5px; - border-color: transparent #3f47cc transparent transparent; + border: inset 6px; + content: ''; + border-left-width: 0; border-right-style: solid; - border-left-width: 0; } + border-color: transparent #1779ba transparent transparent; } .dropdown.menu.medium-vertical > li.opens-right > a::after { - content: ''; display: block; width: 0; height: 0; - border: inset 5px; - border-color: transparent transparent transparent #3f47cc; + border: inset 6px; + content: ''; + border-right-width: 0; border-left-style: solid; - border-right-width: 0; } } + border-color: transparent transparent transparent #1779ba; } } -@media screen and (min-width: 64em) { +@media print, screen and (min-width: 64em) { .dropdown.menu.large-horizontal > li.opens-left > .is-dropdown-submenu { - left: auto; + top: 100%; right: 0; - top: 100%; } + left: auto; } .dropdown.menu.large-horizontal > li.opens-right > .is-dropdown-submenu { + top: 100%; right: auto; - left: 0; - top: 100%; } + left: 0; } .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a { - padding-right: 1.5rem; - position: relative; } + position: relative; + padding-right: 1.5rem; } .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a::after { - content: ''; display: block; width: 0; height: 0; - border: inset 5px; - border-color: #3f47cc transparent transparent; - border-top-style: solid; + border: inset 6px; + content: ''; border-bottom-width: 0; + border-top-style: solid; + border-color: #1779ba transparent transparent; right: 5px; - margin-top: -2px; } + margin-top: -3px; } .dropdown.menu.large-vertical > li .is-dropdown-submenu { top: 0; } - .dropdown.menu.large-vertical > li.opens-left .is-dropdown-submenu { - left: auto; - right: 100%; } - .dropdown.menu.large-vertical > li.opens-right .is-dropdown-submenu { + .dropdown.menu.large-vertical > li.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; } + .dropdown.menu.large-vertical > li.opens-right > .is-dropdown-submenu { right: auto; left: 100%; } .dropdown.menu.large-vertical > li > a::after { - right: 14px; - margin-top: -3px; } + right: 14px; } .dropdown.menu.large-vertical > li.opens-left > a::after { - content: ''; display: block; width: 0; height: 0; - border: inset 5px; - border-color: transparent #3f47cc transparent transparent; + border: inset 6px; + content: ''; + border-left-width: 0; border-right-style: solid; - border-left-width: 0; } + border-color: transparent #1779ba transparent transparent; } .dropdown.menu.large-vertical > li.opens-right > a::after { - content: ''; display: block; width: 0; height: 0; - border: inset 5px; - border-color: transparent transparent transparent #3f47cc; + border: inset 6px; + content: ''; + border-right-width: 0; border-left-style: solid; - border-right-width: 0; } } + border-color: transparent transparent transparent #1779ba; } } .dropdown.menu.align-right .is-dropdown-submenu.first-sub { top: 100%; - left: auto; - right: 0; } + right: 0; + left: auto; } .is-dropdown-menu.vertical { width: 100px; } @@ -4470,57 +4870,63 @@ input[type="range"] { position: absolute; top: 50%; right: 5px; - margin-top: -2px; } - .is-dropdown-submenu-parent.opens-inner .is-dropdown-submenu { - top: 100%; } - .is-dropdown-submenu-parent.opens-left .is-dropdown-submenu { - left: auto; - right: 100%; } + margin-top: -6px; } + .is-dropdown-submenu-parent.opens-inner > .is-dropdown-submenu { + top: 100%; + left: auto; } + .is-dropdown-submenu-parent.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; } + .is-dropdown-submenu-parent.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } .is-dropdown-submenu { - display: none; position: absolute; top: 0; left: 100%; - min-width: 200px; z-index: 1; - background: #fefefe; - border: 1px solid #cacaca; } + display: none; + min-width: 200px; + border: 1px solid #cacaca; + background: #fefefe; } .is-dropdown-submenu .is-dropdown-submenu-parent > a::after { - right: 14px; - margin-top: -3px; } + right: 14px; } .is-dropdown-submenu .is-dropdown-submenu-parent.opens-left > a::after { - content: ''; display: block; width: 0; height: 0; - border: inset 5px; - border-color: transparent #3f47cc transparent transparent; + border: inset 6px; + content: ''; + border-left-width: 0; border-right-style: solid; - border-left-width: 0; } + border-color: transparent #1779ba transparent transparent; } .is-dropdown-submenu .is-dropdown-submenu-parent.opens-right > a::after { - content: ''; display: block; width: 0; height: 0; - border: inset 5px; - border-color: transparent transparent transparent #3f47cc; + border: inset 6px; + content: ''; + border-right-width: 0; border-left-style: solid; - border-right-width: 0; } + border-color: transparent transparent transparent #1779ba; } .is-dropdown-submenu .is-dropdown-submenu { margin-top: -1px; } .is-dropdown-submenu > li { width: 100%; } - .is-dropdown-submenu:not(.js-dropdown-nohover) > .is-dropdown-submenu-parent:hover > .is-dropdown-submenu, .is-dropdown-submenu.js-dropdown-active { + .is-dropdown-submenu.js-dropdown-active { display: block; } -.flex-video { +.responsive-embed, .flex-video { position: relative; height: 0; - padding-bottom: 75%; margin-bottom: 1rem; + padding-bottom: 75%; overflow: hidden; } - .flex-video iframe, + .responsive-embed iframe, + .responsive-embed object, + .responsive-embed embed, + .responsive-embed video, .flex-video iframe, .flex-video object, .flex-video embed, .flex-video video { @@ -4529,37 +4935,38 @@ input[type="range"] { left: 0; width: 100%; height: 100%; } - .flex-video.widescreen { + .responsive-embed.widescreen, .flex-video.widescreen { padding-bottom: 56.25%; } - .flex-video.vimeo { - padding-top: 0; } .label { display: inline-block; padding: 0.33333rem 0.5rem; + border-radius: 0; font-size: 0.8rem; line-height: 1; white-space: nowrap; cursor: default; - border-radius: 0; - background: #3f47cc; + background: #1779ba; color: #fefefe; } + .label.primary { + background: #1779ba; + color: #fefefe; } .label.secondary { - background: #777; + background: #767676; color: #fefefe; } .label.success { background: #3adb76; - color: #fefefe; } + color: #0a0a0a; } .label.warning { background: #ffae00; - color: #fefefe; } + color: #0a0a0a; } .label.alert { - background: #ec5840; + background: #cc4b37; color: #fefefe; } .media-object { - margin-bottom: 1rem; - display: block; } + display: block; + margin-bottom: 1rem; } .media-object img { max-width: none; } @media screen and (max-width: 39.9375em) { @@ -4577,214 +4984,274 @@ input[type="range"] { padding-right: 1rem; } .media-object-section:last-child:not(:nth-child(2)) { padding-left: 1rem; } + .media-object-section > :last-child { + margin-bottom: 0; } .media-object-section.middle { vertical-align: middle; } .media-object-section.bottom { vertical-align: bottom; } -.menu { - margin: 0; - list-style-type: none; } - .menu > li { - display: table-cell; - vertical-align: middle; } - [data-whatinput='mouse'] .menu > li { - outline: 0; } - .menu > li > a { - display: block; - padding: 0.7rem 1rem; - line-height: 1; } - .menu input, - .menu a, - .menu button { - margin-bottom: 0; } - .menu > li > a img, - .menu > li > a i { - vertical-align: middle; } - .menu > li > a i + span, - .menu > li > a img + span { - vertical-align: middle; } - .menu > li > a img, - .menu > li > a i { - margin-right: 0.25rem; - display: inline-block; } - .menu > li { - display: table-cell; } - .menu.vertical > li { - display: block; } - @media screen and (min-width: 40em) { - .menu.medium-horizontal > li { - display: table-cell; } - .menu.medium-vertical > li { - display: block; } } - @media screen and (min-width: 64em) { - .menu.large-horizontal > li { - display: table-cell; } - .menu.large-vertical > li { - display: block; } } - .menu.simple li { - line-height: 1; - display: inline-block; - margin-right: 1rem; } - .menu.simple a { - padding: 0; } - .menu.align-right::before, .menu.align-right::after { - content: ' '; - display: table; } - .menu.align-right::after { - clear: both; } - .menu.align-right > li { - float: right; } - .menu.expanded { - width: 100%; - display: table; - table-layout: fixed; } - .menu.expanded > li:first-child:last-child { - width: 100%; } - .menu.icon-top > li > a { - text-align: center; } - .menu.icon-top > li > a img, - .menu.icon-top > li > a i { - display: block; - margin: 0 auto 0.25rem; } - .menu.nested { - margin-left: 1rem; } - .menu .active > a { - color: #60FF00; - background: rgba(254, 254, 254, 0.65); } - -.menu-text { - font-weight: bold; - color: inherit; - line-height: 1; - padding-top: 0; - padding-bottom: 0; - padding: 0.7rem 1rem; } - -.menu-centered { - text-align: center; } - .menu-centered > .menu { - display: inline-block; } - -.no-js [data-responsive-menu] ul { - display: none; } +.is-off-canvas-open { + overflow: hidden; } -html, -body { - height: 100%; } +.js-off-canvas-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + -webkit-transition: opacity 0.5s ease, visibility 0.5s ease; + transition: opacity 0.5s ease, visibility 0.5s ease; + background: rgba(254, 254, 254, 0.25); + opacity: 0; + visibility: hidden; + overflow: hidden; } + .js-off-canvas-overlay.is-visible { + opacity: 1; + visibility: visible; } + .js-off-canvas-overlay.is-closable { + cursor: pointer; } + .js-off-canvas-overlay.is-overlay-absolute { + position: absolute; } + .js-off-canvas-overlay.is-overlay-fixed { + position: fixed; } .off-canvas-wrapper { - width: 100%; - overflow-x: hidden; position: relative; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-overflow-scrolling: auto; } + overflow: hidden; } -.off-canvas-wrapper-inner { - position: relative; - width: 100%; +.off-canvas { + position: fixed; + z-index: 1; + -webkit-transition: -webkit-transform 0.5s ease; transition: -webkit-transform 0.5s ease; transition: transform 0.5s ease; - transition: transform 0.5s ease, -webkit-transform 0.5s ease; } - .off-canvas-wrapper-inner::before, .off-canvas-wrapper-inner::after { - content: ' '; - display: table; } - .off-canvas-wrapper-inner::after { - clear: both; } - -.off-canvas-content, -.off-canvas-content { - min-height: 100%; - background: #fefefe; + transition: transform 0.5s ease, -webkit-transform 0.5s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + background: #2c3840; } + [data-whatinput='mouse'] .off-canvas { + outline: 0; } + .off-canvas.is-transition-overlap { + z-index: 10; } + .off-canvas.is-transition-overlap.is-open { + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); } + .off-canvas.is-open { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + +.off-canvas-absolute { + position: absolute; + z-index: 1; + -webkit-transition: -webkit-transform 0.5s ease; transition: -webkit-transform 0.5s ease; transition: transform 0.5s ease; transition: transform 0.5s ease, -webkit-transform 0.5s ease; -webkit-backface-visibility: hidden; backface-visibility: hidden; - z-index: 1; - padding-bottom: 0.1px; - box-shadow: 0 0 10px rgba(10, 10, 10, 0.5); } - -.js-off-canvas-exit { - display: none; - position: absolute; + background: #2c3840; } + [data-whatinput='mouse'] .off-canvas-absolute { + outline: 0; } + .off-canvas-absolute.is-transition-overlap { + z-index: 10; } + .off-canvas-absolute.is-transition-overlap.is-open { + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); } + .off-canvas-absolute.is-open { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + +.position-left { top: 0; left: 0; - width: 100%; + width: 250px; height: 100%; - background: rgba(254, 254, 254, 0.25); - cursor: pointer; - transition: background 0.5s ease; } - -.off-canvas { - position: absolute; - background: #e6e6e6; - z-index: -1; - max-height: 100%; - overflow-y: auto; - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); } - [data-whatinput='mouse'] .off-canvas { - outline: 0; } - .off-canvas.position-left { - left: -250px; + -webkit-transform: translateX(-250px); + -ms-transform: translateX(-250px); + transform: translateX(-250px); + overflow-y: auto; } + .position-left.is-open ~ .off-canvas-content { + -webkit-transform: translateX(250px); + -ms-transform: translateX(250px); + transform: translateX(250px); } + .position-left.is-transition-push::after { + position: absolute; + top: 0; + right: 0; + height: 100%; + width: 1px; + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + content: " "; } + .position-left.is-transition-overlap.is-open ~ .off-canvas-content { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + +.position-right { + top: 0; + right: 0; + width: 250px; + height: 100%; + -webkit-transform: translateX(250px); + -ms-transform: translateX(250px); + transform: translateX(250px); + overflow-y: auto; } + .position-right.is-open ~ .off-canvas-content { + -webkit-transform: translateX(-250px); + -ms-transform: translateX(-250px); + transform: translateX(-250px); } + .position-right.is-transition-push::after { + position: absolute; top: 0; - width: 250px; } - .is-open-left { - -webkit-transform: translateX(250px); - -ms-transform: translateX(250px); - transform: translateX(250px); } - .off-canvas.position-right { - right: -250px; + left: 0; + height: 100%; + width: 1px; + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + content: " "; } + .position-right.is-transition-overlap.is-open ~ .off-canvas-content { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + +.position-top { + top: 0; + left: 0; + width: 100%; + height: 250px; + -webkit-transform: translateY(-250px); + -ms-transform: translateY(-250px); + transform: translateY(-250px); + overflow-x: auto; } + .position-top.is-open ~ .off-canvas-content { + -webkit-transform: translateY(250px); + -ms-transform: translateY(250px); + transform: translateY(250px); } + .position-top.is-transition-push::after { + position: absolute; + bottom: 0; + left: 0; + height: 1px; + width: 100%; + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + content: " "; } + .position-top.is-transition-overlap.is-open ~ .off-canvas-content { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + +.position-bottom { + bottom: 0; + left: 0; + width: 100%; + height: 250px; + -webkit-transform: translateY(250px); + -ms-transform: translateY(250px); + transform: translateY(250px); + overflow-x: auto; } + .position-bottom.is-open ~ .off-canvas-content { + -webkit-transform: translateY(-250px); + -ms-transform: translateY(-250px); + transform: translateY(-250px); } + .position-bottom.is-transition-push::after { + position: absolute; top: 0; - width: 250px; } - .is-open-right { - -webkit-transform: translateX(-250px); - -ms-transform: translateX(-250px); - transform: translateX(-250px); } + left: 0; + height: 1px; + width: 100%; + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + content: " "; } + .position-bottom.is-transition-overlap.is-open ~ .off-canvas-content { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + +.off-canvas-content { + -webkit-transition: -webkit-transform 0.5s ease; + transition: -webkit-transform 0.5s ease; + transition: transform 0.5s ease; + transition: transform 0.5s ease, -webkit-transform 0.5s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } -@media screen and (min-width: 40em) { +@media print, screen and (min-width: 40em) { .position-left.reveal-for-medium { - left: 0; - z-index: auto; - position: fixed; } + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } .position-left.reveal-for-medium ~ .off-canvas-content { margin-left: 250px; } .position-right.reveal-for-medium { - right: 0; - z-index: auto; - position: fixed; } + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } .position-right.reveal-for-medium ~ .off-canvas-content { - margin-right: 250px; } } - -@media screen and (min-width: 64em) { + margin-right: 250px; } + .position-top.reveal-for-medium { + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } + .position-top.reveal-for-medium ~ .off-canvas-content { + margin-top: 250px; } + .position-bottom.reveal-for-medium { + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } + .position-bottom.reveal-for-medium ~ .off-canvas-content { + margin-bottom: 250px; } } + +@media print, screen and (min-width: 64em) { .position-left.reveal-for-large { - left: 0; - z-index: auto; - position: fixed; } + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } .position-left.reveal-for-large ~ .off-canvas-content { margin-left: 250px; } .position-right.reveal-for-large { - right: 0; - z-index: auto; - position: fixed; } + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } .position-right.reveal-for-large ~ .off-canvas-content { - margin-right: 250px; } } + margin-right: 250px; } + .position-top.reveal-for-large { + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } + .position-top.reveal-for-large ~ .off-canvas-content { + margin-top: 250px; } + .position-bottom.reveal-for-large { + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } + .position-bottom.reveal-for-large ~ .off-canvas-content { + margin-bottom: 250px; } } .orbit { position: relative; } .orbit-container { position: relative; + height: 0; margin: 0; - overflow: hidden; - list-style: none; } + list-style: none; + overflow: hidden; } .orbit-slide { - width: 100%; - max-height: 100%; } + width: 100%; } .orbit-slide.no-motionui.is-active { top: 0; left: 0; } @@ -4793,18 +5260,18 @@ body { margin: 0; } .orbit-image { - margin: 0; width: 100%; - max-width: 100%; } + max-width: 100%; + margin: 0; } .orbit-caption { position: absolute; bottom: 0; width: 100%; - padding: 1rem; margin-bottom: 0; - color: #fefefe; - background-color: rgba(10, 10, 10, 0.5); } + padding: 1rem; + background-color: rgba(10, 10, 10, 0.5); + color: #fefefe; } .orbit-previous, .orbit-next { position: absolute; @@ -4838,8 +5305,8 @@ body { width: 1.2rem; height: 1.2rem; margin: 0.1rem; - background-color: #cacaca; - border-radius: 50%; } + border-radius: 50%; + background-color: #cacaca; } .orbit-bullets button:hover { background-color: #8a8a8a; } .orbit-bullets button.is-active { @@ -4849,32 +5316,32 @@ body { margin-left: 0; margin-bottom: 1rem; } .pagination::before, .pagination::after { - content: ' '; - display: table; } + display: table; + content: ' '; } .pagination::after { clear: both; } .pagination li { - font-size: 0.875rem; margin-right: 0.0625rem; border-radius: 0; + font-size: 0.875rem; display: none; } .pagination li:last-child, .pagination li:first-child { display: inline-block; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { .pagination li { display: inline-block; } } .pagination a, .pagination button { - color: #0a0a0a; display: block; padding: 0.1875rem 0.625rem; - border-radius: 0; } + border-radius: 0; + color: #0a0a0a; } .pagination a:hover, .pagination button:hover { background: #e6e6e6; } .pagination .current { padding: 0.1875rem 0.625rem; - background: #3f47cc; + background: #1779ba; color: #fefefe; cursor: default; } .pagination .disabled { @@ -4884,134 +5351,58 @@ body { .pagination .disabled:hover { background: transparent; } .pagination .ellipsis::after { - content: '\2026'; padding: 0.1875rem 0.625rem; + content: '\2026'; color: #0a0a0a; } .pagination-previous a::before, .pagination-previous.disabled::before { - content: '\00ab'; display: inline-block; - margin-right: 0.5rem; } + margin-right: 0.5rem; + content: '\00ab'; } .pagination-next a::after, .pagination-next.disabled::after { - content: '\00bb'; display: inline-block; - margin-left: 0.5rem; } + margin-left: 0.5rem; + content: '\00bb'; } .progress { - background-color: #cacaca; height: 1rem; margin-bottom: 1rem; - border-radius: 0; } + border-radius: 0; + background-color: #cacaca; } .progress.primary .progress-meter { - background-color: #2199e8; } + background-color: #1779ba; } .progress.secondary .progress-meter { - background-color: #777; } + background-color: #767676; } .progress.success .progress-meter { background-color: #3adb76; } .progress.warning .progress-meter { background-color: #ffae00; } .progress.alert .progress-meter { - background-color: #ec5840; } - -.progress-meter { - position: relative; - display: block; - width: 0%; - height: 100%; - background-color: #3f47cc; } - -.progress-meter-text { - position: absolute; - top: 50%; - left: 50%; - -webkit-transform: translate(-50%, -50%); - -ms-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - position: absolute; - margin: 0; - font-size: 0.75rem; - font-weight: bold; - color: #fefefe; - white-space: nowrap; } - -progress { - -webkit-appearance: none; - -moz-appearance: none; - display: block; - width: 100%; - height: 1rem; - margin-bottom: 1rem; - border-radius: 0; - background: #cacaca; - border: 0; } - progress::-webkit-progress-bar { - background: #cacaca; - border-radius: 0; } - progress::-webkit-progress-value { - background: #3f47cc; - border-radius: 0; } - progress::-moz-progress-bar { - background: #3f47cc; - border-radius: 0; } - progress.primary { - color: #2199e8; } - progress.primary::-webkit-progress-value { - background: #2199e8; } - progress.primary::-moz-progress-bar { - background: #2199e8; } - progress.secondary { - color: #777; } - progress.secondary::-webkit-progress-value { - background: #777; } - progress.secondary::-moz-progress-bar { - background: #777; } - progress.success { - color: #3adb76; } - progress.success::-webkit-progress-value { - background: #3adb76; } - progress.success::-moz-progress-bar { - background: #3adb76; } - progress.warning { - color: #ffae00; } - progress.warning::-webkit-progress-value { - background: #ffae00; } - progress.warning::-moz-progress-bar { - background: #ffae00; } - progress.alert { - color: #ec5840; } - progress.alert::-webkit-progress-value { - background: #ec5840; } - progress.alert::-moz-progress-bar { - background: #ec5840; } - -meter { - -webkit-appearance: none; - -moz-appearance: none; - display: block; - width: 100%; - height: 1rem; - margin-bottom: 1rem; - background: #cacaca; - border: 0; } - meter::-webkit-meter-bar { - background: #cacaca; } - meter::-webkit-meter-optimum-value { - background: #3adb76; } - meter::-webkit-meter-suboptimum-value { - background: #ffae00; } - meter::-webkit-meter-even-less-good-value { - background: #ec5840; } - meter::-moz-meter-bar { - background: #2199e8; } - meter:-moz-meter-optimum::-moz-meter-bar { - background: #3adb76; } - meter:-moz-meter-sub-optimum::-moz-meter-bar { - background: #ffae00; } - meter:-moz-meter-sub-sub-optimum::-moz-meter-bar { - background: #ec5840; } + background-color: #cc4b37; } + +.progress-meter { + position: relative; + display: block; + width: 0%; + height: 100%; + background-color: #1779ba; } + +.progress-meter-text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + position: absolute; + margin: 0; + font-size: 0.75rem; + font-weight: bold; + color: #fefefe; + white-space: nowrap; } .slider { position: relative; @@ -5035,8 +5426,10 @@ meter { max-width: 100%; height: 0.5rem; background-color: #cacaca; + -webkit-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; } .slider-fill.is-dragging { + -webkit-transition: all 0s linear; transition: all 0s linear; } .slider-handle { @@ -5051,16 +5444,18 @@ meter { display: inline-block; width: 1.4rem; height: 1.4rem; - background-color: #3f47cc; + border-radius: 0; + background-color: #1779ba; + -webkit-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; -ms-touch-action: manipulation; - touch-action: manipulation; - border-radius: 0; } + touch-action: manipulation; } [data-whatinput='mouse'] .slider-handle { outline: 0; } .slider-handle:hover { - background-color: #3037b3; } + background-color: #14679e; } .slider-handle.is-dragging { + -webkit-transition: all 0s linear; transition: all 0s linear; } .slider.disabled, @@ -5094,7 +5489,7 @@ meter { position: relative; } .sticky { - position: absolute; + position: relative; z-index: 0; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } @@ -5108,41 +5503,52 @@ meter { bottom: 0; } .sticky.is-anchored { - position: absolute; - left: auto; - right: auto; } + position: relative; + right: auto; + left: auto; } .sticky.is-anchored.is-at-bottom { bottom: 0; } body.is-reveal-open { overflow: hidden; } +html.is-reveal-open, +html.is-reveal-open body { + min-height: 100%; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .reveal-overlay { - display: none; position: fixed; top: 0; + right: 0; bottom: 0; left: 0; - right: 0; z-index: 1005; + display: none; background-color: rgba(10, 10, 10, 0.45); overflow-y: scroll; } .reveal { - display: none; z-index: 1006; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + display: none; padding: 1rem; border: 1px solid #cacaca; - background-color: #fefefe; border-radius: 0; + background-color: #fefefe; position: relative; top: 100px; - margin-left: auto; margin-right: auto; + margin-left: auto; overflow-y: auto; } [data-whatinput='mouse'] .reveal { outline: 0; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { .reveal { min-height: 0; } } .reveal .column, .reveal .columns, @@ -5150,26 +5556,26 @@ body.is-reveal-open { min-width: 0; } .reveal > :last-child { margin-bottom: 0; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { .reveal { width: 600px; max-width: 75rem; } } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { .reveal .reveal { - left: auto; right: auto; + left: auto; margin: 0 auto; } } .reveal.collapse { padding: 0; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { .reveal.tiny { width: 30%; max-width: 75rem; } } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { .reveal.small { width: 50%; max-width: 75rem; } } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { .reveal.large { width: 90%; max-width: 75rem; } } @@ -5177,10 +5583,10 @@ body.is-reveal-open { top: 0; left: 0; width: 100%; + max-width: none; height: 100%; height: 100vh; min-height: 100vh; - max-width: none; margin-left: 0; border: 0; border-radius: 0; } @@ -5189,10 +5595,10 @@ body.is-reveal-open { top: 0; left: 0; width: 100%; + max-width: none; height: 100%; height: 100vh; min-height: 100vh; - max-width: none; margin-left: 0; border: 0; border-radius: 0; } } @@ -5200,49 +5606,53 @@ body.is-reveal-open { position: fixed; } .switch { + height: 2rem; + position: relative; margin-bottom: 1rem; outline: 0; - position: relative; + font-size: 0.875rem; + font-weight: bold; + color: #fefefe; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; - user-select: none; - color: #fefefe; - font-weight: bold; - font-size: 0.875rem; } + user-select: none; } .switch-input { - opacity: 0; - position: absolute; } + position: absolute; + margin-bottom: 0; + opacity: 0; } .switch-paddle { - background: #cacaca; - cursor: pointer; - display: block; position: relative; + display: block; width: 4rem; height: 2rem; - transition: all 0.25s ease-out; border-radius: 0; + background: #cacaca; + -webkit-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; + font-weight: inherit; color: inherit; - font-weight: inherit; } + cursor: pointer; } input + .switch-paddle { margin: 0; } .switch-paddle::after { - background: #fefefe; - content: ''; - display: block; position: absolute; - height: 1.5rem; - left: 0.25rem; top: 0.25rem; + left: 0.25rem; + display: block; width: 1.5rem; - transition: all 0.25s ease-out; + height: 1.5rem; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); - border-radius: 0; } + border-radius: 0; + background: #fefefe; + -webkit-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; + content: ''; } input:checked ~ .switch-paddle { - background: #3f47cc; } + background: #1779ba; } input:checked ~ .switch-paddle::after { left: 2.25rem; } [data-whatinput='mouse'] input:focus ~ .switch-paddle { @@ -5266,41 +5676,47 @@ body.is-reveal-open { input:checked + label > .switch-inactive { display: none; } -.switch.tiny .switch-paddle { - width: 3rem; - height: 1.5rem; - font-size: 0.625rem; } - -.switch.tiny .switch-paddle::after { - width: 1rem; - height: 1rem; } - -.switch.tiny input:checked ~ .switch-paddle::after { - left: 1.75rem; } - -.switch.small .switch-paddle { - width: 3.5rem; - height: 1.75rem; - font-size: 0.75rem; } - -.switch.small .switch-paddle::after { - width: 1.25rem; - height: 1.25rem; } - -.switch.small input:checked ~ .switch-paddle::after { - left: 2rem; } - -.switch.large .switch-paddle { - width: 5rem; - height: 2.5rem; - font-size: 1rem; } - -.switch.large .switch-paddle::after { - width: 2rem; - height: 2rem; } +.switch.tiny { + height: 1.5rem; } + .switch.tiny .switch-paddle { + width: 3rem; + height: 1.5rem; + font-size: 0.625rem; } + .switch.tiny .switch-paddle::after { + top: 0.25rem; + left: 0.25rem; + width: 1rem; + height: 1rem; } + .switch.tiny input:checked ~ .switch-paddle::after { + left: 1.75rem; } + +.switch.small { + height: 1.75rem; } + .switch.small .switch-paddle { + width: 3.5rem; + height: 1.75rem; + font-size: 0.75rem; } + .switch.small .switch-paddle::after { + top: 0.25rem; + left: 0.25rem; + width: 1.25rem; + height: 1.25rem; } + .switch.small input:checked ~ .switch-paddle::after { + left: 2rem; } -.switch.large input:checked ~ .switch-paddle::after { - left: 2.75rem; } +.switch.large { + height: 2.5rem; } + .switch.large .switch-paddle { + width: 5rem; + height: 2.5rem; + font-size: 1rem; } + .switch.large .switch-paddle::after { + top: 0.25rem; + left: 0.25rem; + width: 2rem; + height: 2rem; } + .switch.large input:checked ~ .switch-paddle::after { + left: 2.75rem; } table { width: 100%; @@ -5312,27 +5728,36 @@ table { border: 1px solid #f1f1f1; background-color: #fefefe; } table caption { - font-weight: bold; - padding: 0.5rem 0.625rem 0.625rem; } - table thead, - table tfoot { + padding: 0.5rem 0.625rem 0.625rem; + font-weight: bold; } + table thead { background: #f8f8f8; color: #0a0a0a; } - table thead tr, - table tfoot tr { - background: transparent; } - table thead th, - table thead td, - table tfoot th, - table tfoot td { - padding: 0.5rem 0.625rem 0.625rem; - font-weight: bold; - text-align: left; } - table tbody tr:nth-child(even) { - background-color: #f1f1f1; } + table tfoot { + background: #f1f1f1; + color: #0a0a0a; } + table thead tr, + table tfoot tr { + background: transparent; } + table thead th, + table thead td, + table tfoot th, + table tfoot td { + padding: 0.5rem 0.625rem 0.625rem; + font-weight: bold; + text-align: left; } table tbody th, table tbody td { padding: 0.5rem 0.625rem 0.625rem; } + table tbody tr:nth-child(even) { + border-bottom: 0; + background-color: #f1f1f1; } + table.unstriped tbody { + background-color: #fefefe; } + table.unstriped tbody tr { + border-bottom: 0; + border-bottom: 1px solid #f1f1f1; + background-color: #fefefe; } @media screen and (max-width: 63.9375em) { table.stack thead { @@ -5351,10 +5776,16 @@ table.scroll { width: 100%; overflow-x: auto; } -table.hover tr:hover { +table.hover thead tr:hover { + background-color: #f3f3f3; } + +table.hover tfoot tr:hover { + background-color: #ececec; } + +table.hover tbody tr:hover { background-color: #f9f9f9; } -table.hover tr:nth-of-type(even):hover { +table.hover:not(.unstriped) tr:nth-of-type(even):hover { background-color: #ececec; } .table-scroll { @@ -5364,19 +5795,19 @@ table.hover tr:nth-of-type(even):hover { .tabs { margin: 0; - list-style-type: none; + border: 1px solid #e6e6e6; background: #fefefe; - border: 1px solid #e6e6e6; } + list-style-type: none; } .tabs::before, .tabs::after { - content: ' '; - display: table; } + display: table; + content: ' '; } .tabs::after { clear: both; } .tabs.vertical > li { - width: auto; + display: block; float: none; - display: block; } + width: auto; } .tabs.simple > li > a { padding: 0; } @@ -5384,29 +5815,34 @@ table.hover tr:nth-of-type(even):hover { background: transparent; } .tabs.primary { - background: #2199e8; } + background: #1779ba; } .tabs.primary > li > a { color: #fefefe; } .tabs.primary > li > a:hover, .tabs.primary > li > a:focus { - background: #1893e4; } + background: #1673b1; } .tabs-title { float: left; } .tabs-title > a { display: block; padding: 1.25rem 1.5rem; + font-size: 0.75rem; line-height: 1; - font-size: 0.75rem; } + color: #1779ba; } .tabs-title > a:hover { - background: #fefefe; } + background: #fefefe; + color: #1468a0; } .tabs-title > a:focus, .tabs-title > a[aria-selected='true'] { - background: #e6e6e6; } + background: #e6e6e6; + color: #1779ba; } .tabs-content { - background: #fefefe; - transition: all 0.5s ease; border: 1px solid #e6e6e6; - border-top: 0; } + border-top: 0; + background: #fefefe; + color: #0a0a0a; + -webkit-transition: all 0.5s ease; + transition: all 0.5s ease; } .tabs-content.vertical { border: 1px solid #e6e6e6; @@ -5415,33 +5851,43 @@ table.hover tr:nth-of-type(even):hover { .tabs-panel { display: none; padding: 1rem; } - .tabs-panel.is-active { + .tabs-panel[aria-hidden="false"] { display: block; } .thumbnail { - border: solid 4px #fefefe; - box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2); display: inline-block; - line-height: 0; max-width: 100%; - transition: box-shadow 200ms ease-out; + margin-bottom: 1rem; + border: solid 4px #fefefe; border-radius: 0; - margin-bottom: 1rem; } - .thumbnail:hover, .thumbnail:focus { - box-shadow: 0 0 6px 1px rgba(63, 71, 204, 0.5); } + -webkit-box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2); + box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2); + line-height: 0; } + +a.thumbnail { + -webkit-transition: -webkit-box-shadow 200ms ease-out; + transition: -webkit-box-shadow 200ms ease-out; + transition: box-shadow 200ms ease-out; + transition: box-shadow 200ms ease-out, -webkit-box-shadow 200ms ease-out; } + a.thumbnail:hover, a.thumbnail:focus { + -webkit-box-shadow: 0 0 6px 1px rgba(23, 121, 186, 0.5); + box-shadow: 0 0 6px 1px rgba(23, 121, 186, 0.5); } + a.thumbnail image { + -webkit-box-shadow: none; + box-shadow: none; } .title-bar { - background: #0a0a0a; - color: #fefefe; - padding: 0.5rem; } + padding: 0.5rem; + background: #2c3840; + color: #fefefe; } .title-bar::before, .title-bar::after { - content: ' '; - display: table; } + display: table; + content: ' '; } .title-bar::after { clear: both; } .title-bar .menu-icon { margin-left: 0.25rem; - margin-right: 0.5rem; } + margin-right: 0.25rem; } .title-bar-left { float: left; } @@ -5451,102 +5897,81 @@ table.hover tr:nth-of-type(even):hover { text-align: right; } .title-bar-title { - font-weight: bold; - vertical-align: middle; - display: inline-block; } - -.menu-icon.dark { - position: relative; display: inline-block; vertical-align: middle; - cursor: pointer; - width: 20px; - height: 16px; } - .menu-icon.dark::after { - content: ''; - position: absolute; - display: block; - width: 100%; - height: 2px; - background: #0a0a0a; - top: 0; - left: 0; - box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; } - .menu-icon.dark:hover::after { - background: #8a8a8a; - box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; } + font-weight: bold; } .has-tip { - border-bottom: dotted 1px #8a8a8a; - font-weight: bold; position: relative; display: inline-block; + border-bottom: dotted 1px #8a8a8a; + font-weight: bold; cursor: help; } .tooltip { - background-color: #0a0a0a; - color: #fefefe; - font-size: 80%; - padding: 0.75rem; position: absolute; - z-index: 10; top: calc(100% + 0.6495rem); - max-width: 10rem !important; - border-radius: 0; } + z-index: 1200; + max-width: 10rem; + padding: 0.75rem; + border-radius: 0; + background-color: #0a0a0a; + font-size: 80%; + color: #fefefe; } .tooltip::before { - content: ''; display: block; width: 0; height: 0; border: inset 0.75rem; - border-color: transparent transparent #0a0a0a; - border-bottom-style: solid; + content: ''; border-top-width: 0; - bottom: 100%; + border-bottom-style: solid; + border-color: transparent transparent #0a0a0a; position: absolute; + bottom: 100%; left: 50%; -webkit-transform: translateX(-50%); -ms-transform: translateX(-50%); transform: translateX(-50%); } .tooltip.top::before { - content: ''; display: block; width: 0; height: 0; border: inset 0.75rem; - border-color: #0a0a0a transparent transparent; - border-top-style: solid; + content: ''; border-bottom-width: 0; + border-top-style: solid; + border-color: #0a0a0a transparent transparent; top: 100%; bottom: auto; } .tooltip.left::before { - content: ''; display: block; width: 0; height: 0; border: inset 0.75rem; - border-color: transparent transparent transparent #0a0a0a; - border-left-style: solid; + content: ''; border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #0a0a0a; + top: 50%; bottom: auto; left: 100%; - top: 50%; -webkit-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); } .tooltip.right::before { - content: ''; display: block; width: 0; height: 0; border: inset 0.75rem; - border-color: transparent #0a0a0a transparent transparent; - border-right-style: solid; + content: ''; border-left-width: 0; + border-right-style: solid; + border-color: transparent #0a0a0a transparent transparent; + top: 50%; + right: 100%; bottom: auto; left: auto; - right: 100%; - top: 50%; -webkit-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); } @@ -5554,13 +5979,13 @@ table.hover tr:nth-of-type(even):hover { .top-bar { padding: 0; } .top-bar::before, .top-bar::after { - content: ' '; - display: table; } + display: table; + content: ' '; } .top-bar::after { clear: both; } .top-bar, .top-bar ul { - background-color: #121212; } + background-color: #2c3840; } .top-bar input { max-width: 200px; margin-right: 1rem; } @@ -5572,7 +5997,7 @@ table.hover tr:nth-of-type(even):hover { .top-bar .top-bar-left, .top-bar .top-bar-right { width: 100%; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { .top-bar .top-bar-left, .top-bar .top-bar-right { width: auto; } } @@ -5586,8 +6011,11 @@ table.hover tr:nth-of-type(even):hover { width: 100%; } } .top-bar-title { + display: inline-block; float: left; - margin-right: 1rem; } + padding: 0.5rem 1rem 0.5rem 0; } + .top-bar-title .menu-icon { + bottom: 2px; } .top-bar-left { float: left; } @@ -5609,7 +6037,7 @@ table.hover tr:nth-of-type(even):hover { .show-for-small-only { display: none !important; } } -@media screen and (min-width: 40em) { +@media print, screen and (min-width: 40em) { .hide-for-medium { display: none !important; } } @@ -5625,7 +6053,7 @@ table.hover tr:nth-of-type(even):hover { .show-for-medium-only { display: none !important; } } -@media screen and (min-width: 64em) { +@media print, screen and (min-width: 64em) { .hide-for-large { display: none !important; } } @@ -5651,8 +6079,8 @@ table.hover tr:nth-of-type(even):hover { .show-on-focus:active, .show-on-focus:focus { position: static !important; - height: auto; width: auto; + height: auto; overflow: visible; clip: auto; } @@ -5677,75 +6105,36 @@ table.hover tr:nth-of-type(even):hover { display: none !important; } } @media screen and (orientation: portrait) { .hide-for-landscape, - .show-for-portrait { - display: block !important; } } - -.float-left { - float: left !important; } - -.float-right { - float: right !important; } - -.float-center { - display: block; - margin-left: auto; - margin-right: auto; } - -.clearfix::before, .clearfix::after { - content: ' '; - display: table; } - -.clearfix::after { - clear: both; } - -.menu-icon { - position: relative; - display: inline-block; - vertical-align: middle; - cursor: pointer; - width: 20px; - height: 16px; } - .menu-icon::after { - content: ''; - position: absolute; - display: block; - width: 100%; - height: 2px; - background: #fefefe; - top: 0; - left: 0; - box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe; } - .menu-icon:hover::after { - background: #cacaca; - box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; } + .show-for-portrait { + display: block !important; } } -.menu-icon.dark { - position: relative; - display: inline-block; - vertical-align: middle; - cursor: pointer; - width: 20px; - height: 16px; } - .menu-icon.dark::after { - content: ''; - position: absolute; - display: block; - width: 100%; - height: 2px; - background: #0a0a0a; - top: 0; - left: 0; - box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; } - .menu-icon.dark:hover::after { - background: #8a8a8a; - box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; } +.float-left { + float: left !important; } + +.float-right { + float: right !important; } + +.float-center { + display: block; + margin-right: auto; + margin-left: auto; } + +.clearfix::before, .clearfix::after { + display: table; + content: ' '; } + +.clearfix::after { + clear: both; } .slide-in-down.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: translateY(-100%); -ms-transform: translateY(-100%); transform: translateY(-100%); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5758,11 +6147,14 @@ table.hover tr:nth-of-type(even):hover { transform: translateY(0); } .slide-in-left.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: translateX(-100%); -ms-transform: translateX(-100%); transform: translateX(-100%); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5775,11 +6167,14 @@ table.hover tr:nth-of-type(even):hover { transform: translateX(0); } .slide-in-up.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: translateY(100%); -ms-transform: translateY(100%); transform: translateY(100%); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5792,11 +6187,14 @@ table.hover tr:nth-of-type(even):hover { transform: translateY(0); } .slide-in-right.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: translateX(100%); -ms-transform: translateX(100%); transform: translateX(100%); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5809,11 +6207,14 @@ table.hover tr:nth-of-type(even):hover { transform: translateX(0); } .slide-out-down.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: translateY(0); -ms-transform: translateY(0); transform: translateY(0); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5826,11 +6227,14 @@ table.hover tr:nth-of-type(even):hover { transform: translateY(100%); } .slide-out-right.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5843,11 +6247,14 @@ table.hover tr:nth-of-type(even):hover { transform: translateX(100%); } .slide-out-up.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: translateY(0); -ms-transform: translateY(0); transform: translateY(0); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5860,11 +6267,14 @@ table.hover tr:nth-of-type(even):hover { transform: translateY(-100%); } .slide-out-left.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5877,31 +6287,40 @@ table.hover tr:nth-of-type(even):hover { transform: translateX(-100%); } .fade-in.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; opacity: 0; + -webkit-transition-property: opacity; transition-property: opacity; } .fade-in.mui-enter.mui-enter-active { opacity: 1; } .fade-out.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; opacity: 1; + -webkit-transition-property: opacity; transition-property: opacity; } .fade-out.mui-leave.mui-leave-active { opacity: 0; } .hinge-in-from-top.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: perspective(2000px) rotateX(-90deg); transform: perspective(2000px) rotateX(-90deg); -webkit-transform-origin: top; -ms-transform-origin: top; transform-origin: top; + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5913,13 +6332,16 @@ table.hover tr:nth-of-type(even):hover { opacity: 1; } .hinge-in-from-right.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: perspective(2000px) rotateY(-90deg); transform: perspective(2000px) rotateY(-90deg); -webkit-transform-origin: right; -ms-transform-origin: right; transform-origin: right; + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5931,13 +6353,16 @@ table.hover tr:nth-of-type(even):hover { opacity: 1; } .hinge-in-from-bottom.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: perspective(2000px) rotateX(90deg); transform: perspective(2000px) rotateX(90deg); -webkit-transform-origin: bottom; -ms-transform-origin: bottom; transform-origin: bottom; + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5949,13 +6374,16 @@ table.hover tr:nth-of-type(even):hover { opacity: 1; } .hinge-in-from-left.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: perspective(2000px) rotateY(90deg); transform: perspective(2000px) rotateY(90deg); -webkit-transform-origin: left; -ms-transform-origin: left; transform-origin: left; + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5967,13 +6395,16 @@ table.hover tr:nth-of-type(even):hover { opacity: 1; } .hinge-in-from-middle-x.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: perspective(2000px) rotateX(-90deg); transform: perspective(2000px) rotateX(-90deg); -webkit-transform-origin: center; -ms-transform-origin: center; transform-origin: center; + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -5985,13 +6416,16 @@ table.hover tr:nth-of-type(even):hover { opacity: 1; } .hinge-in-from-middle-y.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: perspective(2000px) rotateY(-90deg); transform: perspective(2000px) rotateY(-90deg); -webkit-transform-origin: center; -ms-transform-origin: center; transform-origin: center; + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6003,13 +6437,16 @@ table.hover tr:nth-of-type(even):hover { opacity: 1; } .hinge-out-from-top.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: perspective(2000px) rotate(0deg); transform: perspective(2000px) rotate(0deg); -webkit-transform-origin: top; -ms-transform-origin: top; transform-origin: top; + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6021,13 +6458,16 @@ table.hover tr:nth-of-type(even):hover { opacity: 0; } .hinge-out-from-right.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: perspective(2000px) rotate(0deg); transform: perspective(2000px) rotate(0deg); -webkit-transform-origin: right; -ms-transform-origin: right; transform-origin: right; + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6039,13 +6479,16 @@ table.hover tr:nth-of-type(even):hover { opacity: 0; } .hinge-out-from-bottom.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: perspective(2000px) rotate(0deg); transform: perspective(2000px) rotate(0deg); -webkit-transform-origin: bottom; -ms-transform-origin: bottom; transform-origin: bottom; + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6057,13 +6500,16 @@ table.hover tr:nth-of-type(even):hover { opacity: 0; } .hinge-out-from-left.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: perspective(2000px) rotate(0deg); transform: perspective(2000px) rotate(0deg); -webkit-transform-origin: left; -ms-transform-origin: left; transform-origin: left; + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6075,13 +6521,16 @@ table.hover tr:nth-of-type(even):hover { opacity: 0; } .hinge-out-from-middle-x.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: perspective(2000px) rotate(0deg); transform: perspective(2000px) rotate(0deg); -webkit-transform-origin: center; -ms-transform-origin: center; transform-origin: center; + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6093,13 +6542,16 @@ table.hover tr:nth-of-type(even):hover { opacity: 0; } .hinge-out-from-middle-y.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: perspective(2000px) rotate(0deg); transform: perspective(2000px) rotate(0deg); -webkit-transform-origin: center; -ms-transform-origin: center; transform-origin: center; + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6111,11 +6563,14 @@ table.hover tr:nth-of-type(even):hover { opacity: 0; } .scale-in-up.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: scale(0.5); -ms-transform: scale(0.5); transform: scale(0.5); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6128,11 +6583,14 @@ table.hover tr:nth-of-type(even):hover { opacity: 1; } .scale-in-down.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: scale(1.5); -ms-transform: scale(1.5); transform: scale(1.5); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6145,11 +6603,14 @@ table.hover tr:nth-of-type(even):hover { opacity: 1; } .scale-out-up.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: scale(1); -ms-transform: scale(1); transform: scale(1); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6162,11 +6623,14 @@ table.hover tr:nth-of-type(even):hover { opacity: 0; } .scale-out-down.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: scale(1); -ms-transform: scale(1); transform: scale(1); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6179,11 +6643,14 @@ table.hover tr:nth-of-type(even):hover { opacity: 0; } .spin-in.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: rotate(-0.75turn); -ms-transform: rotate(-0.75turn); transform: rotate(-0.75turn); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6196,11 +6663,14 @@ table.hover tr:nth-of-type(even):hover { opacity: 1; } .spin-out.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: rotate(0); -ms-transform: rotate(0); transform: rotate(0); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6213,11 +6683,14 @@ table.hover tr:nth-of-type(even):hover { opacity: 0; } .spin-in-ccw.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: rotate(0.75turn); -ms-transform: rotate(0.75turn); transform: rotate(0.75turn); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6230,11 +6703,14 @@ table.hover tr:nth-of-type(even):hover { opacity: 1; } .spin-out-ccw.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: linear; + transition-timing-function: linear; -webkit-transform: rotate(0); -ms-transform: rotate(0); transform: rotate(0); + -webkit-transition-property: opacity, -webkit-transform; transition-property: opacity, -webkit-transform; transition-property: transform, opacity; transition-property: transform, opacity, -webkit-transform; @@ -6247,40 +6723,52 @@ table.hover tr:nth-of-type(even):hover { opacity: 0; } .slow { - transition-duration: 750ms !important; } + -webkit-transition-duration: 750ms !important; + transition-duration: 750ms !important; } .fast { - transition-duration: 250ms !important; } + -webkit-transition-duration: 250ms !important; + transition-duration: 250ms !important; } .linear { - transition-timing-function: linear !important; } + -webkit-transition-timing-function: linear !important; + transition-timing-function: linear !important; } .ease { - transition-timing-function: ease !important; } + -webkit-transition-timing-function: ease !important; + transition-timing-function: ease !important; } .ease-in { - transition-timing-function: ease-in !important; } + -webkit-transition-timing-function: ease-in !important; + transition-timing-function: ease-in !important; } .ease-out { - transition-timing-function: ease-out !important; } + -webkit-transition-timing-function: ease-out !important; + transition-timing-function: ease-out !important; } .ease-in-out { - transition-timing-function: ease-in-out !important; } + -webkit-transition-timing-function: ease-in-out !important; + transition-timing-function: ease-in-out !important; } .bounce-in { - transition-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; } + -webkit-transition-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; + transition-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; } .bounce-out { - transition-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; } + -webkit-transition-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; + transition-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; } .bounce-in-out { - transition-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; } + -webkit-transition-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; + transition-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; } .short-delay { - transition-delay: 300ms !important; } + -webkit-transition-delay: 300ms !important; + transition-delay: 300ms !important; } .long-delay { - transition-delay: 700ms !important; } + -webkit-transition-delay: 700ms !important; + transition-delay: 700ms !important; } .shake { -webkit-animation-name: shake-7; @@ -6423,36 +6911,43 @@ table.hover tr:nth-of-type(even):hover { My custom styles: Add your scss files below to structure your project styles */ -/* Navigation breakpoints */ @media screen and (max-width: 39.9375em) { .desktop-menu, .top-bar-left { display: none !important; } } -@media screen and (min-width: 40em) { +@media print, screen and (min-width: 40em) { #mobile-menu, .title-bar { display: none !important; } } -/* Mobile menu */ -nav#mobile-menu { - background-color: #0a0a0a; } - -.off-canvas ul#menu-main-menu { +.off-canvas > ul.menu { height: 100vh; padding: 1rem; } + .off-canvas > ul.menu a { + color: #fefefe; + font-weight: 600; + font-size: 1.125rem; + opacity: .75; } + .off-canvas > ul.menu .is-accordion-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #fefefe transparent transparent; + position: absolute; + top: 50%; + margin-top: -3px; + right: 1rem; } + +.off-canvas .menu .active > a { + background-color: #41525e; } .title-bar-title a { font-size: 1rem; color: #B9B9B9; } -/* Tablet and desktop menu */ -.top-bar-right ul { - background-color: transparent; } - -.top-bar-container { - background-color: rgba(254, 254, 254, 0.65); - z-index: 999; - height: 0px !important; } - .top-bar { min-height: 85px; padding: 5px 20px; @@ -6472,311 +6967,309 @@ nav#mobile-menu { background-color: rgba(255, 255, 255, 0.59); } .top-bar .menu .home a { font-size: 1rem; - color: #fefefe; } + color: #B9B9B9; } .top-bar .menu a { height: 45px; line-height: 45px; - color: #fefefe; + color: #e6e6e6; padding-top: 0; padding-bottom: 0; font-weight: bold; - font-size: 1.3rem; - line-height: 1; - text-transform: capitalize; - letter-spacing: 0.5px; } + font-size: 0.8rem; + line-height: 1; } .top-bar .menu a:hover:not(.button) { - background-color: transparent; - color: #60FF00; } + background-color: #42525D; } .top-bar .menu .active > a { - background-color: transparent; - color: #60FF00; } + background-color: #41525e; } .top-bar .menu > li:not(.menu-text) > a { padding: 1rem; } + .top-bar .menu li:not(:last-child) { + border-right: 1px solid #4e4e4e; } .top-bar .dropdown.menu .submenu { - background-color: rgba(0, 0, 0, 0.36); - color: #fefefe; border: 0; } - .top-bar .dropdown.menu .submenu li { - border-bottom: solid 1px #000; } .top-bar .dropdown.menu .has-submenu.is-down-arrow a { padding-right: 1rem; } .top-bar .dropdown.menu .has-submenu.is-down-arrow > a::after { border: 0; } + .top-bar .dropdown.menu:first-child > li.is-dropdown-submenu-parent > a::after { + display: none; } -.dropdown.menu > li.is-dropdown-submenu-parent > a::after { - display: none; } +.post-navigation:before, +.post-navigation:after { + content: ""; + display: table; } -.sticky.is-stuck.is-at-top { - background-color: rgba(241, 237, 237, 0.95); - box-shadow: 0 0 10px rgba(10, 10, 10, 0.4); } - .sticky.is-stuck.is-at-top .top-bar { - min-height: 40px; } - .sticky.is-stuck.is-at-top .top-bar div#nav-wrapper .top-bar-right { - margin-top: 0px; } - .sticky.is-stuck.is-at-top .top-bar ul#menu-topmenu { - background-color: transparent; } - .sticky.is-stuck.is-at-top .top-bar .menu a { - color: #0a0a0a; } - .sticky.is-stuck.is-at-top .top-bar .menu .active > a { - color: #60FF00; } - .sticky.is-stuck.is-at-top .top-bar .dropdown.menu .submenu { - background-color: rgba(241, 237, 237, 0.95); - color: #0a0a0a; } - .sticky.is-stuck.is-at-top .top-bar .dropdown.menu .submenu li { - border-bottom: solid 1px #000; } - .sticky.is-stuck.is-at-top .top-bar img#logo { - visibility: hidden; - height: 1px; } - .sticky.is-stuck.is-at-top .top-bar img#logo-s { - visibility: visible; } +.post-navigation:after { + clear: both; } + +.nav-previous { + float: left; } + +.nav-next { + float: right; } #footer-container { max-width: 100%; width: 100%; margin: 0 auto; border-top: 1px solid #ccc; - margin-top: 3.75rem; - background-color: #272727; - color: #e8e8e8; - font-size: 1rem; - font-family: 'Open Sans', sans-serif; } + margin-top: 3.75rem; } #footer-container #footer { max-width: 75rem; - margin-left: auto; margin-right: auto; + margin-left: auto; padding: 1.875rem 0; } #footer-container #footer::before, #footer-container #footer::after { - content: ' '; - display: table; } + display: table; + content: ' '; } #footer-container #footer::after { clear: both; } - #footer-container #footer article#nav_menu-2 { - padding-left: 60px; } #footer-container #footer ul { list-style-type: none; margin: 0; - padding: 0; - display: inline-block; - width: 200px; } - #footer-container #footer ul li { - float: left; - position: relative; } - #footer-container #footer ul li:before { - content: "\f054"; - font-family: FontAwesome; - left: -1px; - position: absolute; - font-size: 13px; - top: 10px; } - #footer-container #footer ul li > a { - color: #fefefe; } - #footer-container #footer address.vcard { - font-style: normal; - position: relative; } - #footer-container #footer address.vcard a { - display: block; - padding: 0 0 5px 16px; - color: #e8e8e8; - font-size: 1rem; - font-family: 'Open Sans', sans-serif; } - #footer-container #footer address.vcard a.url.fn.org { - color: #3f47cc; - font-size: 2rem; - font-weight: bold; - padding: 0 0 10px 0; } - #footer-container #footer address.vcard a.email:before { - content: "\f003"; - font-family: FontAwesome; - left: -1px; - position: absolute; - font-size: 13px; - padding-top: 5px; } - #footer-container #footer address.vcard span.tel { - padding: 0 0 10px 16px; } - #footer-container #footer address.vcard span.tel:before { - content: "\f095"; - font-family: FontAwesome; - left: -1px; - position: absolute; - font-size: 13px; - padding-top: 5px; } - #footer-container #footer address.vcard span.adr { - padding: 10px 0 10px 16px; } - #footer-container #footer address.vcard span.adr:before { - content: "\f041"; - font-family: FontAwesome; - left: -1px; - position: absolute; - font-size: 13px; } - #footer-container div#copiright-wrapper { - font-size: 0.9rem; - border-top: rgba(51, 49, 49, 0.84) solid 1px; - background-color: #222121; - height: 65px; - padding-top: 20px; } - #footer-container div#copiright-wrapper #copiright-content { - max-width: 75rem; - margin-left: auto; - margin-right: auto; } - #footer-container div#copiright-wrapper #copiright-content::before, #footer-container div#copiright-wrapper #copiright-content::after { - content: ' '; - display: table; } - #footer-container div#copiright-wrapper #copiright-content::after { - clear: both; } - #footer-container div#copiright-wrapper #copiright-content .copiright-text, #footer-container div#copiright-wrapper #copiright-content .copiright-oe { - background-color: #222121; } - #footer-container div#copiright-wrapper #copiright-content img.oe { - margin-top: -7px; } + padding: 0; } .sidebar { width: 100%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } - @media screen and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { .sidebar { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } .sidebar:last-child:not(:first-child) { float: right; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { .sidebar { width: 33.33333%; float: left; - padding-left: 0.625rem; padding-right: 0.625rem; + padding-left: 0.625rem; margin-top: 1rem; } } - @media screen and (min-width: 40em) and (min-width: 40em) { + @media print, screen and (min-width: 40em) and (min-width: 40em) { .sidebar { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } - @media screen and (min-width: 40em) { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + @media print, screen and (min-width: 40em) { .sidebar:last-child:not(:first-child) { float: right; } } +body#tinymce { + height: auto; + max-width: 75rem; + padding: 1.25rem !important; } + .sites-button { background: #FF6908; font-size: 1.25rem; font-weight: bold; - box-shadow: 0 -2px 0 rgba(0, 0, 0, 0.2) inset; + -webkit-box-shadow: 0 -2px 0 rgba(0, 0, 0, 0.2) inset; + box-shadow: 0 -2px 0 rgba(0, 0, 0, 0.2) inset; border-radius: 3px; border: none; } -a.home-hero-button { - background: transparent; - font-size: 1.7rem; - color: #fefefe; - border: 1px solid #fefefe; - padding: 15px; } - -a.home-hero-button:hover { - background-color: rgba(254, 254, 254, 0.19); - color: #3f47cc; } +.flex-card-example { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; } + @media print, screen and (min-width: 40em) { + .flex-card-example { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; } } + .flex-card-example .card { + width: 100%; } + .flex-card-example .card img { + width: 100%; } + @media print, screen and (min-width: 40em) { + .flex-card-example .card { + width: 32%; } } + .flex-card-example .card .card-content { + padding: 1rem; } #featured-hero { - background-size: cover; + -webkit-background-size: cover; + background-size: cover; background-position: center; background-repeat: no-repeat; - margin: 0 0 2rem; - position: relative; - height: 12.5rem; } - -.no-featured-image-set { - height: 1rem !important; } - -@media screen and (min-width: 40em) { - #featured-hero { - height: 25rem; } } + height: 6.25rem; } + @media print, screen and (min-width: 40em) { + #featured-hero { + height: 12.5rem; } } + @media screen and (min-width: 75em) { + #featured-hero { + height: 25rem; } } .dotted, .section-divider hr { border-style: dashed; margin: 2rem 0; } -/* Apply outline styles only when input method is keyboard - * remove :focus style via What Input using progressive enhancement - * so :focus isn't left broken if JavaScript fails - */ -[data-whatinput="mouse"] a:focus, button:focus -[data-whatinput="touch"] a:focus, button:focus { +[data-whatinput="mouse"] a:focus, button:focus [data-whatinput="touch"] a:focus, button:focus { outline: none; } -/* -* to use in the Page builder -*/ -.panel-row-style-separator .sow-slider-image-wrapper { - padding-top: 90px !important; - padding-top: 20px !important; } - @media screen and (min-width: 40em) { - .panel-row-style-separator .sow-slider-image-wrapper { - padding-top: 200px !important; } } - -.panel-row-style-home-hero-banner .home-hero.panel-widget-style .sow-slider-image-wrapper { - padding-top: 80px !important; } - @media screen and (min-width: 40em) { - .panel-row-style-home-hero-banner .home-hero.panel-widget-style .sow-slider-image-wrapper { - padding-top: 350px !important; } } - -.sow-slider-image-wrapper .sow-slider-content-wrapper .sow-slider-content { - color: #fefefe; - font-size: 4rem; - line-height: 5rem; - margin-bottom: 70px; } - -.more-down { - margin-top: 250px; } - -.js div#preloader { - position: fixed; - left: 0; - top: 0; - z-index: 999; - width: 100%; - height: 100%; - overflow: visible; - background: #333 url("http://files.mimoymima.com/images/loading.gif") no-repeat center center; } - -p { - line-height: 1.2; - margin-bottom: 1rem; - text-rendering: optimizeLegibility; - vertical-align: baseline; - -webkit-font-smoothing: antialiased; - font-family: 'Open Sans', Arial; - font-weight: 400; - font-size: 1.2rem; } +#front-hero { + background: url("../images/demo/hero-bg-foundation-6-small.svg") bottom center; + -webkit-background-size: cover; + background-size: cover; + background-position: bottom; + padding: 4.0625rem 0; + margin: 0 0 2rem; + height: auto; + position: relative; + text-align: left; } + #front-hero .marketing { + max-width: 75rem; + margin-right: auto; + margin-left: auto; + max-width: 55rem; } + #front-hero .marketing::before, #front-hero .marketing::after { + display: table; + content: ' '; } + #front-hero .marketing::after { + clear: both; } + @media print, screen and (min-width: 40em) { + #front-hero { + background: url("../images/demo/hero-bg-foundation-6-large.svg") bottom center; + -webkit-background-size: cover; + background-size: cover; + background-position: center; + height: 42.8125rem; + margin: 0 0 4.5rem; } } + #front-hero #watch { + width: 58.33333%; + float: left; + padding-right: 0.625rem; + padding-left: 0.625rem; + position: relative; + left: -41.66667%; } + @media print, screen and (min-width: 40em) { + #front-hero #watch { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + #front-hero #watch:last-child:not(:first-child) { + float: right; } + @media print, screen and (min-width: 40em) { + #front-hero #watch { + width: 100%; + float: left; + padding-right: 0.625rem; + padding-left: 0.625rem; + position: relative; + left: 0%; } } + @media print, screen and (min-width: 40em) and (min-width: 40em) { + #front-hero #watch { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + @media print, screen and (min-width: 40em) { + #front-hero #watch:last-child:not(:first-child) { + float: right; } } + #front-hero #watch section { + display: inline; } + #front-hero #watch a { + color: #B4C9D1; + cursor: pointer; + font-weight: 400; + margin-right: 1.25rem; } + #front-hero #watch a:hover { + color: #fff; } + #front-hero #watch #stargazers :before { + content: "\f09b"; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + text-decoration: inherit; + color: #B4C9D1; + margin-right: 0.5rem; } + #front-hero #watch #twitter :before { + content: "\f099"; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + text-decoration: inherit; + color: #B4C9D1; + margin-right: 0.5rem; } + #front-hero .tagline { + width: 66.66667%; + float: left; + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { + #front-hero .tagline { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + #front-hero .tagline:last-child:not(:first-child) { + float: right; } + @media print, screen and (min-width: 40em) { + #front-hero .tagline { + width: 41.66667%; + float: left; + padding-right: 0.625rem; + padding-left: 0.625rem; + padding-top: 6rem; } } + @media print, screen and (min-width: 40em) and (min-width: 40em) { + #front-hero .tagline { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + @media print, screen and (min-width: 40em) { + #front-hero .tagline:last-child:not(:first-child) { + float: right; } } + #front-hero h1 { + color: #fff; + font-weight: 500; + font-size: 2.2rem; } + @media print, screen and (min-width: 40em) { + #front-hero h1 { + font-size: 2.875rem; } } + #front-hero h4 { + color: #fefefe; + font-weight: 300; + font-size: 1.3125rem; } + #front-hero .download { + margin-top: 1.25rem; } .intro { max-width: 75rem; - margin-left: auto; - margin-right: auto; } + margin-right: auto; + margin-left: auto; } .intro::before, .intro::after { - content: ' '; - display: table; } + display: table; + content: ' '; } .intro::after { clear: both; } .intro .fp-intro { width: 100%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } - @media screen and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { .intro .fp-intro { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } .intro .fp-intro:last-child:not(:first-child) { float: right; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { .intro .fp-intro { width: 83.33333%; float: left; - padding-left: 0.625rem; padding-right: 0.625rem; + padding-left: 0.625rem; margin-left: 8.33333%; } } - @media screen and (min-width: 40em) and (min-width: 40em) { + @media print, screen and (min-width: 40em) and (min-width: 40em) { .intro .fp-intro { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } - @media screen and (min-width: 40em) { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + @media print, screen and (min-width: 40em) { .intro .fp-intro:last-child:not(:first-child) { float: right; } .intro .fp-intro h2 { @@ -6785,50 +7278,51 @@ p { .intro .fp-intro h4 { font-size: 1.125rem; line-height: 1.6; - color: #3F47CC; - margin-bottom: 0.1rem; } } + color: #777; + margin-bottom: 2rem; } } .section-divider { max-width: 75rem; - margin-left: auto; - margin-right: auto; } + margin-right: auto; + margin-left: auto; } .section-divider::before, .section-divider::after { - content: ' '; - display: table; } + display: table; + content: ' '; } .section-divider::after { clear: both; } .section-divider hr { width: 100%; float: left; - padding-left: 0.625rem; padding-right: 0.625rem; - box-sizing: border-box; } - @media screen and (min-width: 40em) { + padding-left: 0.625rem; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + @media print, screen and (min-width: 40em) { .section-divider hr { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } .section-divider hr:last-child:not(:first-child) { float: right; } .benefits { max-width: 75rem; - margin-left: auto; margin-right: auto; + margin-left: auto; text-align: center; } .benefits::before, .benefits::after { - content: ' '; - display: table; } + display: table; + content: ' '; } .benefits::after { clear: both; } .benefits header { width: 100%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } - @media screen and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { .benefits header { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } .benefits header:last-child:not(:first-child) { float: right; } .benefits header h2 { @@ -6843,37 +7337,37 @@ p { .benefits .professional { width: 100%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } - @media screen and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { .benefits .semantic, .benefits .responsive, .benefits .customizable, .benefits .professional { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } .benefits .semantic:last-child:not(:first-child), .benefits .responsive:last-child:not(:first-child), .benefits .customizable:last-child:not(:first-child), .benefits .professional:last-child:not(:first-child) { float: right; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { .benefits .semantic, .benefits .responsive, .benefits .customizable, .benefits .professional { width: 25%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } } - @media screen and (min-width: 40em) and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } } + @media print, screen and (min-width: 40em) and (min-width: 40em) { .benefits .semantic, .benefits .responsive, .benefits .customizable, .benefits .professional { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } - @media screen and (min-width: 40em) { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + @media print, screen and (min-width: 40em) { .benefits .semantic:last-child:not(:first-child), .benefits .responsive:last-child:not(:first-child), .benefits .customizable:last-child:not(:first-child), @@ -6899,44 +7393,44 @@ p { font-size: 0.9375rem; } .benefits .why-foundation { max-width: 75rem; - margin-left: auto; margin-right: auto; + margin-left: auto; width: 100%; float: left; - padding-left: 0.625rem; padding-right: 0.625rem; + padding-left: 0.625rem; margin-top: 4rem; } .benefits .why-foundation::before, .benefits .why-foundation::after { - content: ' '; - display: table; } + display: table; + content: ' '; } .benefits .why-foundation::after { clear: both; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { .benefits .why-foundation { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } .benefits .why-foundation:last-child:not(:first-child) { float: right; } #kitchen-sink { max-width: 75rem; - margin-left: auto; margin-right: auto; + margin-left: auto; margin-top: 3rem; } #kitchen-sink::before, #kitchen-sink::after { - content: ' '; - display: table; } + display: table; + content: ' '; } #kitchen-sink::after { clear: both; } #kitchen-sink header { width: 100%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } - @media screen and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { #kitchen-sink header { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } #kitchen-sink header:last-child:not(:first-child) { float: right; } #kitchen-sink header .lead { @@ -6945,44 +7439,44 @@ p { #kitchen-sink #components { width: 100%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } + padding-right: 0.625rem; + padding-left: 0.625rem; } #kitchen-sink #components hr { margin: 3rem 0; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { #kitchen-sink #components { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } #kitchen-sink #components:last-child:not(:first-child) { float: right; } - @media screen and (min-width: 64em) { + @media print, screen and (min-width: 64em) { #kitchen-sink #components { width: 75%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } } - @media screen and (min-width: 64em) and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } } + @media print, screen and (min-width: 64em) and (min-width: 40em) { #kitchen-sink #components { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } - @media screen and (min-width: 64em) { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + @media print, screen and (min-width: 64em) { #kitchen-sink #components:last-child:not(:first-child) { float: right; } } #kitchen-sink #kitchen-sink-nav { display: none; } - @media screen and (min-width: 64em) { + @media print, screen and (min-width: 64em) { #kitchen-sink #kitchen-sink-nav { width: 25%; float: left; - padding-left: 0.625rem; padding-right: 0.625rem; + padding-left: 0.625rem; display: block; float: right; } } - @media screen and (min-width: 64em) and (min-width: 40em) { + @media print, screen and (min-width: 64em) and (min-width: 40em) { #kitchen-sink #kitchen-sink-nav { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } - @media screen and (min-width: 64em) { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + @media print, screen and (min-width: 64em) { #kitchen-sink #kitchen-sink-nav:last-child:not(:first-child) { float: right; } #kitchen-sink #kitchen-sink-nav .docs-sub-menu { @@ -7023,235 +7517,158 @@ p { #page { max-width: 75rem; - margin-left: auto; margin-right: auto; + margin-left: auto; margin-top: 3rem; } #page::before, #page::after { - content: ' '; - display: table; } + display: table; + content: ' '; } #page::after { clear: both; } #page .main-content { width: 100%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } - @media screen and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { #page .main-content { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } #page .main-content:last-child:not(:first-child) { float: right; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { #page .main-content { width: 66.66667%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } } - @media screen and (min-width: 40em) and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } } + @media print, screen and (min-width: 40em) and (min-width: 40em) { #page .main-content { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } - @media screen and (min-width: 40em) { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + @media print, screen and (min-width: 40em) { #page .main-content:last-child:not(:first-child) { float: right; } } #page-sidebar-left { max-width: 75rem; - margin-left: auto; margin-right: auto; + margin-left: auto; margin-top: 3rem; } #page-sidebar-left::before, #page-sidebar-left::after { - content: ' '; - display: table; } + display: table; + content: ' '; } #page-sidebar-left::after { clear: both; } #page-sidebar-left .main-content { width: 100%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } - @media screen and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { #page-sidebar-left .main-content { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } #page-sidebar-left .main-content:last-child:not(:first-child) { float: right; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { #page-sidebar-left .main-content { width: 66.66667%; float: left; - padding-left: 0.625rem; padding-right: 0.625rem; + padding-left: 0.625rem; position: relative; left: 33.33333%; } } - @media screen and (min-width: 40em) and (min-width: 40em) { + @media print, screen and (min-width: 40em) and (min-width: 40em) { #page-sidebar-left .main-content { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } - @media screen and (min-width: 40em) { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + @media print, screen and (min-width: 40em) { #page-sidebar-left .main-content:last-child:not(:first-child) { float: right; } } #page-sidebar-left .sidebar { width: 100%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } - @media screen and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { #page-sidebar-left .sidebar { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } #page-sidebar-left .sidebar:last-child:not(:first-child) { float: right; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { #page-sidebar-left .sidebar { width: 33.33333%; float: left; - padding-left: 0.625rem; padding-right: 0.625rem; + padding-left: 0.625rem; position: relative; left: -66.66667%; margin-top: 1rem; } } - @media screen and (min-width: 40em) and (min-width: 40em) { + @media print, screen and (min-width: 40em) and (min-width: 40em) { #page-sidebar-left .sidebar { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } - @media screen and (min-width: 40em) { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + @media print, screen and (min-width: 40em) { #page-sidebar-left .sidebar:last-child:not(:first-child) { float: right; } } #page-full-width { max-width: 75rem; - margin-left: auto; margin-right: auto; + margin-left: auto; margin-top: 3rem; } #page-full-width::before, #page-full-width::after { - content: ' '; - display: table; } + display: table; + content: ' '; } #page-full-width::after { clear: both; } #page-full-width .main-content { width: 100%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } - @media screen and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { #page-full-width .main-content { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } #page-full-width .main-content:last-child:not(:first-child) { float: right; } -#blog-hero { - background-size: cover; - background-position: bottom; - padding: 4.0625rem 0; - margin: 0 0 2rem; - position: relative; - text-align: left; - opacity: 1; - max-height: 350px; - background-color: #333; } - #blog-hero .blog-title { - max-width: 75rem; - margin-left: auto; - margin-right: auto; - max-width: 55rem; } - #blog-hero .blog-title::before, #blog-hero .blog-title::after { - content: ' '; - display: table; } - #blog-hero .blog-title::after { - clear: both; } - @media screen and (min-width: 40em) { - #blog-hero { - background-size: cover; - background-position: center; - height: 42.8125rem; - margin: 0 0 4.5rem; } } - #blog-hero .tagline { - width: 66.66667%; - float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } - @media screen and (min-width: 40em) { - #blog-hero .tagline { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } - #blog-hero .tagline:last-child:not(:first-child) { - float: right; } - @media screen and (min-width: 40em) { - #blog-hero .tagline { - width: 100%; - float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; - padding-top: 6rem; } } - @media screen and (min-width: 40em) and (min-width: 40em) { - #blog-hero .tagline { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } - @media screen and (min-width: 40em) { - #blog-hero .tagline:last-child:not(:first-child) { - float: right; } } - #blog-hero h1 { - color: #fff; - font-weight: 500; - font-size: 2.2rem; } - @media screen and (min-width: 40em) { - #blog-hero h1 { - font-size: 2.875rem; } } - #blog-hero h4 { - color: #fefefe; - font-weight: 300; - font-size: 1.3125rem; } - #blog-hero .download { - margin-top: 1.25rem; } - #single-post { max-width: 75rem; - margin-left: auto; margin-right: auto; + margin-left: auto; margin-top: 3rem; } #single-post::before, #single-post::after { - content: ' '; - display: table; } + display: table; + content: ' '; } #single-post::after { clear: both; } #single-post .main-content { width: 100%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } - @media screen and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { #single-post .main-content { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } #single-post .main-content:last-child:not(:first-child) { float: right; } - @media screen and (min-width: 40em) { + @media print, screen and (min-width: 40em) { #single-post .main-content { width: 66.66667%; float: left; - padding-left: 0.625rem; - padding-right: 0.625rem; } } - @media screen and (min-width: 40em) and (min-width: 40em) { + padding-right: 0.625rem; + padding-left: 0.625rem; } } + @media print, screen and (min-width: 40em) and (min-width: 40em) { #single-post .main-content { - padding-left: 0.9375rem; - padding-right: 0.9375rem; } } - @media screen and (min-width: 40em) { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + @media print, screen and (min-width: 40em) { #single-post .main-content:last-child:not(:first-child) { float: right; } } -#gallery-1 img { - border: none !important; } - -.type-post h2 { - line-height: 1.8rem; } - .type-post h2 a { - font-size: 1.8rem; - line-height: 1.8rem; } - -.type-post img { - padding: 20px 0; } - /*# sourceMappingURL=foundation.css.map */ diff --git a/web/app/themes/oe-brixton/assets/stylesheets/foundation.css.map b/web/app/themes/oe-brixton/assets/stylesheets/foundation.css.map old mode 100755 new mode 100644 index e60feb5..8d7665f --- a/web/app/themes/oe-brixton/assets/stylesheets/foundation.css.map +++ b/web/app/themes/oe-brixton/assets/stylesheets/foundation.css.map @@ -1 +1 @@ -{"version":3,"sources":["foundation.css","foundation.scss","global/_settings.scss","../components/foundation-sites/scss/foundation.scss","global/_wp-admin.scss","../components/foundation-sites/scss/util/_unit.scss","global/_wp-overrides.scss","../components/fontawesome/scss/font-awesome.scss","../components/fontawesome/scss/_path.scss","../components/fontawesome/scss/_core.scss","../components/fontawesome/scss/_larger.scss","../components/fontawesome/scss/_fixed-width.scss","../components/fontawesome/scss/_list.scss","../components/fontawesome/scss/_variables.scss","../components/fontawesome/scss/_bordered-pulled.scss","../components/fontawesome/scss/_animated.scss","../components/fontawesome/scss/_rotated-flipped.scss","../components/fontawesome/scss/_mixins.scss","../components/fontawesome/scss/_stacked.scss","../components/fontawesome/scss/_icons.scss","../components/foundation-sites/scss/_global.scss","../components/foundation-sites/scss/util/_mixins.scss","../components/foundation-sites/scss/grid/_classes.scss","../components/foundation-sites/scss/grid/_row.scss","../components/foundation-sites/scss/grid/_gutter.scss","../components/foundation-sites/scss/util/_breakpoint.scss","../components/foundation-sites/scss/grid/_size.scss","../components/foundation-sites/scss/grid/_column.scss","../components/foundation-sites/scss/grid/_position.scss","../components/foundation-sites/scss/grid/_layout.scss","../components/foundation-sites/scss/typography/_base.scss","../components/foundation-sites/scss/typography/_helpers.scss","../components/foundation-sites/scss/typography/_alignment.scss","../components/foundation-sites/scss/typography/_print.scss","../components/foundation-sites/scss/components/_button.scss","../components/foundation-sites/scss/forms/_text.scss","../components/foundation-sites/scss/forms/_checkbox.scss","../components/foundation-sites/scss/forms/_label.scss","../components/foundation-sites/scss/forms/_help-text.scss","../components/foundation-sites/scss/forms/_input-group.scss","../components/foundation-sites/scss/forms/_fieldset.scss","../components/foundation-sites/scss/forms/_select.scss","../components/foundation-sites/scss/forms/_error.scss","../components/foundation-sites/scss/forms/_range.scss","../components/foundation-sites/scss/components/_accordion.scss","../components/foundation-sites/scss/components/_accordion-menu.scss","../components/foundation-sites/scss/components/_badge.scss","../components/foundation-sites/scss/components/_breadcrumbs.scss","../components/foundation-sites/scss/components/_button-group.scss","../components/foundation-sites/scss/components/_callout.scss","../components/foundation-sites/scss/components/_close-button.scss","../components/foundation-sites/scss/components/_drilldown.scss","../components/foundation-sites/scss/components/_dropdown.scss","../components/foundation-sites/scss/components/_dropdown-menu.scss","../components/foundation-sites/scss/components/_flex-video.scss","../components/foundation-sites/scss/components/_label.scss","../components/foundation-sites/scss/components/_media-object.scss","../components/foundation-sites/scss/components/_menu.scss","../components/foundation-sites/scss/components/_off-canvas.scss","../components/foundation-sites/scss/components/_orbit.scss","../components/foundation-sites/scss/components/_pagination.scss","../components/foundation-sites/scss/components/_progress-bar.scss","../components/foundation-sites/scss/forms/_progress.scss","../components/foundation-sites/scss/forms/_meter.scss","../components/foundation-sites/scss/components/_slider.scss","../components/foundation-sites/scss/components/_sticky.scss","../components/foundation-sites/scss/components/_reveal.scss","../components/foundation-sites/scss/components/_switch.scss","../components/foundation-sites/scss/components/_table.scss","../components/foundation-sites/scss/util/_color.scss","../components/foundation-sites/scss/components/_tabs.scss","../components/foundation-sites/scss/components/_thumbnail.scss","../components/foundation-sites/scss/components/_title-bar.scss","../components/foundation-sites/scss/components/_tooltip.scss","../components/foundation-sites/scss/components/_top-bar.scss","../components/foundation-sites/scss/components/_visibility.scss","../components/foundation-sites/scss/components/_float.scss","../components/foundation-sites/scss/components/_menu-icon.scss","../components/motion-ui/src/_classes.scss","../components/motion-ui/src/_settings.scss","../components/motion-ui/src/util/_keyframe.scss","../components/motion-ui/src/transitions/_slide.scss","../components/motion-ui/src/util/_transition.scss","../components/motion-ui/src/transitions/_fade.scss","../components/motion-ui/src/effects/_hinge.scss","../components/motion-ui/src/transitions/_hinge.scss","../components/motion-ui/src/transitions/_zoom.scss","../components/motion-ui/src/transitions/_spin.scss","../components/motion-ui/src/util/_animation.scss","modules/_navigation.scss","modules/_footer.scss","modules/_sidebar.scss","components/_buttons.scss","components/_featured-image.scss","components/_dividers.scss","components/_links.scss","components/_page-builder.scss","components/_preloader","typography/_base.scss","templates/_front.scss","templates/_kitchen-sink.scss","templates/_page-default.scss","templates/_page-sidebar-left.scss","templates/_page-full-width.scss","templates/_single-post.scss","templates/_list-posts.scss"],"names":[],"mappings":"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EAAO;;AMpIxB;EAAE,aNqeY,EAAO;;AMperB;EAAE,aNmLgB,EAAO;;AMlLzB;EAAE,aNU2B,EAAO;;AMTpC;EAAE,aNYyB,EAAO;;AMXlC;EAAE,aNiUa,EAAO;;AMhUtB;EAAE,aN+bqB,EAAO;;AM9b9B;;EAAE,aN0dc,EAAO;;AMzdvB;EAAE,aNode,EAAO;;AMndxB;EAAE,aNoWgB,EAAO;;AMnWzB;EAAE,aNuWY,EAAO;;AMtWrB;EAAE,aNuOY,EAAO;;AMtOrB;EAAE,aNqSkB,EAAO;;AMpS3B;EAAE,aNmoBkB,EAAO;;AMloB3B;EAAE,aNioBmB,EAAO;;AMhoB5B;EAAE,aNkoBiB,EAAO;;AMjoB1B;EAAE,aNgcc,EAAO;;AM/bvB;EAAE,aNmBe,EAAO;;AMlBxB;EAAE,aNmjBW,EAAO;;AMljBpB;EAAE,aNmjBY,EAAO;;AMljBrB;EAAE,aNgDY,EAAO;;AM/CrB;EAAE,aNgDgB,EAAO;;AM/CzB;EAAE,aNsba,EAAO;;AMrbtB;EAAE,aNiEc,EAAO;;AMhEvB;EAAE,aNqOY,EAAO;;AMpOrB;EAAE,aNwCY,EAAO;;AMvCrB;EAAE,aNuTc,EAAO;;AMtTvB;EAAE,aNijBmB,EAAO;;AMhjB5B;EAAE,aNijBkB,EAAO;;AMhjB3B;EAAE,aNpCkB,EAAO;;AMqC3B;EAAE,aNvCoB,EAAO;;AMwC7B;EAAE,aNrCmB,EAAO;;AMsC5B;EAAE,aNxCqB,EAAO;;AMyC9B;EAAE,aN2UY,EAAO;;AM1UrB;;EAAE,aNqYe,EAAO;;AMpYxB;EAAE,aNoSc,EAAO;;AMnSvB;EAAE,aNsmBoB,EAAO;;AMrmB7B;;;EAAE,aNsZiB,EAAO;;AMrZ1B;EAAE,aN8Yc,EAAO;;AM7YvB;EAAE,aNsVkB,EAAO;;AMrV3B;EAAE,aNnDc,EAAO;;AMoDvB;EAAE,aNijBY,EAAO;;AMhjBrB;;EAAE,aN4YuB,EAAO;;AM3YhC;EAAE,aNodsB,EAAO;;AMnd/B;EAAE,aNyEsB,EAAO;;AMxE/B;EAAE,aNtBc,EAAO;;AMuBvB;EAAE,aNkgBqB,EAAO;;AMjgB9B;EAAE,aNqKqB,EAAO;;AMpK9B;EAAE,aNlBgB,EAAO;;AMmBzB;EAAE,aNkZY,EAAO;;AMjZrB;EAAE,aN6Xa,EAAO;;AM5XtB;EAAE,aNkgBY,EAAO;;AMjgBrB;EAAE,aN6Me,EAAO;;AM5MxB;EAAE,aNgKoB,EAAO;;AM/J7B;EAAE,aN2foB,EAAO;;AM1f7B;EAAE,aNoIa,EAAO;;AMnItB;EAAE,aNmEoB,EAAO;;AMlE7B;EAAE,aNmEqB,EAAO;;AMlE9B;EAAE,aN8YmB,EAAO;;AM7Y5B;EAAE,aNoVoB,EAAO;;AMnV7B;EAAE,aN4hBoB,EAAO;;AM3hB7B;EAAE,aNqDoB,EAAO;;AMpD7B;EAAE,aNoZuB,EAAO;;AMnZhC;EAAE,aN2QmB,EAAO;;AM1Q5B;EAAE,aNoGkB,EAAO;;AMnG3B;EAAE,aNwhBsB,EAAO;;AMvhB/B;EAAE,aNiDsB,EAAO;;AMhD/B;EAAE,aNnCW,EAAO;;AMoCpB;EAAE,aNhDkB,EAAO;;AMiD3B;EAAE,aNhDmB,EAAO;;AMiD5B;EAAE,aNhDgB,EAAO;;AMiDzB;EAAE,aNpDkB,EAAO;;AMqD3B;;EAAE,aNmba,EAAO;;AMlbtB;EAAE,aNgIc,EAAO;;AM/HvB;EAAE,aNiFgB,EAAO;;AMhFzB;EAAE,aN4XY,EAAO;;AM3XrB;EAAE,aNkUa,EAAO;;AMjUtB;EAAE,aNlDgB,EAAO;;AMmDzB;EAAE,aNyH0B,EAAO;;AMxHnC;EAAE,aNgMY,EAAO;;AM/LrB;EAAE,aN4QY,EAAO;;AM3QrB;EAAE,aN8JY,EAAO;;AM7JrB;EAAE,aN2HW,EAAO;;AM1HpB;EAAE,aN2HiB,EAAO;;AM1H1B;;EAAE,aNoH4B,EAAO;;AMnHrC;EAAE,aN6Wa,EAAO;;AM5WtB;EAAE,aNJgB,EAAO;;AMKzB;EAAE,aN+Xc,EAAO;;AM9XvB;EAAE,aN4De,EAAO;;AM3DxB;EAAE,aN8Rc,EAAO;;AM7RvB;EAAE,aNmCkB,EAAO;;AMlC3B;EAAE,aN+BoB,EAAO;;AM9B7B;EAAE,aNwYe,EAAO;;AMvYxB;EAAE,aN0aqB,EAAO;;AMza9B;EAAE,aN2Jc,EAAO;;AM1JvB;EAAE,aN4JmB,EAAO;;AM3J5B;EAAE,aNtEgB,EAAO;;AMuEzB;EAAE,aNxEgB,EAAO;;AMyEzB;;EAAE,aNhEiB,EAAO;;AMiE1B;EAAE,aNihBsB,EAAO;;AMhhB/B;EAAE,aN+GuB,EAAO;;AM9GhC;EAAE,aNZoB,EAAO;;AMa7B;EAAE,aN+OW,EAAO;;AM9OpB;;EAAE,aN2CY,EAAO;;AM1CrB;EAAE,aNgDgB,EAAO;;AM/CzB;EAAE,aN2emB,EAAO;;AM1e5B;EAAE,aNyeqB,EAAO;;AMxe9B;EAAE,aN8biB,EAAO;;AM7b1B;EAAE,aNuMe,EAAO;;AMtMxB;EAAE,aN4ZgB,EAAO;;AM3ZzB;EAAE,aN4PuB,EAAO;;AM3PhC;EAAE,aNkekB,EAAO;;AMje3B;EAAE,aN2FqB,EAAO;;AM1F9B;EAAE,aNuZe,EAAO;;AMtZxB;EAAE,aNwfc,EAAO;;AMvfvB;EAAE,aNiKqB,EAAO;;AMhK9B;EAAE,aNygBc,EAAO;;AMxgBvB;EAAE,aN0Oe,EAAO;;AMzOxB;EAAE,aNkUa,EAAO;;AMjUtB;EAAE,aN8agB,EAAO;;AM7azB;EAAE,aNlDkB,EAAO;;AMmD3B;EAAE,aNgUoB,EAAO;;AM/T7B;EAAE,aNyfe,EAAO;;AMxfxB;;EAAE,aNqFgB,EAAO;;AMpFzB;EAAE,aNsJc,EAAO;;AMrJvB;EAAE,aN6fc,EAAO;;AM5fvB;EAAE,aNmCmB,EAAO;;AMlC5B;;EAAE,aN4WW,EAAO;;AM3WpB;EAAE,aN+Ka,EAAO;;AM9KtB;EAAE,aNrDgB,EAAO;;AMsDzB;EAAE,aN9EY,EAAO;;AM+ErB;EAAE,aNrBmB,EAAO;;AMsB5B;EAAE,aNiKoB,EAAO;;AMhK7B;EAAE,aN+JmB,EAAO;;AM9J5B;EAAE,aNgKiB,EAAO;;AM/J1B;EAAE,aN4JmB,EAAO;;AM3J5B;EAAE,aN5HyB,EAAO;;AM6HlC;EAAE,aNxH0B,EAAO;;AMyHnC;EAAE,aNxHuB,EAAO;;AMyHhC;EAAE,aNhIyB,EAAO;;AMiIlC;EAAE,aN2Ia,EAAO;;AM1ItB;EAAE,aNghBc,EAAO;;AM/gBvB;EAAE,aNyba,EAAO;;AMxbtB;EAAE,aN+Fc,EAAO;;AM9FvB;EAAE,aNzEiB,EAAO;;AM0E1B;EAAE,aNzHkB,EAAO;;AM0H3B;;EAAE,aNmfa,EAAO;;AMlftB;;EAAE,aNqNY,EAAO;;AMpNrB;EAAE,aNZa,EAAO;;AMatB;EAAE,aNiGa,EAAO;;AMhGtB;;EAAE,aN4VgB,EAAO;;AM3VzB;;EAAE,aNqFe,EAAO;;AMpFxB;EAAE,aNoRiB,EAAO;;AMnR1B;;EAAE,aN+FgB,EAAO;;AM9FzB;EAAE,aN0Yc,EAAO;;AMzYvB;;;EAAE,aNtHY,EAAO;;AMuHrB;EAAE,aNmNe,EAAO;;AMlNxB;EAAE,aNiNe,EAAO;;AMhNxB;EAAE,aN2ZqB,EAAO;;AM1Z9B;EAAE,aNudiB,EAAO;;AMtd1B;EAAE,aNkaa,EAAO;;AMjatB;EAAE,aNqNa,EAAO;;AMpNtB;EAAE,aNyca,EAAO;;AMxctB;EAAE,aN4RiB,EAAO;;AM3R1B;EAAE,aN6RwB,EAAO;;AM5RjC;EAAE,aNqH0B,EAAO;;AMpHnC;EAAE,aNmHmB,EAAO;;AMlH5B;EAAE,aN+Oa,EAAO;;AM9OtB;EAAE,aN7EkB,EAAO;;AM8E3B;EAAE,aNvEgB,EAAO;;AMwEzB;EAAE,aN9EkB,EAAO;;AM+E3B;EAAE,aN9EmB,EAAO;;AM+E5B;EAAE,aNzBe,EAAO;;AM0BxB;;EAAE,aNuWY,EAAO;;AMtWrB;;EAAE,aN4WiB,EAAO;;AM3W1B;;EAAE,aN0WgB,EAAO;;AMzWzB;EAAE,aNegB,EAAO;;AMdzB;EAAE,aNwLgB,EAAO;;AMvLzB;;EAAE,aNqcY,EAAO;;AMpcrB;;EAAE,aNmFa,EAAO;;AMlFtB;;EAAE,aNgZkB,EAAO;;AM/Y3B;EAAE,aNhCiB,EAAO;;AMiC1B;EAAE,aN7BkB,EAAO;;AM8B3B;;EAAE,aNrHY,EAAO;;AMsHrB;EAAE,aNoVe,EAAO;;AMnVxB;EAAE,aN4bgB,EAAO;;AM3bzB;;EAAE,aNtDiB,EAAO;;AMuD1B;EAAE,aN2KmB,EAAO;;AM1K5B;EAAE,aNSgB,EAAO;;AMRzB;EAAE,aNpDsB,EAAO;;AMqD/B;EAAE,aNpDoB,EAAO;;AMqD7B;EAAE,aNkce,EAAO;;AMjcxB;EAAE,aNkXmB,EAAO;;AMjX5B;EAAE,aN6XgB,EAAO;;AM5XzB;EAAE,aN7Ic,EAAO;;AM8IvB;EAAE,aNnDc,EAAO;;AMoDvB;EAAE,aN3Be,EAAO;;AM4BxB;EAAE,aNmCmB,EAAO;;AMlC5B;EAAE,aN3HkB,EAAO;;AM4H3B;EAAE,aNgHkB,EAAO;;AM/G3B;EAAE,aN5MiB,EAAO;;AM6M1B;EAAE,aNgMc,EAAO;;AM/LvB;EAAE,aNemB,EAAO;;AMd5B;EAAE,aN1JY,EAAO;;AM2JrB;EAAE,aNmFgB,EAAO;;AMlFzB;EAAE,aN4PmB,EAAO;;AM3P5B;EAAE,aN7MyB,EAAO;;AM8MlC;EAAE,aN7M0B,EAAO;;AM8MnC;EAAE,aN7MuB,EAAO;;AM8MhC;EAAE,aNjNyB,EAAO;;AMkNlC;EAAE,aN7MkB,EAAO;;AM8M3B;EAAE,aN7MmB,EAAO;;AM8M5B;EAAE,aN7MgB,EAAO;;AM8MzB;EAAE,aNjNkB,EAAO;;AMkN3B;EAAE,aNvCe,EAAO;;AMwCxB;EAAE,aNkIc,EAAO;;AMjIvB;EAAE,aN2Wc,EAAO;;AM1WvB;;EAAE,aN0Lc,EAAO;;AMzLvB;EAAE,aNzFgB,EAAO;;AM0FzB;EAAE,aNwPkB,EAAO;;AMvP3B;EAAE,aNwPmB,EAAO;;AMvP5B;EAAE,aNoUe,EAAO;;AMnUxB;EAAE,aN9Fc,EAAO;;AM+FvB;;EAAE,aNmQa,EAAO;;AMlQtB;EAAE,aNmDkB,EAAO;;AMlD3B;EAAE,aNyBgB,EAAO;;AMxBzB;EAAE,aN0BqB,EAAO;;AMzB9B;EAAE,aN+Se,EAAO;;AM9SxB;EAAE,aN+Be,EAAO;;AM9BxB;EAAE,aNqKa,EAAO;;AMpKtB;EAAE,aN+Be,EAAO;;AM9BxB;EAAE,aN+GkB,EAAO;;AM9G3B;EAAE,aNYc,EAAO;;AMXvB;EAAE,aNUsB,EAAO;;AMT/B;EAAE,aNiWgB,EAAO;;AMhWzB;EAAE,aN/FY,EAAO;;AMgGrB;;EAAE,aNuPiB,EAAO;;AMtP1B;;;EAAE,aN+TmB,EAAO;;AM9T5B;EAAE,aNkIsB,EAAO;;AMjI/B;EAAE,aN5EY,EAAO;;AM6ErB;EAAE,aNnGiB,EAAO;;AMoG1B;;EAAE,aNjIoB,EAAO;;AMkI7B;EAAE,aN+NgB,EAAO;;AM9NzB;EAAE,aNsFY,EAAO;;AMrFrB;EAAE,aN9CmB,EAAO;;AM+C5B;EAAE,aN2UmB,EAAO;;AM1U5B;EAAE,aNsUiB,EAAO;;AMrU1B;EAAE,aNrDc,EAAO;;AMsDvB;EAAE,aNsNoB,EAAO;;AMrN7B;EAAE,aNmJkB,EAAO;;AMlJ3B;EAAE,aNmJwB,EAAO;;AMlJjC;EAAE,aNuQc,EAAO;;AMtQvB;EAAE,aNvKkB,EAAO;;AMwK3B;EAAE,aNbyB,EAAO;;AMclC;EAAE,aNyOc,EAAO;;AMxOvB;EAAE,aNuIc,EAAO;;AMtIvB;EAAE,aNzI2B,EAAO;;AM0IpC;EAAE,aNzI4B,EAAO;;AM0IrC;EAAE,aNzIyB,EAAO;;AM0IlC;EAAE,aN7I2B,EAAO;;AM8IpC;EAAE,aN8Da,EAAO;;AM7DtB;EAAE,aNhGY,EAAO;;AMiGrB;EAAE,aNzQc,EAAO;;AM0QvB;EAAE,aNoXkB,EAAO;;AMnX3B;EAAE,aN3LgB,EAAO;;AM4LzB;EAAE,aN7EkB,EAAO;;AM8E3B;EAAE,aN7EkB,EAAO;;AM8E3B;EAAE,aNiOkB,EAAO;;AMhO3B;EAAE,aNwLmB,EAAO;;AMvL5B;EAAE,aNyUc,EAAO;;AMxUvB;EAAE,aNkIoB,EAAO;;AMjI7B;EAAE,aNkIsB,EAAO;;AMjI/B;EAAE,aNiFgB,EAAO;;AMhFzB;EAAE,aN+EkB,EAAO;;AM9E3B;EAAE,aN9JoB,EAAO;;AM+J7B;EAAE,aNkKqB,EAAO;;AMjK9B;EAAE,aNxE4B,EAAO;;AMyErC;EAAE,aNyOoB,EAAO;;AMxO7B;EAAE,aN5He,EAAO;;AM6HxB;;EAAE,aNzL2B,EAAO;;AM0LpC;;EAAE,aNvLyB,EAAO;;AMwLlC;;EAAE,aNzL4B,EAAO;;AM0LrC;;EAAE,aNvFW,EAAO;;AMwFpB;EAAE,aNpBW,EAAO;;AMqBpB;;EAAE,aNmWW,EAAO;;AMlWpB;;EAAE,aN8CW,EAAO;;AM7CpB;;;;EAAE,aNqDW,EAAO;;AMpDpB;;;EAAE,aN8MW,EAAO;;AM7MpB;;EAAE,aNuDW,EAAO;;AMtDpB;;EAAE,aNzNW,EAAO;;AM0NpB;EAAE,aNxEY,EAAO;;AMyErB;EAAE,aN5DiB,EAAO;;AM6D1B;EAAE,aNiPsB,EAAO;;AMhP/B;EAAE,aNiPuB,EAAO;;AMhPhC;EAAE,aNiPuB,EAAO;;AMhPhC;EAAE,aNiPwB,EAAO;;AMhPjC;EAAE,aNoPwB,EAAO;;AMnPjC;EAAE,aNoPyB,EAAO;;AMnPlC;EAAE,aN2SiB,EAAO;;AM1S1B;EAAE,aNuSmB,EAAO;;AMtS5B;EAAE,aN6XsB,EAAO;;AM5X/B;EAAE,aN0Xe,EAAO;;AMzXxB;EAAE,aNgXY,EAAO;;AM/WrB;EAAE,aNgXmB,EAAO;;AM/W5B;EAAE,aNwXoB,EAAO;;AMvX7B;EAAE,aN1He,EAAO;;AM2HxB;EAAE,aNqPsB,EAAO;;AMpP/B;EAAE,aNyBiB,EAAO;;AMxB1B;EAAE,aN7Dc,EAAO;;AM8DvB;EAAE,aN/TW,EAAO;;AMgUpB;EAAE,aN3PiB,EAAO;;AM4P1B;EAAE,aN3PwB,EAAO;;AM4PjC;EAAE,aNsTc,EAAO;;AMrTvB;EAAE,aNsTqB,EAAO;;AMrT9B;EAAE,aNwDuB,EAAO;;AMvDhC;EAAE,aN0DqB,EAAO;;AMzD9B;EAAE,aNuDuB,EAAO;;AMtDhC;EAAE,aNuDwB,EAAO;;AMtDjC;EAAE,aNtTa,EAAO;;AMuTtB;EAAE,aN2Ve,EAAO;;AM1VxB;EAAE,aNlUe,EAAO;;AMmUxB;EAAE,aN0Ca,EAAO;;AMzCtB;EAAE,aN5IgB,EAAO;;AM6IzB;EAAE,aN2Ma,EAAO;;AM1MtB;EAAE,aNlEkB,EAAO;;AMmE3B;EAAE,aNmSc,EAAO;;AMlSvB;EAAE,aN9Gc,EAAO;;AM+GvB;EAAE,aNoDY,EAAO;;AMnDrB;;EAAE,aN3CgB,EAAO;;AM4CzB;EAAE,aNsPa,EAAO;;AMrPtB;EAAE,aN6Ec,EAAO;;AM5EvB;EAAE,aNlUe,EAAO;;AMmUxB;EAAE,aNnQW,EAAO;;AMoQpB;EAAE,aNiUU,EAAO;;AMhUnB;EAAE,aNsUa,EAAO;;AMrUtB;EAAE,aNgJc,EAAO;;AM/IvB;EAAE,aNwFiB,EAAO;;AMvF1B;EAAE,aNqNsB,EAAO;;AMpN/B;EAAE,aNnU4B,EAAO;;AMoUrC;EAAE,aNrU2B,EAAO;;AMsUpC;;EAAE,aNrP2B,EAAO;;AMsPpC;EAAE,aNjKoB,EAAO;;AMkK7B;EAAE,aNiUkB,EAAO;;AMhU3B;EAAE,aNqToB,EAAO;;AMpT7B;;EAAE,aNoRW,EAAO;;AMnRpB;EAAE,aNiHqB,EAAO;;AMhH9B;EAAE,aNsMqB,EAAO;;AMrM9B;EAAE,aNoLa,EAAO;;AMnLtB;EAAE,aN3JuB,EAAO;;AM4JhC;EAAE,aN+TiB,EAAO;;AM9T1B;EAAE,aNsEc,EAAO;;AMrEvB;;;EAAE,aNyRkB,EAAO;;AMxR3B;;EAAE,aNpEsB,EAAO;;AMqE/B;EAAE,aNiUa,EAAO;;AMhUtB;EAAE,aN1Ec,EAAO;;AM2EvB;EAAE,aNsHc,EAAO;;AMrHvB;EAAE,aNuHqB,EAAO;;AMtH9B;EAAE,aNsN0B,EAAO;;AMrNnC;EAAE,aNoNmB,EAAO;;AMnN5B;EAAE,aNzLiB,EAAO;;AM0L1B;EAAE,aNtLY,EAAO;;AMuLrB;EAAE,aNoFkB,EAAO;;AMnF3B;EAAE,aNoFsB,EAAO;;AMnF/B;EAAE,aNnLc,EAAO;;AMoLvB;EAAE,aN1Bc,EAAO;;AM2BvB;EAAE,aNrBgB,EAAO;;AMsBzB;EAAE,aNxJW,EAAO;;AMyJpB;EAAE,aNrSgB,EAAO;;AMsSzB;EAAE,aNlPa,EAAO;;AMmPtB;EAAE,aNiEW,EAAO;;AMhEpB;EAAE,aNgLa,EAAO;;AM/KtB;EAAE,aN7MY,EAAO;;AM8MrB;EAAE,aN7Ma,EAAO;;AM8MtB;EAAE,aNnUe,EAAO;;AMoUxB;EAAE,aNnUsB,EAAO;;AMoU/B;EAAE,aNuLa,EAAO;;AMtLtB;EAAE,aNuLoB,EAAO;;AMtL7B;EAAE,aN+Fe,EAAO;;AM9FxB;;EAAE,aNhSW,EAAO;;AMiSpB;;EAAE,aN6MY,EAAO;;AM5MrB;EAAE,aN2OY,EAAO;;AM1OrB;EAAE,aNsKe,EAAO;;AMrKxB;EAAE,aN9MkB,EAAO;;AM+M3B;EAAE,aNgKkB,EAAO;;AM/J3B;EAAE,aNpNgB,EAAO;;AMqNzB;EAAE,aN/JkB,EAAO;;AMgK3B;EAAE,aNxJmB,EAAO;;AMyJ5B;EAAE,aNrKoB,EAAO;;AMsK7B;EAAE,aN/JyB,EAAO;;AMgKlC;;;EAAE,aNtKoB,EAAO;;AMuK7B;;EAAE,aN3KsB,EAAO;;AM4K/B;;EAAE,aN3KoB,EAAO;;AM4K7B;;EAAE,aN/JoB,EAAO;;AMgK7B;EAAE,aN5KmB,EAAO;;AM6K5B;EAAE,aNmQY,EAAO;;AMlQrB;EAAE,aN7Pe,EAAO;;AM8PxB;EAAE,aNxDgB,EAAO;;AMyDzB;;;;;EAAE,aNzCiB,EAAO;;AM0C1B;EAAE,aN5QsB,EAAO;;AM6Q/B;;EAAE,aNwEa,EAAO;;AMvEtB;;EAAE,aNlNc,EAAO;;AMmNvB;EAAE,aNhIkB,EAAO;;AMiI3B;EAAE,aNlIW,EAAO;;AMmIpB;;;EAAE,aNnHmB,EAAO;;AMoH5B;EAAE,aNsLqB,EAAO;;AMrL9B;EAAE,aN0DU,EAAO;;AMzDnB;;EAAE,aN+Pc,EAAO;;AM9PvB;;EAAE,aNmBmB,EAAO;;AMlB5B;;EAAE,aNmBqB,EAAO;;AMlB9B;EAAE,aNpGe,EAAO;;AMqGxB;EAAE,aNvRmB,EAAO;;AMwR5B;EAAE,aN3Gc,EAAO;;AM4GvB;EAAE,aNiBiB,EAAO;;AMhB1B;EAAE,aNmHe,EAAO;;AMlHxB;EAAE,aN8FiB,EAAO;;AM7F1B;EAAE,aN8FwB,EAAO;;AM7FjC;EAAE,aN7VY,EAAO;;AM8VrB;;EAAE,aN7JgB,EAAO;;AM8JzB;EAAE,aN2MW,EAAO;;AM1MpB;EAAE,aN1WkB,EAAO;;AM2W3B;EAAE,aNkCY,EAAO;;AMjCrB;EAAE,aN4GkB,EAAO;;AM3G3B;EAAE,aN4Mc,EAAO;;AM3MvB;EAAE,aN8PY,EAAO;;AM7PrB;EAAE,aNVmB,EAAO;;AMW5B;EAAE,aN+OY,EAAO;;AM9OrB;EAAE,aNzVkB,EAAO;;AM0V3B;EAAE,aNQc,EAAO;;AMPvB;EAAE,aNjJqB,EAAO;;AMkJ9B;EAAE,aNhUe,EAAO;;AMiUxB;EAAE,aNpUqB,EAAO;;AMqU9B;EAAE,aNvUmB,EAAO;;AMwU5B;EAAE,aN1Ue,EAAO;;AM2UxB;EAAE,aNtUiB,EAAO;;AMuU1B;EAAE,aNtUiB,EAAO;;AMuU1B;EAAE,aN7XkB,EAAO;;AM8X3B;EAAE,aN7XoB,EAAO;;AM8X7B;EAAE,aNgLa,EAAO;;AM/KtB;EAAE,aNvRiB,EAAO;;AMwR1B;EAAE,aN3ZU,EAAO;;AM4ZnB;EAAE,aNzOkB,EAAO;;AM0O3B;EAAE,aNhBmB,EAAO;;AMiB5B;EAAE,aNhYqB,EAAO;;AMiY9B;EAAE,aNjbkB,EAAO;;AMkb3B;EAAE,aNAiB,EAAO;;AMC1B;EAAE,aNtFkB,EAAO;;AMuF3B;EAAE,aNpGc,EAAO;;AMqGvB;EAAE,aNpGqB,EAAO;;AMqG9B;EAAE,aN6JkB,EAAO;;AM5J3B;EAAE,aN6JiB,EAAO;;AM5J1B;EAAE,aN1Ye,EAAO;;AM2YxB;EAAE,aNrXW,EAAO;;AMsXpB;EAAE,aNpHe,EAAO;;AMqHxB;EAAE,aNtciB,EAAO;;AMuc1B;EAAE,aNjWU,EAAO;;AMkWnB;;;EAAE,aNnIW,EAAO;;AMoIpB;EAAE,aNjEgB,EAAO;;AMkEzB;EAAE,aN1XkB,EAAO;;AM2X3B;EAAE,aN9SsB,EAAO;;AM+S/B;EAAE,aNhSgB,EAAO;;AMiSzB;EAAE,aN5MgB,EAAO;;AM6MzB;EAAE,aNhHe,EAAO;;AMiHxB;EAAE,aNyCc,EAAO;;AMxCvB;EAAE,aNqDoB,EAAO;;AMpD7B;EAAE,aN2DmB,EAAO;;AM1D5B;EAAE,aN4DgB,EAAO;;AM3DzB;EAAE,aN9WiB,EAAO;;AM+W1B;EAAE,aNhXuB,EAAO;;AMiXhC;EAAE,aNnSe,EAAO;;AMoSxB;EAAE,aN8CY,EAAO;;AM7CrB;EAAE,aN6KmB,EAAO;;AM5K5B;EAAE,aN9DkB,EAAO;;AM+D3B;EAAE,aNgGmB,EAAO;;AM/F5B;EAAE,aNrKiB,EAAO;;AMsK1B;EAAE,aN4Ka,EAAO;;AM3KtB;EAAE,aN1FY,EAAO;;AM2FrB;EAAE,aNjFe,EAAO;;AMkFxB;;EAAE,aNsImB,EAAO;;AMrI5B;EAAE,aNsIuB,EAAO;;AMrIhC;EAAE,aNwKoB,EAAO;;AMvK7B;EAAE,aN9FmB,EAAO;;AM+F5B;EAAE,aNuKkB,EAAO;;AMtK3B;EAAE,aN/FmB,EAAO;;AMgG5B;EAAE,aN9FqB,EAAO;;AM+F9B;EAAE,aNhGqB,EAAO;;AMiG9B;EAAE,aNxEc,EAAO;;AMyEvB;EAAE,aN3NkB,EAAO;;AM4N3B;EAAE,aNrRyB,EAAO;;AMsRlC;EAAE,aNxCmB,EAAO;;AMyC5B;EAAE,aN6KgB,EAAO;;AM5KzB;EAAE,aNgBc,EAAO;;AMfvB;EAAE,aNuJiB,EAAO;;AMtJ1B;EAAE,aNwJkB,EAAO;;AMvJ3B;;EAAE,aN7bW,EAAO;;AM8bpB;EAAE,aN2Je,EAAO;;AM1JxB;EAAE,aNmHa,EAAO;;AMlHtB;EAAE,aN6Ec,EAAO;;AM5EvB;EAAE,aNzGc,EAAO;;AM0GvB;;EAAE,aN8KoB,EAAO;;AM7K7B;EAAE,aN7EqB,EAAO;;AM8E9B;EAAE,aNjFgB,EAAO;;AMkFzB;EAAE,aN3SoB,EAAO;;AM4S7B;;EAAE,aN1coB,EAAO;;AM2c7B;;EAAE,aNxc8B,EAAO;;AMycvC;;EAAE,aN3coB,EAAO;;AM4c7B;;EAAE,aN3cuB,EAAO;;AM4chC;;EAAE,aN/cqB,EAAO;;AMgd9B;EAAE,aNjGqB,EAAO;;AMkG9B;EAAE,aNzLgB,EAAO;;AM0LzB;EAAE,aN9FoB,EAAO;;AM+F7B;EAAE,aN9FsB,EAAO;;AM+F/B;EAAE,aNoDmB,EAAO;;AMnD5B;EAAE,aNoDqB,EAAO;;AMnD9B;EAAE,aNxZc,EAAO;;AMyZvB;EAAE,aN3ZsB,EAAO;;AM4Z/B;EAAE,aN7Xa,EAAO;;AM8XtB;EAAE,aNreqB,EAAO;;AMse9B;EAAE,aNtMmB,EAAO;;AMuM5B;;EAAE,aNtMuB,EAAO;;AMuMhC;;EAAE,aNzMsB,EAAO;;AM0M/B;;EAAE,aN3MqB,EAAO;;AM4M9B;EAAE,aNhNiB,EAAO;;AMiN1B;;EAAE,aNhOmB,EAAO;;AMiO5B;;EAAE,aNpOoB,EAAO;;AMqO7B;EAAE,aNjOuB,EAAO;;AMkOhC;EAAE,aN3OqB,EAAO;;AM4O9B;EAAE,aNlOoB,EAAO;;AMmO7B;EAAE,aNtOsB,EAAO;;AMuO/B;EAAE,aNxOoB,EAAO;;AMyO7B;EAAE,aNgFiB,EAAO;;AM/E1B;EAAE,aNrDkB,EAAO;;AMsD3B;EAAE,aNnXwB,EAAO;;AMoXjC;EAAE,aNvQU,EAAO;;AMwQnB;EAAE,aNvQiB,EAAO;;AMwQ1B;EAAE,aNmFmB,EAAO;;AMlF5B;EAAE,aNtHqB,EAAO;;AMuH9B;EAAE,aNtH4B,EAAO;;AMuHrC;EAAE,aN7QkB,EAAO;;AM8Q3B;EAAE,aN+HmB,EAAO;;AM9H5B;EAAE,aN3Cc,EAAO;;AM4CvB;EAAE,aN7Zc,EAAO;;AM8ZvB;EAAE,aN5Se,EAAO;;AM6SxB;EAAE,aNzHa,EAAO;;AM0HtB;EAAE,aNjNyB,EAAO;;AMkNlC;;EAAE,aNyCkB,EAAO;;AMxC3B;EAAE,aNpYc,EAAO;;AMqYvB;EAAE,aN9iBa,EAAO;;AM+iBtB;EAAE,aNxiBc,EAAO;;AMyiBvB;EAAE,aN9cuB,EAAO;;AM+chC;EAAE,aNjdwB,EAAO;;AMkdjC;EAAE,aN/cwB,EAAO;;AMgdjC;EAAE,aNpdwB,EAAO;;AMqdjC;EAAE,aNhOgB,EAAO;;AMiOzB;EAAE,aN1Ke,EAAO;;AM2KxB;EAAE,aN1KiB,EAAO;;AM2K1B;EAAE,aN7Ka,EAAO;;AM8KtB;EAAE,aNhLW,EAAO;;AMiLpB;EAAE,aNvZkB,EAAO;;AMwZ3B;EAAE,aNvZoB,EAAO;;AMwZ7B;EAAE,aN9Oa,EAAO;;AM+OtB;EAAE,aN2Fa,EAAO;;AM1FtB;EAAE,aNnfiB,EAAO;;AMof1B;EAAE,aNpTiB,EAAO;;AMqT1B;EAAE,aNzFoB,EAAO;;AM0F7B;EAAE,aN3XY,EAAO;;AM4XrB;EAAE,aNnZuB,EAAO;;AMoZhC;EAAE,aNvagB,EAAO;;AMwazB;EAAE,aNlKY,EAAO;;AMmKrB;EAAE,aNzToB,EAAO;;AM0T7B;EAAE,aNqEW,EAAO;;AMpEpB;EAAE,aN7GoB,EAAO;;AM8G7B;EAAE,aNzKgB,EAAO;;AM0KzB;EAAE,aNzEc,EAAO;;AM0EvB;EAAE,aN7IoB,EAAO;;AM8I7B;EAAE,aN7IsB,EAAO;;AM8I/B;EAAE,aNTmB,EAAO;;AMU5B;EAAE,aNTqB,EAAO;;AMU9B;EAAE,aN5DoB,EAAO;;AM6D7B;EAAE,aN5DuB,EAAO;;AM6DhC;EAAE,aNrRe,EAAO;;AMsRxB;EAAE,aNrgBiB,EAAO;;AMsgB1B;EAAE,aNrgBmB,EAAO;;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EL2EjB;;AApBD;EItEJ,iBCesB,ELyDjB;;AAIC;EM3EJ,mBAAmB;EACnB,gBAHmB,EN+Ed;;AAED;EM/EJ,mBAAmB;EACnB,iBAHmB,ENmFd;;AAMH;EM/DJ,uBDVsB,EL2EjB;;AApBD;EItEJ,WCesB,ELyDjB;;AAIC;EM3EJ,mBAAmB;EACnB,UAHmB,EN+Ed;;AAED;EM/EJ,mBAAmB;EACnB,WAHmB,ENmFd;;AAMH;EM/DJ,uBDVsB,EL2EjB;;AApBD;EItEJ,iBCesB,ELyDjB;;AAIC;EM3EJ,mBAAmB;EACnB,gBAHmB,EN+Ed;;AAED;EM/EJ,mBAAmB;EACnB,iBAHmB,ENmFd;;AAMH;EM/DJ,iBDVsB,EL2EjB;;AApBD;EItEJ,iBCesB,ELyDjB;;AAIC;EM3EJ,mBAAmB;EACnB,gBAHmB,EN+Ed;;AAED;EM/EJ,mBAAmB;EACnB,iBAHmB,ENmFd;;AAMH;EM/DJ,uBDVsB,EL2EjB;;AApBD;EItEJ,WCesB,ELyDjB;;AAIC;EM3EJ,mBAAmB;EACnB,UAHmB,EN+Ed;;AAED;EM/EJ,mBAAmB;EACnB,WAHmB,ENmFd;;AAMH;EM/DJ,uBDVsB,EL2EjB;;AApBD;EItEJ,iBCesB,ELyDjB;;AAIC;EM3EJ,mBAAmB;EACnB,gBAHmB,EN+Ed;;AAED;EM/EJ,mBAAmB;EACnB,iBAHmB,ENmFd;;AAMH;EM/DJ,iBDVsB,EL2EjB;;AApBD;EItEJ,iBCesB,ELyDjB;;AAIC;EM3EJ,mBAAmB;EACnB,gBAHmB,EN+Ed;;AAED;EM/EJ,mBAAmB;EACnB,iBAHmB,ENmFd;;AAMH;EM/DJ,uBDVsB,EL2EjB;;AApBD;EItEJ,YCesB,ELyDjB;;AAgBD;EM/DJ,uBDVsB,EL2EjB;;AAKD;EO5FF,YAAiB;EACjB,YTmFuD,EStExD;EP8EG;IOxFA,YAAY,EACb;EPuFC;IOpFA,YAAY,EACb;EPmFC;IOhFA,YAAY,EACb;;AP+EC;EO5FF,WAAiB;EACjB,YTmFuD,EStExD;EP8EG;IOxFA,YAAY,EACb;EPuFC;IOpFA,YAAY,EACb;EPmFC;IOhFA,YAAY,EACb;;AP+EC;EO5FF,iBAAiB;EACjB,YTmFuD,EStExD;EP8EG;IOxFA,YAAY,EACb;EPuFC;IOpFA,YAAY,EACb;EPmFC;IOhFA,YAAY,EACb;;AP+EC;EO5FF,WAAiB;EACjB,YTmFuD,EStExD;EP8EG;IOxFA,YAAY,EACb;EPuFC;IOpFA,YAAY,EACb;EPmFC;IOhFA,YAAY,EACb;;AP+EC;EO5FF,WAAiB;EACjB,YTmFuD,EStExD;EP8EG;IOxFA,YAAY,EACb;EPuFC;IOpFA,YAAY,EACb;EPmFC;IOhFA,YAAY,EACb;;AP+EC;EO5FF,iBAAiB;EACjB,YTmFuD,EStExD;EP8EG;IOxFA,YAAY,EACb;EPuFC;IOpFA,YAAY,EACb;EPmFC;IOhFA,YAAY,EACb;;AP+EC;EO5FF,iBAAiB;EACjB,YTmFuD,EStExD;EP8EG;IOxFA,YAAY,EACb;EPuFC;IOpFA,YAAY,EACb;EPmFC;IOhFA,YAAY,EACb;;AP+EC;EO5FF,aAAiB;EACjB,YTmFuD,EStExD;EP8EG;IOxFA,YAAY,EACb;EPuFC;IOpFA,YAAY,EACb;EPmFC;IOhFA,YAAY,EACb;;APqFD;EEzGF,gBAAgB;EAChB,iBAAiB,EFyGmB;;AADlC;EAII,eAAe;EACf,gBAAgB,EACjB;;AAGH;EEzGF,uBADiB;EAEjB,wBAFiB,EF6G8B;;AAI7C;EMhHA,YAAY;EACZ,kBAAkB;EAClB,mBAAmB,ENgHlB;;AAGD;;;EM1GF,iBAAiB;EACjB,eAAe;EACf,gBAAgB;EAChB,YAAY,ENyGT;;AGQD;EH9DE;IItEJ,gBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,eAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,gBAHmB,ENmFd;EAMH;IM/DJ,gBDbsB,EL8EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,sBDVsB,EL2EjB;EApBD;IItEJ,WCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,UAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,WAHmB,ENmFd;EAMH;IM/DJ,uBDVsB,EL2EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,iBDVsB,EL2EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,uBDVsB,EL2EjB;EApBD;IItEJ,WCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,UAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,WAHmB,ENmFd;EAMH;IM/DJ,uBDVsB,EL2EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,iBDVsB,EL2EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,uBDVsB,EL2EjB;EApBD;IItEJ,WCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,UAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,WAHmB,ENmFd;EAMH;IM/DJ,uBDVsB,EL2EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,iBDVsB,EL2EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,uBDVsB,EL2EjB;EApBD;IItEJ,YCesB,ELyDjB;EAgBD;IM/DJ,uBDVsB,EL2EjB;EAKD;IO5FF,YAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,WAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,iBAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,WAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,WAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,iBAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,iBAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,aAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EPqFD;IEzGF,gBAAgB;IAChB,iBAAiB,EFyGmB;EADlC;IAII,eAAe;IACf,gBAAgB,EACjB;EAGH;IEzGF,wBADiB;IAEjB,yBAFiB,EF6G8B;EAI7C;IMhHA,YAAY;IACZ,kBAAkB;IAClB,mBAAmB,ENgHlB;EAGD;;;IM1GF,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,YAAY,ENyGT,EAAA;;AGQD;EH9DE;IItEJ,gBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,eAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,gBAHmB,ENmFd;EAMH;IM/DJ,gBDbsB,EL8EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,sBDVsB,EL2EjB;EApBD;IItEJ,WCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,UAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,WAHmB,ENmFd;EAMH;IM/DJ,uBDVsB,EL2EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,iBDVsB,EL2EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,uBDVsB,EL2EjB;EApBD;IItEJ,WCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,UAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,WAHmB,ENmFd;EAMH;IM/DJ,uBDVsB,EL2EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,iBDVsB,EL2EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,uBDVsB,EL2EjB;EApBD;IItEJ,WCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,UAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,WAHmB,ENmFd;EAMH;IM/DJ,uBDVsB,EL2EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,iBDVsB,EL2EjB;EApBD;IItEJ,iBCesB,ELyDjB;EAIC;IM3EJ,mBAAmB;IACnB,gBAHmB,EN+Ed;EAED;IM/EJ,mBAAmB;IACnB,iBAHmB,ENmFd;EAMH;IM/DJ,uBDVsB,EL2EjB;EApBD;IItEJ,YCesB,ELyDjB;EAgBD;IM/DJ,uBDVsB,EL2EjB;EAKD;IO5FF,YAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,WAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,iBAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,WAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,WAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,iBAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,iBAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EP+EC;IO5FF,aAAiB;IACjB,YTmFuD,EStExD;IP8EG;MOxFA,YAAY,EACb;IPuFC;MOpFA,YAAY,EACb;IPmFC;MOhFA,YAAY,EACb;EPqFD;IEzGF,gBAAgB;IAChB,iBAAiB,EFyGmB;EADlC;IAII,eAAe;IACf,gBAAgB,EACjB;EAGH;IEzGF,wBADiB;IAEjB,yBAFiB,EF6G8B;EAI7C;IMhHA,YAAY;IACZ,kBAAkB;IAClB,mBAAmB,ENgHlB;EAGD;;;IM1GF,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,YAAY,ENyGT,EAAA;;AQ6FH;;;;;;;;;;;;;;;;;;;EAmBE,UAAU;EACV,WAAW,EACZ;;AAGD;EACE,mBAAmB;EACnB,iB5B7HsB;E4B8HtB,oB5B7H0B;E4B8H1B,mC5B7HyC,E4B8H1C;;AAGD;;EAEE,mBAAmB;EACnB,qBAAqB,EACtB;;AAGD;;EAEE,kB5B1MqB;E4B2MrB,qBAAqB,EACtB;;AAGD;EACE,e5BpJiB;E4BqJjB,qBAAqB,EACtB;;AAGD;;;;;;EAME,uE5BjP0E;E4BkP1E,oB5B7NyB;E4B8NzB,mB5BzLsB;E4B0LtB,e5BtKkB;E4BuKlB,mC5BpKsC;E4BqKtC,cAAc;EACd,sB5BvKyB;E4BwKzB,iB5BzKmB,E4B+KpB;EAnBD;;;;;;IAgBI,e5BhPe;I4BiPf,eAAe,EAChB;;AAOG;EACE,kBzBrOY,EyBsOb;;AAFD;EACE,mBzBrOY,EyBsOb;;AAFD;EACE,qBzBrOY,EyBsOb;;AAFD;EACE,oBzBrOY,EyBsOb;;AAFD;EACE,qBzBrOY,EyBsOb;;AAFD;EACE,gBzBrOY,EyBsOb;;ALpKL;EKkKI;IACE,gBzBrOY,EyBsOb;EAFD;IACE,kBzBrOY,EyBsOb;EAFD;IACE,qBzBrOY,EyBsOb;EAFD;IACE,qBzBrOY,EyBsOb;EAFD;IACE,mBzBrOY,EyBsOb;EAFD;IACE,gBzBrOY,EyBsOb,EAAA;;AAMP;EACE,e5B5QuB;E4B6QvB,sB5B/KyB;E4BgLzB,qBAAqB;EACrB,gBAAgB,EAajB;EAjBD;IAQI,e5BtL0B,E4B0L3B;EAZH;IAeI,UAAU,EACX;;AAIH;EACE,iBzBjQkB;EyBkQlB,UAAU;EACV,gBAAgB;EAChB,cAAc;EACd,iC5B1RiB;E4B2RjB,eAAe;EACf,qB5BpMyB;E4BqMzB,YAAY,EACb;;AAGD;;;EAGE,iB5B3NsB;E4B4NtB,oB5B3N0B;E4B4N1B,6B5B1MyB,E4B2M1B;;AAGD;EACE,mBAAmB,EACpB;;AAGD;EACE,sB5BrNkB;E4BsNlB,qB5BpNsB,E4BqNvB;;AAGD;EACE,qB5BzNsB,E4B0NvB;;AAGD;EAEI,qB5B9N2B;E4B+N3B,iBAAiB,EAClB;;AAIH;EACE,oB5BpOyB,E4B0O1B;EAPD;IAII,sB5BrO8B;I4BsO9B,kB5B5TmB,E4B6TpB;;AAIH;EACE,iB5BnQ0B;E4BoQ1B,uCzBzTkB;EyB0TlB,+B5B/UiB,E4BqVlB;EATD;IAMI,iB5BzQoB;I4B0QpB,e5BlVa,E4BmVd;;AAIH;EACE,eAAe;EACf,qBzBrUkB;EyBsUlB,e5B1Ve,E4B+VhB;E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H;EAfA,2BCkBc;EDjBd,mCCiCe;ECgBb,iCAFiB;MAEjB,6BAFiB;UAEjB,yBAFiB;ECvBf,gDAAwC;EAAxC,wCAAwC;EAAxC,2DAAwC;EAG1C,oCAA4B;UAA5B,4BAA4B,ECR3B;;AJLH;EEmCE,qCAFiB;MAEjB,iCAFiB;UAEjB,6BAFiB,EEhBhB;;AJdH;EAlBA,2BCkBc;EDjBd,mCCiCe;ECgBb,WFhCkC;EKAlC,6BAA6B,EDE5B;;AJFH;EEgCE,WFhCqC,EIcpC;;AJbH;EAnBA,2BCkBc;EDjBd,mCCiCe;ECgBb,WF/BkC;EKDlC,6BAA6B,EDE5B;;AJDH;EE+BE,WF/BqC,EIapC;;AJVH;EAtBA,2BCkBc;EDjBd,mCCiCe;ECgBb,uDIrCY;UJqCZ,+CIrCY;EJqCZ,8BAFiB;MAEjB,0BAFiB;UAEjB,sBAFiB;EKvBf,gDAAwC;EAAxC,wCAAwC;EAAxC,2DAAwC;EACxC,WAA2B,EHN5B;;AJEH;EE4BE,oDIVsC;UJUtC,4CIVsC;ECJpC,WAA2B,EHJ5B;;AJTH;EAvBA,2BCkBc;EDjBd,mCCiCe;ECgBb,uDIpCc;UJoCd,+CIpCc;EJoCd,gCAFiB;MAEjB,4BAFiB;UAEjB,wBAFiB;EKvBf,gDAAwC;EAAxC,wCAAwC;EAAxC,2DAAwC;EACxC,WAA2B,EHN5B;;AJGH;EE2BE,oDIVsC;UJUtC,4CIVsC;ECJpC,WAA2B,EHJ5B;;AJRH;EAxBA,2BCkBc;EDjBd,mCCiCe;ECgBb,sDInCe;UJmCf,8CInCe;EJmCf,iCAFiB;MAEjB,6BAFiB;UAEjB,yBAFiB;EKvBf,gDAAwC;EAAxC,wCAAwC;EAAxC,2DAAwC;EACxC,WAA2B,EHN5B;;AJIH;EE0BE,oDIVsC;UJUtC,4CIVsC;ECJpC,WAA2B,EHJ5B;;AJPH;EAzBA,2BCkBc;EDjBd,mCCiCe;ECgBb,sDIlCa;UJkCb,8CIlCa;EJkCb,+BAFiB;MAEjB,2BAFiB;UAEjB,uBAFiB;EKvBf,gDAAwC;EAAxC,wCAAwC;EAAxC,2DAAwC;EACxC,WAA2B,EHN5B;;AJKH;EEyBE,oDIVsC;UJUtC,4CIVsC;ECJpC,WAA2B,EHJ5B;;AJNH;EA1BA,2BCkBc;EDjBd,mCCiCe;ECgBb,uDIrCY;UJqCZ,+CIrCY;EJqCZ,iCAFiB;MAEjB,6BAFiB;UAEjB,yBAFiB;EKvBf,gDAAwC;EAAxC,wCAAwC;EAAxC,2DAAwC;EACxC,WAA2B,EHN5B;;AJMH;EEwBE,oDIVsC;UJUtC,4CIVsC;ECJpC,WAA2B,EHJ5B;;AJLH;EA3BA,2BCkBc;EDjBd,mCCiCe;ECgBb,uDIpCc;UJoCd,+CIpCc;EJoCd,iCAFiB;MAEjB,6BAFiB;UAEjB,yBAFiB;EKvBf,gDAAwC;EAAxC,wCAAwC;EAAxC,2DAAwC;EACxC,WAA2B,EHN5B;;AJOH;EEuBE,oDIVsC;UJUtC,4CIVsC;ECJpC,WAA2B,EHJ5B;;AJJH;EA5BA,2BCkBc;EDjBd,mCCiCe;ECgBb,oDIRwC;UJQxC,4CIRwC;EJQxC,8BAFiB;MAEjB,0BAFiB;UAEjB,sBAFiB;EKvBf,gDAAwC;EAAxC,wCAAwC;EAAxC,2DAAwC;EACxC,WAA8B,EHN/B;;AJQH;EEsBE,uDIrCY;UJqCZ,+CIrCY;ECuBV,WAA8B,EHJ/B;;AJHH;EA7BA,2BCkBc;EDjBd,mCCiCe;ECgBb,oDIRwC;UJQxC,4CIRwC;EJQxC,gCAFiB;MAEjB,4BAFiB;UAEjB,wBAFiB;EKvBf,gDAAwC;EAAxC,wCAAwC;EAAxC,2DAAwC;EACxC,WAA8B,EHN/B;;AJSH;EEqBE,uDIpCc;UJoCd,+CIpCc;ECsBZ,WAA8B,EHJ/B;;AJFH;EA9BA,2BCkBc;EDjBd,mCCiCe;ECgBb,oDIRwC;UJQxC,4CIRwC;EJQxC,iCAFiB;MAEjB,6BAFiB;UAEjB,yBAFiB;EKvBf,gDAAwC;EAAxC,wCAAwC;EAAxC,2DAAwC;EACxC,WAA8B,EHN/B;;AJUH;EEoBE,sDInCe;UJmCf,8CInCe;ECqBb,WAA8B,EHJ/B;;AJDH;EA/BA,2BCkBc;EDjBd,mCCiCe;ECgBb,oDIRwC;UJQxC,4CIRwC;EJQxC,+BAFiB;MAEjB,2BAFiB;UAEjB,uBAFiB;EKvBf,gDAAwC;EAAxC,wCAAwC;EAAxC,2DAAwC;EACxC,WAA8B,EHN/B;;AJWH;EEmBE,sDIlCa;UJkCb,8CIlCa;ECoBX,WAA8B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;U1EkFM,aPoBsD,EOnBvD,EAAA;;A2EnFL;E/E6DI,iBlBmBkB;EkBlBlB,kBAAkB;EAClB,mBAAmB;E+E7DrB,iBAAiB,EAwBlB;EA1BD;IjF2II,aAAa;IACb,eAAe,EAKhB;EiFjJH;IjFoJI,YAAY,EACb;EiFrJH;I5EcE,YCesB;IA+BtB,YPyCyD;IOjCnD,uBAHgB;IAIhB,wBAJgB,E2EpDrB;I7EqIC;M6ElJJ;Q3EoEQ,wBAHgB;QAIhB,yBAJgB,E2EpDrB,EAAA;IAbH;M3EkFM,aPoBsD,EOnBvD;IF+DD;M6ElJJ;Q5EcE,iBCesB;QA+BtB,YPyCyD;QOjCnD,uBAHgB;QAIhB,wBAJgB;QClDpB,mBAAmB;QACnB,gBAHmB,E0EApB,EAAA;E7EqIC;I6ElJJ;M3EoEQ,wBAHgB;MAIhB,yBAJgB,E2EpDrB,EAAA;I7EqIC;Q6ElJJ;U3EkFM,aPoBsD,EOnBvD,EAAA;E2EnFL;I5EcE,YCesB;IA+BtB,YPyCyD;IOjCnD,uBAHgB;IAIhB,wBAJgB,E2ExCrB;I7EyHC;M6ElJJ;Q3EoEQ,wBAHgB;QAIhB,yBAJgB,E2ExCrB,EAAA;IAzBH;M3EkFM,aPoBsD,EOnBvD;IF+DD;M6ElJJ;Q5EcE,iBCesB;QA+BtB,YPyCyD;QOjCnD,uBAHgB;QAIhB,wBAJgB;QClDpB,mBAAmB;QACnB,iBAHmB;Q0EUjB,iBAAiB,EAEpB,EAAA;E7EyHC;I6ElJJ;M3EoEQ,wBAHgB;MAIhB,yBAJgB,E2ExCrB,EAAA;I7EyHC;Q6ElJJ;U3EkFM,aPoBsD,EOnBvD,EAAA;;A4EnFL;EhF6DI,iBlBmBkB;EkBlBlB,kBAAkB;EAClB,mBAAmB;EgF7DrB,iBAAiB,EASlB;EAXD;IlF2II,aAAa;IACb,eAAe,EAKhB;EkFjJH;IlFoJI,YAAY,EACb;EkFrJH;I7EcE,YCesB;IA+BtB,YPyCyD;IOjCnD,uBAHgB;IAIhB,wBAJgB,E4ExDrB;I9EyIC;M8ElJJ;Q5EoEQ,wBAHgB;QAIhB,yBAJgB,E4ExDrB,EAAA;IATH;M5EkFM,aPoBsD,EOnBvD;;A6EjFL;EAOE,uBAAuB;EACvB,4BAA4B;EAC5B,qBAAwB;EACxB,iBnGoEoB;EmGnEpB,mBAAmB;EACnB,iBAAiB;EACf,WAAW;EACX,kBAAkB;EAClB,uBAAuB,EA6C1B;EA5DD;IjF2DI,iBlBmBkB;IkBlBlB,kBAAkB;IAClB,mBAAmB;IiF1DrB,iBAAiB,EACjB;IAJF;MnFyII,aAAa;MACb,eAAe,EAKhB;ImF/IH;MnFkJI,YAAY,EACb;EIHC;I+EhJJ;MAmBE,uBAAuB;MACvB,4BAA4B;MAC5B,mBnGyDoB;MmGxDpB,mBnGwDoB,EmGlBrB,EAAA;EA5DD;I9EYE,iBCesB;IA+BtB,YPyCyD;IOjCnD,uBAHgB;IAIhB,wBAJgB,E6E3BtB;I/E4GE;M+EhJJ;Q7EkEQ,wBAHgB;QAIhB,yBAJgB,E6E3BtB,EAAA;IApCF;M7EgFM,aPoBsD,EOnBvD;IF+DD;M+EhJJ;Q9EYE,YCesB;QA+BtB,YPyCyD;QOjCnD,uBAHgB;QAIhB,wBAJgB;Q6E9BrB,kBAAkB,EAGnB,EAAA;E/E4GE;I+EhJJ;M7EkEQ,wBAHgB;MAIhB,yBAJgB,E6E3BtB,EAAA;I/E4GE;Q+EhJJ;U7EgFM,aPoBsD,EOnBvD,EAAA;E6EjFL;IAuCE,YAAY;IACZ,iBAAiB;IAGhB,kBAAkB,EAOnB;I/E8FE;M+EhJJ;QA+CG,oBAAoB,EAGrB,EAAA;EAlDF;IAqDE,eAAe;IACf,iBAAiB;IACjB,qBAAqB,EACrB;EAxDF;IA0Da,oBnGoBS,EmGpBmB;;AAKzC;EjFJI,iBlBmBkB;EkBlBlB,kBAAkB;EAClB,mBAAmB;EiFIrB,iBAAiB,EAYlB;EAdD;InF0EI,aAAa;IACb,eAAe,EAKhB;EmFhFH;InFmFI,YAAY,EACb;EmFpFH;I9EnDE,YCesB;IA+BtB,YPyCyD;IOjCnD,uBAHgB;IAIhB,wBAJgB,E6EYrB;I/EqEC;M+EjFJ;Q7EGQ,wBAHgB;QAIhB,yBAJgB,E6EYrB,EAAA;IAZH;M7EiBM,aPoBsD,EOnBvD;IF+DD;M+EjFJ;Q9EnDE,iBCesB;QA+BtB,YPyCyD;QOjCnD,uBAHgB;QAIhB,wBAJgB,E6EYrB,EAAA;E/EqEC;I+EjFJ;M7EGQ,wBAHgB;MAIhB,yBAJgB,E6EYrB,EAAA;I/EqEC;Q+EjFJ;U7EiBM,aPoBsD,EOnBvD,EAAA;;A6EFL;EACI,wBAAwB,EAC3B;;ACnFD;EAEI,oBAAoB,EAKnB;EAPL;IAIQ,kBAAkB;IAClB,oBAAoB,EACrB;;AANP;EASI,gBAAgB,EACjB","file":"foundation.css","sourcesContent":["@charset \"UTF-8\";\n/*\n Foundation for Sites components:\n Import the building blocks you need for your project.\n Reducing the number of imported components will optimize page speed.\n ---------------------------------------------------------------------\n The Foundation framework is built by Zurb\n Licensed under MIT Open Source\n*/\n@import url(https://fonts.googleapis.com/css?family=Raleway);\n/**\n * Foundation for Sites by ZURB\n * Version 6.2.1\n * foundation.zurb.com\n * Licensed under MIT Open Source\n */\n#wpadminbar {\n position: fixed !important; }\n\nbody.admin-bar.f-topbar-fixed .sticky.fixed {\n margin-top: 2rem; }\n\n.wp-caption {\n padding: 0.25rem; }\n\n.wp-caption img {\n max-width: 100%; }\n\np.wp-caption-text {\n font-size: 90%;\n color: #666;\n padding: 0.625rem 0; }\n\na.more-link {\n float: right; }\n\n/*!\n * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n font-family: 'FontAwesome';\n src: url(\"../fonts/fontawesome-webfont.eot?v=4.5.0\");\n src: url(\"../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0\") format(\"embedded-opentype\"), url(\"../fonts/fontawesome-webfont.woff2?v=4.5.0\") format(\"woff2\"), url(\"../fonts/fontawesome-webfont.woff?v=4.5.0\") format(\"woff\"), url(\"../fonts/fontawesome-webfont.ttf?v=4.5.0\") format(\"truetype\"), url(\"../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular\") format(\"svg\");\n font-weight: normal;\n font-style: normal; }\n\n.fa {\n display: inline-block;\n font: normal normal normal 14px / 1 FontAwesome;\n font-size: inherit;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n font-size: 1.33333em;\n line-height: 0.75em;\n vertical-align: -15%; }\n\n.fa-2x {\n font-size: 2em; }\n\n.fa-3x {\n font-size: 3em; }\n\n.fa-4x {\n font-size: 4em; }\n\n.fa-5x {\n font-size: 5em; }\n\n.fa-fw {\n width: 1.28571em;\n text-align: center; }\n\n.fa-ul {\n padding-left: 0;\n margin-left: 2.14286em;\n list-style-type: none; }\n .fa-ul > li {\n position: relative; }\n\n.fa-li {\n position: absolute;\n left: -2.14286em;\n width: 2.14286em;\n top: 0.14286em;\n text-align: center; }\n .fa-li.fa-lg {\n left: -1.85714em; }\n\n.fa-border {\n padding: .2em .25em .15em;\n border: solid 0.08em #eee;\n border-radius: .1em; }\n\n.fa-pull-left {\n float: left; }\n\n.fa-pull-right {\n float: right; }\n\n.fa.fa-pull-left {\n margin-right: .3em; }\n\n.fa.fa-pull-right {\n margin-left: .3em; }\n\n/* Deprecated as of 4.4.0 */\n.pull-right {\n float: right; }\n\n.pull-left {\n float: left; }\n\n.fa.pull-left {\n margin-right: .3em; }\n\n.fa.pull-right {\n margin-left: .3em; }\n\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg); } }\n\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg); } }\n\n.fa-rotate-90 {\n filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg); }\n\n.fa-rotate-180 {\n filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n -webkit-transform: rotate(180deg);\n -ms-transform: rotate(180deg);\n transform: rotate(180deg); }\n\n.fa-rotate-270 {\n filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n -webkit-transform: rotate(270deg);\n -ms-transform: rotate(270deg);\n transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0);\n -webkit-transform: scale(-1, 1);\n -ms-transform: scale(-1, 1);\n transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n -webkit-transform: scale(1, -1);\n -ms-transform: scale(1, -1);\n transform: scale(1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n filter: none; }\n\n.fa-stack {\n position: relative;\n display: inline-block;\n width: 2em;\n height: 2em;\n line-height: 2em;\n vertical-align: middle; }\n\n.fa-stack-1x, .fa-stack-2x {\n position: absolute;\n left: 0;\n width: 100%;\n text-align: center; }\n\n.fa-stack-1x {\n line-height: inherit; }\n\n.fa-stack-2x {\n font-size: 2em; }\n\n.fa-inverse {\n color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n readers do not read off random characters that represent icons */\n.fa-glass:before {\n content: \"\"; }\n\n.fa-music:before {\n content: \"\"; }\n\n.fa-search:before {\n content: \"\"; }\n\n.fa-envelope-o:before {\n content: \"\"; }\n\n.fa-heart:before {\n content: \"\"; }\n\n.fa-star:before {\n content: \"\"; }\n\n.fa-star-o:before {\n content: \"\"; }\n\n.fa-user:before {\n content: \"\"; }\n\n.fa-film:before {\n content: \"\"; }\n\n.fa-th-large:before {\n content: \"\"; }\n\n.fa-th:before {\n content: \"\"; }\n\n.fa-th-list:before {\n content: \"\"; }\n\n.fa-check:before {\n content: \"\"; }\n\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n content: \"\"; }\n\n.fa-search-plus:before {\n content: \"\"; }\n\n.fa-search-minus:before {\n content: \"\"; }\n\n.fa-power-off:before {\n content: \"\"; }\n\n.fa-signal:before {\n content: \"\"; }\n\n.fa-gear:before,\n.fa-cog:before {\n content: \"\"; }\n\n.fa-trash-o:before {\n content: \"\"; }\n\n.fa-home:before {\n content: \"\"; }\n\n.fa-file-o:before {\n content: \"\"; }\n\n.fa-clock-o:before {\n content: \"\"; }\n\n.fa-road:before {\n content: \"\"; }\n\n.fa-download:before {\n content: \"\"; }\n\n.fa-arrow-circle-o-down:before {\n content: \"\"; }\n\n.fa-arrow-circle-o-up:before {\n content: \"\"; }\n\n.fa-inbox:before {\n content: \"\"; }\n\n.fa-play-circle-o:before {\n content: \"\"; }\n\n.fa-rotate-right:before,\n.fa-repeat:before {\n content: \"\"; }\n\n.fa-refresh:before {\n content: \"\"; }\n\n.fa-list-alt:before {\n content: \"\"; }\n\n.fa-lock:before {\n content: \"\"; }\n\n.fa-flag:before {\n content: \"\"; }\n\n.fa-headphones:before {\n content: \"\"; }\n\n.fa-volume-off:before {\n content: \"\"; }\n\n.fa-volume-down:before {\n content: \"\"; }\n\n.fa-volume-up:before {\n content: \"\"; }\n\n.fa-qrcode:before {\n content: \"\"; }\n\n.fa-barcode:before {\n content: \"\"; }\n\n.fa-tag:before {\n content: \"\"; }\n\n.fa-tags:before {\n content: \"\"; }\n\n.fa-book:before {\n content: \"\"; }\n\n.fa-bookmark:before {\n content: \"\"; }\n\n.fa-print:before {\n content: \"\"; }\n\n.fa-camera:before {\n content: \"\"; }\n\n.fa-font:before {\n content: \"\"; }\n\n.fa-bold:before {\n content: \"\"; }\n\n.fa-italic:before {\n content: \"\"; }\n\n.fa-text-height:before {\n content: \"\"; }\n\n.fa-text-width:before {\n content: \"\"; }\n\n.fa-align-left:before {\n content: \"\"; }\n\n.fa-align-center:before {\n content: \"\"; }\n\n.fa-align-right:before {\n content: \"\"; }\n\n.fa-align-justify:before {\n content: \"\"; }\n\n.fa-list:before {\n content: \"\"; }\n\n.fa-dedent:before,\n.fa-outdent:before {\n content: \"\"; }\n\n.fa-indent:before {\n content: \"\"; }\n\n.fa-video-camera:before {\n content: \"\"; }\n\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n content: \"\"; }\n\n.fa-pencil:before {\n content: \"\"; }\n\n.fa-map-marker:before {\n content: \"\"; }\n\n.fa-adjust:before {\n content: \"\"; }\n\n.fa-tint:before {\n content: \"\"; }\n\n.fa-edit:before,\n.fa-pencil-square-o:before {\n content: \"\"; }\n\n.fa-share-square-o:before {\n content: \"\"; }\n\n.fa-check-square-o:before {\n content: \"\"; }\n\n.fa-arrows:before {\n content: \"\"; }\n\n.fa-step-backward:before {\n content: \"\"; }\n\n.fa-fast-backward:before {\n content: \"\"; }\n\n.fa-backward:before {\n content: \"\"; }\n\n.fa-play:before {\n content: \"\"; }\n\n.fa-pause:before {\n content: \"\"; }\n\n.fa-stop:before {\n content: \"\"; }\n\n.fa-forward:before {\n content: \"\"; }\n\n.fa-fast-forward:before {\n content: \"\"; }\n\n.fa-step-forward:before {\n content: \"\"; }\n\n.fa-eject:before {\n content: \"\"; }\n\n.fa-chevron-left:before {\n content: \"\"; }\n\n.fa-chevron-right:before {\n content: \"\"; }\n\n.fa-plus-circle:before {\n content: \"\"; }\n\n.fa-minus-circle:before {\n content: \"\"; }\n\n.fa-times-circle:before {\n content: \"\"; }\n\n.fa-check-circle:before {\n content: \"\"; }\n\n.fa-question-circle:before {\n content: \"\"; }\n\n.fa-info-circle:before {\n content: \"\"; }\n\n.fa-crosshairs:before {\n content: \"\"; }\n\n.fa-times-circle-o:before {\n content: \"\"; }\n\n.fa-check-circle-o:before {\n content: \"\"; }\n\n.fa-ban:before {\n content: \"\"; }\n\n.fa-arrow-left:before {\n content: \"\"; }\n\n.fa-arrow-right:before {\n content: \"\"; }\n\n.fa-arrow-up:before {\n content: \"\"; }\n\n.fa-arrow-down:before {\n content: \"\"; }\n\n.fa-mail-forward:before,\n.fa-share:before {\n content: \"\"; }\n\n.fa-expand:before {\n content: \"\"; }\n\n.fa-compress:before {\n content: \"\"; }\n\n.fa-plus:before {\n content: \"\"; }\n\n.fa-minus:before {\n content: \"\"; }\n\n.fa-asterisk:before {\n content: \"\"; }\n\n.fa-exclamation-circle:before {\n content: \"\"; }\n\n.fa-gift:before {\n content: \"\"; }\n\n.fa-leaf:before {\n content: \"\"; }\n\n.fa-fire:before {\n content: \"\"; }\n\n.fa-eye:before {\n content: \"\"; }\n\n.fa-eye-slash:before {\n content: \"\"; }\n\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n content: \"\"; }\n\n.fa-plane:before {\n content: \"\"; }\n\n.fa-calendar:before {\n content: \"\"; }\n\n.fa-random:before {\n content: \"\"; }\n\n.fa-comment:before {\n content: \"\"; }\n\n.fa-magnet:before {\n content: \"\"; }\n\n.fa-chevron-up:before {\n content: \"\"; }\n\n.fa-chevron-down:before {\n content: \"\"; }\n\n.fa-retweet:before {\n content: \"\"; }\n\n.fa-shopping-cart:before {\n content: \"\"; }\n\n.fa-folder:before {\n content: \"\"; }\n\n.fa-folder-open:before {\n content: \"\"; }\n\n.fa-arrows-v:before {\n content: \"\"; }\n\n.fa-arrows-h:before {\n content: \"\"; }\n\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n content: \"\"; }\n\n.fa-twitter-square:before {\n content: \"\"; }\n\n.fa-facebook-square:before {\n content: \"\"; }\n\n.fa-camera-retro:before {\n content: \"\"; }\n\n.fa-key:before {\n content: \"\"; }\n\n.fa-gears:before,\n.fa-cogs:before {\n content: \"\"; }\n\n.fa-comments:before {\n content: \"\"; }\n\n.fa-thumbs-o-up:before {\n content: \"\"; }\n\n.fa-thumbs-o-down:before {\n content: \"\"; }\n\n.fa-star-half:before {\n content: \"\"; }\n\n.fa-heart-o:before {\n content: \"\"; }\n\n.fa-sign-out:before {\n content: \"\"; }\n\n.fa-linkedin-square:before {\n content: \"\"; }\n\n.fa-thumb-tack:before {\n content: \"\"; }\n\n.fa-external-link:before {\n content: \"\"; }\n\n.fa-sign-in:before {\n content: \"\"; }\n\n.fa-trophy:before {\n content: \"\"; }\n\n.fa-github-square:before {\n content: \"\"; }\n\n.fa-upload:before {\n content: \"\"; }\n\n.fa-lemon-o:before {\n content: \"\"; }\n\n.fa-phone:before {\n content: \"\"; }\n\n.fa-square-o:before {\n content: \"\"; }\n\n.fa-bookmark-o:before {\n content: \"\"; }\n\n.fa-phone-square:before {\n content: \"\"; }\n\n.fa-twitter:before {\n content: \"\"; }\n\n.fa-facebook-f:before,\n.fa-facebook:before {\n content: \"\"; }\n\n.fa-github:before {\n content: \"\"; }\n\n.fa-unlock:before {\n content: \"\"; }\n\n.fa-credit-card:before {\n content: \"\"; }\n\n.fa-feed:before,\n.fa-rss:before {\n content: \"\"; }\n\n.fa-hdd-o:before {\n content: \"\"; }\n\n.fa-bullhorn:before {\n content: \"\"; }\n\n.fa-bell:before {\n content: \"\"; }\n\n.fa-certificate:before {\n content: \"\"; }\n\n.fa-hand-o-right:before {\n content: \"\"; }\n\n.fa-hand-o-left:before {\n content: \"\"; }\n\n.fa-hand-o-up:before {\n content: \"\"; }\n\n.fa-hand-o-down:before {\n content: \"\"; }\n\n.fa-arrow-circle-left:before {\n content: \"\"; }\n\n.fa-arrow-circle-right:before {\n content: \"\"; }\n\n.fa-arrow-circle-up:before {\n content: \"\"; }\n\n.fa-arrow-circle-down:before {\n content: \"\"; }\n\n.fa-globe:before {\n content: \"\"; }\n\n.fa-wrench:before {\n content: \"\"; }\n\n.fa-tasks:before {\n content: \"\"; }\n\n.fa-filter:before {\n content: \"\"; }\n\n.fa-briefcase:before {\n content: \"\"; }\n\n.fa-arrows-alt:before {\n content: \"\"; }\n\n.fa-group:before,\n.fa-users:before {\n content: \"\"; }\n\n.fa-chain:before,\n.fa-link:before {\n content: \"\"; }\n\n.fa-cloud:before {\n content: \"\"; }\n\n.fa-flask:before {\n content: \"\"; }\n\n.fa-cut:before,\n.fa-scissors:before {\n content: \"\"; }\n\n.fa-copy:before,\n.fa-files-o:before {\n content: \"\"; }\n\n.fa-paperclip:before {\n content: \"\"; }\n\n.fa-save:before,\n.fa-floppy-o:before {\n content: \"\"; }\n\n.fa-square:before {\n content: \"\"; }\n\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n content: \"\"; }\n\n.fa-list-ul:before {\n content: \"\"; }\n\n.fa-list-ol:before {\n content: \"\"; }\n\n.fa-strikethrough:before {\n content: \"\"; }\n\n.fa-underline:before {\n content: \"\"; }\n\n.fa-table:before {\n content: \"\"; }\n\n.fa-magic:before {\n content: \"\"; }\n\n.fa-truck:before {\n content: \"\"; }\n\n.fa-pinterest:before {\n content: \"\"; }\n\n.fa-pinterest-square:before {\n content: \"\"; }\n\n.fa-google-plus-square:before {\n content: \"\"; }\n\n.fa-google-plus:before {\n content: \"\"; }\n\n.fa-money:before {\n content: \"\"; }\n\n.fa-caret-down:before {\n content: \"\"; }\n\n.fa-caret-up:before {\n content: \"\"; }\n\n.fa-caret-left:before {\n content: \"\"; }\n\n.fa-caret-right:before {\n content: \"\"; }\n\n.fa-columns:before {\n content: \"\"; }\n\n.fa-unsorted:before,\n.fa-sort:before {\n content: \"\"; }\n\n.fa-sort-down:before,\n.fa-sort-desc:before {\n content: \"\"; }\n\n.fa-sort-up:before,\n.fa-sort-asc:before {\n content: \"\"; }\n\n.fa-envelope:before {\n content: \"\"; }\n\n.fa-linkedin:before {\n content: \"\"; }\n\n.fa-rotate-left:before,\n.fa-undo:before {\n content: \"\"; }\n\n.fa-legal:before,\n.fa-gavel:before {\n content: \"\"; }\n\n.fa-dashboard:before,\n.fa-tachometer:before {\n content: \"\"; }\n\n.fa-comment-o:before {\n content: \"\"; }\n\n.fa-comments-o:before {\n content: \"\"; }\n\n.fa-flash:before,\n.fa-bolt:before {\n content: \"\"; }\n\n.fa-sitemap:before {\n content: \"\"; }\n\n.fa-umbrella:before {\n content: \"\"; }\n\n.fa-paste:before,\n.fa-clipboard:before {\n content: \"\"; }\n\n.fa-lightbulb-o:before {\n content: \"\"; }\n\n.fa-exchange:before {\n content: \"\"; }\n\n.fa-cloud-download:before {\n content: \"\"; }\n\n.fa-cloud-upload:before {\n content: \"\"; }\n\n.fa-user-md:before {\n content: \"\"; }\n\n.fa-stethoscope:before {\n content: \"\"; }\n\n.fa-suitcase:before {\n content: \"\"; }\n\n.fa-bell-o:before {\n content: \"\"; }\n\n.fa-coffee:before {\n content: \"\"; }\n\n.fa-cutlery:before {\n content: \"\"; }\n\n.fa-file-text-o:before {\n content: \"\"; }\n\n.fa-building-o:before {\n content: \"\"; }\n\n.fa-hospital-o:before {\n content: \"\"; }\n\n.fa-ambulance:before {\n content: \"\"; }\n\n.fa-medkit:before {\n content: \"\"; }\n\n.fa-fighter-jet:before {\n content: \"\"; }\n\n.fa-beer:before {\n content: \"\"; }\n\n.fa-h-square:before {\n content: \"\"; }\n\n.fa-plus-square:before {\n content: \"\"; }\n\n.fa-angle-double-left:before {\n content: \"\"; }\n\n.fa-angle-double-right:before {\n content: \"\"; }\n\n.fa-angle-double-up:before {\n content: \"\"; }\n\n.fa-angle-double-down:before {\n content: \"\"; }\n\n.fa-angle-left:before {\n content: \"\"; }\n\n.fa-angle-right:before {\n content: \"\"; }\n\n.fa-angle-up:before {\n content: \"\"; }\n\n.fa-angle-down:before {\n content: \"\"; }\n\n.fa-desktop:before {\n content: \"\"; }\n\n.fa-laptop:before {\n content: \"\"; }\n\n.fa-tablet:before {\n content: \"\"; }\n\n.fa-mobile-phone:before,\n.fa-mobile:before {\n content: \"\"; }\n\n.fa-circle-o:before {\n content: \"\"; }\n\n.fa-quote-left:before {\n content: \"\"; }\n\n.fa-quote-right:before {\n content: \"\"; }\n\n.fa-spinner:before {\n content: \"\"; }\n\n.fa-circle:before {\n content: \"\"; }\n\n.fa-mail-reply:before,\n.fa-reply:before {\n content: \"\"; }\n\n.fa-github-alt:before {\n content: \"\"; }\n\n.fa-folder-o:before {\n content: \"\"; }\n\n.fa-folder-open-o:before {\n content: \"\"; }\n\n.fa-smile-o:before {\n content: \"\"; }\n\n.fa-frown-o:before {\n content: \"\"; }\n\n.fa-meh-o:before {\n content: \"\"; }\n\n.fa-gamepad:before {\n content: \"\"; }\n\n.fa-keyboard-o:before {\n content: \"\"; }\n\n.fa-flag-o:before {\n content: \"\"; }\n\n.fa-flag-checkered:before {\n content: \"\"; }\n\n.fa-terminal:before {\n content: \"\"; }\n\n.fa-code:before {\n content: \"\"; }\n\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n content: \"\"; }\n\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n content: \"\"; }\n\n.fa-location-arrow:before {\n content: \"\"; }\n\n.fa-crop:before {\n content: \"\"; }\n\n.fa-code-fork:before {\n content: \"\"; }\n\n.fa-unlink:before,\n.fa-chain-broken:before {\n content: \"\"; }\n\n.fa-question:before {\n content: \"\"; }\n\n.fa-info:before {\n content: \"\"; }\n\n.fa-exclamation:before {\n content: \"\"; }\n\n.fa-superscript:before {\n content: \"\"; }\n\n.fa-subscript:before {\n content: \"\"; }\n\n.fa-eraser:before {\n content: \"\"; }\n\n.fa-puzzle-piece:before {\n content: \"\"; }\n\n.fa-microphone:before {\n content: \"\"; }\n\n.fa-microphone-slash:before {\n content: \"\"; }\n\n.fa-shield:before {\n content: \"\"; }\n\n.fa-calendar-o:before {\n content: \"\"; }\n\n.fa-fire-extinguisher:before {\n content: \"\"; }\n\n.fa-rocket:before {\n content: \"\"; }\n\n.fa-maxcdn:before {\n content: \"\"; }\n\n.fa-chevron-circle-left:before {\n content: \"\"; }\n\n.fa-chevron-circle-right:before {\n content: \"\"; }\n\n.fa-chevron-circle-up:before {\n content: \"\"; }\n\n.fa-chevron-circle-down:before {\n content: \"\"; }\n\n.fa-html5:before {\n content: \"\"; }\n\n.fa-css3:before {\n content: \"\"; }\n\n.fa-anchor:before {\n content: \"\"; }\n\n.fa-unlock-alt:before {\n content: \"\"; }\n\n.fa-bullseye:before {\n content: \"\"; }\n\n.fa-ellipsis-h:before {\n content: \"\"; }\n\n.fa-ellipsis-v:before {\n content: \"\"; }\n\n.fa-rss-square:before {\n content: \"\"; }\n\n.fa-play-circle:before {\n content: \"\"; }\n\n.fa-ticket:before {\n content: \"\"; }\n\n.fa-minus-square:before {\n content: \"\"; }\n\n.fa-minus-square-o:before {\n content: \"\"; }\n\n.fa-level-up:before {\n content: \"\"; }\n\n.fa-level-down:before {\n content: \"\"; }\n\n.fa-check-square:before {\n content: \"\"; }\n\n.fa-pencil-square:before {\n content: \"\"; }\n\n.fa-external-link-square:before {\n content: \"\"; }\n\n.fa-share-square:before {\n content: \"\"; }\n\n.fa-compass:before {\n content: \"\"; }\n\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n content: \"\"; }\n\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n content: \"\"; }\n\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n content: \"\"; }\n\n.fa-euro:before,\n.fa-eur:before {\n content: \"\"; }\n\n.fa-gbp:before {\n content: \"\"; }\n\n.fa-dollar:before,\n.fa-usd:before {\n content: \"\"; }\n\n.fa-rupee:before,\n.fa-inr:before {\n content: \"\"; }\n\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n content: \"\"; }\n\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n content: \"\"; }\n\n.fa-won:before,\n.fa-krw:before {\n content: \"\"; }\n\n.fa-bitcoin:before,\n.fa-btc:before {\n content: \"\"; }\n\n.fa-file:before {\n content: \"\"; }\n\n.fa-file-text:before {\n content: \"\"; }\n\n.fa-sort-alpha-asc:before {\n content: \"\"; }\n\n.fa-sort-alpha-desc:before {\n content: \"\"; }\n\n.fa-sort-amount-asc:before {\n content: \"\"; }\n\n.fa-sort-amount-desc:before {\n content: \"\"; }\n\n.fa-sort-numeric-asc:before {\n content: \"\"; }\n\n.fa-sort-numeric-desc:before {\n content: \"\"; }\n\n.fa-thumbs-up:before {\n content: \"\"; }\n\n.fa-thumbs-down:before {\n content: \"\"; }\n\n.fa-youtube-square:before {\n content: \"\"; }\n\n.fa-youtube:before {\n content: \"\"; }\n\n.fa-xing:before {\n content: \"\"; }\n\n.fa-xing-square:before {\n content: \"\"; }\n\n.fa-youtube-play:before {\n content: \"\"; }\n\n.fa-dropbox:before {\n content: \"\"; }\n\n.fa-stack-overflow:before {\n content: \"\"; }\n\n.fa-instagram:before {\n content: \"\"; }\n\n.fa-flickr:before {\n content: \"\"; }\n\n.fa-adn:before {\n content: \"\"; }\n\n.fa-bitbucket:before {\n content: \"\"; }\n\n.fa-bitbucket-square:before {\n content: \"\"; }\n\n.fa-tumblr:before {\n content: \"\"; }\n\n.fa-tumblr-square:before {\n content: \"\"; }\n\n.fa-long-arrow-down:before {\n content: \"\"; }\n\n.fa-long-arrow-up:before {\n content: \"\"; }\n\n.fa-long-arrow-left:before {\n content: \"\"; }\n\n.fa-long-arrow-right:before {\n content: \"\"; }\n\n.fa-apple:before {\n content: \"\"; }\n\n.fa-windows:before {\n content: \"\"; }\n\n.fa-android:before {\n content: \"\"; }\n\n.fa-linux:before {\n content: \"\"; }\n\n.fa-dribbble:before {\n content: \"\"; }\n\n.fa-skype:before {\n content: \"\"; }\n\n.fa-foursquare:before {\n content: \"\"; }\n\n.fa-trello:before {\n content: \"\"; }\n\n.fa-female:before {\n content: \"\"; }\n\n.fa-male:before {\n content: \"\"; }\n\n.fa-gittip:before,\n.fa-gratipay:before {\n content: \"\"; }\n\n.fa-sun-o:before {\n content: \"\"; }\n\n.fa-moon-o:before {\n content: \"\"; }\n\n.fa-archive:before {\n content: \"\"; }\n\n.fa-bug:before {\n content: \"\"; }\n\n.fa-vk:before {\n content: \"\"; }\n\n.fa-weibo:before {\n content: \"\"; }\n\n.fa-renren:before {\n content: \"\"; }\n\n.fa-pagelines:before {\n content: \"\"; }\n\n.fa-stack-exchange:before {\n content: \"\"; }\n\n.fa-arrow-circle-o-right:before {\n content: \"\"; }\n\n.fa-arrow-circle-o-left:before {\n content: \"\"; }\n\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n content: \"\"; }\n\n.fa-dot-circle-o:before {\n content: \"\"; }\n\n.fa-wheelchair:before {\n content: \"\"; }\n\n.fa-vimeo-square:before {\n content: \"\"; }\n\n.fa-turkish-lira:before,\n.fa-try:before {\n content: \"\"; }\n\n.fa-plus-square-o:before {\n content: \"\"; }\n\n.fa-space-shuttle:before {\n content: \"\"; }\n\n.fa-slack:before {\n content: \"\"; }\n\n.fa-envelope-square:before {\n content: \"\"; }\n\n.fa-wordpress:before {\n content: \"\"; }\n\n.fa-openid:before {\n content: \"\"; }\n\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n content: \"\"; }\n\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n content: \"\"; }\n\n.fa-yahoo:before {\n content: \"\"; }\n\n.fa-google:before {\n content: \"\"; }\n\n.fa-reddit:before {\n content: \"\"; }\n\n.fa-reddit-square:before {\n content: \"\"; }\n\n.fa-stumbleupon-circle:before {\n content: \"\"; }\n\n.fa-stumbleupon:before {\n content: \"\"; }\n\n.fa-delicious:before {\n content: \"\"; }\n\n.fa-digg:before {\n content: \"\"; }\n\n.fa-pied-piper:before {\n content: \"\"; }\n\n.fa-pied-piper-alt:before {\n content: \"\"; }\n\n.fa-drupal:before {\n content: \"\"; }\n\n.fa-joomla:before {\n content: \"\"; }\n\n.fa-language:before {\n content: \"\"; }\n\n.fa-fax:before {\n content: \"\"; }\n\n.fa-building:before {\n content: \"\"; }\n\n.fa-child:before {\n content: \"\"; }\n\n.fa-paw:before {\n content: \"\"; }\n\n.fa-spoon:before {\n content: \"\"; }\n\n.fa-cube:before {\n content: \"\"; }\n\n.fa-cubes:before {\n content: \"\"; }\n\n.fa-behance:before {\n content: \"\"; }\n\n.fa-behance-square:before {\n content: \"\"; }\n\n.fa-steam:before {\n content: \"\"; }\n\n.fa-steam-square:before {\n content: \"\"; }\n\n.fa-recycle:before {\n content: \"\"; }\n\n.fa-automobile:before,\n.fa-car:before {\n content: \"\"; }\n\n.fa-cab:before,\n.fa-taxi:before {\n content: \"\"; }\n\n.fa-tree:before {\n content: \"\"; }\n\n.fa-spotify:before {\n content: \"\"; }\n\n.fa-deviantart:before {\n content: \"\"; }\n\n.fa-soundcloud:before {\n content: \"\"; }\n\n.fa-database:before {\n content: \"\"; }\n\n.fa-file-pdf-o:before {\n content: \"\"; }\n\n.fa-file-word-o:before {\n content: \"\"; }\n\n.fa-file-excel-o:before {\n content: \"\"; }\n\n.fa-file-powerpoint-o:before {\n content: \"\"; }\n\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n content: \"\"; }\n\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n content: \"\"; }\n\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n content: \"\"; }\n\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n content: \"\"; }\n\n.fa-file-code-o:before {\n content: \"\"; }\n\n.fa-vine:before {\n content: \"\"; }\n\n.fa-codepen:before {\n content: \"\"; }\n\n.fa-jsfiddle:before {\n content: \"\"; }\n\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n content: \"\"; }\n\n.fa-circle-o-notch:before {\n content: \"\"; }\n\n.fa-ra:before,\n.fa-rebel:before {\n content: \"\"; }\n\n.fa-ge:before,\n.fa-empire:before {\n content: \"\"; }\n\n.fa-git-square:before {\n content: \"\"; }\n\n.fa-git:before {\n content: \"\"; }\n\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n content: \"\"; }\n\n.fa-tencent-weibo:before {\n content: \"\"; }\n\n.fa-qq:before {\n content: \"\"; }\n\n.fa-wechat:before,\n.fa-weixin:before {\n content: \"\"; }\n\n.fa-send:before,\n.fa-paper-plane:before {\n content: \"\"; }\n\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n content: \"\"; }\n\n.fa-history:before {\n content: \"\"; }\n\n.fa-circle-thin:before {\n content: \"\"; }\n\n.fa-header:before {\n content: \"\"; }\n\n.fa-paragraph:before {\n content: \"\"; }\n\n.fa-sliders:before {\n content: \"\"; }\n\n.fa-share-alt:before {\n content: \"\"; }\n\n.fa-share-alt-square:before {\n content: \"\"; }\n\n.fa-bomb:before {\n content: \"\"; }\n\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n content: \"\"; }\n\n.fa-tty:before {\n content: \"\"; }\n\n.fa-binoculars:before {\n content: \"\"; }\n\n.fa-plug:before {\n content: \"\"; }\n\n.fa-slideshare:before {\n content: \"\"; }\n\n.fa-twitch:before {\n content: \"\"; }\n\n.fa-yelp:before {\n content: \"\"; }\n\n.fa-newspaper-o:before {\n content: \"\"; }\n\n.fa-wifi:before {\n content: \"\"; }\n\n.fa-calculator:before {\n content: \"\"; }\n\n.fa-paypal:before {\n content: \"\"; }\n\n.fa-google-wallet:before {\n content: \"\"; }\n\n.fa-cc-visa:before {\n content: \"\"; }\n\n.fa-cc-mastercard:before {\n content: \"\"; }\n\n.fa-cc-discover:before {\n content: \"\"; }\n\n.fa-cc-amex:before {\n content: \"\"; }\n\n.fa-cc-paypal:before {\n content: \"\"; }\n\n.fa-cc-stripe:before {\n content: \"\"; }\n\n.fa-bell-slash:before {\n content: \"\"; }\n\n.fa-bell-slash-o:before {\n content: \"\"; }\n\n.fa-trash:before {\n content: \"\"; }\n\n.fa-copyright:before {\n content: \"\"; }\n\n.fa-at:before {\n content: \"\"; }\n\n.fa-eyedropper:before {\n content: \"\"; }\n\n.fa-paint-brush:before {\n content: \"\"; }\n\n.fa-birthday-cake:before {\n content: \"\"; }\n\n.fa-area-chart:before {\n content: \"\"; }\n\n.fa-pie-chart:before {\n content: \"\"; }\n\n.fa-line-chart:before {\n content: \"\"; }\n\n.fa-lastfm:before {\n content: \"\"; }\n\n.fa-lastfm-square:before {\n content: \"\"; }\n\n.fa-toggle-off:before {\n content: \"\"; }\n\n.fa-toggle-on:before {\n content: \"\"; }\n\n.fa-bicycle:before {\n content: \"\"; }\n\n.fa-bus:before {\n content: \"\"; }\n\n.fa-ioxhost:before {\n content: \"\"; }\n\n.fa-angellist:before {\n content: \"\"; }\n\n.fa-cc:before {\n content: \"\"; }\n\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n content: \"\"; }\n\n.fa-meanpath:before {\n content: \"\"; }\n\n.fa-buysellads:before {\n content: \"\"; }\n\n.fa-connectdevelop:before {\n content: \"\"; }\n\n.fa-dashcube:before {\n content: \"\"; }\n\n.fa-forumbee:before {\n content: \"\"; }\n\n.fa-leanpub:before {\n content: \"\"; }\n\n.fa-sellsy:before {\n content: \"\"; }\n\n.fa-shirtsinbulk:before {\n content: \"\"; }\n\n.fa-simplybuilt:before {\n content: \"\"; }\n\n.fa-skyatlas:before {\n content: \"\"; }\n\n.fa-cart-plus:before {\n content: \"\"; }\n\n.fa-cart-arrow-down:before {\n content: \"\"; }\n\n.fa-diamond:before {\n content: \"\"; }\n\n.fa-ship:before {\n content: \"\"; }\n\n.fa-user-secret:before {\n content: \"\"; }\n\n.fa-motorcycle:before {\n content: \"\"; }\n\n.fa-street-view:before {\n content: \"\"; }\n\n.fa-heartbeat:before {\n content: \"\"; }\n\n.fa-venus:before {\n content: \"\"; }\n\n.fa-mars:before {\n content: \"\"; }\n\n.fa-mercury:before {\n content: \"\"; }\n\n.fa-intersex:before,\n.fa-transgender:before {\n content: \"\"; }\n\n.fa-transgender-alt:before {\n content: \"\"; }\n\n.fa-venus-double:before {\n content: \"\"; }\n\n.fa-mars-double:before {\n content: \"\"; }\n\n.fa-venus-mars:before {\n content: \"\"; }\n\n.fa-mars-stroke:before {\n content: \"\"; }\n\n.fa-mars-stroke-v:before {\n content: \"\"; }\n\n.fa-mars-stroke-h:before {\n content: \"\"; }\n\n.fa-neuter:before {\n content: \"\"; }\n\n.fa-genderless:before {\n content: \"\"; }\n\n.fa-facebook-official:before {\n content: \"\"; }\n\n.fa-pinterest-p:before {\n content: \"\"; }\n\n.fa-whatsapp:before {\n content: \"\"; }\n\n.fa-server:before {\n content: \"\"; }\n\n.fa-user-plus:before {\n content: \"\"; }\n\n.fa-user-times:before {\n content: \"\"; }\n\n.fa-hotel:before,\n.fa-bed:before {\n content: \"\"; }\n\n.fa-viacoin:before {\n content: \"\"; }\n\n.fa-train:before {\n content: \"\"; }\n\n.fa-subway:before {\n content: \"\"; }\n\n.fa-medium:before {\n content: \"\"; }\n\n.fa-yc:before,\n.fa-y-combinator:before {\n content: \"\"; }\n\n.fa-optin-monster:before {\n content: \"\"; }\n\n.fa-opencart:before {\n content: \"\"; }\n\n.fa-expeditedssl:before {\n content: \"\"; }\n\n.fa-battery-4:before,\n.fa-battery-full:before {\n content: \"\"; }\n\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n content: \"\"; }\n\n.fa-battery-2:before,\n.fa-battery-half:before {\n content: \"\"; }\n\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n content: \"\"; }\n\n.fa-battery-0:before,\n.fa-battery-empty:before {\n content: \"\"; }\n\n.fa-mouse-pointer:before {\n content: \"\"; }\n\n.fa-i-cursor:before {\n content: \"\"; }\n\n.fa-object-group:before {\n content: \"\"; }\n\n.fa-object-ungroup:before {\n content: \"\"; }\n\n.fa-sticky-note:before {\n content: \"\"; }\n\n.fa-sticky-note-o:before {\n content: \"\"; }\n\n.fa-cc-jcb:before {\n content: \"\"; }\n\n.fa-cc-diners-club:before {\n content: \"\"; }\n\n.fa-clone:before {\n content: \"\"; }\n\n.fa-balance-scale:before {\n content: \"\"; }\n\n.fa-hourglass-o:before {\n content: \"\"; }\n\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n content: \"\"; }\n\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n content: \"\"; }\n\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n content: \"\"; }\n\n.fa-hourglass:before {\n content: \"\"; }\n\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n content: \"\"; }\n\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n content: \"\"; }\n\n.fa-hand-scissors-o:before {\n content: \"\"; }\n\n.fa-hand-lizard-o:before {\n content: \"\"; }\n\n.fa-hand-spock-o:before {\n content: \"\"; }\n\n.fa-hand-pointer-o:before {\n content: \"\"; }\n\n.fa-hand-peace-o:before {\n content: \"\"; }\n\n.fa-trademark:before {\n content: \"\"; }\n\n.fa-registered:before {\n content: \"\"; }\n\n.fa-creative-commons:before {\n content: \"\"; }\n\n.fa-gg:before {\n content: \"\"; }\n\n.fa-gg-circle:before {\n content: \"\"; }\n\n.fa-tripadvisor:before {\n content: \"\"; }\n\n.fa-odnoklassniki:before {\n content: \"\"; }\n\n.fa-odnoklassniki-square:before {\n content: \"\"; }\n\n.fa-get-pocket:before {\n content: \"\"; }\n\n.fa-wikipedia-w:before {\n content: \"\"; }\n\n.fa-safari:before {\n content: \"\"; }\n\n.fa-chrome:before {\n content: \"\"; }\n\n.fa-firefox:before {\n content: \"\"; }\n\n.fa-opera:before {\n content: \"\"; }\n\n.fa-internet-explorer:before {\n content: \"\"; }\n\n.fa-tv:before,\n.fa-television:before {\n content: \"\"; }\n\n.fa-contao:before {\n content: \"\"; }\n\n.fa-500px:before {\n content: \"\"; }\n\n.fa-amazon:before {\n content: \"\"; }\n\n.fa-calendar-plus-o:before {\n content: \"\"; }\n\n.fa-calendar-minus-o:before {\n content: \"\"; }\n\n.fa-calendar-times-o:before {\n content: \"\"; }\n\n.fa-calendar-check-o:before {\n content: \"\"; }\n\n.fa-industry:before {\n content: \"\"; }\n\n.fa-map-pin:before {\n content: \"\"; }\n\n.fa-map-signs:before {\n content: \"\"; }\n\n.fa-map-o:before {\n content: \"\"; }\n\n.fa-map:before {\n content: \"\"; }\n\n.fa-commenting:before {\n content: \"\"; }\n\n.fa-commenting-o:before {\n content: \"\"; }\n\n.fa-houzz:before {\n content: \"\"; }\n\n.fa-vimeo:before {\n content: \"\"; }\n\n.fa-black-tie:before {\n content: \"\"; }\n\n.fa-fonticons:before {\n content: \"\"; }\n\n.fa-reddit-alien:before {\n content: \"\"; }\n\n.fa-edge:before {\n content: \"\"; }\n\n.fa-credit-card-alt:before {\n content: \"\"; }\n\n.fa-codiepie:before {\n content: \"\"; }\n\n.fa-modx:before {\n content: \"\"; }\n\n.fa-fort-awesome:before {\n content: \"\"; }\n\n.fa-usb:before {\n content: \"\"; }\n\n.fa-product-hunt:before {\n content: \"\"; }\n\n.fa-mixcloud:before {\n content: \"\"; }\n\n.fa-scribd:before {\n content: \"\"; }\n\n.fa-pause-circle:before {\n content: \"\"; }\n\n.fa-pause-circle-o:before {\n content: \"\"; }\n\n.fa-stop-circle:before {\n content: \"\"; }\n\n.fa-stop-circle-o:before {\n content: \"\"; }\n\n.fa-shopping-bag:before {\n content: \"\"; }\n\n.fa-shopping-basket:before {\n content: \"\"; }\n\n.fa-hashtag:before {\n content: \"\"; }\n\n.fa-bluetooth:before {\n content: \"\"; }\n\n.fa-bluetooth-b:before {\n content: \"\"; }\n\n.fa-percent:before {\n content: \"\"; }\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS and IE text size adjust after device orientation change,\n * without disabling user zoom.\n */\nhtml {\n font-family: sans-serif;\n /* 1 */\n -ms-text-size-adjust: 100%;\n /* 2 */\n -webkit-text-size-adjust: 100%;\n /* 2 */ }\n\n/**\n * Remove default margin.\n */\nbody {\n margin: 0; }\n\n/* HTML5 display definitions\n ========================================================================== */\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block; }\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n /* 1 */\n vertical-align: baseline;\n /* 2 */ }\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\naudio:not([controls]) {\n display: none;\n height: 0; }\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n */\n[hidden],\ntemplate {\n display: none; }\n\n/* Links\n ========================================================================== */\n/**\n * Remove the gray background color from active links in IE 10.\n */\na {\n background-color: transparent; }\n\n/**\n * Improve readability of focused elements when they are also in an\n * active/hover state.\n */\na:active,\na:hover {\n outline: 0; }\n\n/* Text-level semantics\n ========================================================================== */\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\nabbr[title] {\n border-bottom: 1px dotted; }\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\nb,\nstrong {\n font-weight: bold; }\n\n/**\n * Address styling not present in Safari and Chrome.\n */\ndfn {\n font-style: italic; }\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\nh1 {\n font-size: 2em;\n margin: 0.67em 0; }\n\n/**\n * Address styling not present in IE 8/9.\n */\nmark {\n background: #ff0;\n color: #000; }\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\nsmall {\n font-size: 80%; }\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline; }\n\nsup {\n top: -0.5em; }\n\nsub {\n bottom: -0.25em; }\n\n/* Embedded content\n ========================================================================== */\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\nimg {\n border: 0; }\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\nsvg:not(:root) {\n overflow: hidden; }\n\n/* Grouping content\n ========================================================================== */\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\nfigure {\n margin: 1em 40px; }\n\n/**\n * Address differences between Firefox and other browsers.\n */\nhr {\n box-sizing: content-box;\n height: 0; }\n\n/**\n * Contain overflow in all browsers.\n */\npre {\n overflow: auto; }\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em; }\n\n/* Forms\n ========================================================================== */\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n /* 1 */\n font: inherit;\n /* 2 */\n margin: 0;\n /* 3 */ }\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\nbutton {\n overflow: visible; }\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\nbutton,\nselect {\n text-transform: none; }\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n /* 2 */\n cursor: pointer;\n /* 3 */ }\n\n/**\n * Re-set default cursor for disabled elements.\n */\nbutton[disabled],\nhtml input[disabled] {\n cursor: not-allowed; }\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\ninput {\n line-height: normal; }\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n /* 1 */\n padding: 0;\n /* 2 */ }\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto; }\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n */\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n /* 1 */\n box-sizing: content-box;\n /* 2 */ }\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none; }\n\n/**\n * Define consistent border, margin, and padding.\n * [NOTE] We don't enable this ruleset in Foundation, because we want the
    element to have plain styling.\n */\n/* fieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n } */\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\nlegend {\n border: 0;\n /* 1 */\n padding: 0;\n /* 2 */ }\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\ntextarea {\n overflow: auto; }\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\noptgroup {\n font-weight: bold; }\n\n/* Tables\n ========================================================================== */\n/**\n * Remove most spacing between table cells.\n */\ntable {\n border-collapse: collapse;\n border-spacing: 0; }\n\ntd,\nth {\n padding: 0; }\n\n.foundation-mq {\n font-family: \"small=0em&medium=40em&large=64em&xlarge=75em&xxlarge=90em\"; }\n\nhtml {\n font-size: 100%;\n box-sizing: border-box; }\n\n*,\n*::before,\n*::after {\n box-sizing: inherit; }\n\nbody {\n padding: 0;\n margin: 0;\n font-family: \"Raleway\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-weight: normal;\n line-height: 1.5;\n color: #0a0a0a;\n background: #fefefe;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\nimg {\n max-width: 100%;\n height: auto;\n -ms-interpolation-mode: bicubic;\n display: inline-block;\n vertical-align: middle; }\n\ntextarea {\n height: auto;\n min-height: 50px;\n border-radius: 0; }\n\nselect {\n width: 100%;\n border-radius: 0; }\n\n#map_canvas img,\n#map_canvas embed,\n#map_canvas object,\n.map_canvas img,\n.map_canvas embed,\n.map_canvas object,\n.mqa-display img,\n.mqa-display embed,\n.mqa-display object {\n max-width: none !important; }\n\nbutton {\n -webkit-appearance: none;\n -moz-appearance: none;\n background: transparent;\n padding: 0;\n border: 0;\n border-radius: 0;\n line-height: 1; }\n [data-whatinput='mouse'] button {\n outline: 0; }\n\n.is-visible {\n display: block !important; }\n\n.is-hidden {\n display: none !important; }\n\n.row {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto; }\n .row::before, .row::after {\n content: ' ';\n display: table; }\n .row::after {\n clear: both; }\n .row.collapse > .column, .row.collapse > .columns {\n padding-left: 0;\n padding-right: 0; }\n .row .row {\n max-width: none;\n margin-left: -0.625rem;\n margin-right: -0.625rem;\n max-width: none; }\n @media screen and (min-width: 40em) {\n .row .row {\n margin-left: -0.9375rem;\n margin-right: -0.9375rem; } }\n .row .row.collapse {\n margin-left: 0;\n margin-right: 0; }\n .row.expanded {\n max-width: none; }\n .row.expanded .row {\n margin-left: auto;\n margin-right: auto; }\n\n.column, .columns {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n @media screen and (min-width: 40em) {\n .column, .columns {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n .column:last-child:not(:first-child), .columns:last-child:not(:first-child) {\n float: right; }\n .column.end:last-child:last-child, .end.columns:last-child:last-child {\n float: left; }\n\n.column.row.row, .row.row.columns {\n float: none; }\n .row .column.row.row, .row .row.row.columns {\n padding-left: 0;\n padding-right: 0;\n margin-left: 0;\n margin-right: 0; }\n\n.small-1 {\n width: 8.33333%; }\n\n.small-push-1 {\n position: relative;\n left: 8.33333%; }\n\n.small-pull-1 {\n position: relative;\n left: -8.33333%; }\n\n.small-offset-0 {\n margin-left: 0%; }\n\n.small-2 {\n width: 16.66667%; }\n\n.small-push-2 {\n position: relative;\n left: 16.66667%; }\n\n.small-pull-2 {\n position: relative;\n left: -16.66667%; }\n\n.small-offset-1 {\n margin-left: 8.33333%; }\n\n.small-3 {\n width: 25%; }\n\n.small-push-3 {\n position: relative;\n left: 25%; }\n\n.small-pull-3 {\n position: relative;\n left: -25%; }\n\n.small-offset-2 {\n margin-left: 16.66667%; }\n\n.small-4 {\n width: 33.33333%; }\n\n.small-push-4 {\n position: relative;\n left: 33.33333%; }\n\n.small-pull-4 {\n position: relative;\n left: -33.33333%; }\n\n.small-offset-3 {\n margin-left: 25%; }\n\n.small-5 {\n width: 41.66667%; }\n\n.small-push-5 {\n position: relative;\n left: 41.66667%; }\n\n.small-pull-5 {\n position: relative;\n left: -41.66667%; }\n\n.small-offset-4 {\n margin-left: 33.33333%; }\n\n.small-6 {\n width: 50%; }\n\n.small-push-6 {\n position: relative;\n left: 50%; }\n\n.small-pull-6 {\n position: relative;\n left: -50%; }\n\n.small-offset-5 {\n margin-left: 41.66667%; }\n\n.small-7 {\n width: 58.33333%; }\n\n.small-push-7 {\n position: relative;\n left: 58.33333%; }\n\n.small-pull-7 {\n position: relative;\n left: -58.33333%; }\n\n.small-offset-6 {\n margin-left: 50%; }\n\n.small-8 {\n width: 66.66667%; }\n\n.small-push-8 {\n position: relative;\n left: 66.66667%; }\n\n.small-pull-8 {\n position: relative;\n left: -66.66667%; }\n\n.small-offset-7 {\n margin-left: 58.33333%; }\n\n.small-9 {\n width: 75%; }\n\n.small-push-9 {\n position: relative;\n left: 75%; }\n\n.small-pull-9 {\n position: relative;\n left: -75%; }\n\n.small-offset-8 {\n margin-left: 66.66667%; }\n\n.small-10 {\n width: 83.33333%; }\n\n.small-push-10 {\n position: relative;\n left: 83.33333%; }\n\n.small-pull-10 {\n position: relative;\n left: -83.33333%; }\n\n.small-offset-9 {\n margin-left: 75%; }\n\n.small-11 {\n width: 91.66667%; }\n\n.small-push-11 {\n position: relative;\n left: 91.66667%; }\n\n.small-pull-11 {\n position: relative;\n left: -91.66667%; }\n\n.small-offset-10 {\n margin-left: 83.33333%; }\n\n.small-12 {\n width: 100%; }\n\n.small-offset-11 {\n margin-left: 91.66667%; }\n\n.small-up-1 > .column, .small-up-1 > .columns {\n width: 100%;\n float: left; }\n .small-up-1 > .column:nth-of-type(1n), .small-up-1 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-1 > .column:nth-of-type(1n+1), .small-up-1 > .columns:nth-of-type(1n+1) {\n clear: both; }\n .small-up-1 > .column:last-child, .small-up-1 > .columns:last-child {\n float: left; }\n\n.small-up-2 > .column, .small-up-2 > .columns {\n width: 50%;\n float: left; }\n .small-up-2 > .column:nth-of-type(1n), .small-up-2 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-2 > .column:nth-of-type(2n+1), .small-up-2 > .columns:nth-of-type(2n+1) {\n clear: both; }\n .small-up-2 > .column:last-child, .small-up-2 > .columns:last-child {\n float: left; }\n\n.small-up-3 > .column, .small-up-3 > .columns {\n width: 33.33333%;\n float: left; }\n .small-up-3 > .column:nth-of-type(1n), .small-up-3 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-3 > .column:nth-of-type(3n+1), .small-up-3 > .columns:nth-of-type(3n+1) {\n clear: both; }\n .small-up-3 > .column:last-child, .small-up-3 > .columns:last-child {\n float: left; }\n\n.small-up-4 > .column, .small-up-4 > .columns {\n width: 25%;\n float: left; }\n .small-up-4 > .column:nth-of-type(1n), .small-up-4 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-4 > .column:nth-of-type(4n+1), .small-up-4 > .columns:nth-of-type(4n+1) {\n clear: both; }\n .small-up-4 > .column:last-child, .small-up-4 > .columns:last-child {\n float: left; }\n\n.small-up-5 > .column, .small-up-5 > .columns {\n width: 20%;\n float: left; }\n .small-up-5 > .column:nth-of-type(1n), .small-up-5 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-5 > .column:nth-of-type(5n+1), .small-up-5 > .columns:nth-of-type(5n+1) {\n clear: both; }\n .small-up-5 > .column:last-child, .small-up-5 > .columns:last-child {\n float: left; }\n\n.small-up-6 > .column, .small-up-6 > .columns {\n width: 16.66667%;\n float: left; }\n .small-up-6 > .column:nth-of-type(1n), .small-up-6 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-6 > .column:nth-of-type(6n+1), .small-up-6 > .columns:nth-of-type(6n+1) {\n clear: both; }\n .small-up-6 > .column:last-child, .small-up-6 > .columns:last-child {\n float: left; }\n\n.small-up-7 > .column, .small-up-7 > .columns {\n width: 14.28571%;\n float: left; }\n .small-up-7 > .column:nth-of-type(1n), .small-up-7 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-7 > .column:nth-of-type(7n+1), .small-up-7 > .columns:nth-of-type(7n+1) {\n clear: both; }\n .small-up-7 > .column:last-child, .small-up-7 > .columns:last-child {\n float: left; }\n\n.small-up-8 > .column, .small-up-8 > .columns {\n width: 12.5%;\n float: left; }\n .small-up-8 > .column:nth-of-type(1n), .small-up-8 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-8 > .column:nth-of-type(8n+1), .small-up-8 > .columns:nth-of-type(8n+1) {\n clear: both; }\n .small-up-8 > .column:last-child, .small-up-8 > .columns:last-child {\n float: left; }\n\n.small-collapse > .column, .small-collapse > .columns {\n padding-left: 0;\n padding-right: 0; }\n\n.small-collapse .row {\n margin-left: 0;\n margin-right: 0; }\n\n.small-uncollapse > .column, .small-uncollapse > .columns {\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n\n.small-centered {\n float: none;\n margin-left: auto;\n margin-right: auto; }\n\n.small-uncentered,\n.small-push-0,\n.small-pull-0 {\n position: static;\n margin-left: 0;\n margin-right: 0;\n float: left; }\n\n@media screen and (min-width: 40em) {\n .medium-1 {\n width: 8.33333%; }\n .medium-push-1 {\n position: relative;\n left: 8.33333%; }\n .medium-pull-1 {\n position: relative;\n left: -8.33333%; }\n .medium-offset-0 {\n margin-left: 0%; }\n .medium-2 {\n width: 16.66667%; }\n .medium-push-2 {\n position: relative;\n left: 16.66667%; }\n .medium-pull-2 {\n position: relative;\n left: -16.66667%; }\n .medium-offset-1 {\n margin-left: 8.33333%; }\n .medium-3 {\n width: 25%; }\n .medium-push-3 {\n position: relative;\n left: 25%; }\n .medium-pull-3 {\n position: relative;\n left: -25%; }\n .medium-offset-2 {\n margin-left: 16.66667%; }\n .medium-4 {\n width: 33.33333%; }\n .medium-push-4 {\n position: relative;\n left: 33.33333%; }\n .medium-pull-4 {\n position: relative;\n left: -33.33333%; }\n .medium-offset-3 {\n margin-left: 25%; }\n .medium-5 {\n width: 41.66667%; }\n .medium-push-5 {\n position: relative;\n left: 41.66667%; }\n .medium-pull-5 {\n position: relative;\n left: -41.66667%; }\n .medium-offset-4 {\n margin-left: 33.33333%; }\n .medium-6 {\n width: 50%; }\n .medium-push-6 {\n position: relative;\n left: 50%; }\n .medium-pull-6 {\n position: relative;\n left: -50%; }\n .medium-offset-5 {\n margin-left: 41.66667%; }\n .medium-7 {\n width: 58.33333%; }\n .medium-push-7 {\n position: relative;\n left: 58.33333%; }\n .medium-pull-7 {\n position: relative;\n left: -58.33333%; }\n .medium-offset-6 {\n margin-left: 50%; }\n .medium-8 {\n width: 66.66667%; }\n .medium-push-8 {\n position: relative;\n left: 66.66667%; }\n .medium-pull-8 {\n position: relative;\n left: -66.66667%; }\n .medium-offset-7 {\n margin-left: 58.33333%; }\n .medium-9 {\n width: 75%; }\n .medium-push-9 {\n position: relative;\n left: 75%; }\n .medium-pull-9 {\n position: relative;\n left: -75%; }\n .medium-offset-8 {\n margin-left: 66.66667%; }\n .medium-10 {\n width: 83.33333%; }\n .medium-push-10 {\n position: relative;\n left: 83.33333%; }\n .medium-pull-10 {\n position: relative;\n left: -83.33333%; }\n .medium-offset-9 {\n margin-left: 75%; }\n .medium-11 {\n width: 91.66667%; }\n .medium-push-11 {\n position: relative;\n left: 91.66667%; }\n .medium-pull-11 {\n position: relative;\n left: -91.66667%; }\n .medium-offset-10 {\n margin-left: 83.33333%; }\n .medium-12 {\n width: 100%; }\n .medium-offset-11 {\n margin-left: 91.66667%; }\n .medium-up-1 > .column, .medium-up-1 > .columns {\n width: 100%;\n float: left; }\n .medium-up-1 > .column:nth-of-type(1n), .medium-up-1 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-1 > .column:nth-of-type(1n+1), .medium-up-1 > .columns:nth-of-type(1n+1) {\n clear: both; }\n .medium-up-1 > .column:last-child, .medium-up-1 > .columns:last-child {\n float: left; }\n .medium-up-2 > .column, .medium-up-2 > .columns {\n width: 50%;\n float: left; }\n .medium-up-2 > .column:nth-of-type(1n), .medium-up-2 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-2 > .column:nth-of-type(2n+1), .medium-up-2 > .columns:nth-of-type(2n+1) {\n clear: both; }\n .medium-up-2 > .column:last-child, .medium-up-2 > .columns:last-child {\n float: left; }\n .medium-up-3 > .column, .medium-up-3 > .columns {\n width: 33.33333%;\n float: left; }\n .medium-up-3 > .column:nth-of-type(1n), .medium-up-3 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-3 > .column:nth-of-type(3n+1), .medium-up-3 > .columns:nth-of-type(3n+1) {\n clear: both; }\n .medium-up-3 > .column:last-child, .medium-up-3 > .columns:last-child {\n float: left; }\n .medium-up-4 > .column, .medium-up-4 > .columns {\n width: 25%;\n float: left; }\n .medium-up-4 > .column:nth-of-type(1n), .medium-up-4 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-4 > .column:nth-of-type(4n+1), .medium-up-4 > .columns:nth-of-type(4n+1) {\n clear: both; }\n .medium-up-4 > .column:last-child, .medium-up-4 > .columns:last-child {\n float: left; }\n .medium-up-5 > .column, .medium-up-5 > .columns {\n width: 20%;\n float: left; }\n .medium-up-5 > .column:nth-of-type(1n), .medium-up-5 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-5 > .column:nth-of-type(5n+1), .medium-up-5 > .columns:nth-of-type(5n+1) {\n clear: both; }\n .medium-up-5 > .column:last-child, .medium-up-5 > .columns:last-child {\n float: left; }\n .medium-up-6 > .column, .medium-up-6 > .columns {\n width: 16.66667%;\n float: left; }\n .medium-up-6 > .column:nth-of-type(1n), .medium-up-6 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-6 > .column:nth-of-type(6n+1), .medium-up-6 > .columns:nth-of-type(6n+1) {\n clear: both; }\n .medium-up-6 > .column:last-child, .medium-up-6 > .columns:last-child {\n float: left; }\n .medium-up-7 > .column, .medium-up-7 > .columns {\n width: 14.28571%;\n float: left; }\n .medium-up-7 > .column:nth-of-type(1n), .medium-up-7 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-7 > .column:nth-of-type(7n+1), .medium-up-7 > .columns:nth-of-type(7n+1) {\n clear: both; }\n .medium-up-7 > .column:last-child, .medium-up-7 > .columns:last-child {\n float: left; }\n .medium-up-8 > .column, .medium-up-8 > .columns {\n width: 12.5%;\n float: left; }\n .medium-up-8 > .column:nth-of-type(1n), .medium-up-8 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-8 > .column:nth-of-type(8n+1), .medium-up-8 > .columns:nth-of-type(8n+1) {\n clear: both; }\n .medium-up-8 > .column:last-child, .medium-up-8 > .columns:last-child {\n float: left; }\n .medium-collapse > .column, .medium-collapse > .columns {\n padding-left: 0;\n padding-right: 0; }\n .medium-collapse .row {\n margin-left: 0;\n margin-right: 0; }\n .medium-uncollapse > .column, .medium-uncollapse > .columns {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; }\n .medium-centered {\n float: none;\n margin-left: auto;\n margin-right: auto; }\n .medium-uncentered,\n .medium-push-0,\n .medium-pull-0 {\n position: static;\n margin-left: 0;\n margin-right: 0;\n float: left; } }\n\n@media screen and (min-width: 64em) {\n .large-1 {\n width: 8.33333%; }\n .large-push-1 {\n position: relative;\n left: 8.33333%; }\n .large-pull-1 {\n position: relative;\n left: -8.33333%; }\n .large-offset-0 {\n margin-left: 0%; }\n .large-2 {\n width: 16.66667%; }\n .large-push-2 {\n position: relative;\n left: 16.66667%; }\n .large-pull-2 {\n position: relative;\n left: -16.66667%; }\n .large-offset-1 {\n margin-left: 8.33333%; }\n .large-3 {\n width: 25%; }\n .large-push-3 {\n position: relative;\n left: 25%; }\n .large-pull-3 {\n position: relative;\n left: -25%; }\n .large-offset-2 {\n margin-left: 16.66667%; }\n .large-4 {\n width: 33.33333%; }\n .large-push-4 {\n position: relative;\n left: 33.33333%; }\n .large-pull-4 {\n position: relative;\n left: -33.33333%; }\n .large-offset-3 {\n margin-left: 25%; }\n .large-5 {\n width: 41.66667%; }\n .large-push-5 {\n position: relative;\n left: 41.66667%; }\n .large-pull-5 {\n position: relative;\n left: -41.66667%; }\n .large-offset-4 {\n margin-left: 33.33333%; }\n .large-6 {\n width: 50%; }\n .large-push-6 {\n position: relative;\n left: 50%; }\n .large-pull-6 {\n position: relative;\n left: -50%; }\n .large-offset-5 {\n margin-left: 41.66667%; }\n .large-7 {\n width: 58.33333%; }\n .large-push-7 {\n position: relative;\n left: 58.33333%; }\n .large-pull-7 {\n position: relative;\n left: -58.33333%; }\n .large-offset-6 {\n margin-left: 50%; }\n .large-8 {\n width: 66.66667%; }\n .large-push-8 {\n position: relative;\n left: 66.66667%; }\n .large-pull-8 {\n position: relative;\n left: -66.66667%; }\n .large-offset-7 {\n margin-left: 58.33333%; }\n .large-9 {\n width: 75%; }\n .large-push-9 {\n position: relative;\n left: 75%; }\n .large-pull-9 {\n position: relative;\n left: -75%; }\n .large-offset-8 {\n margin-left: 66.66667%; }\n .large-10 {\n width: 83.33333%; }\n .large-push-10 {\n position: relative;\n left: 83.33333%; }\n .large-pull-10 {\n position: relative;\n left: -83.33333%; }\n .large-offset-9 {\n margin-left: 75%; }\n .large-11 {\n width: 91.66667%; }\n .large-push-11 {\n position: relative;\n left: 91.66667%; }\n .large-pull-11 {\n position: relative;\n left: -91.66667%; }\n .large-offset-10 {\n margin-left: 83.33333%; }\n .large-12 {\n width: 100%; }\n .large-offset-11 {\n margin-left: 91.66667%; }\n .large-up-1 > .column, .large-up-1 > .columns {\n width: 100%;\n float: left; }\n .large-up-1 > .column:nth-of-type(1n), .large-up-1 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-1 > .column:nth-of-type(1n+1), .large-up-1 > .columns:nth-of-type(1n+1) {\n clear: both; }\n .large-up-1 > .column:last-child, .large-up-1 > .columns:last-child {\n float: left; }\n .large-up-2 > .column, .large-up-2 > .columns {\n width: 50%;\n float: left; }\n .large-up-2 > .column:nth-of-type(1n), .large-up-2 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-2 > .column:nth-of-type(2n+1), .large-up-2 > .columns:nth-of-type(2n+1) {\n clear: both; }\n .large-up-2 > .column:last-child, .large-up-2 > .columns:last-child {\n float: left; }\n .large-up-3 > .column, .large-up-3 > .columns {\n width: 33.33333%;\n float: left; }\n .large-up-3 > .column:nth-of-type(1n), .large-up-3 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-3 > .column:nth-of-type(3n+1), .large-up-3 > .columns:nth-of-type(3n+1) {\n clear: both; }\n .large-up-3 > .column:last-child, .large-up-3 > .columns:last-child {\n float: left; }\n .large-up-4 > .column, .large-up-4 > .columns {\n width: 25%;\n float: left; }\n .large-up-4 > .column:nth-of-type(1n), .large-up-4 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-4 > .column:nth-of-type(4n+1), .large-up-4 > .columns:nth-of-type(4n+1) {\n clear: both; }\n .large-up-4 > .column:last-child, .large-up-4 > .columns:last-child {\n float: left; }\n .large-up-5 > .column, .large-up-5 > .columns {\n width: 20%;\n float: left; }\n .large-up-5 > .column:nth-of-type(1n), .large-up-5 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-5 > .column:nth-of-type(5n+1), .large-up-5 > .columns:nth-of-type(5n+1) {\n clear: both; }\n .large-up-5 > .column:last-child, .large-up-5 > .columns:last-child {\n float: left; }\n .large-up-6 > .column, .large-up-6 > .columns {\n width: 16.66667%;\n float: left; }\n .large-up-6 > .column:nth-of-type(1n), .large-up-6 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-6 > .column:nth-of-type(6n+1), .large-up-6 > .columns:nth-of-type(6n+1) {\n clear: both; }\n .large-up-6 > .column:last-child, .large-up-6 > .columns:last-child {\n float: left; }\n .large-up-7 > .column, .large-up-7 > .columns {\n width: 14.28571%;\n float: left; }\n .large-up-7 > .column:nth-of-type(1n), .large-up-7 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-7 > .column:nth-of-type(7n+1), .large-up-7 > .columns:nth-of-type(7n+1) {\n clear: both; }\n .large-up-7 > .column:last-child, .large-up-7 > .columns:last-child {\n float: left; }\n .large-up-8 > .column, .large-up-8 > .columns {\n width: 12.5%;\n float: left; }\n .large-up-8 > .column:nth-of-type(1n), .large-up-8 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-8 > .column:nth-of-type(8n+1), .large-up-8 > .columns:nth-of-type(8n+1) {\n clear: both; }\n .large-up-8 > .column:last-child, .large-up-8 > .columns:last-child {\n float: left; }\n .large-collapse > .column, .large-collapse > .columns {\n padding-left: 0;\n padding-right: 0; }\n .large-collapse .row {\n margin-left: 0;\n margin-right: 0; }\n .large-uncollapse > .column, .large-uncollapse > .columns {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; }\n .large-centered {\n float: none;\n margin-left: auto;\n margin-right: auto; }\n .large-uncentered,\n .large-push-0,\n .large-pull-0 {\n position: static;\n margin-left: 0;\n margin-right: 0;\n float: left; } }\n\ndiv,\ndl,\ndt,\ndd,\nul,\nol,\nli,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\npre,\nform,\np,\nblockquote,\nth,\ntd {\n margin: 0;\n padding: 0; }\n\np {\n font-size: inherit;\n line-height: 1.6;\n margin-bottom: 1rem;\n text-rendering: optimizeLegibility; }\n\nem,\ni {\n font-style: italic;\n line-height: inherit; }\n\nstrong,\nb {\n font-weight: bold;\n line-height: inherit; }\n\nsmall {\n font-size: 80%;\n line-height: inherit; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-family: \"Raleway\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-weight: normal;\n font-style: normal;\n color: inherit;\n text-rendering: optimizeLegibility;\n margin-top: 0;\n margin-bottom: 0.5rem;\n line-height: 1.4; }\n h1 small,\n h2 small,\n h3 small,\n h4 small,\n h5 small,\n h6 small {\n color: #cacaca;\n line-height: 0; }\n\nh1 {\n font-size: 1.5rem; }\n\nh2 {\n font-size: 1.25rem; }\n\nh3 {\n font-size: 1.1875rem; }\n\nh4 {\n font-size: 1.125rem; }\n\nh5 {\n font-size: 1.0625rem; }\n\nh6 {\n font-size: 1rem; }\n\n@media screen and (min-width: 40em) {\n h1 {\n font-size: 3rem; }\n h2 {\n font-size: 2.5rem; }\n h3 {\n font-size: 1.9375rem; }\n h4 {\n font-size: 1.5625rem; }\n h5 {\n font-size: 1.25rem; }\n h6 {\n font-size: 1rem; } }\n\na {\n color: #3f47cc;\n text-decoration: none;\n line-height: inherit;\n cursor: pointer; }\n a:hover, a:focus {\n color: #3038b5; }\n a img {\n border: 0; }\n\nhr {\n max-width: 75rem;\n height: 0;\n border-right: 0;\n border-top: 0;\n border-bottom: 1px solid #cacaca;\n border-left: 0;\n margin: 1.25rem auto;\n clear: both; }\n\nul,\nol,\ndl {\n line-height: 1.6;\n margin-bottom: 1rem;\n list-style-position: outside; }\n\nli {\n font-size: inherit; }\n\nul {\n list-style-type: disc;\n margin-left: 1.25rem; }\n\nol {\n margin-left: 1.25rem; }\n\nul ul, ol ul, ul ol, ol ol {\n margin-left: 1.25rem;\n margin-bottom: 0; }\n\ndl {\n margin-bottom: 1rem; }\n dl dt {\n margin-bottom: 0.3rem;\n font-weight: bold; }\n\nblockquote {\n margin: 0 0 1rem;\n padding: 0.5625rem 1.25rem 0 1.1875rem;\n border-left: 1px solid #cacaca; }\n blockquote, blockquote p {\n line-height: 1.6;\n color: #8a8a8a; }\n\ncite {\n display: block;\n font-size: 0.8125rem;\n color: #8a8a8a; }\n cite:before {\n content: '\\2014 \\0020'; }\n\nabbr {\n color: #0a0a0a;\n cursor: help;\n border-bottom: 1px dotted #0a0a0a; }\n\ncode {\n font-family: Consolas, \"Liberation Mono\", Courier, monospace;\n font-weight: normal;\n color: #0a0a0a;\n background-color: #e6e6e6;\n border: 1px solid #cacaca;\n padding: 0.125rem 0.3125rem 0.0625rem; }\n\nkbd {\n padding: 0.125rem 0.25rem 0;\n margin: 0;\n background-color: #e6e6e6;\n color: #0a0a0a;\n font-family: Consolas, \"Liberation Mono\", Courier, monospace; }\n\n.subheader {\n margin-top: 0.2rem;\n margin-bottom: 0.5rem;\n font-weight: normal;\n line-height: 1.4;\n color: #8a8a8a; }\n\n.lead {\n font-size: 125%;\n line-height: 1.6; }\n\n.stat {\n font-size: 2.5rem;\n line-height: 1; }\n p + .stat {\n margin-top: -1rem; }\n\n.no-bullet {\n margin-left: 0;\n list-style: none; }\n\n.text-left {\n text-align: left; }\n\n.text-right {\n text-align: right; }\n\n.text-center {\n text-align: center; }\n\n.text-justify {\n text-align: justify; }\n\n@media screen and (min-width: 40em) {\n .medium-text-left {\n text-align: left; }\n .medium-text-right {\n text-align: right; }\n .medium-text-center {\n text-align: center; }\n .medium-text-justify {\n text-align: justify; } }\n\n@media screen and (min-width: 64em) {\n .large-text-left {\n text-align: left; }\n .large-text-right {\n text-align: right; }\n .large-text-center {\n text-align: center; }\n .large-text-justify {\n text-align: justify; } }\n\n.show-for-print {\n display: none !important; }\n\n@media print {\n * {\n background: transparent !important;\n color: black !important;\n box-shadow: none !important;\n text-shadow: none !important; }\n .show-for-print {\n display: block !important; }\n .hide-for-print {\n display: none !important; }\n table.show-for-print {\n display: table !important; }\n thead.show-for-print {\n display: table-header-group !important; }\n tbody.show-for-print {\n display: table-row-group !important; }\n tr.show-for-print {\n display: table-row !important; }\n td.show-for-print {\n display: table-cell !important; }\n th.show-for-print {\n display: table-cell !important; }\n a,\n a:visited {\n text-decoration: underline; }\n a[href]:after {\n content: \" (\" attr(href) \")\"; }\n .ir a:after,\n a[href^='javascript:']:after,\n a[href^='#']:after {\n content: ''; }\n abbr[title]:after {\n content: \" (\" attr(title) \")\"; }\n pre,\n blockquote {\n border: 1px solid #8a8a8a;\n page-break-inside: avoid; }\n thead {\n display: table-header-group; }\n tr,\n img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n @page {\n margin: 0.5cm; }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3; }\n h2,\n h3 {\n page-break-after: avoid; } }\n\n.button {\n display: inline-block;\n text-align: center;\n line-height: 1;\n cursor: pointer;\n -webkit-appearance: none;\n transition: background-color 0.25s ease-out, color 0.25s ease-out;\n vertical-align: middle;\n border: 1px solid transparent;\n border-radius: 0;\n padding: 0.85em 1em;\n margin: 0 0 1rem 0;\n font-size: 0.9rem;\n background-color: #3f47cc;\n color: #fff; }\n [data-whatinput='mouse'] .button {\n outline: 0; }\n .button:hover, .button:focus {\n background-color: #3037b3;\n color: #fff; }\n .button.tiny {\n font-size: 0.6rem; }\n .button.small {\n font-size: 0.75rem; }\n .button.large {\n font-size: 1.25rem; }\n .button.expanded {\n display: block;\n width: 100%;\n margin-left: 0;\n margin-right: 0; }\n .button.primary {\n background-color: #2199e8;\n color: #fff; }\n .button.primary:hover, .button.primary:focus {\n background-color: #147cc0;\n color: #fff; }\n .button.secondary {\n background-color: #777;\n color: #fff; }\n .button.secondary:hover, .button.secondary:focus {\n background-color: #5f5f5f;\n color: #fff; }\n .button.success {\n background-color: #3adb76;\n color: #fff; }\n .button.success:hover, .button.success:focus {\n background-color: #22bb5b;\n color: #fff; }\n .button.warning {\n background-color: #ffae00;\n color: #fff; }\n .button.warning:hover, .button.warning:focus {\n background-color: #cc8b00;\n color: #fff; }\n .button.alert {\n background-color: #ec5840;\n color: #fff; }\n .button.alert:hover, .button.alert:focus {\n background-color: #da3116;\n color: #fff; }\n .button.hollow {\n border: 1px solid #2199e8;\n color: #2199e8; }\n .button.hollow, .button.hollow:hover, .button.hollow:focus {\n background-color: transparent; }\n .button.hollow:hover, .button.hollow:focus {\n border-color: #0c4d78;\n color: #0c4d78; }\n .button.hollow.primary {\n border: 1px solid #2199e8;\n color: #2199e8; }\n .button.hollow.primary:hover, .button.hollow.primary:focus {\n border-color: #0c4d78;\n color: #0c4d78; }\n .button.hollow.secondary {\n border: 1px solid #777;\n color: #777; }\n .button.hollow.secondary:hover, .button.hollow.secondary:focus {\n border-color: #3c3c3c;\n color: #3c3c3c; }\n .button.hollow.success {\n border: 1px solid #3adb76;\n color: #3adb76; }\n .button.hollow.success:hover, .button.hollow.success:focus {\n border-color: #157539;\n color: #157539; }\n .button.hollow.warning {\n border: 1px solid #ffae00;\n color: #ffae00; }\n .button.hollow.warning:hover, .button.hollow.warning:focus {\n border-color: #805700;\n color: #805700; }\n .button.hollow.alert {\n border: 1px solid #ec5840;\n color: #ec5840; }\n .button.hollow.alert:hover, .button.hollow.alert:focus {\n border-color: #881f0e;\n color: #881f0e; }\n .button.disabled, .button[disabled] {\n opacity: 0.25;\n cursor: not-allowed; }\n .button.dropdown::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 0.4em;\n border-color: #fefefe transparent transparent;\n border-top-style: solid;\n border-bottom-width: 0;\n position: relative;\n top: 0.4em;\n float: right;\n margin-left: 1em;\n display: inline-block; }\n .button.arrow-only::after {\n margin-left: 0;\n float: none;\n top: -0.1em; }\n\n[type='text'], [type='password'], [type='date'], [type='datetime'], [type='datetime-local'], [type='month'], [type='week'], [type='email'], [type='number'], [type='search'], [type='tel'], [type='time'], [type='url'], [type='color'],\ntextarea {\n display: block;\n box-sizing: border-box;\n width: 100%;\n height: 2.4375rem;\n padding: 0.5rem;\n border: 1px solid #cacaca;\n margin: 0 0 1rem;\n font-family: inherit;\n font-size: 1rem;\n color: #0a0a0a;\n background-color: #fefefe;\n box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1);\n border-radius: 0;\n transition: box-shadow 0.5s, border-color 0.25s ease-in-out;\n -webkit-appearance: none;\n -moz-appearance: none; }\n [type='text']:focus, [type='password']:focus, [type='date']:focus, [type='datetime']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='week']:focus, [type='email']:focus, [type='number']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='url']:focus, [type='color']:focus,\n textarea:focus {\n border: 1px solid #8a8a8a;\n background-color: #fefefe;\n outline: none;\n box-shadow: 0 0 5px #cacaca;\n transition: box-shadow 0.5s, border-color 0.25s ease-in-out; }\n\ntextarea {\n max-width: 100%; }\n textarea[rows] {\n height: auto; }\n\ninput::placeholder,\ntextarea::placeholder {\n color: #cacaca; }\n\ninput:disabled, input[readonly],\ntextarea:disabled,\ntextarea[readonly] {\n background-color: #e6e6e6;\n cursor: default; }\n\n[type='submit'],\n[type='button'] {\n border-radius: 0;\n -webkit-appearance: none;\n -moz-appearance: none; }\n\ninput[type='search'] {\n box-sizing: border-box; }\n\n[type='file'],\n[type='checkbox'],\n[type='radio'] {\n margin: 0 0 1rem; }\n\n[type='checkbox'] + label,\n[type='radio'] + label {\n display: inline-block;\n margin-left: 0.5rem;\n margin-right: 1rem;\n margin-bottom: 0;\n vertical-align: baseline; }\n [type='checkbox'] + label[for],\n [type='radio'] + label[for] {\n cursor: pointer; }\n\nlabel > [type='checkbox'],\nlabel > [type='radio'] {\n margin-right: 0.5rem; }\n\n[type='file'] {\n width: 100%; }\n\nlabel {\n display: block;\n margin: 0;\n font-size: 0.875rem;\n font-weight: normal;\n line-height: 1.8;\n color: #0a0a0a; }\n label.middle {\n margin: 0 0 1rem;\n padding: 0.5625rem 0; }\n\n.help-text {\n margin-top: -0.5rem;\n font-size: 0.8125rem;\n font-style: italic;\n color: #333; }\n\n.input-group {\n display: table;\n width: 100%;\n margin-bottom: 1rem; }\n .input-group > :first-child {\n border-radius: 0 0 0 0; }\n .input-group > :last-child > * {\n border-radius: 0 0 0 0; }\n\n.input-group-label, .input-group-field, .input-group-button {\n margin: 0;\n display: table-cell;\n vertical-align: middle; }\n\n.input-group-label {\n text-align: center;\n padding: 0 1rem;\n background: #e6e6e6;\n color: #0a0a0a;\n border: 1px solid #cacaca;\n white-space: nowrap;\n width: 1%;\n height: 100%; }\n .input-group-label:first-child {\n border-right: 0; }\n .input-group-label:last-child {\n border-left: 0; }\n\n.input-group-field {\n border-radius: 0;\n height: 2.5rem; }\n\n.input-group-button {\n padding-top: 0;\n padding-bottom: 0;\n text-align: center;\n height: 100%;\n width: 1%; }\n .input-group-button a,\n .input-group-button input,\n .input-group-button button {\n margin: 0; }\n\n.input-group .input-group-button {\n display: table-cell; }\n\nfieldset {\n border: 0;\n padding: 0;\n margin: 0; }\n\nlegend {\n margin-bottom: 0.5rem;\n max-width: 100%; }\n\n.fieldset {\n border: 1px solid #cacaca;\n padding: 1.25rem;\n margin: 1.125rem 0; }\n .fieldset legend {\n background: #fefefe;\n padding: 0 0.1875rem;\n margin: 0;\n margin-left: -0.1875rem; }\n\nselect {\n height: 2.4375rem;\n padding: 0.5rem;\n border: 1px solid #cacaca;\n margin: 0 0 1rem;\n font-size: 1rem;\n font-family: inherit;\n line-height: normal;\n color: #0a0a0a;\n background-color: #fefefe;\n border-radius: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n background-image: url('data:image/svg+xml;utf8,');\n background-size: 9px 6px;\n background-position: right center;\n background-origin: content-box;\n background-repeat: no-repeat; }\n @media screen and (min-width: 0\\0) {\n select {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==\"); } }\n select:disabled {\n background-color: #e6e6e6;\n cursor: default; }\n select::-ms-expand {\n display: none; }\n select[multiple] {\n height: auto;\n background-image: none; }\n\n.is-invalid-input:not(:focus) {\n background-color: rgba(236, 88, 64, 0.1);\n border-color: #ec5840; }\n\n.is-invalid-label {\n color: #ec5840; }\n\n.form-error {\n display: none;\n margin-top: -0.5rem;\n margin-bottom: 1rem;\n font-size: 0.75rem;\n font-weight: bold;\n color: #ec5840; }\n .form-error.is-visible {\n display: block; }\n\ninput[type=\"range\"] {\n -webkit-appearance: none;\n -moz-appearance: none;\n display: block;\n width: 100%;\n height: auto;\n cursor: pointer;\n margin-top: 0.45rem;\n margin-bottom: 0.45rem;\n border: 0;\n line-height: 1; }\n input[type=\"range\"]:focus {\n outline: 0; }\n input[type=\"range\"][disabled] {\n opacity: 0.25; }\n input[type=\"range\"]::-webkit-slider-runnable-track {\n height: 0.5rem;\n background: #e6e6e6; }\n input[type=\"range\"]::-webkit-slider-handle {\n -webkit-appearance: none;\n background: #3f47cc;\n width: 1.4rem;\n height: 1.4rem;\n margin-top: -0.45rem; }\n input[type=\"range\"]::-moz-range-track {\n -moz-appearance: none;\n height: 0.5rem;\n background: #e6e6e6; }\n input[type=\"range\"]::-moz-range-thumb {\n -moz-appearance: none;\n background: #3f47cc;\n width: 1.4rem;\n height: 1.4rem;\n margin-top: -0.45rem; }\n input[type=\"range\"]::-ms-track {\n height: 0.5rem;\n background: #e6e6e6;\n color: transparent;\n border: 0;\n overflow: visible;\n border-top: 0.45rem solid #fefefe;\n border-bottom: 0.45rem solid #fefefe; }\n input[type=\"range\"]::-ms-thumb {\n background: #3f47cc;\n width: 1.4rem;\n height: 1.4rem;\n border: 0; }\n input[type=\"range\"]::-ms-fill-lower {\n background: #cacaca; }\n input[type=\"range\"]::-ms-fill-upper {\n background: #e6e6e6; }\n output {\n line-height: 1.4rem;\n vertical-align: middle;\n margin-left: 0.5em; }\n\n.accordion {\n list-style-type: none;\n background: #fefefe;\n border: 1px solid #e6e6e6;\n border-bottom: 0;\n border-radius: 0;\n margin-left: 0; }\n\n.accordion-title {\n display: block;\n padding: 1.25rem 1rem;\n line-height: 1;\n font-size: 0.75rem;\n color: #3f47cc;\n position: relative;\n border-bottom: 1px solid #e6e6e6; }\n .accordion-title:hover, .accordion-title:focus {\n background-color: #e6e6e6; }\n .accordion-title::before {\n content: '+';\n position: absolute;\n right: 1rem;\n top: 50%;\n margin-top: -0.5rem; }\n .is-active > .accordion-title::before {\n content: '–'; }\n\n.accordion-content {\n padding: 1rem;\n display: none;\n border-bottom: 1px solid #e6e6e6;\n background-color: #fefefe; }\n\n.is-accordion-submenu-parent > a {\n position: relative; }\n .is-accordion-submenu-parent > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n border-color: #3f47cc transparent transparent;\n border-top-style: solid;\n border-bottom-width: 0;\n position: absolute;\n top: 50%;\n margin-top: -4px;\n right: 1rem; }\n\n.is-accordion-submenu-parent[aria-expanded='true'] > a::after {\n transform-origin: 50% 50%;\n transform: scaleY(-1); }\n\n.badge {\n display: inline-block;\n padding: 0.3em;\n min-width: 2.1em;\n font-size: 0.6rem;\n text-align: center;\n border-radius: 50%;\n background: #3f47cc;\n color: #fefefe; }\n .badge.secondary {\n background: #777;\n color: #fefefe; }\n .badge.success {\n background: #3adb76;\n color: #fefefe; }\n .badge.warning {\n background: #ffae00;\n color: #fefefe; }\n .badge.alert {\n background: #ec5840;\n color: #fefefe; }\n\n.breadcrumbs {\n list-style: none;\n margin: 0 0 1rem 0; }\n .breadcrumbs::before, .breadcrumbs::after {\n content: ' ';\n display: table; }\n .breadcrumbs::after {\n clear: both; }\n .breadcrumbs li {\n float: left;\n color: #0a0a0a;\n font-size: 0.6875rem;\n cursor: default;\n text-transform: uppercase; }\n .breadcrumbs li:not(:last-child)::after {\n color: #cacaca;\n content: \"/\";\n margin: 0 0.75rem;\n position: relative;\n top: 1px;\n opacity: 1; }\n .breadcrumbs a {\n color: #3f47cc; }\n .breadcrumbs a:hover {\n text-decoration: underline; }\n .breadcrumbs .disabled {\n color: #cacaca;\n cursor: not-allowed; }\n\n.button-group {\n margin-bottom: 1rem;\n font-size: 0; }\n .button-group::before, .button-group::after {\n content: ' ';\n display: table; }\n .button-group::after {\n clear: both; }\n .button-group .button {\n margin: 0;\n font-size: 0.9rem; }\n .button-group .button:not(:last-child) {\n margin-right: 1px; }\n .button-group.tiny .button {\n font-size: 0.6rem; }\n .button-group.small .button {\n font-size: 0.75rem; }\n .button-group.large .button {\n font-size: 1.25rem; }\n .button-group.expanded {\n margin-right: -1px; }\n .button-group.expanded::before, .button-group.expanded::after {\n display: none; }\n .button-group.expanded .button:first-child:nth-last-child(2), .button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button {\n display: inline-block;\n width: calc(50% - 1px);\n margin-right: 1px; }\n .button-group.expanded .button:first-child:nth-last-child(3), .button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button {\n display: inline-block;\n width: calc(33.33333% - 1px);\n margin-right: 1px; }\n .button-group.expanded .button:first-child:nth-last-child(4), .button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button {\n display: inline-block;\n width: calc(25% - 1px);\n margin-right: 1px; }\n .button-group.expanded .button:first-child:nth-last-child(5), .button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button {\n display: inline-block;\n width: calc(20% - 1px);\n margin-right: 1px; }\n .button-group.expanded .button:first-child:nth-last-child(6), .button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button {\n display: inline-block;\n width: calc(16.66667% - 1px);\n margin-right: 1px; }\n .button-group.primary .button {\n background-color: #2199e8;\n color: #fff; }\n .button-group.primary .button:hover, .button-group.primary .button:focus {\n background-color: #147cc0;\n color: #fff; }\n .button-group.secondary .button {\n background-color: #777;\n color: #fff; }\n .button-group.secondary .button:hover, .button-group.secondary .button:focus {\n background-color: #5f5f5f;\n color: #fff; }\n .button-group.success .button {\n background-color: #3adb76;\n color: #fff; }\n .button-group.success .button:hover, .button-group.success .button:focus {\n background-color: #22bb5b;\n color: #fff; }\n .button-group.warning .button {\n background-color: #ffae00;\n color: #fff; }\n .button-group.warning .button:hover, .button-group.warning .button:focus {\n background-color: #cc8b00;\n color: #fff; }\n .button-group.alert .button {\n background-color: #ec5840;\n color: #fff; }\n .button-group.alert .button:hover, .button-group.alert .button:focus {\n background-color: #da3116;\n color: #fff; }\n .button-group.stacked .button, .button-group.stacked-for-small .button, .button-group.stacked-for-medium .button {\n width: 100%;\n border-right: 1px solid transparent; }\n .button-group.stacked .button:not(:last-child), .button-group.stacked-for-small .button:not(:last-child), .button-group.stacked-for-medium .button:not(:last-child) {\n border-bottom: 1px solid #fefefe; }\n @media screen and (min-width: 40em) {\n .button-group.stacked-for-small .button {\n width: auto; }\n .button-group.stacked-for-small .button:not(:last-child) {\n margin-right: 1px; } }\n @media screen and (min-width: 64em) {\n .button-group.stacked-for-medium .button {\n width: auto; }\n .button-group.stacked-for-medium .button:not(:last-child) {\n margin-right: 1px; } }\n @media screen and (max-width: 39.9375em) {\n .button-group.stacked-for-small.expanded {\n display: block; }\n .button-group.stacked-for-small.expanded .button {\n display: block;\n margin-right: 0; } }\n\n.callout {\n margin: 0 0 1rem 0;\n padding: 1rem;\n border: 1px solid rgba(10, 10, 10, 0.25);\n border-radius: 0;\n position: relative;\n color: #0a0a0a;\n background-color: white; }\n .callout > :first-child {\n margin-top: 0; }\n .callout > :last-child {\n margin-bottom: 0; }\n .callout.primary {\n background-color: #def0fc; }\n .callout.secondary {\n background-color: #ebebeb; }\n .callout.success {\n background-color: #e1faea; }\n .callout.warning {\n background-color: #fff3d9; }\n .callout.alert {\n background-color: #fce6e2; }\n .callout.small {\n padding-top: 0.5rem;\n padding-right: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 0.5rem; }\n .callout.large {\n padding-top: 3rem;\n padding-right: 3rem;\n padding-bottom: 3rem;\n padding-left: 3rem; }\n\n.close-button {\n position: absolute;\n color: #8a8a8a;\n right: 1rem;\n top: 0.5rem;\n font-size: 2em;\n line-height: 1;\n cursor: pointer; }\n [data-whatinput='mouse'] .close-button {\n outline: 0; }\n .close-button:hover, .close-button:focus {\n color: #0a0a0a; }\n\n.is-drilldown {\n position: relative;\n overflow: hidden; }\n .is-drilldown li {\n display: block !important; }\n\n.is-drilldown-submenu {\n position: absolute;\n top: 0;\n left: 100%;\n z-index: -1;\n height: 100%;\n width: 100%;\n background: #fefefe;\n transition: transform 0.15s linear; }\n .is-drilldown-submenu.is-active {\n z-index: 1;\n display: block;\n transform: translateX(-100%); }\n .is-drilldown-submenu.is-closing {\n transform: translateX(100%); }\n\n.is-drilldown-submenu-parent > a {\n position: relative; }\n .is-drilldown-submenu-parent > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n border-color: transparent transparent transparent #3f47cc;\n border-left-style: solid;\n border-right-width: 0;\n position: absolute;\n top: 50%;\n margin-top: -6px;\n right: 1rem; }\n\n.js-drilldown-back > a::before {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n border-color: transparent #3f47cc transparent transparent;\n border-right-style: solid;\n border-left-width: 0;\n border-left-width: 0;\n display: inline-block;\n vertical-align: middle;\n margin-right: 0.75rem; }\n\n.dropdown-pane {\n background-color: #fefefe;\n border: 1px solid #cacaca;\n border-radius: 0;\n display: block;\n font-size: 16rem;\n padding: 1rem;\n position: absolute;\n visibility: hidden;\n width: 300px;\n z-index: 10; }\n .dropdown-pane.is-open {\n visibility: visible; }\n\n.dropdown-pane.tiny {\n width: 100px; }\n\n.dropdown-pane.small {\n width: 200px; }\n\n.dropdown-pane.large {\n width: 400px; }\n\n.dropdown.menu > li.opens-left > .is-dropdown-submenu {\n left: auto;\n right: 0;\n top: 100%; }\n\n.dropdown.menu > li.opens-right > .is-dropdown-submenu {\n right: auto;\n left: 0;\n top: 100%; }\n\n.dropdown.menu > li.is-dropdown-submenu-parent > a {\n padding-right: 1.5rem;\n position: relative; }\n\n.dropdown.menu > li.is-dropdown-submenu-parent > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 5px;\n border-color: #3f47cc transparent transparent;\n border-top-style: solid;\n border-bottom-width: 0;\n right: 5px;\n margin-top: -2px; }\n\n[data-whatinput='mouse'] .dropdown.menu a {\n outline: 0; }\n\n.no-js .dropdown.menu ul {\n display: none; }\n\n.dropdown.menu.vertical > li .is-dropdown-submenu {\n top: 0; }\n\n.dropdown.menu.vertical > li.opens-left .is-dropdown-submenu {\n left: auto;\n right: 100%; }\n\n.dropdown.menu.vertical > li.opens-right .is-dropdown-submenu {\n right: auto;\n left: 100%; }\n\n.dropdown.menu.vertical > li > a::after {\n right: 14px;\n margin-top: -3px; }\n\n.dropdown.menu.vertical > li.opens-left > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 5px;\n border-color: transparent #3f47cc transparent transparent;\n border-right-style: solid;\n border-left-width: 0; }\n\n.dropdown.menu.vertical > li.opens-right > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 5px;\n border-color: transparent transparent transparent #3f47cc;\n border-left-style: solid;\n border-right-width: 0; }\n\n@media screen and (min-width: 40em) {\n .dropdown.menu.medium-horizontal > li.opens-left > .is-dropdown-submenu {\n left: auto;\n right: 0;\n top: 100%; }\n .dropdown.menu.medium-horizontal > li.opens-right > .is-dropdown-submenu {\n right: auto;\n left: 0;\n top: 100%; }\n .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a {\n padding-right: 1.5rem;\n position: relative; }\n .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 5px;\n border-color: #3f47cc transparent transparent;\n border-top-style: solid;\n border-bottom-width: 0;\n right: 5px;\n margin-top: -2px; }\n .dropdown.menu.medium-vertical > li .is-dropdown-submenu {\n top: 0; }\n .dropdown.menu.medium-vertical > li.opens-left .is-dropdown-submenu {\n left: auto;\n right: 100%; }\n .dropdown.menu.medium-vertical > li.opens-right .is-dropdown-submenu {\n right: auto;\n left: 100%; }\n .dropdown.menu.medium-vertical > li > a::after {\n right: 14px;\n margin-top: -3px; }\n .dropdown.menu.medium-vertical > li.opens-left > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 5px;\n border-color: transparent #3f47cc transparent transparent;\n border-right-style: solid;\n border-left-width: 0; }\n .dropdown.menu.medium-vertical > li.opens-right > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 5px;\n border-color: transparent transparent transparent #3f47cc;\n border-left-style: solid;\n border-right-width: 0; } }\n\n@media screen and (min-width: 64em) {\n .dropdown.menu.large-horizontal > li.opens-left > .is-dropdown-submenu {\n left: auto;\n right: 0;\n top: 100%; }\n .dropdown.menu.large-horizontal > li.opens-right > .is-dropdown-submenu {\n right: auto;\n left: 0;\n top: 100%; }\n .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a {\n padding-right: 1.5rem;\n position: relative; }\n .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 5px;\n border-color: #3f47cc transparent transparent;\n border-top-style: solid;\n border-bottom-width: 0;\n right: 5px;\n margin-top: -2px; }\n .dropdown.menu.large-vertical > li .is-dropdown-submenu {\n top: 0; }\n .dropdown.menu.large-vertical > li.opens-left .is-dropdown-submenu {\n left: auto;\n right: 100%; }\n .dropdown.menu.large-vertical > li.opens-right .is-dropdown-submenu {\n right: auto;\n left: 100%; }\n .dropdown.menu.large-vertical > li > a::after {\n right: 14px;\n margin-top: -3px; }\n .dropdown.menu.large-vertical > li.opens-left > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 5px;\n border-color: transparent #3f47cc transparent transparent;\n border-right-style: solid;\n border-left-width: 0; }\n .dropdown.menu.large-vertical > li.opens-right > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 5px;\n border-color: transparent transparent transparent #3f47cc;\n border-left-style: solid;\n border-right-width: 0; } }\n\n.dropdown.menu.align-right .is-dropdown-submenu.first-sub {\n top: 100%;\n left: auto;\n right: 0; }\n\n.is-dropdown-menu.vertical {\n width: 100px; }\n .is-dropdown-menu.vertical.align-right {\n float: right; }\n\n.is-dropdown-submenu-parent {\n position: relative; }\n .is-dropdown-submenu-parent a::after {\n position: absolute;\n top: 50%;\n right: 5px;\n margin-top: -2px; }\n .is-dropdown-submenu-parent.opens-inner .is-dropdown-submenu {\n top: 100%; }\n .is-dropdown-submenu-parent.opens-left .is-dropdown-submenu {\n left: auto;\n right: 100%; }\n\n.is-dropdown-submenu {\n display: none;\n position: absolute;\n top: 0;\n left: 100%;\n min-width: 200px;\n z-index: 1;\n background: #fefefe;\n border: 1px solid #cacaca; }\n .is-dropdown-submenu .is-dropdown-submenu-parent > a::after {\n right: 14px;\n margin-top: -3px; }\n .is-dropdown-submenu .is-dropdown-submenu-parent.opens-left > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 5px;\n border-color: transparent #3f47cc transparent transparent;\n border-right-style: solid;\n border-left-width: 0; }\n .is-dropdown-submenu .is-dropdown-submenu-parent.opens-right > a::after {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 5px;\n border-color: transparent transparent transparent #3f47cc;\n border-left-style: solid;\n border-right-width: 0; }\n .is-dropdown-submenu .is-dropdown-submenu {\n margin-top: -1px; }\n .is-dropdown-submenu > li {\n width: 100%; }\n .is-dropdown-submenu:not(.js-dropdown-nohover) > .is-dropdown-submenu-parent:hover > .is-dropdown-submenu, .is-dropdown-submenu.js-dropdown-active {\n display: block; }\n\n.flex-video {\n position: relative;\n height: 0;\n padding-bottom: 75%;\n margin-bottom: 1rem;\n overflow: hidden; }\n .flex-video iframe,\n .flex-video object,\n .flex-video embed,\n .flex-video video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; }\n .flex-video.widescreen {\n padding-bottom: 56.25%; }\n .flex-video.vimeo {\n padding-top: 0; }\n\n.label {\n display: inline-block;\n padding: 0.33333rem 0.5rem;\n font-size: 0.8rem;\n line-height: 1;\n white-space: nowrap;\n cursor: default;\n border-radius: 0;\n background: #3f47cc;\n color: #fefefe; }\n .label.secondary {\n background: #777;\n color: #fefefe; }\n .label.success {\n background: #3adb76;\n color: #fefefe; }\n .label.warning {\n background: #ffae00;\n color: #fefefe; }\n .label.alert {\n background: #ec5840;\n color: #fefefe; }\n\n.media-object {\n margin-bottom: 1rem;\n display: block; }\n .media-object img {\n max-width: none; }\n @media screen and (max-width: 39.9375em) {\n .media-object.stack-for-small .media-object-section {\n padding: 0;\n padding-bottom: 1rem;\n display: block; }\n .media-object.stack-for-small .media-object-section img {\n width: 100%; } }\n\n.media-object-section {\n display: table-cell;\n vertical-align: top; }\n .media-object-section:first-child {\n padding-right: 1rem; }\n .media-object-section:last-child:not(:nth-child(2)) {\n padding-left: 1rem; }\n .media-object-section.middle {\n vertical-align: middle; }\n .media-object-section.bottom {\n vertical-align: bottom; }\n\n.menu {\n margin: 0;\n list-style-type: none; }\n .menu > li {\n display: table-cell;\n vertical-align: middle; }\n [data-whatinput='mouse'] .menu > li {\n outline: 0; }\n .menu > li > a {\n display: block;\n padding: 0.7rem 1rem;\n line-height: 1; }\n .menu input,\n .menu a,\n .menu button {\n margin-bottom: 0; }\n .menu > li > a img,\n .menu > li > a i {\n vertical-align: middle; }\n .menu > li > a i + span,\n .menu > li > a img + span {\n vertical-align: middle; }\n .menu > li > a img,\n .menu > li > a i {\n margin-right: 0.25rem;\n display: inline-block; }\n .menu > li {\n display: table-cell; }\n .menu.vertical > li {\n display: block; }\n @media screen and (min-width: 40em) {\n .menu.medium-horizontal > li {\n display: table-cell; }\n .menu.medium-vertical > li {\n display: block; } }\n @media screen and (min-width: 64em) {\n .menu.large-horizontal > li {\n display: table-cell; }\n .menu.large-vertical > li {\n display: block; } }\n .menu.simple li {\n line-height: 1;\n display: inline-block;\n margin-right: 1rem; }\n .menu.simple a {\n padding: 0; }\n .menu.align-right::before, .menu.align-right::after {\n content: ' ';\n display: table; }\n .menu.align-right::after {\n clear: both; }\n .menu.align-right > li {\n float: right; }\n .menu.expanded {\n width: 100%;\n display: table;\n table-layout: fixed; }\n .menu.expanded > li:first-child:last-child {\n width: 100%; }\n .menu.icon-top > li > a {\n text-align: center; }\n .menu.icon-top > li > a img,\n .menu.icon-top > li > a i {\n display: block;\n margin: 0 auto 0.25rem; }\n .menu.nested {\n margin-left: 1rem; }\n .menu .active > a {\n color: #60FF00;\n background: rgba(254, 254, 254, 0.65); }\n\n.menu-text {\n font-weight: bold;\n color: inherit;\n line-height: 1;\n padding-top: 0;\n padding-bottom: 0;\n padding: 0.7rem 1rem; }\n\n.menu-centered {\n text-align: center; }\n .menu-centered > .menu {\n display: inline-block; }\n\n.no-js [data-responsive-menu] ul {\n display: none; }\n\nhtml,\nbody {\n height: 100%; }\n\n.off-canvas-wrapper {\n width: 100%;\n overflow-x: hidden;\n position: relative;\n backface-visibility: hidden;\n -webkit-overflow-scrolling: auto; }\n\n.off-canvas-wrapper-inner {\n position: relative;\n width: 100%;\n transition: transform 0.5s ease; }\n .off-canvas-wrapper-inner::before, .off-canvas-wrapper-inner::after {\n content: ' ';\n display: table; }\n .off-canvas-wrapper-inner::after {\n clear: both; }\n\n.off-canvas-content,\n.off-canvas-content {\n min-height: 100%;\n background: #fefefe;\n transition: transform 0.5s ease;\n backface-visibility: hidden;\n z-index: 1;\n padding-bottom: 0.1px;\n box-shadow: 0 0 10px rgba(10, 10, 10, 0.5); }\n\n.js-off-canvas-exit {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(254, 254, 254, 0.25);\n cursor: pointer;\n transition: background 0.5s ease; }\n\n.off-canvas {\n position: absolute;\n background: #e6e6e6;\n z-index: -1;\n max-height: 100%;\n overflow-y: auto;\n transform: translateX(0); }\n [data-whatinput='mouse'] .off-canvas {\n outline: 0; }\n .off-canvas.position-left {\n left: -250px;\n top: 0;\n width: 250px; }\n .is-open-left {\n transform: translateX(250px); }\n .off-canvas.position-right {\n right: -250px;\n top: 0;\n width: 250px; }\n .is-open-right {\n transform: translateX(-250px); }\n\n@media screen and (min-width: 40em) {\n .position-left.reveal-for-medium {\n left: 0;\n z-index: auto;\n position: fixed; }\n .position-left.reveal-for-medium ~ .off-canvas-content {\n margin-left: 250px; }\n .position-right.reveal-for-medium {\n right: 0;\n z-index: auto;\n position: fixed; }\n .position-right.reveal-for-medium ~ .off-canvas-content {\n margin-right: 250px; } }\n\n@media screen and (min-width: 64em) {\n .position-left.reveal-for-large {\n left: 0;\n z-index: auto;\n position: fixed; }\n .position-left.reveal-for-large ~ .off-canvas-content {\n margin-left: 250px; }\n .position-right.reveal-for-large {\n right: 0;\n z-index: auto;\n position: fixed; }\n .position-right.reveal-for-large ~ .off-canvas-content {\n margin-right: 250px; } }\n\n.orbit {\n position: relative; }\n\n.orbit-container {\n position: relative;\n margin: 0;\n overflow: hidden;\n list-style: none; }\n\n.orbit-slide {\n width: 100%;\n max-height: 100%; }\n .orbit-slide.no-motionui.is-active {\n top: 0;\n left: 0; }\n\n.orbit-figure {\n margin: 0; }\n\n.orbit-image {\n margin: 0;\n width: 100%;\n max-width: 100%; }\n\n.orbit-caption {\n position: absolute;\n bottom: 0;\n width: 100%;\n padding: 1rem;\n margin-bottom: 0;\n color: #fefefe;\n background-color: rgba(10, 10, 10, 0.5); }\n\n.orbit-previous, .orbit-next {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n z-index: 10;\n padding: 1rem;\n color: #fefefe; }\n [data-whatinput='mouse'] .orbit-previous, [data-whatinput='mouse'] .orbit-next {\n outline: 0; }\n .orbit-previous:hover, .orbit-next:hover, .orbit-previous:active, .orbit-next:active, .orbit-previous:focus, .orbit-next:focus {\n background-color: rgba(10, 10, 10, 0.5); }\n\n.orbit-previous {\n left: 0; }\n\n.orbit-next {\n left: auto;\n right: 0; }\n\n.orbit-bullets {\n position: relative;\n margin-top: 0.8rem;\n margin-bottom: 0.8rem;\n text-align: center; }\n [data-whatinput='mouse'] .orbit-bullets {\n outline: 0; }\n .orbit-bullets button {\n width: 1.2rem;\n height: 1.2rem;\n margin: 0.1rem;\n background-color: #cacaca;\n border-radius: 50%; }\n .orbit-bullets button:hover {\n background-color: #8a8a8a; }\n .orbit-bullets button.is-active {\n background-color: #8a8a8a; }\n\n.pagination {\n margin-left: 0;\n margin-bottom: 1rem; }\n .pagination::before, .pagination::after {\n content: ' ';\n display: table; }\n .pagination::after {\n clear: both; }\n .pagination li {\n font-size: 0.875rem;\n margin-right: 0.0625rem;\n border-radius: 0;\n display: none; }\n .pagination li:last-child, .pagination li:first-child {\n display: inline-block; }\n @media screen and (min-width: 40em) {\n .pagination li {\n display: inline-block; } }\n .pagination a,\n .pagination button {\n color: #0a0a0a;\n display: block;\n padding: 0.1875rem 0.625rem;\n border-radius: 0; }\n .pagination a:hover,\n .pagination button:hover {\n background: #e6e6e6; }\n .pagination .current {\n padding: 0.1875rem 0.625rem;\n background: #3f47cc;\n color: #fefefe;\n cursor: default; }\n .pagination .disabled {\n padding: 0.1875rem 0.625rem;\n color: #cacaca;\n cursor: not-allowed; }\n .pagination .disabled:hover {\n background: transparent; }\n .pagination .ellipsis::after {\n content: '\\2026';\n padding: 0.1875rem 0.625rem;\n color: #0a0a0a; }\n\n.pagination-previous a::before,\n.pagination-previous.disabled::before {\n content: '\\00ab';\n display: inline-block;\n margin-right: 0.5rem; }\n\n.pagination-next a::after,\n.pagination-next.disabled::after {\n content: '\\00bb';\n display: inline-block;\n margin-left: 0.5rem; }\n\n.progress {\n background-color: #cacaca;\n height: 1rem;\n margin-bottom: 1rem;\n border-radius: 0; }\n .progress.primary .progress-meter {\n background-color: #2199e8; }\n .progress.secondary .progress-meter {\n background-color: #777; }\n .progress.success .progress-meter {\n background-color: #3adb76; }\n .progress.warning .progress-meter {\n background-color: #ffae00; }\n .progress.alert .progress-meter {\n background-color: #ec5840; }\n\n.progress-meter {\n position: relative;\n display: block;\n width: 0%;\n height: 100%;\n background-color: #3f47cc; }\n\n.progress-meter-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n position: absolute;\n margin: 0;\n font-size: 0.75rem;\n font-weight: bold;\n color: #fefefe;\n white-space: nowrap; }\n\nprogress {\n -webkit-appearance: none;\n -moz-appearance: none;\n display: block;\n width: 100%;\n height: 1rem;\n margin-bottom: 1rem;\n border-radius: 0;\n background: #cacaca;\n border: 0; }\n progress::-webkit-progress-bar {\n background: #cacaca;\n border-radius: 0; }\n progress::-webkit-progress-value {\n background: #3f47cc;\n border-radius: 0; }\n progress::-moz-progress-bar {\n background: #3f47cc;\n border-radius: 0; }\n progress.primary {\n color: #2199e8; }\n progress.primary::-webkit-progress-value {\n background: #2199e8; }\n progress.primary::-moz-progress-bar {\n background: #2199e8; }\n progress.secondary {\n color: #777; }\n progress.secondary::-webkit-progress-value {\n background: #777; }\n progress.secondary::-moz-progress-bar {\n background: #777; }\n progress.success {\n color: #3adb76; }\n progress.success::-webkit-progress-value {\n background: #3adb76; }\n progress.success::-moz-progress-bar {\n background: #3adb76; }\n progress.warning {\n color: #ffae00; }\n progress.warning::-webkit-progress-value {\n background: #ffae00; }\n progress.warning::-moz-progress-bar {\n background: #ffae00; }\n progress.alert {\n color: #ec5840; }\n progress.alert::-webkit-progress-value {\n background: #ec5840; }\n progress.alert::-moz-progress-bar {\n background: #ec5840; }\n\nmeter {\n -webkit-appearance: none;\n -moz-appearance: none;\n display: block;\n width: 100%;\n height: 1rem;\n margin-bottom: 1rem;\n background: #cacaca;\n border: 0; }\n meter::-webkit-meter-bar {\n background: #cacaca; }\n meter::-webkit-meter-optimum-value {\n background: #3adb76; }\n meter::-webkit-meter-suboptimum-value {\n background: #ffae00; }\n meter::-webkit-meter-even-less-good-value {\n background: #ec5840; }\n meter::-moz-meter-bar {\n background: #2199e8; }\n meter:-moz-meter-optimum::-moz-meter-bar {\n background: #3adb76; }\n meter:-moz-meter-sub-optimum::-moz-meter-bar {\n background: #ffae00; }\n meter:-moz-meter-sub-sub-optimum::-moz-meter-bar {\n background: #ec5840; }\n\n.slider {\n position: relative;\n height: 0.5rem;\n margin-top: 1.25rem;\n margin-bottom: 2.25rem;\n background-color: #e6e6e6;\n cursor: pointer;\n user-select: none;\n touch-action: none; }\n\n.slider-fill {\n position: absolute;\n top: 0;\n left: 0;\n display: inline-block;\n max-width: 100%;\n height: 0.5rem;\n background-color: #cacaca;\n transition: all 0.2s ease-in-out; }\n .slider-fill.is-dragging {\n transition: all 0s linear; }\n\n.slider-handle {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n position: absolute;\n left: 0;\n z-index: 1;\n display: inline-block;\n width: 1.4rem;\n height: 1.4rem;\n background-color: #3f47cc;\n transition: all 0.2s ease-in-out;\n touch-action: manipulation;\n border-radius: 0; }\n [data-whatinput='mouse'] .slider-handle {\n outline: 0; }\n .slider-handle:hover {\n background-color: #3037b3; }\n .slider-handle.is-dragging {\n transition: all 0s linear; }\n\n.slider.disabled,\n.slider[disabled] {\n opacity: 0.25;\n cursor: not-allowed; }\n\n.slider.vertical {\n display: inline-block;\n width: 0.5rem;\n height: 12.5rem;\n margin: 0 1.25rem;\n transform: scale(1, -1); }\n .slider.vertical .slider-fill {\n top: 0;\n width: 0.5rem;\n max-height: 100%; }\n .slider.vertical .slider-handle {\n position: absolute;\n top: 0;\n left: 50%;\n width: 1.4rem;\n height: 1.4rem;\n transform: translateX(-50%); }\n\n.sticky-container {\n position: relative; }\n\n.sticky {\n position: absolute;\n z-index: 0;\n transform: translate3d(0, 0, 0); }\n\n.sticky.is-stuck {\n position: fixed;\n z-index: 5; }\n .sticky.is-stuck.is-at-top {\n top: 0; }\n .sticky.is-stuck.is-at-bottom {\n bottom: 0; }\n\n.sticky.is-anchored {\n position: absolute;\n left: auto;\n right: auto; }\n .sticky.is-anchored.is-at-bottom {\n bottom: 0; }\n\nbody.is-reveal-open {\n overflow: hidden; }\n\n.reveal-overlay {\n display: none;\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1005;\n background-color: rgba(10, 10, 10, 0.45);\n overflow-y: scroll; }\n\n.reveal {\n display: none;\n z-index: 1006;\n padding: 1rem;\n border: 1px solid #cacaca;\n background-color: #fefefe;\n border-radius: 0;\n position: relative;\n top: 100px;\n margin-left: auto;\n margin-right: auto;\n overflow-y: auto; }\n [data-whatinput='mouse'] .reveal {\n outline: 0; }\n @media screen and (min-width: 40em) {\n .reveal {\n min-height: 0; } }\n .reveal .column, .reveal .columns,\n .reveal .columns {\n min-width: 0; }\n .reveal > :last-child {\n margin-bottom: 0; }\n @media screen and (min-width: 40em) {\n .reveal {\n width: 600px;\n max-width: 75rem; } }\n @media screen and (min-width: 40em) {\n .reveal .reveal {\n left: auto;\n right: auto;\n margin: 0 auto; } }\n .reveal.collapse {\n padding: 0; }\n @media screen and (min-width: 40em) {\n .reveal.tiny {\n width: 30%;\n max-width: 75rem; } }\n @media screen and (min-width: 40em) {\n .reveal.small {\n width: 50%;\n max-width: 75rem; } }\n @media screen and (min-width: 40em) {\n .reveal.large {\n width: 90%;\n max-width: 75rem; } }\n .reveal.full {\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n height: 100vh;\n min-height: 100vh;\n max-width: none;\n margin-left: 0;\n border: 0;\n border-radius: 0; }\n @media screen and (max-width: 39.9375em) {\n .reveal {\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n height: 100vh;\n min-height: 100vh;\n max-width: none;\n margin-left: 0;\n border: 0;\n border-radius: 0; } }\n .reveal.without-overlay {\n position: fixed; }\n\n.switch {\n margin-bottom: 1rem;\n outline: 0;\n position: relative;\n user-select: none;\n color: #fefefe;\n font-weight: bold;\n font-size: 0.875rem; }\n\n.switch-input {\n opacity: 0;\n position: absolute; }\n\n.switch-paddle {\n background: #cacaca;\n cursor: pointer;\n display: block;\n position: relative;\n width: 4rem;\n height: 2rem;\n transition: all 0.25s ease-out;\n border-radius: 0;\n color: inherit;\n font-weight: inherit; }\n input + .switch-paddle {\n margin: 0; }\n .switch-paddle::after {\n background: #fefefe;\n content: '';\n display: block;\n position: absolute;\n height: 1.5rem;\n left: 0.25rem;\n top: 0.25rem;\n width: 1.5rem;\n transition: all 0.25s ease-out;\n transform: translate3d(0, 0, 0);\n border-radius: 0; }\n input:checked ~ .switch-paddle {\n background: #3f47cc; }\n input:checked ~ .switch-paddle::after {\n left: 2.25rem; }\n [data-whatinput='mouse'] input:focus ~ .switch-paddle {\n outline: 0; }\n\n.switch-active, .switch-inactive {\n position: absolute;\n top: 50%;\n transform: translateY(-50%); }\n\n.switch-active {\n left: 8%;\n display: none; }\n input:checked + label > .switch-active {\n display: block; }\n\n.switch-inactive {\n right: 15%; }\n input:checked + label > .switch-inactive {\n display: none; }\n\n.switch.tiny .switch-paddle {\n width: 3rem;\n height: 1.5rem;\n font-size: 0.625rem; }\n\n.switch.tiny .switch-paddle::after {\n width: 1rem;\n height: 1rem; }\n\n.switch.tiny input:checked ~ .switch-paddle::after {\n left: 1.75rem; }\n\n.switch.small .switch-paddle {\n width: 3.5rem;\n height: 1.75rem;\n font-size: 0.75rem; }\n\n.switch.small .switch-paddle::after {\n width: 1.25rem;\n height: 1.25rem; }\n\n.switch.small input:checked ~ .switch-paddle::after {\n left: 2rem; }\n\n.switch.large .switch-paddle {\n width: 5rem;\n height: 2.5rem;\n font-size: 1rem; }\n\n.switch.large .switch-paddle::after {\n width: 2rem;\n height: 2rem; }\n\n.switch.large input:checked ~ .switch-paddle::after {\n left: 2.75rem; }\n\ntable {\n width: 100%;\n margin-bottom: 1rem;\n border-radius: 0; }\n table thead,\n table tbody,\n table tfoot {\n border: 1px solid #f1f1f1;\n background-color: #fefefe; }\n table caption {\n font-weight: bold;\n padding: 0.5rem 0.625rem 0.625rem; }\n table thead,\n table tfoot {\n background: #f8f8f8;\n color: #0a0a0a; }\n table thead tr,\n table tfoot tr {\n background: transparent; }\n table thead th,\n table thead td,\n table tfoot th,\n table tfoot td {\n padding: 0.5rem 0.625rem 0.625rem;\n font-weight: bold;\n text-align: left; }\n table tbody tr:nth-child(even) {\n background-color: #f1f1f1; }\n table tbody th,\n table tbody td {\n padding: 0.5rem 0.625rem 0.625rem; }\n\n@media screen and (max-width: 63.9375em) {\n table.stack thead {\n display: none; }\n table.stack tfoot {\n display: none; }\n table.stack tr,\n table.stack th,\n table.stack td {\n display: block; }\n table.stack td {\n border-top: 0; } }\n\ntable.scroll {\n display: block;\n width: 100%;\n overflow-x: auto; }\n\ntable.hover tr:hover {\n background-color: #f9f9f9; }\n\ntable.hover tr:nth-of-type(even):hover {\n background-color: #ececec; }\n\n.table-scroll {\n overflow-x: auto; }\n .table-scroll table {\n width: auto; }\n\n.tabs {\n margin: 0;\n list-style-type: none;\n background: #fefefe;\n border: 1px solid #e6e6e6; }\n .tabs::before, .tabs::after {\n content: ' ';\n display: table; }\n .tabs::after {\n clear: both; }\n\n.tabs.vertical > li {\n width: auto;\n float: none;\n display: block; }\n\n.tabs.simple > li > a {\n padding: 0; }\n .tabs.simple > li > a:hover {\n background: transparent; }\n\n.tabs.primary {\n background: #2199e8; }\n .tabs.primary > li > a {\n color: #fefefe; }\n .tabs.primary > li > a:hover, .tabs.primary > li > a:focus {\n background: #1893e4; }\n\n.tabs-title {\n float: left; }\n .tabs-title > a {\n display: block;\n padding: 1.25rem 1.5rem;\n line-height: 1;\n font-size: 0.75rem; }\n .tabs-title > a:hover {\n background: #fefefe; }\n .tabs-title > a:focus, .tabs-title > a[aria-selected='true'] {\n background: #e6e6e6; }\n\n.tabs-content {\n background: #fefefe;\n transition: all 0.5s ease;\n border: 1px solid #e6e6e6;\n border-top: 0; }\n\n.tabs-content.vertical {\n border: 1px solid #e6e6e6;\n border-left: 0; }\n\n.tabs-panel {\n display: none;\n padding: 1rem; }\n .tabs-panel.is-active {\n display: block; }\n\n.thumbnail {\n border: solid 4px #fefefe;\n box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2);\n display: inline-block;\n line-height: 0;\n max-width: 100%;\n transition: box-shadow 200ms ease-out;\n border-radius: 0;\n margin-bottom: 1rem; }\n .thumbnail:hover, .thumbnail:focus {\n box-shadow: 0 0 6px 1px rgba(63, 71, 204, 0.5); }\n\n.title-bar {\n background: #0a0a0a;\n color: #fefefe;\n padding: 0.5rem; }\n .title-bar::before, .title-bar::after {\n content: ' ';\n display: table; }\n .title-bar::after {\n clear: both; }\n .title-bar .menu-icon {\n margin-left: 0.25rem;\n margin-right: 0.5rem; }\n\n.title-bar-left {\n float: left; }\n\n.title-bar-right {\n float: right;\n text-align: right; }\n\n.title-bar-title {\n font-weight: bold;\n vertical-align: middle;\n display: inline-block; }\n\n.menu-icon.dark {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n cursor: pointer;\n width: 20px;\n height: 16px; }\n .menu-icon.dark::after {\n content: '';\n position: absolute;\n display: block;\n width: 100%;\n height: 2px;\n background: #0a0a0a;\n top: 0;\n left: 0;\n box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; }\n .menu-icon.dark:hover::after {\n background: #8a8a8a;\n box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; }\n\n.has-tip {\n border-bottom: dotted 1px #8a8a8a;\n font-weight: bold;\n position: relative;\n display: inline-block;\n cursor: help; }\n\n.tooltip {\n background-color: #0a0a0a;\n color: #fefefe;\n font-size: 80%;\n padding: 0.75rem;\n position: absolute;\n z-index: 10;\n top: calc(100% + 0.6495rem);\n max-width: 10rem !important;\n border-radius: 0; }\n .tooltip::before {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 0.75rem;\n border-color: transparent transparent #0a0a0a;\n border-bottom-style: solid;\n border-top-width: 0;\n bottom: 100%;\n position: absolute;\n left: 50%;\n transform: translateX(-50%); }\n .tooltip.top::before {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 0.75rem;\n border-color: #0a0a0a transparent transparent;\n border-top-style: solid;\n border-bottom-width: 0;\n top: 100%;\n bottom: auto; }\n .tooltip.left::before {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 0.75rem;\n border-color: transparent transparent transparent #0a0a0a;\n border-left-style: solid;\n border-right-width: 0;\n bottom: auto;\n left: 100%;\n top: 50%;\n transform: translateY(-50%); }\n .tooltip.right::before {\n content: '';\n display: block;\n width: 0;\n height: 0;\n border: inset 0.75rem;\n border-color: transparent #0a0a0a transparent transparent;\n border-right-style: solid;\n border-left-width: 0;\n bottom: auto;\n left: auto;\n right: 100%;\n top: 50%;\n transform: translateY(-50%); }\n\n.top-bar {\n padding: 0; }\n .top-bar::before, .top-bar::after {\n content: ' ';\n display: table; }\n .top-bar::after {\n clear: both; }\n .top-bar,\n .top-bar ul {\n background-color: #121212; }\n .top-bar input {\n max-width: 200px;\n margin-right: 1rem; }\n .top-bar .input-group-field {\n width: 100%;\n margin-right: 0; }\n .top-bar input.button {\n width: auto; }\n .top-bar .top-bar-left,\n .top-bar .top-bar-right {\n width: 100%; }\n @media screen and (min-width: 40em) {\n .top-bar .top-bar-left,\n .top-bar .top-bar-right {\n width: auto; } }\n @media screen and (max-width: 63.9375em) {\n .top-bar.stacked-for-medium .top-bar-left,\n .top-bar.stacked-for-medium .top-bar-right {\n width: 100%; } }\n @media screen and (max-width: 74.9375em) {\n .top-bar.stacked-for-large .top-bar-left,\n .top-bar.stacked-for-large .top-bar-right {\n width: 100%; } }\n\n.top-bar-title {\n float: left;\n margin-right: 1rem; }\n\n.top-bar-left {\n float: left; }\n\n.top-bar-right {\n float: right; }\n\n.hide {\n display: none !important; }\n\n.invisible {\n visibility: hidden; }\n\n@media screen and (max-width: 39.9375em) {\n .hide-for-small-only {\n display: none !important; } }\n\n@media screen and (max-width: 0em), screen and (min-width: 40em) {\n .show-for-small-only {\n display: none !important; } }\n\n@media screen and (min-width: 40em) {\n .hide-for-medium {\n display: none !important; } }\n\n@media screen and (max-width: 39.9375em) {\n .show-for-medium {\n display: none !important; } }\n\n@media screen and (min-width: 40em) and (max-width: 63.9375em) {\n .hide-for-medium-only {\n display: none !important; } }\n\n@media screen and (max-width: 39.9375em), screen and (min-width: 64em) {\n .show-for-medium-only {\n display: none !important; } }\n\n@media screen and (min-width: 64em) {\n .hide-for-large {\n display: none !important; } }\n\n@media screen and (max-width: 63.9375em) {\n .show-for-large {\n display: none !important; } }\n\n@media screen and (min-width: 64em) and (max-width: 74.9375em) {\n .hide-for-large-only {\n display: none !important; } }\n\n@media screen and (max-width: 63.9375em), screen and (min-width: 75em) {\n .show-for-large-only {\n display: none !important; } }\n\n.show-for-sr,\n.show-on-focus {\n position: absolute !important;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0); }\n\n.show-on-focus:active, .show-on-focus:focus {\n position: static !important;\n height: auto;\n width: auto;\n overflow: visible;\n clip: auto; }\n\n.show-for-landscape,\n.hide-for-portrait {\n display: block !important; }\n @media screen and (orientation: landscape) {\n .show-for-landscape,\n .hide-for-portrait {\n display: block !important; } }\n @media screen and (orientation: portrait) {\n .show-for-landscape,\n .hide-for-portrait {\n display: none !important; } }\n\n.hide-for-landscape,\n.show-for-portrait {\n display: none !important; }\n @media screen and (orientation: landscape) {\n .hide-for-landscape,\n .show-for-portrait {\n display: none !important; } }\n @media screen and (orientation: portrait) {\n .hide-for-landscape,\n .show-for-portrait {\n display: block !important; } }\n\n.float-left {\n float: left !important; }\n\n.float-right {\n float: right !important; }\n\n.float-center {\n display: block;\n margin-left: auto;\n margin-right: auto; }\n\n.clearfix::before, .clearfix::after {\n content: ' ';\n display: table; }\n\n.clearfix::after {\n clear: both; }\n\n.menu-icon {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n cursor: pointer;\n width: 20px;\n height: 16px; }\n .menu-icon::after {\n content: '';\n position: absolute;\n display: block;\n width: 100%;\n height: 2px;\n background: #fefefe;\n top: 0;\n left: 0;\n box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe; }\n .menu-icon:hover::after {\n background: #cacaca;\n box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; }\n\n.menu-icon.dark {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n cursor: pointer;\n width: 20px;\n height: 16px; }\n .menu-icon.dark::after {\n content: '';\n position: absolute;\n display: block;\n width: 100%;\n height: 2px;\n background: #0a0a0a;\n top: 0;\n left: 0;\n box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; }\n .menu-icon.dark:hover::after {\n background: #8a8a8a;\n box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; }\n\n.slide-in-down.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: translateY(-100%);\n transition-property: transform, opacity;\n backface-visibility: hidden; }\n\n.slide-in-down.mui-enter.mui-enter-active {\n transform: translateY(0); }\n\n.slide-in-left.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: translateX(-100%);\n transition-property: transform, opacity;\n backface-visibility: hidden; }\n\n.slide-in-left.mui-enter.mui-enter-active {\n transform: translateX(0); }\n\n.slide-in-up.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: translateY(100%);\n transition-property: transform, opacity;\n backface-visibility: hidden; }\n\n.slide-in-up.mui-enter.mui-enter-active {\n transform: translateY(0); }\n\n.slide-in-right.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: translateX(100%);\n transition-property: transform, opacity;\n backface-visibility: hidden; }\n\n.slide-in-right.mui-enter.mui-enter-active {\n transform: translateX(0); }\n\n.slide-out-down.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: translateY(0);\n transition-property: transform, opacity;\n backface-visibility: hidden; }\n\n.slide-out-down.mui-leave.mui-leave-active {\n transform: translateY(100%); }\n\n.slide-out-right.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: translateX(0);\n transition-property: transform, opacity;\n backface-visibility: hidden; }\n\n.slide-out-right.mui-leave.mui-leave-active {\n transform: translateX(100%); }\n\n.slide-out-up.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: translateY(0);\n transition-property: transform, opacity;\n backface-visibility: hidden; }\n\n.slide-out-up.mui-leave.mui-leave-active {\n transform: translateY(-100%); }\n\n.slide-out-left.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: translateX(0);\n transition-property: transform, opacity;\n backface-visibility: hidden; }\n\n.slide-out-left.mui-leave.mui-leave-active {\n transform: translateX(-100%); }\n\n.fade-in.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n opacity: 0;\n transition-property: opacity; }\n\n.fade-in.mui-enter.mui-enter-active {\n opacity: 1; }\n\n.fade-out.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n opacity: 1;\n transition-property: opacity; }\n\n.fade-out.mui-leave.mui-leave-active {\n opacity: 0; }\n\n.hinge-in-from-top.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: perspective(2000px) rotateX(-90deg);\n transform-origin: top;\n transition-property: transform, opacity;\n opacity: 0; }\n\n.hinge-in-from-top.mui-enter.mui-enter-active {\n transform: perspective(2000px) rotate(0deg);\n opacity: 1; }\n\n.hinge-in-from-right.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: perspective(2000px) rotateY(-90deg);\n transform-origin: right;\n transition-property: transform, opacity;\n opacity: 0; }\n\n.hinge-in-from-right.mui-enter.mui-enter-active {\n transform: perspective(2000px) rotate(0deg);\n opacity: 1; }\n\n.hinge-in-from-bottom.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: perspective(2000px) rotateX(90deg);\n transform-origin: bottom;\n transition-property: transform, opacity;\n opacity: 0; }\n\n.hinge-in-from-bottom.mui-enter.mui-enter-active {\n transform: perspective(2000px) rotate(0deg);\n opacity: 1; }\n\n.hinge-in-from-left.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: perspective(2000px) rotateY(90deg);\n transform-origin: left;\n transition-property: transform, opacity;\n opacity: 0; }\n\n.hinge-in-from-left.mui-enter.mui-enter-active {\n transform: perspective(2000px) rotate(0deg);\n opacity: 1; }\n\n.hinge-in-from-middle-x.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: perspective(2000px) rotateX(-90deg);\n transform-origin: center;\n transition-property: transform, opacity;\n opacity: 0; }\n\n.hinge-in-from-middle-x.mui-enter.mui-enter-active {\n transform: perspective(2000px) rotate(0deg);\n opacity: 1; }\n\n.hinge-in-from-middle-y.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: perspective(2000px) rotateY(-90deg);\n transform-origin: center;\n transition-property: transform, opacity;\n opacity: 0; }\n\n.hinge-in-from-middle-y.mui-enter.mui-enter-active {\n transform: perspective(2000px) rotate(0deg);\n opacity: 1; }\n\n.hinge-out-from-top.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: perspective(2000px) rotate(0deg);\n transform-origin: top;\n transition-property: transform, opacity;\n opacity: 1; }\n\n.hinge-out-from-top.mui-leave.mui-leave-active {\n transform: perspective(2000px) rotateX(-90deg);\n opacity: 0; }\n\n.hinge-out-from-right.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: perspective(2000px) rotate(0deg);\n transform-origin: right;\n transition-property: transform, opacity;\n opacity: 1; }\n\n.hinge-out-from-right.mui-leave.mui-leave-active {\n transform: perspective(2000px) rotateY(-90deg);\n opacity: 0; }\n\n.hinge-out-from-bottom.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: perspective(2000px) rotate(0deg);\n transform-origin: bottom;\n transition-property: transform, opacity;\n opacity: 1; }\n\n.hinge-out-from-bottom.mui-leave.mui-leave-active {\n transform: perspective(2000px) rotateX(90deg);\n opacity: 0; }\n\n.hinge-out-from-left.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: perspective(2000px) rotate(0deg);\n transform-origin: left;\n transition-property: transform, opacity;\n opacity: 1; }\n\n.hinge-out-from-left.mui-leave.mui-leave-active {\n transform: perspective(2000px) rotateY(90deg);\n opacity: 0; }\n\n.hinge-out-from-middle-x.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: perspective(2000px) rotate(0deg);\n transform-origin: center;\n transition-property: transform, opacity;\n opacity: 1; }\n\n.hinge-out-from-middle-x.mui-leave.mui-leave-active {\n transform: perspective(2000px) rotateX(-90deg);\n opacity: 0; }\n\n.hinge-out-from-middle-y.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: perspective(2000px) rotate(0deg);\n transform-origin: center;\n transition-property: transform, opacity;\n opacity: 1; }\n\n.hinge-out-from-middle-y.mui-leave.mui-leave-active {\n transform: perspective(2000px) rotateY(-90deg);\n opacity: 0; }\n\n.scale-in-up.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: scale(0.5);\n transition-property: transform, opacity;\n opacity: 0; }\n\n.scale-in-up.mui-enter.mui-enter-active {\n transform: scale(1);\n opacity: 1; }\n\n.scale-in-down.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: scale(1.5);\n transition-property: transform, opacity;\n opacity: 0; }\n\n.scale-in-down.mui-enter.mui-enter-active {\n transform: scale(1);\n opacity: 1; }\n\n.scale-out-up.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: scale(1);\n transition-property: transform, opacity;\n opacity: 1; }\n\n.scale-out-up.mui-leave.mui-leave-active {\n transform: scale(1.5);\n opacity: 0; }\n\n.scale-out-down.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: scale(1);\n transition-property: transform, opacity;\n opacity: 1; }\n\n.scale-out-down.mui-leave.mui-leave-active {\n transform: scale(0.5);\n opacity: 0; }\n\n.spin-in.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: rotate(-0.75turn);\n transition-property: transform, opacity;\n opacity: 0; }\n\n.spin-in.mui-enter.mui-enter-active {\n transform: rotate(0);\n opacity: 1; }\n\n.spin-out.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: rotate(0);\n transition-property: transform, opacity;\n opacity: 1; }\n\n.spin-out.mui-leave.mui-leave-active {\n transform: rotate(0.75turn);\n opacity: 0; }\n\n.spin-in-ccw.mui-enter {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: rotate(0.75turn);\n transition-property: transform, opacity;\n opacity: 0; }\n\n.spin-in-ccw.mui-enter.mui-enter-active {\n transform: rotate(0);\n opacity: 1; }\n\n.spin-out-ccw.mui-leave {\n transition-duration: 500ms;\n transition-timing-function: linear;\n transform: rotate(0);\n transition-property: transform, opacity;\n opacity: 1; }\n\n.spin-out-ccw.mui-leave.mui-leave-active {\n transform: rotate(-0.75turn);\n opacity: 0; }\n\n.slow {\n transition-duration: 750ms !important; }\n\n.fast {\n transition-duration: 250ms !important; }\n\n.linear {\n transition-timing-function: linear !important; }\n\n.ease {\n transition-timing-function: ease !important; }\n\n.ease-in {\n transition-timing-function: ease-in !important; }\n\n.ease-out {\n transition-timing-function: ease-out !important; }\n\n.ease-in-out {\n transition-timing-function: ease-in-out !important; }\n\n.bounce-in {\n transition-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; }\n\n.bounce-out {\n transition-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; }\n\n.bounce-in-out {\n transition-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; }\n\n.short-delay {\n transition-delay: 300ms !important; }\n\n.long-delay {\n transition-delay: 700ms !important; }\n\n.shake {\n animation-name: shake-7; }\n\n@keyframes shake-7 {\n 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90% {\n transform: translateX(7%); }\n 5%, 15%, 25%, 35%, 45%, 55%, 65%, 75%, 85%, 95% {\n transform: translateX(-7%); } }\n\n.spin-cw {\n animation-name: spin-cw-1turn; }\n\n@keyframes spin-cw-1turn {\n 0% {\n transform: rotate(-1turn); }\n 100% {\n transform: rotate(0); } }\n\n.spin-ccw {\n animation-name: spin-cw-1turn; }\n\n@keyframes spin-cw-1turn {\n 0% {\n transform: rotate(0); }\n 100% {\n transform: rotate(1turn); } }\n\n.wiggle {\n animation-name: wiggle-7deg; }\n\n@keyframes wiggle-7deg {\n 40%, 50%, 60% {\n transform: rotate(7deg); }\n 35%, 45%, 55%, 65% {\n transform: rotate(-7deg); }\n 0%, 30%, 70%, 100% {\n transform: rotate(0); } }\n\n.shake,\n.spin-cw,\n.spin-ccw,\n.wiggle {\n animation-duration: 500ms; }\n\n.infinite {\n animation-iteration-count: infinite; }\n\n.slow {\n animation-duration: 750ms !important; }\n\n.fast {\n animation-duration: 250ms !important; }\n\n.linear {\n animation-timing-function: linear !important; }\n\n.ease {\n animation-timing-function: ease !important; }\n\n.ease-in {\n animation-timing-function: ease-in !important; }\n\n.ease-out {\n animation-timing-function: ease-out !important; }\n\n.ease-in-out {\n animation-timing-function: ease-in-out !important; }\n\n.bounce-in {\n animation-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; }\n\n.bounce-out {\n animation-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; }\n\n.bounce-in-out {\n animation-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; }\n\n.short-delay {\n animation-delay: 300ms !important; }\n\n.long-delay {\n animation-delay: 700ms !important; }\n\n/*\n My custom styles:\n Add your scss files below to structure your project styles\n*/\n/* Navigation breakpoints */\n@media screen and (max-width: 39.9375em) {\n .desktop-menu, .top-bar-left {\n display: none !important; } }\n\n@media screen and (min-width: 40em) {\n #mobile-menu, .title-bar {\n display: none !important; } }\n\n/* Mobile menu */\nnav#mobile-menu {\n background-color: #0a0a0a; }\n\n.off-canvas ul#menu-main-menu {\n height: 100vh;\n padding: 1rem; }\n\n.title-bar-title a {\n font-size: 1rem;\n color: #B9B9B9; }\n\n/* Tablet and desktop menu */\n.top-bar-right ul {\n background-color: transparent; }\n\n.top-bar-container {\n background-color: rgba(254, 254, 254, 0.65);\n z-index: 999;\n height: 0px !important; }\n\n.top-bar {\n min-height: 85px;\n padding: 5px 20px;\n margin: 0 auto;\n background-color: transparent; }\n .top-bar img#logo-s {\n visibility: hidden;\n height: 40px; }\n .top-bar div#nav-wrapper {\n max-width: 1240px;\n margin: 0 auto; }\n .top-bar div#nav-wrapper .top-bar-right {\n margin-top: 22px; }\n .top-bar img#logo {\n max-height: 100px;\n margin-top: 20px;\n background-color: rgba(255, 255, 255, 0.59); }\n .top-bar .menu .home a {\n font-size: 1rem;\n color: #fefefe; }\n .top-bar .menu a {\n height: 45px;\n line-height: 45px;\n color: #fefefe;\n padding-top: 0;\n padding-bottom: 0;\n font-weight: bold;\n font-size: 1.3rem;\n line-height: 1;\n text-transform: capitalize;\n letter-spacing: 0.5px; }\n .top-bar .menu a:hover:not(.button) {\n background-color: transparent;\n color: #60FF00; }\n .top-bar .menu .active > a {\n background-color: transparent;\n color: #60FF00; }\n .top-bar .menu > li:not(.menu-text) > a {\n padding: 1rem; }\n .top-bar .dropdown.menu .submenu {\n background-color: rgba(0, 0, 0, 0.36);\n color: #fefefe;\n border: 0; }\n .top-bar .dropdown.menu .submenu li {\n border-bottom: solid 1px #000; }\n .top-bar .dropdown.menu .has-submenu.is-down-arrow a {\n padding-right: 1rem; }\n .top-bar .dropdown.menu .has-submenu.is-down-arrow > a::after {\n border: 0; }\n\n.dropdown.menu > li.is-dropdown-submenu-parent > a::after {\n display: none; }\n\n.sticky.is-stuck.is-at-top {\n background-color: rgba(241, 237, 237, 0.95);\n box-shadow: 0 0 10px rgba(10, 10, 10, 0.4); }\n .sticky.is-stuck.is-at-top .top-bar {\n min-height: 40px; }\n .sticky.is-stuck.is-at-top .top-bar div#nav-wrapper .top-bar-right {\n margin-top: 0px; }\n .sticky.is-stuck.is-at-top .top-bar ul#menu-topmenu {\n background-color: transparent; }\n .sticky.is-stuck.is-at-top .top-bar .menu a {\n color: #0a0a0a; }\n .sticky.is-stuck.is-at-top .top-bar .menu .active > a {\n color: #60FF00; }\n .sticky.is-stuck.is-at-top .top-bar .dropdown.menu .submenu {\n background-color: rgba(241, 237, 237, 0.95);\n color: #0a0a0a; }\n .sticky.is-stuck.is-at-top .top-bar .dropdown.menu .submenu li {\n border-bottom: solid 1px #000; }\n .sticky.is-stuck.is-at-top .top-bar img#logo {\n visibility: hidden;\n height: 1px; }\n .sticky.is-stuck.is-at-top .top-bar img#logo-s {\n visibility: visible; }\n\n#footer-container {\n max-width: 100%;\n width: 100%;\n margin: 0 auto;\n border-top: 1px solid #ccc;\n margin-top: 3.75rem;\n background-color: #272727;\n color: #e8e8e8;\n font-size: 1rem;\n font-family: 'Open Sans', sans-serif; }\n #footer-container #footer {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto;\n padding: 1.875rem 0; }\n #footer-container #footer::before, #footer-container #footer::after {\n content: ' ';\n display: table; }\n #footer-container #footer::after {\n clear: both; }\n #footer-container #footer article#nav_menu-2 {\n padding-left: 60px; }\n #footer-container #footer ul {\n list-style-type: none;\n margin: 0;\n padding: 0;\n display: inline-block;\n width: 200px; }\n #footer-container #footer ul li {\n float: left;\n position: relative; }\n #footer-container #footer ul li:before {\n content: \"\\f054\";\n font-family: FontAwesome;\n left: -1px;\n position: absolute;\n font-size: 13px;\n top: 10px; }\n #footer-container #footer ul li > a {\n color: #fefefe; }\n #footer-container #footer address.vcard {\n font-style: normal;\n position: relative; }\n #footer-container #footer address.vcard a {\n display: block;\n padding: 0 0 5px 16px;\n color: #e8e8e8;\n font-size: 1rem;\n font-family: 'Open Sans', sans-serif; }\n #footer-container #footer address.vcard a.url.fn.org {\n color: #3f47cc;\n font-size: 2rem;\n font-weight: bold;\n padding: 0 0 10px 0; }\n #footer-container #footer address.vcard a.email:before {\n content: \"\\f003\";\n font-family: FontAwesome;\n left: -1px;\n position: absolute;\n font-size: 13px;\n padding-top: 5px; }\n #footer-container #footer address.vcard span.tel {\n padding: 0 0 10px 16px; }\n #footer-container #footer address.vcard span.tel:before {\n content: \"\\f095\";\n font-family: FontAwesome;\n left: -1px;\n position: absolute;\n font-size: 13px;\n padding-top: 5px; }\n #footer-container #footer address.vcard span.adr {\n padding: 10px 0 10px 16px; }\n #footer-container #footer address.vcard span.adr:before {\n content: \"\\f041\";\n font-family: FontAwesome;\n left: -1px;\n position: absolute;\n font-size: 13px; }\n #footer-container div#copiright-wrapper {\n font-size: 0.9rem;\n border-top: rgba(51, 49, 49, 0.84) solid 1px;\n background-color: #222121;\n height: 65px;\n padding-top: 20px; }\n #footer-container div#copiright-wrapper #copiright-content {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto; }\n #footer-container div#copiright-wrapper #copiright-content::before, #footer-container div#copiright-wrapper #copiright-content::after {\n content: ' ';\n display: table; }\n #footer-container div#copiright-wrapper #copiright-content::after {\n clear: both; }\n #footer-container div#copiright-wrapper #copiright-content .copiright-text, #footer-container div#copiright-wrapper #copiright-content .copiright-oe {\n background-color: #222121; }\n #footer-container div#copiright-wrapper #copiright-content img.oe {\n margin-top: -7px; }\n\n.sidebar {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n @media screen and (min-width: 40em) {\n .sidebar {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n .sidebar:last-child:not(:first-child) {\n float: right; }\n @media screen and (min-width: 40em) {\n .sidebar {\n width: 33.33333%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n margin-top: 1rem; } }\n @media screen and (min-width: 40em) and (min-width: 40em) {\n .sidebar {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n @media screen and (min-width: 40em) {\n .sidebar:last-child:not(:first-child) {\n float: right; } }\n\n.sites-button {\n background: #FF6908;\n font-size: 1.25rem;\n font-weight: bold;\n box-shadow: 0 -2px 0 rgba(0, 0, 0, 0.2) inset;\n border-radius: 3px;\n border: none; }\n\na.home-hero-button {\n background: transparent;\n font-size: 1.7rem;\n color: #fefefe;\n border: 1px solid #fefefe;\n padding: 15px; }\n\na.home-hero-button:hover {\n background-color: rgba(254, 254, 254, 0.19);\n color: #3f47cc; }\n\n#featured-hero {\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n margin: 0 0 2rem;\n position: relative;\n height: 12.5rem; }\n\n.no-featured-image-set {\n height: 1rem !important; }\n\n@media screen and (min-width: 40em) {\n #featured-hero {\n height: 25rem; } }\n\n.dotted, .section-divider hr {\n border-style: dashed;\n margin: 2rem 0; }\n\n/* Apply outline styles only when input method is keyboard\n * remove :focus style via What Input using progressive enhancement\n * so :focus isn't left broken if JavaScript fails\n */\n[data-whatinput=\"mouse\"] a:focus, button:focus\n[data-whatinput=\"touch\"] a:focus, button:focus {\n outline: none; }\n\n/*\n* to use in the Page builder\n*/\n.panel-row-style-separator .sow-slider-image-wrapper {\n padding-top: 90px !important;\n padding-top: 20px !important; }\n @media screen and (min-width: 40em) {\n .panel-row-style-separator .sow-slider-image-wrapper {\n padding-top: 200px !important; } }\n\n.panel-row-style-home-hero-banner .home-hero.panel-widget-style .sow-slider-image-wrapper {\n padding-top: 80px !important; }\n @media screen and (min-width: 40em) {\n .panel-row-style-home-hero-banner .home-hero.panel-widget-style .sow-slider-image-wrapper {\n padding-top: 350px !important; } }\n\n.sow-slider-image-wrapper .sow-slider-content-wrapper .sow-slider-content {\n color: #fefefe;\n font-size: 4rem;\n line-height: 5rem;\n margin-bottom: 70px; }\n\n.more-down {\n margin-top: 250px; }\n\n.js div#preloader {\n position: fixed;\n left: 0;\n top: 0;\n z-index: 999;\n width: 100%;\n height: 100%;\n overflow: visible;\n background: #333 url(\"http://files.mimoymima.com/images/loading.gif\") no-repeat center center; }\n\np {\n line-height: 1.2;\n margin-bottom: 1rem;\n text-rendering: optimizeLegibility;\n vertical-align: baseline;\n -webkit-font-smoothing: antialiased;\n font-family: 'Open Sans', Arial;\n font-weight: 400;\n font-size: 1.2rem; }\n\n.intro {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto; }\n .intro::before, .intro::after {\n content: ' ';\n display: table; }\n .intro::after {\n clear: both; }\n .intro .fp-intro {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n @media screen and (min-width: 40em) {\n .intro .fp-intro {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n .intro .fp-intro:last-child:not(:first-child) {\n float: right; }\n @media screen and (min-width: 40em) {\n .intro .fp-intro {\n width: 83.33333%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n margin-left: 8.33333%; } }\n @media screen and (min-width: 40em) and (min-width: 40em) {\n .intro .fp-intro {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n @media screen and (min-width: 40em) {\n .intro .fp-intro:last-child:not(:first-child) {\n float: right; }\n .intro .fp-intro h2 {\n font-weight: 300;\n margin-bottom: 1.5rem; }\n .intro .fp-intro h4 {\n font-size: 1.125rem;\n line-height: 1.6;\n color: #3F47CC;\n margin-bottom: 0.1rem; } }\n\n.section-divider {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto; }\n .section-divider::before, .section-divider::after {\n content: ' ';\n display: table; }\n .section-divider::after {\n clear: both; }\n .section-divider hr {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n box-sizing: border-box; }\n @media screen and (min-width: 40em) {\n .section-divider hr {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n .section-divider hr:last-child:not(:first-child) {\n float: right; }\n\n.benefits {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto;\n text-align: center; }\n .benefits::before, .benefits::after {\n content: ' ';\n display: table; }\n .benefits::after {\n clear: both; }\n .benefits header {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n @media screen and (min-width: 40em) {\n .benefits header {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n .benefits header:last-child:not(:first-child) {\n float: right; }\n .benefits header h2 {\n font-weight: 300; }\n .benefits header h4 {\n font-size: 1.125rem;\n line-height: 1.6;\n color: #777; }\n .benefits .semantic,\n .benefits .responsive,\n .benefits .customizable,\n .benefits .professional {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n @media screen and (min-width: 40em) {\n .benefits .semantic,\n .benefits .responsive,\n .benefits .customizable,\n .benefits .professional {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n .benefits .semantic:last-child:not(:first-child),\n .benefits .responsive:last-child:not(:first-child),\n .benefits .customizable:last-child:not(:first-child),\n .benefits .professional:last-child:not(:first-child) {\n float: right; }\n @media screen and (min-width: 40em) {\n .benefits .semantic,\n .benefits .responsive,\n .benefits .customizable,\n .benefits .professional {\n width: 25%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; } }\n @media screen and (min-width: 40em) and (min-width: 40em) {\n .benefits .semantic,\n .benefits .responsive,\n .benefits .customizable,\n .benefits .professional {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n @media screen and (min-width: 40em) {\n .benefits .semantic:last-child:not(:first-child),\n .benefits .responsive:last-child:not(:first-child),\n .benefits .customizable:last-child:not(:first-child),\n .benefits .professional:last-child:not(:first-child) {\n float: right; } }\n .benefits .semantic img,\n .benefits .responsive img,\n .benefits .customizable img,\n .benefits .professional img {\n padding: 1.25rem;\n margin: 1rem auto 0 auto; }\n .benefits .semantic h3,\n .benefits .responsive h3,\n .benefits .customizable h3,\n .benefits .professional h3 {\n color: #0a0a0a;\n font-weight: 300;\n font-size: 1.75rem; }\n .benefits .semantic p,\n .benefits .responsive p,\n .benefits .customizable p,\n .benefits .professional p {\n font-size: 0.9375rem; }\n .benefits .why-foundation {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto;\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n margin-top: 4rem; }\n .benefits .why-foundation::before, .benefits .why-foundation::after {\n content: ' ';\n display: table; }\n .benefits .why-foundation::after {\n clear: both; }\n @media screen and (min-width: 40em) {\n .benefits .why-foundation {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n .benefits .why-foundation:last-child:not(:first-child) {\n float: right; }\n\n#kitchen-sink {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto;\n margin-top: 3rem; }\n #kitchen-sink::before, #kitchen-sink::after {\n content: ' ';\n display: table; }\n #kitchen-sink::after {\n clear: both; }\n #kitchen-sink header {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n @media screen and (min-width: 40em) {\n #kitchen-sink header {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n #kitchen-sink header:last-child:not(:first-child) {\n float: right; }\n #kitchen-sink header .lead {\n font-size: 125%;\n line-height: 1.6; }\n #kitchen-sink #components {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n #kitchen-sink #components hr {\n margin: 3rem 0; }\n @media screen and (min-width: 40em) {\n #kitchen-sink #components {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n #kitchen-sink #components:last-child:not(:first-child) {\n float: right; }\n @media screen and (min-width: 64em) {\n #kitchen-sink #components {\n width: 75%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; } }\n @media screen and (min-width: 64em) and (min-width: 40em) {\n #kitchen-sink #components {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n @media screen and (min-width: 64em) {\n #kitchen-sink #components:last-child:not(:first-child) {\n float: right; } }\n #kitchen-sink #kitchen-sink-nav {\n display: none; }\n @media screen and (min-width: 64em) {\n #kitchen-sink #kitchen-sink-nav {\n width: 25%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n display: block;\n float: right; } }\n @media screen and (min-width: 64em) and (min-width: 40em) {\n #kitchen-sink #kitchen-sink-nav {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n @media screen and (min-width: 64em) {\n #kitchen-sink #kitchen-sink-nav:last-child:not(:first-child) {\n float: right; }\n #kitchen-sink #kitchen-sink-nav .docs-sub-menu {\n font-size: 0.85rem;\n margin-top: 1rem; }\n #kitchen-sink #kitchen-sink-nav .docs-menu-title {\n text-transform: uppercase;\n font-size: 0.75rem;\n color: #999;\n font-weight: bold;\n line-height: 1;\n padding-left: 0.9rem;\n margin-bottom: 0.5rem;\n border-top: 1px solid #e9e9e9;\n margin-top: 1rem;\n padding-top: 1.5rem; }\n #kitchen-sink #kitchen-sink-nav .docs-toc {\n width: 100%;\n padding-left: 4rem;\n padding-right: 1rem; }\n #kitchen-sink #kitchen-sink-nav .docs-toc .active {\n background: #2199e8;\n color: white; }\n #kitchen-sink #kitchen-sink-nav .docs-toc .docs-sub-menu:first-child .docs-menu-title {\n margin-top: 0;\n border-top: 0;\n padding-top: 0; } }\n #kitchen-sink .row.display {\n background: #eee;\n font-size: 11px;\n margin-bottom: 10px;\n line-height: 2rem;\n border: solid 1px #c6c6c6;\n margin-left: 0 !important;\n margin-right: 0 !important; }\n #kitchen-sink .row.display .columns:nth-child(2), #kitchen-sink .row.display .columns.small-centered, #kitchen-sink .row.display .columns.large-centered {\n background: #e1e1e1; }\n\n#page {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto;\n margin-top: 3rem; }\n #page::before, #page::after {\n content: ' ';\n display: table; }\n #page::after {\n clear: both; }\n #page .main-content {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n @media screen and (min-width: 40em) {\n #page .main-content {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n #page .main-content:last-child:not(:first-child) {\n float: right; }\n @media screen and (min-width: 40em) {\n #page .main-content {\n width: 66.66667%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; } }\n @media screen and (min-width: 40em) and (min-width: 40em) {\n #page .main-content {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n @media screen and (min-width: 40em) {\n #page .main-content:last-child:not(:first-child) {\n float: right; } }\n\n#page-sidebar-left {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto;\n margin-top: 3rem; }\n #page-sidebar-left::before, #page-sidebar-left::after {\n content: ' ';\n display: table; }\n #page-sidebar-left::after {\n clear: both; }\n #page-sidebar-left .main-content {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n @media screen and (min-width: 40em) {\n #page-sidebar-left .main-content {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n #page-sidebar-left .main-content:last-child:not(:first-child) {\n float: right; }\n @media screen and (min-width: 40em) {\n #page-sidebar-left .main-content {\n width: 66.66667%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n position: relative;\n left: 33.33333%; } }\n @media screen and (min-width: 40em) and (min-width: 40em) {\n #page-sidebar-left .main-content {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n @media screen and (min-width: 40em) {\n #page-sidebar-left .main-content:last-child:not(:first-child) {\n float: right; } }\n #page-sidebar-left .sidebar {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n @media screen and (min-width: 40em) {\n #page-sidebar-left .sidebar {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n #page-sidebar-left .sidebar:last-child:not(:first-child) {\n float: right; }\n @media screen and (min-width: 40em) {\n #page-sidebar-left .sidebar {\n width: 33.33333%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n position: relative;\n left: -66.66667%;\n margin-top: 1rem; } }\n @media screen and (min-width: 40em) and (min-width: 40em) {\n #page-sidebar-left .sidebar {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n @media screen and (min-width: 40em) {\n #page-sidebar-left .sidebar:last-child:not(:first-child) {\n float: right; } }\n\n#page-full-width {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto;\n margin-top: 3rem; }\n #page-full-width::before, #page-full-width::after {\n content: ' ';\n display: table; }\n #page-full-width::after {\n clear: both; }\n #page-full-width .main-content {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n @media screen and (min-width: 40em) {\n #page-full-width .main-content {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n #page-full-width .main-content:last-child:not(:first-child) {\n float: right; }\n\n#blog-hero {\n background-size: cover;\n background-position: bottom;\n padding: 4.0625rem 0;\n margin: 0 0 2rem;\n position: relative;\n text-align: left;\n opacity: 1;\n max-height: 350px;\n background-color: #333; }\n #blog-hero .blog-title {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto;\n max-width: 55rem; }\n #blog-hero .blog-title::before, #blog-hero .blog-title::after {\n content: ' ';\n display: table; }\n #blog-hero .blog-title::after {\n clear: both; }\n @media screen and (min-width: 40em) {\n #blog-hero {\n background-size: cover;\n background-position: center;\n height: 42.8125rem;\n margin: 0 0 4.5rem; } }\n #blog-hero .tagline {\n width: 66.66667%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n @media screen and (min-width: 40em) {\n #blog-hero .tagline {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n #blog-hero .tagline:last-child:not(:first-child) {\n float: right; }\n @media screen and (min-width: 40em) {\n #blog-hero .tagline {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n padding-top: 6rem; } }\n @media screen and (min-width: 40em) and (min-width: 40em) {\n #blog-hero .tagline {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n @media screen and (min-width: 40em) {\n #blog-hero .tagline:last-child:not(:first-child) {\n float: right; } }\n #blog-hero h1 {\n color: #fff;\n font-weight: 500;\n font-size: 2.2rem; }\n @media screen and (min-width: 40em) {\n #blog-hero h1 {\n font-size: 2.875rem; } }\n #blog-hero h4 {\n color: #fefefe;\n font-weight: 300;\n font-size: 1.3125rem; }\n #blog-hero .download {\n margin-top: 1.25rem; }\n\n#single-post {\n max-width: 75rem;\n margin-left: auto;\n margin-right: auto;\n margin-top: 3rem; }\n #single-post::before, #single-post::after {\n content: ' ';\n display: table; }\n #single-post::after {\n clear: both; }\n #single-post .main-content {\n width: 100%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; }\n @media screen and (min-width: 40em) {\n #single-post .main-content {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n #single-post .main-content:last-child:not(:first-child) {\n float: right; }\n @media screen and (min-width: 40em) {\n #single-post .main-content {\n width: 66.66667%;\n float: left;\n padding-left: 0.625rem;\n padding-right: 0.625rem; } }\n @media screen and (min-width: 40em) and (min-width: 40em) {\n #single-post .main-content {\n padding-left: 0.9375rem;\n padding-right: 0.9375rem; } }\n @media screen and (min-width: 40em) {\n #single-post .main-content:last-child:not(:first-child) {\n float: right; } }\n\n#gallery-1 img {\n border: none !important; }\n\n.type-post h2 {\n line-height: 1.8rem; }\n .type-post h2 a {\n font-size: 1.8rem;\n line-height: 1.8rem; }\n\n.type-post img {\n padding: 20px 0; }\n","/*\n Foundation for Sites components:\n Import the building blocks you need for your project.\n Reducing the number of imported components will optimize page speed.\n ---------------------------------------------------------------------\n The Foundation framework is built by Zurb\n Licensed under MIT Open Source\n*/\n\n// Settings\n@import \"global/settings\"; // Foundation settings file.\n\n// Foundation mixins & browser resets\n@import '../components/foundation-sites/scss/foundation';\n\n// WP overrides\n@import \"global/wp-admin\"; // Fix issues with wp-admin bar positioning\n@import \"global/wp-overrides\"; // Override the default WordPress styling for some elements\n\n// Third-party libraries\n@import 'font-awesome';\n@import 'motion-ui';\n\n// Foundation global styles\n@include foundation-global-styles;\n\n// Individual foundation components\n@include foundation-grid;\n// @include foundation-flex-grid;\n@include foundation-typography;\n@include foundation-button;\n@include foundation-forms;\n@include foundation-range-input;\n@include foundation-accordion;\n@include foundation-accordion-menu;\n@include foundation-badge;\n@include foundation-breadcrumbs;\n@include foundation-button-group;\n@include foundation-callout;\n@include foundation-close-button;\n@include foundation-drilldown-menu;\n@include foundation-dropdown;\n@include foundation-dropdown-menu;\n@include foundation-flex-video;\n@include foundation-label;\n@include foundation-media-object;\n@include foundation-menu;\n@include foundation-off-canvas;\n@include foundation-orbit;\n@include foundation-pagination;\n@include foundation-progress-bar;\n@include foundation-progress-element;\n@include foundation-meter-element;\n@include foundation-slider;\n@include foundation-sticky;\n@include foundation-reveal;\n@include foundation-switch;\n@include foundation-table;\n@include foundation-tabs;\n@include foundation-thumbnail;\n@include foundation-title-bar;\n@include foundation-tooltip;\n@include foundation-top-bar;\n@include foundation-visibility-classes;\n@include foundation-float-classes;\n@include foundation-menu-icon;\n// @include foundation-flex-classes;\n\n// Motion UI\n@include motion-ui-transitions;\n@include motion-ui-animations;\n\n/*\n My custom styles:\n Add your scss files below to structure your project styles\n*/\n\n// Modules\n@import \"modules/navigation\";\n@import \"modules/footer\";\n@import \"modules/sidebar\";\n\n// Components\n@import \"components/buttons\";\n@import \"components/featured-image\";\n@import \"components/dividers\";\n@import \"components/links\";\n@import \"components/page-builder\";\n@import \"components/preloader\";\n\n// Typography\n@import \"typography/base\";\n\n// Templates\n@import \"templates/front\";\n@import \"templates/kitchen-sink\";\n@import \"templates/page-default\";\n@import \"templates/page-sidebar-left\";\n@import \"templates/page-full-width\";\n@import \"templates/single-post\";\n@import \"templates/list-posts\";\n","// Foundation for Sites Settings\n// -----------------------------\n//\n// Table of Contents:\n//\n// 1. Global\n// 2. Breakpoints\n// 3. The Grid\n// 4. Base Typography\n// 5. Typography Helpers\n// 6. Abide\n// 7. Accordion\n// 8. Accordion Menu\n// 9. Badge\n// 10. Breadcrumbs\n// 11. Button\n// 12. Button Group\n// 13. Callout\n// 14. Close Button\n// 15. Drilldown\n// 16. Dropdown\n// 17. Dropdown Menu\n// 18. Flex Video\n// 19. Forms\n// 20. Label\n// 21. Media Object\n// 22. Menu\n// 23. Meter\n// 24. Off-canvas\n// 25. Orbit\n// 26. Pagination\n// 27. Progress Bar\n// 28. Reveal\n// 29. Slider\n// 30. Switch\n// 31. Table\n// 32. Tabs\n// 33. Thumbnail\n// 34. Title Bar\n// 35. Tooltip\n// 36. Top Bar\n\n@import '../../components/foundation-sites/scss/util/util';\n\n@import url(https://fonts.googleapis.com/css?family=Raleway);\n\n// 1. Global\n// ---------\n$global-font-family: 'Raleway', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n$global-logo-color: #3f47cc;\n$global-font-size: 100%;\n$global-width: rem-calc(1200);\n$global-lineheight: 1.5;\n$primary-color: $global-logo-color;\n$secondary-color: #777;\n$success-color: #3adb76;\n$warning-color: #ffae00;\n$alert-color: #ec5840;\n$light-gray: #e6e6e6;\n$medium-gray: #cacaca;\n$dark-gray: #8a8a8a;\n$black: #0a0a0a;\n$white: #fefefe;\n$body-background: $white;\n$body-font-color: $black;\n$body-font-family: $global-font-family;\n$body-antialiased: true;\n$global-margin: 1rem;\n$global-padding: 1rem;\n$global-weight-normal: normal;\n$global-weight-bold: bold;\n$global-radius: 0;\n$global-text-direction: ltr;\n$global-flexbox: false;\n$print-transparent-backgrounds: true;\n$footer-background: #272727;\n\n// 2. Breakpoints\n// --------------\n\n$breakpoints: (\n small: 0,\n medium: 640px,\n large: 1024px,\n xlarge: 1200px,\n xxlarge: 1440px,\n);\n$breakpoint-classes: (small medium large);\n\n// 3. The Grid\n// -----------\n\n$grid-row-width: $global-width;\n$grid-column-count: 12;\n$grid-column-gutter: (\n small: 20px,\n medium: 30px,\n);\n$grid-column-align-edge: true;\n$block-grid-max: 8;\n\n// 4. Base Typography\n// ------------------\n\n$header-font-family: $body-font-family;\n$header-font-weight: $global-weight-normal;\n$header-font-style: normal;\n$font-family-monospace: Consolas, 'Liberation Mono', Courier, monospace;\n$header-sizes: (\n small: (\n 'h1': 24,\n 'h2': 20,\n 'h3': 19,\n 'h4': 18,\n 'h5': 17,\n 'h6': 16,\n ),\n medium: (\n 'h1': 48,\n 'h2': 40,\n 'h3': 31,\n 'h4': 25,\n 'h5': 20,\n 'h6': 16,\n ),\n);\n$header-color: inherit;\n$header-lineheight: 1.4;\n$header-margin-bottom: 0.5rem;\n$header-text-rendering: optimizeLegibility;\n$small-font-size: 80%;\n$header-small-font-color: $medium-gray;\n$paragraph-lineheight: 1.6;\n$paragraph-margin-bottom: 1rem;\n$paragraph-text-rendering: optimizeLegibility;\n$code-color: $black;\n$code-font-family: $font-family-monospace;\n$code-font-weight: $global-weight-normal;\n$code-background: $light-gray;\n$code-border: 1px solid $medium-gray;\n$code-padding: rem-calc(2 5 1);\n$anchor-color: $primary-color;\n$anchor-color-hover: scale-color($anchor-color, $lightness: -14%);\n$anchor-text-decoration: none;\n$anchor-text-decoration-hover: none;\n$hr-width: $global-width;\n$hr-border: 1px solid $medium-gray;\n$hr-margin: rem-calc(20) auto;\n$list-lineheight: $paragraph-lineheight;\n$list-margin-bottom: $paragraph-margin-bottom;\n$list-style-type: disc;\n$list-style-position: outside;\n$list-side-margin: 1.25rem;\n$list-nested-side-margin: 1.25rem;\n$defnlist-margin-bottom: 1rem;\n$defnlist-term-weight: $global-weight-bold;\n$defnlist-term-margin-bottom: 0.3rem;\n$blockquote-color: $dark-gray;\n$blockquote-padding: rem-calc(9 20 0 19);\n$blockquote-border: 1px solid $medium-gray;\n$cite-font-size: rem-calc(13);\n$cite-color: $dark-gray;\n$keystroke-font: $font-family-monospace;\n$keystroke-color: $black;\n$keystroke-background: $light-gray;\n$keystroke-padding: rem-calc(2 4 0);\n$keystroke-radius: $global-radius;\n$abbr-underline: 1px dotted $black;\n\n// 5. Typography Helpers\n// ---------------------\n\n$lead-font-size: $global-font-size * 1.25;\n$lead-lineheight: 1.6;\n$subheader-lineheight: 1.4;\n$subheader-color: $dark-gray;\n$subheader-font-weight: $global-weight-normal;\n$subheader-margin-top: 0.2rem;\n$subheader-margin-bottom: 0.5rem;\n$stat-font-size: 2.5rem;\n\n// 6. Abide\n// --------\n\n$abide-inputs: true;\n$abide-labels: true;\n$input-background-invalid: $alert-color;\n$form-label-color-invalid: $alert-color;\n$input-error-color: $alert-color;\n$input-error-font-size: rem-calc(12);\n$input-error-font-weight: $global-weight-bold;\n\n// 7. Accordion\n// ------------\n\n$accordion-background: $white;\n$accordion-plusminus: true;\n$accordion-item-color: foreground($accordion-background, $primary-color);\n$accordion-item-background-hover: $light-gray;\n$accordion-item-padding: 1.25rem 1rem;\n$accordion-content-background: $white;\n$accordion-content-border: 1px solid $light-gray;\n$accordion-content-color: foreground($accordion-background, $primary-color);\n$accordion-content-padding: 1rem;\n\n// 8. Accordion Menu\n// -----------------\n\n$accordionmenu-arrows: true;\n$accordionmenu-arrow-color: $primary-color;\n\n// 9. Badge\n// --------\n\n$badge-background: $primary-color;\n$badge-color: foreground($badge-background);\n$badge-padding: 0.3em;\n$badge-minwidth: 2.1em;\n$badge-font-size: 0.6rem;\n\n// 10. Breadcrumbs\n// ---------------\n\n$breadcrumbs-margin: 0 0 $global-margin 0;\n$breadcrumbs-item-font-size: rem-calc(11);\n$breadcrumbs-item-color: $primary-color;\n$breadcrumbs-item-color-current: $black;\n$breadcrumbs-item-color-disabled: $medium-gray;\n$breadcrumbs-item-margin: 0.75rem;\n$breadcrumbs-item-uppercase: true;\n$breadcrumbs-item-slash: true;\n\n// 11. Button\n// ----------\n\n$button-padding: 0.85em 1em;\n$button-margin: 0 0 $global-margin 0;\n$button-fill: solid;\n$button-background: $primary-color;\n$button-background-hover: scale-color($button-background, $lightness: -15%);\n$button-color: #fff;\n$button-color-alt: #000;\n$button-radius: $global-radius;\n$button-sizes: (\n tiny: 0.6rem,\n small: 0.75rem,\n default: 0.9rem,\n large: 1.25rem,\n);\n$button-opacity-disabled: 0.25;\n\n// 12. Button Group\n// ----------------\n\n$buttongroup-margin: 1rem;\n$buttongroup-spacing: 1px;\n$buttongroup-child-selector: '.button';\n$buttongroup-expand-max: 6;\n\n// 13. Callout\n// -----------\n\n$callout-background: $white;\n$callout-background-fade: 85%;\n$callout-border: 1px solid rgba($black, 0.25);\n$callout-margin: 0 0 1rem 0;\n$callout-padding: 1rem;\n$callout-font-color: $body-font-color;\n$callout-font-color-alt: $body-background;\n$callout-radius: $global-radius;\n$callout-link-tint: 30%;\n\n// 14. Close Button\n// ----------------\n\n$closebutton-position: right top;\n$closebutton-offset-horizontal: 1rem;\n$closebutton-offset-vertical: 0.5rem;\n$closebutton-size: 2em;\n$closebutton-lineheight: 1;\n$closebutton-color: $dark-gray;\n$closebutton-color-hover: $black;\n\n// 15. Drilldown\n// -------------\n\n$drilldown-transition: transform 0.15s linear;\n$drilldown-arrows: true;\n$drilldown-arrow-color: $primary-color;\n$drilldown-background: $white;\n\n// 16. Dropdown\n// ------------\n\n$dropdown-padding: 1rem;\n$dropdown-border: 1px solid $medium-gray;\n$dropdown-font-size: 16rem;\n$dropdown-width: 300px;\n$dropdown-radius: $global-radius;\n$dropdown-sizes: (\n tiny: 100px,\n small: 200px,\n large: 400px,\n);\n\n// 17. Dropdown Menu\n// -----------------\n\n$dropdownmenu-arrows: true;\n$dropdownmenu-arrow-color: $anchor-color;\n$dropdownmenu-min-width: 200px;\n$dropdownmenu-background: $white;\n$dropdownmenu-border: 1px solid $medium-gray;\n\n// 18. Flex Video\n// --------------\n\n$flexvideo-margin-bottom: rem-calc(16);\n$flexvideo-ratio: 4 by 3;\n$flexvideo-ratio-widescreen: 16 by 9;\n\n// 19. Forms\n// ---------\n\n$fieldset-border: 1px solid $medium-gray;\n$fieldset-padding: rem-calc(20);\n$fieldset-margin: rem-calc(18 0);\n$legend-padding: rem-calc(0 3);\n$form-spacing: rem-calc(16);\n$helptext-color: #333;\n$helptext-font-size: rem-calc(13);\n$helptext-font-style: italic;\n$input-prefix-color: $black;\n$input-prefix-background: $light-gray;\n$input-prefix-border: 1px solid $medium-gray;\n$input-prefix-padding: 1rem;\n$form-label-color: $black;\n$form-label-font-size: rem-calc(14);\n$form-label-font-weight: $global-weight-normal;\n$form-label-line-height: 1.8;\n$select-background: $white;\n$select-triangle-color: #333;\n$select-radius: $global-radius;\n$input-color: $black;\n$input-placeholder-color: $medium-gray;\n$input-font-family: inherit;\n$input-font-size: rem-calc(16);\n$input-background: $white;\n$input-background-focus: $white;\n$input-background-disabled: $light-gray;\n$input-border: 1px solid $medium-gray;\n$input-border-focus: 1px solid $dark-gray;\n$input-shadow: inset 0 1px 2px rgba($black, 0.1);\n$input-shadow-focus: 0 0 5px $medium-gray;\n$input-cursor-disabled: default;\n$input-transition: box-shadow 0.5s, border-color 0.25s ease-in-out;\n$input-number-spinners: true;\n$input-radius: $global-radius;\n\n// 20. Label\n// ---------\n\n$label-background: $primary-color;\n$label-color: foreground($label-background);\n$label-font-size: 0.8rem;\n$label-padding: 0.33333rem 0.5rem;\n$label-radius: $global-radius;\n\n// 21. Media Object\n// ----------------\n\n$mediaobject-margin-bottom: $global-margin;\n$mediaobject-section-padding: $global-padding;\n$mediaobject-image-width-stacked: 100%;\n\n// 22. Menu\n// --------\n\n$menu-margin: 0;\n$menu-margin-nested: 1rem;\n$menu-item-padding: 0.7rem 1rem;\n$menu-item-color: $white;\n$menu-item-color-active: #60FF00;\n$menu-item-background-active: rgba($white, 0.65);;\n$menu-icon-spacing: 0.25rem;\n$menu-background-color: rgba($white, 0.65);;\n\n// 23. Meter\n// ---------\n\n$meter-height: 1rem;\n$meter-radius: $global-radius;\n$meter-background: $medium-gray;\n$meter-fill-good: $success-color;\n$meter-fill-medium: $warning-color;\n$meter-fill-bad: $alert-color;\n\n// 24. Off-canvas\n// --------------\n\n$offcanvas-size: 250px;\n$offcanvas-background: $light-gray;\n$offcanvas-zindex: -1;\n$offcanvas-transition-length: 0.5s;\n$offcanvas-transition-timing: ease;\n$offcanvas-fixed-reveal: true;\n$offcanvas-exit-background: rgba($white, 0.25);\n$maincontent-class: 'off-canvas-content';\n$maincontent-shadow: 0 0 10px rgba($black, 0.5);\n\n// 25. Orbit\n// ---------\n\n$orbit-bullet-background: $medium-gray;\n$orbit-bullet-background-active: $dark-gray;\n$orbit-bullet-diameter: 1.2rem;\n$orbit-bullet-margin: 0.1rem;\n$orbit-bullet-margin-top: 0.8rem;\n$orbit-bullet-margin-bottom: 0.8rem;\n$orbit-caption-background: rgba($black, 0.5);\n$orbit-caption-padding: 1rem;\n$orbit-control-background-hover: rgba($black, 0.5);\n$orbit-control-padding: 1rem;\n$orbit-control-zindex: 10;\n\n// 26. Pagination\n// --------------\n\n$pagination-font-size: rem-calc(14);\n$pagination-margin-bottom: $global-margin;\n$pagination-item-color: $black;\n$pagination-item-padding: rem-calc(3 10);\n$pagination-item-spacing: rem-calc(1);\n$pagination-radius: $global-radius;\n$pagination-item-background-hover: $light-gray;\n$pagination-item-background-current: $primary-color;\n$pagination-item-color-current: foreground($pagination-item-background-current);\n$pagination-item-color-disabled: $medium-gray;\n$pagination-ellipsis-color: $black;\n$pagination-mobile-items: false;\n$pagination-arrows: true;\n\n// 27. Progress Bar\n// ----------------\n\n$progress-height: 1rem;\n$progress-background: $medium-gray;\n$progress-margin-bottom: $global-margin;\n$progress-meter-background: $primary-color;\n$progress-radius: $global-radius;\n\n// 28. Reveal\n// ----------\n\n$reveal-background: $white;\n$reveal-width: 600px;\n$reveal-max-width: $global-width;\n$reveal-offset: rem-calc(100);\n$reveal-padding: $global-padding;\n$reveal-border: 1px solid $medium-gray;\n$reveal-radius: $global-radius;\n$reveal-zindex: 1005;\n$reveal-overlay-background: rgba($black, 0.45);\n\n// 29. Slider\n// ----------\n\n$slider-height: 0.5rem;\n$slider-width-vertical: $slider-height;\n$slider-background: $light-gray;\n$slider-fill-background: $medium-gray;\n$slider-handle-height: 1.4rem;\n$slider-handle-width: 1.4rem;\n$slider-handle-background: $primary-color;\n$slider-opacity-disabled: 0.25;\n$slider-radius: $global-radius;\n$slider-transition: all 0.2s ease-in-out;\n\n// 30. Switch\n// ----------\n\n$switch-background: $medium-gray;\n$switch-background-active: $primary-color;\n$switch-height: 2rem;\n$switch-height-tiny: 1.5rem;\n$switch-height-small: 1.75rem;\n$switch-height-large: 2.5rem;\n$switch-radius: $global-radius;\n$switch-margin: $global-margin;\n$switch-paddle-background: $white;\n$switch-paddle-offset: 0.25rem;\n$switch-paddle-radius: $global-radius;\n$switch-paddle-transition: all 0.25s ease-out;\n\n// 31. Table\n// ---------\n\n$table-background: $white;\n$table-color-scale: 5%;\n$table-border: 1px solid smart-scale($table-background, $table-color-scale);\n$table-padding: rem-calc(8 10 10);\n$table-hover-scale: 2%;\n$table-row-hover: darken($table-background, $table-hover-scale);\n$table-row-stripe-hover: darken($table-background, $table-color-scale + $table-hover-scale);\n$table-striped-background: smart-scale($table-background, $table-color-scale);\n$table-stripe: even;\n$table-head-background: smart-scale($table-background, $table-color-scale / 2);\n$table-foot-background: smart-scale($table-background, $table-color-scale);\n$table-head-font-color: $body-font-color;\n$show-header-for-stacked: false;\n\n// 32. Tabs\n// --------\n\n$tab-margin: 0;\n$tab-background: $white;\n$tab-background-active: $light-gray;\n$tab-item-color: foreground($tab-background, $primary-color);\n$tab-item-background-hover: $white;\n$tab-item-padding: 1.25rem 1.5rem;\n$tab-expand-max: 6;\n$tab-content-background: $white;\n$tab-content-border: $light-gray;\n$tab-content-color: foreground($tab-background, $primary-color);\n$tab-content-padding: 1rem;\n\n// 33. Thumbnail\n// -------------\n\n$thumbnail-border: solid 4px $white;\n$thumbnail-margin-bottom: $global-margin;\n$thumbnail-shadow: 0 0 0 1px rgba($black, 0.2);\n$thumbnail-shadow-hover: 0 0 6px 1px rgba($primary-color, 0.5);\n$thumbnail-transition: box-shadow 200ms ease-out;\n$thumbnail-radius: $global-radius;\n\n// 34. Title Bar\n// -------------\n\n$titlebar-background: $black;\n$titlebar-color: $white;\n$titlebar-padding: 0.5rem;\n$titlebar-text-font-weight: bold;\n$titlebar-icon-color: $white;\n$titlebar-icon-color-hover: $medium-gray;\n$titlebar-icon-spacing: 0.25rem;\n\n// 35. Tooltip\n// -----------\n\n$tooltip-background-color: $black;\n$tooltip-color: $white;\n$tooltip-padding: 0.75rem;\n$tooltip-font-size: $small-font-size;\n$tooltip-pip-width: 0.75rem;\n$tooltip-pip-height: $tooltip-pip-width * 0.866;\n$tooltip-radius: $global-radius;\n\n// 36. Top Bar\n// -----------\n\n$topbar-padding: 0;\n$topbar-background: #121212;\n$topbar-submenu-background: $topbar-background;\n$topbar-link-color: #fff;\n$topbar-input-width: 200px;\n$topbar-unstack-breakpoint: medium;\n","/**\n * Foundation for Sites by ZURB\n * Version 6.2.1\n * foundation.zurb.com\n * Licensed under MIT Open Source\n */\n\n// Sass utilities\n@import 'util/util';\n\n// Global variables and styles\n@import 'global';\n\n// Components\n@import 'grid/grid';\n@import 'typography/typography';\n@import 'forms/forms';\n@import 'components/visibility';\n@import 'components/float';\n@import 'components/button';\n@import 'components/button-group';\n@import 'components/accordion-menu';\n@import 'components/accordion';\n@import 'components/badge';\n@import 'components/breadcrumbs';\n@import 'components/callout';\n@import 'components/close-button';\n@import 'components/drilldown';\n@import 'components/dropdown-menu';\n@import 'components/dropdown';\n@import 'components/flex';\n@import 'components/flex-video';\n@import 'components/label';\n@import 'components/media-object';\n@import 'components/menu';\n@import 'components/menu-icon';\n@import 'components/off-canvas';\n@import 'components/orbit';\n@import 'components/pagination';\n@import 'components/progress-bar';\n@import 'components/reveal';\n@import 'components/slider';\n@import 'components/sticky';\n@import 'components/switch';\n@import 'components/table';\n@import 'components/tabs';\n@import 'components/title-bar';\n@import 'components/top-bar';\n@import 'components/thumbnail';\n@import 'components/tooltip';\n\n@mixin foundation-everything($flex: false) {\n @if $flex {\n $global-flexbox: true !global;\n }\n\n @include foundation-global-styles;\n @if not $flex {\n @include foundation-grid;\n }\n @else {\n @include foundation-flex-grid;\n }\n @include foundation-typography;\n @include foundation-forms;\n @include foundation-button;\n @include foundation-accordion;\n @include foundation-accordion-menu;\n @include foundation-badge;\n @include foundation-breadcrumbs;\n @include foundation-button-group;\n @include foundation-callout;\n @include foundation-close-button;\n @include foundation-menu;\n @include foundation-menu-icon;\n @include foundation-drilldown-menu;\n @include foundation-dropdown;\n @include foundation-dropdown-menu;\n @include foundation-flex-video;\n @include foundation-label;\n @include foundation-media-object;\n @include foundation-off-canvas;\n @include foundation-orbit;\n @include foundation-pagination;\n @include foundation-progress-bar;\n @include foundation-slider;\n @include foundation-sticky;\n @include foundation-reveal;\n @include foundation-switch;\n @include foundation-table;\n @include foundation-tabs;\n @include foundation-thumbnail;\n @include foundation-title-bar;\n @include foundation-tooltip;\n @include foundation-top-bar;\n @include foundation-visibility-classes;\n @include foundation-float-classes;\n\n @if $flex {\n @include foundation-flex-classes;\n }\n}\n","// Fix the issue where the WP admin-bar overlaps the mobile menu\n#wpadminbar {\n\tposition: fixed !important;\n}\n\n// Make sure that the WP admin-bar does not overlap the sticky top bar\nbody.admin-bar.f-topbar-fixed {\n\t.sticky.fixed {\n\t\tmargin-top: rem-calc(32);\n\t}\n}\n","// Foundation for Sites by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n////\n/// @group functions\n////\n\n$global-font-size: 100% !default;\n\n// scss-lint:disable ZeroUnit\n\n/// Removes the unit (e.g. px, em, rem) from a value, returning the number only.\n///\n/// @param {Number} $num - Number to strip unit from.\n///\n/// @returns {Number} The same number, sans unit.\n@function strip-unit($num) {\n @return $num / ($num * 0 + 1);\n}\n\n/// Converts one or more pixel values into matching rem values.\n///\n/// @param {Number|List} $values - One or more values to convert. Be sure to separate them with spaces and not commas. If you need to convert a comma-separated list, wrap the list in parentheses.\n/// @param {Number} $base [null] - The base value to use when calculating the `rem`. If you're using Foundation out of the box, this is 16px. If this parameter is `null`, the function will reference the `$base-font-size` variable as the base.\n///\n/// @returns {List} A list of converted values.\n@function rem-calc($values, $base: null) {\n $rem-values: ();\n $count: length($values);\n\n // If no base is defined, defer to the global font size\n @if $base == null {\n $base: $global-font-size;\n }\n\n // If the base font size is a %, then multiply it by 16px\n // This is because 100% font size = 16px in most all browsers\n @if unit($base) == '%' {\n $base: ($base / 100%) * 16px;\n }\n\n @if $count == 1 {\n @return -zf-to-rem($values, $base);\n }\n\n @for $i from 1 through $count {\n $rem-values: append($rem-values, -zf-to-rem(nth($values, $i), $base));\n }\n\n @return $rem-values;\n}\n\n// Converts a unitless, pixel, or rem value to em, for use in breakpoints.\n@function -zf-bp-to-em($value) {\n // Pixel and unitless values are converted to rems\n @if unit($value) == 'px' or unitless($value) {\n $value: rem-calc($value, $base: 16px);\n }\n\n // Then the value is converted to ems\n @return strip-unit($value) * 1em;\n}\n\n/// Converts a pixel value to matching rem value. *Any* value passed, regardless of unit, is assumed to be a pixel value. By default, the base pixel value used to calculate the rem value is taken from the `$global-font-size` variable.\n/// @access private\n///\n/// @param {Number} $value - Pixel value to convert.\n/// @param {Number} $base [null] - Base for pixel conversion.\n///\n/// @returns {Number} A number in rems, calculated based on the given value and the base pixel value. rem values are passed through as is.\n@function -zf-to-rem($value, $base: null) {\n // Check if the value is a number\n @if type-of($value) != 'number' {\n @warn inspect($value) + ' was passed to rem-calc(), which is not a number.';\n @return $value;\n }\n\n // Calculate rem if units for $value is not rem\n @if unit($value) != 'rem' {\n $value: strip-unit($value) / strip-unit($base) * 1rem;\n }\n\n // Turn 0rem into 0\n @if $value == 0rem {\n $value: 0;\n }\n\n @return $value;\n}\n",".wp-caption{\n padding:rem-calc(4);\n}\n\n.wp-caption img{\n max-width:100%;\n}\n\np.wp-caption-text{\n font-size:90%;\n color: #666;\n padding:rem-calc(10) 0;\n}\n\na.more-link {\n float: right;\n}\n","/*!\n * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n@import \"variables\";\n@import \"mixins\";\n@import \"path\";\n@import \"core\";\n@import \"larger\";\n@import \"fixed-width\";\n@import \"list\";\n@import \"bordered-pulled\";\n@import \"animated\";\n@import \"rotated-flipped\";\n@import \"stacked\";\n@import \"icons\";\n","/* FONT PATH\n * -------------------------- */\n\n@font-face {\n font-family: 'FontAwesome';\n src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');\n src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),\n url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),\n url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),\n url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),\n url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');\n// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts\n font-weight: normal;\n font-style: normal;\n}\n","// Base Class Definition\n// -------------------------\n\n.#{$fa-css-prefix} {\n display: inline-block;\n font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration\n font-size: inherit; // can't have font-size inherit on line above, so need to override\n text-rendering: auto; // optimizelegibility throws things off #1094\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n}\n","// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.#{$fa-css-prefix}-lg {\n font-size: (4em / 3);\n line-height: (3em / 4);\n vertical-align: -15%;\n}\n.#{$fa-css-prefix}-2x { font-size: 2em; }\n.#{$fa-css-prefix}-3x { font-size: 3em; }\n.#{$fa-css-prefix}-4x { font-size: 4em; }\n.#{$fa-css-prefix}-5x { font-size: 5em; }\n","// Fixed Width Icons\n// -------------------------\n.#{$fa-css-prefix}-fw {\n width: (18em / 14);\n text-align: center;\n}\n","// List Icons\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n padding-left: 0;\n margin-left: $fa-li-width;\n list-style-type: none;\n > li { position: relative; }\n}\n.#{$fa-css-prefix}-li {\n position: absolute;\n left: -$fa-li-width;\n width: $fa-li-width;\n top: (2em / 14);\n text-align: center;\n &.#{$fa-css-prefix}-lg {\n left: -$fa-li-width + (4em / 14);\n }\n}\n","// Variables\n// --------------------------\n\n$fa-font-path: \"../fonts\" !default;\n$fa-font-size-base: 14px !default;\n$fa-line-height-base: 1 !default;\n//$fa-font-path: \"//netdna.bootstrapcdn.com/font-awesome/4.5.0/fonts\" !default; // for referencing Bootstrap CDN font files directly\n$fa-css-prefix: fa !default;\n$fa-version: \"4.5.0\" !default;\n$fa-border-color: #eee !default;\n$fa-inverse: #fff !default;\n$fa-li-width: (30em / 14) !default;\n\n$fa-var-500px: \"\\f26e\";\n$fa-var-adjust: \"\\f042\";\n$fa-var-adn: \"\\f170\";\n$fa-var-align-center: \"\\f037\";\n$fa-var-align-justify: \"\\f039\";\n$fa-var-align-left: \"\\f036\";\n$fa-var-align-right: \"\\f038\";\n$fa-var-amazon: \"\\f270\";\n$fa-var-ambulance: \"\\f0f9\";\n$fa-var-anchor: \"\\f13d\";\n$fa-var-android: \"\\f17b\";\n$fa-var-angellist: \"\\f209\";\n$fa-var-angle-double-down: \"\\f103\";\n$fa-var-angle-double-left: \"\\f100\";\n$fa-var-angle-double-right: \"\\f101\";\n$fa-var-angle-double-up: \"\\f102\";\n$fa-var-angle-down: \"\\f107\";\n$fa-var-angle-left: \"\\f104\";\n$fa-var-angle-right: \"\\f105\";\n$fa-var-angle-up: \"\\f106\";\n$fa-var-apple: \"\\f179\";\n$fa-var-archive: \"\\f187\";\n$fa-var-area-chart: \"\\f1fe\";\n$fa-var-arrow-circle-down: \"\\f0ab\";\n$fa-var-arrow-circle-left: \"\\f0a8\";\n$fa-var-arrow-circle-o-down: \"\\f01a\";\n$fa-var-arrow-circle-o-left: \"\\f190\";\n$fa-var-arrow-circle-o-right: \"\\f18e\";\n$fa-var-arrow-circle-o-up: \"\\f01b\";\n$fa-var-arrow-circle-right: \"\\f0a9\";\n$fa-var-arrow-circle-up: \"\\f0aa\";\n$fa-var-arrow-down: \"\\f063\";\n$fa-var-arrow-left: \"\\f060\";\n$fa-var-arrow-right: \"\\f061\";\n$fa-var-arrow-up: \"\\f062\";\n$fa-var-arrows: \"\\f047\";\n$fa-var-arrows-alt: \"\\f0b2\";\n$fa-var-arrows-h: \"\\f07e\";\n$fa-var-arrows-v: \"\\f07d\";\n$fa-var-asterisk: \"\\f069\";\n$fa-var-at: \"\\f1fa\";\n$fa-var-automobile: \"\\f1b9\";\n$fa-var-backward: \"\\f04a\";\n$fa-var-balance-scale: \"\\f24e\";\n$fa-var-ban: \"\\f05e\";\n$fa-var-bank: \"\\f19c\";\n$fa-var-bar-chart: \"\\f080\";\n$fa-var-bar-chart-o: \"\\f080\";\n$fa-var-barcode: \"\\f02a\";\n$fa-var-bars: \"\\f0c9\";\n$fa-var-battery-0: \"\\f244\";\n$fa-var-battery-1: \"\\f243\";\n$fa-var-battery-2: \"\\f242\";\n$fa-var-battery-3: \"\\f241\";\n$fa-var-battery-4: \"\\f240\";\n$fa-var-battery-empty: \"\\f244\";\n$fa-var-battery-full: \"\\f240\";\n$fa-var-battery-half: \"\\f242\";\n$fa-var-battery-quarter: \"\\f243\";\n$fa-var-battery-three-quarters: \"\\f241\";\n$fa-var-bed: \"\\f236\";\n$fa-var-beer: \"\\f0fc\";\n$fa-var-behance: \"\\f1b4\";\n$fa-var-behance-square: \"\\f1b5\";\n$fa-var-bell: \"\\f0f3\";\n$fa-var-bell-o: \"\\f0a2\";\n$fa-var-bell-slash: \"\\f1f6\";\n$fa-var-bell-slash-o: \"\\f1f7\";\n$fa-var-bicycle: \"\\f206\";\n$fa-var-binoculars: \"\\f1e5\";\n$fa-var-birthday-cake: \"\\f1fd\";\n$fa-var-bitbucket: \"\\f171\";\n$fa-var-bitbucket-square: \"\\f172\";\n$fa-var-bitcoin: \"\\f15a\";\n$fa-var-black-tie: \"\\f27e\";\n$fa-var-bluetooth: \"\\f293\";\n$fa-var-bluetooth-b: \"\\f294\";\n$fa-var-bold: \"\\f032\";\n$fa-var-bolt: \"\\f0e7\";\n$fa-var-bomb: \"\\f1e2\";\n$fa-var-book: \"\\f02d\";\n$fa-var-bookmark: \"\\f02e\";\n$fa-var-bookmark-o: \"\\f097\";\n$fa-var-briefcase: \"\\f0b1\";\n$fa-var-btc: \"\\f15a\";\n$fa-var-bug: \"\\f188\";\n$fa-var-building: \"\\f1ad\";\n$fa-var-building-o: \"\\f0f7\";\n$fa-var-bullhorn: \"\\f0a1\";\n$fa-var-bullseye: \"\\f140\";\n$fa-var-bus: \"\\f207\";\n$fa-var-buysellads: \"\\f20d\";\n$fa-var-cab: \"\\f1ba\";\n$fa-var-calculator: \"\\f1ec\";\n$fa-var-calendar: \"\\f073\";\n$fa-var-calendar-check-o: \"\\f274\";\n$fa-var-calendar-minus-o: \"\\f272\";\n$fa-var-calendar-o: \"\\f133\";\n$fa-var-calendar-plus-o: \"\\f271\";\n$fa-var-calendar-times-o: \"\\f273\";\n$fa-var-camera: \"\\f030\";\n$fa-var-camera-retro: \"\\f083\";\n$fa-var-car: \"\\f1b9\";\n$fa-var-caret-down: \"\\f0d7\";\n$fa-var-caret-left: \"\\f0d9\";\n$fa-var-caret-right: \"\\f0da\";\n$fa-var-caret-square-o-down: \"\\f150\";\n$fa-var-caret-square-o-left: \"\\f191\";\n$fa-var-caret-square-o-right: \"\\f152\";\n$fa-var-caret-square-o-up: \"\\f151\";\n$fa-var-caret-up: \"\\f0d8\";\n$fa-var-cart-arrow-down: \"\\f218\";\n$fa-var-cart-plus: \"\\f217\";\n$fa-var-cc: \"\\f20a\";\n$fa-var-cc-amex: \"\\f1f3\";\n$fa-var-cc-diners-club: \"\\f24c\";\n$fa-var-cc-discover: \"\\f1f2\";\n$fa-var-cc-jcb: \"\\f24b\";\n$fa-var-cc-mastercard: \"\\f1f1\";\n$fa-var-cc-paypal: \"\\f1f4\";\n$fa-var-cc-stripe: \"\\f1f5\";\n$fa-var-cc-visa: \"\\f1f0\";\n$fa-var-certificate: \"\\f0a3\";\n$fa-var-chain: \"\\f0c1\";\n$fa-var-chain-broken: \"\\f127\";\n$fa-var-check: \"\\f00c\";\n$fa-var-check-circle: \"\\f058\";\n$fa-var-check-circle-o: \"\\f05d\";\n$fa-var-check-square: \"\\f14a\";\n$fa-var-check-square-o: \"\\f046\";\n$fa-var-chevron-circle-down: \"\\f13a\";\n$fa-var-chevron-circle-left: \"\\f137\";\n$fa-var-chevron-circle-right: \"\\f138\";\n$fa-var-chevron-circle-up: \"\\f139\";\n$fa-var-chevron-down: \"\\f078\";\n$fa-var-chevron-left: \"\\f053\";\n$fa-var-chevron-right: \"\\f054\";\n$fa-var-chevron-up: \"\\f077\";\n$fa-var-child: \"\\f1ae\";\n$fa-var-chrome: \"\\f268\";\n$fa-var-circle: \"\\f111\";\n$fa-var-circle-o: \"\\f10c\";\n$fa-var-circle-o-notch: \"\\f1ce\";\n$fa-var-circle-thin: \"\\f1db\";\n$fa-var-clipboard: \"\\f0ea\";\n$fa-var-clock-o: \"\\f017\";\n$fa-var-clone: \"\\f24d\";\n$fa-var-close: \"\\f00d\";\n$fa-var-cloud: \"\\f0c2\";\n$fa-var-cloud-download: \"\\f0ed\";\n$fa-var-cloud-upload: \"\\f0ee\";\n$fa-var-cny: \"\\f157\";\n$fa-var-code: \"\\f121\";\n$fa-var-code-fork: \"\\f126\";\n$fa-var-codepen: \"\\f1cb\";\n$fa-var-codiepie: \"\\f284\";\n$fa-var-coffee: \"\\f0f4\";\n$fa-var-cog: \"\\f013\";\n$fa-var-cogs: \"\\f085\";\n$fa-var-columns: \"\\f0db\";\n$fa-var-comment: \"\\f075\";\n$fa-var-comment-o: \"\\f0e5\";\n$fa-var-commenting: \"\\f27a\";\n$fa-var-commenting-o: \"\\f27b\";\n$fa-var-comments: \"\\f086\";\n$fa-var-comments-o: \"\\f0e6\";\n$fa-var-compass: \"\\f14e\";\n$fa-var-compress: \"\\f066\";\n$fa-var-connectdevelop: \"\\f20e\";\n$fa-var-contao: \"\\f26d\";\n$fa-var-copy: \"\\f0c5\";\n$fa-var-copyright: \"\\f1f9\";\n$fa-var-creative-commons: \"\\f25e\";\n$fa-var-credit-card: \"\\f09d\";\n$fa-var-credit-card-alt: \"\\f283\";\n$fa-var-crop: \"\\f125\";\n$fa-var-crosshairs: \"\\f05b\";\n$fa-var-css3: \"\\f13c\";\n$fa-var-cube: \"\\f1b2\";\n$fa-var-cubes: \"\\f1b3\";\n$fa-var-cut: \"\\f0c4\";\n$fa-var-cutlery: \"\\f0f5\";\n$fa-var-dashboard: \"\\f0e4\";\n$fa-var-dashcube: \"\\f210\";\n$fa-var-database: \"\\f1c0\";\n$fa-var-dedent: \"\\f03b\";\n$fa-var-delicious: \"\\f1a5\";\n$fa-var-desktop: \"\\f108\";\n$fa-var-deviantart: \"\\f1bd\";\n$fa-var-diamond: \"\\f219\";\n$fa-var-digg: \"\\f1a6\";\n$fa-var-dollar: \"\\f155\";\n$fa-var-dot-circle-o: \"\\f192\";\n$fa-var-download: \"\\f019\";\n$fa-var-dribbble: \"\\f17d\";\n$fa-var-dropbox: \"\\f16b\";\n$fa-var-drupal: \"\\f1a9\";\n$fa-var-edge: \"\\f282\";\n$fa-var-edit: \"\\f044\";\n$fa-var-eject: \"\\f052\";\n$fa-var-ellipsis-h: \"\\f141\";\n$fa-var-ellipsis-v: \"\\f142\";\n$fa-var-empire: \"\\f1d1\";\n$fa-var-envelope: \"\\f0e0\";\n$fa-var-envelope-o: \"\\f003\";\n$fa-var-envelope-square: \"\\f199\";\n$fa-var-eraser: \"\\f12d\";\n$fa-var-eur: \"\\f153\";\n$fa-var-euro: \"\\f153\";\n$fa-var-exchange: \"\\f0ec\";\n$fa-var-exclamation: \"\\f12a\";\n$fa-var-exclamation-circle: \"\\f06a\";\n$fa-var-exclamation-triangle: \"\\f071\";\n$fa-var-expand: \"\\f065\";\n$fa-var-expeditedssl: \"\\f23e\";\n$fa-var-external-link: \"\\f08e\";\n$fa-var-external-link-square: \"\\f14c\";\n$fa-var-eye: \"\\f06e\";\n$fa-var-eye-slash: \"\\f070\";\n$fa-var-eyedropper: \"\\f1fb\";\n$fa-var-facebook: \"\\f09a\";\n$fa-var-facebook-f: \"\\f09a\";\n$fa-var-facebook-official: \"\\f230\";\n$fa-var-facebook-square: \"\\f082\";\n$fa-var-fast-backward: \"\\f049\";\n$fa-var-fast-forward: \"\\f050\";\n$fa-var-fax: \"\\f1ac\";\n$fa-var-feed: \"\\f09e\";\n$fa-var-female: \"\\f182\";\n$fa-var-fighter-jet: \"\\f0fb\";\n$fa-var-file: \"\\f15b\";\n$fa-var-file-archive-o: \"\\f1c6\";\n$fa-var-file-audio-o: \"\\f1c7\";\n$fa-var-file-code-o: \"\\f1c9\";\n$fa-var-file-excel-o: \"\\f1c3\";\n$fa-var-file-image-o: \"\\f1c5\";\n$fa-var-file-movie-o: \"\\f1c8\";\n$fa-var-file-o: \"\\f016\";\n$fa-var-file-pdf-o: \"\\f1c1\";\n$fa-var-file-photo-o: \"\\f1c5\";\n$fa-var-file-picture-o: \"\\f1c5\";\n$fa-var-file-powerpoint-o: \"\\f1c4\";\n$fa-var-file-sound-o: \"\\f1c7\";\n$fa-var-file-text: \"\\f15c\";\n$fa-var-file-text-o: \"\\f0f6\";\n$fa-var-file-video-o: \"\\f1c8\";\n$fa-var-file-word-o: \"\\f1c2\";\n$fa-var-file-zip-o: \"\\f1c6\";\n$fa-var-files-o: \"\\f0c5\";\n$fa-var-film: \"\\f008\";\n$fa-var-filter: \"\\f0b0\";\n$fa-var-fire: \"\\f06d\";\n$fa-var-fire-extinguisher: \"\\f134\";\n$fa-var-firefox: \"\\f269\";\n$fa-var-flag: \"\\f024\";\n$fa-var-flag-checkered: \"\\f11e\";\n$fa-var-flag-o: \"\\f11d\";\n$fa-var-flash: \"\\f0e7\";\n$fa-var-flask: \"\\f0c3\";\n$fa-var-flickr: \"\\f16e\";\n$fa-var-floppy-o: \"\\f0c7\";\n$fa-var-folder: \"\\f07b\";\n$fa-var-folder-o: \"\\f114\";\n$fa-var-folder-open: \"\\f07c\";\n$fa-var-folder-open-o: \"\\f115\";\n$fa-var-font: \"\\f031\";\n$fa-var-fonticons: \"\\f280\";\n$fa-var-fort-awesome: \"\\f286\";\n$fa-var-forumbee: \"\\f211\";\n$fa-var-forward: \"\\f04e\";\n$fa-var-foursquare: \"\\f180\";\n$fa-var-frown-o: \"\\f119\";\n$fa-var-futbol-o: \"\\f1e3\";\n$fa-var-gamepad: \"\\f11b\";\n$fa-var-gavel: \"\\f0e3\";\n$fa-var-gbp: \"\\f154\";\n$fa-var-ge: \"\\f1d1\";\n$fa-var-gear: \"\\f013\";\n$fa-var-gears: \"\\f085\";\n$fa-var-genderless: \"\\f22d\";\n$fa-var-get-pocket: \"\\f265\";\n$fa-var-gg: \"\\f260\";\n$fa-var-gg-circle: \"\\f261\";\n$fa-var-gift: \"\\f06b\";\n$fa-var-git: \"\\f1d3\";\n$fa-var-git-square: \"\\f1d2\";\n$fa-var-github: \"\\f09b\";\n$fa-var-github-alt: \"\\f113\";\n$fa-var-github-square: \"\\f092\";\n$fa-var-gittip: \"\\f184\";\n$fa-var-glass: \"\\f000\";\n$fa-var-globe: \"\\f0ac\";\n$fa-var-google: \"\\f1a0\";\n$fa-var-google-plus: \"\\f0d5\";\n$fa-var-google-plus-square: \"\\f0d4\";\n$fa-var-google-wallet: \"\\f1ee\";\n$fa-var-graduation-cap: \"\\f19d\";\n$fa-var-gratipay: \"\\f184\";\n$fa-var-group: \"\\f0c0\";\n$fa-var-h-square: \"\\f0fd\";\n$fa-var-hacker-news: \"\\f1d4\";\n$fa-var-hand-grab-o: \"\\f255\";\n$fa-var-hand-lizard-o: \"\\f258\";\n$fa-var-hand-o-down: \"\\f0a7\";\n$fa-var-hand-o-left: \"\\f0a5\";\n$fa-var-hand-o-right: \"\\f0a4\";\n$fa-var-hand-o-up: \"\\f0a6\";\n$fa-var-hand-paper-o: \"\\f256\";\n$fa-var-hand-peace-o: \"\\f25b\";\n$fa-var-hand-pointer-o: \"\\f25a\";\n$fa-var-hand-rock-o: \"\\f255\";\n$fa-var-hand-scissors-o: \"\\f257\";\n$fa-var-hand-spock-o: \"\\f259\";\n$fa-var-hand-stop-o: \"\\f256\";\n$fa-var-hashtag: \"\\f292\";\n$fa-var-hdd-o: \"\\f0a0\";\n$fa-var-header: \"\\f1dc\";\n$fa-var-headphones: \"\\f025\";\n$fa-var-heart: \"\\f004\";\n$fa-var-heart-o: \"\\f08a\";\n$fa-var-heartbeat: \"\\f21e\";\n$fa-var-history: \"\\f1da\";\n$fa-var-home: \"\\f015\";\n$fa-var-hospital-o: \"\\f0f8\";\n$fa-var-hotel: \"\\f236\";\n$fa-var-hourglass: \"\\f254\";\n$fa-var-hourglass-1: \"\\f251\";\n$fa-var-hourglass-2: \"\\f252\";\n$fa-var-hourglass-3: \"\\f253\";\n$fa-var-hourglass-end: \"\\f253\";\n$fa-var-hourglass-half: \"\\f252\";\n$fa-var-hourglass-o: \"\\f250\";\n$fa-var-hourglass-start: \"\\f251\";\n$fa-var-houzz: \"\\f27c\";\n$fa-var-html5: \"\\f13b\";\n$fa-var-i-cursor: \"\\f246\";\n$fa-var-ils: \"\\f20b\";\n$fa-var-image: \"\\f03e\";\n$fa-var-inbox: \"\\f01c\";\n$fa-var-indent: \"\\f03c\";\n$fa-var-industry: \"\\f275\";\n$fa-var-info: \"\\f129\";\n$fa-var-info-circle: \"\\f05a\";\n$fa-var-inr: \"\\f156\";\n$fa-var-instagram: \"\\f16d\";\n$fa-var-institution: \"\\f19c\";\n$fa-var-internet-explorer: \"\\f26b\";\n$fa-var-intersex: \"\\f224\";\n$fa-var-ioxhost: \"\\f208\";\n$fa-var-italic: \"\\f033\";\n$fa-var-joomla: \"\\f1aa\";\n$fa-var-jpy: \"\\f157\";\n$fa-var-jsfiddle: \"\\f1cc\";\n$fa-var-key: \"\\f084\";\n$fa-var-keyboard-o: \"\\f11c\";\n$fa-var-krw: \"\\f159\";\n$fa-var-language: \"\\f1ab\";\n$fa-var-laptop: \"\\f109\";\n$fa-var-lastfm: \"\\f202\";\n$fa-var-lastfm-square: \"\\f203\";\n$fa-var-leaf: \"\\f06c\";\n$fa-var-leanpub: \"\\f212\";\n$fa-var-legal: \"\\f0e3\";\n$fa-var-lemon-o: \"\\f094\";\n$fa-var-level-down: \"\\f149\";\n$fa-var-level-up: \"\\f148\";\n$fa-var-life-bouy: \"\\f1cd\";\n$fa-var-life-buoy: \"\\f1cd\";\n$fa-var-life-ring: \"\\f1cd\";\n$fa-var-life-saver: \"\\f1cd\";\n$fa-var-lightbulb-o: \"\\f0eb\";\n$fa-var-line-chart: \"\\f201\";\n$fa-var-link: \"\\f0c1\";\n$fa-var-linkedin: \"\\f0e1\";\n$fa-var-linkedin-square: \"\\f08c\";\n$fa-var-linux: \"\\f17c\";\n$fa-var-list: \"\\f03a\";\n$fa-var-list-alt: \"\\f022\";\n$fa-var-list-ol: \"\\f0cb\";\n$fa-var-list-ul: \"\\f0ca\";\n$fa-var-location-arrow: \"\\f124\";\n$fa-var-lock: \"\\f023\";\n$fa-var-long-arrow-down: \"\\f175\";\n$fa-var-long-arrow-left: \"\\f177\";\n$fa-var-long-arrow-right: \"\\f178\";\n$fa-var-long-arrow-up: \"\\f176\";\n$fa-var-magic: \"\\f0d0\";\n$fa-var-magnet: \"\\f076\";\n$fa-var-mail-forward: \"\\f064\";\n$fa-var-mail-reply: \"\\f112\";\n$fa-var-mail-reply-all: \"\\f122\";\n$fa-var-male: \"\\f183\";\n$fa-var-map: \"\\f279\";\n$fa-var-map-marker: \"\\f041\";\n$fa-var-map-o: \"\\f278\";\n$fa-var-map-pin: \"\\f276\";\n$fa-var-map-signs: \"\\f277\";\n$fa-var-mars: \"\\f222\";\n$fa-var-mars-double: \"\\f227\";\n$fa-var-mars-stroke: \"\\f229\";\n$fa-var-mars-stroke-h: \"\\f22b\";\n$fa-var-mars-stroke-v: \"\\f22a\";\n$fa-var-maxcdn: \"\\f136\";\n$fa-var-meanpath: \"\\f20c\";\n$fa-var-medium: \"\\f23a\";\n$fa-var-medkit: \"\\f0fa\";\n$fa-var-meh-o: \"\\f11a\";\n$fa-var-mercury: \"\\f223\";\n$fa-var-microphone: \"\\f130\";\n$fa-var-microphone-slash: \"\\f131\";\n$fa-var-minus: \"\\f068\";\n$fa-var-minus-circle: \"\\f056\";\n$fa-var-minus-square: \"\\f146\";\n$fa-var-minus-square-o: \"\\f147\";\n$fa-var-mixcloud: \"\\f289\";\n$fa-var-mobile: \"\\f10b\";\n$fa-var-mobile-phone: \"\\f10b\";\n$fa-var-modx: \"\\f285\";\n$fa-var-money: \"\\f0d6\";\n$fa-var-moon-o: \"\\f186\";\n$fa-var-mortar-board: \"\\f19d\";\n$fa-var-motorcycle: \"\\f21c\";\n$fa-var-mouse-pointer: \"\\f245\";\n$fa-var-music: \"\\f001\";\n$fa-var-navicon: \"\\f0c9\";\n$fa-var-neuter: \"\\f22c\";\n$fa-var-newspaper-o: \"\\f1ea\";\n$fa-var-object-group: \"\\f247\";\n$fa-var-object-ungroup: \"\\f248\";\n$fa-var-odnoklassniki: \"\\f263\";\n$fa-var-odnoklassniki-square: \"\\f264\";\n$fa-var-opencart: \"\\f23d\";\n$fa-var-openid: \"\\f19b\";\n$fa-var-opera: \"\\f26a\";\n$fa-var-optin-monster: \"\\f23c\";\n$fa-var-outdent: \"\\f03b\";\n$fa-var-pagelines: \"\\f18c\";\n$fa-var-paint-brush: \"\\f1fc\";\n$fa-var-paper-plane: \"\\f1d8\";\n$fa-var-paper-plane-o: \"\\f1d9\";\n$fa-var-paperclip: \"\\f0c6\";\n$fa-var-paragraph: \"\\f1dd\";\n$fa-var-paste: \"\\f0ea\";\n$fa-var-pause: \"\\f04c\";\n$fa-var-pause-circle: \"\\f28b\";\n$fa-var-pause-circle-o: \"\\f28c\";\n$fa-var-paw: \"\\f1b0\";\n$fa-var-paypal: \"\\f1ed\";\n$fa-var-pencil: \"\\f040\";\n$fa-var-pencil-square: \"\\f14b\";\n$fa-var-pencil-square-o: \"\\f044\";\n$fa-var-percent: \"\\f295\";\n$fa-var-phone: \"\\f095\";\n$fa-var-phone-square: \"\\f098\";\n$fa-var-photo: \"\\f03e\";\n$fa-var-picture-o: \"\\f03e\";\n$fa-var-pie-chart: \"\\f200\";\n$fa-var-pied-piper: \"\\f1a7\";\n$fa-var-pied-piper-alt: \"\\f1a8\";\n$fa-var-pinterest: \"\\f0d2\";\n$fa-var-pinterest-p: \"\\f231\";\n$fa-var-pinterest-square: \"\\f0d3\";\n$fa-var-plane: \"\\f072\";\n$fa-var-play: \"\\f04b\";\n$fa-var-play-circle: \"\\f144\";\n$fa-var-play-circle-o: \"\\f01d\";\n$fa-var-plug: \"\\f1e6\";\n$fa-var-plus: \"\\f067\";\n$fa-var-plus-circle: \"\\f055\";\n$fa-var-plus-square: \"\\f0fe\";\n$fa-var-plus-square-o: \"\\f196\";\n$fa-var-power-off: \"\\f011\";\n$fa-var-print: \"\\f02f\";\n$fa-var-product-hunt: \"\\f288\";\n$fa-var-puzzle-piece: \"\\f12e\";\n$fa-var-qq: \"\\f1d6\";\n$fa-var-qrcode: \"\\f029\";\n$fa-var-question: \"\\f128\";\n$fa-var-question-circle: \"\\f059\";\n$fa-var-quote-left: \"\\f10d\";\n$fa-var-quote-right: \"\\f10e\";\n$fa-var-ra: \"\\f1d0\";\n$fa-var-random: \"\\f074\";\n$fa-var-rebel: \"\\f1d0\";\n$fa-var-recycle: \"\\f1b8\";\n$fa-var-reddit: \"\\f1a1\";\n$fa-var-reddit-alien: \"\\f281\";\n$fa-var-reddit-square: \"\\f1a2\";\n$fa-var-refresh: \"\\f021\";\n$fa-var-registered: \"\\f25d\";\n$fa-var-remove: \"\\f00d\";\n$fa-var-renren: \"\\f18b\";\n$fa-var-reorder: \"\\f0c9\";\n$fa-var-repeat: \"\\f01e\";\n$fa-var-reply: \"\\f112\";\n$fa-var-reply-all: \"\\f122\";\n$fa-var-retweet: \"\\f079\";\n$fa-var-rmb: \"\\f157\";\n$fa-var-road: \"\\f018\";\n$fa-var-rocket: \"\\f135\";\n$fa-var-rotate-left: \"\\f0e2\";\n$fa-var-rotate-right: \"\\f01e\";\n$fa-var-rouble: \"\\f158\";\n$fa-var-rss: \"\\f09e\";\n$fa-var-rss-square: \"\\f143\";\n$fa-var-rub: \"\\f158\";\n$fa-var-ruble: \"\\f158\";\n$fa-var-rupee: \"\\f156\";\n$fa-var-safari: \"\\f267\";\n$fa-var-save: \"\\f0c7\";\n$fa-var-scissors: \"\\f0c4\";\n$fa-var-scribd: \"\\f28a\";\n$fa-var-search: \"\\f002\";\n$fa-var-search-minus: \"\\f010\";\n$fa-var-search-plus: \"\\f00e\";\n$fa-var-sellsy: \"\\f213\";\n$fa-var-send: \"\\f1d8\";\n$fa-var-send-o: \"\\f1d9\";\n$fa-var-server: \"\\f233\";\n$fa-var-share: \"\\f064\";\n$fa-var-share-alt: \"\\f1e0\";\n$fa-var-share-alt-square: \"\\f1e1\";\n$fa-var-share-square: \"\\f14d\";\n$fa-var-share-square-o: \"\\f045\";\n$fa-var-shekel: \"\\f20b\";\n$fa-var-sheqel: \"\\f20b\";\n$fa-var-shield: \"\\f132\";\n$fa-var-ship: \"\\f21a\";\n$fa-var-shirtsinbulk: \"\\f214\";\n$fa-var-shopping-bag: \"\\f290\";\n$fa-var-shopping-basket: \"\\f291\";\n$fa-var-shopping-cart: \"\\f07a\";\n$fa-var-sign-in: \"\\f090\";\n$fa-var-sign-out: \"\\f08b\";\n$fa-var-signal: \"\\f012\";\n$fa-var-simplybuilt: \"\\f215\";\n$fa-var-sitemap: \"\\f0e8\";\n$fa-var-skyatlas: \"\\f216\";\n$fa-var-skype: \"\\f17e\";\n$fa-var-slack: \"\\f198\";\n$fa-var-sliders: \"\\f1de\";\n$fa-var-slideshare: \"\\f1e7\";\n$fa-var-smile-o: \"\\f118\";\n$fa-var-soccer-ball-o: \"\\f1e3\";\n$fa-var-sort: \"\\f0dc\";\n$fa-var-sort-alpha-asc: \"\\f15d\";\n$fa-var-sort-alpha-desc: \"\\f15e\";\n$fa-var-sort-amount-asc: \"\\f160\";\n$fa-var-sort-amount-desc: \"\\f161\";\n$fa-var-sort-asc: \"\\f0de\";\n$fa-var-sort-desc: \"\\f0dd\";\n$fa-var-sort-down: \"\\f0dd\";\n$fa-var-sort-numeric-asc: \"\\f162\";\n$fa-var-sort-numeric-desc: \"\\f163\";\n$fa-var-sort-up: \"\\f0de\";\n$fa-var-soundcloud: \"\\f1be\";\n$fa-var-space-shuttle: \"\\f197\";\n$fa-var-spinner: \"\\f110\";\n$fa-var-spoon: \"\\f1b1\";\n$fa-var-spotify: \"\\f1bc\";\n$fa-var-square: \"\\f0c8\";\n$fa-var-square-o: \"\\f096\";\n$fa-var-stack-exchange: \"\\f18d\";\n$fa-var-stack-overflow: \"\\f16c\";\n$fa-var-star: \"\\f005\";\n$fa-var-star-half: \"\\f089\";\n$fa-var-star-half-empty: \"\\f123\";\n$fa-var-star-half-full: \"\\f123\";\n$fa-var-star-half-o: \"\\f123\";\n$fa-var-star-o: \"\\f006\";\n$fa-var-steam: \"\\f1b6\";\n$fa-var-steam-square: \"\\f1b7\";\n$fa-var-step-backward: \"\\f048\";\n$fa-var-step-forward: \"\\f051\";\n$fa-var-stethoscope: \"\\f0f1\";\n$fa-var-sticky-note: \"\\f249\";\n$fa-var-sticky-note-o: \"\\f24a\";\n$fa-var-stop: \"\\f04d\";\n$fa-var-stop-circle: \"\\f28d\";\n$fa-var-stop-circle-o: \"\\f28e\";\n$fa-var-street-view: \"\\f21d\";\n$fa-var-strikethrough: \"\\f0cc\";\n$fa-var-stumbleupon: \"\\f1a4\";\n$fa-var-stumbleupon-circle: \"\\f1a3\";\n$fa-var-subscript: \"\\f12c\";\n$fa-var-subway: \"\\f239\";\n$fa-var-suitcase: \"\\f0f2\";\n$fa-var-sun-o: \"\\f185\";\n$fa-var-superscript: \"\\f12b\";\n$fa-var-support: \"\\f1cd\";\n$fa-var-table: \"\\f0ce\";\n$fa-var-tablet: \"\\f10a\";\n$fa-var-tachometer: \"\\f0e4\";\n$fa-var-tag: \"\\f02b\";\n$fa-var-tags: \"\\f02c\";\n$fa-var-tasks: \"\\f0ae\";\n$fa-var-taxi: \"\\f1ba\";\n$fa-var-television: \"\\f26c\";\n$fa-var-tencent-weibo: \"\\f1d5\";\n$fa-var-terminal: \"\\f120\";\n$fa-var-text-height: \"\\f034\";\n$fa-var-text-width: \"\\f035\";\n$fa-var-th: \"\\f00a\";\n$fa-var-th-large: \"\\f009\";\n$fa-var-th-list: \"\\f00b\";\n$fa-var-thumb-tack: \"\\f08d\";\n$fa-var-thumbs-down: \"\\f165\";\n$fa-var-thumbs-o-down: \"\\f088\";\n$fa-var-thumbs-o-up: \"\\f087\";\n$fa-var-thumbs-up: \"\\f164\";\n$fa-var-ticket: \"\\f145\";\n$fa-var-times: \"\\f00d\";\n$fa-var-times-circle: \"\\f057\";\n$fa-var-times-circle-o: \"\\f05c\";\n$fa-var-tint: \"\\f043\";\n$fa-var-toggle-down: \"\\f150\";\n$fa-var-toggle-left: \"\\f191\";\n$fa-var-toggle-off: \"\\f204\";\n$fa-var-toggle-on: \"\\f205\";\n$fa-var-toggle-right: \"\\f152\";\n$fa-var-toggle-up: \"\\f151\";\n$fa-var-trademark: \"\\f25c\";\n$fa-var-train: \"\\f238\";\n$fa-var-transgender: \"\\f224\";\n$fa-var-transgender-alt: \"\\f225\";\n$fa-var-trash: \"\\f1f8\";\n$fa-var-trash-o: \"\\f014\";\n$fa-var-tree: \"\\f1bb\";\n$fa-var-trello: \"\\f181\";\n$fa-var-tripadvisor: \"\\f262\";\n$fa-var-trophy: \"\\f091\";\n$fa-var-truck: \"\\f0d1\";\n$fa-var-try: \"\\f195\";\n$fa-var-tty: \"\\f1e4\";\n$fa-var-tumblr: \"\\f173\";\n$fa-var-tumblr-square: \"\\f174\";\n$fa-var-turkish-lira: \"\\f195\";\n$fa-var-tv: \"\\f26c\";\n$fa-var-twitch: \"\\f1e8\";\n$fa-var-twitter: \"\\f099\";\n$fa-var-twitter-square: \"\\f081\";\n$fa-var-umbrella: \"\\f0e9\";\n$fa-var-underline: \"\\f0cd\";\n$fa-var-undo: \"\\f0e2\";\n$fa-var-university: \"\\f19c\";\n$fa-var-unlink: \"\\f127\";\n$fa-var-unlock: \"\\f09c\";\n$fa-var-unlock-alt: \"\\f13e\";\n$fa-var-unsorted: \"\\f0dc\";\n$fa-var-upload: \"\\f093\";\n$fa-var-usb: \"\\f287\";\n$fa-var-usd: \"\\f155\";\n$fa-var-user: \"\\f007\";\n$fa-var-user-md: \"\\f0f0\";\n$fa-var-user-plus: \"\\f234\";\n$fa-var-user-secret: \"\\f21b\";\n$fa-var-user-times: \"\\f235\";\n$fa-var-users: \"\\f0c0\";\n$fa-var-venus: \"\\f221\";\n$fa-var-venus-double: \"\\f226\";\n$fa-var-venus-mars: \"\\f228\";\n$fa-var-viacoin: \"\\f237\";\n$fa-var-video-camera: \"\\f03d\";\n$fa-var-vimeo: \"\\f27d\";\n$fa-var-vimeo-square: \"\\f194\";\n$fa-var-vine: \"\\f1ca\";\n$fa-var-vk: \"\\f189\";\n$fa-var-volume-down: \"\\f027\";\n$fa-var-volume-off: \"\\f026\";\n$fa-var-volume-up: \"\\f028\";\n$fa-var-warning: \"\\f071\";\n$fa-var-wechat: \"\\f1d7\";\n$fa-var-weibo: \"\\f18a\";\n$fa-var-weixin: \"\\f1d7\";\n$fa-var-whatsapp: \"\\f232\";\n$fa-var-wheelchair: \"\\f193\";\n$fa-var-wifi: \"\\f1eb\";\n$fa-var-wikipedia-w: \"\\f266\";\n$fa-var-windows: \"\\f17a\";\n$fa-var-won: \"\\f159\";\n$fa-var-wordpress: \"\\f19a\";\n$fa-var-wrench: \"\\f0ad\";\n$fa-var-xing: \"\\f168\";\n$fa-var-xing-square: \"\\f169\";\n$fa-var-y-combinator: \"\\f23b\";\n$fa-var-y-combinator-square: \"\\f1d4\";\n$fa-var-yahoo: \"\\f19e\";\n$fa-var-yc: \"\\f23b\";\n$fa-var-yc-square: \"\\f1d4\";\n$fa-var-yelp: \"\\f1e9\";\n$fa-var-yen: \"\\f157\";\n$fa-var-youtube: \"\\f167\";\n$fa-var-youtube-play: \"\\f16a\";\n$fa-var-youtube-square: \"\\f166\";\n\n","// Bordered & Pulled\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n padding: .2em .25em .15em;\n border: solid .08em $fa-border-color;\n border-radius: .1em;\n}\n\n.#{$fa-css-prefix}-pull-left { float: left; }\n.#{$fa-css-prefix}-pull-right { float: right; }\n\n.#{$fa-css-prefix} {\n &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }\n &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n.#{$fa-css-prefix} {\n &.pull-left { margin-right: .3em; }\n &.pull-right { margin-left: .3em; }\n}\n","// Spinning Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear;\n}\n\n.#{$fa-css-prefix}-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n","// Rotated & Flipped Icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }\n.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }\n.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }\n\n.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }\n.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .#{$fa-css-prefix}-rotate-90,\n:root .#{$fa-css-prefix}-rotate-180,\n:root .#{$fa-css-prefix}-rotate-270,\n:root .#{$fa-css-prefix}-flip-horizontal,\n:root .#{$fa-css-prefix}-flip-vertical {\n filter: none;\n}\n","// Mixins\n// --------------------------\n\n@mixin fa-icon() {\n display: inline-block;\n font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration\n font-size: inherit; // can't have font-size inherit on line above, so need to override\n text-rendering: auto; // optimizelegibility throws things off #1094\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n}\n\n@mixin fa-icon-rotate($degrees, $rotation) {\n filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});\n -webkit-transform: rotate($degrees);\n -ms-transform: rotate($degrees);\n transform: rotate($degrees);\n}\n\n@mixin fa-icon-flip($horiz, $vert, $rotation) {\n filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});\n -webkit-transform: scale($horiz, $vert);\n -ms-transform: scale($horiz, $vert);\n transform: scale($horiz, $vert);\n}\n","// Stacked Icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n position: relative;\n display: inline-block;\n width: 2em;\n height: 2em;\n line-height: 2em;\n vertical-align: middle;\n}\n.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {\n position: absolute;\n left: 0;\n width: 100%;\n text-align: center;\n}\n.#{$fa-css-prefix}-stack-1x { line-height: inherit; }\n.#{$fa-css-prefix}-stack-2x { font-size: 2em; }\n.#{$fa-css-prefix}-inverse { color: $fa-inverse; }\n","/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n readers do not read off random characters that represent icons */\n\n.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }\n.#{$fa-css-prefix}-music:before { content: $fa-var-music; }\n.#{$fa-css-prefix}-search:before { content: $fa-var-search; }\n.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }\n.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }\n.#{$fa-css-prefix}-star:before { content: $fa-var-star; }\n.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }\n.#{$fa-css-prefix}-user:before { content: $fa-var-user; }\n.#{$fa-css-prefix}-film:before { content: $fa-var-film; }\n.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }\n.#{$fa-css-prefix}-th:before { content: $fa-var-th; }\n.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }\n.#{$fa-css-prefix}-check:before { content: $fa-var-check; }\n.#{$fa-css-prefix}-remove:before,\n.#{$fa-css-prefix}-close:before,\n.#{$fa-css-prefix}-times:before { content: $fa-var-times; }\n.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }\n.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }\n.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }\n.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }\n.#{$fa-css-prefix}-gear:before,\n.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }\n.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }\n.#{$fa-css-prefix}-home:before { content: $fa-var-home; }\n.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }\n.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }\n.#{$fa-css-prefix}-road:before { content: $fa-var-road; }\n.#{$fa-css-prefix}-download:before { content: $fa-var-download; }\n.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }\n.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }\n.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }\n.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }\n.#{$fa-css-prefix}-rotate-right:before,\n.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }\n.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }\n.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }\n.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }\n.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }\n.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }\n.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }\n.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }\n.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }\n.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }\n.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }\n.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }\n.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }\n.#{$fa-css-prefix}-book:before { content: $fa-var-book; }\n.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }\n.#{$fa-css-prefix}-print:before { content: $fa-var-print; }\n.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }\n.#{$fa-css-prefix}-font:before { content: $fa-var-font; }\n.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }\n.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }\n.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }\n.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }\n.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }\n.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }\n.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }\n.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }\n.#{$fa-css-prefix}-list:before { content: $fa-var-list; }\n.#{$fa-css-prefix}-dedent:before,\n.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }\n.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }\n.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }\n.#{$fa-css-prefix}-photo:before,\n.#{$fa-css-prefix}-image:before,\n.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }\n.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }\n.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }\n.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }\n.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }\n.#{$fa-css-prefix}-edit:before,\n.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }\n.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }\n.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }\n.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }\n.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }\n.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }\n.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }\n.#{$fa-css-prefix}-play:before { content: $fa-var-play; }\n.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }\n.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }\n.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }\n.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }\n.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }\n.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }\n.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }\n.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }\n.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }\n.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }\n.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }\n.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }\n.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }\n.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }\n.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }\n.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }\n.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }\n.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }\n.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }\n.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }\n.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }\n.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }\n.#{$fa-css-prefix}-mail-forward:before,\n.#{$fa-css-prefix}-share:before { content: $fa-var-share; }\n.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }\n.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }\n.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }\n.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }\n.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }\n.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }\n.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }\n.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }\n.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }\n.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }\n.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }\n.#{$fa-css-prefix}-warning:before,\n.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }\n.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }\n.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }\n.#{$fa-css-prefix}-random:before { content: $fa-var-random; }\n.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }\n.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }\n.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }\n.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }\n.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }\n.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }\n.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }\n.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }\n.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }\n.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }\n.#{$fa-css-prefix}-bar-chart-o:before,\n.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }\n.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }\n.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }\n.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }\n.#{$fa-css-prefix}-key:before { content: $fa-var-key; }\n.#{$fa-css-prefix}-gears:before,\n.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }\n.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }\n.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }\n.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }\n.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }\n.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }\n.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }\n.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }\n.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }\n.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }\n.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }\n.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }\n.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }\n.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }\n.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }\n.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }\n.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }\n.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }\n.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }\n.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }\n.#{$fa-css-prefix}-facebook-f:before,\n.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }\n.#{$fa-css-prefix}-github:before { content: $fa-var-github; }\n.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }\n.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }\n.#{$fa-css-prefix}-feed:before,\n.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }\n.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }\n.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }\n.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }\n.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }\n.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }\n.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }\n.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }\n.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }\n.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }\n.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }\n.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }\n.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }\n.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }\n.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }\n.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }\n.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }\n.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }\n.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }\n.#{$fa-css-prefix}-group:before,\n.#{$fa-css-prefix}-users:before { content: $fa-var-users; }\n.#{$fa-css-prefix}-chain:before,\n.#{$fa-css-prefix}-link:before { content: $fa-var-link; }\n.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }\n.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }\n.#{$fa-css-prefix}-cut:before,\n.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }\n.#{$fa-css-prefix}-copy:before,\n.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }\n.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }\n.#{$fa-css-prefix}-save:before,\n.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }\n.#{$fa-css-prefix}-square:before { content: $fa-var-square; }\n.#{$fa-css-prefix}-navicon:before,\n.#{$fa-css-prefix}-reorder:before,\n.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }\n.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }\n.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }\n.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }\n.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }\n.#{$fa-css-prefix}-table:before { content: $fa-var-table; }\n.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }\n.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }\n.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }\n.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }\n.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }\n.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }\n.#{$fa-css-prefix}-money:before { content: $fa-var-money; }\n.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }\n.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }\n.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }\n.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }\n.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }\n.#{$fa-css-prefix}-unsorted:before,\n.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }\n.#{$fa-css-prefix}-sort-down:before,\n.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }\n.#{$fa-css-prefix}-sort-up:before,\n.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }\n.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }\n.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }\n.#{$fa-css-prefix}-rotate-left:before,\n.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }\n.#{$fa-css-prefix}-legal:before,\n.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }\n.#{$fa-css-prefix}-dashboard:before,\n.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }\n.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }\n.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }\n.#{$fa-css-prefix}-flash:before,\n.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }\n.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }\n.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }\n.#{$fa-css-prefix}-paste:before,\n.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }\n.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }\n.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }\n.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }\n.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }\n.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }\n.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }\n.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }\n.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }\n.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }\n.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }\n.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }\n.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }\n.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }\n.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }\n.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }\n.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }\n.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }\n.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }\n.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }\n.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }\n.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }\n.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }\n.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }\n.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }\n.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }\n.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }\n.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }\n.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }\n.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }\n.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }\n.#{$fa-css-prefix}-mobile-phone:before,\n.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }\n.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }\n.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }\n.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }\n.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }\n.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }\n.#{$fa-css-prefix}-mail-reply:before,\n.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }\n.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }\n.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }\n.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }\n.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }\n.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }\n.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }\n.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }\n.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }\n.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }\n.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }\n.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }\n.#{$fa-css-prefix}-code:before { content: $fa-var-code; }\n.#{$fa-css-prefix}-mail-reply-all:before,\n.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }\n.#{$fa-css-prefix}-star-half-empty:before,\n.#{$fa-css-prefix}-star-half-full:before,\n.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }\n.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }\n.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }\n.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }\n.#{$fa-css-prefix}-unlink:before,\n.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }\n.#{$fa-css-prefix}-question:before { content: $fa-var-question; }\n.#{$fa-css-prefix}-info:before { content: $fa-var-info; }\n.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }\n.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }\n.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }\n.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }\n.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }\n.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }\n.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }\n.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }\n.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }\n.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }\n.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }\n.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }\n.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }\n.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }\n.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }\n.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }\n.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }\n.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }\n.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }\n.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }\n.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }\n.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }\n.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }\n.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }\n.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }\n.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }\n.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }\n.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }\n.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }\n.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }\n.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }\n.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }\n.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }\n.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }\n.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }\n.#{$fa-css-prefix}-toggle-down:before,\n.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }\n.#{$fa-css-prefix}-toggle-up:before,\n.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }\n.#{$fa-css-prefix}-toggle-right:before,\n.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }\n.#{$fa-css-prefix}-euro:before,\n.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }\n.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }\n.#{$fa-css-prefix}-dollar:before,\n.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }\n.#{$fa-css-prefix}-rupee:before,\n.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }\n.#{$fa-css-prefix}-cny:before,\n.#{$fa-css-prefix}-rmb:before,\n.#{$fa-css-prefix}-yen:before,\n.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }\n.#{$fa-css-prefix}-ruble:before,\n.#{$fa-css-prefix}-rouble:before,\n.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }\n.#{$fa-css-prefix}-won:before,\n.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }\n.#{$fa-css-prefix}-bitcoin:before,\n.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }\n.#{$fa-css-prefix}-file:before { content: $fa-var-file; }\n.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }\n.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }\n.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }\n.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }\n.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }\n.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }\n.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }\n.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }\n.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }\n.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }\n.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }\n.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }\n.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }\n.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }\n.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }\n.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }\n.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }\n.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }\n.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }\n.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }\n.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }\n.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }\n.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }\n.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }\n.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }\n.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }\n.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }\n.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }\n.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }\n.#{$fa-css-prefix}-android:before { content: $fa-var-android; }\n.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }\n.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }\n.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }\n.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }\n.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }\n.#{$fa-css-prefix}-female:before { content: $fa-var-female; }\n.#{$fa-css-prefix}-male:before { content: $fa-var-male; }\n.#{$fa-css-prefix}-gittip:before,\n.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }\n.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }\n.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }\n.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }\n.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }\n.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }\n.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }\n.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }\n.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }\n.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }\n.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }\n.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }\n.#{$fa-css-prefix}-toggle-left:before,\n.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }\n.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }\n.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }\n.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }\n.#{$fa-css-prefix}-turkish-lira:before,\n.#{$fa-css-prefix}-try:before { content: $fa-var-try; }\n.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }\n.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }\n.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }\n.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }\n.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }\n.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }\n.#{$fa-css-prefix}-institution:before,\n.#{$fa-css-prefix}-bank:before,\n.#{$fa-css-prefix}-university:before { content: $fa-var-university; }\n.#{$fa-css-prefix}-mortar-board:before,\n.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }\n.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }\n.#{$fa-css-prefix}-google:before { content: $fa-var-google; }\n.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }\n.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }\n.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }\n.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }\n.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }\n.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }\n.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }\n.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }\n.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }\n.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }\n.#{$fa-css-prefix}-language:before { content: $fa-var-language; }\n.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }\n.#{$fa-css-prefix}-building:before { content: $fa-var-building; }\n.#{$fa-css-prefix}-child:before { content: $fa-var-child; }\n.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }\n.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }\n.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }\n.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }\n.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }\n.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }\n.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }\n.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }\n.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }\n.#{$fa-css-prefix}-automobile:before,\n.#{$fa-css-prefix}-car:before { content: $fa-var-car; }\n.#{$fa-css-prefix}-cab:before,\n.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }\n.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }\n.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }\n.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }\n.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }\n.#{$fa-css-prefix}-database:before { content: $fa-var-database; }\n.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }\n.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }\n.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }\n.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }\n.#{$fa-css-prefix}-file-photo-o:before,\n.#{$fa-css-prefix}-file-picture-o:before,\n.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }\n.#{$fa-css-prefix}-file-zip-o:before,\n.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }\n.#{$fa-css-prefix}-file-sound-o:before,\n.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }\n.#{$fa-css-prefix}-file-movie-o:before,\n.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }\n.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }\n.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }\n.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }\n.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }\n.#{$fa-css-prefix}-life-bouy:before,\n.#{$fa-css-prefix}-life-buoy:before,\n.#{$fa-css-prefix}-life-saver:before,\n.#{$fa-css-prefix}-support:before,\n.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }\n.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }\n.#{$fa-css-prefix}-ra:before,\n.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }\n.#{$fa-css-prefix}-ge:before,\n.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }\n.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }\n.#{$fa-css-prefix}-git:before { content: $fa-var-git; }\n.#{$fa-css-prefix}-y-combinator-square:before,\n.#{$fa-css-prefix}-yc-square:before,\n.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }\n.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }\n.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }\n.#{$fa-css-prefix}-wechat:before,\n.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }\n.#{$fa-css-prefix}-send:before,\n.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }\n.#{$fa-css-prefix}-send-o:before,\n.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }\n.#{$fa-css-prefix}-history:before { content: $fa-var-history; }\n.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }\n.#{$fa-css-prefix}-header:before { content: $fa-var-header; }\n.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }\n.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }\n.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }\n.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }\n.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }\n.#{$fa-css-prefix}-soccer-ball-o:before,\n.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }\n.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }\n.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }\n.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }\n.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }\n.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }\n.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }\n.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }\n.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }\n.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }\n.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }\n.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }\n.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }\n.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }\n.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }\n.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }\n.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }\n.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }\n.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }\n.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }\n.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }\n.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }\n.#{$fa-css-prefix}-at:before { content: $fa-var-at; }\n.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }\n.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }\n.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }\n.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }\n.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }\n.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }\n.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }\n.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }\n.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }\n.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }\n.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }\n.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }\n.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }\n.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }\n.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }\n.#{$fa-css-prefix}-shekel:before,\n.#{$fa-css-prefix}-sheqel:before,\n.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }\n.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }\n.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }\n.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }\n.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }\n.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }\n.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }\n.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }\n.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }\n.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }\n.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }\n.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }\n.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }\n.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }\n.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }\n.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }\n.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }\n.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }\n.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }\n.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }\n.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }\n.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }\n.#{$fa-css-prefix}-intersex:before,\n.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }\n.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }\n.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }\n.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }\n.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }\n.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }\n.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }\n.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }\n.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }\n.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }\n.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }\n.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }\n.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }\n.#{$fa-css-prefix}-server:before { content: $fa-var-server; }\n.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }\n.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }\n.#{$fa-css-prefix}-hotel:before,\n.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }\n.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }\n.#{$fa-css-prefix}-train:before { content: $fa-var-train; }\n.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }\n.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }\n.#{$fa-css-prefix}-yc:before,\n.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }\n.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }\n.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }\n.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }\n.#{$fa-css-prefix}-battery-4:before,\n.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }\n.#{$fa-css-prefix}-battery-3:before,\n.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }\n.#{$fa-css-prefix}-battery-2:before,\n.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }\n.#{$fa-css-prefix}-battery-1:before,\n.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }\n.#{$fa-css-prefix}-battery-0:before,\n.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }\n.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }\n.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }\n.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }\n.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }\n.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }\n.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }\n.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }\n.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }\n.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }\n.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }\n.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }\n.#{$fa-css-prefix}-hourglass-1:before,\n.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }\n.#{$fa-css-prefix}-hourglass-2:before,\n.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }\n.#{$fa-css-prefix}-hourglass-3:before,\n.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }\n.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }\n.#{$fa-css-prefix}-hand-grab-o:before,\n.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }\n.#{$fa-css-prefix}-hand-stop-o:before,\n.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }\n.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }\n.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }\n.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }\n.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }\n.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }\n.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }\n.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }\n.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }\n.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }\n.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }\n.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }\n.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }\n.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }\n.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }\n.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }\n.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }\n.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }\n.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }\n.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }\n.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }\n.#{$fa-css-prefix}-tv:before,\n.#{$fa-css-prefix}-television:before { content: $fa-var-television; }\n.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }\n.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }\n.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }\n.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }\n.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }\n.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }\n.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }\n.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }\n.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }\n.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }\n.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }\n.#{$fa-css-prefix}-map:before { content: $fa-var-map; }\n.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }\n.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }\n.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }\n.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }\n.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }\n.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }\n.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }\n.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }\n.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }\n.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }\n.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }\n.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }\n.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }\n.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }\n.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }\n.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }\n.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }\n.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }\n.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }\n.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }\n.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }\n.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }\n.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }\n.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }\n.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }\n.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }\n","// Foundation for Sites by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n// scss-lint:disable ColorVariable, QualifyingElement, VendorPrefix\n\n////\n/// @group global\n////\n\n/// Font size attribute applied to `` and ``. We use 100% by default so the value is inherited from the user's browser settings.\n/// @type Number\n$global-font-size: 100% !default;\n\n/// Global width of your site. Used by the grid to determine row width.\n/// @type Number\n$global-width: rem-calc(1200) !default;\n\n/// Default line height for all type. `$global-lineheight` is 24px while `$global-font-size` is 16px\n/// @type Number\n$global-lineheight: 1.5 !default;\n\n/// Colors used for buttons, callouts, links, etc. There must always be a color called `primary`.\n/// @type Map\n$foundation-palette: (\n primary: #2199e8,\n secondary: #777,\n success: #3adb76,\n warning: #ffae00,\n alert: #ec5840,\n) !default;\n\n/// Color used for light gray UI items.\n/// @type Color\n$light-gray: #e6e6e6 !default;\n\n/// Color used for medium gray UI items.\n/// @type Color\n$medium-gray: #cacaca !default;\n\n/// Color used for dark gray UI items.\n/// @type Color\n$dark-gray: #8a8a8a !default;\n\n/// Color used for black ui items.\n/// @type Color\n$black: #0a0a0a !default;\n\n/// Color used for white ui items.\n/// @type Color\n$white: #fefefe !default;\n\n/// Background color of the body.\n/// @type Color\n$body-background: $white !default;\n\n/// Text color of the body.\n/// @type Color\n$body-font-color: $black !default;\n\n/// Font stack of the body.\n/// @type List\n$body-font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif !default;\n\n/// Set to `true` to enable antialiased type, using the `-webkit-font-smoothing` and `-moz-osx-font-smoothing` CSS properties.\n/// @type Boolean\n$body-antialiased: true !default;\n\n/// Global value used for margin on components.\n/// @type Number\n$global-margin: 1rem !default;\n\n/// Global value used for padding on components.\n/// @type Number\n$global-padding: 1rem !default;\n\n/// Global font weight used for normal type.\n/// @type Keyword | Number\n$global-weight-normal: normal !default;\n\n/// Global font weight used for bold type.\n/// @type Keyword | Number\n$global-weight-bold: bold !default;\n\n/// Global value used for all elements that have a border radius.\n/// @type Number\n$global-radius: 0 !default;\n\n/// Sets the text direction of the CSS. Can be either `ltr` or `rtl`.\n/// @type Keyword\n$global-text-direction: ltr !default;\n\n/// Enables flexbox for components that support it.\n/// @type Boolean\n$global-flexbox: false !default;\n\n@if not map-has-key($foundation-palette, primary) {\n @error 'In $foundation-palette, you must have a color named \"primary\".';\n}\n\n// Internal variables used for text direction\n$global-left: if($global-text-direction == rtl, right, left);\n$global-right: if($global-text-direction == rtl, left, right);\n\n// Internal variables used for colors\n$primary-color: map-get($foundation-palette, primary);\n$secondary-color: map-get($foundation-palette, secondary);\n$success-color: map-get($foundation-palette, success);\n$warning-color: map-get($foundation-palette, warning);\n$alert-color: map-get($foundation-palette, alert);\n\n// Remove this in 6.3\n$-zf-menu-icon-imported: false;\n$-zf-flex-classes-imported: false;\n\n@mixin foundation-global-styles {\n @include -zf-normalize;\n\n // These styles are applied to a tag, which is read by the Foundation JavaScript\n .foundation-mq {\n font-family: '#{-zf-bp-serialize($breakpoints)}';\n }\n\n html {\n font-size: $global-font-size;\n box-sizing: border-box;\n }\n\n // Set box-sizing globally to handle padding and border widths\n *,\n *::before,\n *::after {\n box-sizing: inherit;\n }\n\n // Default body styles\n body {\n padding: 0;\n margin: 0;\n font-family: $body-font-family;\n font-weight: $global-weight-normal;\n line-height: $global-lineheight;\n color: $body-font-color;\n background: $body-background;\n\n @if ($body-antialiased) {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n }\n\n img {\n // Grid defaults to get images and embeds to work properly\n max-width: 100%;\n height: auto;\n -ms-interpolation-mode: bicubic;\n\n // Get rid of gap under images by making them display: inline-block; by default\n display: inline-block;\n vertical-align: middle;\n }\n\n // Make sure textarea takes on height automatically\n textarea {\n height: auto;\n min-height: 50px;\n border-radius: $global-radius;\n }\n\n // Make select elements are 100% width by default\n select {\n width: 100%;\n border-radius: $global-radius;\n }\n\n // Styles Google Maps and MapQuest embeds properly\n // scss-lint:disable IdSelector\n #map_canvas,\n .map_canvas,\n .mqa-display {\n img,\n embed,\n object {\n max-width: none !important;\n }\n }\n\n // Reset
    + - +
    diff --git a/web/app/themes/oe-brixton/functions.php b/web/app/themes/oe-brixton/functions.php old mode 100755 new mode 100644 index 95db676..4985a12 --- a/web/app/themes/oe-brixton/functions.php +++ b/web/app/themes/oe-brixton/functions.php @@ -44,11 +44,17 @@ /** Change WP's sticky post class */ require_once( 'library/sticky-posts.php' ); +/** Configure responsive image sizes */ +require_once( 'library/responsive-images.php' ); + /** If your site requires protocol relative url's for theme assets, uncomment the line below */ // require_once( 'library/protocol-relative-theme-assets.php' ); /** general oe functions */ -require_once( 'library/oe-brixton.php' ); +require_once( 'library/oe-ben.php' ); /** to customize the theme with different */ require_once( 'library/theme_customizer.php' ); + +/** to customize the page builder */ +require_once( 'library/site-origin-extension.php' ); diff --git a/web/app/themes/oe-brixton/gulpfile.js b/web/app/themes/oe-brixton/gulpfile.js old mode 100755 new mode 100644 index 2489e58..47c0ff3 --- a/web/app/themes/oe-brixton/gulpfile.js +++ b/web/app/themes/oe-brixton/gulpfile.js @@ -10,6 +10,7 @@ var sequence = require('run-sequence'); var colors = require('colors'); var dateFormat = require('dateformat'); var del = require('del'); +var cleanCSS = require('gulp-clean-css'); // Enter URL of your local server here // Example: 'http://localwebsite.dev' @@ -19,7 +20,11 @@ var URL = ''; var isProduction = !!(argv.production); // Browsers to target when prefixing CSS. -var COMPATIBILITY = ['last 2 versions', 'ie >= 9']; +var COMPATIBILITY = [ + 'last 2 versions', + 'ie >= 9', + 'Android >= 2.3' +]; // File paths to various assets are defined here. var PATHS = { @@ -100,9 +105,6 @@ gulp.task('browser-sync', ['build'], function() { // Compile Sass into CSS // In production, the CSS is compressed gulp.task('sass', function() { - // Minify CSS if run wtih --production flag - var minifycss = $.if(isProduction, $.minifyCss()); - return gulp.src('assets/scss/foundation.scss') .pipe($.sourcemaps.init()) .pipe($.sass({ @@ -115,7 +117,8 @@ gulp.task('sass', function() { .pipe($.autoprefixer({ browsers: COMPATIBILITY })) - .pipe(minifycss) + // Minify CSS if run with --production flag + .pipe($.if(isProduction, cleanCSS())) .pipe($.if(!isProduction, $.sourcemaps.write('.'))) .pipe(gulp.dest('assets/stylesheets')) .pipe(browserSync.stream({match: '**/*.css'})); @@ -162,21 +165,11 @@ gulp.task('javascript', function() { // Copy task gulp.task('copy', function() { - // Motion UI - var motionUi = gulp.src('assets/components/motion-ui/**/*.*') - .pipe($.flatten()) - .pipe(gulp.dest('assets/javascript/vendor/motion-ui')); - - // What Input - var whatInput = gulp.src('assets/components/what-input/**/*.*') - .pipe($.flatten()) - .pipe(gulp.dest('assets/javascript/vendor/what-input')); - // Font Awesome var fontAwesome = gulp.src('assets/components/fontawesome/fonts/**/*.*') .pipe(gulp.dest('assets/fonts')); - return merge(motionUi, whatInput, fontAwesome); + return merge(fontAwesome); }); // Package task diff --git a/web/app/themes/oe-brixton/header.php b/web/app/themes/oe-brixton/header.php old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/index.php b/web/app/themes/oe-brixton/index.php old mode 100755 new mode 100644 index 059219b..3c9c713 --- a/web/app/themes/oe-brixton/index.php +++ b/web/app/themes/oe-brixton/index.php @@ -15,7 +15,6 @@ get_header(); ?> -
    @@ -31,13 +30,16 @@ - + - - +
    diff --git a/web/app/themes/oe-brixton/languages/FoundationPress.pot b/web/app/themes/oe-brixton/languages/FoundationPress.pot old mode 100755 new mode 100644 index 11e8994..ee43d58 --- a/web/app/themes/oe-brixton/languages/FoundationPress.pot +++ b/web/app/themes/oe-brixton/languages/FoundationPress.pot @@ -193,7 +193,7 @@ msgstr "" #: library/entry-meta.php:4 #, php-format -msgid "Posted on %s at %s." +msgid "Posted on %1$s at %2$s." msgstr "" #: library/entry-meta.php:5 diff --git a/web/app/themes/oe-brixton/languages/ca.mo b/web/app/themes/oe-brixton/languages/ca.mo old mode 100755 new mode 100644 index 733b2ae9d6dcbaf67e2f45fa17706089270d63e8..2a02fb6928c52cbc39dc1b3bcd35b04c4ae35660 GIT binary patch delta 701 zcmX}p%PT}-7{~EvE^fmxnA|U?j9UzI6lN&d5K2lEC1pX9h>;?7#LkLbH>5zc3z)lSDGG z4AU@#L)eL_c!CpnjcsVSL=tceIc16;&0oL}ZlDkEkW)TgV#%US4xk1uVLt9+H%3r9WMi_f)Qb#BHEJQv*oeKTA6`QTZlUJvS=?yw6?*X=HSiTR z=o|ILc#p^kdawm&(ZEYAz(?%D5ASQ1|Q^d(ckbs<9V!4=rQ|qiwF-Ja$YM>Uy=LAXhP$mh*o^Oy`W#W%|O#$edAH y=Zl;s-r7A4ely@V8w@kh6sWHX)NL*&Ups;|p-3?0$mx#GHYP{I(HCAl2lijYvrGK| delta 693 zcmXxhODIH97{Kw*%yp^&msl2I%Wc}0{d$wCxHNl76qWHiav zj#74(%8HT|3q{KR%edWhf9KwN&Ue1^oz_!bZhgs;yc05O|&=2ZP9ZaGt#i)sR(1RVQ3$LIRH&Ekj`{-!k0H)v_YQQJd zKp&_REe;Vc+OZMG(7-d)gzvEpU(kh>iBtjmQR5C_AueDK9w0-d{hLl79XqRb;|OZW zuaRoXE$W#)U?+ZI8MaYBJ;Pb#1pmtHKemqRIf;{2Ld&ITI{#N~(6mk1BBl)Qv{4v5 ujk>is+^&immsw+&W_@*4X@%)uj=i+H%d3M8_9I&~BaP9)DF(ke_AS3HE=*1U diff --git a/web/app/themes/oe-brixton/languages/ca.po b/web/app/themes/oe-brixton/languages/ca.po old mode 100755 new mode 100644 index f5a7397..67dd613 --- a/web/app/themes/oe-brixton/languages/ca.po +++ b/web/app/themes/oe-brixton/languages/ca.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: FoundationPress\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-09-13 17:56+0200\n" -"PO-Revision-Date: 2015-06-16 11:43+0100\n" +"PO-Revision-Date: 2016-10-16 10:05+0200\n" "Last-Translator: \n" "Language-Team: Lluis Bordas \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.9\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -203,8 +203,8 @@ msgstr "Pàgines:" #: library/entry-meta.php:4 #, php-format -msgid "Posted on %s at %s." -msgstr "Publicat el %s a les %s." +msgid "Posted on %1$s at %2$s." +msgstr "Publicat el %1$s a les %2$s." #: library/entry-meta.php:5 msgid "Written by" diff --git a/web/app/themes/oe-brixton/languages/cs_CZ.mo b/web/app/themes/oe-brixton/languages/cs_CZ.mo new file mode 100644 index 0000000000000000000000000000000000000000..402f9d43687620fa9b8f6d6f4175909f10ff3677 GIT binary patch literal 5564 zcma)<-)|gO6~~9tLK{kfLZPIk+?qN~=(XJ*$wXs9~! z?04qQz4!e3o^y}?eDCeAdR#Ny4|2czAOVR2YwWM1iTk4 zjowd!`+0u`{47`>z4yRR^ZtEs7JMC)_3w_`Zuh&QTEASHUzXd-IK7=rlUjjb?J_UXbTm+ASE$}no1}J*`5)`?= z2gSa(L0R`#Q1<)x==~0qk$Lxli1PM>i{Qgx1x&!tgBzg8djp&U{|I8Tw;v-8f(n%N zXF-v-2#UN0_zf@x#lAm)Yv5nNGvIUk3O{}ia{dmAoPUCtQN1)i_K-u>dQ1t!@h$`OCL6QF(Q1p5W^uf2m$HC() z`XU&C65p%fi{MW|(M!ly0`3My-f>WYPl4hu4SomwHpmk1F38sf9|V`dS3p$v{szkW z|9}sJ;`}*a0umxA=8@Netx@A4}Xl zbuck6WkF*6L*AsiVA76_Q75P(#$3y&?fuqtSEr36=(t)dKw{FX)ODkM@X*AGQ=mvu^~^aNd#7y_nb?7` z3*yYE#Au&wE0sz$W**voKAOuj;dpglgwI29Q-Kb7h4}-KNZl7CJ=XBCE@-T1wAdBQ_Dbiu+ z&52s)Su$s{*!SiNHAdQbXPruoiBh$WOLcr8NhM%Ttp>5L)?3<%H%Ft1QK7YMtjCz7 zq83fk(w&qIbkb2xQAlj-60PFed=5FhR&b`>KlomK}jR3FJ{Qt{@ChzN1il5vEunT`iz z-3^-B1vXZp#zN?;>7}G!D&#a3;@d^-cW+7<< z!@Q+YGK|T(WRs*Ysq*;_g&%*y=ziyIpWTb1URAl?X>MH8S zPPI*M-6lT9FJ<*8aB7_J%eX9eEbLHvFZERvG+R!!gyMB$Vv0g!yT&gu1XIyIhE1wL zAfRqZf=K~zChAy76@)#NK|m5(*P*SqEagF}qRi^R7tsicP%j#IwxZ6&QaL1u+g}M% zH!$mzle|8m|0PpTDT3amBybL$>OJpks4gj)K|@x{uWrIj8ILHnQbqOzCLHHlUIK*( zqLm&?smMyHO}R|bRd1>mE(LVUdyMbP95!9 zHC3tXj4l!3hB;lRTvLV4+iRX5rOP>v&6-+SnOQM2D=V-Z%3X1_YH50AB`#olbS1X7 zGy1gaxlvk)8?_^iQoiVlOlYw9%JxuvrIpdRR}VK#i*l0KRyf!kzG=3u8t-{ZaqI>g!)xBw%b4kuKiHrk(poKa!@&k` zF+Rx4i98gCc7p?Uc+Ie`RVY@R4!vB#jGATZw1ym5iBy3O&u1fe%G+&8YLSJkTURmbG6vI3l@$JAW;DFPL+<%CoL-{tsx=O7)e4QT!=R$(Aymv7 z7!^^fiv_CNlL>ouQXa474h?Q-A~O?t2epKxq&Y;1R7J0qMHeNOL| z#ifH^Z(Vg+?!`b>5Y1Sv>D@f|01erB!ora$u6=JzFW7!J!QNYceJ&bYk1fp@hOE6O zGseBz@Ft`YhvbA*~Pqu2{clrl1Gyt+Z}kmDqkrh;o}?l}PL1#E}r;LY_`W^3Dl$ zN0YK5?;~4LPY*WRJ$kufO-c3JoZDDN)Ch70F{mIYF8>R(i_%i)(H-@4QXhoCCJu_W zj#8W?`iZdqiKB6Z!-Gp!HiqbaC#@MdB z579nO)&w9dkH(LJlS@J>|~@=5Xs4mSc(fGMKN)i$ z>B@A~kNCh}3Hu<|8vU!?x~fxI85^I1m35d-BS|^Mh~3d-a-${86Pn(nNyq0=MO_qL zN-5zzH(T{>oqC^Bb;pq5jl8eK-0R~Q_V`b!lj_i$AD5?&&4zCh2jzN5e|CBPoV1xm zHmUA*0_^NcPGzJS;_HK(ZZBsf^Trh>5V}+#icocDx#H|-6JKJPHd+ul%(c${7o;u0 WSo$}NEc#I4w{)T{n, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: foundationpress-libsass-template 5.4.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-05 11:14+0200\n" +"PO-Revision-Date: 2016-10-16 10:05+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Poedit 1.8.9\n" +"X-Poedit-Basepath: ..\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" +"_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_ex:1,2c;" +"esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;" +"esc_html_x:1,2c\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: node_modules\n" +"X-Poedit-SearchPathExcluded-1: assets\n" + +#: 404.php:16 +msgid "File Not Found" +msgstr "Soubor nenalezen" + +#: 404.php:20 +msgid "" +"The page you are looking for might have been removed, had its name changed, " +"or is temporarily unavailable." +msgstr "" +"Stránka, kterou hledáte, byla pravděpodobně odstraněna, její název byl " +"změněn, nebo je dočasně nedostupná." + +#: 404.php:22 +msgid "Please try the following:" +msgstr "Prosím, zkuste následující:" + +#: 404.php:24 +msgid "Check your spelling" +msgstr "Zkontrolujte zadaný výraz" + +#: 404.php:25 +#, php-format +msgid "Return to the
    home page" +msgstr "Zpět na domovskou stránku" + +#: 404.php:26 +msgid "Click the Back button" +msgstr "" +"Klikněte na tlačítko Zpět vašeho " +"prohlížeče" + +#: archive.php:37 index.php:35 search.php:34 +msgid "← Older posts" +msgstr "← Starší příspěvky" + +#: archive.php:38 index.php:36 search.php:35 +msgid "Newer posts →" +msgstr "Novější příspěvky →" + +#: comments.php:26 +msgid "Reply" +msgstr "Odpovědět" + +#: comments.php:35 library/foundation.php:157 +msgid "Your comment is awaiting moderation." +msgstr "Váš komentář čeká na schválení administrátorem." + +#: comments.php:54 +msgid "Please do not load this page directly. Thanks!" +msgstr "Prosím nenačítejte tuto stránku přímo. Díky!" + +#: comments.php:59 +msgid "This post is password protected. Enter the password to view comments." +msgstr "" +"Tento příspěvek je chráněný heslem. Vložte heslo pro zobrazení komentářů." + +#: comments.php:72 +msgid "Leave a Reply" +msgstr "Odpovědět" + +#: comments.php:72 +#, php-format +msgid "Leave a Reply to %s" +msgstr "Reagovat na %s" + +#: comments.php:75 +#, php-format +msgid "You must be logged in to post a comment." +msgstr "Pro vložení komentáře musíte být přihlášeni." + +#: comments.php:79 +#, php-format +msgid "Logged in as %1$s." +msgstr "Přihlášen jako %1$s." + +#: comments.php:79 +msgid "Log out of this account" +msgstr "Odhlásit se z tohoto účtu." + +#: comments.php:79 +msgid "Log out »" +msgstr "Odhlásit »" + +#: comments.php:84 +msgid "Name" +msgstr "Jméno" + +#: comments.php:84 comments.php:92 +msgid " (required)" +msgstr "(požadováno)" + +#: comments.php:92 +msgid "Email (will not be published)" +msgstr "Email (nebude zveřejněný)" + +#: comments.php:100 +msgid "Website" +msgstr "Webové stránky" + +#: comments.php:109 +msgid "Comment" +msgstr "Komentář" + +#: comments.php:116 +msgid "You can use these tags:" +msgstr "Můžete použít tyto HTML tagy:" + +#: comments.php:122 +msgid "Submit Comment" +msgstr "Odeslat komentář" + +#: library/custom-nav.php:16 +msgid "Mobile Menu Settings" +msgstr "Nastavení mobilní navigace" + +#: library/custom-nav.php:17 +msgid "Controls the mobile menu" +msgstr "Ovládání mobilní navigace" + +#: library/custom-nav.php:22 +msgid "Mobile navigation layout" +msgstr "Rozvržení mobilní navigace" + +#: library/custom-nav.php:31 +msgid "topbar" +msgstr "horní panel" + +#: library/entry-meta.php:11 +#, php-format +msgid "Posted on %1$s at %2$s." +msgstr "Publikováno %1$s v %2$s." + +#: library/entry-meta.php:12 +msgid "Written by" +msgstr "Napsal" + +#: library/foundation.php:24 +msgid "«" +msgstr "«" + +#: library/foundation.php:25 +msgid "»" +msgstr "»" + +#: library/foundation.php:53 +#, php-format +msgid "" +"Please assign a menu to the primary menu location under %1$s or %2$s the " +"design." +msgstr "" +"Prosím přiřaďte menu jako primární menu umístění pod %1$s nebo %2$s v " +"rozložení stránky." + +#: library/foundation.php:54 +#, php-format +msgid "Menus" +msgstr "Menu" + +#: library/foundation.php:57 +#, php-format +msgid "Customize" +msgstr "Přizpůsobit" + +#: library/foundation.php:107 +msgid "No Responses to" +msgstr "Žádná reakce na" + +#: library/foundation.php:107 +msgid "One Response to" +msgstr "Jedna reakce na" + +#: library/foundation.php:107 +msgid "% Responses to" +msgstr "% reakcí na" + +#: library/foundation.php:147 +#, php-format +msgid "%s" +msgstr "%s" + +#: library/navigation.php:43 +msgid "mobile-nav" +msgstr "mobilní nav" + +#: library/navigation.php:210 +msgid "Page" +msgstr "Stránka" + +#: library/responsive-images.php:19 +msgid "FP Small" +msgstr "FP malý" + +#: library/responsive-images.php:20 +msgid "FP Medium" +msgstr "FP střední" + +#: library/responsive-images.php:21 +msgid "FP Large" +msgstr "FP velký" + +#: library/widget-areas.php:13 +msgid "Sidebar widgets" +msgstr "Widgety postranního panelu" + +#: library/widget-areas.php:14 +msgid "Drag widgets to this sidebar container." +msgstr "Přetáhněte widgety na tuto oblast pro postranní panel." + +#: library/widget-areas.php:23 +msgid "Footer widgets" +msgstr "Widgety v patičce" + +#: library/widget-areas.php:24 +msgid "Drag widgets to this footer container" +msgstr "Přetáhněte widgety na tuto oblast pro zápatí." + +#: page-templates/front.php:38 page-templates/page-full-width.php:22 +#: page-templates/page-sidebar-left.php:22 page.php:31 single.php:33 +#: woocommerce.php:26 +msgid "Pages:" +msgstr "Stránky:" + +#: page.php:28 single.php:30 +msgid "Edit" +msgstr "Upravit" + +#: search.php:16 +msgid "Search Results for" +msgstr "Výsledek vyhledávání výrazu" + +#: searchform.php:13 searchform.php:16 +msgid "Search" +msgstr "Hledat" + +#: template-parts/content-none.php:14 +msgid "Nothing Found" +msgstr "Nenalezeno" + +#: template-parts/content-none.php:20 +#, php-format +msgid "" +"Ready to publish your first post? Get started here." +msgstr "" +"Připraveni publikovat váš první příspěvek webu? Začněte " +"zde." + +#: template-parts/content-none.php:24 +msgid "" +"Sorry, but nothing matched your search terms. Please try again with some " +"different keywords." +msgstr "" +"Je nám líto, ale nic neodpovídá vašim požadavkům na hledané výrazy. Zkuste " +"to prosím znovu s zadáním jiných klíčových slov." + +#: template-parts/content-none.php:29 +msgid "" +"It seems we can’t find what you’re looking for. Perhaps " +"searching can help." +msgstr "" +"Zdá se, že nemůžete najít, co jste hledali. Možná vám pomůže vyhledávání." + +#: template-parts/content.php:19 +msgid "Continue reading..." +msgstr "Číst dále..." + +#~ msgid "%1$s" +#~ msgstr "%1$s" + +#~ msgid "← Older comments" +#~ msgstr "← starší komentáře" + +#~ msgid "Newer comments →" +#~ msgstr "Novější komentáře →" + +#~ msgid "I'm a translatable string." +#~ msgstr "Jsem přeložitelný řetězec." + +#~ msgid "Me too" +#~ msgstr "Já taky" + +#~ msgid "I have %d apple" +#~ msgid_plural "I have %d apples" +#~ msgstr[0] "Mám %d jablko" +#~ msgstr[1] "Mám %d jablka" +#~ msgstr[2] "Mám %d jablek" + +#~ msgid "yyyy-mm-dd" +#~ msgstr "yyy-mm-dd" diff --git a/web/app/themes/oe-brixton/languages/da_DK.mo b/web/app/themes/oe-brixton/languages/da_DK.mo new file mode 100644 index 0000000000000000000000000000000000000000..b760fc66f95fe424a1ab4213cb373b19632967da GIT binary patch literal 4820 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, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: foundationpress-libsass-template 5.4.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-10-12 21:40+0200\n" +"PO-Revision-Date: 2016-10-16 10:05+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.9\n" +"Last-Translator: \n" +"Language: da\n" + +#: 404.php:8 +msgid "File Not Found" +msgstr "Filen blev ikke fundet" + +#: 404.php:12 +msgid "" +"The page you are looking for might have been removed, had its name changed, " +"or is temporarily unavailable." +msgstr "" +"Siden du leder efter kan være blevet flyttet, fået ændret navn eller er " +"midlertidigt utilgængelig" + +#: 404.php:14 +msgid "Please try the following:" +msgstr "Venligst prøv følgende:" + +#: 404.php:16 +msgid "Check your spelling" +msgstr "Kontroller din stavning" + +#: 404.php:17 +#, php-format +msgid "Return to the home page" +msgstr "Gå tilbage til forsiden" + +#: 404.php:18 +msgid "Click the Back button" +msgstr "Tryk på Tilbageknappen" + +#. /previous pages when applicable +#: archive.php:21 index.php:24 search.php:25 +msgid "← Older posts" +msgstr "← Ældre indlæg" + +#: archive.php:22 index.php:25 search.php:26 +msgid "Newer posts →" +msgstr "Nyere indlæg →" + +#: comments.php:8 +#, php-format +msgid "%s" +msgstr "%s" + +#: comments.php:9 +#, php-format +msgid "%1$s" +msgstr "%1$s" + +#: comments.php:10 +msgid "(Edit)" +msgstr "(Rediger)" + +#: comments.php:16 +msgid "Your comment is awaiting moderation." +msgstr "Din kommentar afventer godkendelse." + +#: comments.php:31 +msgid "Please do not load this page directly. Thanks!" +msgstr "Vær venlig ikke at indlæse siden direkte. Tak!" + +#: comments.php:36 +msgid "This post is password protected. Enter the password to view comments." +msgstr "" +"Dette indlæg er beskyttet med kodeord. Indtast kodeord for at læse " +"kommentarer." + +#: comments.php:46 +msgid "No Responses to" +msgstr "Ingen svar til" + +#: comments.php:46 +msgid "One Response to" +msgstr "Et svar til" + +#: comments.php:46 +msgid "% Responses to" +msgstr "% svar til" + +#: comments.php:53 +msgid "← Older comments" +msgstr "← Ældre kommentarer" + +#: comments.php:54 +msgid "Newer comments →" +msgstr "Nyere kommentarer →" + +#: comments.php:61 +msgid "Leave a Reply" +msgstr "Skriv et svar" + +#: comments.php:61 +#, php-format +msgid "Leave a Reply to %s" +msgstr "Skriv et svar til %s" + +#: comments.php:64 +#, php-format +msgid "You must be logged in to post a comment." +msgstr "" +"Du skal være logget ind for at skrive en kommentar." + +#: comments.php:68 +#, php-format +msgid "Logged in as %s." +msgstr "Logget ind som %s." + +#: comments.php:68 +msgid "Log out of this account" +msgstr "Log ud af denne konto" + +#: comments.php:68 +msgid "Log out »" +msgstr "Log ud »" + +#: comments.php:71 +msgid "Name" +msgstr "Navn" + +#: comments.php:71 comments.php:75 +msgid " (required)" +msgstr " (påkrævet)" + +#: comments.php:75 +msgid "Email (will not be published)" +msgstr "Mail (vil ikke blive offentliggjort)" + +#: comments.php:79 +msgid "Website" +msgstr "Websted" + +#: comments.php:84 +msgid "Comment" +msgstr "Kommentar" + +#: comments.php:87 +msgid "You can use these tags:" +msgstr "Du kan bruge disse tags:" + +#: comments.php:88 +msgid "Submit Comment" +msgstr "Send kommentar" + +#: content-none.php:11 +msgid "Nothing Found" +msgstr "Intet fundet" + +#: content-none.php:17 +#, php-format +msgid "" +"Ready to publish your first post? Get started here." +msgstr "" +"Klar til at udgive dit første indlæg? Kom i gang her." + +#: content-none.php:21 +msgid "" +"Sorry, but nothing matched your search terms. Please try again with some " +"different keywords." +msgstr "" +"Beklager, men din søgning gav ingen resultater. Prøv igen med andre søgeord." + +#: content-none.php:26 +msgid "" +"It seems we can’t find what you’re looking for. Perhaps " +"searching can help." +msgstr "" +"Det virker til at vi ikke kan finde hvad du ledte efter. Måske en søgning " +"kan hjælpe." + +#. /archive/search. +#. * +#. * @subpackage FoundationPress +#. * @since FoundationPress 1.0.0 +#. +#: content.php:16 +msgid "Continue reading..." +msgstr "Læs resten..." + +#: hero.php:40 kitchen-sink.php:739 page-full.php:19 page-sidebar-left.php:21 +#: page.php:18 single.php:27 woocommerce.php:18 +msgid "Pages:" +msgstr "Sider:" + +#: library/entry-meta.php:4 +#, php-format +msgid "Posted on %1$s at %2$s." +msgstr "Skrevet den %1$s kl. %2$s." + +#: library/entry-meta.php:5 +msgid "Written by" +msgstr "Skrevet af" + +#: library/foundation.php:16 +msgid "«" +msgstr "«" + +#: library/foundation.php:17 +msgid "»" +msgstr "»" + +#: library/foundation.php:40 +#, php-format +msgid "" +"Please assign a menu to the primary menu location under %1$s or %2$s the " +"design." +msgstr "" +"Vælg venligst en menu til den primære menuplacering under %1$s eller %2$s " +"designet." + +#: library/foundation.php:41 +#, php-format +msgid "Menus" +msgstr "Menuer" + +#: library/foundation.php:44 +#, php-format +msgid "Customize" +msgstr "Tilpas" + +#: library/widget-areas.php:6 +msgid "Sidebar widgets" +msgstr "Sidebar-widgets" + +#: library/widget-areas.php:7 +msgid "Drag widgets to this sidebar container." +msgstr "Træk widgets til dette sidebar-område." + +#: library/widget-areas.php:16 +msgid "Footer widgets" +msgstr "Sidefod-widgets" + +#: library/widget-areas.php:17 +msgid "Drag widgets to this footer container" +msgstr "Træk widgets til dette sidefodsområde" + +#: node_modules/grunt-pot/test/fixtures/some-file.php:3 +msgid "I'm a translatable string." +msgstr "Jeg er en tekststreng som kan oversættes." + +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:4 +msgid "Me too" +msgstr "Også mig" + +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:7 +#, php-format +msgid "I have %d apple" +msgid_plural "I have %d apples" +msgstr[0] "Jeg har %d æble" +msgstr[1] "Jeg har %d æbler" + +#. / TRANSLATORS: This should be translated as a shorthand for YEAR-MONTH-DAY using 4, 2 and 2 digits. +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:16 +msgid "yyyy-mm-dd" +msgstr "yyyy-mm-dd" + +#: search.php:7 +msgid "Search Results for" +msgstr "Søgeresultater for" + +#: searchform.php:6 searchform.php:10 +msgid "Search" +msgstr "Søg" diff --git a/web/app/themes/oe-brixton/languages/de_DE.mo b/web/app/themes/oe-brixton/languages/de_DE.mo old mode 100755 new mode 100644 index e35cda86c4f38b8710cf50259f645842d095a953..32716dd0faf72e4811cb13542fabe399f2f00586 GIT binary patch delta 2106 zcmZXUU2GIp6vra1o?~dSM2hvvTl8|3KM z=0GdbkVk(n2w%(r$-y$%555diCf)^mz!h*S*n&mG9bgGGK-zx;>;i8#`3^{q?}A6b zZxhHr)us!1qDZ%a6p#s0O~*m}*c?7&=qyMlya?vNm%t48DM*I@0y(%1i=P9BK??jT zi0i`cfMoXr@Nw{qF693*8b4uxYIgon#$50cI1l~-lEXPn!Zw=+p8#EO0(=b|0KW&R zbQ@qD4=B7(Kqz#eUMK~ShVFqTp%mD5sy`Vvp>*3x$N^=8GDCuU5=KpdP}Ces=|qo^FhZA?gfhhVfGf`X(iQf8*2`~Cww!5+rT2N<(!4jb@Ag}pa_eKu z5Tjl4>3GYU?Y$EKex7$;p}Y3V2PBd-&jiR3??eLgSQJl-_^VrBg8OL`^;$+owJ)yJQ*Jb0#+U%rQ zzTmjFmzN$Ui^Y+m7%3K2MQAOSbT&Pd87Zm=4@Zm2an3cT{?)FPhKj0`JyaSBcP-J1 z66~!u)Y8K_wG{1()*_k$oY_v@lFFFz&rz1Md|7yFan1-Um-il3)oEB0Gw4~E%*!t!xcPeUY5#6Ong>~T8*4)UX``7#-3>3j9;pjeYHRri(d$j zVX_lSqhc`6PWY)Z@5PN>8=0?*8f@}D*E;VzBWxBMo9CN!ly-vIjw@l>e(cy2a$S6D z&>erFn_|GeoTV0$Y*eE9d{MX_0tkY5awk0uzfKRsGg+7-Jrrg=_&7e?IU#ZAim2*- zkJlV8h$k|^@kDZ+3amu6g$pnEF0uD87p@Y%Hrb?8uM4Fums|5F3gTrsWGPGytfFcA hoLqZ)DCq0_x-IAP1xqPU2b;RCwA;2>ubcEV**}vFkk0@B delta 1473 zcmZY7Piz!b9Ki9{QvNO7?slarOOx$$(nfKnz z`~7)yX4jc??PjXwQ^jwHtBdPGlZ=$wx9*W!xZTgV4X1GbYreQK(!C0f{ty)2C4ZhRHH@qLuQUpHLElZ>xm96Q%X?`JTaFY0{dsEcX9L5;Wp;WMd&*5p@iQnO$_&dr*w>C%q zf$XIopd`4SO`gQ3Q07Om6%U}S&!FsI#G16Y#?1_#L-tU&Q7XKHPvd4j0Qo+KaXS`q zD}LDUOO#GrLK2Bg%)Ss24CBO?p?jHaiTfQ#QMUOSVzb3-ht7*L&JLT*|DL) zvEhL|1N_3@Vk>(N&R2q?p7H%>2CPAqFneHRTk4AdYIDzpj%Tg~prc|E{KaO{{&l=AV z;6Jk$4yY+nLvyMaRo)m*)b#V7#kqg@SPdNi677$7JWmV$l?;Zr-?Rs!}1G zKI!C(CU_WQ(${{jWE?l>*X*bZjyxN^%8c#T3-YVErc(G?TStyNGPTqp-k=Y*?;FkA z=3y)Tx8Ul-m2#QXY>y`CUSEyRmd(5b+2z@9Rx8h|38&tYtZ}QslJUat+m@T@=Szv6 z&ZTNpi#w*WPC!lcENWl)Ny6SXVY_oC-B_XvQFf#pZc3(8zOI%DXsN6;lmhc%HaXIs zHATmD8)r~*2>3yAsL2g4CDY+g$xlogged in to post a comment." -msgstr "Du musst angemeldet sein, um einen Kommentar abzugeben." - -#: hero.php:40 -#: kitchen-sink.php:739 -#: page-full.php:19 -#: page-sidebar-left.php:21 -#: page.php:18 -#: single.php:27 -#: woocommerce.php:18 -#@ FoundationPress -msgid "Pages:" -msgstr "Seiten:" - -#: comments.php:16 -#@ FoundationPress -msgid "Your comment is awaiting moderation." -msgstr "Dein Kommentar wartet auf Freischaltung." - -#: comments.php:10 -#@ FoundationPress -msgid "(Edit)" -msgstr "(Bearbeiten)" - -#: comments.php:61 -#@ FoundationPress -msgid "Leave a Reply" -msgstr "Hinterlasse eine Antwort" - -#: comments.php:61 -#, php-format -#@ FoundationPress -msgid "Leave a Reply to %s" -msgstr "Hinterlasse einen Kommentar zu %s" - -#: searchform.php:6 -#: searchform.php:10 -#@ FoundationPress -msgid "Search" -msgstr "Suchen" +# @ FoundationPress #: 404.php:8 -#@ FoundationPress msgid "File Not Found" -msgstr "Seite nicht gefunden" +msgstr "Datei nicht gefunden" +# @ FoundationPress #: 404.php:12 -#@ FoundationPress -msgid "The page you are looking for might have been removed, had its name changed, or is temporarily unavailable." -msgstr "Die Seite, die Sie suchen wurde möglicherweise entfernt oder umbenannt, oder ist vorübergehend nicht verfügbar." +msgid "" +"The page you are looking for might have been removed, had its name changed, " +"or is temporarily unavailable." +msgstr "" +"Die Seite, die du suchst, wurde möglicherweise entfernt oder umbenannt, oder " +"ist vorübergehend nicht verfügbar." +# @ FoundationPress #: 404.php:14 -#@ FoundationPress msgid "Please try the following:" -msgstr "Bitte versuchen Sie folgendes:" +msgstr "Bitte versuche folgendes:" +# @ FoundationPress #: 404.php:16 -#@ FoundationPress msgid "Check your spelling" -msgstr "Überprüfen Sie Ihre Eingabe" +msgstr "Überprüfe deine Eingabe" +# @ FoundationPress #: 404.php:17 #, php-format -#@ FoundationPress msgid "Return to the home page" msgstr "Zurück zur Startseite" +# @ FoundationPress #: 404.php:18 -#@ FoundationPress msgid "Click the Back button" -msgstr "Klicken Sie die Zurück Schaltfläche" +msgstr "" +"Klicke auf die Zurück Schaltfläche" -#: archive.php:21 -#: index.php:24 -#: search.php:25 -#@ FoundationPress +# @ FoundationPress +#. /previous pages when applicable +#: archive.php:21 index.php:24 search.php:25 msgid "← Older posts" msgstr "← ältere Beiträge" -#: archive.php:22 -#: index.php:25 -#: search.php:26 -#@ FoundationPress +# @ FoundationPress +#: archive.php:22 index.php:25 search.php:26 msgid "Newer posts →" msgstr "neuere Beiträge →" +# @ FoundationPress #: comments.php:8 #, php-format -#@ FoundationPress msgid "%s" msgstr "" +# @ FoundationPress #: comments.php:9 #, php-format -#@ FoundationPress msgid "%1$s" msgstr "" +# @ FoundationPress +#: comments.php:10 +msgid "(Edit)" +msgstr "(Bearbeiten)" + +# @ FoundationPress +#: comments.php:16 +msgid "Your comment is awaiting moderation." +msgstr "Dein Kommentar wartet auf Freischaltung." + +# @ FoundationPress #: comments.php:31 -#@ FoundationPress msgid "Please do not load this page directly. Thanks!" -msgstr "Bitte diese Seite nicht direkt laden. Danke!" +msgstr "Bitte diese Seite nicht direkt laden. Vielen Dank!" +# @ FoundationPress +#: comments.php:36 +msgid "This post is password protected. Enter the password to view comments." +msgstr "" +"Dieser Beitrag ist passwortgeschützt. Um die Kommentare zu sehen, musst du " +"das Passwort eingeben." + +# @ FoundationPress #: comments.php:46 -#@ FoundationPress msgid "No Responses to" -msgstr "Keine Antworten zu" +msgstr "Keine Antworten auf" +# @ FoundationPress #: comments.php:46 -#@ FoundationPress msgid "One Response to" -msgstr "Eine Antwort zu" +msgstr "Eine Antwort auf" +# @ FoundationPress #: comments.php:46 -#@ FoundationPress msgid "% Responses to" -msgstr "% Antworten zu" +msgstr "% Antworten auf" +# @ FoundationPress #: comments.php:53 -#@ FoundationPress msgid "← Older comments" msgstr "← ältere Kommentare" +# @ FoundationPress #: comments.php:54 -#@ FoundationPress msgid "Newer comments →" msgstr "neuere Kommentare →" +# @ FoundationPress +#: comments.php:61 +msgid "Leave a Reply" +msgstr "Antworten" + +# @ FoundationPress +#: comments.php:61 +#, php-format +msgid "Leave a Reply to %s" +msgstr "Auf %s antworten" + +# @ FoundationPress +#: comments.php:64 +#, php-format +msgid "You must be logged in to post a comment." +msgstr "" +"Du musst angemeldet sein, um einen Kommentar abzugeben." + +# @ FoundationPress #: comments.php:68 #, php-format -#@ FoundationPress msgid "Logged in as %s." msgstr "Angemeldet als %s." +# @ FoundationPress +#: comments.php:68 +msgid "Log out of this account" +msgstr "Von diesem Konto abmelden" + +# @ FoundationPress +#: comments.php:68 +msgid "Log out »" +msgstr "Abmelden »" + +# @ FoundationPress #: comments.php:71 -#: comments.php:75 -#@ FoundationPress +msgid "Name" +msgstr "Name" + +# @ FoundationPress +#: comments.php:71 comments.php:75 msgid " (required)" msgstr "(erforderlich)" +# @ FoundationPress #: comments.php:75 -#@ FoundationPress msgid "Email (will not be published)" -msgstr "Email (wird nicht veröffentlicht)" +msgstr "E-Mail (wird nicht veröffentlicht)" +# @ FoundationPress +#: comments.php:79 +msgid "Website" +msgstr "Website" + +# @ FoundationPress #: comments.php:84 -#@ FoundationPress msgid "Comment" msgstr "Kommentar" +# @ FoundationPress #: comments.php:87 -#@ FoundationPress msgid "You can use these tags:" -msgstr "Sie können diese Tags verwenden:" +msgstr "Du kannst diese Tags verwenden:" + +# @ FoundationPress +#: comments.php:88 +msgid "Submit Comment" +msgstr "Kommentar absenden" +# @ FoundationPress #: content-none.php:11 -#@ FoundationPress msgid "Nothing Found" msgstr "nichts gefunden" +# @ FoundationPress #: content-none.php:17 #, php-format -#@ FoundationPress -msgid "Ready to publish your first post? Get started here." -msgstr "Bereit, den ersten Beitrag zu veröffentlichen? Beginnen Sie hier" +msgid "" +"Ready to publish your first post? Get started here." +msgstr "" +"Bereit, deinen ersten Beitrag zu veröffentlichen? Hier " +"geht's los" +# @ FoundationPress #: content-none.php:21 -#@ FoundationPress -msgid "Sorry, but nothing matched your search terms. Please try again with some different keywords." -msgstr "Es tut uns leid, aber es konnten keine Übereinstimmungen gefunden werden. Bitte versuchen Sie es erneut mit einigen anderen Suchbegriffen." +msgid "" +"Sorry, but nothing matched your search terms. Please try again with some " +"different keywords." +msgstr "" +"Es tut uns leid, aber es konnten keine Übereinstimmungen gefunden werden. " +"Bitte versuche es mit einigen anderen Suchbegriffen erneut." +# @ FoundationPress #: content-none.php:26 -#@ FoundationPress -msgid "It seems we can’t find what you’re looking for. Perhaps searching can help." -msgstr "Es scheint, wir finden nicht, was Sie suchen. Vielleicht hilft suchen." - +msgid "" +"It seems we can’t find what you’re looking for. Perhaps " +"searching can help." +msgstr "" +"Leider konnten wir die angefragte Seite nicht finden. Vielleicht hilft dir " +"die Suchfunktion weiter." + +# @ FoundationPress +#. /archive/search. +#. * +#. * @subpackage FoundationPress +#. * @since FoundationPress 1.0.0 +#. #: content.php:16 -#@ FoundationPress msgid "Continue reading..." -msgstr "Lesen Sie weiter..." +msgstr "Weiterlesen..." + +# @ FoundationPress +#: hero.php:40 kitchen-sink.php:739 page-full.php:19 page-sidebar-left.php:21 +#: page.php:18 single.php:27 woocommerce.php:18 +msgid "Pages:" +msgstr "Seiten:" +# @ FoundationPress #: library/entry-meta.php:4 #, php-format -#@ FoundationPress -msgid "Posted on %s at %s." -msgstr "Veröffentlicht am %s um %s." +msgid "Posted on %1$s at %2$s." +msgstr "Veröffentlicht am %1$s um %2$s." +# @ FoundationPress #: library/entry-meta.php:5 -#@ FoundationPress msgid "Written by" msgstr "Geschrieben von" +# @ FoundationPress #: library/foundation.php:16 -#@ FoundationPress msgid "«" msgstr "«" +# @ FoundationPress #: library/foundation.php:17 -#@ FoundationPress msgid "»" msgstr "»" +# @ FoundationPress #: library/foundation.php:40 #, php-format -#@ FoundationPress -msgid "Please assign a menu to the primary menu location under %1$s or %2$s the design." -msgstr "Bitte weisen Sie ein Menü zur primären Menüposition %1$s oder %2$s zu." +msgid "" +"Please assign a menu to the primary menu location under %1$s or %2$s the " +"design." +msgstr "Bitte weise ein Menü zur primären Menüposition %1$s oder %2$s zu." +# @ FoundationPress #: library/foundation.php:41 #, php-format -#@ FoundationPress msgid "Menus" msgstr "Menüs" +# @ FoundationPress #: library/foundation.php:44 #, php-format -#@ FoundationPress msgid "Customize" msgstr "Anpassen" +# @ FoundationPress #: library/widget-areas.php:6 -#@ FoundationPress msgid "Sidebar widgets" -msgstr "Seitenleiste-Widgetbereich" +msgstr "Seitenleisten-Widgetbereich" +# @ FoundationPress #: library/widget-areas.php:7 -#@ FoundationPress msgid "Drag widgets to this sidebar container." -msgstr "Ziehen Sie Widgets zu diesem Seitenleistenbereich." +msgstr "Ziehe Widgets zu diesem Seitenleisten-Bereich." +# @ FoundationPress #: library/widget-areas.php:16 -#@ FoundationPress msgid "Footer widgets" -msgstr "Footer Widgetbereich" +msgstr "Footer-Widgetbereich" +# @ FoundationPress #: library/widget-areas.php:17 -#@ FoundationPress msgid "Drag widgets to this footer container" -msgstr "Ziehen Sie Widgets zu diesem Footerbereich" +msgstr "Ziehe Widgets zu diesem Footer-Bereich." + +#: node_modules/grunt-pot/test/fixtures/some-file.php:3 +msgid "I'm a translatable string." +msgstr "" +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:4 +msgid "Me too" +msgstr "" + +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:7 +#, php-format +msgid "I have %d apple" +msgid_plural "I have %d apples" +msgstr[0] "" +msgstr[1] "" + +#. / TRANSLATORS: This should be translated as a shorthand for YEAR-MONTH-DAY using 4, 2 and 2 digits. +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:16 +msgid "yyyy-mm-dd" +msgstr "dd.mm.yyyy" + +# @ FoundationPress #: search.php:7 -#@ FoundationPress msgid "Search Results for" msgstr "Suchergebnisse für" +# @ FoundationPress +#: searchform.php:6 searchform.php:10 +msgid "Search" +msgstr "Suche" diff --git a/web/app/themes/oe-brixton/languages/de_DE_formal.mo b/web/app/themes/oe-brixton/languages/de_DE_formal.mo new file mode 100644 index 0000000000000000000000000000000000000000..6985d958e1dcbc1b3bed6f9b4d2971631492e048 GIT binary patch literal 4890 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 literal 0 HcmV?d00001 diff --git a/web/app/themes/oe-brixton/languages/de_DE_formal.po b/web/app/themes/oe-brixton/languages/de_DE_formal.po new file mode 100644 index 0000000..c4a1b0d --- /dev/null +++ b/web/app/themes/oe-brixton/languages/de_DE_formal.po @@ -0,0 +1,333 @@ +msgid "" +msgstr "" +"Project-Id-Version: FoundationPress v5.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-04-12 17:53+0200\n" +"PO-Revision-Date: 2016-10-16 10:06+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: de_DE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Poedit 1.8.9\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" +"_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" +"X-Textdomain-Support: yes\n" +"X-Poedit-SearchPath-0: .\n" + +# @ FoundationPress +#: 404.php:8 +msgid "File Not Found" +msgstr "Datei nicht gefunden" + +# @ FoundationPress +#: 404.php:12 +msgid "" +"The page you are looking for might have been removed, had its name changed, " +"or is temporarily unavailable." +msgstr "" +"Die Seite, die du suchst, wurde möglicherweise entfernt oder umbenannt, oder " +"ist vorübergehend nicht verfügbar." + +# @ FoundationPress +#: 404.php:14 +msgid "Please try the following:" +msgstr "Bitte versuche folgendes:" + +# @ FoundationPress +#: 404.php:16 +msgid "Check your spelling" +msgstr "Überprüfe deine Eingabe" + +# @ FoundationPress +#: 404.php:17 +#, php-format +msgid "Return to the home page" +msgstr "Zurück zur Startseite" + +# @ FoundationPress +#: 404.php:18 +msgid "Click the Back button" +msgstr "" +"Klicke auf die Zurück Schaltfläche" + +# @ FoundationPress +#. /previous pages when applicable +#: archive.php:21 index.php:24 search.php:25 +msgid "← Older posts" +msgstr "← ältere Beiträge" + +# @ FoundationPress +#: archive.php:22 index.php:25 search.php:26 +msgid "Newer posts →" +msgstr "neuere Beiträge →" + +# @ FoundationPress +#: comments.php:8 +#, php-format +msgid "%s" +msgstr "" + +# @ FoundationPress +#: comments.php:9 +#, php-format +msgid "%1$s" +msgstr "" + +# @ FoundationPress +#: comments.php:10 +msgid "(Edit)" +msgstr "(Bearbeiten)" + +# @ FoundationPress +#: comments.php:16 +msgid "Your comment is awaiting moderation." +msgstr "Dein Kommentar wartet auf Freischaltung." + +# @ FoundationPress +#: comments.php:31 +msgid "Please do not load this page directly. Thanks!" +msgstr "Bitte diese Seite nicht direkt laden. Vielen Dank!" + +# @ FoundationPress +#: comments.php:36 +msgid "This post is password protected. Enter the password to view comments." +msgstr "" +"Dieser Beitrag ist passwortgeschützt. Um die Kommentare zu sehen, musst du " +"das Passwort eingeben." + +# @ FoundationPress +#: comments.php:46 +msgid "No Responses to" +msgstr "Keine Antworten auf" + +# @ FoundationPress +#: comments.php:46 +msgid "One Response to" +msgstr "Eine Antwort auf" + +# @ FoundationPress +#: comments.php:46 +msgid "% Responses to" +msgstr "% Antworten auf" + +# @ FoundationPress +#: comments.php:53 +msgid "← Older comments" +msgstr "← ältere Kommentare" + +# @ FoundationPress +#: comments.php:54 +msgid "Newer comments →" +msgstr "neuere Kommentare →" + +# @ FoundationPress +#: comments.php:61 +msgid "Leave a Reply" +msgstr "Antworten" + +# @ FoundationPress +#: comments.php:61 +#, php-format +msgid "Leave a Reply to %s" +msgstr "Antworte auf %s" + +# @ FoundationPress +#: comments.php:64 +#, php-format +msgid "You must be logged in to post a comment." +msgstr "" +"Du musst angemeldet sein, um einen Kommentar abzugeben." + +# @ FoundationPress +#: comments.php:68 +#, php-format +msgid "Logged in as %s." +msgstr "Angemeldet als %s." + +# @ FoundationPress +#: comments.php:68 +msgid "Log out of this account" +msgstr "Von diesem Konto abmelden" + +# @ FoundationPress +#: comments.php:68 +msgid "Log out »" +msgstr "Abmelden »" + +# @ FoundationPress +#: comments.php:71 +msgid "Name" +msgstr "Name" + +# @ FoundationPress +#: comments.php:71 comments.php:75 +msgid " (required)" +msgstr "(erforderlich)" + +# @ FoundationPress +#: comments.php:75 +msgid "Email (will not be published)" +msgstr "E-Mail (wird nicht veröffentlicht)" + +# @ FoundationPress +#: comments.php:79 +msgid "Website" +msgstr "Website" + +# @ FoundationPress +#: comments.php:84 +msgid "Comment" +msgstr "Kommentar" + +# @ FoundationPress +#: comments.php:87 +msgid "You can use these tags:" +msgstr "Sie können diese Tags verwenden:" + +# @ FoundationPress +#: comments.php:88 +msgid "Submit Comment" +msgstr "Kommentar absenden" + +# @ FoundationPress +#: content-none.php:11 +msgid "Nothing Found" +msgstr "nichts gefunden" + +# @ FoundationPress +#: content-none.php:17 +#, php-format +msgid "" +"Ready to publish your first post? Get started here." +msgstr "" +"Bereit, deinen ersten Beitrag zu veröffentlichen? Hier " +"geht's los" + +# @ FoundationPress +#: content-none.php:21 +msgid "" +"Sorry, but nothing matched your search terms. Please try again with some " +"different keywords." +msgstr "" +"Es tut uns leid, aber es konnten keine Übereinstimmungen gefunden werden. " +"Bitte versuche es mit einigen anderen Suchbegriffen erneut." + +# @ FoundationPress +#: content-none.php:26 +msgid "" +"It seems we can’t find what you’re looking for. Perhaps " +"searching can help." +msgstr "" +"Leider konnten wir die angefragte Seite nicht finden. Vielleicht hilft dir " +"die Suchfunktion weiter." + +# @ FoundationPress +#. /archive/search. +#. * +#. * @subpackage FoundationPress +#. * @since FoundationPress 1.0.0 +#. +#: content.php:16 +msgid "Continue reading..." +msgstr "Weiterlesen..." + +# @ FoundationPress +#: hero.php:40 kitchen-sink.php:739 page-full.php:19 page-sidebar-left.php:21 +#: page.php:18 single.php:27 woocommerce.php:18 +msgid "Pages:" +msgstr "Seiten:" + +# @ FoundationPress +#: library/entry-meta.php:4 +#, php-format +msgid "Posted on %1$s at %2$s." +msgstr "Veröffentlicht am %1$s um %2$s." + +# @ FoundationPress +#: library/entry-meta.php:5 +msgid "Written by" +msgstr "Geschrieben von" + +# @ FoundationPress +#: library/foundation.php:16 +msgid "«" +msgstr "«" + +# @ FoundationPress +#: library/foundation.php:17 +msgid "»" +msgstr "»" + +# @ FoundationPress +#: library/foundation.php:40 +#, php-format +msgid "" +"Please assign a menu to the primary menu location under %1$s or %2$s the " +"design." +msgstr "Bitte weise ein Menü zur primären Menüposition %1$s oder %2$s zu." + +# @ FoundationPress +#: library/foundation.php:41 +#, php-format +msgid "Menus" +msgstr "Menüs" + +# @ FoundationPress +#: library/foundation.php:44 +#, php-format +msgid "Customize" +msgstr "Anpassen" + +# @ FoundationPress +#: library/widget-areas.php:6 +msgid "Sidebar widgets" +msgstr "Seitenleisten-Widgetbereich" + +# @ FoundationPress +#: library/widget-areas.php:7 +msgid "Drag widgets to this sidebar container." +msgstr "Ziehen Sie Widgets zu diesem Seitenleisten-Bereich." + +# @ FoundationPress +#: library/widget-areas.php:16 +msgid "Footer widgets" +msgstr "Footer-Widgetbereich" + +# @ FoundationPress +#: library/widget-areas.php:17 +msgid "Drag widgets to this footer container" +msgstr "Ziehen Sie Widgets zu diesem Footer-Bereich." + +#: node_modules/grunt-pot/test/fixtures/some-file.php:3 +msgid "I'm a translatable string." +msgstr "" + +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:4 +msgid "Me too" +msgstr "" + +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:7 +#, php-format +msgid "I have %d apple" +msgid_plural "I have %d apples" +msgstr[0] "" +msgstr[1] "" + +#. / TRANSLATORS: This should be translated as a shorthand for YEAR-MONTH-DAY using 4, 2 and 2 digits. +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:16 +msgid "yyyy-mm-dd" +msgstr "dd.mm.yyyy" + +# @ FoundationPress +#: search.php:7 +msgid "Search Results for" +msgstr "Suchergebnisse für" + +# @ FoundationPress +#: searchform.php:6 searchform.php:10 +msgid "Search" +msgstr "Suche" diff --git a/web/app/themes/oe-brixton/languages/es_ES.mo b/web/app/themes/oe-brixton/languages/es_ES.mo old mode 100755 new mode 100644 index 376bdb68cfbb944e52950c624133d3ccf8e47dec..857cc5bffdf19b50babd3209002580cdc7ff0bd6 GIT binary patch delta 638 zcmXZZF=$gk7{KxG<-ORLq#6^oTALaqCc&8SULes5Qo+Qb(ji6!(GEf@t>_ddF=Pl7 zIthJLB#Y3NY(gMI3!Nks3LQjHr{W+Efs(km>;EHx<9>JdzW3dCcfS(HiFVPbPl(9h zF_C*1^ogXff+z4ThOvRC@jX7p7M?=$q{s^lV+m_WD(Rvh4^i{~z!@B198-L}?h%>y zOI-piya^5yuA;?!12s_-r*RV}@$+c?2&qASV-)*%9s}dUxGQ*$`E4v>1+}0Lcow%X zkGtb_ku-w=3%bE1$I>73sPp^y5T9cN_wWLKLEW&2TEIV?#VFULH@ARV_#$4y28Qq> zY5{Ge$$p()Px2if;7`1P4$+r!1+|bhoWpIj@ek@ou`?o5m_(Ws>1y~0wcu~Kj6HmU zW!{rlkWZ*Le{qMwH3nTQ<6tzu<32WBBjfhXyN0-q6)|#d$x0fD&MRx(^gHot?Ahzs y)m*&e^|d^qLdLN(P9f&lx9mdN&bfR3ujb9{Oy^y|@&+|}>7_!1Es|zD=e8 delta 629 zcmXZZ%PT}t9KiA4ow>{yukn75yI=^T8F^b+cq@r)!~&%xRwJ>{E#(j3%0^MhN>Zbg zlB_5zR4o zsBsq#;RNbUonS6rqb7VtE#MnlF^_A~n;S+gd<+ZFMn7(%7I1(xxzGtc$qf$TJvLy7 z)x|i8TF?si;wFai6*W;#nn)oAkR~mBmaq@C;A@=12OPm}-ji35J=B}eJET)V=M)F< zE+m@lk7h&MJ*1c=uiY+EBPL6t1x%k>)x& d_0GBP#$8`s8*>uPI8W4?oUuxyv0eX_>lZ6\n" "Language-Team: Le Saint \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.6.4\n" +"X-Generator: Poedit 1.8.9\n" "X-Poedit-Basepath: .\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-KeywordsList: __;_e;_x;esc_html__;esc_html_e;esc_html_x;esc_attr__;" @@ -196,8 +196,8 @@ msgstr "Paginas:" #: ../library/entry-meta.php:4 #, php-format -msgid "Posted on %s at %s." -msgstr "Publicado en %s el %s" +msgid "Posted on %1$s at %2$s." +msgstr "Publicado en %1$s el %2$s." #: ../library/entry-meta.php:5 msgid "Written by" diff --git a/web/app/themes/oe-brixton/languages/fi.mo b/web/app/themes/oe-brixton/languages/fi.mo old mode 100755 new mode 100644 index 4595e03daf426dcc8b24a8b9a0b7fdbe3fba44d3..57cce70cf7f1a3db39860a2fba53438105392f30 GIT binary patch delta 730 zcmX}p%S#(k6u{v#W7L=!Uu}u6;8*Q5U3#8 z6^YO;i(n8pic|jur3iu>x4Ls_p&(i}{*HtWGxME$xO48Dd-p?Ip}i?1>lcylZjoW! z#SXm2GHj_3slyOfV+^No6sxd+^LT(mXn91+aTd8H#Y^iiV+_|Zh{wn+e>{?vf+2Fp zsFK7cuLj&j7yd>qc!JG%h5`Ir%-8xvSX&yf9@~ocVI$*rSc@NU5Wk|%KSFKb)Rz@$ zCAc7=g-x=$kcB$2A9V*tP=a4gJFsY^HtwNi2MfFEE9J zsNat}1TzGOIDuVc^=wv9J6OXO+`s|+g}T5E>b%BBA_nTQb>_E9(t%e*+ENdXei`QZ ze>t}6qswClm#lckYJVAYw%zBZFB-NZVLNKsk={r&zu`@k&dyB_kLGW@IsZs9m0XNx n(u=*;L^_$6%UE`IPj}4OuS}Z8lH;%bX1J;M{Gr-TP0qXrkdjq6 delta 741 zcmXZZze`(D6u|NGVvL#}RjZ;^i}AOjPmCH;MG)}^E!e1Ag)C7+jFcBN$sh;;2gxE1 zv9uiuRd5g$)HpbFs7w6=Iu!?{E)GsE?dbQkc|6|dzVq%o=bn4_+s@ifLPokmL_QXa zOyVJS;3GP)u0-THHeo6HF@zKN4EJyuPjLe4ogzgzkKD4%qZ(521v&72nuAezUjV>>cp>0z+Y^PZSi}GT diff --git a/web/app/themes/oe-brixton/languages/fi.po b/web/app/themes/oe-brixton/languages/fi.po old mode 100755 new mode 100644 index ae30f7f..02ef484 --- a/web/app/themes/oe-brixton/languages/fi.po +++ b/web/app/themes/oe-brixton/languages/fi.po @@ -8,16 +8,15 @@ msgstr "" "Project-Id-Version: foundationpress-libsass-template 5.4.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-09-13 17:56+0200\n" -"PO-Revision-Date: 2015-03-04 17:17+0200\n" +"PO-Revision-Date: 2016-10-16 10:06+0200\n" "Last-Translator: Esa Rantanen \n" "Language-Team: Eccola \n" -"Language: \n" +"Language: fi_FI\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Poedit-Language: Finnish\n" -"X-Poedit-Country: FINLAND\n" +"X-Generator: Poedit 1.8.9\n" #: 404.php:8 msgid "File Not Found" @@ -45,15 +44,11 @@ msgid "Click the Back button" msgstr "Klikkaa Takaisin -painiketta" #. /previous pages when applicable -#: archive.php:21 -#: index.php:24 -#: search.php:25 +#: archive.php:21 index.php:24 search.php:25 msgid "← Older posts" msgstr "← Vanhempia artikkeleita" -#: archive.php:22 -#: index.php:25 -#: search.php:26 +#: archive.php:22 index.php:25 search.php:26 msgid "Newer posts →" msgstr "Uudempia artikkeleita →" @@ -110,7 +105,7 @@ msgstr "Kommentoi" #: comments.php:61 #, php-format msgid "Leave a Reply to %s" -msgstr "Kommentoi: %" +msgstr "Kommentoi: %s" #: comments.php:64 #, php-format @@ -134,8 +129,7 @@ msgstr "Kirjaudu ulos »" msgid "Name" msgstr "Nimi" -#: comments.php:71 -#: comments.php:75 +#: comments.php:71 comments.php:75 msgid " (required)" msgstr "(pakollinen)" @@ -185,20 +179,15 @@ msgstr "Näyttää siltä että emme löydä etsimääsi. Kokeile hakutoimintoa. msgid "Continue reading..." msgstr "Lue lisää..." -#: hero.php:40 -#: kitchen-sink.php:739 -#: page-full.php:19 -#: page-sidebar-left.php:21 -#: page.php:18 -#: single.php:27 -#: woocommerce.php:18 +#: hero.php:40 kitchen-sink.php:739 page-full.php:19 page-sidebar-left.php:21 +#: page.php:18 single.php:27 woocommerce.php:18 msgid "Pages:" msgstr "Sivut:" #: library/entry-meta.php:4 #, php-format -msgid "Posted on %s at %s." -msgstr "Kirjoitettu %s, %s." +msgid "Posted on %1$s at %2$s." +msgstr "Kirjoitettu %1$s, %2$s." #: library/entry-meta.php:5 msgid "Written by" @@ -267,8 +256,6 @@ msgstr "vvvv-kk-pp" msgid "Search Results for" msgstr "Hakutulokset: " -#: searchform.php:6 -#: searchform.php:10 +#: searchform.php:6 searchform.php:10 msgid "Search" msgstr "Hae" - diff --git a/web/app/themes/oe-brixton/languages/fr_FR.mo b/web/app/themes/oe-brixton/languages/fr_FR.mo old mode 100755 new mode 100644 index 30ca1dd9ea302487e66cd15838d4afde6543137f..336d97bb400479e8ed61be427c85bd211a758cb6 GIT binary patch delta 636 zcmXZY-77>SLDjmdj9*=)sL&Mua5$%wd8L~bM{rG%nbhn5?cJ8|QJE0P=9 zrKCvI%B2f;{s5%>0lq(5ozCa?`aI9?xeVQeu7@?NSww!TL`Kl<6p7#zR^l!;U=BTa zjPrPob*NX1tY8CXFpGqeM|5EkRs1(h;}-@o!lv6HGU*aah$VCGQouztn6IM>w1ok* zumjJ^>vyQ`Jz*!lViSI18ydAD?dZp097J-<9ya13hViu4Dh-}l@U!rZKJ@TBRe3i~ z;~=Vwc~l85%KHzf62GH*;ScKAOS@FTacsc}RGnNxYLso{lLL!?1%o40Ej+;}eqcR% zyrn|AaEy5x`!I*9#n;GDxkYkI5ts2D)kB5|vW7D_jxVS>=c5{RzqNybN)*OXOk*7P z?OEN{qV}ggq={`BJ}qfyjIh>IST*vx%M5M=7B&N+WUx@-Ja>3gQ8N)WQvowEkVy3= blJ>3ZUhj{k3)z}0+S delta 628 zcmXZYy)OfC7{Kx8dWUL@qVY~|XjQ_|6Ix}Y-j;4nBoeWSgh+JIRC2KxC3=H_K}dvH zNGFSu4iaMrn?C@t+4=rb$>l!3*XMbD&wcbJdN-#z?IQBiATp0$ugDN)upalY4IOO3 zBCg^EHsddDVsoQN8uLgfDWeZxuoJ78!cUA~gw23QWXUIv5JR$oTEI0lm~W#Bw2LMd zun*7v*B?;bd&U8L#SZ+y9+W1LUg*U+Od`2uA47PEF+6Q@YJ&<3VHUnnb;Qr}ROMmJ zViMKGBUA}4|MwqJC4NKo!f(_uM!QtO!`Ow3s5-fh)F?URlLLo;9fM<3Ej&RB-?0__ z!CFE6xWwGX5iFo;@ilT(N=R<0;09JvJ!FO;JD9;`d_vVZKh>!F-5~}lQ5YA{#xcyh zE4r%\n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.6.6\n" +"X-Generator: Poedit 1.8.9\n" "X-Poedit-Basepath: .\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-KeywordsList: __;_e;_x;esc_html__;esc_html_e;esc_html_x;esc_attr__;" @@ -194,8 +194,8 @@ msgstr "Pages" #: ../library/entry-meta.php:4 #, php-format -msgid "Posted on %s at %s." -msgstr "Posté le %s à %s." +msgid "Posted on %1$s at %2$s." +msgstr "Posté le %1$s à %2$s." #: ../library/entry-meta.php:5 msgid "Written by" diff --git a/web/app/themes/oe-brixton/languages/gl_ES.mo b/web/app/themes/oe-brixton/languages/gl_ES.mo old mode 100755 new mode 100644 index 5345bb110c1329366954c53c93757273813dedf3..856ed95aa5ebe8f4fef738c7000c94c4785dd4a9 GIT binary patch delta 695 zcmX}p%PT~26u|LwnLNf|#`|s5m?0+jj>6c8qNrJs5*A9-2zhKMCZ$Lu@B9IzBxwfO}-E)8E{C;=Yx9+nN_2)2%Tj;?XWXOkIA~I!&d=WXA80VIb^Jv3W z)CD)N6!)+Qqw)D$q*u9*zkfz8_>G#E%VIfbVk@?z7G6Q!*minEq@IT(CIa|~h3H^= z+2}=$o3RXguo!2s4>wT@yrJg(U>+85T-rb#wqO@>NV0~yv0bdd!w3($@D*yoC)Cc~ zks*fj??V^%5*K3=PGbq4q87f!5WZk7ny$ZJIEV$r!*LfdOuUZ_2^mz=iEQl0Mbu88 zFb!X^96zuPopkBPZq%b(LjGW^iRzuB#L3b|B5h6E)Gsyr|B70+DVyE$%(#bU-IW1P r^d#ju!P(%qOuyCOw#;U;vBnJS9HiYD!RV-C%$BOTld;qX=UKupr3p&T delta 674 zcmXxh&nv@W9Ki9<7``@R^J{*aMVoLyW=^8GXyro5E;!lB5?eX#U@7?#Ex9R54hZew zA5cn8iUVpVB{{i>Qr@4LZ%@zb`+UC7_xXID=UMk8Jm*1Eyi7!P4Uu6yMlXI~KGqhB zl%g9;um^)UgvEG(A-upLth0y|;55=CMCZgP_TdIL<2BOc-6Cm-2~ zYQj6T;xjhlD-NPTl^r;OdX!7Z4Q6)Vn>@^o=sjghYeoH2Xa7I`RHu2~oWJ0jT6DFf fPKiPg+_T=Ae5r6z*qpcEitr_EKh60CyfsK1 diff --git a/web/app/themes/oe-brixton/languages/gl_ES.po b/web/app/themes/oe-brixton/languages/gl_ES.po old mode 100755 new mode 100644 index b547608..78205fa --- a/web/app/themes/oe-brixton/languages/gl_ES.po +++ b/web/app/themes/oe-brixton/languages/gl_ES.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: foundationpress-libsass-template 5.4.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-10-27 06:23+0100\n" -"PO-Revision-Date: 2015-10-27 06:23+0100\n" +"PO-Revision-Date: 2016-10-16 10:07+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: gl\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.6\n" +"X-Generator: Poedit 1.8.9\n" #: 404.php:8 msgid "File Not Found" @@ -202,8 +202,8 @@ msgstr "Páxinas:" #: library/entry-meta.php:4 #, php-format -msgid "Posted on %s at %s." -msgstr "Publicado en %s o %s." +msgid "Posted on %1$s at %2$s." +msgstr "Publicado en %1$s o %2$s." #: library/entry-meta.php:5 msgid "Written by" diff --git a/web/app/themes/oe-brixton/languages/he_IL.mo b/web/app/themes/oe-brixton/languages/he_IL.mo new file mode 100644 index 0000000000000000000000000000000000000000..b9432dc089496ef2024ce94979b6c827f579ed05 GIT binary patch literal 5407 zcmb7`TWlOx8OKkd1sYlk29}7n(~O)Ff78S}IkdKLCCR+z#Fg?gl>tj+NsR;3pZs4DJKZf!cSyoc|rz&-h(%Gk7n; zz6d@B%8uttj6uuzJD~Jj1fKza0^SMUjZo>a;9cOu;6300a3}a2$Wn6}lwapS`EwDJ zKW~BB_j6G4u9xFKg4*{UI12s~tb#{BV$A2jmq6*62M>Wi00+SLK<&Hl_Co$9Q1W+! z&w+7u+`{EZz*{1@9n;@7vBe*2W4w&E!DQ=7%6f9U?yYzn;>+wmS@ zlI*d^!n&W>THI{rHQ%SL5;9xz-wwS%1Z6yB0zP|pnZ)ATv&EjV8ZGZ1J zZ)E+eBYxCQi|JaB`L-5%X}Yg(BI+CIXI^t7W`D!4ov_n!JF#iY55pjuH2cGVxvb&a zuBsQjlU`a&f>t)%2+){JSI52DiGeMBBaea7V#nKA7Dr}(;RzUJLDcqb;(K+(R;yKW zAn_*cR8XJvGsOcPL24)BICBw*GB1eyDyNpnB1!Bvn2$I}t>6JJs+q#j~7Ed>h8`3HISWk!w*|k^Q146JSfu&r`L}Ztp3zI8Bf}{o!Jf}I^%ev2&Gr6;cTXLlYZR> zk@eEGB=)DKh;A^X@r*LtfOUj zDqhcVLhk%3!hS6ByRTINqu!*S4x7=?_fmXK(_j)KE!=Mxgdm4W(Dah&VlIqpUKYfW zC5PCf0{IFG%qW{*39m;w~Sc1X>@A#=Q}gbtOD$4N51Rplq&UF@4)R-*{Y zx^|K*HP%caU=ewF?oCo}lw;PgsdU$ai3tpiGJC?Go{Ez?ZXa)tH-pS}ih7J-xsbwe z>#ZlZZ3dH#tf;GT-;XH#W_;4GZ)FNDVtoX$Y>gB^&aFx#)t~vzRt&jX(${@UdQJxZRJWT}%`^UZN~1H+Bte#8)A+P` z7SmO9Z3xJ2{d$vdQu9sPsrtye#Dtw{a&1l&kX2qsOI16&9bDFWQ(i#to3zas(mMWD z%`{h~*{sy-W;BUkz=_J?dgW<9Nul>JnT6qQX)E#5v=Rp6DNa`u9~zKvcT^v)4sM_~ z#7R~;l1>Ko%46-xv@#YC+YO_~#wz=1v?`U#0hSNj?Sn%*D}#?z26xz@ox?kJJvjK# z;2;YtPx&VU>FixMG*}thX@>@f2OoKGa69XsBuQT8_t~K>dp3Nd^0?0d;c@;9+tJwPIJ866UDe%~n_@}Xto8O_ z7(m(v8Q<%3oass1zA~vZqsnPJ(sgl|^4wqs^7;HsKAX?!(9T!$SKa7LzH0Nu_2>4D zQ?Haq_xfcE`AU9?UF=v8h25U!qemP%e=DhT;BVRs; zq#2gaSwK1#^3~#0@BI#7(G@4bDRJ+yb8pYVf8*5RM0DfSQqSR!yQeYcnj~ZOoKxT& zSjiXjbB3S!{CgJL7KsASSM!T&rSV_B2@q9yx#TSA#%WF>=Wu2vKc_&*<(Yi$#;L1@ zfG=aqvgPLt)2H)SH+Leo=%ih8!v$i@q7`gcR9_>?|L4{@QnAb)e44|f)BG(|jf=!g zAF~74IHMd&{xXZn*{mXzFK;oWXR`{6TXqR=uI4icn90v-gQVW#6)H#=5pZ{4$80B^EcM2gLK|J#~!{^*eK#&;=b1XTv<0Md$2)) zIg?*398>`k!1I+gmi^C<7Q%pY@_fM{jex8x-gy%19C8)e`Dp1B@P8~!7qp9OuDYsN zlv_~a61Edoi)id!Q|L-`zGxZ5P0@#2`O>hG#Bx=|RRzCWtTLP^t0Wd2$sN~vUeCGY zQuNv+(eA56IV-+_*m{|*S5Y-fie~w{MikKDEM25PE-SvWmCT*ho1%%R+Ez*bsFDjBE>;1O4P%c3$|8Z@gX_o3w6KCg5rFN-WMYp5&N^+L%MZt zb!s^0^QD`mdNgPYD-;3P^AQo8eDKTkiE4& zpo}5bQedND^?er_xAv$yleqQIWObFit;G4 zR*-P1;00s#66f++X91Zjh;c=L{iX$%x?%eWWh=DfSW-zvggG$~IWmDgpKqr8HG M`3f_<&gaa(05SX^lK=n! literal 0 HcmV?d00001 diff --git a/web/app/themes/oe-brixton/languages/he_IL.po b/web/app/themes/oe-brixton/languages/he_IL.po new file mode 100644 index 0000000..e46fb94 --- /dev/null +++ b/web/app/themes/oe-brixton/languages/he_IL.po @@ -0,0 +1,272 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: foundationpress-libsass-template 5.4.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-07-05 16:58+0300\n" +"PO-Revision-Date: 2016-10-16 10:07+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.9\n" +"Last-Translator: Eli Cohen \n" +"Language: he\n" + +#: 404.php:8 +msgid "File Not Found" +msgstr "הקובץ לא נמצא." + +#: 404.php:12 +msgid "" +"The page you are looking for might have been removed, had its name changed, " +"or is temporarily unavailable." +msgstr "הדף שאתה מחפש אולי הוסר, שמו השתנה או אינו זמין באופן זמני." + +#: 404.php:14 +msgid "Please try the following:" +msgstr "נסה את הפעולות הבאות:" + +#: 404.php:16 +msgid "Check your spelling" +msgstr "בדוק את האיות שלך" + +#: 404.php:17 +#, php-format +msgid "Return to the home page" +msgstr "לחזור דף הבית" + +#: 404.php:18 +msgid "Click the Back button" +msgstr "לחץ על לחצן הקודם" + +#. /previous pages when applicable +#: archive.php:21 index.php:24 search.php:25 +msgid "← Older posts" +msgstr "← פוסטים קודמים" + +#: archive.php:22 index.php:25 search.php:26 +msgid "Newer posts →" +msgstr "← פוסטים קודמים" + +#: comments.php:8 +#, php-format +msgid "%s" +msgstr "‏%s" + +#: comments.php:9 +#, php-format +msgid "%1$s" +msgstr "%1$s" + +#: comments.php:10 +msgid "(Edit)" +msgstr "(עריכה)" + +#: comments.php:16 +msgid "Your comment is awaiting moderation." +msgstr "התגובה שלך ממתינה לאישור." + +#: comments.php:31 +msgid "Please do not load this page directly. Thanks!" +msgstr "בבקשה לא לטעון דף זה ישירות. תודה!" + +#: comments.php:36 +msgid "This post is password protected. Enter the password to view comments." +msgstr "פוסט זה מוגן בסיסמה. הזן את הסיסמה כדי לצפות בתגובות." + +#: comments.php:46 +msgid "No Responses to" +msgstr "אין תגובות ל" + +#: comments.php:46 +msgid "One Response to" +msgstr "תגובה אחת ל" + +#: comments.php:46 +msgid "% Responses to" +msgstr "% תגובות ל" + +#: comments.php:53 +msgid "← Older comments" +msgstr "‏← תגובות ישנות יותר" + +#: comments.php:54 +msgid "Newer comments →" +msgstr "תגובות חדש יותר →" + +#: comments.php:61 +msgid "Leave a Reply" +msgstr "הוסף תגובה" + +#: comments.php:61 +#, php-format +msgid "Leave a Reply to %s" +msgstr "הוסף תגובה ל%s" + +#: comments.php:64 +#, php-format +msgid "You must be logged in to post a comment." +msgstr "אתה חייב להיות מחובר בכדי לפרסם תגובה." + +#: comments.php:68 +#, php-format +msgid "Logged in as %s." +msgstr "מחובר כ- %s." + +#: comments.php:68 +msgid "Log out of this account" +msgstr "להתנתק מהחשבון" + +#: comments.php:68 +msgid "Log out »" +msgstr "להתנתק »" + +#: comments.php:71 +msgid "Name" +msgstr "שם" + +#: comments.php:71 comments.php:75 +msgid " (required)" +msgstr "(חובה)" + +#: comments.php:75 +msgid "Email (will not be published)" +msgstr "דוא\"ל (לא יפורסם באתר)" + +#: comments.php:79 +msgid "Website" +msgstr "אתר" + +#: comments.php:84 +msgid "Comment" +msgstr "תגובה" + +#: comments.php:87 +msgid "You can use these tags:" +msgstr "אתה יכול להשתמש בתגים האלה:" + +#: comments.php:88 +msgid "Submit Comment" +msgstr "שלח תגובה" + +#: content-none.php:11 +msgid "Nothing Found" +msgstr "לא נמצא דבר" + +#: content-none.php:17 +#, php-format +msgid "" +"Ready to publish your first post? Get started here." +msgstr "מוכנים לפרסם את הפוסט הראשון שלכם? התחילו כאן." + +#: content-none.php:21 +msgid "" +"Sorry, but nothing matched your search terms. Please try again with some " +"different keywords." +msgstr "" +"אנו מצטערים, לא נמצאו תוצאות עבור הביטוי המבוקש. יש לנסות שוב בעזרת מילות " +"חיפוש אחרות." + +#: content-none.php:26 +msgid "" +"It seems we can’t find what you’re looking for. Perhaps " +"searching can help." +msgstr "נראה שאנחנו לא מוצאים מה שאתה מחפש. אולי חיפוש יכול לעזור." + +#. /archive/search. +#. * +#. * @subpackage FoundationPress +#. * @since FoundationPress 1.0.0 +#. +#: content.php:16 +msgid "Continue reading..." +msgstr "להמשך קריאה…" + +#: hero.php:40 kitchen-sink.php:739 page-full.php:19 page-sidebar-left.php:21 +#: page.php:18 single.php:27 woocommerce.php:18 +msgid "Pages:" +msgstr "עמודים:" + +#: library/entry-meta.php:4 +#, php-format +msgid "Posted on %1$s at %2$s." +msgstr "פורסם ב-: %1$s ב-: %2$s." + +#: library/entry-meta.php:5 +msgid "Written by" +msgstr "נכתב ע”י" + +#: library/foundation.php:16 +msgid "«" +msgstr "«" + +#: library/foundation.php:17 +msgid "»" +msgstr "»" + +#: library/foundation.php:40 +#, php-format +msgid "" +"Please assign a menu to the primary menu location under %1$s or %2$s the " +"design." +msgstr "נא הקצה תפריט אל המיקום בתפריט הראשי תחת %1$s או %2$s העיצוב." + +#: library/foundation.php:41 +#, php-format +msgid "Menus" +msgstr "תפריטים" + +#: library/foundation.php:44 +#, php-format +msgid "Customize" +msgstr "התאמה אישית" + +#: library/widget-areas.php:6 +msgid "Sidebar widgets" +msgstr "ווידג’טים של הסרגל הצדדי" + +#: library/widget-areas.php:7 +msgid "Drag widgets to this sidebar container." +msgstr "גרור ווידג'טים לקונטיינר הסרגל הצדדי." + +#: library/widget-areas.php:16 +msgid "Footer widgets" +msgstr "אזור הווידג'טים שבפוטר" + +#: library/widget-areas.php:17 +msgid "Drag widgets to this footer container" +msgstr "גרור ווידג'טים לקונטיינר שבפוטר" + +#: node_modules/grunt-pot/test/fixtures/some-file.php:3 +msgid "I'm a translatable string." +msgstr "מחרוזת לתרגום" + +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:4 +msgid "Me too" +msgstr "גם אני" + +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:7 +#, php-format +msgid "I have %d apple" +msgid_plural "I have %d apples" +msgstr[0] ". יש לי תפוח %d" +msgstr[1] ". יש לי %d תפוחים" + +#. / TRANSLATORS: This should be translated as a shorthand for YEAR-MONTH-DAY using 4, 2 and 2 digits. +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:16 +msgid "yyyy-mm-dd" +msgstr "יי-חח-שנהה" + +#: search.php:7 +msgid "Search Results for" +msgstr "תוצאות חיפוש עבור" + +#: searchform.php:6 searchform.php:10 +msgid "Search" +msgstr "חיפוש" diff --git a/web/app/themes/oe-brixton/languages/it_IT.mo b/web/app/themes/oe-brixton/languages/it_IT.mo old mode 100755 new mode 100644 index 35cd459247f3b7935003fbed092d872405b3df9b..b17f0e9052bcbf66b1a0ccd1e13c8e284baea019 GIT binary patch delta 638 zcmXZYF-Tis5Ww+!c`wz(M3dC2OISeRqe+ljQajquMDVf0{%_ zFwiX0htKgAzQzbHVjHgF1a4w0nm&V!-96yIYH{zWgw_@zG3jqO;#w^%}b@FTv$Z}2d7t-r-{-jsXTm3ahUFKL&m55fbh$(ta0Ih)6^qcq z0!-p0?qfcF<2>fOMf!0KX(bu-;1!nP9d_a?)?poo35Up#M=Z%Dv7RU5#Vs^(2er{2 zR$>aZ(dB>s3H5;&tj2dNK`%`zuolDEgF4tO@>e-RtvkgQy!Kju!54`d5{-u3k$Q\n" "Language-Team: Le Saint \n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.6.7\n" +"X-Generator: Poedit 1.8.9\n" "X-Poedit-Basepath: .\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-KeywordsList: __;_e;_x;esc_html__;esc_html_e;esc_html_x;esc_attr__;" @@ -196,8 +196,8 @@ msgstr "Pagine:" #: ../library/entry-meta.php:4 #, php-format -msgid "Posted on %s at %s." -msgstr "Pubblicato il %s alle %s." +msgid "Posted on %1$s at %2$s." +msgstr "Pubblicato il %1$s alle %2$s." #: ../library/entry-meta.php:5 msgid "Written by" diff --git a/web/app/themes/oe-brixton/languages/ja.mo b/web/app/themes/oe-brixton/languages/ja.mo old mode 100755 new mode 100644 index a943f909cab4b2f386afa2e2da20cb9d9fb94120..b8e4581249ebffccae19eace3758c66d8c7391fa GIT binary patch delta 633 zcmXZYKS&#K6u|L!-f8q=H1Ti$X;X|fR0^G zJRp+6_EwQNE?^6munX6*6F=Z0R5h&s7r)WXlO8^io`8)K;X zQ`n2SG8-M$8=S{?_zeHy1GFR84?V^b=PZunAJm8HsGVKnJq*(Jdvs7I@SSA?_izhe zP>sg_qfY*2osB+ZF#kM`qn;(J!Nk?_;jh;hI6+S)d4FZMQCC`N}9 sv08I$r74_rJlFA(QO|wqPK>z;|C{~UeDZLzwiG;U4rsQfrXnxRE2Mo(bN~PV delta 625 zcmXZZODIH97{KxG&K+ZByvF;jks0sN-0>)y)iA`ul%j~mL=h=PqSW2kYBYDlb`};E zk|`+*Mbd1oER?d6(riRl{7Yy|>;5Am^Q!buG?v`(CK`9bx1RvI61Xbb-IEEX@R=LW>?=iyqsmT1#yq z32eeUT*OyY9T;Ws;0&tDmazs+jNuWg&b^^ZJd3Ksg?vt#h+1izBbE5UG#%< z=;J@AwQ0@jmey*0=)+pbGVJAAz>3=2G)b@9le%Nm8{hK!(=O+U&C?e!3?6SVG-UL5 a1qZDgcS;}V=}#{eyyWSdY?~-u(fGet started here." msgstr "" -"あなたの最初の投稿を公開する準備はできましたか?ここから始め" -"ましょう。" +"あなたの最初の投稿を公開する準備はできましたか?ここから始" +"めましょう。" #: content-none.php:21 msgid "" @@ -195,8 +195,8 @@ msgstr "ページ:" #: library/entry-meta.php:4 #, php-format -msgid "Posted on %s at %s." -msgstr "投稿日時 %s %s." +msgid "Posted on %1$s at %2$s." +msgstr "投稿日時 %1$s %2$s." #: library/entry-meta.php:5 msgid "Written by" diff --git a/web/app/themes/oe-brixton/languages/nb_NO.mo b/web/app/themes/oe-brixton/languages/nb_NO.mo old mode 100755 new mode 100644 index e3d32112a60cd02275e93b4c8b1b91c3c2dc1e66..db349c2094710130b658fd9b05a8fd79e0b1803d GIT binary patch delta 697 zcmX}p%PT}t9KiA4Jo1?F7$T3zO*8UnG_EdKl8O^ZlX-r+ehiy%3;lS5G)?+{8RQwBr}Z-g0fv-=c2#ipA*26ro88zgDb9&7ZX6OPLnc5m+M-#C7y@kISpMGqbhHxgsT4 zk44ylVeH33OkfmGu^+v8A~`sPyb|S8iK`gGEo{JRx5wdFDszd;9GpO?m1s0PG*7@_}KGxwa7ULVT zhS+J>KsPp{iDNi{dO}B7h3BXzb&utk#vp#977h~B#(Gg38nhT_N0Ug7tfCt?Pz&#% zUPS`O@c>)#3%%$kxdMl91S6;$JV7n=fV%Dz>PBBNf;PI-|KVu{%M8|V6w}D{ONgl6 zQ7_iwF!td**5h#|euv!PZ}(l>N&BKE|87mUp=YV*`u_w|rX%LajvJ8`!7LXoo3l#;Tt zrKyR9l-Su>i4wb6N*P&^|KZi^{mwh@-gD2r_uc$5bA66XgNU4ziX`v~JJ2W-DZy^6 z#a^t!1Ww@uR$?9(@fL?M=oX=bte^)sQ0s4F9FNh&N1Sqse7hwhUJ{e#{|n5c7Fa`_ zn6^Ez^Jl1qFR%%3?ElYL&vy|A(OdC9E{WRs7zS_#+i@3LF;|fhsUx^2p*t#|cKV6c z7$T{Khp+}y*oX@l#VvHWE}_ zjU9)Xt#P$FByYLWhQ~5j{L`!cK*Y?Sm!3MSqd_Yiw4#11JP?j`g(KNz&#Tej6VH!( Q4_$wwSLgml7ppd%ziMYlIRF3v delta 607 zcmXZZPbh<79KiA4_P&kTFogW6EjG=cv3J&(NU7nVNNNt0< zhHB!brD^5QQ5DW%J?5?dFIdC(2liue>HoL{s>UZUfOFV_`{>1NX-1@);GTrqQ2|w_ zpXk93lB)0kR^SxY;S$Dh2X(x%^0$^xs7~%3c|@ZN)kq~THZM(>!j23<55W;O;vK3h zDc}fxVH*z8jk=O$RR32|72d-IJVv$PH>xXf(`^zrP@U)lQc9k&0pD;Gof@;63C7I0 zHg5BqhuVQn%nIFWi{uP_TXU@WQfXfxcT<$Ld!ix32!#!w(cKs6Z4VpfddaIE>omf- QY1fI)(DWihf6BM)e-*z-0ssI2 diff --git a/web/app/themes/oe-brixton/languages/nl_NL.po b/web/app/themes/oe-brixton/languages/nl_NL.po old mode 100755 new mode 100644 index 694eea8..ec8fa6a --- a/web/app/themes/oe-brixton/languages/nl_NL.po +++ b/web/app/themes/oe-brixton/languages/nl_NL.po @@ -3,14 +3,14 @@ msgstr "" "Project-Id-Version: FoundationPress v5.4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2014-11-01 13:28+0100\n" +"PO-Revision-Date: 2016-10-16 10:07+0200\n" "Last-Translator: violacase \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.6.10\n" +"X-Generator: Poedit 1.8.9\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" @@ -240,8 +240,8 @@ msgstr "Verder lezen..." # @ FoundationPress #: library/entry-meta.php:4 #, php-format -msgid "Posted on %s at %s." -msgstr "Gepost op %s te %s." +msgid "Posted on %1$s at %2$s." +msgstr "Gepost op %1$s te %2$s." # @ FoundationPress #: library/entry-meta.php:5 diff --git a/web/app/themes/oe-brixton/languages/pl.mo b/web/app/themes/oe-brixton/languages/pl.mo old mode 100755 new mode 100644 index 43394e01d848189ace1b29a3e762337f55930b3e..265740ffc85cde0e4504ac6dd175e0c95cd1aa8e GIT binary patch delta 668 zcmYk(yDvj=6u|Lw+oHW~)%z_MXIOw2Sc6wsj#<=`eM|AcC7=0%o!Ruo zYMjC*)J`{1kMsa_p);JpI}D?TuGpl+QO8Z@<5esr-okaq+58_%rkSBu#>liL2U1G@#zASdBo_yN%4t_QsU=YyT$CJE zQzRng;Go<%%-zAkQOTe0Q#*Lu`+nZv^ZfSvJqz3sx-N)_{38L4P776i^Akc&h zs2y&ip1^J)eu&eIZ_$G_Osc^U>VgT>LPk+LUPLYQ2yJ+RUd*DN_yg+6zNUHMCm)5x zFX|sFS#=nFsFkKrk8}&Q(<2M1Ie{j*aeI$~k7*R{YD%xpsRje`c>m$N&HU diff --git a/web/app/themes/oe-brixton/languages/pl.po b/web/app/themes/oe-brixton/languages/pl.po old mode 100755 new mode 100644 index b620284..3ef682e --- a/web/app/themes/oe-brixton/languages/pl.po +++ b/web/app/themes/oe-brixton/languages/pl.po @@ -3,14 +3,14 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-10-13 19:26+0200\n" -"PO-Revision-Date: 2015-10-13 19:47+0200\n" +"PO-Revision-Date: 2016-10-16 10:07+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.5\n" +"X-Generator: Poedit 1.8.9\n" "X-Poedit-Basepath: .\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" @@ -197,8 +197,8 @@ msgstr "Strony:" #: library/entry-meta.php:4 #, php-format -msgid "Posted on %s at %s." -msgstr "Opublikowano %s o %s." +msgid "Posted on %1$s at %2$s." +msgstr "Opublikowano %1$s o %2$s." #: library/entry-meta.php:5 msgid "Written by" diff --git a/web/app/themes/oe-brixton/languages/pt_BR.mo b/web/app/themes/oe-brixton/languages/pt_BR.mo old mode 100755 new mode 100644 index 77795b05536d9ff79af83f65abd6b09e3940a436..18af4b3c58fea7d811cde6ecf9604ee2ed13a1ae GIT binary patch delta 699 zcmX}p%PT}t9Ki7(CXboHc)v4c4ASV{2{U8CibBd`JB3JjCrYAbHGhCC$U;gUD>RcV zq(nAINwKi7@L0-~pe)sn~_tpL8-Verw@K`uo6Eo5ld4< zGSQ9c7{DO5Vj6DY2p(WFI;|o}ID|Br;Gyy7Fo28b!b_ydyH!FGi4*x^qycyBA`U!8 z3tpoJyu~7Xz-;`Cy|<@|kgH^)&X-^=2Cxu2u>eQ03Bzc^bIib-)R0I8ohM#sqdEqHDrc5weOKb>4$zXkjG|p$Dh22Ujo$udxsx^5P;5bY8ikl{-mM zg(hn9Vbl|t!T>I&=eIG;_$obL!|~_~gGe?RK`kVN7S5tpyoXxYF>0_xoQ}TWA?+K| zB*jG&+S!HEl~U|SADTFW8gv6S=s6Bz5}VP>VqG_Yy5A^PU>L`78B1~ah0YS46b@jN zG2C>kS*?cIwziq`W4D@viLG42;f(ojcVayH\n" "Language-Team: OneSpace \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.9\n" "Language: pt_BR\n" #: 404.php:8 @@ -196,8 +196,8 @@ msgstr "Páginas:" #: library/entry-meta.php:4 #, php-format -msgid "Posted on %s at %s." -msgstr "Publicado em %s às %s." +msgid "Posted on %1$s at %2$s." +msgstr "Publicado em %1$s às %2$s." #: library/entry-meta.php:5 msgid "Written by" diff --git a/web/app/themes/oe-brixton/languages/pt_PT.mo b/web/app/themes/oe-brixton/languages/pt_PT.mo old mode 100755 new mode 100644 index 4f4c40199658b1678689620ebd8e970858584cb6..ce2b984c12889aacb6ce3e0906422e5978d447f2 GIT binary patch delta 1629 zcmXxkZERCj9LMp~ZET}m*~$iPOt&i(_C%rGMjaz40&awi*#rpjAtrb0P1j{>$6ZT& zqg`T*Z^#mJoe$wfA;t(XCdNq!ZzQHhqk;+eT4Q4L4T*063C0(Gf9>UD|NFV;_S|#M z|D1F8{lJC6(r=p^)(qtU@g#9SV9bknvz`m3d4n+_+=!cS3pQXBn{WU(W5TZ=#ckB5 za4Tl~`kUBJ{UbbxpCj*=%w7M7d)UbjO^wFvL<{?H0-wShHsg8Rh--emjGEYG-)ne= z`ga({9!Al?yRj7y;S-p`B;%VoZaR2SMor)=RED=uncYFX_$R8v2Y$Vt*{EGRGM4GY z6!zjCT*59aqXxW=6L=fR)pU|YKjWJoZq&gfYQSmKfHuC0XHgmcjPv*_zJSMqwJlgh z{>=MaG|(m7kJmAZ_mDr+$v$eF9r#zBF@soA#}O`VXrVGnAW51ecH^^t{bkfv%%Jvm z1+~{7_B#sw%$^()zpZQ)z&G-gtOMXPH%pa&F z{s*T{Ob_tK;W+K%eFm(#E7wD^NsD z>rCezoWT?)C21)$6DjM2lg<_wb$4>nURYRPY1|d?zG-?GOhlJ0yI}1cj;?>* ze7r8Qn4ifmII*04&J^-XGq&q(4Q0d0SbQXw7_}0~@qMG-`A~OTGM0$P5=ko&ACHd> z#fQCXq2u09p}k(P<&(gE?~9gy+w(m=#c0Ao6ViAgNJ2JhFlyq(1WnZ7K}qzYF(7*I``ZqQZ~E@%eRpTx z_j#XrrtfU}JXimrr}b?^E7I?v|CTW30A5(d2kl0yF=_l8Gnh;o!_f3%8xCL(u8-$i zaFF@KcpFZ~b02lzE4UU<;WlIH<_rTZ^i%x9uh`H0U)+FwDP!)#hj1O1QGvV=`vy)k zU&Kzlj@lr}qFp$Ew_^?`@Dc3A6WGuG=5+>&_ybggmry7A47I=&)WX-|`E}HFZSBUe zm+8O~uEkND#Q}^^fqaOM;w9uvrhT|^_BWFZwBdHthEL#AXi+Dj6b6SZRh!MtLeluEnJIQ_dKVncQd%mKo@?89M1fRL-mzz?IED(iirU~5-i7B-2m1zf{kPbMf1=i1ohAPotRqaF zyns9=Gljcx7gD9>CDa0+qEdYo_v1}eY9Ax&5j=>RpG0NoRaC(5;|aWoD!xfJUBG>H z28S4&M+MN$uS#7%YJp+ghdc0Id<_-gGV*xM1>}uw2DKG+dYw>BwV;-#D<~aQYmC!% z?mp!sU*OFe(3T1`c%deI|!kggiI)l|r8 z%68U7sbti;%a)&sPAC6bKARd&4DJtRym{C0?Q!pjt$Bg(91TKGgXqh)8>!H-HD|-} z*X?^-GV^YwW`atkZ2jXljB;tOb9|&w7%AkP!bGt!7A>ZSx>vp_IQe{Wd}?z(AAOPD z8x=b~N=!u8I&KcSwpyMm+1lJlzUYjuG0sNcExTdZSc--+r<1{a%~qpxnSc7d@|^2c z1IKT?7dWn84*Xix&IY5)SG%?)5~a7Y2Pco(sx^<>S?g2+?|;{rLkmthSaAJXW2x!| zPV>4_W9f+JTT`;p$?V5%q0@Lb\n" -"Language-Team: \n" +"Language-Team: Pedro Mendonça \n" "Language: pt_PT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.6\n" +"X-Generator: Poedit 1.8.9\n" "X-Poedit-Basepath: ..\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;" "esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;" "esc_html_x:1,2c\n" +"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SearchPath-0: .\n" -#: 404.php:17 +#: 404.php:16 msgid "File Not Found" -msgstr "Ficheiro não encontrado." +msgstr "Ficheiro não encontrado" -#: 404.php:21 +#: 404.php:20 msgid "" "The page you are looking for might have been removed, had its name changed, " "or is temporarily unavailable." @@ -36,137 +37,105 @@ msgstr "" "A página que está à procura foi removida, foi alterado o seu nome, ou está " "temporariamente indisponível." -#: 404.php:23 +#: 404.php:22 msgid "Please try the following:" msgstr "Por favor, tente o seguinte:" -#: 404.php:25 +#: 404.php:24 msgid "Check your spelling" msgstr "Verifique a sua ortografia" -#: 404.php:26 +#: 404.php:25 #, php-format msgid "Return to the home page" msgstr "Voltar para a pagina inicial" -#: 404.php:27 +#: 404.php:26 msgid "Click the Back button" msgstr "Clique no botão Voltar" -#: archive.php:40 index.php:41 search.php:35 +#: archive.php:37 index.php:35 search.php:34 msgid "← Older posts" msgstr "← Artigos mais antigos" -#: archive.php:41 index.php:42 search.php:36 +#: archive.php:38 index.php:36 search.php:35 msgid "Newer posts →" msgstr "Artigos mais recentes →" -#: comments.php:27 +#: comments.php:26 msgid "Reply" msgstr "Responder" -#: comments.php:36 library/foundation.php:156 +#: comments.php:35 library/foundation.php:155 msgid "Your comment is awaiting moderation." msgstr "O seu comentário aguarda moderação." -#: comments.php:55 +#: comments.php:54 msgid "Please do not load this page directly. Thanks!" msgstr "Por favor, não carregue esta página directamente. Obrigado!" -#: comments.php:60 +#: comments.php:59 msgid "This post is password protected. Enter the password to view comments." msgstr "" "Este conteúdo está protegido por senha. Introduza a senha para ver os " "comentários." -#: comments.php:73 +#: comments.php:72 msgid "Leave a Reply" msgstr "Deixar uma resposta" -#: comments.php:73 +#: comments.php:72 #, php-format msgid "Leave a Reply to %s" msgstr "Responder a %s" -#: comments.php:76 +#: comments.php:75 #, php-format msgid "You must be logged in to post a comment." msgstr "" "Tem de ter a sessão iniciada para publicar um comentário." -#: comments.php:80 +#: comments.php:79 #, php-format msgid "Logged in as %s." msgstr "Sessão iniciada como %s." -#: comments.php:80 +#: comments.php:79 msgid "Log out of this account" msgstr "Terminar sessão nesta conta" -#: comments.php:80 +#: comments.php:79 msgid "Log out »" msgstr "Terminar sessão »" -#: comments.php:85 +#: comments.php:84 msgid "Name" msgstr "Nome" -#: comments.php:85 comments.php:93 +#: comments.php:84 comments.php:92 msgid " (required)" -msgstr " (necessário)" +msgstr "(obrigatório)" -#: comments.php:93 +#: comments.php:92 msgid "Email (will not be published)" msgstr "Email (não será publicado)" -#: comments.php:101 +#: comments.php:100 msgid "Website" -msgstr "Website" +msgstr "Site" -#: comments.php:110 +#: comments.php:109 msgid "Comment" msgstr "Comentário" -#: comments.php:117 +#: comments.php:116 msgid "You can use these tags:" msgstr "Pode usar estas etiquetas:" -#: comments.php:123 +#: comments.php:122 msgid "Submit Comment" msgstr "Submeter comentário" -#: content-none.php:15 -msgid "Nothing Found" -msgstr "Nada foi encontrado" - -#: content-none.php:21 -#, php-format -msgid "" -"Ready to publish your first post? Get started here." -msgstr "" -"Preparado para publicar o seu primeiro artigo?Comece aqui." - -#: content-none.php:25 -msgid "" -"Sorry, but nothing matched your search terms. Please try again with some " -"different keywords." -msgstr "" -"Desculpe, mas nada correspondeu aos seus critérios de pesquisa. Por favor, " -"tente de novo com palavras-chave diferentes." - -#: content-none.php:30 -msgid "" -"It seems we can’t find what you’re looking for. Perhaps " -"searching can help." -msgstr "" -"Não conseguimos encontrar aquilo que procura. Talvez uma pesquisa possa " -"ajudar." - -#: content.php:20 -msgid "Continue reading..." -msgstr "Continue a ler..." - #: library/custom-nav.php:16 msgid "Mobile Menu Settings" msgstr "Definições do menu móvel" @@ -179,131 +148,144 @@ msgstr "Controla o menu móvel" msgid "Mobile navigation layout" msgstr "Disposição da navegação móvel" -#: library/custom-nav.php:29 -msgid "Mobile navigation position" -msgstr "Posição da navegação móvel" - -#: library/custom-nav.php:38 -msgid "offcanvas" -msgstr "Off canvas" +#: library/custom-nav.php:31 +msgid "topbar" +msgstr "Barra superior" -#: library/custom-nav.php:46 -msgid "left" -msgstr "esquerda" - -#: library/entry-meta.php:12 +#: library/entry-meta.php:11 #, php-format -msgid "Posted on %s at %s." -msgstr "Publicado em %s às %s." +msgid "Posted on %1$s at %2$s." +msgstr "Publicado em %1$s às %2$s." -#: library/entry-meta.php:13 +#: library/entry-meta.php:12 msgid "Written by" msgstr "Escrito por" -#: library/foundation.php:25 +#: library/foundation.php:24 msgid "«" msgstr "«" -#: library/foundation.php:26 +#: library/foundation.php:25 msgid "»" msgstr "»" -#: library/foundation.php:54 +#: library/foundation.php:53 #, php-format msgid "" "Please assign a menu to the primary menu location under %1$s or %2$s the " "design." msgstr "Por favor, seleccione um Menu primário em %1$s ou em %2$s o design." -#: library/foundation.php:55 +#: library/foundation.php:54 #, php-format msgid "Menus" msgstr "Menus" -#: library/foundation.php:58 +#: library/foundation.php:57 #, php-format msgid "Customize" msgstr "Personalizar" -#: library/foundation.php:106 +#: library/foundation.php:105 msgid "No Responses to" -msgstr "Sem comentários para" +msgstr "Sem comentários a" -#: library/foundation.php:106 +#: library/foundation.php:105 msgid "One Response to" -msgstr "Um comentário para" +msgstr "Um comentário a" -#: library/foundation.php:106 +#: library/foundation.php:105 msgid "% Responses to" msgstr "% comentários a" -#: library/foundation.php:146 +#: library/foundation.php:145 #, php-format msgid "%s" msgstr "%s" -#: library/foundation.php:147 +#: library/foundation.php:146 #, php-format msgid "%1$s" msgstr "%1$s" -#: library/navigation.php:240 +#: library/navigation.php:43 +msgid "mobile-nav" +msgstr "Navegação-mobile" + +#: library/navigation.php:210 msgid "Page" msgstr "Página" -#: library/offcanvas-walker.php:46 -msgid "Back" -msgstr "Voltar" +#: library/responsive-images.php:19 +msgid "FP Small" +msgstr "FP Pequena" -#: library/widget-areas.php:14 +#: library/responsive-images.php:20 +msgid "FP Medium" +msgstr "FP Média" + +#: library/responsive-images.php:21 +msgid "FP Large" +msgstr "FP Grande" + +#: library/widget-areas.php:13 msgid "Sidebar widgets" msgstr "Widgets da barra lateral" -#: library/widget-areas.php:15 +#: library/widget-areas.php:14 msgid "Drag widgets to this sidebar container." msgstr "Arraste widgets para esta barra lateral." -#: library/widget-areas.php:24 +#: library/widget-areas.php:23 msgid "Footer widgets" msgstr "Widgets do rodapé" -#: library/widget-areas.php:25 +#: library/widget-areas.php:24 msgid "Drag widgets to this footer container" msgstr "Arraste widgets para este rodapé." -#: page.php:32 single.php:37 templates/front.php:46 -#: templates/kitchen-sink.php:730 templates/page-full.php:22 -#: templates/page-sidebar-left.php:24 woocommerce.php:27 +#: page-templates/front.php:38 page-templates/page-full-width.php:22 +#: page-templates/page-sidebar-left.php:22 page.php:30 single.php:32 +#: woocommerce.php:26 msgid "Pages:" -msgstr "Paginas:" +msgstr "Páginas:" -#: search.php:17 +#: search.php:16 msgid "Search Results for" msgstr "Resultados da pesquisa por" -#: searchform.php:15 searchform.php:19 +#: searchform.php:13 searchform.php:16 msgid "Search" msgstr "Pesquisar" -#~ msgid "(Edit)" -#~ msgstr "(Editar)" - -#~ msgid "← Older comments" -#~ msgstr "← Comentários antigos" - -#~ msgid "Newer comments →" -#~ msgstr "Comentários mais recentes →" +#: template-parts/content-none.php:14 +msgid "Nothing Found" +msgstr "Nada encontrado" -#~ msgid "I'm a translatable string." -#~ msgstr "Eu sou uma frase traduzível. " +#: template-parts/content-none.php:20 +#, php-format +msgid "" +"Ready to publish your first post? Get started here." +msgstr "" +"Preparado para publicar o seu primeiro artigo?Comece aqui." -#~ msgid "Me too" -#~ msgstr "Eu também " +#: template-parts/content-none.php:24 +msgid "" +"Sorry, but nothing matched your search terms. Please try again with some " +"different keywords." +msgstr "" +"Desculpe, mas nada correspondeu aos seus critérios de pesquisa. Por favor, " +"tente de novo com palavras-chave diferentes." -#~ msgid "I have %d apple" -#~ msgid_plural "I have %d apples" -#~ msgstr[0] "Eu tenho %d maçã" -#~ msgstr[1] "Eu tenho %d maçãs " +#: template-parts/content-none.php:29 +msgid "" +"It seems we can’t find what you’re looking for. Perhaps " +"searching can help." +msgstr "" +"Não conseguimos encontrar aquilo que procura. Talvez uma pesquisa possa " +"ajudar." -#~ msgid "yyyy-mm-dd" -#~ msgstr "aaaa-mm-dd" +#: template-parts/content.php:19 +msgid "Continue reading..." +msgstr "Continue a ler..." diff --git a/web/app/themes/oe-brixton/languages/ro.mo b/web/app/themes/oe-brixton/languages/ro.mo old mode 100755 new mode 100644 index 6f0e778e574a560e0ed491273bee23324f6097b1..b5fae43ff832715962fdea0299af8e7c46cca73e GIT binary patch delta 685 zcmXZZyDvj=6u|Lw+tO;4D&j2-C5;4q(1$@h!eX#=YBV$wgLnpsLEOQFO<5XK4F-{r z#$XchNK7IYgT%@t@dt?S!Ogw>oSysZ`Tfr6W&3seS<*0TL}bb#GK%XMz$+}qcl6>X zmZPOaWCFcdhKo3hn>d0WXvc1+2)D%e(E3A|z!ds%AGzhyDW>EMkz2mGNlccCcyJzV zxQSYD3mb43>+twLe~s)Z57>;)Sc_lSh%SmYVE~756m{brWQiQOO_45wJc(|6LM>#_ zo_6fRRt%yZAc+IGgcW#>Rd|EC{spV?9pm_oI>{I>wV{6028K~5lQsz|3D!_Yy^Z`v z4pBQl!4wuSjAe{RM>vSu=?speiCy@J{9E#k^=Rjmgwlcw7(v}9j~ke{AebZwlhqCP zPz&U+1&?qH?@=e=<+M7&Xm;D$YDo6fI&Ji3D{PUb0NElQeQV*-OJ|{1MkMYV|GDBh-GD9ejh>ZmcDUV`Ud8A~dr0xo_!rf?;jfK@j zO%{^ZLRPY|R5oL!EG?AB|0}n1?(fWZ&YbU@@7~p1)SL|)R-TAVrHS-o6l?JkU6{mN ze8+73!3oStr{g@%;Trbg8@jRH6ro9oS0Q#{8;+nKcabLNrdSd)L~i+&Nnkuf#EY}& z#5L3nEiAR%X;|+%k;s9QwR>I`8TEd{co#Hd4RNhQ9Raej*bbYiI`qU;OPSfdH mu8c%0s}n0}uMRul@i@YbcEs~yv?Mw+!aBPUVRqen@Aw0UiAZMv diff --git a/web/app/themes/oe-brixton/languages/ro.po b/web/app/themes/oe-brixton/languages/ro.po old mode 100755 new mode 100644 index a09d5c4..787eff6 --- a/web/app/themes/oe-brixton/languages/ro.po +++ b/web/app/themes/oe-brixton/languages/ro.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: foundationpress-libsass-template 5.4.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-12-06 02:25+0200\n" -"PO-Revision-Date: 2015-12-06 02:40+0200\n" +"PO-Revision-Date: 2016-10-16 10:08+0200\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!" "=0)))?2:1));\n" -"X-Generator: Poedit 1.8.6\n" +"X-Generator: Poedit 1.8.9\n" "Last-Translator: \n" "Language: ro\n" @@ -203,8 +203,8 @@ msgstr "Pagini:" #: library/entry-meta.php:4 #, php-format -msgid "Posted on %s at %s." -msgstr "Postat în %s la %s." +msgid "Posted on %1$s at %2$s." +msgstr "Postat în %1$s la %2$s." #: library/entry-meta.php:5 msgid "Written by" diff --git a/web/app/themes/oe-brixton/languages/sv_SE.mo b/web/app/themes/oe-brixton/languages/sv_SE.mo old mode 100755 new mode 100644 index d353cb0532d0647bbf803b83a36f0349e4c03deb..9183857e3d83193c06696ed5f6bcd8710bd6e568 GIT binary patch delta 1495 zcmY+^OKeP09LMoP%P>`sdbHjbQ*CkEdk0lRg)j&snrPz@sa$%~RL3-#JL3_F@rZ?u zkjBD-ARa3c>4IoT#I~^@Hdt9yg0Rp;f{5>LdgF02=X~xtoqPW0od1~))jh7gFr~2F z7&A~pLm4y5m@*uT<8dmMVhkf#hZX3C{S7#SehQ~yXV^c1lj&c^X1t4f|6@4*6|3n- zMw^1E;lUnl%xr8!1r9<_;{^H_aSL9@D1JgM>>KXHpEwR%iBgUpY5_f{@iVA-E?^~I z!$y1_uR;{YnaAa2B8$YxD)tTDB? z74?1&74LX~2L(8fd+{pj1b*N_jI!M%=8?6Te&l1G(J0V!T#17iLyP?BXp^XvbmNl| z#+*i`H0wAX1>TA}!9qI^n)m=t#qO|w3ajX!Lj}5l%Jrjg{1vXJ{~0xLoK+LUti~m{ z86C{yEWC}H=Na-bZ)n(f!F=GMm4WZ5iMBJUmF>n|*p3SP0Qr~~G@9rgYA4@uB9_z4 z!8xehHlyar;S@ZE+TeNAow$h;h;Q!mFo}VusNB3nrQ$W(xPm`w0Y2(PPGSl#qjEcl zi}4dGU=^$4(ac7sFb$~r)`tBnxR3rl+(CRZo~x>z??>e}jruhlL0zItxB%axa;xnq zw+oTf78kb&bCAhbzTN73hZ0tFm%Yi)_}SqpT6+ABuAJr8H`T9< zwxsh}FKut^JzF+?Ms3EL*KE0UtNu)ou!6(;b|j;HKgv_3#kF^*i)-IjacAUj`A?p& delta 1681 zcmYk*PiP!f9Ki91N!B!NY^qTk|CDKKY)W=EyPH(aY%3vY64b2*cZ&h7!^`BcJI!V$ z&dj!{7Wd%U5(xIzlc>~-LMXKq#fut9 zp+63<^|utiuRG-3b|-#Ad=K8lPW&0~##?wV{+Y(zG(JS!hY#Rz8c*VV#Ha8WzJ@aX zqqP1i4iew!R4sLg!f#YOiUVEkg`Z5F!QIrK#Anf94}OdcQP=S${2X`T-i%VcIEb== zQIz^wlzFQ7ATHt)cs@h^GSLPVlG!I|#~UaUeV@j^r2dUOY6t1eVISsD;{dLqEc_wP z;AhC*R9ClBL%0)V{20o5r4|L*+4J}czKZhcuj6U_3a9bNj`k;f1LX_6g_6ky9LM+Z zG5iq+v5QWdM}pTlu1Tax{YzG|aE3)B@zwwZHmUaE{rGqqAH}`I$59qKg>u%-w0;ez zh%ci|d<*67+{P?+kX0V@_y}s0dEP|2sEf$cQt$DuQgH=kqMp9?&iZklcmQSL2|UBcn59# z9c2R+tI0$qEaM!?*3WGZ;>JDJCu$6gfidlG_G<%Tw;S2`FngpK{6j;b~)RF zDF22W$|Wk}L0m^U+p8#N`$PXmrt8;^Ol;}I8r=A&`%p(~?gjfrbHl&4 zv)~6c6HVxaIBfWdb=1@GijF2~ji&LIRw5I}IWJs(n$bb6sUNNxyK3~ZW2F@}c2GHM z7X7%s-r0K~6IlC?S%vleyIyY1+jAieiCqbsk!PmrI*Lu=SSPD9_ESCc_N)m^)ZR%s z^g_$F>PfN^J0l~F(9;b+Hn|1=^$~ie^Gxd4tmvffSh+iu6{91sK1a2kr{PXZ%YM$B zI~zueaoLYq)^!S{nn@C~nowHYDi%xRpVnrJrN!;2m>n&-GRQUZ^5hjb1^T#w8-(FX zTBbqj-0gvB*h;7UU*A>f>M`L~A=oTr$EXWdw>xG>C3a88=?bf9QR+?XxjIRr&7Db5 zPnH|o!DfqWmzGw$DUI5L(sj4Tr7;J*Y=R_qgXZ#riQI-CEIE?Dd?~(Np_ItA*>b8L q`X2LUiyVU-on6%t*-BYAxDfFfw=%sk(Od51?k+XByBGI-aMyn+(LW#n diff --git a/web/app/themes/oe-brixton/languages/sv_SE.po b/web/app/themes/oe-brixton/languages/sv_SE.po old mode 100755 new mode 100644 index 5004785..2248388 --- a/web/app/themes/oe-brixton/languages/sv_SE.po +++ b/web/app/themes/oe-brixton/languages/sv_SE.po @@ -8,10 +8,10 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2015-03-12 15:03+0100\n" +"PO-Revision-Date: 2016-10-16 10:08+0200\n" "Last-Translator: Anders Jensen-Urstad \n" "Language-Team: \n" -"X-Generator: Poedit 1.7.5\n" +"X-Generator: Poedit 1.8.9\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Language: sv_SE\n" @@ -158,8 +158,8 @@ msgid "Pages:" msgstr "Sidor:" #: library/entry-meta.php:4 -msgid "Posted on %s at %s." -msgstr "Postat den %s kl %s." +msgid "Posted on %1$s at %2$s." +msgstr "Postat den %1$s kl %2$s." #: library/entry-meta.php:5 msgid "Written by" diff --git a/web/app/themes/oe-brixton/languages/tr_TR.mo b/web/app/themes/oe-brixton/languages/tr_TR.mo new file mode 100644 index 0000000000000000000000000000000000000000..391f0076dd8ff423cd91d8a37852a6debd81c371 GIT binary patch literal 4941 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 literal 0 HcmV?d00001 diff --git a/web/app/themes/oe-brixton/languages/tr_TR.po b/web/app/themes/oe-brixton/languages/tr_TR.po new file mode 100644 index 0000000..6a2c0d1 --- /dev/null +++ b/web/app/themes/oe-brixton/languages/tr_TR.po @@ -0,0 +1,278 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: foundationpress-libsass-template 5.4.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-19 14:45+0300\n" +"PO-Revision-Date: 2016-10-16 10:08+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.9\n" +"Last-Translator: \n" +"Language: tr\n" + +#: 404.php:8 +msgid "File Not Found" +msgstr "Dosya Bulunamadı" + +#: 404.php:12 +msgid "" +"The page you are looking for might have been removed, had its name changed, " +"or is temporarily unavailable." +msgstr "" +"Aradığınız sayfa silinmiş, adı değiştirilmiş ya da geçici olarak " +"kullanılmıyor olabilir." + +#: 404.php:14 +msgid "Please try the following:" +msgstr "Lütfen şunları deneyin:" + +#: 404.php:16 +msgid "Check your spelling" +msgstr "Yazılışı kontrol edin" + +#: 404.php:17 +#, php-format +msgid "Return to the home page" +msgstr "Anasayfa'ya geri dönün" + +#: 404.php:18 +msgid "Click the Back button" +msgstr "Geri butonuna tıklayın" + +#. /previous pages when applicable +#: archive.php:21 index.php:24 search.php:25 +msgid "← Older posts" +msgstr "← Eski yazılar" + +#: archive.php:22 index.php:25 search.php:26 +msgid "Newer posts →" +msgstr "Yeni yazılar →" + +#: comments.php:8 +#, php-format +msgid "%s" +msgstr "%s" + +#: comments.php:9 +#, php-format +msgid "%1$s" +msgstr "%1$s" + +#: comments.php:10 +msgid "(Edit)" +msgstr "(Düzenle)" + +#: comments.php:16 +msgid "Your comment is awaiting moderation." +msgstr "Yorumunuz onay bekliyor." + +#: comments.php:31 +msgid "Please do not load this page directly. Thanks!" +msgstr "Lütfen bu sayfatı doğrudan yüklemeyiniz. Teşekkürler!" + +#: comments.php:36 +msgid "This post is password protected. Enter the password to view comments." +msgstr "Bu yazı parola korumalıdır. Yorumları görmek için parolanızı giriniz." + +#: comments.php:46 +msgid "No Responses to" +msgstr "Yanıt Yok" + +#: comments.php:46 +msgid "One Response to" +msgstr "Bir cevap" + +#: comments.php:46 +msgid "% Responses to" +msgstr "% için cevaplar" + +#: comments.php:53 +msgid "← Older comments" +msgstr "← Eski yorumlar" + +#: comments.php:54 +msgid "Newer comments →" +msgstr "Yeni yorumlar →" + +#: comments.php:61 +msgid "Leave a Reply" +msgstr "Bir Cevap Bırakın" + +#: comments.php:61 +#, php-format +msgid "Leave a Reply to %s" +msgstr "Bir Cevap Bırakın %s" + +#: comments.php:64 +#, php-format +msgid "You must be logged in to post a comment." +msgstr "Yazıya yorum eklemek için üye girişi yapın." + +#: comments.php:68 +#, php-format +msgid "Logged in as %s." +msgstr "%s olarak üye girişi." + +#: comments.php:68 +msgid "Log out of this account" +msgstr "Bu hesaptan çıkış yap" + +#: comments.php:68 +msgid "Log out »" +msgstr "Oturumu kapat »" + +#: comments.php:71 +msgid "Name" +msgstr "Ad" + +#: comments.php:71 comments.php:75 +msgid " (required)" +msgstr "(Zorunlu)" + +#: comments.php:75 +msgid "Email (will not be published)" +msgstr "Email (Yayınlanmayacak)" + +#: comments.php:79 +msgid "Website" +msgstr "İnternet sitesi" + +#: comments.php:84 +msgid "Comment" +msgstr "Yorum" + +#: comments.php:87 +msgid "You can use these tags:" +msgstr "Şu etiketleri kullanabilirsiniz:" + +#: comments.php:88 +msgid "Submit Comment" +msgstr "Yorumu Gönder" + +#: content-none.php:11 +msgid "Nothing Found" +msgstr "Hiçbir Şey Bulunamadı" + +#: content-none.php:17 +#, php-format +msgid "" +"Ready to publish your first post? Get started here." +msgstr "" +"İlk yazını yayınlamak için hazır mısın? Buradan başlayın." + +#: content-none.php:21 +msgid "" +"Sorry, but nothing matched your search terms. Please try again with some " +"different keywords." +msgstr "" +"Üzgünüz, arama teriminizle hiçbir şey eşleşmedi. Lütfen bazı farklı anahtar " +"kelimelerle tekrar deneyiniz." + +#: content-none.php:26 +msgid "" +"It seems we can’t find what you’re looking for. Perhaps " +"searching can help." +msgstr "" +"Aradığınızı bulamıyoruz gibi görünüyor. Belki arama yapmak yardımcı " +"olabilir." + +#. /archive/search. +#. * +#. * @subpackage FoundationPress +#. * @since FoundationPress 1.0.0 +#. +#: content.php:16 +msgid "Continue reading..." +msgstr "Okumaya devam et..." + +#: hero.php:40 kitchen-sink.php:739 page-full.php:19 page-sidebar-left.php:21 +#: page.php:18 single.php:27 woocommerce.php:18 +msgid "Pages:" +msgstr "Sayfalar:" + +#: library/entry-meta.php:4 +#, php-format +msgid "Posted on %1$s at %2$s." +msgstr "Yayınlanma tarihi %1$s Yayınlanma zamanı %2$s." + +#: library/entry-meta.php:5 +msgid "Written by" +msgstr "Tarafından yazılmıştır" + +#: library/foundation.php:16 +msgid "«" +msgstr "«" + +#: library/foundation.php:17 +msgid "»" +msgstr "«" + +#: library/foundation.php:40 +#, php-format +msgid "" +"Please assign a menu to the primary menu location under %1$s or %2$s the " +"design." +msgstr "" +"Lütfen birincil menü konumu tasarımı altına %1$s ya da %2$s bir menü atayın" + +#: library/foundation.php:41 +#, php-format +msgid "Menus" +msgstr "Menü" + +#: library/foundation.php:44 +#, php-format +msgid "Customize" +msgstr "Özelleştir" + +#: library/widget-areas.php:6 +msgid "Sidebar widgets" +msgstr "Kenar çubuğu widgetları" + +#: library/widget-areas.php:7 +msgid "Drag widgets to this sidebar container." +msgstr "Bu kenar çubuğu kapsayıcısına widgetları sürükleyin." + +#: library/widget-areas.php:16 +msgid "Footer widgets" +msgstr "Alt bilgi widgetları" + +#: library/widget-areas.php:17 +msgid "Drag widgets to this footer container" +msgstr "Bu alt bilgi kapsayıcısına widgetları sürükleyin" + +#: node_modules/grunt-pot/test/fixtures/some-file.php:3 +msgid "I'm a translatable string." +msgstr "Ben çevirilebilir bir metinim." + +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:4 +msgid "Me too" +msgstr "Bende" + +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:7 +#, php-format +msgid "I have %d apple" +msgid_plural "I have %d apples" +msgstr[0] "%d elmam var" + +#. / TRANSLATORS: This should be translated as a shorthand for YEAR-MONTH-DAY using 4, 2 and 2 digits. +#: node_modules/grunt-pot/test/fixtures/some-other-file.php:16 +msgid "yyyy-mm-dd" +msgstr "yıl-ay-gün" + +#: search.php:7 +msgid "Search Results for" +msgstr "Arama Sonuçları" + +#: searchform.php:6 searchform.php:10 +msgid "Search" +msgstr "Arama" diff --git a/web/app/themes/oe-brixton/library/cleanup.php b/web/app/themes/oe-brixton/library/cleanup.php old mode 100755 new mode 100644 index d7ec4c9..b7f01ee --- a/web/app/themes/oe-brixton/library/cleanup.php +++ b/web/app/themes/oe-brixton/library/cleanup.php @@ -21,8 +21,8 @@ function foundationpress_start_cleanup() { // Clean up comment styles in the head. add_action( 'wp_head', 'foundationpress_remove_recent_comments_style', 1 ); - // Clean up gallery output in wp. - add_filter( 'foundationpress_gallery_style', 'foundationpress_gallery_style' ); + // Remove inline width attribute from figure tag + add_filter( 'img_caption_shortcode', 'foundationpress_remove_figure_inline_style', 10, 3 ); } add_action( 'after_setup_theme','foundationpress_start_cleanup' ); @@ -100,151 +100,34 @@ function foundationpress_remove_recent_comments_style() { } endif; -// Remove injected CSS from gallery. -if ( ! function_exists( 'foundationpress_gallery_style' ) ) : -function foundationpress_gallery_style( $css ) { - return preg_replace( "!!s", '', $css ); -} -endif; - +// Remove inline width attribute from figure tag causing images wider than 100% of its conainer +if ( ! function_exists( 'foundationpress_remove_figure_inline_style' ) ) : +function foundationpress_remove_figure_inline_style( $output, $attr, $content ) { + $atts = shortcode_atts( array( + 'id' => '', + 'align' => 'alignnone', + 'width' => '', + 'caption' => '', + 'class' => '', + ), $attr, 'caption' ); + + $atts['width'] = (int) $atts['width']; + if ( $atts['width'] < 1 || empty( $atts['caption'] ) ) { + return $content; + } -/* - Rebuild the image tag with only the stuff we want - Credit: Brian Gottie - Source: http://blog.skunkbad.com/wordpress/another-look-at-rebuilding-image-tags -*/ - -if ( ! class_exists( 'Foundationpress_img_rebuilder' ) ) : - class Foundationpress_img_rebuilder { - - public $caption_class = 'wp-caption'; - public $caption_p_class = 'wp-caption-text'; - public $caption_id_attr = false; - public $caption_padding = 8; // Double of the padding on $caption_class - - public function __construct() { - add_filter( 'img_caption_shortcode', array( $this, 'img_caption_shortcode' ), 1, 3 ); - add_filter( 'get_avatar', array( $this, 'recreate_img_tag' ) ); - add_filter( 'the_content', array( $this, 'the_content') ); - } - - public function recreate_img_tag( $tag ) { - // Supress SimpleXML errors - libxml_use_internal_errors( true ); - - try { - $x = new SimpleXMLElement( $tag ); - - // We only want to rebuild img tags - if ( $x->getName() == 'img' ) { - - // Get the attributes I'll use in the new tag - $alt = (string) $x->attributes()->alt; - $src = (string) $x->attributes()->src; - $classes = (string) $x->attributes()->class; - $class_segs = explode(' ', $classes); - - // All images have a source - $img = ''; - } else { - $img .= ' />'; - } - - return $img; - } - } - - catch ( Exception $e ) { - if ( defined('WP_DEBUG') && WP_DEBUG ) { - if ( defined('WP_DEBUG_DISPLAY') && WP_DEBUG_DISPLAY ) { - echo 'Caught exception: ', $e->getMessage(), "\n"; - } - } - } - - // Tag not an img, so just return it untouched - return $tag; - } - - /** - * Search post content for images to rebuild - */ - public function the_content( $html ) { - return preg_replace_callback( - '|(]*>)|', - array( $this, 'the_content_callback' ), - $html - ); - } - - /** - * Rebuild an image in post content - */ - private function the_content_callback( $match ) { - return $this->recreate_img_tag( $match[0] ); - } - - /** - * Customize caption shortcode - */ - public function img_caption_shortcode( $output, $attr, $content ) { - // Not for feed - if ( is_feed() ) { - return $output; - } - - // Set up shortcode atts - $attr = shortcode_atts( array( - 'align' => 'alignnone', - 'caption' => '', - 'width' => '', - ), $attr ); - - // Add id and classes to caption - $attributes = ''; - $caption_id_attr = ''; - - if ( $caption_id_attr && ! empty( $attr['id'] ) ) { - $attributes .= ' id="' . esc_attr( $attr['id'] ) . '"'; - } - - $attributes .= ' class="' . $this->caption_class . ' ' . esc_attr( $attr['align'] ) . '"'; - - // Set the max-width of the caption - $attributes .= ' style="max-width:' . ( $attr['width'] + $this->caption_padding ) . 'px;"'; - - // Create caption HTML - $output = ' - ' . - do_shortcode( $content ) . - '

    ' . $attr['caption'] . '

    ' . - '
    - '; - - return $output; - } + if ( ! empty( $atts['id'] ) ) { + $atts['id'] = 'id="' . esc_attr( $atts['id'] ) . '" '; } - $foundationpress_img_rebuilder = new Foundationpress_img_rebuilder; + $class = trim( 'wp-caption ' . $atts['align'] . ' ' . $atts['class'] ); + if ( current_theme_supports( 'html5', 'caption' ) ) { + return '
    ' + . do_shortcode( $content ) . '
    ' . $atts['caption'] . '
    '; + } + +} endif; // Add WooCommerce support for wrappers per http://docs.woothemes.com/document/third-party-custom-theme-compatibility/ diff --git a/web/app/themes/oe-brixton/library/custom-nav.php b/web/app/themes/oe-brixton/library/custom-nav.php old mode 100755 new mode 100644 index 1df5c6f..f8aa13e --- a/web/app/themes/oe-brixton/library/custom-nav.php +++ b/web/app/themes/oe-brixton/library/custom-nav.php @@ -56,9 +56,9 @@ function wpt_register_theme_customizer( $wp_customize ) { // Add class to body to help w/ CSS add_filter( 'body_class', 'mobile_nav_class' ); function mobile_nav_class( $classes ) { - if ( ! get_theme_mod( 'wpt_mobile_menu_layout' ) || get_theme_mod( 'wpt_mobile_menu_layout' ) == 'offcanvas' ) : + if ( ! get_theme_mod( 'wpt_mobile_menu_layout' ) || get_theme_mod( 'wpt_mobile_menu_layout' ) === 'offcanvas' ) : $classes[] = 'offcanvas'; - elseif ( get_theme_mod( 'wpt_mobile_menu_layout' ) == 'topbar' ) : + elseif ( get_theme_mod( 'wpt_mobile_menu_layout' ) === 'topbar' ) : $classes[] = 'topbar'; endif; return $classes; diff --git a/web/app/themes/oe-brixton/library/enqueue-scripts.php b/web/app/themes/oe-brixton/library/enqueue-scripts.php old mode 100755 new mode 100644 index 522c40a..6593897 --- a/web/app/themes/oe-brixton/library/enqueue-scripts.php +++ b/web/app/themes/oe-brixton/library/enqueue-scripts.php @@ -13,7 +13,7 @@ function foundationpress_scripts() { // Enqueue the main Stylesheet. - wp_enqueue_style( 'main-stylesheet', get_stylesheet_directory_uri() . '/assets/stylesheets/foundation.css', array(), '2.3.0', 'all' ); + wp_enqueue_style( 'main-stylesheet', get_template_directory_uri() . '/assets/stylesheets/foundation.css', array(), '2.9.0', 'all' ); // Deregister the jquery version bundled with WordPress. wp_deregister_script( 'jquery' ); @@ -23,7 +23,7 @@ function foundationpress_scripts() { // If you'd like to cherry-pick the foundation components you need in your project, head over to gulpfile.js and see lines 35-54. // It's a good idea to do this, performance-wise. No need to load everything if you're just going to use the grid anyway, you know :) - wp_enqueue_script( 'foundation', get_template_directory_uri() . '/assets/javascript/foundation.js', array('jquery'), '2.3.0', true ); + wp_enqueue_script( 'foundation', get_template_directory_uri() . '/assets/javascript/foundation.js', array('jquery'), '2.9.0', true ); // Add the comment-reply library on pages where it is necessary if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { diff --git a/web/app/themes/oe-brixton/library/entry-meta.php b/web/app/themes/oe-brixton/library/entry-meta.php old mode 100755 new mode 100644 index e84b3eb..4f451f7 --- a/web/app/themes/oe-brixton/library/entry-meta.php +++ b/web/app/themes/oe-brixton/library/entry-meta.php @@ -8,7 +8,7 @@ if ( ! function_exists( 'foundationpress_entry_meta' ) ) : function foundationpress_entry_meta() { - echo ''; - echo ''; + echo ''; + echo ''; } endif; diff --git a/web/app/themes/oe-brixton/library/foundation.php b/web/app/themes/oe-brixton/library/foundation.php old mode 100755 new mode 100644 index 4bc17c7..015ffbf --- a/web/app/themes/oe-brixton/library/foundation.php +++ b/web/app/themes/oe-brixton/library/foundation.php @@ -65,7 +65,7 @@ function foundationpress_menu_fallback() { // Add Foundation 'active' class for the current menu item. if ( ! function_exists( 'foundationpress_active_nav_class' ) ) : function foundationpress_active_nav_class( $classes, $item ) { - if ( 1 == $item->current || true == $item->current_item_ancestor ) { + if ( 1 === $item->current || true === $item->current_item_ancestor ) { $classes[] = 'active'; } return $classes; @@ -91,10 +91,12 @@ function foundationpress_active_list_pages_class( $input ) { endif; if ( ! class_exists( 'Foundationpress_Comments' ) ) : -class Foundationpress_Comments extends Walker_Comment{ +class Foundationpress_Comments extends Walker_Comment { // Init classwide variables. var $tree_type = 'comment'; + + // Comment ID var $db_fields = array( 'parent' => 'comment_parent', 'id' => 'comment_ID' ); /** CONSTRUCTOR @@ -143,7 +145,7 @@ function start_el( &$output, $comment, $depth = 0, $args = array(), $id = 0 ) {
    %s', 'foundationpress' ), get_comment_author_link() ) ?> - +
    diff --git a/web/app/themes/oe-brixton/library/menu-walkers.php b/web/app/themes/oe-brixton/library/menu-walkers.php old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/library/navigation.php b/web/app/themes/oe-brixton/library/navigation.php old mode 100755 new mode 100644 index baeb7a4..5ae0f71 --- a/web/app/themes/oe-brixton/library/navigation.php +++ b/web/app/themes/oe-brixton/library/navigation.php @@ -101,7 +101,7 @@ function foundationpress_breadcrumb( $showhome = true, $separatorclass = false ) echo '
  • ' . $separator . '
  • '; } - if ( is_single() ) { + if ( is_single() && ! is_attachment() ) { // Single post (Only display the first category) echo '
  • ' . $category[0]->cat_name . '
  • '; @@ -110,12 +110,12 @@ function foundationpress_breadcrumb( $showhome = true, $separatorclass = false ) } echo '
  • ' . get_the_title() . '
  • '; - } else if ( is_category() ) { + } elseif ( is_category() ) { // Category page echo '
  • ' . $category[0]->cat_name . '
  • '; - } else if ( is_page() ) { + } elseif ( is_page() ) { // Standard page if ( $post->post_parent ) { @@ -147,7 +147,7 @@ function foundationpress_breadcrumb( $showhome = true, $separatorclass = false ) echo '
  • ' . get_the_title() . '
  • '; } - } else if ( is_tag() ) { + } elseif ( is_tag() ) { // Tag page // Get tag information @@ -177,7 +177,7 @@ function foundationpress_breadcrumb( $showhome = true, $separatorclass = false ) // Day display echo '
  • ' . get_the_time('jS') . ' ' . get_the_time('M') . ' Archives
  • '; - } else if ( is_month() ) { + } elseif ( is_month() ) { // Month Archive // Year link @@ -189,12 +189,12 @@ function foundationpress_breadcrumb( $showhome = true, $separatorclass = false ) // Month display echo '
  • ' . get_the_time('M') . ' Archives
  • '; - } else if ( is_year() ) { + } elseif ( is_year() ) { // Display year archive echo '
  • ' . get_the_time('Y') . ' Archives
  • '; - } else if ( is_author() ) { + } elseif ( is_author() ) { // Auhor archive // Get the author information @@ -204,12 +204,12 @@ function foundationpress_breadcrumb( $showhome = true, $separatorclass = false ) // Display author name echo '
  • Author: ' . $userdata->display_name . '
  • '; - } else if ( get_query_var('paged') ) { + } elseif ( get_query_var('paged') ) { // Paginated archives - echo '
  • '.__('Page') . ' ' . get_query_var('paged') . '
  • '; + echo '
  • ' . __('Page', 'foundationpress' ) . ' ' . get_query_var('paged') . '
  • '; - } else if ( is_search() ) { + } elseif ( is_search() ) { // Search results page echo '
  • Search results for: ' . get_search_query() . '
  • '; @@ -218,12 +218,12 @@ function foundationpress_breadcrumb( $showhome = true, $separatorclass = false ) // 404 page echo '
  • Error 404
  • '; - } + } // End if(). } else { if ( $showhome ) { echo '
  • ' . $home_title . '
  • '; } - } + } // End if(). echo ''; } -} +} // End if(). diff --git a/web/app/themes/oe-brixton/library/oe-brixton.php b/web/app/themes/oe-brixton/library/oe-ben.php old mode 100755 new mode 100644 similarity index 100% rename from web/app/themes/oe-brixton/library/oe-brixton.php rename to web/app/themes/oe-brixton/library/oe-ben.php diff --git a/web/app/themes/oe-brixton/library/protocol-relative-theme-assets.php b/web/app/themes/oe-brixton/library/protocol-relative-theme-assets.php old mode 100755 new mode 100644 index f8426c5..daef1e8 --- a/web/app/themes/oe-brixton/library/protocol-relative-theme-assets.php +++ b/web/app/themes/oe-brixton/library/protocol-relative-theme-assets.php @@ -6,8 +6,8 @@ * @since FoundationPress 1.1.0 */ -if ( ! class_exists( 'Foundationpress_protocol_relative_theme_assets' ) ) : - class Foundationpress_protocol_relative_theme_assets { +if ( ! class_exists( 'Foundationpress_Protocol_Relative_Theme_Assets' ) ) : + class Foundationpress_Protocol_Relative_Theme_Assets { /** * Plugin URI: https://github.com/ryanjbonnell/Protocol-Relative-Theme-Assets * Description: Transforms enqueued CSS and JavaScript theme URLs to use protocol-relative paths. @@ -86,5 +86,5 @@ public function stylesheet_directory_uri( $stylesheet_dir_uri, $stylesheet, $the } } - $foundationpress_protocol_relative_theme_assets = new Foundationpress_protocol_relative_theme_assets; + $foundationpress_protocol_relative_theme_assets = new Foundationpress_Protocol_Relative_Theme_Assets; endif; diff --git a/web/app/themes/oe-brixton/library/responsive-images.php b/web/app/themes/oe-brixton/library/responsive-images.php new file mode 100644 index 0000000..cb87a59 --- /dev/null +++ b/web/app/themes/oe-brixton/library/responsive-images.php @@ -0,0 +1,62 @@ + __( 'FP Small' ), + 'fp-medium' => __( 'FP Medium' ), + 'fp-large' => __( 'FP Large' ), + 'fp-xlarge' => __( 'FP XLarge' ), + ) ); +} +add_filter( 'image_size_names_choose', 'foundationpress_custom_sizes' ); + +// Add custom image sizes attribute to enhance responsive image functionality for content images +function foundationpress_adjust_image_sizes_attr( $sizes, $size ) { + + // Actual width of image + $width = $size[0]; + + // Full width page template + if ( is_page_template( 'page-templates/page-full-width.php' ) ) { + 1200 < $width && $sizes = '(max-width: 1199px) 98vw, 1200px'; + 1200 > $width && $sizes = '(max-width: 1199px) 98vw, ' . $width . 'px'; + + // Default 3/4 column post/page layout + } else { + 770 < $width && $sizes = '(max-width: 639px) 98vw, (max-width: 1199px) 64vw, 770px'; + 770 > $width && $sizes = '(max-width: 639px) 98vw, (max-width: 1199px) 64vw, ' . $width . 'px'; + } + + return $sizes; +} +add_filter( 'wp_calculate_image_sizes', 'foundationpress_adjust_image_sizes_attr', 10 , 2 ); + +// Remove inline width and height attributes for post thumbnails +function remove_thumbnail_dimensions( $html, $post_id, $post_image_id ) { + $html = preg_replace( '/(width|height)=\"\d*\"\s/', '', $html ); + return $html; +} +add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10, 3 ); diff --git a/web/app/themes/oe-brixton/library/site-origin-extension.php b/web/app/themes/oe-brixton/library/site-origin-extension.php new file mode 100644 index 0000000..1103490 --- /dev/null +++ b/web/app/themes/oe-brixton/library/site-origin-extension.php @@ -0,0 +1,29 @@ +logos_section( $wp_manager ); } public function logos_section( $wp_manager ) { - $wp_manager->add_section( 'customiser_oebrixton_section', array( - 'title' => 'OE Brixton Options', + $wp_manager->add_section( 'customiser_logos_section', array( + 'title' => 'Site Logos', 'priority' => 35, ) ); @@ -41,7 +41,7 @@ public function logos_section( $wp_manager ) $wp_manager->add_control( new WP_Customize_Image_Control( $wp_manager, 'logo_big_setting', array( 'label' => 'Main logo for Site', - 'section' => 'customiser_oebrixton_section', + 'section' => 'customiser_logos_section', 'settings' => 'logo_big_setting', 'priority' => 8 ) ) ); @@ -53,7 +53,7 @@ public function logos_section( $wp_manager ) $wp_manager->add_control( new WP_Customize_Image_Control( $wp_manager, 'logo_small_setting', array( 'label' => 'Small logo for Site', - 'section' => 'customiser_oebrixton_section', + 'section' => 'customiser_logos_section', 'settings' => 'logo_small_setting', 'priority' => 8 ) ) ); @@ -65,7 +65,7 @@ public function logos_section( $wp_manager ) $wp_manager->add_control( 'mimify_setting', array( 'label' => 'Mimify HTML, js and css', - 'section' => 'customiser_oebrixton_section', + 'section' => 'customiser_logos_section', 'type' => 'checkbox', 'priority' => 1 ) ); diff --git a/web/app/themes/oe-brixton/library/to-delete-theme_customizer-sample.php b/web/app/themes/oe-brixton/library/to-delete-theme_customizer-sample.php deleted file mode 100755 index 8400346..0000000 --- a/web/app/themes/oe-brixton/library/to-delete-theme_customizer-sample.php +++ /dev/null @@ -1,138 +0,0 @@ -demo_section( $wp_manager ); - } - - public function demo_section( $wp_manager ) - { - $wp_manager->add_section( 'customiser_demo_section', array( - 'title' => 'Default Demo Controls', - 'priority' => 35, - ) ); - - // Textbox control - $wp_manager->add_setting( 'textbox_setting', array( - 'default' => 'default_value', - ) ); - - $wp_manager->add_control( 'textbox_setting', array( - 'label' => 'Text Setting', - 'section' => 'customiser_demo_section', - 'type' => 'text', - 'priority' => 1 - ) ); - - // Checkbox control - $wp_manager->add_setting( 'checkbox_setting', array( - 'default' => '1', - ) ); - - $wp_manager->add_control( 'checkbox_setting', array( - 'label' => 'Checkbox Setting', - 'section' => 'customiser_demo_section', - 'type' => 'checkbox', - 'priority' => 2 - ) ); - - // Radio control - $wp_manager->add_setting( 'radio_setting', array( - 'default' => '1', - ) ); - - $wp_manager->add_control( 'radio_setting', array( - 'label' => 'Radio Setting', - 'section' => 'customiser_demo_section', - 'type' => 'radio', - 'choices' => array("1", "2", "3", "4", "5"), - 'priority' => 3 - ) ); - - // Select control - $wp_manager->add_setting( 'select_setting', array( - 'default' => '1', - ) ); - - $wp_manager->add_control( 'select_setting', array( - 'label' => 'Select Dropdown Setting', - 'section' => 'customiser_demo_section', - 'type' => 'select', - 'choices' => array("1", "2", "3", "4", "5"), - 'priority' => 4 - ) ); - - // Dropdown pages control - $wp_manager->add_setting( 'dropdown_pages_setting', array( - 'default' => '1', - ) ); - - $wp_manager->add_control( 'dropdown_pages_setting', array( - 'label' => 'Dropdown Pages Setting', - 'section' => 'customiser_demo_section', - 'type' => 'dropdown-pages', - 'priority' => 5 - ) ); - - // Color control - $wp_manager->add_setting( 'color_setting', array( - 'default' => '#000000', - ) ); - - $wp_manager->add_control( new WP_Customize_Color_Control( $wp_manager, 'color_setting', array( - 'label' => 'Color Setting', - 'section' => 'customiser_demo_section', - 'settings' => 'color_setting', - 'priority' => 6 - ) ) ); - - // WP_Customize_Upload_Control - $wp_manager->add_setting( 'upload_setting', array( - 'default' => '', - ) ); - - $wp_manager->add_control( new WP_Customize_Upload_Control( $wp_manager, 'upload_setting', array( - 'label' => 'Upload Setting', - 'section' => 'customiser_demo_section', - 'settings' => 'upload_setting', - 'priority' => 7 - ) ) ); - - // WP_Customize_Image_Control - $wp_manager->add_setting( 'image_setting', array( - 'default' => '', - ) ); - - $wp_manager->add_control( new WP_Customize_Image_Control( $wp_manager, 'image_setting', array( - 'label' => 'Image Setting', - 'section' => 'customiser_demo_section', - 'settings' => 'image_setting', - 'priority' => 8 - ) ) ); - } - -} - -?> diff --git a/web/app/themes/oe-brixton/library/widget-areas.php b/web/app/themes/oe-brixton/library/widget-areas.php old mode 100755 new mode 100644 index eba76b9..23cde85 --- a/web/app/themes/oe-brixton/library/widget-areas.php +++ b/web/app/themes/oe-brixton/library/widget-areas.php @@ -12,8 +12,8 @@ function foundationpress_sidebar_widgets() { 'id' => 'sidebar-widgets', 'name' => __( 'Sidebar widgets', 'foundationpress' ), 'description' => __( 'Drag widgets to this sidebar container.', 'foundationpress' ), - 'before_widget' => '
    ', - 'after_widget' => '
    ', + 'before_widget' => '
    ', + 'after_widget' => '
    ', 'before_title' => '
    ', 'after_title' => '
    ', )); diff --git a/web/app/themes/oe-brixton/package.json b/web/app/themes/oe-brixton/package.json old mode 100755 new mode 100644 index 461959f..37c52c9 --- a/web/app/themes/oe-brixton/package.json +++ b/web/app/themes/oe-brixton/package.json @@ -1,7 +1,7 @@ { "name": "foundationpress", "title": "FoundationPress", - "version": "2.5.0", + "version": "2.9.0", "description": "FoundationPress is a WordPress starter theme based on Foundation 6 by Zurb", "keywords": [ "FoundationPress", @@ -24,17 +24,17 @@ "devDependencies": { "autoprefixer": "^6.1.0", "babel-core": "^6.5.2", - "babel-preset-es2015": "^6.5.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.3.13", "babel-plugin-transform-es2015-arrow-functions": "^6.3.13", "babel-plugin-transform-es2015-block-scoped-functions": "^6.3.13", "babel-plugin-transform-es2015-block-scoping": "^6.4.0", "babel-plugin-transform-es2015-classes": "^6.3.15", "babel-plugin-transform-es2015-destructuring": "^6.3.15", + "babel-plugin-transform-es2015-modules-commonjs": "^6.3.13", "babel-plugin-transform-es2015-parameters": "^6.3.26", "babel-plugin-transform-es2015-shorthand-properties": "^6.5.0", "babel-plugin-transform-es2015-spread": "^6.4.0", "babel-plugin-transform-es2015-template-literals": "^6.3.13", + "babel-preset-es2015": "^6.5.0", "babel-register": "^6.5.2", "bower": "~1.6.4", "browser-sync": "^2.10.0", @@ -44,12 +44,12 @@ "gulp": "^3.9.0", "gulp-autoprefixer": "^3.1.0", "gulp-babel": "^6.1.2", + "gulp-clean-css": "^2.0.7", "gulp-concat": "^2.6.0", "gulp-flatten": "^0.2.0", "gulp-if": "^2.0.0", "gulp-jshint": "^2.0.0", "gulp-load-plugins": "^1.1.0", - "gulp-minify-css": "^1.2.2", "gulp-notify": "^2.2.0", "gulp-phpcbf": "latest", "gulp-phpcs": "^1.0.0", diff --git a/web/app/themes/oe-brixton/page-templates/angular.php b/web/app/themes/oe-brixton/page-templates/angular.php deleted file mode 100755 index 60f9097..0000000 --- a/web/app/themes/oe-brixton/page-templates/angular.php +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - -
    -
    -
    id="post-"> - -
    - -
    -
    - '' ) ); ?> -

    -
    - - - -
    -
    -
    - - - - -
    -
    - have_posts()) : $custom_query->the_post(); ?> - - - -
    - - -
    - - - + +
    @@ -32,4 +41,8 @@ + + + +

    Accordion

      -
    • +
    • Accordion 1 @@ -120,17 +120,17 @@ Panel 1. Lorem ipsum dolor
    • -
    • +
    • - Accordion 1 + Accordion 2
      Panel 2. Lorem ipsum dolor
    • -
    • +
    • - Accordion 1 + Accordion 3
      Panel 3. Lorem ipsum dolor @@ -242,6 +242,79 @@

      + +

      Cards

      + +
      + +
      + +
      +

      Dreams feel real

      +

      I'm going to improvise. Listen, there's something you should know about me... about inception.

      + Last updated 1 minute ago +
      +
      + +
      + +
      +

      Menus

      +

      Cards play nicely with menus too! Give them a try.

      + +
      +
      + +
      +
      +

      Featured

      +
      +
      +

      Your title here!

      +

      An idea is like a virus, resilient, highly contagious. The smallest seed of an idea can grow. It can grow to define or destroy you.

      +
      +
      + +
      + +
      +

      Buttons!

      +

      Who doesn't love a good button? Buttons work in all of their forms too.

      + I'm a button +
      +
      + +
      + +
      +

      And button groups...

      +

      Button groups also work great!

      +
      + One + Two + Three +
      +
      +
      + +
      +
      +

      Centered

      +
      + +
      +

      The utility classes like .text-center work great too.

      + Click me +
      +
      +
      +
      + +

      Close Button

      @@ -603,7 +676,7 @@

      Full screen modal

      - Intropsective Cage + Intropsective Cage @@ -845,6 +918,7 @@
    • Breadcrumbs
    • Button
    • Callout
    • +
    • Cards
    • Close button
    • Drilldown Menu
    • Dropdown Menu
    • diff --git a/web/app/themes/oe-brixton/page-templates/page-full-width.php b/web/app/themes/oe-brixton/page-templates/page-full-width.php old mode 100755 new mode 100644 index 1cbda99..fa149f7 --- a/web/app/themes/oe-brixton/page-templates/page-full-width.php +++ b/web/app/themes/oe-brixton/page-templates/page-full-width.php @@ -4,30 +4,32 @@ */ get_header(); ?> - - -
      -
      - -
      id="post-"> - -
      - -
      -
      - '' ) ); ?> -

      -
      - - - -
      + -
      +
      -
      + + +
      id="post-"> +
      + +
      + +
      + +
      +
      + '' ) ); ?> +

      +
      + + + +
      + + +/** + * The template for displaying pages + * + * This is the template that displays all pages by default. + * Please note that this is the WordPress construct of pages and that + * other "pages" on your WordPress site will use a different template. + * + * @package FoundationPress + * @since FoundationPress 1.0.0 + */ - - -
      -
      + get_header(); ?> -
      id="post-"> - -
      - -
      -
      - '' ) ); ?> -

      -
      - - - -
      + -
      +
      -
      - - + + +
      id="post-"> +
      +

      +
      + +
      + + ', '' ); ?> +
      +
      + '' ) ); ?> +

      +
      + + + +
      + + + - + + - + - + diff --git a/web/app/themes/oe-brixton/searchform.php b/web/app/themes/oe-brixton/searchform.php old mode 100755 new mode 100644 index 25f1c8f..b2c4ea6 --- a/web/app/themes/oe-brixton/searchform.php +++ b/web/app/themes/oe-brixton/searchform.php @@ -8,16 +8,14 @@ do_action( 'foundationpress_before_searchform' ); ?> -
      - -
      - -
      + +
      + -
      - +
      +
      -
      + - -ID ) ): ?> -ID ), 'single-post-thumbnail' ); ?> -
      - - - -
      -
      -

      -
      -
      - - - +
      id="post-"> +
      +

      + +
      - - + + ', '' ); ?>
      '' ) ); ?>

      + diff --git a/web/app/themes/oe-brixton/style.css b/web/app/themes/oe-brixton/style.css old mode 100755 new mode 100644 index c0e4ba8..b9527ae --- a/web/app/themes/oe-brixton/style.css +++ b/web/app/themes/oe-brixton/style.css @@ -9,7 +9,6 @@ Author URI: http://olefredrik.com/ License: MIT License License URI: http://www.opensource.org/licenses/mit-license.php -*/ /* ---------------------------------------------------------------------------- diff --git a/web/app/themes/oe-brixton/template-parts/check-if-sidebar-exist.php b/web/app/themes/oe-brixton/template-parts/check-if-sidebar-exist.php old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/template-parts/content-none.php b/web/app/themes/oe-brixton/template-parts/content-none.php old mode 100755 new mode 100644 diff --git a/web/app/themes/oe-brixton/template-parts/content.php b/web/app/themes/oe-brixton/template-parts/content.php old mode 100755 new mode 100644 index d5085a7..b629924 --- a/web/app/themes/oe-brixton/template-parts/content.php +++ b/web/app/themes/oe-brixton/template-parts/content.php @@ -13,16 +13,10 @@
      >

      - +
      -
      - - - -
      - - Keep reading this post"); ?> +