ably-ui 8.7.0.dev.6053fb4 → 8.7.0.dev.7072b07
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +6 -6
- data/README.md +7 -3
- data/lib/ably_ui/core/code/component.css +2 -0
- data/lib/ably_ui/core/code/component.js +739 -1
- data/lib/ably_ui/core/company_autocomplete/component.css +2 -0
- data/lib/ably_ui/core/company_autocomplete/component.js +1161 -1
- data/lib/ably_ui/core/connect_state_wrapper/component.js +22 -1
- data/lib/ably_ui/core/contact_footer/component.css +2 -0
- data/lib/ably_ui/core/contact_footer/component.js +211 -1
- data/lib/ably_ui/core/cookie_message/component.css +2 -0
- data/lib/ably_ui/core/cookie_message/component.js +82 -1
- data/lib/ably_ui/core/core.rb +8 -4
- data/lib/ably_ui/core/customer_logos/component.js +22 -1
- data/lib/ably_ui/core/dropdown_menu/component.js +22 -1
- data/lib/ably_ui/core/feature_footer/component.css +2 -0
- data/lib/ably_ui/core/feature_footer/component.js +211 -1
- data/lib/ably_ui/core/featured_link/component.css +2 -0
- data/lib/ably_ui/core/featured_link/component.js +82 -1
- data/lib/ably_ui/core/flash/component.css +2 -0
- data/lib/ably_ui/core/flash/component.js +82 -1
- data/lib/ably_ui/core/footer/component.css +3 -1
- data/lib/ably_ui/core/footer/component.js +82 -1
- data/lib/ably_ui/core/footer/footer.html.erb +18 -23
- data/lib/ably_ui/core/icon/component.js +22 -1
- data/lib/ably_ui/core/images/best-support-2023.svg +1 -0
- data/lib/ably_ui/core/images/fastest-implementation-2023.svg +1 -0
- data/lib/ably_ui/core/images/high-performer-2023.svg +1 -0
- data/lib/ably_ui/core/images/highest-user-adoption-2023.svg +1 -0
- data/lib/ably_ui/core/loader/component.js +22 -1
- data/lib/ably_ui/core/logo/component.js +22 -1
- data/lib/ably_ui/core/meganav/component.css +3 -3
- data/lib/ably_ui/core/meganav/component.js +992 -1
- data/lib/ably_ui/core/meganav/component.json +1 -1
- data/lib/ably_ui/core/meganav/meganav.rb +4 -4
- data/lib/ably_ui/core/meganav_blog_posts_list/component.js +1159 -1
- data/lib/ably_ui/core/meganav_content_company/component.js +22 -1
- data/lib/ably_ui/core/meganav_content_company/meganav_content_company.html.erb +9 -0
- data/lib/ably_ui/core/meganav_content_developers/component.js +22 -1
- data/lib/ably_ui/core/meganav_content_developers/meganav_content_developers.html.erb +18 -2
- data/lib/ably_ui/core/meganav_content_products/component.js +22 -0
- data/lib/ably_ui/core/{meganav_content_platform/meganav_content_platform.html.erb → meganav_content_products/meganav_content_products.html.erb} +15 -33
- data/lib/ably_ui/core/{meganav_content_platform/meganav_content_platform.rb → meganav_content_products/meganav_content_products.rb} +1 -1
- data/lib/ably_ui/core/meganav_content_use_cases/component.js +22 -1
- data/lib/ably_ui/core/meganav_content_use_cases/meganav_content_use_cases.html.erb +42 -38
- data/lib/ably_ui/core/meganav_control/component.js +241 -1
- data/lib/ably_ui/core/meganav_control_mobile_dropdown/component.js +180 -1
- data/lib/ably_ui/core/meganav_control_mobile_panel_close/component.js +142 -1
- data/lib/ably_ui/core/meganav_control_mobile_panel_open/component.js +170 -1
- data/lib/ably_ui/core/meganav_items_desktop/component.js +22 -1
- data/lib/ably_ui/core/meganav_items_desktop/meganav_items_desktop.rb +1 -1
- data/lib/ably_ui/core/meganav_items_mobile/component.js +22 -1
- data/lib/ably_ui/core/meganav_items_signed_in/component.js +22 -1
- data/lib/ably_ui/core/meganav_search/component.js +22 -1
- data/lib/ably_ui/core/meganav_search_autocomplete/component.js +295 -1
- data/lib/ably_ui/core/meganav_search_panel/component.js +22 -1
- data/lib/ably_ui/core/meganav_search_suggestions/component.js +258 -1
- data/lib/ably_ui/core/notice/component.css +2 -0
- data/lib/ably_ui/core/notice/component.js +872 -1
- data/lib/ably_ui/core/scripts.js +1465 -1
- data/lib/ably_ui/core/showcase/component.css +2 -0
- data/lib/ably_ui/core/showcase/component.js +343 -1
- data/lib/ably_ui/core/sign_out_link/component.js +22 -1
- data/lib/ably_ui/core/slider/component.css +2 -0
- data/lib/ably_ui/core/slider/component.js +255 -1
- data/lib/ably_ui/core/sprites.svg +93 -0
- data/lib/ably_ui/core/styles.css +3 -7
- data/lib/ably_ui/core/uptime/component.css +2 -0
- data/lib/ably_ui/core/uptime/component.js +82 -1
- data/lib/ably_ui/reset/scripts.js +1 -1
- data/lib/ably_ui/reset/styles.css +1 -11
- data/lib/ably_ui/version.rb +1 -1
- metadata +9 -5
- data/lib/ably_ui/core/meganav_content_platform/component.js +0 -1
@@ -1 +1,992 @@
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("addsearch-js-client"),require("lodash.throttle"),require("scroll-lock")):"function"==typeof define&&define.amd?define([,,],t):"object"==typeof exports?exports.AblyUi=t(require("addsearch-js-client"),require("lodash.throttle"),require("scroll-lock")):(e.AblyUi=e.AblyUi||{},e.AblyUi.Core=e.AblyUi.Core||{},e.AblyUi.Core.Meganav=t(e[void 0],e[void 0],e[void 0]))}(this,(function(e,t,n){return(()=>{"use strict";var r={2498:(e,t,n)=>{n.d(t,{default:()=>o});var r=n(9581);function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}const o=function(){var e=Array.from((0,r.n)("meganav-control")),t=Array.from((0,r.n)("meganav-panel")),n=getComputedStyle(document.documentElement).getPropertyValue("--bp-md"),o=function(e){return"search"===e.dataset.control},i=function(t,r,o){if(window.matchMedia("(hover: hover) and (pointer: fine) and (min-width: ".concat(n,")")).matches&&!e.some((function(e){return e===document.activeElement}))&&!function(){var e=document.querySelector('[data-id="meganav-panel"]#panel-search');if(e)return!e.classList.contains("invisible")}()){var i,c=["invisible","visible"];(i=r.classList).replace.apply(i,function(e){if(Array.isArray(e))return a(e)}(l=o?c:c.reverse())||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(l)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}(l)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),t.setAttribute("aria-expanded",o),t.dataset.hover=o}var l};return e.map((function(n){var a,c,l=n.parentNode,u=document.querySelector("#".concat(n.getAttribute("aria-controls"))),s=function(n,a){return function(){e.forEach((function(e){return e!==n&&e.setAttribute("aria-expanded",!1)})),t.forEach((function(e){return e!==a&&e.classList.replace("visible","invisible")}));var i=n.getAttribute("aria-expanded"),c="true"===n.dataset.hover;if("true"!==i||c?(n.setAttribute("aria-expanded",!0),a.classList.replace("invisible","visible")):(n.setAttribute("aria-expanded",!1),a.classList.replace("visible","invisible")),c&&(n.dataset.hover=!1),o(n)){var l=(0,r.A)("meganav-search-input",a);if(!l)return;l.focus()}else n.focus()}}(n,u);return n.addEventListener("click",s),o(n)||(a=function(e,t){return function(){return i(e,t,!0)}}(n,u),c=function(e,t){return function(){return i(e,t,!1)}}(n,u),l.addEventListener("mouseenter",a),l.addEventListener("mouseleave",c)),[{teardown:function(){a&&c&&(l.removeEventListener("mouseenter",a),l.removeEventListener("mouseleave",c)),n.removeEventListener("click",s)},clear:function(){n.setAttribute("aria-expanded",!1),u.classList.replace("visible","invisible")}}]})).flat()}},1792:(e,t,n)=>{n.d(t,{default:()=>i});var r=n(6833),a=n.n(r),o=n(9581);const i=function(e){var t=e.clearPanels,n=(0,o.A)("meganav-control-mobile-dropdown"),r=(0,o.A)("meganav-mobile-dropdown"),i=(0,o.A)("meganav-control-mobile-dropdown-menu"),c=(0,o.A)("meganav-control-mobile-dropdown-close"),l=function(){"false"===n.getAttribute("aria-expanded")?(r.classList.replace("invisible","visible"),n.setAttribute("aria-expanded",!0),a().disablePageScroll()):(r.classList.replace("visible","invisible"),n.setAttribute("aria-expanded",!1),a().enablePageScroll(),t()),i.classList.toggle("hidden"),c.classList.toggle("hidden")};return n.addEventListener("click",l),{teardown:function(){n.removeEventListener("click",l),a().enablePageScroll()},clear:function(){r.classList.replace("visible","invisible"),n.setAttribute("aria-expanded",!1),i.classList.remove("hidden"),c.classList.add("hidden"),a().enablePageScroll()}}}},7359:(e,t,n)=>{n.d(t,{default:()=>a});var r=n(9581);const a=function(){var e=Array.from((0,r.n)("meganav-control-mobile-panel-close")),t=Array.from((0,r.n)("meganav-control-mobile-panel-open"));return e.map((function(e){var n=t.find((function(t){return t.getAttribute("aria-controls")===e.getAttribute("aria-controls")})),r=document.querySelector("#".concat(e.getAttribute("aria-controls"))),a=function(e,t,n){return function(){e.setAttribute("aria-expanded",!1),t.setAttribute("aria-expanded",!1),n.classList.replace("block","hidden"),n.style.height=null}}(e,n,r);return e.addEventListener("click",a),{teardown:function(){return e.removeEventListener("click",a)},clear:function(){return e.setAttribute("aria-expanded",!1)}}}))}},9552:(e,t,n)=>{n.d(t,{default:()=>a});var r=n(9581);const a=function(){var e,t=Array.from((0,r.n)("meganav-control-mobile-panel-close")),n=Array.from((0,r.n)("meganav-control-mobile-panel-open")),a=(0,r.A)("meganav-mobile-dropdown"),o=(e=getComputedStyle(document.documentElement).getPropertyValue("--ui-meganav-height"),parseFloat(e)*parseFloat(getComputedStyle(document.documentElement).fontSize));return n.map((function(e){var n=t.find((function(t){return t.getAttribute("aria-controls")===e.getAttribute("aria-controls")})),r=document.querySelector("#".concat(e.getAttribute("aria-controls"))),i=function(e,t,n){return function(){e.setAttribute("aria-expanded",!0),t.setAttribute("aria-expanded",!0),n.classList.replace("hidden","block"),n.style.height="".concat(window.innerHeight-o>n.offsetHeight?n.offsetHeight:window.innerHeight-o,"px")}}(e,n,r);return e.addEventListener("click",i),{teardown:function(){return e.removeEventListener("click",i)},clear:function(){r.classList.replace("block","hidden"),a.classList.remove("ui-meganav-mobile-dropdown-expand"),e.setAttribute("aria-expanded",!1),r.style.height=null}}}))}},6364:(e,t,n)=>{n.d(t,{default:()=>i});var r=n(9581),a=n(5090),o=n.n(a);const i=function(e){if(!e)return console.log("No AddSearch API key provided, skipping search suggestions."),[];var t=new(o())(e);return[(0,r.A)("meganav-search-input"),(0,r.A)("meganav-mobile-search-input")].filter((function(e){return e})).map((function(e){var n=e.parentNode,a=(0,r.A)("meganav-search-autocomplete-container",n),o=(0,r.A)("meganav-search-autocomplete-list",n),i=(0,r.A)("meganav-search-input-clear",n);return function(e){var t=e.input,n=e.container,r=e.listContainer,a=e.clear,o=e.client;o.setAnalyticsTag("Meganav autocomplete"),o.setThrottleTime(400);var i,c=function(){n.classList.add("hidden"),r.innerHTML=""},l=function(e){(e||"").length>0&&a?a.classList.remove("invisible"):a&&a.classList.add("invisible")},u=function(e,t){return e.replace(t.toLowerCase(),'<span class="font-light">'.concat(t,"</span>"))},s=function(e){return window.location="/search?q=".concat(e)},d=function(e){var t=r.querySelector('[data-suggestion-index="'.concat(e+1,'"]'));t&&t.focus()},f=function(e){var t=e-1,n=r.querySelector('[data-suggestion-index="'.concat(t,'"]'));n&&n.focus()},v=function(e){var a=e.target.value;"ArrowDown"!==e.key?a?o.suggestions(a,function(e){return function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(l(e),Array.isArray(a.suggestions))if(0!==a.suggestions.length){var o=a.suggestions.map((function(n,r){var a=document.createElement("li"),o=document.createElement("button");return o.type="button",o.classList.add("ui-text-menu2","font-medium","p-8","w-full","text-left","rounded","hover:text-gui-hover","focus:outline-gui-focus","hover:bg-light-grey"),o.innerHTML=u(n.value,e),o.dataset.suggestionIndex=r,o.addEventListener("click",(function(){s(n.value)})),o.addEventListener("keydown",(function(e){var a=e.key;"ArrowDown"===a?d(r):"ArrowUp"===a&&r-1<0?t.focus():"ArrowUp"===a&&r-1>=0?f(r):"Enter"!==a&&"Space"!==a||s(n.value)})),a.appendChild(o),a}));r.innerHTML="",o.forEach((function(e){return r.appendChild(e)})),n.classList.remove("hidden")}else c();else c()}}(a)):c():d(0)};return a&&(i=function(){t.value="",a.classList.add("invisible"),c()},a.addEventListener("click",i)),t.addEventListener("keyup",v),{teardown:function(){t.removeEventListener("keyup",v),a&&a.removeEventListener("click",i)},clear:function(){t.value="",c()}}}({input:e,container:a,listContainer:o,client:t,clear:i})}))}},3169:(e,t,n)=>{n.d(t,{default:()=>d});var r=n(9581),a=function(e){return new DOMMatrix(window.getComputedStyle(e).transform).e},o=function(e,t){return e.style.transform="translateX(".concat(t,"px)")},i=function(e,t){return e>=t},c=function(e,t,n,r){return Math.abs(e-n+r)>t},l=function(e,t){var n;return(null===(n=e.changedTouches[0])||void 0===n?void 0:n.clientX)-t},u=function(e){return Math.abs(e)<5},s=function(e){return e.map((function(e){return e.getBoundingClientRect().width})).reduce((function(e,t){return e+t}),0)};const d=function(){var e,t=(0,r.A)("meganav-mobile-search-input"),n=(0,r.A)("meganav-mobile-search-suggestions"),d=n.querySelector("ul"),f=Array.from(d.querySelectorAll("li")),v=function(e,t){var n=a(d),r=Math.round(n+e);i(r,t)&&(r=0),o(d,r)},m=function(e,t){var n=d.getBoundingClientRect().width,r=a(d),i=s(f),l=Math.round(r+e);c(l,i,n,t)&&(l=-(i-n+t)),o(d,l)},p=function(t){var n;e=null===(n=t.touches[0])||void 0===n?void 0:n.clientX},g=function(t){var n=l(t,e);u(n)||(n>0?function(e,t){var n=a(d),r=Math.round(n+e);i(r,24)||o(d,r)}(n):function(e,t){var n=d.getBoundingClientRect().width,r=a(d),i=Math.round(r+e),l=s(f);c(i,l,n,96)||o(d,i)}(n))},b=function(t){var n=l(t,e);u(n)||(n>0?v(n,24):m(n,48))},h=function(){n.classList.add("max-h-96")},y=function(e){e.relatedTarget!==n.querySelectorAll("a")[0]&&n.classList.remove("max-h-96")};return t.addEventListener("focus",h),t.addEventListener("blur",y),n.addEventListener("touchstart",p),n.addEventListener("touchmove",g),n.addEventListener("touchend",b),n.addEventListener("wheel",(function(e){var t=4*e.deltaY;u(t)||(t>0?v(t,24):m(t,48))})),{teardown:function(){t.removeEventListener("focus",h),t.removeEventListener("blur",y),n.removeEventListener("touchstart",p),n.removeEventListener("touchmove",g),n.removeEventListener("touchend",b)},clear:function(){n.classList.remove("max-h-96"),d.style.transform="translateX(0px)"}}}},9581:(e,t,n)=>{n.d(t,{A:()=>r,n:()=>a});var r=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document;return t.querySelector("[data-id=".concat(e,"]"))},a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document;return t.querySelectorAll("[data-id=".concat(e,"]"))}},5090:t=>{t.exports=e},2040:e=>{e.exports=t},6833:e=>{e.exports=n}},a={};function o(e){var t=a[e];if(void 0!==t)return t.exports;var n=a[e]={exports:{}};return r[e](n,n.exports,o),n.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var i={};return(()=>{o.d(i,{default:()=>g});var e=o(2040),t=o.n(e),n=o(9581),r=o(2498),a=o(1792),c=o(9552),l=o(7359),u=o(6364),s=o(3169);function d(e){return function(e){if(Array.isArray(e))return f(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?f(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var v=function(e){return window.onblur=function(){return e()},{teardown:function(){return window.onblur=null}}},m=function(e){var t=(0,n.A)("meganav"),r=function(n){t.contains(n.target)||e()};return document.addEventListener("click",r),{teardown:function(){return document.removeEventListener("click",r)}}},p=function(e){if("transparentToWhite"!==e)return{teardown:function(){}};var r=(0,n.A)("meganav"),a=(0,n.n)("meganav-link"),o=(0,n.A)("meganav-control-mobile-dropdown-menu"),i=(0,n.A)("meganav-control-mobile-dropdown-close"),c=(0,n.n)("meganav-control"),l=(0,n.A)("meganav-sign-up-btn"),u=[].concat(d(Array.from(c)),d(Array.from(a)),[(0,n.A)("meganav-logo")]),s=function(e){var t,n,r,a,c=["ui-icon-white","ui-icon-cool-black"],l=[].concat(c).reverse();e?(null==o||(t=o.classList).replace.apply(t,c),null==i||(n=i.classList).replace.apply(n,c)):(null==o||(r=o.classList).replace.apply(r,d(l)),null==i||(a=i.classList).replace.apply(a,d(l)))},f=function(e){e?(null==l||l.classList.replace("bg-white","bg-cool-black"),null==l||l.classList.replace("text-cool-black","text-white")):(null==l||l.classList.replace("bg-cool-black","bg-white"),null==l||l.classList.replace("text-white","text-cool-black"))},v=t()((function(){window.scrollY>5?(r.classList.replace("bg-transparent","bg-white"),f(!0),s(!0),u.forEach((function(e){return e.classList.replace("text-white","text-cool-black")}))):(r.classList.replace("bg-white","bg-transparent"),f(!1),s(!1),u.forEach((function(e){return e.classList.replace("text-cool-black","text-white")})))}),150);return document.addEventListener("scroll",v),{teardown:function(){return document.removeEventListener("scroll",v)}}};function g(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{themeName:null},t=e.themeName,n=e.addSearchApiKey,o=(0,r.default)(),i=(0,c.default)(),f=(0,l.default)(),g=(0,u.default)(n),b=(0,s.default)(),h=(0,a.default)({clearPanels:function(){return[].concat(d(i),d(f)).forEach((function(e){return e.clear()}))}}),y=function(){return[h,b].concat(d(i),d(f),d(o),d(g)).forEach((function(e){return e.clear()}))},A=[p(t),m(y),v(y),h,b].concat(d(o),d(i),d(f),d(g)).map((function(e){return e.teardown}));return function(){return A.forEach((function(e){return e()}))}}})(),i.default})()}));
|
1
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
2
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
3
|
+
module.exports = factory(require("addsearch-js-client"), require("lodash.throttle"), require("scroll-lock"));
|
4
|
+
else if(typeof define === 'function' && define.amd)
|
5
|
+
define([, , ], factory);
|
6
|
+
else if(typeof exports === 'object')
|
7
|
+
exports["AblyUi"] = factory(require("addsearch-js-client"), require("lodash.throttle"), require("scroll-lock"));
|
8
|
+
else
|
9
|
+
root["AblyUi"] = root["AblyUi"] || {}, root["AblyUi"]["Core"] = root["AblyUi"]["Core"] || {}, root["AblyUi"]["Core"]["Meganav"] = factory(root[undefined], root[undefined], root[undefined]);
|
10
|
+
})(this, (__WEBPACK_EXTERNAL_MODULE_addsearch_js_client__, __WEBPACK_EXTERNAL_MODULE_lodash_throttle__, __WEBPACK_EXTERNAL_MODULE_scroll_lock__) => {
|
11
|
+
return /******/ (() => { // webpackBootstrap
|
12
|
+
/******/ "use strict";
|
13
|
+
/******/ var __webpack_modules__ = ({
|
14
|
+
|
15
|
+
/***/ "./src/core/MeganavControl/component.js":
|
16
|
+
/*!**********************************************!*\
|
17
|
+
!*** ./src/core/MeganavControl/component.js ***!
|
18
|
+
\**********************************************/
|
19
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
20
|
+
|
21
|
+
__webpack_require__.r(__webpack_exports__);
|
22
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
23
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
24
|
+
/* harmony export */ });
|
25
|
+
/* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
|
26
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
27
|
+
|
28
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
29
|
+
|
30
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
31
|
+
|
32
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
33
|
+
|
34
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
35
|
+
|
36
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
var MeganavControl = function MeganavControl() {
|
41
|
+
var controls = Array.from((0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryIdAll)("meganav-control"));
|
42
|
+
var panels = Array.from((0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryIdAll)("meganav-panel"));
|
43
|
+
var mdBreakpoint = getComputedStyle(document.documentElement).getPropertyValue("--bp-md");
|
44
|
+
|
45
|
+
var hoverEnabled = function hoverEnabled() {
|
46
|
+
return window.matchMedia("(hover: hover) and (pointer: fine) and (min-width: ".concat(mdBreakpoint, ")")).matches;
|
47
|
+
};
|
48
|
+
|
49
|
+
var isSearchControl = function isSearchControl(node) {
|
50
|
+
return node.dataset.control === "search";
|
51
|
+
};
|
52
|
+
|
53
|
+
var isSearchPanelOpen = function isSearchPanelOpen() {
|
54
|
+
var searchPanel = document.querySelector('[data-id="meganav-panel"]#panel-search');
|
55
|
+
if (!searchPanel) return;
|
56
|
+
return !searchPanel.classList.contains("invisible");
|
57
|
+
};
|
58
|
+
|
59
|
+
var controlsHaveFocus = function controlsHaveFocus() {
|
60
|
+
return controls.some(function (control) {
|
61
|
+
return control === document.activeElement;
|
62
|
+
});
|
63
|
+
};
|
64
|
+
|
65
|
+
var hover = function hover(control, panel, open) {
|
66
|
+
if (hoverEnabled() && !controlsHaveFocus() && !isSearchPanelOpen()) {
|
67
|
+
var _panel$classList;
|
68
|
+
|
69
|
+
var classes = ["invisible", "visible"];
|
70
|
+
|
71
|
+
(_panel$classList = panel.classList).replace.apply(_panel$classList, _toConsumableArray(open ? classes : classes.reverse()));
|
72
|
+
|
73
|
+
control.setAttribute("aria-expanded", open);
|
74
|
+
control.dataset.hover = open;
|
75
|
+
}
|
76
|
+
};
|
77
|
+
|
78
|
+
var mouseenterHandler = function mouseenterHandler(control, panel) {
|
79
|
+
return function () {
|
80
|
+
return hover(control, panel, true);
|
81
|
+
};
|
82
|
+
};
|
83
|
+
|
84
|
+
var mouseleaveHandler = function mouseleaveHandler(control, panel) {
|
85
|
+
return function () {
|
86
|
+
return hover(control, panel, false);
|
87
|
+
};
|
88
|
+
};
|
89
|
+
|
90
|
+
var clickHandler = function clickHandler(control, panel) {
|
91
|
+
return function () {
|
92
|
+
controls.forEach(function (node) {
|
93
|
+
return node !== control && node.setAttribute("aria-expanded", false);
|
94
|
+
});
|
95
|
+
panels.forEach(function (node) {
|
96
|
+
return node !== panel && node.classList.replace("visible", "invisible");
|
97
|
+
});
|
98
|
+
var ariaExpanded = control.getAttribute("aria-expanded"); // Prevent closing of the panel if it was already opened by hovering
|
99
|
+
|
100
|
+
var openedByHover = control.dataset.hover === "true";
|
101
|
+
|
102
|
+
if (ariaExpanded === "true" && !openedByHover) {
|
103
|
+
control.setAttribute("aria-expanded", false);
|
104
|
+
panel.classList.replace("visible", "invisible");
|
105
|
+
} else {
|
106
|
+
control.setAttribute("aria-expanded", true);
|
107
|
+
panel.classList.replace("invisible", "visible");
|
108
|
+
}
|
109
|
+
|
110
|
+
if (openedByHover) {
|
111
|
+
control.dataset.hover = false;
|
112
|
+
}
|
113
|
+
|
114
|
+
if (isSearchControl(control)) {
|
115
|
+
var searchInput = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-search-input", panel);
|
116
|
+
if (!searchInput) return;
|
117
|
+
searchInput.focus();
|
118
|
+
} else {
|
119
|
+
control.focus();
|
120
|
+
}
|
121
|
+
};
|
122
|
+
};
|
123
|
+
|
124
|
+
return controls.map(function (control) {
|
125
|
+
var item = control.parentNode;
|
126
|
+
var panel = document.querySelector("#".concat(control.getAttribute("aria-controls")));
|
127
|
+
var click = clickHandler(control, panel);
|
128
|
+
control.addEventListener("click", click);
|
129
|
+
var mouseenter, mouseleave;
|
130
|
+
|
131
|
+
if (!isSearchControl(control)) {
|
132
|
+
mouseenter = mouseenterHandler(control, panel);
|
133
|
+
mouseleave = mouseleaveHandler(control, panel);
|
134
|
+
item.addEventListener("mouseenter", mouseenter);
|
135
|
+
item.addEventListener("mouseleave", mouseleave);
|
136
|
+
}
|
137
|
+
|
138
|
+
return [{
|
139
|
+
teardown: function teardown() {
|
140
|
+
if (mouseenter && mouseleave) {
|
141
|
+
item.removeEventListener("mouseenter", mouseenter);
|
142
|
+
item.removeEventListener("mouseleave", mouseleave);
|
143
|
+
}
|
144
|
+
|
145
|
+
control.removeEventListener("click", click);
|
146
|
+
},
|
147
|
+
clear: function clear() {
|
148
|
+
control.setAttribute("aria-expanded", false);
|
149
|
+
panel.classList.replace("visible", "invisible");
|
150
|
+
}
|
151
|
+
}];
|
152
|
+
}).flat();
|
153
|
+
};
|
154
|
+
|
155
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MeganavControl);
|
156
|
+
|
157
|
+
/***/ }),
|
158
|
+
|
159
|
+
/***/ "./src/core/MeganavControlMobileDropdown/component.js":
|
160
|
+
/*!************************************************************!*\
|
161
|
+
!*** ./src/core/MeganavControlMobileDropdown/component.js ***!
|
162
|
+
\************************************************************/
|
163
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
164
|
+
|
165
|
+
__webpack_require__.r(__webpack_exports__);
|
166
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
167
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
168
|
+
/* harmony export */ });
|
169
|
+
/* harmony import */ var scroll_lock__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scroll-lock */ "scroll-lock");
|
170
|
+
/* harmony import */ var scroll_lock__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(scroll_lock__WEBPACK_IMPORTED_MODULE_0__);
|
171
|
+
/* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
var MeganavControlMobileDropdown = function MeganavControlMobileDropdown(_ref) {
|
176
|
+
var clearPanels = _ref.clearPanels;
|
177
|
+
var control = (0,_dom_query__WEBPACK_IMPORTED_MODULE_1__.queryId)("meganav-control-mobile-dropdown");
|
178
|
+
var dropdown = (0,_dom_query__WEBPACK_IMPORTED_MODULE_1__.queryId)("meganav-mobile-dropdown");
|
179
|
+
var menuIcon = (0,_dom_query__WEBPACK_IMPORTED_MODULE_1__.queryId)("meganav-control-mobile-dropdown-menu");
|
180
|
+
var closeIcon = (0,_dom_query__WEBPACK_IMPORTED_MODULE_1__.queryId)("meganav-control-mobile-dropdown-close");
|
181
|
+
|
182
|
+
var clickHandler = function clickHandler() {
|
183
|
+
var ariaExpanded = control.getAttribute("aria-expanded");
|
184
|
+
|
185
|
+
if (ariaExpanded === "false") {
|
186
|
+
dropdown.classList.replace("invisible", "visible");
|
187
|
+
control.setAttribute("aria-expanded", true);
|
188
|
+
scroll_lock__WEBPACK_IMPORTED_MODULE_0___default().disablePageScroll();
|
189
|
+
} else {
|
190
|
+
dropdown.classList.replace("visible", "invisible");
|
191
|
+
control.setAttribute("aria-expanded", false);
|
192
|
+
scroll_lock__WEBPACK_IMPORTED_MODULE_0___default().enablePageScroll();
|
193
|
+
clearPanels();
|
194
|
+
}
|
195
|
+
|
196
|
+
menuIcon.classList.toggle("hidden");
|
197
|
+
closeIcon.classList.toggle("hidden");
|
198
|
+
};
|
199
|
+
|
200
|
+
control.addEventListener("click", clickHandler);
|
201
|
+
return {
|
202
|
+
teardown: function teardown() {
|
203
|
+
control.removeEventListener("click", clickHandler);
|
204
|
+
scroll_lock__WEBPACK_IMPORTED_MODULE_0___default().enablePageScroll();
|
205
|
+
},
|
206
|
+
clear: function clear() {
|
207
|
+
dropdown.classList.replace("visible", "invisible");
|
208
|
+
control.setAttribute("aria-expanded", false);
|
209
|
+
menuIcon.classList.remove("hidden");
|
210
|
+
closeIcon.classList.add("hidden");
|
211
|
+
scroll_lock__WEBPACK_IMPORTED_MODULE_0___default().enablePageScroll();
|
212
|
+
}
|
213
|
+
};
|
214
|
+
};
|
215
|
+
|
216
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MeganavControlMobileDropdown);
|
217
|
+
|
218
|
+
/***/ }),
|
219
|
+
|
220
|
+
/***/ "./src/core/MeganavControlMobilePanelClose/component.js":
|
221
|
+
/*!**************************************************************!*\
|
222
|
+
!*** ./src/core/MeganavControlMobilePanelClose/component.js ***!
|
223
|
+
\**************************************************************/
|
224
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
225
|
+
|
226
|
+
__webpack_require__.r(__webpack_exports__);
|
227
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
228
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
229
|
+
/* harmony export */ });
|
230
|
+
/* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
|
231
|
+
|
232
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function () {
|
233
|
+
var closeControls = Array.from((0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryIdAll)("meganav-control-mobile-panel-close"));
|
234
|
+
var openControls = Array.from((0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryIdAll)("meganav-control-mobile-panel-open"));
|
235
|
+
|
236
|
+
var clickHandler = function clickHandler(btn, openBtn, panel) {
|
237
|
+
return function () {
|
238
|
+
btn.setAttribute("aria-expanded", false);
|
239
|
+
openBtn.setAttribute("aria-expanded", false);
|
240
|
+
panel.classList.replace("block", "hidden");
|
241
|
+
panel.style.height = null;
|
242
|
+
};
|
243
|
+
};
|
244
|
+
|
245
|
+
return closeControls.map(function (btn) {
|
246
|
+
var openBtn = openControls.find(function (open) {
|
247
|
+
return open.getAttribute("aria-controls") === btn.getAttribute("aria-controls");
|
248
|
+
});
|
249
|
+
var panel = document.querySelector("#".concat(btn.getAttribute("aria-controls")));
|
250
|
+
var handler = clickHandler(btn, openBtn, panel);
|
251
|
+
btn.addEventListener("click", handler);
|
252
|
+
return {
|
253
|
+
teardown: function teardown() {
|
254
|
+
return btn.removeEventListener("click", handler);
|
255
|
+
},
|
256
|
+
clear: function clear() {
|
257
|
+
return btn.setAttribute("aria-expanded", false);
|
258
|
+
}
|
259
|
+
};
|
260
|
+
});
|
261
|
+
});
|
262
|
+
|
263
|
+
/***/ }),
|
264
|
+
|
265
|
+
/***/ "./src/core/MeganavControlMobilePanelOpen/component.js":
|
266
|
+
/*!*************************************************************!*\
|
267
|
+
!*** ./src/core/MeganavControlMobilePanelOpen/component.js ***!
|
268
|
+
\*************************************************************/
|
269
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
270
|
+
|
271
|
+
__webpack_require__.r(__webpack_exports__);
|
272
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
273
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
274
|
+
/* harmony export */ });
|
275
|
+
/* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
|
276
|
+
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./src/core/css.js");
|
277
|
+
|
278
|
+
|
279
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function () {
|
280
|
+
var closeControls = Array.from((0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryIdAll)("meganav-control-mobile-panel-close"));
|
281
|
+
var openControls = Array.from((0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryIdAll)("meganav-control-mobile-panel-open"));
|
282
|
+
var dropdown = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-mobile-dropdown"); // Height is defined in rem's so to get the pixel value we need to find the fontSize on root
|
283
|
+
|
284
|
+
var meganavHeight = (0,_css__WEBPACK_IMPORTED_MODULE_1__.remsToPixelValue)(getComputedStyle(document.documentElement).getPropertyValue("--ui-meganav-height"));
|
285
|
+
|
286
|
+
var clickHandler = function clickHandler(btn, closeBtn, panel) {
|
287
|
+
return function () {
|
288
|
+
btn.setAttribute("aria-expanded", true);
|
289
|
+
closeBtn.setAttribute("aria-expanded", true);
|
290
|
+
panel.classList.replace("hidden", "block"); // On devices where we don't have enough space for the panel, set it's height to
|
291
|
+
// the height of the viewport (minus the meganav height) - this will trigger a scroll.
|
292
|
+
// Otherwise just set it to the panel height. This handles the case where the ratio of vertical
|
293
|
+
// space to horizontal is especially high (think tablets, but not only).
|
294
|
+
|
295
|
+
panel.style.height = "".concat(window.innerHeight - meganavHeight > panel.offsetHeight ? panel.offsetHeight : window.innerHeight - meganavHeight, "px");
|
296
|
+
};
|
297
|
+
};
|
298
|
+
|
299
|
+
return openControls.map(function (btn) {
|
300
|
+
var closeBtn = closeControls.find(function (node) {
|
301
|
+
return node.getAttribute("aria-controls") === btn.getAttribute("aria-controls");
|
302
|
+
});
|
303
|
+
var panel = document.querySelector("#".concat(btn.getAttribute("aria-controls")));
|
304
|
+
var handler = clickHandler(btn, closeBtn, panel);
|
305
|
+
btn.addEventListener("click", handler);
|
306
|
+
return {
|
307
|
+
teardown: function teardown() {
|
308
|
+
return btn.removeEventListener("click", handler);
|
309
|
+
},
|
310
|
+
clear: function clear() {
|
311
|
+
panel.classList.replace("block", "hidden");
|
312
|
+
dropdown.classList.remove("ui-meganav-mobile-dropdown-expand");
|
313
|
+
btn.setAttribute("aria-expanded", false);
|
314
|
+
panel.style.height = null;
|
315
|
+
}
|
316
|
+
};
|
317
|
+
});
|
318
|
+
});
|
319
|
+
|
320
|
+
/***/ }),
|
321
|
+
|
322
|
+
/***/ "./src/core/MeganavSearchAutocomplete/component.js":
|
323
|
+
/*!*********************************************************!*\
|
324
|
+
!*** ./src/core/MeganavSearchAutocomplete/component.js ***!
|
325
|
+
\*********************************************************/
|
326
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
327
|
+
|
328
|
+
__webpack_require__.r(__webpack_exports__);
|
329
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
330
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
331
|
+
/* harmony export */ });
|
332
|
+
/* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
|
333
|
+
/* harmony import */ var addsearch_js_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! addsearch-js-client */ "addsearch-js-client");
|
334
|
+
/* harmony import */ var addsearch_js_client__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(addsearch_js_client__WEBPACK_IMPORTED_MODULE_1__);
|
335
|
+
|
336
|
+
|
337
|
+
|
338
|
+
var init = function init(_ref) {
|
339
|
+
var input = _ref.input,
|
340
|
+
container = _ref.container,
|
341
|
+
listContainer = _ref.listContainer,
|
342
|
+
clear = _ref.clear,
|
343
|
+
client = _ref.client;
|
344
|
+
client.setAnalyticsTag("Meganav autocomplete");
|
345
|
+
client.setThrottleTime(400);
|
346
|
+
|
347
|
+
var clearResults = function clearResults() {
|
348
|
+
container.classList.add("hidden");
|
349
|
+
listContainer.innerHTML = "";
|
350
|
+
};
|
351
|
+
|
352
|
+
var toggleClearBtn = function toggleClearBtn(query) {
|
353
|
+
if ((query || "").length > 0 && clear) {
|
354
|
+
clear.classList.remove("invisible");
|
355
|
+
} else if (clear) {
|
356
|
+
clear.classList.add("invisible");
|
357
|
+
}
|
358
|
+
};
|
359
|
+
|
360
|
+
var markQueryInSuggestion = function markQueryInSuggestion(suggestionValue, query) {
|
361
|
+
return suggestionValue.replace(query.toLowerCase(), "<span class=\"font-light\">".concat(query, "</span>"));
|
362
|
+
};
|
363
|
+
|
364
|
+
var navigateToUrl = function navigateToUrl(q) {
|
365
|
+
return window.location = "/search?q=".concat(q);
|
366
|
+
};
|
367
|
+
|
368
|
+
var focusNext = function focusNext(index) {
|
369
|
+
var nextSuggestion = listContainer.querySelector("[data-suggestion-index=\"".concat(index + 1, "\"]"));
|
370
|
+
if (!nextSuggestion) return;
|
371
|
+
nextSuggestion.focus();
|
372
|
+
};
|
373
|
+
|
374
|
+
var focusPrevious = function focusPrevious(index) {
|
375
|
+
var previousIndex = index - 1;
|
376
|
+
var previousSuggestion = listContainer.querySelector("[data-suggestion-index=\"".concat(previousIndex, "\"]"));
|
377
|
+
if (!previousSuggestion) return;
|
378
|
+
previousSuggestion.focus();
|
379
|
+
};
|
380
|
+
|
381
|
+
var renderResults = function renderResults(query) {
|
382
|
+
return function () {
|
383
|
+
var results = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
384
|
+
toggleClearBtn(query); // Prevent invalid access error when key is invalid
|
385
|
+
|
386
|
+
if (!Array.isArray(results.suggestions)) {
|
387
|
+
clearResults();
|
388
|
+
return;
|
389
|
+
} // Prevent key error from invalid key
|
390
|
+
|
391
|
+
|
392
|
+
if (results.suggestions.length === 0) {
|
393
|
+
clearResults();
|
394
|
+
return;
|
395
|
+
}
|
396
|
+
|
397
|
+
var items = results.suggestions.map(function (suggestion, index) {
|
398
|
+
var li = document.createElement("li");
|
399
|
+
var button = document.createElement("button");
|
400
|
+
button.type = "button";
|
401
|
+
button.classList.add("ui-text-menu2", "font-medium", "p-8", "w-full", "text-left", "rounded", "hover:text-gui-hover", "focus:outline-gui-focus", "hover:bg-light-grey");
|
402
|
+
button.innerHTML = markQueryInSuggestion(suggestion.value, query);
|
403
|
+
button.dataset.suggestionIndex = index;
|
404
|
+
button.addEventListener("click", function () {
|
405
|
+
navigateToUrl(suggestion.value);
|
406
|
+
});
|
407
|
+
button.addEventListener("keydown", function (e) {
|
408
|
+
var key = e.key;
|
409
|
+
|
410
|
+
if (key === "ArrowDown") {
|
411
|
+
focusNext(index);
|
412
|
+
} else if (key === "ArrowUp" && index - 1 < 0) {
|
413
|
+
input.focus();
|
414
|
+
} else if (key === "ArrowUp" && index - 1 >= 0) {
|
415
|
+
focusPrevious(index);
|
416
|
+
} else if (key === "Enter" || key === "Space") {
|
417
|
+
navigateToUrl(suggestion.value);
|
418
|
+
}
|
419
|
+
});
|
420
|
+
li.appendChild(button);
|
421
|
+
return li;
|
422
|
+
});
|
423
|
+
listContainer.innerHTML = "";
|
424
|
+
items.forEach(function (item) {
|
425
|
+
return listContainer.appendChild(item);
|
426
|
+
});
|
427
|
+
container.classList.remove("hidden");
|
428
|
+
};
|
429
|
+
};
|
430
|
+
|
431
|
+
var keyupHandler = function keyupHandler(e) {
|
432
|
+
var query = e.target.value;
|
433
|
+
var key = e.key;
|
434
|
+
|
435
|
+
if (key === "ArrowDown") {
|
436
|
+
focusNext(0);
|
437
|
+
return;
|
438
|
+
}
|
439
|
+
|
440
|
+
if (!query) {
|
441
|
+
clearResults();
|
442
|
+
} else {
|
443
|
+
client.suggestions(query, renderResults(query));
|
444
|
+
}
|
445
|
+
};
|
446
|
+
|
447
|
+
var clearHandler;
|
448
|
+
|
449
|
+
if (clear) {
|
450
|
+
clearHandler = function clearHandler() {
|
451
|
+
input.value = "";
|
452
|
+
clear.classList.add("invisible");
|
453
|
+
clearResults();
|
454
|
+
};
|
455
|
+
|
456
|
+
clear.addEventListener("click", clearHandler);
|
457
|
+
}
|
458
|
+
|
459
|
+
input.addEventListener("keyup", keyupHandler);
|
460
|
+
return {
|
461
|
+
teardown: function teardown() {
|
462
|
+
input.removeEventListener("keyup", keyupHandler);
|
463
|
+
if (clear) clear.removeEventListener("click", clearHandler);
|
464
|
+
},
|
465
|
+
clear: function clear() {
|
466
|
+
input.value = "";
|
467
|
+
clearResults();
|
468
|
+
}
|
469
|
+
};
|
470
|
+
};
|
471
|
+
|
472
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (apiKey) {
|
473
|
+
if (!apiKey) {
|
474
|
+
console.log("No AddSearch API key provided, skipping search suggestions.");
|
475
|
+
return [];
|
476
|
+
}
|
477
|
+
|
478
|
+
var client = new (addsearch_js_client__WEBPACK_IMPORTED_MODULE_1___default())(apiKey);
|
479
|
+
return [(0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-search-input"), (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-mobile-search-input")].filter(function (i) {
|
480
|
+
return i;
|
481
|
+
}).map(function (input) {
|
482
|
+
var parent = input.parentNode;
|
483
|
+
var container = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-search-autocomplete-container", parent);
|
484
|
+
var listContainer = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-search-autocomplete-list", parent);
|
485
|
+
var clear = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-search-input-clear", parent);
|
486
|
+
return init({
|
487
|
+
input: input,
|
488
|
+
container: container,
|
489
|
+
listContainer: listContainer,
|
490
|
+
client: client,
|
491
|
+
clear: clear
|
492
|
+
});
|
493
|
+
});
|
494
|
+
});
|
495
|
+
|
496
|
+
/***/ }),
|
497
|
+
|
498
|
+
/***/ "./src/core/MeganavSearchSuggestions/component.js":
|
499
|
+
/*!********************************************************!*\
|
500
|
+
!*** ./src/core/MeganavSearchSuggestions/component.js ***!
|
501
|
+
\********************************************************/
|
502
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
503
|
+
|
504
|
+
__webpack_require__.r(__webpack_exports__);
|
505
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
506
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
507
|
+
/* harmony export */ });
|
508
|
+
/* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
|
509
|
+
|
510
|
+
var DRAG_BUFFER = 5;
|
511
|
+
|
512
|
+
var getTranslateX = function getTranslateX(node) {
|
513
|
+
return new DOMMatrix(window.getComputedStyle(node).transform).e;
|
514
|
+
};
|
515
|
+
|
516
|
+
var updateTranslateX = function updateTranslateX(node, value) {
|
517
|
+
return node.style.transform = "translateX(".concat(value, "px)");
|
518
|
+
};
|
519
|
+
|
520
|
+
var dragLeftBoundary = function dragLeftBoundary(translateX, threshold) {
|
521
|
+
return translateX >= threshold;
|
522
|
+
};
|
523
|
+
|
524
|
+
var dragRightBoundary = function dragRightBoundary(translateX, itemsWidth, windowWidth, threshold) {
|
525
|
+
return Math.abs(translateX - windowWidth + threshold) > itemsWidth;
|
526
|
+
};
|
527
|
+
|
528
|
+
var getDistance = function getDistance(e, touchStartX) {
|
529
|
+
var _e$changedTouches$;
|
530
|
+
|
531
|
+
return ((_e$changedTouches$ = e.changedTouches[0]) === null || _e$changedTouches$ === void 0 ? void 0 : _e$changedTouches$.clientX) - touchStartX;
|
532
|
+
};
|
533
|
+
|
534
|
+
var withinBuffer = function withinBuffer(distance) {
|
535
|
+
return Math.abs(distance) < DRAG_BUFFER;
|
536
|
+
};
|
537
|
+
|
538
|
+
var getItemsTotalWidth = function getItemsTotalWidth(nodes) {
|
539
|
+
return nodes.map(function (item) {
|
540
|
+
return item.getBoundingClientRect().width;
|
541
|
+
}).reduce(function (acc, val) {
|
542
|
+
return acc + val;
|
543
|
+
}, 0);
|
544
|
+
};
|
545
|
+
|
546
|
+
var MeganavSearchSuggestions = function MeganavSearchSuggestions() {
|
547
|
+
var suggestionsToggle = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-mobile-search-input");
|
548
|
+
var suggestions = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-mobile-search-suggestions");
|
549
|
+
var list = suggestions.querySelector("ul");
|
550
|
+
var listItems = Array.from(list.querySelectorAll("li"));
|
551
|
+
|
552
|
+
var dragLeft = function dragLeft(distance, threshold) {
|
553
|
+
var currentTranslateX = getTranslateX(list);
|
554
|
+
var translateX = Math.round(currentTranslateX + distance);
|
555
|
+
if (dragLeftBoundary(translateX, threshold)) return;
|
556
|
+
updateTranslateX(list, translateX);
|
557
|
+
};
|
558
|
+
|
559
|
+
var dragLeftEnd = function dragLeftEnd(distance, threshold) {
|
560
|
+
var currentTranslateX = getTranslateX(list);
|
561
|
+
var translateX = Math.round(currentTranslateX + distance);
|
562
|
+
|
563
|
+
if (dragLeftBoundary(translateX, threshold)) {
|
564
|
+
translateX = 0;
|
565
|
+
}
|
566
|
+
|
567
|
+
updateTranslateX(list, translateX);
|
568
|
+
};
|
569
|
+
|
570
|
+
var dragRight = function dragRight(distance, threshold) {
|
571
|
+
var listWidth = list.getBoundingClientRect().width;
|
572
|
+
var currentTranslateX = getTranslateX(list);
|
573
|
+
var translateX = Math.round(currentTranslateX + distance);
|
574
|
+
var itemsTotalWidth = getItemsTotalWidth(listItems);
|
575
|
+
|
576
|
+
if (dragRightBoundary(translateX, itemsTotalWidth, listWidth, threshold)) {
|
577
|
+
return;
|
578
|
+
}
|
579
|
+
|
580
|
+
updateTranslateX(list, translateX);
|
581
|
+
};
|
582
|
+
|
583
|
+
var dragRightEnd = function dragRightEnd(distance, threshold) {
|
584
|
+
var listWidth = list.getBoundingClientRect().width;
|
585
|
+
var currentTranslateX = getTranslateX(list);
|
586
|
+
var itemsTotalWidth = getItemsTotalWidth(listItems);
|
587
|
+
var translateX = Math.round(currentTranslateX + distance);
|
588
|
+
|
589
|
+
if (dragRightBoundary(translateX, itemsTotalWidth, listWidth, threshold)) {
|
590
|
+
translateX = -(itemsTotalWidth - listWidth + threshold);
|
591
|
+
}
|
592
|
+
|
593
|
+
updateTranslateX(list, translateX);
|
594
|
+
};
|
595
|
+
|
596
|
+
var touchStartX;
|
597
|
+
|
598
|
+
var touchstartHandler = function touchstartHandler(e) {
|
599
|
+
var _e$touches$;
|
600
|
+
|
601
|
+
touchStartX = (_e$touches$ = e.touches[0]) === null || _e$touches$ === void 0 ? void 0 : _e$touches$.clientX;
|
602
|
+
};
|
603
|
+
|
604
|
+
var touchmoveHandler = function touchmoveHandler(e) {
|
605
|
+
var distance = getDistance(e, touchStartX);
|
606
|
+
if (withinBuffer(distance)) return;
|
607
|
+
distance > 0 ? dragLeft(distance, 24) : dragRight(distance, 96);
|
608
|
+
};
|
609
|
+
|
610
|
+
var touchendHandler = function touchendHandler(e) {
|
611
|
+
var distance = getDistance(e, touchStartX);
|
612
|
+
if (withinBuffer(distance)) return;
|
613
|
+
distance > 0 ? dragLeftEnd(distance, 24) : dragRightEnd(distance, 48);
|
614
|
+
};
|
615
|
+
|
616
|
+
var focusSuggestionsHandler = function focusSuggestionsHandler() {
|
617
|
+
suggestions.classList.add("max-h-96");
|
618
|
+
};
|
619
|
+
|
620
|
+
var blurSuggestionsHandler = function blurSuggestionsHandler(e) {
|
621
|
+
if (e.relatedTarget === suggestions.querySelectorAll("a")[0]) {
|
622
|
+
return;
|
623
|
+
}
|
624
|
+
|
625
|
+
suggestions.classList.remove("max-h-96");
|
626
|
+
};
|
627
|
+
|
628
|
+
var wheelHandler = function wheelHandler(e) {
|
629
|
+
var distance = e.deltaY * 4;
|
630
|
+
if (withinBuffer(distance)) return;
|
631
|
+
distance > 0 ? dragLeftEnd(distance, 24) : dragRightEnd(distance, 48);
|
632
|
+
};
|
633
|
+
|
634
|
+
suggestionsToggle.addEventListener("focus", focusSuggestionsHandler);
|
635
|
+
suggestionsToggle.addEventListener("blur", blurSuggestionsHandler);
|
636
|
+
suggestions.addEventListener("touchstart", touchstartHandler);
|
637
|
+
suggestions.addEventListener("touchmove", touchmoveHandler);
|
638
|
+
suggestions.addEventListener("touchend", touchendHandler);
|
639
|
+
suggestions.addEventListener("wheel", wheelHandler);
|
640
|
+
return {
|
641
|
+
teardown: function teardown() {
|
642
|
+
suggestionsToggle.removeEventListener("focus", focusSuggestionsHandler);
|
643
|
+
suggestionsToggle.removeEventListener("blur", blurSuggestionsHandler);
|
644
|
+
suggestions.removeEventListener("touchstart", touchstartHandler);
|
645
|
+
suggestions.removeEventListener("touchmove", touchmoveHandler);
|
646
|
+
suggestions.removeEventListener("touchend", touchendHandler);
|
647
|
+
},
|
648
|
+
clear: function clear() {
|
649
|
+
suggestions.classList.remove("max-h-96");
|
650
|
+
list.style.transform = "translateX(0px)";
|
651
|
+
}
|
652
|
+
};
|
653
|
+
};
|
654
|
+
|
655
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MeganavSearchSuggestions);
|
656
|
+
|
657
|
+
/***/ }),
|
658
|
+
|
659
|
+
/***/ "./src/core/css.js":
|
660
|
+
/*!*************************!*\
|
661
|
+
!*** ./src/core/css.js ***!
|
662
|
+
\*************************/
|
663
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
664
|
+
|
665
|
+
__webpack_require__.r(__webpack_exports__);
|
666
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
667
|
+
/* harmony export */ "remsToPixelValue": () => (/* binding */ remsToPixelValue)
|
668
|
+
/* harmony export */ });
|
669
|
+
var remsToPixelValue = function remsToPixelValue(remString) {
|
670
|
+
return parseFloat(remString) * parseFloat(getComputedStyle(document.documentElement).fontSize);
|
671
|
+
};
|
672
|
+
|
673
|
+
/***/ }),
|
674
|
+
|
675
|
+
/***/ "./src/core/dom-query.js":
|
676
|
+
/*!*******************************!*\
|
677
|
+
!*** ./src/core/dom-query.js ***!
|
678
|
+
\*******************************/
|
679
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
680
|
+
|
681
|
+
__webpack_require__.r(__webpack_exports__);
|
682
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
683
|
+
/* harmony export */ "queryId": () => (/* binding */ queryId),
|
684
|
+
/* harmony export */ "queryIdAll": () => (/* binding */ queryIdAll)
|
685
|
+
/* harmony export */ });
|
686
|
+
var queryId = function queryId(val) {
|
687
|
+
var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
|
688
|
+
return root.querySelector("[data-id=".concat(val, "]"));
|
689
|
+
};
|
690
|
+
var queryIdAll = function queryIdAll(val) {
|
691
|
+
var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
|
692
|
+
return root.querySelectorAll("[data-id=".concat(val, "]"));
|
693
|
+
};
|
694
|
+
|
695
|
+
/***/ }),
|
696
|
+
|
697
|
+
/***/ "./src/core/Meganav/component.css":
|
698
|
+
/*!****************************************!*\
|
699
|
+
!*** ./src/core/Meganav/component.css ***!
|
700
|
+
\****************************************/
|
701
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
702
|
+
|
703
|
+
__webpack_require__.r(__webpack_exports__);
|
704
|
+
// extracted by mini-css-extract-plugin
|
705
|
+
|
706
|
+
|
707
|
+
/***/ }),
|
708
|
+
|
709
|
+
/***/ "addsearch-js-client":
|
710
|
+
/*!*************************************************************************************!*\
|
711
|
+
!*** external {"commonjs":"addsearch-js-client","commonjs2":"addsearch-js-client"} ***!
|
712
|
+
\*************************************************************************************/
|
713
|
+
/***/ ((module) => {
|
714
|
+
|
715
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_addsearch_js_client__;
|
716
|
+
|
717
|
+
/***/ }),
|
718
|
+
|
719
|
+
/***/ "lodash.throttle":
|
720
|
+
/*!*****************************************************************************!*\
|
721
|
+
!*** external {"commonjs":"lodash.throttle","commonjs2":"lodash.throttle"} ***!
|
722
|
+
\*****************************************************************************/
|
723
|
+
/***/ ((module) => {
|
724
|
+
|
725
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_lodash_throttle__;
|
726
|
+
|
727
|
+
/***/ }),
|
728
|
+
|
729
|
+
/***/ "scroll-lock":
|
730
|
+
/*!*********************************************************************!*\
|
731
|
+
!*** external {"commonjs":"scroll-lock","commonjs2":"scroll-lock"} ***!
|
732
|
+
\*********************************************************************/
|
733
|
+
/***/ ((module) => {
|
734
|
+
|
735
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_scroll_lock__;
|
736
|
+
|
737
|
+
/***/ })
|
738
|
+
|
739
|
+
/******/ });
|
740
|
+
/************************************************************************/
|
741
|
+
/******/ // The module cache
|
742
|
+
/******/ var __webpack_module_cache__ = {};
|
743
|
+
/******/
|
744
|
+
/******/ // The require function
|
745
|
+
/******/ function __webpack_require__(moduleId) {
|
746
|
+
/******/ // Check if module is in cache
|
747
|
+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
748
|
+
/******/ if (cachedModule !== undefined) {
|
749
|
+
/******/ return cachedModule.exports;
|
750
|
+
/******/ }
|
751
|
+
/******/ // Create a new module (and put it into the cache)
|
752
|
+
/******/ var module = __webpack_module_cache__[moduleId] = {
|
753
|
+
/******/ // no module.id needed
|
754
|
+
/******/ // no module.loaded needed
|
755
|
+
/******/ exports: {}
|
756
|
+
/******/ };
|
757
|
+
/******/
|
758
|
+
/******/ // Execute the module function
|
759
|
+
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
760
|
+
/******/
|
761
|
+
/******/ // Return the exports of the module
|
762
|
+
/******/ return module.exports;
|
763
|
+
/******/ }
|
764
|
+
/******/
|
765
|
+
/************************************************************************/
|
766
|
+
/******/ /* webpack/runtime/compat get default export */
|
767
|
+
/******/ (() => {
|
768
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
769
|
+
/******/ __webpack_require__.n = (module) => {
|
770
|
+
/******/ var getter = module && module.__esModule ?
|
771
|
+
/******/ () => (module['default']) :
|
772
|
+
/******/ () => (module);
|
773
|
+
/******/ __webpack_require__.d(getter, { a: getter });
|
774
|
+
/******/ return getter;
|
775
|
+
/******/ };
|
776
|
+
/******/ })();
|
777
|
+
/******/
|
778
|
+
/******/ /* webpack/runtime/define property getters */
|
779
|
+
/******/ (() => {
|
780
|
+
/******/ // define getter functions for harmony exports
|
781
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
782
|
+
/******/ for(var key in definition) {
|
783
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
784
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
785
|
+
/******/ }
|
786
|
+
/******/ }
|
787
|
+
/******/ };
|
788
|
+
/******/ })();
|
789
|
+
/******/
|
790
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
791
|
+
/******/ (() => {
|
792
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
793
|
+
/******/ })();
|
794
|
+
/******/
|
795
|
+
/******/ /* webpack/runtime/make namespace object */
|
796
|
+
/******/ (() => {
|
797
|
+
/******/ // define __esModule on exports
|
798
|
+
/******/ __webpack_require__.r = (exports) => {
|
799
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
800
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
801
|
+
/******/ }
|
802
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
803
|
+
/******/ };
|
804
|
+
/******/ })();
|
805
|
+
/******/
|
806
|
+
/************************************************************************/
|
807
|
+
var __webpack_exports__ = {};
|
808
|
+
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
809
|
+
(() => {
|
810
|
+
/*!***************************************!*\
|
811
|
+
!*** ./src/core/Meganav/component.js ***!
|
812
|
+
\***************************************/
|
813
|
+
__webpack_require__.r(__webpack_exports__);
|
814
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
815
|
+
/* harmony export */ "default": () => (/* binding */ Meganav)
|
816
|
+
/* harmony export */ });
|
817
|
+
/* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.throttle */ "lodash.throttle");
|
818
|
+
/* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_throttle__WEBPACK_IMPORTED_MODULE_0__);
|
819
|
+
/* harmony import */ var _component_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./component.css */ "./src/core/Meganav/component.css");
|
820
|
+
/* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
|
821
|
+
/* harmony import */ var _MeganavControl_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../MeganavControl/component */ "./src/core/MeganavControl/component.js");
|
822
|
+
/* harmony import */ var _MeganavControlMobileDropdown_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../MeganavControlMobileDropdown/component */ "./src/core/MeganavControlMobileDropdown/component.js");
|
823
|
+
/* harmony import */ var _MeganavControlMobilePanelOpen_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../MeganavControlMobilePanelOpen/component */ "./src/core/MeganavControlMobilePanelOpen/component.js");
|
824
|
+
/* harmony import */ var _MeganavControlMobilePanelClose_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MeganavControlMobilePanelClose/component */ "./src/core/MeganavControlMobilePanelClose/component.js");
|
825
|
+
/* harmony import */ var _MeganavSearchAutocomplete_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MeganavSearchAutocomplete/component */ "./src/core/MeganavSearchAutocomplete/component.js");
|
826
|
+
/* harmony import */ var _MeganavSearchSuggestions_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../MeganavSearchSuggestions/component */ "./src/core/MeganavSearchSuggestions/component.js");
|
827
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
828
|
+
|
829
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
830
|
+
|
831
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
832
|
+
|
833
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
834
|
+
|
835
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
836
|
+
|
837
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
838
|
+
|
839
|
+
|
840
|
+
// Glossary:
|
841
|
+
// item - is the element which contains both the control and the panel - these are adjacent
|
842
|
+
// control - interactive element that controls showing and hiding of dropdown or panel
|
843
|
+
// panel - container for meganav content
|
844
|
+
// dropdown - container for top level items on mobile
|
845
|
+
// clear - return to initial state
|
846
|
+
// teardown - remove all event listeners (for example when removing nodes)
|
847
|
+
|
848
|
+
|
849
|
+
|
850
|
+
|
851
|
+
|
852
|
+
|
853
|
+
|
854
|
+
// Close menu when user clicks outside of viewport
|
855
|
+
|
856
|
+
var windowOnBlur = function windowOnBlur(closeAll) {
|
857
|
+
window.onblur = function () {
|
858
|
+
return closeAll();
|
859
|
+
};
|
860
|
+
|
861
|
+
return {
|
862
|
+
teardown: function teardown() {
|
863
|
+
return window.onblur = null;
|
864
|
+
}
|
865
|
+
};
|
866
|
+
}; // Close menu when click/tap outside of nav
|
867
|
+
|
868
|
+
|
869
|
+
var documentClick = function documentClick(closeAll) {
|
870
|
+
var meganav = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryId)("meganav");
|
871
|
+
|
872
|
+
var clickHandler = function clickHandler(e) {
|
873
|
+
if (meganav.contains(e.target)) return;
|
874
|
+
closeAll();
|
875
|
+
};
|
876
|
+
|
877
|
+
document.addEventListener("click", clickHandler);
|
878
|
+
return {
|
879
|
+
teardown: function teardown() {
|
880
|
+
return document.removeEventListener("click", clickHandler);
|
881
|
+
}
|
882
|
+
};
|
883
|
+
}; // Invert from transparent to white
|
884
|
+
|
885
|
+
|
886
|
+
var documentScroll = function documentScroll(themeName) {
|
887
|
+
if (themeName !== "transparentToWhite") return {
|
888
|
+
teardown: function teardown() {}
|
889
|
+
};
|
890
|
+
var meganav = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryId)("meganav");
|
891
|
+
var navItems = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryIdAll)("meganav-link");
|
892
|
+
var controlMobileDropdownMenu = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryId)("meganav-control-mobile-dropdown-menu");
|
893
|
+
var controlMobileDropdownClose = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryId)("meganav-control-mobile-dropdown-close");
|
894
|
+
var controls = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryIdAll)("meganav-control");
|
895
|
+
var signUpBtn = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryId)("meganav-sign-up-btn");
|
896
|
+
var invertTextCollection = [].concat(_toConsumableArray(Array.from(controls)), _toConsumableArray(Array.from(navItems)), [(0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryId)("meganav-logo")]);
|
897
|
+
|
898
|
+
var invertMobleDropdownColor = function invertMobleDropdownColor(invert) {
|
899
|
+
var whiteToBlack = ["ui-icon-white", "ui-icon-cool-black"];
|
900
|
+
var blackToWhite = [].concat(whiteToBlack).reverse();
|
901
|
+
|
902
|
+
if (invert) {
|
903
|
+
var _controlMobileDropdow, _controlMobileDropdow2;
|
904
|
+
|
905
|
+
controlMobileDropdownMenu === null || controlMobileDropdownMenu === void 0 ? void 0 : (_controlMobileDropdow = controlMobileDropdownMenu.classList).replace.apply(_controlMobileDropdow, whiteToBlack);
|
906
|
+
controlMobileDropdownClose === null || controlMobileDropdownClose === void 0 ? void 0 : (_controlMobileDropdow2 = controlMobileDropdownClose.classList).replace.apply(_controlMobileDropdow2, whiteToBlack);
|
907
|
+
} else {
|
908
|
+
var _controlMobileDropdow3, _controlMobileDropdow4;
|
909
|
+
|
910
|
+
controlMobileDropdownMenu === null || controlMobileDropdownMenu === void 0 ? void 0 : (_controlMobileDropdow3 = controlMobileDropdownMenu.classList).replace.apply(_controlMobileDropdow3, _toConsumableArray(blackToWhite));
|
911
|
+
controlMobileDropdownClose === null || controlMobileDropdownClose === void 0 ? void 0 : (_controlMobileDropdow4 = controlMobileDropdownClose.classList).replace.apply(_controlMobileDropdow4, _toConsumableArray(blackToWhite));
|
912
|
+
}
|
913
|
+
};
|
914
|
+
|
915
|
+
var inverSignupBtnColors = function inverSignupBtnColors(invert) {
|
916
|
+
if (invert) {
|
917
|
+
signUpBtn === null || signUpBtn === void 0 ? void 0 : signUpBtn.classList.replace("bg-white", "bg-cool-black");
|
918
|
+
signUpBtn === null || signUpBtn === void 0 ? void 0 : signUpBtn.classList.replace("text-cool-black", "text-white");
|
919
|
+
} else {
|
920
|
+
signUpBtn === null || signUpBtn === void 0 ? void 0 : signUpBtn.classList.replace("bg-cool-black", "bg-white");
|
921
|
+
signUpBtn === null || signUpBtn === void 0 ? void 0 : signUpBtn.classList.replace("text-white", "text-cool-black");
|
922
|
+
}
|
923
|
+
};
|
924
|
+
|
925
|
+
var scrollHandler = lodash_throttle__WEBPACK_IMPORTED_MODULE_0___default()(function () {
|
926
|
+
if (window.scrollY > 5) {
|
927
|
+
meganav.classList.replace("bg-transparent", "bg-white");
|
928
|
+
inverSignupBtnColors(true);
|
929
|
+
invertMobleDropdownColor(true);
|
930
|
+
invertTextCollection.forEach(function (n) {
|
931
|
+
return n.classList.replace("text-white", "text-cool-black");
|
932
|
+
});
|
933
|
+
} else {
|
934
|
+
meganav.classList.replace("bg-white", "bg-transparent");
|
935
|
+
inverSignupBtnColors(false);
|
936
|
+
invertMobleDropdownColor(false);
|
937
|
+
invertTextCollection.forEach(function (n) {
|
938
|
+
return n.classList.replace("text-cool-black", "text-white");
|
939
|
+
});
|
940
|
+
}
|
941
|
+
}, 150);
|
942
|
+
document.addEventListener("scroll", scrollHandler);
|
943
|
+
return {
|
944
|
+
teardown: function teardown() {
|
945
|
+
return document.removeEventListener("scroll", scrollHandler);
|
946
|
+
}
|
947
|
+
};
|
948
|
+
};
|
949
|
+
|
950
|
+
function Meganav() {
|
951
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
952
|
+
themeName: null
|
953
|
+
},
|
954
|
+
themeName = _ref.themeName,
|
955
|
+
addSearchApiKey = _ref.addSearchApiKey;
|
956
|
+
|
957
|
+
var controls = (0,_MeganavControl_component__WEBPACK_IMPORTED_MODULE_3__["default"])();
|
958
|
+
var panelOpenControls = (0,_MeganavControlMobilePanelOpen_component__WEBPACK_IMPORTED_MODULE_5__["default"])();
|
959
|
+
var panelCloseControls = (0,_MeganavControlMobilePanelClose_component__WEBPACK_IMPORTED_MODULE_6__["default"])();
|
960
|
+
var search = (0,_MeganavSearchAutocomplete_component__WEBPACK_IMPORTED_MODULE_7__["default"])(addSearchApiKey);
|
961
|
+
var searchSuggestions = (0,_MeganavSearchSuggestions_component__WEBPACK_IMPORTED_MODULE_8__["default"])();
|
962
|
+
var mobileDropdownControl = (0,_MeganavControlMobileDropdown_component__WEBPACK_IMPORTED_MODULE_4__["default"])({
|
963
|
+
clearPanels: function clearPanels() {
|
964
|
+
return [].concat(_toConsumableArray(panelOpenControls), _toConsumableArray(panelCloseControls)).forEach(function (i) {
|
965
|
+
return i.clear();
|
966
|
+
});
|
967
|
+
}
|
968
|
+
});
|
969
|
+
|
970
|
+
var closeAll = function closeAll() {
|
971
|
+
return [mobileDropdownControl, searchSuggestions].concat(_toConsumableArray(panelOpenControls), _toConsumableArray(panelCloseControls), _toConsumableArray(controls), _toConsumableArray(search)).forEach(function (i) {
|
972
|
+
return i.clear();
|
973
|
+
});
|
974
|
+
};
|
975
|
+
|
976
|
+
var teardowns = [documentScroll(themeName), documentClick(closeAll), windowOnBlur(closeAll), mobileDropdownControl, searchSuggestions].concat(_toConsumableArray(controls), _toConsumableArray(panelOpenControls), _toConsumableArray(panelCloseControls), _toConsumableArray(search)).map(function (i) {
|
977
|
+
return i.teardown;
|
978
|
+
});
|
979
|
+
return function () {
|
980
|
+
return teardowns.forEach(function (teardown) {
|
981
|
+
return teardown();
|
982
|
+
});
|
983
|
+
};
|
984
|
+
}
|
985
|
+
})();
|
986
|
+
|
987
|
+
__webpack_exports__ = __webpack_exports__["default"];
|
988
|
+
/******/ return __webpack_exports__;
|
989
|
+
/******/ })()
|
990
|
+
;
|
991
|
+
});
|
992
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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bHlVaS5Db3JlL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL01lZ2FuYXZDb250cm9sL2NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL01lZ2FuYXZDb250cm9sTW9iaWxlRHJvcGRvd24vY29tcG9uZW50LmpzIiwid2VicGFjazovL0FibHlVaS5Db3JlLy4vc3JjL2NvcmUvTWVnYW5hdkNvbnRyb2xNb2JpbGVQYW5lbENsb3NlL2NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL01lZ2FuYXZDb250cm9sTW9iaWxlUGFuZWxPcGVuL2NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL01lZ2FuYXZTZWFyY2hBdXRvY29tcGxldGUvY29tcG9uZW50LmpzIiwid2VicGFjazovL0FibHlVaS5Db3JlLy4vc3JjL2NvcmUvTWVnYW5hdlNlYXJjaFN1Z2dlc3Rpb25zL2NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL2Nzcy5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL2RvbS1xdWVyeS5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL01lZ2FuYXYvY29tcG9uZW50LmNzcz8wYzY1Iiwid2VicGFjazovL0FibHlVaS5Db3JlL2V4dGVybmFsIHVtZCB7XCJjb21tb25qc1wiOlwiYWRkc2VhcmNoLWpzLWNsaWVudFwiLFwiY29tbW9uanMyXCI6XCJhZGRzZWFyY2gtanMtY2xpZW50XCJ9Iiwid2VicGFjazovL0FibHlVaS5Db3JlL2V4dGVybmFsIHVtZCB7XCJjb21tb25qc1wiOlwibG9kYXNoLnRocm90dGxlXCIsXCJjb21tb25qczJcIjpcImxvZGFzaC50aHJvdHRsZVwifSIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS9leHRlcm5hbCB1bWQge1wiY29tbW9uanNcIjpcInNjcm9sbC1sb2NrXCIsXCJjb21tb25qczJcIjpcInNjcm9sbC1sb2NrXCJ9Iiwid2VicGFjazovL0FibHlVaS5Db3JlL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0FibHlVaS5Db3JlL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0FibHlVaS5Db3JlL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0FibHlVaS5Db3JlL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQWJseVVpLkNvcmUvLi9zcmMvY29yZS9NZWdhbmF2L2NvbXBvbmVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJhZGRzZWFyY2gtanMtY2xpZW50XCIpLCByZXF1aXJlKFwibG9kYXNoLnRocm90dGxlXCIpLCByZXF1aXJlKFwic2Nyb2xsLWxvY2tcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoWywgLCBdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkFibHlVaVwiXSA9IGZhY3RvcnkocmVxdWlyZShcImFkZHNlYXJjaC1qcy1jbGllbnRcIiksIHJlcXVpcmUoXCJsb2Rhc2gudGhyb3R0bGVcIiksIHJlcXVpcmUoXCJzY3JvbGwtbG9ja1wiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiQWJseVVpXCJdID0gcm9vdFtcIkFibHlVaVwiXSB8fCB7fSwgcm9vdFtcIkFibHlVaVwiXVtcIkNvcmVcIl0gPSByb290W1wiQWJseVVpXCJdW1wiQ29yZVwiXSB8fCB7fSwgcm9vdFtcIkFibHlVaVwiXVtcIkNvcmVcIl1bXCJNZWdhbmF2XCJdID0gZmFjdG9yeShyb290W3VuZGVmaW5lZF0sIHJvb3RbdW5kZWZpbmVkXSwgcm9vdFt1bmRlZmluZWRdKTtcbn0pKHRoaXMsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2FkZHNlYXJjaF9qc19jbGllbnRfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9sb2Rhc2hfdGhyb3R0bGVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zY3JvbGxfbG9ja19fKSA9PiB7XG5yZXR1cm4gIiwiaW1wb3J0IHsgcXVlcnlJZCwgcXVlcnlJZEFsbCB9IGZyb20gXCIuLi9kb20tcXVlcnlcIjtcblxuY29uc3QgTWVnYW5hdkNvbnRyb2wgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRyb2xzID0gQXJyYXkuZnJvbShxdWVyeUlkQWxsKFwibWVnYW5hdi1jb250cm9sXCIpKTtcbiAgY29uc3QgcGFuZWxzID0gQXJyYXkuZnJvbShxdWVyeUlkQWxsKFwibWVnYW5hdi1wYW5lbFwiKSk7XG4gIGNvbnN0IG1kQnJlYWtwb2ludCA9IGdldENvbXB1dGVkU3R5bGUoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICkuZ2V0UHJvcGVydHlWYWx1ZShcIi0tYnAtbWRcIik7XG5cbiAgY29uc3QgaG92ZXJFbmFibGVkID0gKCkgPT5cbiAgICB3aW5kb3cubWF0Y2hNZWRpYShcbiAgICAgIGAoaG92ZXI6IGhvdmVyKSBhbmQgKHBvaW50ZXI6IGZpbmUpIGFuZCAobWluLXdpZHRoOiAke21kQnJlYWtwb2ludH0pYFxuICAgICkubWF0Y2hlcztcblxuICBjb25zdCBpc1NlYXJjaENvbnRyb2wgPSAobm9kZSkgPT4gbm9kZS5kYXRhc2V0LmNvbnRyb2wgPT09IFwic2VhcmNoXCI7XG5cbiAgY29uc3QgaXNTZWFyY2hQYW5lbE9wZW4gPSAoKSA9PiB7XG4gICAgY29uc3Qgc2VhcmNoUGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJ1tkYXRhLWlkPVwibWVnYW5hdi1wYW5lbFwiXSNwYW5lbC1zZWFyY2gnXG4gICAgKTtcbiAgICBpZiAoIXNlYXJjaFBhbmVsKSByZXR1cm47XG4gICAgcmV0dXJuICFzZWFyY2hQYW5lbC5jbGFzc0xpc3QuY29udGFpbnMoXCJpbnZpc2libGVcIik7XG4gIH07XG5cbiAgY29uc3QgY29udHJvbHNIYXZlRm9jdXMgPSAoKSA9PlxuICAgIGNvbnRyb2xzLnNvbWUoKGNvbnRyb2wpID0+IGNvbnRyb2wgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuXG4gIGNvbnN0IGhvdmVyID0gKGNvbnRyb2wsIHBhbmVsLCBvcGVuKSA9PiB7XG4gICAgaWYgKGhvdmVyRW5hYmxlZCgpICYmICFjb250cm9sc0hhdmVGb2N1cygpICYmICFpc1NlYXJjaFBhbmVsT3BlbigpKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0gW1wiaW52aXNpYmxlXCIsIFwidmlzaWJsZVwiXTtcbiAgICAgIHBhbmVsLmNsYXNzTGlzdC5yZXBsYWNlKC4uLihvcGVuID8gY2xhc3NlcyA6IGNsYXNzZXMucmV2ZXJzZSgpKSk7XG4gICAgICBjb250cm9sLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgb3Blbik7XG4gICAgICBjb250cm9sLmRhdGFzZXQuaG92ZXIgPSBvcGVuO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBtb3VzZWVudGVySGFuZGxlciA9IChjb250cm9sLCBwYW5lbCkgPT4gKCkgPT5cbiAgICBob3Zlcihjb250cm9sLCBwYW5lbCwgdHJ1ZSk7XG5cbiAgY29uc3QgbW91c2VsZWF2ZUhhbmRsZXIgPSAoY29udHJvbCwgcGFuZWwpID0+ICgpID0+XG4gICAgaG92ZXIoY29udHJvbCwgcGFuZWwsIGZhbHNlKTtcblxuICBjb25zdCBjbGlja0hhbmRsZXIgPSAoY29udHJvbCwgcGFuZWwpID0+ICgpID0+IHtcbiAgICBjb250cm9scy5mb3JFYWNoKFxuICAgICAgKG5vZGUpID0+IG5vZGUgIT09IGNvbnRyb2wgJiYgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIsIGZhbHNlKVxuICAgICk7XG5cbiAgICBwYW5lbHMuZm9yRWFjaChcbiAgICAgIChub2RlKSA9PiBub2RlICE9PSBwYW5lbCAmJiBub2RlLmNsYXNzTGlzdC5yZXBsYWNlKFwidmlzaWJsZVwiLCBcImludmlzaWJsZVwiKVxuICAgICk7XG5cbiAgICBjb25zdCBhcmlhRXhwYW5kZWQgPSBjb250cm9sLmdldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIik7XG5cbiAgICAvLyBQcmV2ZW50IGNsb3Npbmcgb2YgdGhlIHBhbmVsIGlmIGl0IHdhcyBhbHJlYWR5IG9wZW5lZCBieSBob3ZlcmluZ1xuICAgIGNvbnN0IG9wZW5lZEJ5SG92ZXIgPSBjb250cm9sLmRhdGFzZXQuaG92ZXIgPT09IFwidHJ1ZVwiO1xuXG4gICAgaWYgKGFyaWFFeHBhbmRlZCA9PT0gXCJ0cnVlXCIgJiYgIW9wZW5lZEJ5SG92ZXIpIHtcbiAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSk7XG4gICAgICBwYW5lbC5jbGFzc0xpc3QucmVwbGFjZShcInZpc2libGVcIiwgXCJpbnZpc2libGVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCB0cnVlKTtcbiAgICAgIHBhbmVsLmNsYXNzTGlzdC5yZXBsYWNlKFwiaW52aXNpYmxlXCIsIFwidmlzaWJsZVwiKTtcbiAgICB9XG5cbiAgICBpZiAob3BlbmVkQnlIb3Zlcikge1xuICAgICAgY29udHJvbC5kYXRhc2V0LmhvdmVyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGlzU2VhcmNoQ29udHJvbChjb250cm9sKSkge1xuICAgICAgY29uc3Qgc2VhcmNoSW5wdXQgPSBxdWVyeUlkKFwibWVnYW5hdi1zZWFyY2gtaW5wdXRcIiwgcGFuZWwpO1xuICAgICAgaWYgKCFzZWFyY2hJbnB1dCkgcmV0dXJuO1xuICAgICAgc2VhcmNoSW5wdXQuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbC5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gY29udHJvbHNcbiAgICAubWFwKChjb250cm9sKSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gY29udHJvbC5wYXJlbnROb2RlO1xuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgIyR7Y29udHJvbC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWNvbnRyb2xzXCIpfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBjbGljayA9IGNsaWNrSGFuZGxlcihjb250cm9sLCBwYW5lbCk7XG4gICAgICBjb250cm9sLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGljayk7XG4gICAgICBsZXQgbW91c2VlbnRlciwgbW91c2VsZWF2ZTtcblxuICAgICAgaWYgKCFpc1NlYXJjaENvbnRyb2woY29udHJvbCkpIHtcbiAgICAgICAgbW91c2VlbnRlciA9IG1vdXNlZW50ZXJIYW5kbGVyKGNvbnRyb2wsIHBhbmVsKTtcbiAgICAgICAgbW91c2VsZWF2ZSA9IG1vdXNlbGVhdmVIYW5kbGVyKGNvbnRyb2wsIHBhbmVsKTtcblxuICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIG1vdXNlZW50ZXIpO1xuICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIG1vdXNlbGVhdmUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdGVhcmRvd246ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChtb3VzZWVudGVyICYmIG1vdXNlbGVhdmUpIHtcbiAgICAgICAgICAgICAgaXRlbS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCBtb3VzZWVudGVyKTtcbiAgICAgICAgICAgICAgaXRlbS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCBtb3VzZWxlYXZlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udHJvbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY2xpY2spO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgICBwYW5lbC5jbGFzc0xpc3QucmVwbGFjZShcInZpc2libGVcIiwgXCJpbnZpc2libGVcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgICAuZmxhdCgpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWVnYW5hdkNvbnRyb2w7XG4iLCJpbXBvcnQgc2Nyb2xsTG9jayBmcm9tIFwic2Nyb2xsLWxvY2tcIjtcblxuaW1wb3J0IHsgcXVlcnlJZCB9IGZyb20gXCIuLi9kb20tcXVlcnlcIjtcblxuY29uc3QgTWVnYW5hdkNvbnRyb2xNb2JpbGVEcm9wZG93biA9ICh7IGNsZWFyUGFuZWxzIH0pID0+IHtcbiAgY29uc3QgY29udHJvbCA9IHF1ZXJ5SWQoXCJtZWdhbmF2LWNvbnRyb2wtbW9iaWxlLWRyb3Bkb3duXCIpO1xuICBjb25zdCBkcm9wZG93biA9IHF1ZXJ5SWQoXCJtZWdhbmF2LW1vYmlsZS1kcm9wZG93blwiKTtcbiAgY29uc3QgbWVudUljb24gPSBxdWVyeUlkKFwibWVnYW5hdi1jb250cm9sLW1vYmlsZS1kcm9wZG93bi1tZW51XCIpO1xuICBjb25zdCBjbG9zZUljb24gPSBxdWVyeUlkKFwibWVnYW5hdi1jb250cm9sLW1vYmlsZS1kcm9wZG93bi1jbG9zZVwiKTtcblxuICBjb25zdCBjbGlja0hhbmRsZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgYXJpYUV4cGFuZGVkID0gY29udHJvbC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIpO1xuXG4gICAgaWYgKGFyaWFFeHBhbmRlZCA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICBkcm9wZG93bi5jbGFzc0xpc3QucmVwbGFjZShcImludmlzaWJsZVwiLCBcInZpc2libGVcIik7XG4gICAgICBjb250cm9sLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgdHJ1ZSk7XG4gICAgICBzY3JvbGxMb2NrLmRpc2FibGVQYWdlU2Nyb2xsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZXBsYWNlKFwidmlzaWJsZVwiLCBcImludmlzaWJsZVwiKTtcbiAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSk7XG4gICAgICBzY3JvbGxMb2NrLmVuYWJsZVBhZ2VTY3JvbGwoKTtcbiAgICAgIGNsZWFyUGFuZWxzKCk7XG4gICAgfVxuXG4gICAgbWVudUljb24uY2xhc3NMaXN0LnRvZ2dsZShcImhpZGRlblwiKTtcbiAgICBjbG9zZUljb24uY2xhc3NMaXN0LnRvZ2dsZShcImhpZGRlblwiKTtcbiAgfTtcblxuICBjb250cm9sLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGlja0hhbmRsZXIpO1xuXG4gIHJldHVybiB7XG4gICAgdGVhcmRvd246ICgpID0+IHtcbiAgICAgIGNvbnRyb2wucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrSGFuZGxlcik7XG4gICAgICBzY3JvbGxMb2NrLmVuYWJsZVBhZ2VTY3JvbGwoKTtcbiAgICB9LFxuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBkcm9wZG93bi5jbGFzc0xpc3QucmVwbGFjZShcInZpc2libGVcIiwgXCJpbnZpc2libGVcIik7XG4gICAgICBjb250cm9sLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgZmFsc2UpO1xuICAgICAgbWVudUljb24uY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcbiAgICAgIGNsb3NlSWNvbi5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuICAgICAgc2Nyb2xsTG9jay5lbmFibGVQYWdlU2Nyb2xsKCk7XG4gICAgfSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1lZ2FuYXZDb250cm9sTW9iaWxlRHJvcGRvd247XG4iLCJpbXBvcnQgeyBxdWVyeUlkQWxsIH0gZnJvbSBcIi4uL2RvbS1xdWVyeVwiO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IGNsb3NlQ29udHJvbHMgPSBBcnJheS5mcm9tKFxuICAgIHF1ZXJ5SWRBbGwoXCJtZWdhbmF2LWNvbnRyb2wtbW9iaWxlLXBhbmVsLWNsb3NlXCIpXG4gICk7XG4gIGNvbnN0IG9wZW5Db250cm9scyA9IEFycmF5LmZyb20oXG4gICAgcXVlcnlJZEFsbChcIm1lZ2FuYXYtY29udHJvbC1tb2JpbGUtcGFuZWwtb3BlblwiKVxuICApO1xuXG4gIGNvbnN0IGNsaWNrSGFuZGxlciA9IChidG4sIG9wZW5CdG4sIHBhbmVsKSA9PiAoKSA9PiB7XG4gICAgYnRuLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgZmFsc2UpO1xuICAgIG9wZW5CdG4uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSk7XG4gICAgcGFuZWwuY2xhc3NMaXN0LnJlcGxhY2UoXCJibG9ja1wiLCBcImhpZGRlblwiKTtcbiAgICBwYW5lbC5zdHlsZS5oZWlnaHQgPSBudWxsO1xuICB9O1xuXG4gIHJldHVybiBjbG9zZUNvbnRyb2xzLm1hcCgoYnRuKSA9PiB7XG4gICAgY29uc3Qgb3BlbkJ0biA9IG9wZW5Db250cm9scy5maW5kKFxuICAgICAgKG9wZW4pID0+XG4gICAgICAgIG9wZW4uZ2V0QXR0cmlidXRlKFwiYXJpYS1jb250cm9sc1wiKSA9PT0gYnRuLmdldEF0dHJpYnV0ZShcImFyaWEtY29udHJvbHNcIilcbiAgICApO1xuICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGAjJHtidG4uZ2V0QXR0cmlidXRlKFwiYXJpYS1jb250cm9sc1wiKX1gXG4gICAgKTtcbiAgICBjb25zdCBoYW5kbGVyID0gY2xpY2tIYW5kbGVyKGJ0biwgb3BlbkJ0biwgcGFuZWwpO1xuXG4gICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0ZWFyZG93bjogKCkgPT4gYnRuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVyKSxcbiAgICAgIGNsZWFyOiAoKSA9PiBidG4uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSksXG4gICAgfTtcbiAgfSk7XG59O1xuIiwiaW1wb3J0IHsgcXVlcnlJZCwgcXVlcnlJZEFsbCB9IGZyb20gXCIuLi9kb20tcXVlcnlcIjtcbmltcG9ydCB7IHJlbXNUb1BpeGVsVmFsdWUgfSBmcm9tIFwiLi4vY3NzXCI7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgY2xvc2VDb250cm9scyA9IEFycmF5LmZyb20oXG4gICAgcXVlcnlJZEFsbChcIm1lZ2FuYXYtY29udHJvbC1tb2JpbGUtcGFuZWwtY2xvc2VcIilcbiAgKTtcbiAgY29uc3Qgb3BlbkNvbnRyb2xzID0gQXJyYXkuZnJvbShcbiAgICBxdWVyeUlkQWxsKFwibWVnYW5hdi1jb250cm9sLW1vYmlsZS1wYW5lbC1vcGVuXCIpXG4gICk7XG4gIGNvbnN0IGRyb3Bkb3duID0gcXVlcnlJZChcIm1lZ2FuYXYtbW9iaWxlLWRyb3Bkb3duXCIpO1xuXG4gIC8vIEhlaWdodCBpcyBkZWZpbmVkIGluIHJlbSdzIHNvIHRvIGdldCB0aGUgcGl4ZWwgdmFsdWUgd2UgbmVlZCB0byBmaW5kIHRoZSBmb250U2l6ZSBvbiByb290XG4gIGNvbnN0IG1lZ2FuYXZIZWlnaHQgPSByZW1zVG9QaXhlbFZhbHVlKFxuICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgXCItLXVpLW1lZ2FuYXYtaGVpZ2h0XCJcbiAgICApXG4gICk7XG5cbiAgY29uc3QgY2xpY2tIYW5kbGVyID0gKGJ0biwgY2xvc2VCdG4sIHBhbmVsKSA9PiAoKSA9PiB7XG4gICAgYnRuLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgdHJ1ZSk7XG4gICAgY2xvc2VCdG4uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCB0cnVlKTtcbiAgICBwYW5lbC5jbGFzc0xpc3QucmVwbGFjZShcImhpZGRlblwiLCBcImJsb2NrXCIpO1xuXG4gICAgLy8gT24gZGV2aWNlcyB3aGVyZSB3ZSBkb24ndCBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHBhbmVsLCBzZXQgaXQncyBoZWlnaHQgdG9cbiAgICAvLyB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCAobWludXMgdGhlIG1lZ2FuYXYgaGVpZ2h0KSAtIHRoaXMgd2lsbCB0cmlnZ2VyIGEgc2Nyb2xsLlxuICAgIC8vIE90aGVyd2lzZSBqdXN0IHNldCBpdCB0byB0aGUgcGFuZWwgaGVpZ2h0LiBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIHJhdGlvIG9mIHZlcnRpY2FsXG4gICAgLy8gc3BhY2UgdG8gaG9yaXpvbnRhbCBpcyBlc3BlY2lhbGx5IGhpZ2ggKHRoaW5rIHRhYmxldHMsIGJ1dCBub3Qgb25seSkuXG4gICAgcGFuZWwuc3R5bGUuaGVpZ2h0ID0gYCR7XG4gICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgLSBtZWdhbmF2SGVpZ2h0ID4gcGFuZWwub2Zmc2V0SGVpZ2h0XG4gICAgICAgID8gcGFuZWwub2Zmc2V0SGVpZ2h0XG4gICAgICAgIDogd2luZG93LmlubmVySGVpZ2h0IC0gbWVnYW5hdkhlaWdodFxuICAgIH1weGA7XG4gIH07XG5cbiAgcmV0dXJuIG9wZW5Db250cm9scy5tYXAoKGJ0bikgPT4ge1xuICAgIGNvbnN0IGNsb3NlQnRuID0gY2xvc2VDb250cm9scy5maW5kKFxuICAgICAgKG5vZGUpID0+XG4gICAgICAgIG5vZGUuZ2V0QXR0cmlidXRlKFwiYXJpYS1jb250cm9sc1wiKSA9PT0gYnRuLmdldEF0dHJpYnV0ZShcImFyaWEtY29udHJvbHNcIilcbiAgICApO1xuICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGAjJHtidG4uZ2V0QXR0cmlidXRlKFwiYXJpYS1jb250cm9sc1wiKX1gXG4gICAgKTtcbiAgICBjb25zdCBoYW5kbGVyID0gY2xpY2tIYW5kbGVyKGJ0biwgY2xvc2VCdG4sIHBhbmVsKTtcblxuICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGVhcmRvd246ICgpID0+IGJ0bi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlciksXG4gICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICBwYW5lbC5jbGFzc0xpc3QucmVwbGFjZShcImJsb2NrXCIsIFwiaGlkZGVuXCIpO1xuICAgICAgICBkcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKFwidWktbWVnYW5hdi1tb2JpbGUtZHJvcGRvd24tZXhwYW5kXCIpO1xuICAgICAgICBidG4uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSk7XG4gICAgICAgIHBhbmVsLnN0eWxlLmhlaWdodCA9IG51bGw7XG4gICAgICB9LFxuICAgIH07XG4gIH0pO1xufTtcbiIsImltcG9ydCB7IHF1ZXJ5SWQgfSBmcm9tIFwiLi4vZG9tLXF1ZXJ5XCI7XG5pbXBvcnQgQWRkU2VhcmNoQ2xpZW50IGZyb20gXCJhZGRzZWFyY2gtanMtY2xpZW50XCI7XG5cbmNvbnN0IGluaXQgPSAoeyBpbnB1dCwgY29udGFpbmVyLCBsaXN0Q29udGFpbmVyLCBjbGVhciwgY2xpZW50IH0pID0+IHtcbiAgY2xpZW50LnNldEFuYWx5dGljc1RhZyhcIk1lZ2FuYXYgYXV0b2NvbXBsZXRlXCIpO1xuICBjbGllbnQuc2V0VGhyb3R0bGVUaW1lKDQwMCk7XG5cbiAgY29uc3QgY2xlYXJSZXN1bHRzID0gKCkgPT4ge1xuICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuICAgIGxpc3RDb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgfTtcblxuICBjb25zdCB0b2dnbGVDbGVhckJ0biA9IChxdWVyeSkgPT4ge1xuICAgIGlmICgocXVlcnkgfHwgXCJcIikubGVuZ3RoID4gMCAmJiBjbGVhcikge1xuICAgICAgY2xlYXIuY2xhc3NMaXN0LnJlbW92ZShcImludmlzaWJsZVwiKTtcbiAgICB9IGVsc2UgaWYgKGNsZWFyKSB7XG4gICAgICBjbGVhci5jbGFzc0xpc3QuYWRkKFwiaW52aXNpYmxlXCIpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBtYXJrUXVlcnlJblN1Z2dlc3Rpb24gPSAoc3VnZ2VzdGlvblZhbHVlLCBxdWVyeSkgPT4ge1xuICAgIHJldHVybiBzdWdnZXN0aW9uVmFsdWUucmVwbGFjZShcbiAgICAgIHF1ZXJ5LnRvTG93ZXJDYXNlKCksXG4gICAgICBgPHNwYW4gY2xhc3M9XCJmb250LWxpZ2h0XCI+JHtxdWVyeX08L3NwYW4+YFxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgbmF2aWdhdGVUb1VybCA9IChxKSA9PiAod2luZG93LmxvY2F0aW9uID0gYC9zZWFyY2g/cT0ke3F9YCk7XG5cbiAgY29uc3QgZm9jdXNOZXh0ID0gKGluZGV4KSA9PiB7XG4gICAgY29uc3QgbmV4dFN1Z2dlc3Rpb24gPSBsaXN0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgW2RhdGEtc3VnZ2VzdGlvbi1pbmRleD1cIiR7aW5kZXggKyAxfVwiXWBcbiAgICApO1xuICAgIGlmICghbmV4dFN1Z2dlc3Rpb24pIHJldHVybjtcbiAgICBuZXh0U3VnZ2VzdGlvbi5mb2N1cygpO1xuICB9O1xuXG4gIGNvbnN0IGZvY3VzUHJldmlvdXMgPSAoaW5kZXgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gaW5kZXggLSAxO1xuXG4gICAgY29uc3QgcHJldmlvdXNTdWdnZXN0aW9uID0gbGlzdENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxuICAgICAgYFtkYXRhLXN1Z2dlc3Rpb24taW5kZXg9XCIke3ByZXZpb3VzSW5kZXh9XCJdYFxuICAgICk7XG4gICAgaWYgKCFwcmV2aW91c1N1Z2dlc3Rpb24pIHJldHVybjtcbiAgICBwcmV2aW91c1N1Z2dlc3Rpb24uZm9jdXMoKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJSZXN1bHRzID1cbiAgICAocXVlcnkpID0+XG4gICAgKHJlc3VsdHMgPSB7fSkgPT4ge1xuICAgICAgdG9nZ2xlQ2xlYXJCdG4ocXVlcnkpO1xuXG4gICAgICAvLyBQcmV2ZW50IGludmFsaWQgYWNjZXNzIGVycm9yIHdoZW4ga2V5IGlzIGludmFsaWRcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzLnN1Z2dlc3Rpb25zKSkge1xuICAgICAgICBjbGVhclJlc3VsdHMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmV2ZW50IGtleSBlcnJvciBmcm9tIGludmFsaWQga2V5XG4gICAgICBpZiAocmVzdWx0cy5zdWdnZXN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2xlYXJSZXN1bHRzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXRlbXMgPSByZXN1bHRzLnN1Z2dlc3Rpb25zLm1hcCgoc3VnZ2VzdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7XG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gICAgICAgIGJ1dHRvbi50eXBlID0gXCJidXR0b25cIjtcblxuICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZChcbiAgICAgICAgICBcInVpLXRleHQtbWVudTJcIixcbiAgICAgICAgICBcImZvbnQtbWVkaXVtXCIsXG4gICAgICAgICAgXCJwLThcIixcbiAgICAgICAgICBcInctZnVsbFwiLFxuICAgICAgICAgIFwidGV4dC1sZWZ0XCIsXG4gICAgICAgICAgXCJyb3VuZGVkXCIsXG4gICAgICAgICAgXCJob3Zlcjp0ZXh0LWd1aS1ob3ZlclwiLFxuICAgICAgICAgIFwiZm9jdXM6b3V0bGluZS1ndWktZm9jdXNcIixcbiAgICAgICAgICBcImhvdmVyOmJnLWxpZ2h0LWdyZXlcIlxuICAgICAgICApO1xuXG4gICAgICAgIGJ1dHRvbi5pbm5lckhUTUwgPSBtYXJrUXVlcnlJblN1Z2dlc3Rpb24oc3VnZ2VzdGlvbi52YWx1ZSwgcXVlcnkpO1xuXG4gICAgICAgIGJ1dHRvbi5kYXRhc2V0LnN1Z2dlc3Rpb25JbmRleCA9IGluZGV4O1xuXG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgIG5hdmlnYXRlVG9Vcmwoc3VnZ2VzdGlvbi52YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGUua2V5O1xuXG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikge1xuICAgICAgICAgICAgZm9jdXNOZXh0KGluZGV4KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIgJiYgaW5kZXggLSAxIDwgMCkge1xuICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIgJiYgaW5kZXggLSAxID49IDApIHtcbiAgICAgICAgICAgIGZvY3VzUHJldmlvdXMoaW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcIkVudGVyXCIgfHwga2V5ID09PSBcIlNwYWNlXCIpIHtcbiAgICAgICAgICAgIG5hdmlnYXRlVG9Vcmwoc3VnZ2VzdGlvbi52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBsaS5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgICAgICByZXR1cm4gbGk7XG4gICAgICB9KTtcblxuICAgICAgbGlzdENvbnRhaW5lci5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gbGlzdENvbnRhaW5lci5hcHBlbmRDaGlsZChpdGVtKSk7XG4gICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcbiAgICB9O1xuXG4gIGNvbnN0IGtleXVwSGFuZGxlciA9IChlKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSBlLnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBlLmtleTtcblxuICAgIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcbiAgICAgIGZvY3VzTmV4dCgwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICBjbGVhclJlc3VsdHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50LnN1Z2dlc3Rpb25zKHF1ZXJ5LCByZW5kZXJSZXN1bHRzKHF1ZXJ5KSk7XG4gICAgfVxuICB9O1xuXG4gIGxldCBjbGVhckhhbmRsZXI7XG4gIGlmIChjbGVhcikge1xuICAgIGNsZWFySGFuZGxlciA9ICgpID0+IHtcbiAgICAgIGlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgIGNsZWFyLmNsYXNzTGlzdC5hZGQoXCJpbnZpc2libGVcIik7XG4gICAgICBjbGVhclJlc3VsdHMoKTtcbiAgICB9O1xuICAgIGNsZWFyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGVhckhhbmRsZXIpO1xuICB9XG5cbiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGtleXVwSGFuZGxlcik7XG5cbiAgcmV0dXJuIHtcbiAgICB0ZWFyZG93bjogKCkgPT4ge1xuICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGtleXVwSGFuZGxlcik7XG4gICAgICBpZiAoY2xlYXIpIGNsZWFyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGVhckhhbmRsZXIpO1xuICAgIH0sXG4gICAgY2xlYXI6ICgpID0+IHtcbiAgICAgIGlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgIGNsZWFyUmVzdWx0cygpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoYXBpS2V5KSA9PiB7XG4gIGlmICghYXBpS2V5KSB7XG4gICAgY29uc29sZS5sb2coYE5vIEFkZFNlYXJjaCBBUEkga2V5IHByb3ZpZGVkLCBza2lwcGluZyBzZWFyY2ggc3VnZ2VzdGlvbnMuYCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgY2xpZW50ID0gbmV3IEFkZFNlYXJjaENsaWVudChhcGlLZXkpO1xuXG4gIHJldHVybiBbXG4gICAgcXVlcnlJZChcIm1lZ2FuYXYtc2VhcmNoLWlucHV0XCIpLFxuICAgIHF1ZXJ5SWQoXCJtZWdhbmF2LW1vYmlsZS1zZWFyY2gtaW5wdXRcIiksXG4gIF1cbiAgICAuZmlsdGVyKChpKSA9PiBpKVxuICAgIC5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBpbnB1dC5wYXJlbnROb2RlO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcXVlcnlJZChcbiAgICAgICAgXCJtZWdhbmF2LXNlYXJjaC1hdXRvY29tcGxldGUtY29udGFpbmVyXCIsXG4gICAgICAgIHBhcmVudFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGxpc3RDb250YWluZXIgPSBxdWVyeUlkKFwibWVnYW5hdi1zZWFyY2gtYXV0b2NvbXBsZXRlLWxpc3RcIiwgcGFyZW50KTtcbiAgICAgIGNvbnN0IGNsZWFyID0gcXVlcnlJZChcIm1lZ2FuYXYtc2VhcmNoLWlucHV0LWNsZWFyXCIsIHBhcmVudCk7XG5cbiAgICAgIHJldHVybiBpbml0KHsgaW5wdXQsIGNvbnRhaW5lciwgbGlzdENvbnRhaW5lciwgY2xpZW50LCBjbGVhciB9KTtcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBxdWVyeUlkIH0gZnJvbSBcIi4uL2RvbS1xdWVyeVwiO1xuXG5jb25zdCBEUkFHX0JVRkZFUiA9IDU7XG5cbmNvbnN0IGdldFRyYW5zbGF0ZVggPSAobm9kZSkgPT5cbiAgbmV3IERPTU1hdHJpeCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS50cmFuc2Zvcm0pLmU7XG5cbmNvbnN0IHVwZGF0ZVRyYW5zbGF0ZVggPSAobm9kZSwgdmFsdWUpID0+XG4gIChub2RlLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7dmFsdWV9cHgpYCk7XG5cbmNvbnN0IGRyYWdMZWZ0Qm91bmRhcnkgPSAodHJhbnNsYXRlWCwgdGhyZXNob2xkKSA9PiB0cmFuc2xhdGVYID49IHRocmVzaG9sZDtcblxuY29uc3QgZHJhZ1JpZ2h0Qm91bmRhcnkgPSAodHJhbnNsYXRlWCwgaXRlbXNXaWR0aCwgd2luZG93V2lkdGgsIHRocmVzaG9sZCkgPT5cbiAgTWF0aC5hYnModHJhbnNsYXRlWCAtIHdpbmRvd1dpZHRoICsgdGhyZXNob2xkKSA+IGl0ZW1zV2lkdGg7XG5cbmNvbnN0IGdldERpc3RhbmNlID0gKGUsIHRvdWNoU3RhcnRYKSA9PlxuICBlLmNoYW5nZWRUb3VjaGVzWzBdPy5jbGllbnRYIC0gdG91Y2hTdGFydFg7XG5cbmNvbnN0IHdpdGhpbkJ1ZmZlciA9IChkaXN0YW5jZSkgPT4gTWF0aC5hYnMoZGlzdGFuY2UpIDwgRFJBR19CVUZGRVI7XG5cbmNvbnN0IGdldEl0ZW1zVG90YWxXaWR0aCA9IChub2RlcykgPT5cbiAgbm9kZXNcbiAgICAubWFwKChpdGVtKSA9PiBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxuICAgIC5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApO1xuXG5jb25zdCBNZWdhbmF2U2VhcmNoU3VnZ2VzdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHN1Z2dlc3Rpb25zVG9nZ2xlID0gcXVlcnlJZChcIm1lZ2FuYXYtbW9iaWxlLXNlYXJjaC1pbnB1dFwiKTtcbiAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBxdWVyeUlkKFwibWVnYW5hdi1tb2JpbGUtc2VhcmNoLXN1Z2dlc3Rpb25zXCIpO1xuICBjb25zdCBsaXN0ID0gc3VnZ2VzdGlvbnMucXVlcnlTZWxlY3RvcihcInVsXCIpO1xuICBjb25zdCBsaXN0SXRlbXMgPSBBcnJheS5mcm9tKGxpc3QucXVlcnlTZWxlY3RvckFsbChcImxpXCIpKTtcblxuICBjb25zdCBkcmFnTGVmdCA9IChkaXN0YW5jZSwgdGhyZXNob2xkKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFRyYW5zbGF0ZVggPSBnZXRUcmFuc2xhdGVYKGxpc3QpO1xuICAgIGNvbnN0IHRyYW5zbGF0ZVggPSBNYXRoLnJvdW5kKGN1cnJlbnRUcmFuc2xhdGVYICsgZGlzdGFuY2UpO1xuICAgIGlmIChkcmFnTGVmdEJvdW5kYXJ5KHRyYW5zbGF0ZVgsIHRocmVzaG9sZCkpIHJldHVybjtcbiAgICB1cGRhdGVUcmFuc2xhdGVYKGxpc3QsIHRyYW5zbGF0ZVgpO1xuICB9O1xuXG4gIGNvbnN0IGRyYWdMZWZ0RW5kID0gKGRpc3RhbmNlLCB0aHJlc2hvbGQpID0+IHtcbiAgICBjb25zdCBjdXJyZW50VHJhbnNsYXRlWCA9IGdldFRyYW5zbGF0ZVgobGlzdCk7XG4gICAgbGV0IHRyYW5zbGF0ZVggPSBNYXRoLnJvdW5kKGN1cnJlbnRUcmFuc2xhdGVYICsgZGlzdGFuY2UpO1xuXG4gICAgaWYgKGRyYWdMZWZ0Qm91bmRhcnkodHJhbnNsYXRlWCwgdGhyZXNob2xkKSkge1xuICAgICAgdHJhbnNsYXRlWCA9IDA7XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNsYXRlWChsaXN0LCB0cmFuc2xhdGVYKTtcbiAgfTtcblxuICBjb25zdCBkcmFnUmlnaHQgPSAoZGlzdGFuY2UsIHRocmVzaG9sZCkgPT4ge1xuICAgIGNvbnN0IGxpc3RXaWR0aCA9IGxpc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgY29uc3QgY3VycmVudFRyYW5zbGF0ZVggPSBnZXRUcmFuc2xhdGVYKGxpc3QpO1xuICAgIGNvbnN0IHRyYW5zbGF0ZVggPSBNYXRoLnJvdW5kKGN1cnJlbnRUcmFuc2xhdGVYICsgZGlzdGFuY2UpO1xuICAgIGNvbnN0IGl0ZW1zVG90YWxXaWR0aCA9IGdldEl0ZW1zVG90YWxXaWR0aChsaXN0SXRlbXMpO1xuXG4gICAgaWYgKGRyYWdSaWdodEJvdW5kYXJ5KHRyYW5zbGF0ZVgsIGl0ZW1zVG90YWxXaWR0aCwgbGlzdFdpZHRoLCB0aHJlc2hvbGQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNsYXRlWChsaXN0LCB0cmFuc2xhdGVYKTtcbiAgfTtcblxuICBjb25zdCBkcmFnUmlnaHRFbmQgPSAoZGlzdGFuY2UsIHRocmVzaG9sZCkgPT4ge1xuICAgIGNvbnN0IGxpc3RXaWR0aCA9IGxpc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgY29uc3QgY3VycmVudFRyYW5zbGF0ZVggPSBnZXRUcmFuc2xhdGVYKGxpc3QpO1xuICAgIGNvbnN0IGl0ZW1zVG90YWxXaWR0aCA9IGdldEl0ZW1zVG90YWxXaWR0aChsaXN0SXRlbXMpO1xuICAgIGxldCB0cmFuc2xhdGVYID0gTWF0aC5yb3VuZChjdXJyZW50VHJhbnNsYXRlWCArIGRpc3RhbmNlKTtcblxuICAgIGlmIChkcmFnUmlnaHRCb3VuZGFyeSh0cmFuc2xhdGVYLCBpdGVtc1RvdGFsV2lkdGgsIGxpc3RXaWR0aCwgdGhyZXNob2xkKSkge1xuICAgICAgdHJhbnNsYXRlWCA9IC0oaXRlbXNUb3RhbFdpZHRoIC0gbGlzdFdpZHRoICsgdGhyZXNob2xkKTtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2xhdGVYKGxpc3QsIHRyYW5zbGF0ZVgpO1xuICB9O1xuXG4gIGxldCB0b3VjaFN0YXJ0WDtcblxuICBjb25zdCB0b3VjaHN0YXJ0SGFuZGxlciA9IChlKSA9PiB7XG4gICAgdG91Y2hTdGFydFggPSBlLnRvdWNoZXNbMF0/LmNsaWVudFg7XG4gIH07XG5cbiAgY29uc3QgdG91Y2htb3ZlSGFuZGxlciA9IChlKSA9PiB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBnZXREaXN0YW5jZShlLCB0b3VjaFN0YXJ0WCk7XG4gICAgaWYgKHdpdGhpbkJ1ZmZlcihkaXN0YW5jZSkpIHJldHVybjtcbiAgICBkaXN0YW5jZSA+IDAgPyBkcmFnTGVmdChkaXN0YW5jZSwgMjQpIDogZHJhZ1JpZ2h0KGRpc3RhbmNlLCA5Nik7XG4gIH07XG5cbiAgY29uc3QgdG91Y2hlbmRIYW5kbGVyID0gKGUpID0+IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGdldERpc3RhbmNlKGUsIHRvdWNoU3RhcnRYKTtcbiAgICBpZiAod2l0aGluQnVmZmVyKGRpc3RhbmNlKSkgcmV0dXJuO1xuICAgIGRpc3RhbmNlID4gMCA/IGRyYWdMZWZ0RW5kKGRpc3RhbmNlLCAyNCkgOiBkcmFnUmlnaHRFbmQoZGlzdGFuY2UsIDQ4KTtcbiAgfTtcblxuICBjb25zdCBmb2N1c1N1Z2dlc3Rpb25zSGFuZGxlciA9ICgpID0+IHtcbiAgICBzdWdnZXN0aW9ucy5jbGFzc0xpc3QuYWRkKFwibWF4LWgtOTZcIik7XG4gIH07XG5cbiAgY29uc3QgYmx1clN1Z2dlc3Rpb25zSGFuZGxlciA9IChlKSA9PiB7XG4gICAgaWYgKGUucmVsYXRlZFRhcmdldCA9PT0gc3VnZ2VzdGlvbnMucXVlcnlTZWxlY3RvckFsbChcImFcIilbMF0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VnZ2VzdGlvbnMuY2xhc3NMaXN0LnJlbW92ZShcIm1heC1oLTk2XCIpO1xuICB9O1xuXG4gIGNvbnN0IHdoZWVsSGFuZGxlciA9IChlKSA9PiB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBlLmRlbHRhWSAqIDQ7XG4gICAgaWYgKHdpdGhpbkJ1ZmZlcihkaXN0YW5jZSkpIHJldHVybjtcbiAgICBkaXN0YW5jZSA+IDAgPyBkcmFnTGVmdEVuZChkaXN0YW5jZSwgMjQpIDogZHJhZ1JpZ2h0RW5kKGRpc3RhbmNlLCA0OCk7XG4gIH07XG5cbiAgc3VnZ2VzdGlvbnNUb2dnbGUuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZvY3VzU3VnZ2VzdGlvbnNIYW5kbGVyKTtcbiAgc3VnZ2VzdGlvbnNUb2dnbGUuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgYmx1clN1Z2dlc3Rpb25zSGFuZGxlcik7XG4gIHN1Z2dlc3Rpb25zLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIHRvdWNoc3RhcnRIYW5kbGVyKTtcbiAgc3VnZ2VzdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLCB0b3VjaG1vdmVIYW5kbGVyKTtcbiAgc3VnZ2VzdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIHRvdWNoZW5kSGFuZGxlcik7XG4gIHN1Z2dlc3Rpb25zLmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCB3aGVlbEhhbmRsZXIpO1xuXG4gIHJldHVybiB7XG4gICAgdGVhcmRvd246ICgpID0+IHtcbiAgICAgIHN1Z2dlc3Rpb25zVG9nZ2xlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBmb2N1c1N1Z2dlc3Rpb25zSGFuZGxlcik7XG4gICAgICBzdWdnZXN0aW9uc1RvZ2dsZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLCBibHVyU3VnZ2VzdGlvbnNIYW5kbGVyKTtcbiAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIHRvdWNoc3RhcnRIYW5kbGVyKTtcbiAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdG91Y2htb3ZlSGFuZGxlcik7XG4gICAgICBzdWdnZXN0aW9ucy5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgdG91Y2hlbmRIYW5kbGVyKTtcbiAgICB9LFxuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBzdWdnZXN0aW9ucy5jbGFzc0xpc3QucmVtb3ZlKFwibWF4LWgtOTZcIik7XG4gICAgICBsaXN0LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKDBweClgO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNZWdhbmF2U2VhcmNoU3VnZ2VzdGlvbnM7XG4iLCJleHBvcnQgY29uc3QgcmVtc1RvUGl4ZWxWYWx1ZSA9IChyZW1TdHJpbmcpID0+XG4gIHBhcnNlRmxvYXQocmVtU3RyaW5nKSAqXG4gIHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmZvbnRTaXplKTtcbiIsImV4cG9ydCBjb25zdCBxdWVyeUlkID0gKHZhbCwgcm9vdCA9IGRvY3VtZW50KSA9PlxuICByb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWlkPSR7dmFsfV1gKTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5SWRBbGwgPSAodmFsLCByb290ID0gZG9jdW1lbnQpID0+XG4gIHJvb3QucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtaWQ9JHt2YWx9XWApO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2FkZHNlYXJjaF9qc19jbGllbnRfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfbG9kYXNoX3Rocm90dGxlX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3Njcm9sbF9sb2NrX187IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB0aHJvdHRsZSBmcm9tIFwibG9kYXNoLnRocm90dGxlXCI7XG5cbmltcG9ydCBcIi4vY29tcG9uZW50LmNzc1wiO1xuXG4vLyBHbG9zc2FyeTpcbi8vIGl0ZW0gLSBpcyB0aGUgZWxlbWVudCB3aGljaCBjb250YWlucyBib3RoIHRoZSBjb250cm9sIGFuZCB0aGUgcGFuZWwgLSB0aGVzZSBhcmUgYWRqYWNlbnRcbi8vIGNvbnRyb2wgLSBpbnRlcmFjdGl2ZSBlbGVtZW50IHRoYXQgY29udHJvbHMgc2hvd2luZyBhbmQgaGlkaW5nIG9mIGRyb3Bkb3duIG9yIHBhbmVsXG4vLyBwYW5lbCAtIGNvbnRhaW5lciBmb3IgbWVnYW5hdiBjb250ZW50XG4vLyBkcm9wZG93biAtIGNvbnRhaW5lciBmb3IgdG9wIGxldmVsIGl0ZW1zIG9uIG1vYmlsZVxuLy8gY2xlYXIgLSByZXR1cm4gdG8gaW5pdGlhbCBzdGF0ZVxuLy8gdGVhcmRvd24gLSByZW1vdmUgYWxsIGV2ZW50IGxpc3RlbmVycyAoZm9yIGV4YW1wbGUgd2hlbiByZW1vdmluZyBub2RlcylcblxuaW1wb3J0IHsgcXVlcnlJZCwgcXVlcnlJZEFsbCB9IGZyb20gXCIuLi9kb20tcXVlcnlcIjtcblxuaW1wb3J0IE1lZ2FuYXZDb250cm9sIGZyb20gXCIuLi9NZWdhbmF2Q29udHJvbC9jb21wb25lbnRcIjtcblxuaW1wb3J0IE1lZ2FuYXZDb250cm9sTW9iaWxlRHJvcGRvd24gZnJvbSBcIi4uL01lZ2FuYXZDb250cm9sTW9iaWxlRHJvcGRvd24vY29tcG9uZW50XCI7XG5pbXBvcnQgTW9iaWxlUGFuZWxPcGVuQ2xpY2sgZnJvbSBcIi4uL01lZ2FuYXZDb250cm9sTW9iaWxlUGFuZWxPcGVuL2NvbXBvbmVudFwiO1xuaW1wb3J0IE1vYmlsZVBhbmVsQ2xvc2VDbGljayBmcm9tIFwiLi4vTWVnYW5hdkNvbnRyb2xNb2JpbGVQYW5lbENsb3NlL2NvbXBvbmVudFwiO1xuaW1wb3J0IE1lZ2FuYXZTZWFyY2hBdXRvY29tcGxldGUgZnJvbSBcIi4uL01lZ2FuYXZTZWFyY2hBdXRvY29tcGxldGUvY29tcG9uZW50XCI7XG5pbXBvcnQgTWVnYW5hdlNlYXJjaFN1Z2dlc3Rpb25zIGZyb20gXCIuLi9NZWdhbmF2U2VhcmNoU3VnZ2VzdGlvbnMvY29tcG9uZW50XCI7XG5cbi8vIENsb3NlIG1lbnUgd2hlbiB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHZpZXdwb3J0XG5jb25zdCB3aW5kb3dPbkJsdXIgPSAoY2xvc2VBbGwpID0+IHtcbiAgd2luZG93Lm9uYmx1ciA9ICgpID0+IGNsb3NlQWxsKCk7XG4gIHJldHVybiB7IHRlYXJkb3duOiAoKSA9PiAod2luZG93Lm9uYmx1ciA9IG51bGwpIH07XG59O1xuXG4vLyBDbG9zZSBtZW51IHdoZW4gY2xpY2svdGFwIG91dHNpZGUgb2YgbmF2XG5jb25zdCBkb2N1bWVudENsaWNrID0gKGNsb3NlQWxsKSA9PiB7XG4gIGNvbnN0IG1lZ2FuYXYgPSBxdWVyeUlkKFwibWVnYW5hdlwiKTtcblxuICBjb25zdCBjbGlja0hhbmRsZXIgPSAoZSkgPT4ge1xuICAgIGlmIChtZWdhbmF2LmNvbnRhaW5zKGUudGFyZ2V0KSkgcmV0dXJuO1xuICAgIGNsb3NlQWxsKCk7XG4gIH07XG5cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrSGFuZGxlcik7XG5cbiAgcmV0dXJuIHtcbiAgICB0ZWFyZG93bjogKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrSGFuZGxlciksXG4gIH07XG59O1xuXG4vLyBJbnZlcnQgZnJvbSB0cmFuc3BhcmVudCB0byB3aGl0ZVxuY29uc3QgZG9jdW1lbnRTY3JvbGwgPSAodGhlbWVOYW1lKSA9PiB7XG4gIGlmICh0aGVtZU5hbWUgIT09IFwidHJhbnNwYXJlbnRUb1doaXRlXCIpIHJldHVybiB7IHRlYXJkb3duOiAoKSA9PiB7fSB9O1xuXG4gIGNvbnN0IG1lZ2FuYXYgPSBxdWVyeUlkKFwibWVnYW5hdlwiKTtcbiAgY29uc3QgbmF2SXRlbXMgPSBxdWVyeUlkQWxsKFwibWVnYW5hdi1saW5rXCIpO1xuICBjb25zdCBjb250cm9sTW9iaWxlRHJvcGRvd25NZW51ID0gcXVlcnlJZChcbiAgICBcIm1lZ2FuYXYtY29udHJvbC1tb2JpbGUtZHJvcGRvd24tbWVudVwiXG4gICk7XG4gIGNvbnN0IGNvbnRyb2xNb2JpbGVEcm9wZG93bkNsb3NlID0gcXVlcnlJZChcbiAgICBcIm1lZ2FuYXYtY29udHJvbC1tb2JpbGUtZHJvcGRvd24tY2xvc2VcIlxuICApO1xuICBjb25zdCBjb250cm9scyA9IHF1ZXJ5SWRBbGwoXCJtZWdhbmF2LWNvbnRyb2xcIik7XG4gIGNvbnN0IHNpZ25VcEJ0biA9IHF1ZXJ5SWQoXCJtZWdhbmF2LXNpZ24tdXAtYnRuXCIpO1xuXG4gIGNvbnN0IGludmVydFRleHRDb2xsZWN0aW9uID0gW1xuICAgIC4uLkFycmF5LmZyb20oY29udHJvbHMpLFxuICAgIC4uLkFycmF5LmZyb20obmF2SXRlbXMpLFxuICAgIHF1ZXJ5SWQoXCJtZWdhbmF2LWxvZ29cIiksXG4gIF07XG5cbiAgY29uc3QgaW52ZXJ0TW9ibGVEcm9wZG93bkNvbG9yID0gKGludmVydCkgPT4ge1xuICAgIGNvbnN0IHdoaXRlVG9CbGFjayA9IFtcInVpLWljb24td2hpdGVcIiwgXCJ1aS1pY29uLWNvb2wtYmxhY2tcIl07XG4gICAgY29uc3QgYmxhY2tUb1doaXRlID0gWy4uLndoaXRlVG9CbGFja10ucmV2ZXJzZSgpO1xuXG4gICAgaWYgKGludmVydCkge1xuICAgICAgY29udHJvbE1vYmlsZURyb3Bkb3duTWVudT8uY2xhc3NMaXN0LnJlcGxhY2UoLi4ud2hpdGVUb0JsYWNrKTtcbiAgICAgIGNvbnRyb2xNb2JpbGVEcm9wZG93bkNsb3NlPy5jbGFzc0xpc3QucmVwbGFjZSguLi53aGl0ZVRvQmxhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sTW9iaWxlRHJvcGRvd25NZW51Py5jbGFzc0xpc3QucmVwbGFjZSguLi5ibGFja1RvV2hpdGUpO1xuICAgICAgY29udHJvbE1vYmlsZURyb3Bkb3duQ2xvc2U/LmNsYXNzTGlzdC5yZXBsYWNlKC4uLmJsYWNrVG9XaGl0ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGludmVyU2lnbnVwQnRuQ29sb3JzID0gKGludmVydCkgPT4ge1xuICAgIGlmIChpbnZlcnQpIHtcbiAgICAgIHNpZ25VcEJ0bj8uY2xhc3NMaXN0LnJlcGxhY2UoXCJiZy13aGl0ZVwiLCBcImJnLWNvb2wtYmxhY2tcIik7XG4gICAgICBzaWduVXBCdG4/LmNsYXNzTGlzdC5yZXBsYWNlKFwidGV4dC1jb29sLWJsYWNrXCIsIFwidGV4dC13aGl0ZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2lnblVwQnRuPy5jbGFzc0xpc3QucmVwbGFjZShcImJnLWNvb2wtYmxhY2tcIiwgXCJiZy13aGl0ZVwiKTtcbiAgICAgIHNpZ25VcEJ0bj8uY2xhc3NMaXN0LnJlcGxhY2UoXCJ0ZXh0LXdoaXRlXCIsIFwidGV4dC1jb29sLWJsYWNrXCIpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzY3JvbGxIYW5kbGVyID0gdGhyb3R0bGUoKCkgPT4ge1xuICAgIGlmICh3aW5kb3cuc2Nyb2xsWSA+IDUpIHtcbiAgICAgIG1lZ2FuYXYuY2xhc3NMaXN0LnJlcGxhY2UoXCJiZy10cmFuc3BhcmVudFwiLCBcImJnLXdoaXRlXCIpO1xuICAgICAgaW52ZXJTaWdudXBCdG5Db2xvcnModHJ1ZSk7XG4gICAgICBpbnZlcnRNb2JsZURyb3Bkb3duQ29sb3IodHJ1ZSk7XG5cbiAgICAgIGludmVydFRleHRDb2xsZWN0aW9uLmZvckVhY2goKG4pID0+XG4gICAgICAgIG4uY2xhc3NMaXN0LnJlcGxhY2UoXCJ0ZXh0LXdoaXRlXCIsIFwidGV4dC1jb29sLWJsYWNrXCIpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZWdhbmF2LmNsYXNzTGlzdC5yZXBsYWNlKFwiYmctd2hpdGVcIiwgXCJiZy10cmFuc3BhcmVudFwiKTtcbiAgICAgIGludmVyU2lnbnVwQnRuQ29sb3JzKGZhbHNlKTtcbiAgICAgIGludmVydE1vYmxlRHJvcGRvd25Db2xvcihmYWxzZSk7XG5cbiAgICAgIGludmVydFRleHRDb2xsZWN0aW9uLmZvckVhY2goKG4pID0+XG4gICAgICAgIG4uY2xhc3NMaXN0LnJlcGxhY2UoXCJ0ZXh0LWNvb2wtYmxhY2tcIiwgXCJ0ZXh0LXdoaXRlXCIpXG4gICAgICApO1xuICAgIH1cbiAgfSwgMTUwKTtcblxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHNjcm9sbEhhbmRsZXIpO1xuXG4gIHJldHVybiB7XG4gICAgdGVhcmRvd246ICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsSGFuZGxlciksXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNZWdhbmF2KFxuICB7IHRoZW1lTmFtZSwgYWRkU2VhcmNoQXBpS2V5IH0gPSB7IHRoZW1lTmFtZTogbnVsbCB9XG4pIHtcbiAgY29uc3QgY29udHJvbHMgPSBNZWdhbmF2Q29udHJvbCgpO1xuICBjb25zdCBwYW5lbE9wZW5Db250cm9scyA9IE1vYmlsZVBhbmVsT3BlbkNsaWNrKCk7XG4gIGNvbnN0IHBhbmVsQ2xvc2VDb250cm9scyA9IE1vYmlsZVBhbmVsQ2xvc2VDbGljaygpO1xuICBjb25zdCBzZWFyY2ggPSBNZWdhbmF2U2VhcmNoQXV0b2NvbXBsZXRlKGFkZFNlYXJjaEFwaUtleSk7XG4gIGNvbnN0IHNlYXJjaFN1Z2dlc3Rpb25zID0gTWVnYW5hdlNlYXJjaFN1Z2dlc3Rpb25zKCk7XG5cbiAgY29uc3QgbW9iaWxlRHJvcGRvd25Db250cm9sID0gTWVnYW5hdkNvbnRyb2xNb2JpbGVEcm9wZG93bih7XG4gICAgY2xlYXJQYW5lbHM6ICgpID0+XG4gICAgICBbLi4ucGFuZWxPcGVuQ29udHJvbHMsIC4uLnBhbmVsQ2xvc2VDb250cm9sc10uZm9yRWFjaCgoaSkgPT4gaS5jbGVhcigpKSxcbiAgfSk7XG5cbiAgY29uc3QgY2xvc2VBbGwgPSAoKSA9PlxuICAgIFtcbiAgICAgIG1vYmlsZURyb3Bkb3duQ29udHJvbCxcbiAgICAgIHNlYXJjaFN1Z2dlc3Rpb25zLFxuICAgICAgLi4ucGFuZWxPcGVuQ29udHJvbHMsXG4gICAgICAuLi5wYW5lbENsb3NlQ29udHJvbHMsXG4gICAgICAuLi5jb250cm9scyxcbiAgICAgIC4uLnNlYXJjaCxcbiAgICBdLmZvckVhY2goKGkpID0+IGkuY2xlYXIoKSk7XG5cbiAgY29uc3QgdGVhcmRvd25zID0gW1xuICAgIGRvY3VtZW50U2Nyb2xsKHRoZW1lTmFtZSksXG4gICAgZG9jdW1lbnRDbGljayhjbG9zZUFsbCksXG4gICAgd2luZG93T25CbHVyKGNsb3NlQWxsKSxcbiAgICBtb2JpbGVEcm9wZG93bkNvbnRyb2wsXG4gICAgc2VhcmNoU3VnZ2VzdGlvbnMsXG4gICAgLi4uY29udHJvbHMsXG4gICAgLi4ucGFuZWxPcGVuQ29udHJvbHMsXG4gICAgLi4ucGFuZWxDbG9zZUNvbnRyb2xzLFxuICAgIC4uLnNlYXJjaCxcbiAgXS5tYXAoKGkpID0+IGkudGVhcmRvd24pO1xuXG4gIHJldHVybiAoKSA9PiB0ZWFyZG93bnMuZm9yRWFjaCgodGVhcmRvd24pID0+IHRlYXJkb3duKCkpO1xufVxuIl0sIm5hbWVzIjpbInF1ZXJ5SWQiLCJxdWVyeUlkQWxsIiwiTWVnYW5hdkNvbnRyb2wiLCJjb250cm9scyIsIkFycmF5IiwiZnJvbSIsInBhbmVscyIsIm1kQnJlYWtwb2ludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJob3ZlckVuYWJsZWQiLCJ3aW5kb3ciLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImlzU2VhcmNoQ29udHJvbCIsIm5vZGUiLCJkYXRhc2V0IiwiY29udHJvbCIsImlzU2VhcmNoUGFuZWxPcGVuIiwic2VhcmNoUGFuZWwiLCJxdWVyeVNlbGVjdG9yIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJjb250cm9sc0hhdmVGb2N1cyIsInNvbWUiLCJhY3RpdmVFbGVtZW50IiwiaG92ZXIiLCJwYW5lbCIsIm9wZW4iLCJjbGFzc2VzIiwicmVwbGFjZSIsInJldmVyc2UiLCJzZXRBdHRyaWJ1dGUiLCJtb3VzZWVudGVySGFuZGxlciIsIm1vdXNlbGVhdmVIYW5kbGVyIiwiY2xpY2tIYW5kbGVyIiwiZm9yRWFjaCIsImFyaWFFeHBhbmRlZCIsImdldEF0dHJpYnV0ZSIsIm9wZW5lZEJ5SG92ZXIiLCJzZWFyY2hJbnB1dCIsImZvY3VzIiwibWFwIiwiaXRlbSIsInBhcmVudE5vZGUiLCJjbGljayIsImFkZEV2ZW50TGlzdGVuZXIiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNsZWFyIiwiZmxhdCIsInNjcm9sbExvY2siLCJNZWdhbmF2Q29udHJvbE1vYmlsZURyb3Bkb3duIiwiY2xlYXJQYW5lbHMiLCJkcm9wZG93biIsIm1lbnVJY29uIiwiY2xvc2VJY29uIiwiZGlzYWJsZVBhZ2VTY3JvbGwiLCJlbmFibGVQYWdlU2Nyb2xsIiwidG9nZ2xlIiwicmVtb3ZlIiwiYWRkIiwiY2xvc2VDb250cm9scyIsIm9wZW5Db250cm9scyIsImJ0biIsIm9wZW5CdG4iLCJzdHlsZSIsImhlaWdodCIsImZpbmQiLCJoYW5kbGVyIiwicmVtc1RvUGl4ZWxWYWx1ZSIsIm1lZ2FuYXZIZWlnaHQiLCJjbG9zZUJ0biIsImlubmVySGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0IiwiQWRkU2VhcmNoQ2xpZW50IiwiaW5pdCIsImlucHV0IiwiY29udGFpbmVyIiwibGlzdENvbnRhaW5lciIsImNsaWVudCIsInNldEFuYWx5dGljc1RhZyIsInNldFRocm90dGxlVGltZSIsImNsZWFyUmVzdWx0cyIsImlubmVySFRNTCIsInRvZ2dsZUNsZWFyQnRuIiwicXVlcnkiLCJsZW5ndGgiLCJtYXJrUXVlcnlJblN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uVmFsdWUiLCJ0b0xvd2VyQ2FzZSIsIm5hdmlnYXRlVG9VcmwiLCJxIiwibG9jYXRpb24iLCJmb2N1c05leHQiLCJpbmRleCIsIm5leHRTdWdnZXN0aW9uIiwiZm9jdXNQcmV2aW91cyIsInByZXZpb3VzSW5kZXgiLCJwcmV2aW91c1N1Z2dlc3Rpb24iLCJyZW5kZXJSZXN1bHRzIiwicmVzdWx0cyIsImlzQXJyYXkiLCJzdWdnZXN0aW9ucyIsIml0ZW1zIiwic3VnZ2VzdGlvbiIsImxpIiwiY3JlYXRlRWxlbWVudCIsImJ1dHRvbiIsInR5cGUiLCJ2YWx1ZSIsInN1Z2dlc3Rpb25JbmRleCIsImUiLCJrZXkiLCJhcHBlbmRDaGlsZCIsImtleXVwSGFuZGxlciIsInRhcmdldCIsImNsZWFySGFuZGxlciIsImFwaUtleSIsImNvbnNvbGUiLCJsb2ciLCJmaWx0ZXIiLCJpIiwicGFyZW50IiwiRFJBR19CVUZGRVIiLCJnZXRUcmFuc2xhdGVYIiwiRE9NTWF0cml4IiwidHJhbnNmb3JtIiwidXBkYXRlVHJhbnNsYXRlWCIsImRyYWdMZWZ0Qm91bmRhcnkiLCJ0cmFuc2xhdGVYIiwidGhyZXNob2xkIiwiZHJhZ1JpZ2h0Qm91bmRhcnkiLCJpdGVtc1dpZHRoIiwid2luZG93V2lkdGgiLCJNYXRoIiwiYWJzIiwiZ2V0RGlzdGFuY2UiLCJ0b3VjaFN0YXJ0WCIsImNoYW5nZWRUb3VjaGVzIiwiY2xpZW50WCIsIndpdGhpbkJ1ZmZlciIsImRpc3RhbmNlIiwiZ2V0SXRlbXNUb3RhbFdpZHRoIiwibm9kZXMiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsInJlZHVjZSIsImFjYyIsInZhbCIsIk1lZ2FuYXZTZWFyY2hTdWdnZXN0aW9ucyIsInN1Z2dlc3Rpb25zVG9nZ2xlIiwibGlzdCIsImxpc3RJdGVtcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJkcmFnTGVmdCIsImN1cnJlbnRUcmFuc2xhdGVYIiwicm91bmQiLCJkcmFnTGVmdEVuZCIsImRyYWdSaWdodCIsImxpc3RXaWR0aCIsIml0ZW1zVG90YWxXaWR0aCIsImRyYWdSaWdodEVuZCIsInRvdWNoc3RhcnRIYW5kbGVyIiwidG91Y2hlcyIsInRvdWNobW92ZUhhbmRsZXIiLCJ0b3VjaGVuZEhhbmRsZXIiLCJmb2N1c1N1Z2dlc3Rpb25zSGFuZGxlciIsImJsdXJTdWdnZXN0aW9uc0hhbmRsZXIiLCJyZWxhdGVkVGFyZ2V0Iiwid2hlZWxIYW5kbGVyIiwiZGVsdGFZIiwicmVtU3RyaW5nIiwicGFyc2VGbG9hdCIsImZvbnRTaXplIiwicm9vdCIsInRocm90dGxlIiwiTW9iaWxlUGFuZWxPcGVuQ2xpY2siLCJNb2JpbGVQYW5lbENsb3NlQ2xpY2siLCJNZWdhbmF2U2VhcmNoQXV0b2NvbXBsZXRlIiwid2luZG93T25CbHVyIiwiY2xvc2VBbGwiLCJvbmJsdXIiLCJkb2N1bWVudENsaWNrIiwibWVnYW5hdiIsImRvY3VtZW50U2Nyb2xsIiwidGhlbWVOYW1lIiwibmF2SXRlbXMiLCJjb250cm9sTW9iaWxlRHJvcGRvd25NZW51IiwiY29udHJvbE1vYmlsZURyb3Bkb3duQ2xvc2UiLCJzaWduVXBCdG4iLCJpbnZlcnRUZXh0Q29sbGVjdGlvbiIsImludmVydE1vYmxlRHJvcGRvd25Db2xvciIsImludmVydCIsIndoaXRlVG9CbGFjayIsImJsYWNrVG9XaGl0ZSIsImludmVyU2lnbnVwQnRuQ29sb3JzIiwic2Nyb2xsSGFuZGxlciIsInNjcm9sbFkiLCJuIiwiTWVnYW5hdiIsImFkZFNlYXJjaEFwaUtleSIsInBhbmVsT3BlbkNvbnRyb2xzIiwicGFuZWxDbG9zZUNvbnRyb2xzIiwic2VhcmNoIiwic2VhcmNoU3VnZ2VzdGlvbnMiLCJtb2JpbGVEcm9wZG93bkNvbnRyb2wiLCJ0ZWFyZG93bnMiXSwic291cmNlUm9vdCI6IiJ9
|