// EXTERNAL MODULE: ./node_modules/react/index.js var react = __webpack_require__(7294); // EXTERNAL MODULE: ./node_modules/react-dom/index.js var react_dom = __webpack_require__(3935); // EXTERNAL MODULE: ./node_modules/react-redux/es/index.js var es = __webpack_require__(533); // EXTERNAL MODULE: ./node_modules/redux/es/redux.js + 1 modules var redux = __webpack_require__(879); // EXTERNAL MODULE: ./node_modules/redux-logger/dist/redux-logger.js var redux_logger = __webpack_require__(4500); // EXTERNAL MODULE: ./node_modules/@avalara-mtg/helpers/lib/ui/index.js var ui = __webpack_require__(7697); // EXTERNAL MODULE: ./node_modules/redux-thunk/es/index.js var redux_thunk_es = __webpack_require__(3894); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js var defineProperty = __webpack_require__(6156); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js var asyncToGenerator = __webpack_require__(2137); // EXTERNAL MODULE: ./node_modules/@babel/runtime/regenerator/index.js var regenerator = __webpack_require__(7757); var regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator); // EXTERNAL MODULE: ./node_modules/uuid/dist/esm-browser/v4.js + 3 modules var v4 = __webpack_require__(8721); // EXTERNAL MODULE: ./node_modules/@avalara-mtg/helpers/lib/shared/index.js var shared = __webpack_require__(4431); ;// CONCATENATED MODULE: ./src/shared/env.js /* harmony default export */ const env = ({ dev: { API: '//localhost:8080', AVAFORM_TEMPLATE_API: 'https://cdn.avlr.net/react/avaform-templates', AVAFORM_TYPEAHEAD_API: 'https://cdn.avlr.net/react/avaform-typeahead/dev', AVATAX_API: 'https://avatax-dev.avlr.net/avalara/avatax/getresponse', BUSINESS_LICENSE_INDUSTRIES_STORAGE: '/avaformbusinesslicensesindustries.json', CONNECT0R_API: 'https://miles.develop.avlr.net/api/connectors/search', ELOQUA_API: 'https://eloqua-dev.avlr.net/avalara/eloqua/getresponse', MAXMIND_API: 'https://js.maxmind.com/geoip/v2.1/', MILES_API: 'https://miles.develop.avlr.net/api', MARKETING_API: 'https://api.marketing.avalara.com/leads/create', MILES_MAXMIND_BACKUP: 'https://miles.develop.avlr.net/geoIp/lookup', SUMO_API: 'https://logger-develop.avlr.net', SUBMISSION_SERVICES: 'https://cdn.avlr.net/react/micro-service/submission-develop/react-micro-service-bundle.js' }, prod: { API: '//avalara.com', AVAFORM_TEMPLATE_API: 'https://cdn.avlr.net/react/avaform-templates', AVAFORM_TYPEAHEAD_API: 'https://cdn.avlr.net/react/avaform-typeahead/prod', AVATAX_API: 'https://avatax-prod.avlr.net/avalara/avatax/getresponse', BUSINESS_LICENSE_INDUSTRIES_STORAGE: '/avaformbusinesslicensesindustries.json', CONNECT0R_API: 'https://miles.marketing.avalara.com/api/connectors/search', ELOQUA_API: 'https://eloqua-prod.avlr.net/avalara/eloqua/getresponse', MAXMIND_API: 'https://js.maxmind.com/geoip/v2.1/', MILES_API: 'https://miles.marketing.avalara.com/api', MARKETING_API: 'https://api.marketing.avalara.com/leads/create', MILES_MAXMIND_BACKUP: 'https://api.marketing.avalara.com/geoIp/lookup', SUMO_API: 'https://logger-prod.avlr.net', SUBMISSION_SERVICES: 'https://cdn.avlr.net/react/micro-service/submission-prod/react-micro-service-bundle.js' }, stage: { API: '//localhost:0880', AVAFORM_TEMPLATE_API: 'https://cdn.avlr.net/react/avaform-templates', AVAFORM_TYPEAHEAD_API: 'https://cdn.avlr.net/react/avaform-typeahead/stage', AVATAX_API: 'https://avatax-stage.avlr.net/avalara/avatax/getresponse', BUSINESS_LICENSE_INDUSTRIES_STORAGE: '/avaformbusinesslicensesindustries.json', CONNECT0R_API: 'https://miles-stage.avlr.net/api/connectors/search', ELOQUA_API: 'https://eloqua-stage.avlr.net/avalara/eloqua/getresponse', MAXMIND_API: 'https://js.maxmind.com/geoip/v2.1/', MILES_API: 'https://miles-stage.avlr.net/api', MARKETING_API: 'https://api.marketing.avalara.com/leads/create', MILES_MAXMIND_BACKUP: 'https://miles-stage.avlr.net/geoIp/lookup', SUMO_API: 'https://logger-develop.avlr.net', // to be updated SUBMISSION_SERVICES: 'https://cdn.avlr.net/react/micro-service/submission-stage/react-micro-service-bundle.js' } }); ;// CONCATENATED MODULE: ./src/config.js function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var NODE_ENV = (/* unused pure expression or super */ null && ("production")); var AVA_ENV = !(0,ui/* checkIfIsDevelop */.QK)() ? 'prod' : 'dev'; if (window && window.location && window.location.href.indexOf('stage') !== -1) { AVA_ENV = 'stage'; } // if testing, just grab local config: var config = _objectSpread({}, env[AVA_ENV]); window.ava = window.ava || {}; window.ava.react = (0,ui/* checkIfIsDevelop */.QK)() ? config : null; /* harmony default export */ const src_config = (config); ;// CONCATENATED MODULE: ./src/shared/api-settings.js var apiSettings = { timeout: 90000 }; /* harmony default export */ const api_settings = (apiSettings); ;// CONCATENATED MODULE: ./src/api/logger-api.js /* provided dependency */ var process = __webpack_require__(4155); function logger_api_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function logger_api_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? logger_api_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : logger_api_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // eslint-disable-next-line import/no-cycle var browserInfo = null; var sessionId = (0,ui/* getAdobeVisitorId */.Su)() || (0,v4/* default */.Z)(); var callToSumoLogger = /*#__PURE__*/function () { var _ref = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(event) { var sumoEndpoint, url, response; return regenerator_default().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (browserInfo === null) { browserInfo = (0,ui/* getBrowserInfo */.S7)(); } _context.prev = 1; sumoEndpoint = src_config.SUMO_API; url = ''; if (!(0,ui/* checkIfIsTesting */.bE)()) { url = window.location.href; } _context.next = 7; return (0,shared/* fetch */.he)(sumoEndpoint, { body: JSON.stringify(logger_api_objectSpread(logger_api_objectSpread({}, event), {}, { url: url, browserInfo: browserInfo, sessionId: sessionId, sumoParam: !(0,ui/* checkIfIsDevelop */.QK)() ? 'AVAFORM_PROD_ENDPOINT' : 'AVAFORM_DEV_ENDPOINT', srcCategory: !(0,ui/* checkIfIsDevelop */.QK)() ? 'PROD/MTG/avaform' : 'DEV/MTG/avaform', testing: ui/* checkIfIsTesting */.bE })), // this inclusion of header is overwriting the cors haders // 'application/json' is not in accepted types for cors // headers: { // 'Content-Type': 'application/json', // }, method: 'POST' }, api_settings.timeout).then(function (result) { return result; }); case 7: response = _context.sent; if (!response.ok) { /* eslint-disable no-console */ console.log('Bad Connection to AWS', response); } _context.next = 14; break; case 11: _context.prev = 11; _context.t0 = _context["catch"](1); console.log('Unexpected Error - SumoLogger', _context.t0); case 14: case "end": return _context.stop(); } } }, _callee, null, [[1, 11]]); })); return function callToSumoLogger(_x) { return _ref.apply(this, arguments); }; }(); var loggingFilter = function loggingFilter(event) { if ((0,ui/* checkForDebug */.HM)()) { console.log(event); } if ((!process || process && !process.env || process && process.env && "production" !== 'test') && (event.level !== 'info' || (0,ui/* checkForDebug */.HM)())) { callToSumoLogger(event); } }; /* harmony default export */ const logger_api = (loggingFilter); ;// CONCATENATED MODULE: ./src/reducers/avatax.js function avatax_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function avatax_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? avatax_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : avatax_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // import sumoLog from '../api/sumo-logger'; var defaultState = { addressValidation: {}, rate: null }; // eslint-disable-next-line func-names /* harmony default export */ function avatax() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState; var action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'AVATAX_MLT_RESPONSE': { var formId = action.formId, response = action.response; var address = response.address, rate = response.rate; var newState = state; var newAddressCapture = newState.addressValidation; var captureAddress = [address].concat(newAddressCapture[formId] || []); return avatax_objectSpread(avatax_objectSpread({}, newState), {}, { addressValidation: avatax_objectSpread(avatax_objectSpread({}, newState.addressValidation), {}, (0,defineProperty/* default */.Z)({}, formId, captureAddress)), rate: avatax_objectSpread(avatax_objectSpread({}, newState.rate), {}, (0,defineProperty/* default */.Z)({}, formId, rate)) }); } default: return state; } } ;// CONCATENATED MODULE: ./src/reducers/brite-verify.js function brite_verify_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function brite_verify_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? brite_verify_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : brite_verify_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var brite_verify_defaultState = { fail: null, success: null, unknown: null }; // eslint-disable-next-line func-names /* harmony default export */ function brite_verify() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : brite_verify_defaultState; var action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'BRITE_VERIFY_RESPONSE': { var newState = brite_verify_objectSpread({}, state); var data = action.data, url = action.url, email = action.email, status = action.status; return brite_verify_objectSpread(brite_verify_objectSpread({}, newState), {}, (0,defineProperty/* default */.Z)({}, status, { data: data, email: email, url: url })); } default: return state; } } // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js var esm_typeof = __webpack_require__(484); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js + 3 modules var slicedToArray = __webpack_require__(4699); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 3 modules var toConsumableArray = __webpack_require__(7329); ;// CONCATENATED MODULE: ./src/constants/form-configs.js var formConfigs = { attribution_engine: 'marvar', additional: false, additional_required: false, additional_query: null, autoFocus: false, avaform_template: null, button_label: null, brazil: false, callback: null, campaign_id: null, campaign_name: null, company_profile: false, connector_id: null, connector_name: null, connector_search: false, contact_method: null, container: null, // HTML Element countries: false, countries_required: false, country_label: null, country_of_interest: false, custom0: null, custom0_eloqua: null, custom0_merge: false, custom0_required: false, custom0_validate: false, custom_validators: false, data_local: false, debug: false, disable_fade: false, ecommerce: false, email_validation: false, emea: false, employee_size: 0, english: false, event_identifier: null, form_name: null, form: null, goal_type: null, india: false, industry_id: null, inline_fields: null, ip: null, language: null, lead_status: null, lsmr: null, lso: null, mask_sensitive_fields: null, naics: null, noSubmission: false, offer: null, opp_subtype: null, opp_type: null, optin: false, optin_checked: false, ost_poi: null, partnersource: null, partner_role: null, poi: null, poi_menu: false, poi_menu_default: null, poi_menu_label: '', poi_menu_values: null, progressive_chain: null, progressive_profiling: false, rateLookupForm: false, // Current use if MLT Rate Lookup redirecturl: null, referrer: null, success: null, soho: null, template: null, theme: null, qs: null, query_string: null }; /* harmony default export */ const form_configs = (formConfigs); ;// CONCATENATED MODULE: ./src/constants/form-data.js function form_data_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function form_data_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? form_data_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : form_data_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } /* ***** TEMPLATE DESCRIPTION ***** */ // EMAILONLY: { // Template key value. Used on INIT_FORM_APPLICATION to get the data to be used on render // chilipiper: { // router: string, // } // classes: [], // classes to add to the form container // configs: { // set configs. Will be over written by configs passed from AEM. Defaults can be set in here. // ...FORMCONFIGS, // Default form config data. // poi: 'Avatax', // Example default value // offer: 'NewsLetter', // Example default value // }, // description: null, // Used in the form-header container // // // Array of objects to be used to set the form fields. // // Array<{ Object }> will be stacked. // // An Array> will be set in columns. Array<{ Object }> will be stacked. // fields: [ // Field attributes // { // containsGdpr: true, // This will trigger GDPR checkbox inside the email container and not in the submit container // customValidation: RegExp // can pass custom RegExp validation pattern // displayText: 'Please enter your business email', // This sets the display text for the field // id: 'email', // This sets the id of the input field // links: [ // Array of links to be set. Used for terms of service // { // href: 'avalara.com', // text: 'Lear more', // }, // ], // options: [ // Array of values to be used for select-one or multi-select fields // { // display: 'Option 1 display text', // value: 'option value', // }, // ] // placeholder: 'Please enter your business email', // Sets the placeholder text for the field // required: true, // indicates if is required // type: 'email', // Indicates field type. This is used to pull the correct fields/**.js file. // }, // OR // [ // Any array inside the array will allow for field column view instead of field column // { // containsGdpr: true, // This will trigger GDPR checkbox inside the email container and not in the submit container // customValidation: RegExp // can pass custom RegExp validation pattern // description: string or Array - allows single sentence to be added before the input field - currently only available for fieldset options // displayText: 'Please enter your business email', // This sets the display text for the field // displayTextClass: Array - Allows classes to be passed into the display text span tag to be targeted with CSS // id: 'email', // This sets the id of the input field // links: [ // Array of links to be set. Used for terms of service // { // href: 'avalara.com', // text: 'Lear more', // }, // ], // options: [ // Array of values to be used for select-one or multi-select fields // { // display: 'Option 1 display text', // value: 'option value', // }, // ] // placeholder: 'Please enter your business email', // Sets the placeholder text for the field // required: true, // indicates if is required // title: string // Allows a title to be added to the field - Currently only available for fieldset options // type: 'text', // Indicates field type. This is used to pull the correct fields/**.js file. // Option fieldset will trigger a render option to group items in a field set. Should ideally be used for checkbox and radio options only. // } // ] // ], // fieldsRemove: [], // array -> Array of fields that are removed from the copied fields. This is used with "fieldsReplicate". // fieldsReplicate: // string -> name of the form in which the fields are to be copied. // fieldsOverwrite: similar to fields. This is used with fieldsReplicate. This is an array of objects that would over-write existing fields that were copied. This is ideal to use when you are copying a series of fields but need one or two different different. // id: 'avaform', // Form id attribute // name: 'EMAILONLY', // Form name attribute // redirecturl: null, // If set the user will be redirected to the set URL. If not set, a text message will be displayed. // submit: { // Submit attributes // displayText: 'Signup', // Text to show on the submit button // position: 'center' | 'left' | 'right' // button alignment // }, // thankyou: { // Thank you attributes // title: 'Thank you' // Text to display for message // subTitle: 'Success' // Text to display for message // message: 'Thank you for signing up.', // Text to display after form submission // }, // template: { // template data attributes // name: 'EMAILONLY', // form name attribute // description: 'Email only template', // displayName: 'Avaform email only inline layout', // }, // theme: { // Theme attributes // layout: 'inline', // Layout type. Attribute passed to the styled-components for layout column or inline // showLoader: false, // will show/not show loader on submission // offset: string -> right/left/null layout option for inline forms to allow more field size than button size // }, // title: 'Avaform signup form', // Title to be used in the form-header container // }, var AVAFORMS = { AVAFORMEMAIL: { classes: [], description: null, fields: [{ displayText: 'Please enter your business email', id: 'email', placeholder: 'Please enter your business email', required: true, type: 'email' }], id: 'avaform-email-only', name: 'AvaForm Email Test', redirecturl: null, submit: { displayText: 'Signup' }, thankyou: { message: 'Thank you for signing up.' }, template: { name: 'AVAFORMEMAIL', description: 'Email only template', displayName: 'Avaform email only inline layout' }, theme: { layout: 'inline', showLoader: false }, title: 'Avaform email form' }, AVAFORMEMAILHIDDEN: { classes: [], description: null, fields: [{ id: 'firstName', required: false, type: 'hidden', value: 'Bruce' }, { id: 'lastName', required: false, type: 'hidden', value: 'Wayne' }, { displayText: 'Please enter your business email', id: 'email', placeholder: 'Please enter your business email', required: true, type: 'email' }], id: 'avaform-hidden-field-demo', name: 'AvaForm Email Hidden Test', redirecturl: null, submit: { displayText: 'Signup' }, thankyou: { message: 'Thank you for signing up.' }, template: { name: 'AVAFORMEMAILHIDDEN', description: 'Email only template', displayName: 'Avaform email only inline layout' }, theme: { layout: 'inline', showLoader: false }, title: 'Avaform email hidden value form' }, AVAFORMDEMO: { description: 'This is a demo form to use with test suite', fields: [{ displayText: 'Please enter your full name', id: 'fullname', placeholder: 'Please enter your full name', required: true }, { displayText: 'Please enter your first name', id: 'firstName', placeholder: 'Please enter your first name', required: true }, { displayText: 'Please enter your last name', id: 'lastName', placeholder: 'Please enter your last name', required: true }, { displayText: 'Please enter your business email', id: 'email', placeholder: 'Please enter your business email', required: true, type: 'email' }, { displayText: 'Please enter company name', id: 'company', placeholder: 'Please enter company name', required: true }, { displayText: 'Please enter your country', id: 'country', placeholder: 'Please enter your country', required: true, type: 'text' }, { displayText: 'Tell us what you think', id: 'additionalInformation', placeholder: 'Tell us what you think', type: 'textarea', required: false }], id: 'avaform-demo', name: 'AvaForm Demo', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'AVAFORMDEMO', description: 'Generic Avaform layout', displayName: 'Avaform generic layout' }, title: 'Avaform Demo Test Form' }, AVAFORMLANGUAGE: { description: 'This is a demo form to use to show locale switch', fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Please enter your full name', required: true }, [{ displayText: 'First name', id: 'firstName', placeholder: 'Please enter your first name', required: true }, { displayText: 'Last name', id: 'lastName', placeholder: 'Please enter your last name', required: true }], { displayText: 'Business Email', id: 'email', placeholder: 'Please enter your business email', required: true, type: 'email' }, { displayText: 'Company', id: 'company', placeholder: 'Please enter company name', required: true }, { displayText: 'Country', id: 'country', placeholder: 'Please enter your country', required: true, type: 'text' }, { displayText: 'Comments', id: 'additionalInformation', placeholder: 'Tell us what you think', type: 'textarea', required: false }], id: 'avaform-language-demo', name: 'AvaForm Locale Demo', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'AVAFORMLANGUAGE', description: 'Generic Avaform layout', displayName: 'Avaform generic layout' }, title: 'Avaform Locale Test Form' }, AVAFORMTEST: { description: 'This is a test form to use with Avaform', fields: [{ displayText: 'Please enter your full name', id: 'fullname', placeholder: 'Please enter your full name', required: true }, { displayText: 'Please enter your first name', id: 'firstName', placeholder: 'Please enter your first name', required: true }, { displayText: 'Please enter your last name', id: 'lastName', placeholder: 'Please enter your last name', required: true }, { displayText: 'Please enter your business email', id: 'email', placeholder: 'Please enter your business email', required: true, type: 'email' }, { displayText: 'Please enter company name', id: 'company', placeholder: 'Please enter company name', required: true }, { displayText: 'Please enter your phone number', id: 'phone', placeholder: 'Please enter your phone number', required: true }, { displayText: 'Please enter your country', id: 'country', placeholder: 'Please enter your country', required: true, type: 'text' }, { displayText: 'Please select your state', id: 'state', placeholder: 'Please select your state', required: true, type: 'select', options: [{ display: 'Alabama', value: 'AL' }, { display: 'Massachusetts', value: 'MA' }, { display: 'Washington', value: 'WA' }] }, { displayText: 'Radio field', id: 'radio-field', required: true, type: 'radio', value: 'radio value' }, { displayText: 'Tell us what you think', id: 'additionalInformation', placeholder: 'Tell us what you think', type: 'textarea', required: false }, { displayText: 'Connector Selector', id: 'connector_id', placeholder: 'Connector Selector', required: true }, { displayText: 'Are you located in EU?', id: 'eu', value: 'inEurope', placeholder: 'Sign me up for Free Trial', type: 'checkbox', required: true }, { displayText: 'Do you agree to this form?', id: 'terms_of_service', value: 'agrees', placeholder: 'Sign me up for Free Trial', type: 'checkbox', required: true }], id: 'avaform-test', name: 'AvaForm Test', redirecturl: null, submit: { displayText: 'Submit' }, thankyou: { message: 'Thank you for your submission. Someone will be in contact with you shortly', title: 'Thank you' }, template: { name: 'AVAFORMTEST', description: 'Generic Avaform layout', displayName: 'Avaform generic layout' }, title: 'Avaform Test Form' }, AVAFORMCOLUMN: { description: 'This is a test form to use with Avaform', fields: [{ displayText: 'Please enter your full name', id: 'fullname', placeholder: 'Please enter your full name', required: true }, [{ displayText: 'Please enter your first name', id: 'firstName', placeholder: 'Please enter your first name', required: true }, { displayText: 'Please enter your last name', id: 'lastName', placeholder: 'Please enter your last name', required: true }], { displayText: 'Please enter your business email', id: 'email', placeholder: 'Please enter your business email', required: true, type: 'email' }, { displayText: 'Please enter company name', id: 'company', placeholder: 'Please enter company name', required: true }, { displayText: 'Please enter your phone number', id: 'phone', placeholder: 'Please enter your phone number', required: true }, { displayText: 'Please enter your country', id: 'country', placeholder: 'Please enter your country', required: true, type: 'text' }, [{ displayText: 'City', id: 'city', placeholder: 'Please enter your city', required: true }, { displayText: 'Please select your state', id: 'state', placeholder: 'Please select your state', required: true, type: 'select', options: [{ display: 'Alabama', value: 'AL' }, { display: 'Massachusetts', value: 'MA' }, { display: 'Washington', value: 'WA' }] }, { displayText: 'Postal code', id: 'zip_code', placeholder: 'Please enter your zip_code', required: true }], { displayText: 'Tell us what you think', id: 'additionalInformation', placeholder: 'Tell us what you think', type: 'textarea', required: false }], id: 'avaform-column-view', name: 'AvaForm Test', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'AVAFORMCOLUMN', description: 'Avaform column layout test', displayName: 'Avaform column layout' }, title: 'Avaform Column layout Test Form' }, BASIC: { description: '', fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Name', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }, { displayText: 'Company', id: 'company', placeholder: 'Company', required: true }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }], id: 'avaform-basic', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'BASIC', description: '', displayName: '' }, title: '' }, BASICWITHINDUSTRYTEST: { description: '', fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Name', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }, { displayText: 'Company', id: 'company', placeholder: 'Company', required: true }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }, { displayText: 'Industry', id: 'industry', placeholder: 'Industry', required: true, type: 'select', options: [{ display: 'Accounting', value: 'Accounting' }, { display: 'Beverage & Alcohol', value: 'Beverage Alcohol' }, { display: 'Communications', value: 'Communications' }, { display: 'Construction', value: 'Construction' }, { display: 'Energy', value: 'Energy' }, { display: 'Lodging & Hospitality', value: 'Lodging & Hospitality' }, { display: 'Manufacturing', value: 'Manufacturing' }, { display: 'Restaurant Industry', value: 'Accommodation & Food Services' }, { display: 'Retail', value: 'Retail' }, { display: 'Software', value: 'Software' }, { display: 'Wholesale & Distribution', value: 'Wholesale & Distribution' }, { display: 'Other', value: 'Other' }] }], id: 'basic-with-industry', name: 'Avaform basic industry required template test', redirecturl: null, submit: { displayText: 'Submit' }, thankyou: { message: 'Thank you for your submission.' }, template: { name: 'BASICWITHINDUSTRYTEST', description: 'Basic industry required', displayName: 'Basic industry required' }, theme: { layout: null, showLoader: false }, title: '' }, BASICSUBMISSIONLIMITTEST: { configs: { submissionLimitCap: 10, submissionLimitId: 'BASICSUBMISSIONLIMITTEST2', submissionLimitThankyouMessage: 'Thank you for registering', submissionLimitDisabledMessage: 'Thank you for your interest but the number of registrations has been met.', submissionEndDate: '' }, description: '', fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Name', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }, { displayText: 'Company', id: 'company', placeholder: 'Company', required: true }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }], id: 'avaform-basic', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'BASIC', description: '', displayName: '' }, title: '' }, BASICWITHBUSINESS: { description: '', fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Name', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }, { displayText: 'Company', id: 'company', placeholder: 'Company', required: true }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }], id: 'avaform-basic', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'BASIC', description: '', displayName: '' }, title: '' }, BASICWITHWEBSITE: { description: '', fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Name', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }, { displayText: 'Company', id: 'company', placeholder: 'Company', required: true }, { displayText: 'Website', id: 'C_website', placeholder: 'Website', type: 'text', required: false }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }], id: 'avaform-basic', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'BASIC', description: '', displayName: '' }, title: '' }, BASICWITHWEBSITEREQUIRED: { description: '', fields: [], fieldsOverwrite: [{ displayText: 'Website', id: 'C_website', placeholder: 'Website', type: 'text', required: true }], fieldsReplicate: 'BASICWITHWEBSITE', id: 'avaform-basic', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'BASIC', description: '', displayName: '' }, title: '' }, BASICMODAL: { description: '', fields: [], fieldsReplicate: 'BASIC', id: 'avaform-basic-modal', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'BASICMODAL', description: '', displayName: '' }, title: '' }, BASICWITHCOMMENTS: { description: '', fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Name', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }, { displayText: 'Company', id: 'company', placeholder: 'Company', required: true }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }, { displayText: 'Comments', id: 'additionalInformation', placeholder: 'Comments', required: false, type: 'textarea' }], id: 'avaform-basic-with-comment', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'BASICWITHCOMMENTS', description: '', displayName: '' }, title: '' }, BASICWITHTOS: { description: '', fields: [], fieldsAppend: [{ displayText: 'Country', id: 'country', placeholder: 'Country', type: 'select', required: true }, { displayText: 'Comments', id: 'additionalInformation', placeholder: 'Comments', required: false, type: 'textarea' }, { displayText: 'I accept the Terms and Conditions.', id: 'terms_of_service', links: [{ href: 'https://www.avalara.com/us/en/legal/site-terms.html', text: 'Terms and Conditions' }], required: true, type: 'checkbox' }], fieldsReplicate: 'BASIC', id: 'avaform-basic-with-tos', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'BASICWITHTOS', description: '', displayName: '' }, title: '' }, BASICPLAIN: { description: '', fields: [], fieldsReplicate: 'BASIC', fieldsOverwrite: [{ displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }], id: 'avaform-basic-plain-phone-field', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'BASICPLAIN', description: '', displayName: '' }, title: '' }, CHAT: { configs: form_data_objectSpread(form_data_objectSpread({}, form_configs), {}, { contact_method: 'Chat' }), description: '', fields: [], id: 'avaform-chat', fieldsReplicate: 'BASIC', name: '', redirecturl: null, submit: { displayText: 'Get Started' }, template: { name: 'CHAT', description: '', displayName: '' }, title: '' }, CHATSIMPLE: { description: '', fields: [], fieldsReplicate: 'BASIC', fieldsRemove: ['phone'], id: 'avaform-chat-simple', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'BASICPLAIN', description: '', displayName: '' }, title: '' }, CHILIPIPER: { description: '', fields: [], fieldsReplicate: 'BASIC', id: 'chilipiper', name: '', redirecturl: null, chilipiper: { router: 'contact-me-router' }, scripts: ['https://js.chilipiper.com/marketing.js'], submit: { displayText: 'Schedule a call' }, template: { name: 'CHILIPIPER', description: '', displayName: '' }, title: '' }, DEFAULT: { description: 'This is a test form to use with Avaform', fields: [{ displayText: 'Please enter your full name', id: 'fullname', placeholder: 'Please enter your full name', required: true }, { displayText: 'Please enter your business email', id: 'email', placeholder: 'Please enter your business email', required: true, type: 'email' }, { displayText: 'Please enter company name', id: 'company', placeholder: 'Please enter company name', required: true }, { displayText: 'Please enter your phone number', id: 'phone', placeholder: 'Please enter your phone number', required: true }], id: 'avaform-default', name: 'AvaForm Sample Test', redirecturl: null, submit: { displayText: 'Get Started' }, template: { name: 'DEFAULT', description: 'Default Avaform layout', displayName: 'Avaform default layout' }, thankyou: { message: 'Thank you for your submission. Someone will be in contact with you shortly.' }, title: 'Avaform default test form' }, EMAILONLYREACT: { classes: [], configs: form_data_objectSpread(form_data_objectSpread({}, form_configs), {}, { poi: 'Avatax', offer: 'Newsletter' }), description: null, fields: [{ containsGdpr: true, displayText: 'Please enter your business email', id: 'email', placeholder: 'Please enter your business email', required: true, type: 'email' }], id: 'avaform-email-only-react', name: 'EMAILONLY', redirecturl: null, submit: { displayText: 'Signup' }, thankyou: { title: 'Thank you! You\'re signed up.' }, template: { name: 'EMAILONLYREACT', description: 'Email only template', displayName: 'Avaform email only inline layout' }, theme: { layout: null, offset: { position: 'left' }, showLoader: false } }, EMAILONLYCOLUMN: { classes: [], configs: form_data_objectSpread(form_data_objectSpread({}, form_configs), {}, { poi: 'Avatax', offer: 'Newsletter' }), description: null, fields: [{ containsGdpr: true, displayText: 'Please enter your business email', id: 'email', placeholder: 'Please enter your business email', required: true, type: 'email' }], id: 'email-only-column', name: 'EMAILONLYCOLUMN', redirecturl: null, submit: { displayText: 'Signup' }, thankyou: { title: 'Thank you! You\'re signed up.' }, template: { name: 'EMAILONLYCOLUMN', description: 'Email only template', displayName: 'Avaform email only column layout' } }, EVENTS: { description: '', fields: [], fieldsReplicate: 'BASIC', fieldsAppend: [{ displayText: 'Events', id: 'events', options: [], placeholder: 'Events', required: true, type: 'select' }], id: 'avaform-events', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'BASIC', description: '', displayName: '' }, title: '' }, INITTEST: { classes: [], description: null, fields: [], id: 'init-test', name: 'AvaForm Init Test', redirecturl: null, submit: { displayText: 'Signup' }, thankyou: { message: 'Thank you for signing up.' }, template: { name: 'INITTEST', description: 'Email only template', displayName: 'Avaform email only inline layout' }, theme: { layout: 'inline', showLoader: false }, title: 'Avaform init test form' }, INTERNALPARTNERREFERRAL: { "description": "", "fields": [{ "displayText": "Prospect Name", "id": "fullname", "placeholder": "Prospect Name", "required": true }, { "displayText": "Prospect Title", "id": "title", "placeholder": "Prospect Title", "required": false }, { "displayText": "Prospect Email", "id": "email", "placeholder": "Prospect Email", "required": true, "type": "email" }, { "displayText": "Prospect Company", "id": "company", "placeholder": "Prospect Company", "required": true }, { "displayText": "Prospect Phone", "id": "phone", "placeholder": "Prospect Phone", "required": true }, { "displayText": "Prospect Country", "id": "company_country", "placeholder": "Prospect Country", "required": true }, { "displayText": "Prospect Integration Software", "id": "connector_id", "placeholder": "Prospect Integration Software", "required": true }, { "displayText": "Partner Rep Email", "id": "partner_rep_email", "placeholder": "Partner Rep Email", "required": true }, { "displayText": "Notes (if auto-opp, mention that here)", "id": "marketing_feedback_notes", "placeholder": "Notes (if auto-opp, mention that here)", "required": false, "type": "textarea" }, { "displayText": "Where did this lead come from?", "id": "campaign_id", "placeholder": "Where did this lead come from?", "required": false, "type": "select", "options": [{ "display": "Sales Engagement", "value": "7015a000001l5XYAAY" }, { "display": "Partner Management Engagement", "value": "7015a000001l5XTAAY" }] }, { "displayText": "Opportunity SubType", "id": "opp_subtype", "placeholder": "Opportunity SubType", "required": false, "type": "select", "options": [{ "display": "AvaTax", "value": "AvaTax" }, { "display": "ACP", "value": "ACP" }, { "display": "BevAlc", "value": "BevAlc" }, { "display": "BizDev", "value": "BizDev" }, { "display": "BizDev-Emerging", "value": "BizDev-Emerging" }, { "display": "Brazil", "value": "Brazil" }, { "display": "Business Licenses", "value": "ACP" }, { "display": "CertCapture", "value": "CertCapture" }, { "display": "Communications", "value": "Communications" }, { "display": "Cross-border", "value": "Cross-border" }, { "display": "DSP", "value": "DSP" }, { "display": "EMEA", "value": "EMEA" }, { "display": "Excise", "value": "Excise" }, { "display": "Included", "value": "Included" }, { "display": "India", "value": "India" }, { "display": "MatrixMaster", "value": "MatrixMaster" }, { "display": "MSP", "value": "MSP" }, { "display": "MSP-Payroll", "value": "MSP-Payroll" }, { "display": "MyLodgeTax", "value": "MyLodgeTax" }, { "display": "SOHO", "value": "SOHO" }, { "display": "TrustFile", "value": "TrustFile" }] }, { "displayText": "Connector", "id": "connector_id", "placeholder": "Connector", "required": true }, { "displayText": "Product of Interest", "id": "poi", "placeholder": "Product of Interest", "required": false, "type": "select", "options": [{ "display": "Avatax", "value": "a1m0b000001SbLuAAK" }, { "display": "Avalara for Accountants", "value": "a1m0b000002VJ5PAAW" }, { "display": "ACU", "value": "a1m0b000001zb0PAAQ" }, { "display": "Beverage Alcohol", "value": "a1m0b000001eoKPAAY" }, { "display": "Business Licenses", "value": "a1m5a000002LhPpAAK" }, { "display": "CertCapture", "value": "a1m0b000001SbM3AAK" }, { "display": "Communications", "value": "a1m0b000001SbLwAAK" }, { "display": "Cross-border", "value": "a1m0b000001SbMAAA0" }, { "display": "Excise", "value": "a1m0b000001SbLxAAK" }, { "display": "MyLodge", "value": "a1m0b000001SbMCAA0" }, { "display": "Property Tax", "value": "a1m5a000003oEJeAAM" }, { "display": "Returns", "value": "a1m0b000001SbMEAA0" }, { "display": "TrustFile", "value": "a1m0b000001SbMOAA0" }, { "display": "TTR", "value": "a1m5a000002LkCjAAK" }] }, { "displayText": "Submitter's Name", "id": "description", "placeholder": "Submitter's Name", "required": true }, { "displayText": "Submitter's Email", "id": "ref_email", "placeholder": "Submitter's Email", "required": true, "type": "email" }], "sections": [{ "id": "submitterdetails", "title": "Lead/Opp Submitter Details", "fields": ["description", "ref_email"] }, { "id": "partnerdetails", "title": "Partner Details", "fields": ["partner_rep_email", "campaign_id", "opp_subtype", "connector_id", "poi"] }, { "id": "leaddetails", "title": "Lead Details", "fields": ["email", "fullname", "company", "phone", "title", "marketing_feedback_notes", "industry", "company_country"] }], "id": "INTERNALPARTNERREFERRAL", "name": "INTERNALPARTNERREFERRAL", "redirecturl": null, "submit": { "displayText": "Submit" }, "template": { "name": "INTERNALPARTNERREFERRAL", "description": "", "displayName": "" }, "title": "" }, MTDTOOL: { description: '', fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Name', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }, { displayText: 'Company', id: 'company', placeholder: 'Company', required: true }, { displayText: 'VAT number', id: 'vat_number', placeholder: 'VAT number', required: true }, { displayText: 'I agree to the Avalara MTD Filer', id: 'terms_of_service', links: [{ href: 'https://www.avalara.com/us/en/legal/mtdterms.html', text: 'terms and conditions.' }], required: true, type: 'checkbox' }], id: 'avaform-mtd-tool', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'MDTTOOL', description: '', displayName: '' }, title: '' }, MLTRATELOOKUP: { configs: form_data_objectSpread(form_data_objectSpread({}, form_configs), {}, { callback: 'mltRateResponse', rateLookupForm: true }), description: '', fields: [{ displayText: 'Rental Address', id: 'address1', placeholder: 'Rental Address', required: true }, [{ displayText: 'Rental City', id: 'city', placeholder: 'Rental City', required: true }, { displayText: 'Rental State', id: 'state', placeholder: 'Rental State', required: true, type: 'select-state' }], { displayText: 'Full name', id: 'fullname', placeholder: 'Full name', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }], id: 'avaform-mlt-rate-lookup', name: '', redirecturl: null, submit: { displayText: 'Submit', position: 'left' }, template: { name: 'MLTRATELOOKUP', description: '', displayName: '' }, title: '' }, MLTRATELOOKUPWITHPHONE: { configs: form_data_objectSpread(form_data_objectSpread({}, form_configs), {}, { callback: 'mltRateResponse', rateLookupForm: true }), description: '', fields: [], fieldsReplicate: 'MLTRATELOOKUP', fieldsAppend: [{ displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }], id: 'avaform-mlt-rate-lookup-with-phone', name: '', redirecturl: null, submit: { displayText: 'Submit', position: 'left' }, template: { name: 'MLTRATELOOKUPWITHPHONE', description: '', displayName: '' }, title: '' }, MLTCONTACTUS: { description: '', fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Name', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }, { displayText: 'Questions', id: 'marketing_feedback_notes', placeholder: 'Questions', required: false, type: 'textarea' }], id: 'avaform-mlt-contact-us', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'MLTCONTACTUS', description: '', displayName: '' }, title: '' }, PARTNER: { description: '', fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Name', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }, { displayText: 'Address', id: 'address', placeholder: 'Address', required: true }, { displayText: 'City', id: 'city', placeholder: 'city', required: true }, { displayText: 'State', id: 'state', placeholder: 'State', required: true }, { displayText: 'Postal code', id: 'zip_code', placeholder: 'Postal code', required: true }, { displayText: 'Company', id: 'company', placeholder: 'Company', required: true }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }, { displayText: 'I accept this partner agreement in whole.', id: 'terms_of_service', links: [{ href: 'https://www.avalara.com/content/dam/avalara/public/documents/pdf/Avalara-Partner-Program-General-Terms-and-Conditions.pdf', text: 'General Terms and Conditions' }, { href: 'https://www.avalara.com/content/dam/avalara/public/documents/pdf/Referral-Partner-Agreement-2018-11-26.pdf', text: 'Partner Agreement (with commission)' }, { href: 'https://www.avalara.com/content/dam/avalara/public/documents/pdf/Business-Partner-Agreement-2019-03-11.pdf', text: 'Partner Agreement (without commission)' }], required: true, type: 'checkbox' }], id: 'avaform-partner', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'PARTNER', description: '', displayName: '' }, title: '' }, PARTNERACP: { description: '', fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Name', required: true }, { displayText: 'Company', id: 'company', placeholder: 'Company', required: true }, { displayText: 'Address', id: 'address', placeholder: 'Address', required: true }, { displayText: 'City', id: 'city', placeholder: 'city', required: true }, { displayText: 'State', id: 'state', placeholder: 'State', required: true }, { displayText: 'Country', id: 'country', placeholder: 'Country', required: true, type: 'select' }, { displayText: 'Postal code', id: 'zip_code', placeholder: 'Postal code', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }, { displayText: 'Website', id: 'website', placeholder: 'Website', required: true }, { displayText: 'Does your firm want to receive commissions?', id: 'partner_commission_agreement', options: [{ value: '0', display: 'No' }, { value: '1', display: 'Yes' }], placeholder: 'Does your firm want to receive commissions?', required: true, type: 'select' }, { displayText: 'I accept this partner agreement in whole.', id: 'terms_of_service', links: [{ href: 'https://www.avalara.com/partnergeneralterms', text: 'General Terms and Conditions' }, { href: 'https://www.avalara.com/us/en/legal/acp.html', text: 'Partner Agreement' }], placeholder: 'I accept this partner agreement in whole.', required: true, type: 'checkbox' }], id: 'avaform-partner-acp', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'PARTNERACP', description: '', displayName: '' }, title: '' }, PARTNERBHARAT: { description: '', fields: [], fieldsReplicate: 'PARTNERACP', // Replicate fields from this object fieldsOverwrite: [ // Overwrite fields to be captured { displayText: 'I accept this partner agreement in whole.', id: 'terms_of_service', links: [{ href: 'https://www.avalara.com/content/dam/avalara/public/documents/pdf/GST-Referral-Agreement-2017-06-16.pdf', text: 'Partner Agreement' }], required: true, type: 'checkbox' }], id: 'avaform-partner-bharat', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'PARTNERBHARAT', description: '', displayName: '' }, title: '' }, PARTNERDEMO: { description: '', fields: [], fieldsReplicate: 'PARTNERACP', // Replicate fields from this object fieldsRemove: ['terms_of_service'], id: 'avaform-partner-msp', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'PARTNERMSP', description: '', displayName: '' }, title: '' }, PARTNERDSP: { description: '', fields: [], fieldsReplicate: 'PARTNERACP', // Replicate fields from this object fieldsRemove: ['terms_of_service'], id: 'avaform-partner-dsp', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'PARTNERDSP', description: '', displayName: '' }, title: '' }, PARTNERMSP: { description: '', fields: [], fieldsReplicate: 'PARTNERACP', // Replicate fields from this object fieldsOverwrite: [{ displayText: 'I accept this partner agreement in whole.', id: 'terms_of_service', links: [{ href: 'https://www.avalara.com/partnergeneralterms', text: 'General Terms and Conditions' }, { href: 'https://www.avalara.com/referralprogram', text: 'Partner Agreement' }], placeholder: 'I accept this partner agreement in whole.', required: true, type: 'checkbox' }], id: 'avaform-partner-msp', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'PARTNERMSP', description: '', displayName: '' }, title: '' }, PARTNERREFERRAL: { description: '', fields: [{ displayText: 'Prospect Name', id: 'fullname', placeholder: 'Prospect Name', required: true }, { displayText: 'Prospect Title', id: 'jobTitle', placeholder: 'Prospect Title', required: false }, { displayText: 'Prospect Email', id: 'email', placeholder: 'Prospect Email', required: true, type: 'email' }, { displayText: 'Prospect Company', id: 'company', placeholder: 'Prospect Company', required: true }, { displayText: 'Prospect Phone', id: 'phone', placeholder: 'Prospect Phone', required: true }, { displayText: 'Prospect Integration Software', id: 'connector_id', placeholder: 'Prospect Integration Software', required: true }, { displayText: 'Your Business Email', id: 'partner_rep_email', placeholder: 'Your Business Email', required: true }, { displayText: 'Notes', id: 'marketing_feedback_notes', placeholder: 'Notes', required: false, type: 'textarea' }], id: 'avaform-partner-referral', name: '', redirecturl: null, submit: { displayText: 'Get started' }, template: { name: 'PARTNERREFERRAL', description: '', displayName: '' }, title: '' }, PARTNERREFERRALSIMPLE: { description: '', fields: [], fieldsOverwrite: [{ displayText: 'Comments', id: 'marketing_feedback_notes', placeholder: 'Comments', required: false, type: 'textarea' }], fieldsReplicate: 'PARTNERREFERRAL', fieldsRemove: ['connector_id'], id: 'avaform-partner-referral-simple', name: '', redirecturl: null, submit: { displayText: 'Get started' }, template: { name: 'PARTNERREFERRALSIMPLE', description: '', displayName: '' }, title: '' }, PARTNERREFERRALACTIVE: { configs: form_data_objectSpread(form_data_objectSpread({}, form_configs), {}, { vibrancy: 'active' }), description: '', fields: [], fieldsReplicate: 'PARTNERREFERRAL', id: 'avaform-partner-referral-active', name: '', redirecturl: null, submit: { displayText: 'Get started' }, template: { name: 'PARTNERREFERRALACTIVE', description: '', displayName: '' }, title: '' }, PARTNERREFERRALEMERGING: { configs: form_data_objectSpread(form_data_objectSpread({}, form_configs), {}, { vibrancy: 'Emerging' }), description: '', fields: [], fieldsReplicate: 'PARTNERREFERRAL', id: 'avaform-partner-referral-emerging', name: '', redirecturl: null, submit: { displayText: 'Get started' }, template: { name: 'PARTNERREFERRALEMERGING', description: '', displayName: '' }, title: '' }, PARTNERREFERRALESTABLISHED: { configs: form_data_objectSpread(form_data_objectSpread({}, form_configs), {}, { vibrancy: 'established' }), description: '', fields: [], fieldsReplicate: 'PARTNERREFERRAL', id: 'avaform-partner-referral-established', name: '', redirecturl: null, submit: { displayText: 'Get started' }, template: { name: 'PARTNERREFERRALESTABLISHED', description: '', displayName: '' }, title: '' }, PARTNERREFERRALLAUNCH: { configs: form_data_objectSpread(form_data_objectSpread({}, form_configs), {}, { vibrancy: 'launch' }), description: '', fields: [], fieldsReplicate: 'PARTNERREFERRAL', id: 'avaform-partner-referral-launch', name: '', redirecturl: null, submit: { displayText: 'Get started' }, template: { name: 'PARTNERREFERRALLAUNCH', description: '', displayName: '' }, title: '' }, PARTNERSELECT: { description: '', fields: [[{ displayText: 'First name', id: 'firstName', placeholder: 'First name', required: true }, { displayText: 'Last name', id: 'lastName', placeholder: 'Last name', required: true }], { displayText: 'Email', id: 'email', placeholder: 'email', required: true }, { displayText: 'Company name', id: 'company', placeholder: 'Company name', required: true }, [{ displayText: 'Address', id: 'address', placeholder: 'Address', required: true }, { displayText: 'City', id: 'city', placeholder: 'city', required: true }], [{ displayText: 'State', id: 'state', placeholder: 'State', required: true }, { displayText: 'Postal code', id: 'zip_code', placeholder: 'Postal code', required: true }], { displayText: 'Country', id: 'country', placeholder: 'Country', required: true, type: 'select' }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }, { displayText: 'Website', id: 'website', placeholder: 'Website', required: true }, { displayText: 'Does your firm want to receive commissions?', id: 'partner_commission_agreement', options: [{ value: '0', display: 'No' }, { value: '1', display: 'Yes' }], placeholder: 'Does your firm want to receive commissions?', required: true, type: 'select' }, { displayText: 'Partnership Type (please select one)', id: 'opp_subtype', placeholder: 'Please select an option', required: true, title: 'Please select an option', type: 'fieldset', fieldSet: [{ displayText: 'Technology partners', displayTextClass: ['desc-bold'], description: 'Organizations that want to build a repeatable integration with Avalara solutions. Includes software developers and publishers, ISVs, and marketplaces.', id: 'radio-select', required: false, type: 'radio', value: 'DSP' }, { displayText: 'Accounting firms', displayTextClass: ['desc-bold'], description: 'Firms that want to refer and/or implement Avalara solutions. Includes CPAs and bookkeepers from firms of all sizes.', id: 'radio-select', required: false, type: 'radio', value: 'ACP' }, { displayText: 'Systems integrators', displayTextClass: ['desc-bold'], description: 'Organizations who want to refer and/or implement Avalara solutions. Includes value-added resellers, services firms, ecommerce agencies.', id: 'radio-select', required: false, type: 'radio', value: 'MSP' }] }], id: 'avaform-partner-select', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'PARTNERSELECT', description: '', displayName: '' }, title: '' }, PARTNERSELECTTEST: { description: '', fields: [[{ displayText: 'First name', id: 'firstName', placeholder: 'First name', required: true }, { displayText: 'Last name', id: 'lastName', placeholder: 'Last name', required: true }], { displayText: 'Email', id: 'email', placeholder: 'email', required: true }, { displayText: 'Company name', id: 'company', placeholder: 'Company name', required: true }, [{ displayText: 'Address', id: 'address', placeholder: 'Address', required: true }, { displayText: 'City', id: 'city', placeholder: 'city', required: true }], [{ displayText: 'State', id: 'state', placeholder: 'State', required: true }, { displayText: 'Postal code', id: 'zip_code', placeholder: 'Postal code', required: true }], { displayText: 'Country', id: 'country', placeholder: 'Country', required: true, type: 'select' }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }, { displayText: 'Website', id: 'website', placeholder: 'Website', required: true }, { displayText: 'Does your firm want to receive commissions?', id: 'partner_commission_agreement', options: [{ value: '0', display: 'No' }, { value: '1', display: 'Yes' }], placeholder: 'Does your firm want to receive commissions?', required: true, type: 'select' }, { displayText: 'Partnership Type (please select one)', hasDynamicField: true, id: 'opp_subtype', placeholder: 'Please select an option', required: true, title: 'Please select an option', type: 'fieldset', fieldSet: [{ displayText: 'Technology partners', displayTextClass: ['desc-bold'], description: 'Includes software developers and publishers, ISVs, and marketplaces.', id: 'radio-select', // This is only a place holder. This gets the id from the parent fieldset required: false, type: 'radio', value: 'DSP' }, { displayText: 'Accounting firms', displayTextClass: ['desc-bold'], description: 'Includes CPAs and bookkeepers from firms of all sizes.', id: 'radio-select', // This is only a place holder. This gets the id from the parent fieldset required: false, type: 'radio', value: 'ACP' }, { displayText: 'Systems integrators', displayTextClass: ['desc-bold'], description: 'Includes value-added resellers, services firms, ecommerce companies.', id: 'radio-select', // This is only a place holder. This gets the id from the parent fieldset required: false, type: 'radio', value: 'MSP' }] }], dynamicFields: { opp_subtype: { ACP: [{ displayText: 'I accept this partner agreement in whole.', id: 'terms_of_service', links: [{ href: 'https://www.avalara.com/partnergeneralterms', text: 'General Terms and Conditions' }, { href: 'https://www.avalara.com/us/en/legal/acp.html', text: 'Partner Agreement' }], placeholder: 'I accept this partner agreement in whole.', required: true, type: 'checkbox' }], MSP: [{ displayText: 'I accept this partner agreement in whole.', id: 'terms_of_service', links: [{ href: 'https://www.avalara.com/partnergeneralterms', text: 'General Terms and Conditions' }, { href: 'https://www.avalara.com/referralprogram', text: 'Partner Agreement' }], placeholder: 'I accept this partner agreement in whole.', required: true, type: 'checkbox' }] } }, id: 'avaform-partner-select-test', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'PARTNERACP', description: '', displayName: '' }, title: '' }, PARTNERSELECTTESTCHECKBOX: { description: '', fields: [[{ displayText: 'First name', id: 'firstName', placeholder: 'First name', required: true }, { displayText: 'Last name', id: 'lastName', placeholder: 'Last name', required: true }], { displayText: 'Email', id: 'email', placeholder: 'email', required: true }, { displayText: 'Company name', id: 'company', placeholder: 'Company name', required: true }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }, { displayText: 'Does your firm want to receive commissions?', hasDynamicField: true, id: 'partner_commission_agreement', placeholder: 'Does your firm want to receive commissions?', required: true, value: 'yes', type: 'checkbox' }, { displayText: 'Partnership Type (please select one)', hasDynamicField: true, id: 'opp_subtype', placeholder: 'Please select an option', required: true, title: 'Please select an option', type: 'fieldset', fieldSet: [{ displayText: 'Technology partners', displayTextClass: ['desc-bold'], description: 'Includes software developers and publishers, ISVs, and marketplaces.', id: 'radio-select', // This is only a place holder. This gets the id from the parent fieldset required: false, type: 'radio', value: 'DSP' }, { displayText: 'Accounting firms', displayTextClass: ['desc-bold'], description: 'Includes CPAs and bookkeepers from firms of all sizes.', id: 'radio-select', // This is only a place holder. This gets the id from the parent fieldset required: false, type: 'radio', value: 'ACP' }, { displayText: 'Systems integrators', displayTextClass: ['desc-bold'], description: 'Includes value-added resellers, services firms, ecommerce companies.', id: 'radio-select', // This is only a place holder. This gets the id from the parent fieldset required: false, type: 'radio', value: 'MSP' }] }], dynamicFields: { opp_subtype: { ACP: [{ displayText: 'I accept this partner agreement in whole.', id: 'terms_of_service', links: [{ href: 'https://www.avalara.com/partnergeneralterms', text: 'General Terms and Conditions' }, { href: 'https://www.avalara.com/us/en/legal/acp.html', text: 'Partner Agreement' }], placeholder: 'I accept this partner agreement in whole.', required: true, type: 'checkbox' }], MSP: [{ displayText: 'I accept this partner agreement in whole.', id: 'terms_of_service', links: [{ href: 'https://www.avalara.com/partnergeneralterms', text: 'General Terms and Conditions' }, { href: 'https://www.avalara.com/referralprogram', text: 'Partner Agreement' }], placeholder: 'I accept this partner agreement in whole.', required: true, type: 'checkbox' }] }, partner_commission_agreement: { // eslint-disable-next-line quote-props yes: [{ displayText: 'You selected that you would like commission', id: 'terms_and_aggrement', placeholder: 'I accept this partner agreement in whole.', required: true, type: 'checkbox' }] } }, id: 'avaform-partner-select-test', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'PARTNERACP', description: '', displayName: '' }, title: '' }, QUESTIONSWITHOUTCOMPANY: { description: '', fields: [], fieldsReplicate: 'MLTCONTACTUS', id: 'avaform-questions-without-company', name: '', redirecturl: null, submit: { displayText: 'Submit' }, template: { name: 'QUESTIONSWITHOUTCOMPANY', description: '', displayName: '' }, title: '' }, VATEBAYTEST: { classes: [], description: null, fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Name', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }, { displayText: 'Company', id: 'company', placeholder: 'Company', required: true }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }, { displayText: 'Primary business address', id: 'C_Address1', placeholder: 'Primary business address', required: true }, { displayText: 'City', id: 'C_City', placeholder: 'City', required: true }, { displayText: 'State', id: 'C_State_Prov', placeholder: 'State', required: true }, { displayText: 'Country', id: 'country', placeholder: 'Country', required: true, type: 'select' }, { displayText: 'Postal code', id: 'C_Zip_Postal', placeholder: 'Postal code', required: true }, { displayText: 'Do you already have any VAT registrations?', id: 'C_vat_question', placeholder: 'Do you already have any VAT registrations?', required: true, type: 'select', options: [{ display: 'Yes', value: 'Yes' }, { display: 'No', value: 'No' }, { display: 'I don\'t know', value: 'I don\'t know' }] }, { hasDynamicField: false, displayText: 'For which jurisdictions do you require VAT registration and return services?', placeholder: 'For which jurisdictions do you require VAT registration and return services?', required: true, type: 'multi-select', id: 'marketing_feedback_notes', minheight: '290', options: [{ display: 'OSS', value: 'OSS' }, { display: 'iOSS', value: 'iOSS' }, { display: 'Germany', value: 'Germany' }, { display: 'France', value: 'France' }, { display: 'Spain', value: 'Spain' }, { display: 'Italy', value: 'Italy' }, { display: 'United Kingdom', value: 'United Kingdom' }, { display: 'Other I\'m not sure - contact me to discuss', value: 'Other I\'m not sure - contact me to discuss' }] }, { displayText: 'Are you a listed business or sole trader?', id: 'C_EMEA_Company_Profile1', options: [{ value: 'Listed Business', display: 'Listed Business' }, { value: 'Sole Trader', display: 'Sole Trader' }, { value: 'I don\'t know', display: 'I don\'t know' }], placeholder: 'Are you a listed business or sole trader?', type: 'select', required: true }], id: 'demo-basic-sales-required-testing-form', name: 'Avaform basic sales required template test', redirecturl: null, submit: { displayText: 'Submit' }, thankyou: { message: 'Thank you for your submission.' }, template: { name: 'AVAFORMBASICSALESREQUIREDTESTING', description: 'Avaform basic sales required testing demo', displayName: 'Avaform basic sales required testing' }, theme: { layout: null, showLoader: false }, title: '' }, VATLIVE: { description: '', fields: [{ displayText: 'Name', id: 'fullname', placeholder: 'Name', required: true }, { displayText: 'Business email', id: 'email', placeholder: 'Business email', required: true, type: 'email' }, { displayText: 'Phone', id: 'phone', placeholder: 'Phone', required: true }, { displayText: 'Company', id: 'company', placeholder: 'Company', required: true }, { displayText: 'Country of establishment', id: 'country_of_establishment', placeholder: 'Country of establishment', required: true, type: 'select' }], id: 'avaform-vatlive', name: '', redirecturl: null, submit: { displayText: 'Send enquiry' }, template: { name: 'VATLIVE', description: '', displayName: '' }, title: '' }, VATLIVEWITHCOMMENTS: { description: '', fields: [], fieldsReplicate: 'VATLIVE', fieldsAppend: [{ displayText: 'Comments', id: 'marketing_feedback_notes', placeholder: 'Comments', required: false, type: 'textarea' }], id: 'avaform-vatlive', name: '', redirecturl: null, submit: { displayText: 'Send enquiry' }, template: { name: 'VATLIVE', description: '', displayName: '' }, title: '' }, VATLIVECONTACTUS: { description: '', fields: [], fieldsReplicate: 'VATLIVE', fieldsAppend: [{ displayText: 'Comments', id: 'marketing_feedback_notes', placeholder: 'Comments', required: false, type: 'textarea' }], id: 'avaform-vatlive', name: '', redirecturl: null, submit: { displayText: 'Send enquiry' }, template: { name: 'VATLIVE', description: '', displayName: '' }, title: '' }, VATLIVECONTACTUSREGISTRATION: { description: '', fields: [], fieldsReplicate: 'VATLIVE', fieldsAppend: [{ displayText: 'Comments', id: 'marketing_feedback_notes', placeholder: 'Comments', required: false, type: 'textarea' }, { displayText: 'Are you looking for VAT registration or returns?', id: 'registrations_returns', options: [{ display: 'Registrations', value: 'registrations' }, { display: 'Returns', value: 'returns' }], placeholder: 'Are you looking for VAT registration or returns?', required: true, type: 'select' }, { displayText: 'Which countries are you interested in?', id: 'country_interest', placeholder: 'Which countries are you interested in?', required: false, type: 'textarea' }, { displayText: 'Do you have a VAT question?', id: 'vat_question', placeholder: 'Do you have a VAT question?', required: false, type: 'textarea' }], id: 'avaform-vatlive', name: '', redirecturl: null, submit: { displayText: 'Send enquiry' }, template: { name: 'VATLIVE', description: '', displayName: '' }, title: '' } }; var INDUSTRY_FIELD = { displayText: 'Industry', id: 'industry', placeholder: 'Industry', required: true, type: 'select', options: [{ display: 'Accounting', value: 'Accounting' }, { display: 'Beverage & Alcohol', value: 'Beverage Alcohol' }, { display: 'Communications', value: 'Communications' }, { display: 'Construction', value: 'Construction' }, { display: 'Energy', value: 'Energy' }, { display: 'Lodging & Hospitality', value: 'Lodging & Hospitality' }, { display: 'Manufacturing', value: 'Manufacturing' }, { display: 'Restaurant Industry', value: 'Accommodation & Food Services' }, { display: 'Retail', value: 'Retail' }, { display: 'Software', value: 'Software' }, { display: 'Wholesale & Distribution', value: 'Wholesale & Distribution' }, { display: 'Other', value: 'Other' }] }; /* harmony default export */ const form_data = (AVAFORMS); ;// CONCATENATED MODULE: ./src/constants/eloqua-field-mapping.js var eloquaPayload = { additional_information: { name: 'C_Additional_Information12', value: '' }, address: { name: 'C_Address1', value: '' }, adobe_visitor_id: { name: 'C_Adobe_Visitor_ID1', value: '' }, appointment_datetime: { name: 'C_Appointment_Date_Time1', value: '' }, avaform_template: { name: 'avaform_template', value: '' }, b2b: { name: 'C_B2B1', value: '' }, b2c: { name: 'C_B2C1', value: '' }, campaign_id: { name: 'C_SFDCLastCampaignID', value: '' }, city: { name: 'C_City', value: '' }, comc_hours_spent: { name: 'C_hours_spent', value: '' }, comc_taxable_revenue: { name: 'C_taxable_revenue', value: '' }, comc_labor_costs: { name: 'C_labor_costs', value: '' }, comc_base_tax_liability: { name: 'C_base_tax_liability', value: '' }, comc_interest_penalty: { name: 'C_interest_penalty', value: '' }, comc_potential_tax_liability: { name: 'C_potential_tax_liability', value: '' }, comc_total_cost: { name: 'C_total_cost', value: '' }, company: { name: 'C_Company', value: '' }, company_address: { name: 'company_address', value: '' }, company_city: { name: 'company_city', value: '' }, company_country: { name: 'company_country', value: '' }, company_postalcode: { name: 'company_postalcode', value: '' }, company_profile: { name: 'C_EMEA_Company_Profile1', value: '' }, company_state: { name: 'company_state', value: '' }, connector_id: { name: 'C_Connector1', value: '' }, contact_method: { name: 'C_Method_of_Contact1', value: '' }, content_id: { name: 'C_Campaign_Asset_ID1', value: '' }, conversionDate: { name: 'mostRecentConversionDate1', value: '' }, conversion_page: { name: 'C_ConversionPage1', value: '' }, country: { name: 'C_Country', value: '' }, country_interest: { name: 'C_country_interest', value: '' }, create_ai_account: { name: 'create_ai_account', value: '' }, custom_routing: { name: 'C_Custom_Routing1', value: '1' }, date: { name: 'date', value: '' }, datetime: { name: 'datetime', value: '' }, description: { name: 'C_Description1', value: '' }, download_link: { name: 'C_DownloadLink', value: '' }, ecommerce: { name: 'C_E_commerce1', value: '' }, ecommerce_solution: { name: 'C_E_Commerce_Shopping_Cart_Solution1', value: '' }, ef_id: { name: 'C_ef_id_Most_Recent1', value: '' }, elq_guid: { name: 'elqCustomerGUID', value: '' }, elq_site_id: { name: 'elqSiteID', value: '706' }, email: { name: 'C_EmailAddress', value: '' }, employee_band: { name: 'C_Employee_Band1', value: '' }, employee_size: { name: 'C_Employee_Size1', value: '' }, erp: { name: 'C_Customer_ERP_Type1', value: '' }, event_identifier: { name: 'Event_Identifier', value: '' }, event_identifier2: { name: 'Event_Identifier2', value: '' }, first_name: { name: 'C_FirstName', value: '' }, form_name: { name: 'elqFormName', value: 'GetStartedWebform' }, forbes: { name: 'C_Forbes_20001', value: '' }, fortune: { name: 'C_Fortune_10001', value: '' }, gdpr_consent_date: { name: 'C_GDPR_Consent_Date1', value: '' }, gdpr_eligible: { name: 'C_GDPR_Eligible1', value: '' }, goal_type: { name: 'goal_type', value: '' }, google_click_id: { name: 'C_Google_Click_ID__gclid_1', value: '' }, industry: { name: 'C_Industry1', value: '' }, industry_id: { name: 'C_Industry1', value: '' }, ip_address: { name: 'C_IP_Address1', value: '' }, job_function: { name: 'C_Job_Function1', value: '' }, job_title: { name: 'C_Title', value: '' }, language: { name: 'C_Preferred_Language1', value: '' }, last_name: { name: 'C_LastName', value: '' }, lsmr: { name: 'C_Lead_Source___Most_Recent11', value: '' }, lso: { name: 'C_Lead_Source___Original1', value: '' }, lso1: { name: 'C_Lead_Source_Original1', value: '' }, marketing_feedback_notes: { name: 'C_Marketing_Feedback_Notes1', value: '' }, maxmind_dump: { name: 'C_Maxmind_Data_Dump1', value: '' }, mylodgetax_source: { name: 'MyLodgeTax_Source', // not a field in eloqua, just for MLT value: '' }, mylodgetax_channel: { name: 'MyLodgeTax_Channel', // not a field in eloqua, just for MLT value: '' }, naics: { name: 'C_NAICS_6_Digit1', value: '' }, name: { name: 'name', value: '' }, offer: { name: 'C_Offer1', value: '' }, opp_type: { name: 'C_Opportunity_Type1', value: '' }, opp_subtype: { name: 'C_Opportunity_Sub_Type1', value: '' }, opt_in: { name: 'C_GDPR_Consent1', value: '' }, original_ef_id: { name: 'C_ef_id_Original1', value: '' }, page: { name: 'page', value: '' }, partnersource: { name: 'C_Partner__VAR_1', value: '' }, partner_rep_email: { name: 'C_Partner_Rep_Email1', value: '' }, partner_role: { name: 'C_Partner_Role1', value: '' }, phone: { name: 'C_BusPhone', value: '' }, poi: { name: 'C_Products_Services_of_Interest1', value: '' }, pos: { name: 'C_Retail_Point_of_Sale_System1', value: '' }, query_string: { name: 'C_Query_String1', value: '' }, referring_url: { name: 'C_Referring_URL1', value: '' }, registrations_returns: { name: 'C_registrations_returns', value: '' }, revenue: { name: 'C_Annual_Revenue1', value: '' }, revenue_band: { name: 'C_Revenue_Band1', value: '' }, route_to: { name: 'DepartmenttoRouteto', value: 'Sales' }, state: { name: 'C_State_Prov', value: '' }, sub_industry: { name: 'C_Sub_Industry1', value: '' }, sic_code: { name: 'C_SIC_Code11', value: '' }, status: { name: 'C_Lead_Status1', value: '' }, time: { name: 'time', value: '' }, ucid: { name: 'C_Unique_Click_ID1', value: '' }, user_agent: { name: 'user_agent', value: '' }, vat_number: { name: 'C_VAT_Number1', value: '' }, vat_question: { name: 'C_vat_question', value: '' }, website: { name: 'C_website', value: '' }, web_property: { name: 'C_Web_Property1', value: '' }, zip: { name: 'zipPostal', value: '' }, zip_code: { name: 'C_Zip_Postal', value: '' }, zip_maxmind: { name: 'zip_maxmind', value: '' } }; /* harmony default export */ const eloqua_field_mapping = (eloquaPayload); ;// CONCATENATED MODULE: ./src/helpers/chilipiper.js // Helpers // Types // Function to append classes for disabled use // @return { Void } var appendClassToHeader = function appendClassToHeader() { var classesSet = document.getElementById('chilipiperReactClasses'); if (!classesSet) { var addStyles = document.createElement('div'); addStyles.id = 'chilipiperReactClasses'; addStyles.innerHTML = ""; document.getElementsByTagName('head')[0].appendChild(addStyles); } }; // Helper fucntion to close modal after Chilipiper window has opened // @return { Boolean } var closeAfterRouted = function closeAfterRouted() { var elem = document.querySelector('[data-dismiss="modal"]'); if (elem && elem !== null) { elem.click(); return true; } return false; }; // Function to disable associated chilipiper button // @return { Void } var disableChilipiperButton = function disableChilipiperButton(formId) { var ele = document.getElementById(formId); if (!ele || !ele.parentElement || !ele.parentElement.id) return; var connectedChilipiperElement = document.querySelector("[data-avaform-id=\"".concat(ele.parentElement.id, "\"]")); if (!connectedChilipiperElement) return; // Check for chilipiper button association connectedChilipiperElement.setAttribute('disabled', 'true'); connectedChilipiperElement.classList.add('chilipiper-disabled', 'active'); }; // Function to enable associated chilipiper button // @return { Void } var enableChilipiperButton = function enableChilipiperButton(formId) { var ele = document.getElementById(formId); if (!ele || !ele.parentElement || !ele.parentElement.id) return; var connectedChilipiperElement = document.querySelector("[data-avaform-id=\"".concat(ele.parentElement.id, "\"]")); if (!connectedChilipiperElement) return; // Check for chilipiper button association connectedChilipiperElement.removeAttribute('disabled'); connectedChilipiperElement.classList.remove('chilipiper-disabled', 'active'); }; // Function to get data attribute from chilipier CTA // @return { string | null } var getActiveChilipiperAttribute = function getActiveChilipiperAttribute(formId, attribute) { if (!formId) return null; if (document.getElementById(formId)) { var ele = document.getElementById(formId); if (!ele || !ele.parentElement || !ele.parentElement.id) return null; var connectedChilipiperElement = document.querySelector("[data-avaform-id=\"".concat(ele.parentElement.id, "\"]")); if (!connectedChilipiperElement) return null; var dataAttribute = connectedChilipiperElement.getAttribute("data-".concat(attribute)); if (dataAttribute) { return dataAttribute; } } if (/chilipiper/gi.test(formId)) { if (attribute === 'router') return 'contact-me-router'; } return null; }; // Function to validate if chilipiper button as been clicked // @return { boolean } var isActiveChilipiperForm = function isActiveChilipiperForm(formId, captureFields, configs) { if (/chilipiper/gi.test(formId)) return true; if (captureFields && configs) { return captureFields.filter(function (f) { return f.id === 'phone' && f.value !== ''; }).length > 0 && Boolean(configs.chilipiperRouter) && configs.chilipiperRouter !== ''; } var ele = document.getElementById(formId); if (!ele || !ele.parentElement || !ele.parentElement.id) return false; var connectedChilipiperElement = document.querySelector("[data-avaform-id=\"".concat(ele.parentElement.id, "\"]")); if (!connectedChilipiperElement) return false; return Boolean(connectedChilipiperElement.classList.contains('active')); }; // Function to check if the chliipiper is associated to the building Avaform // @return { Boolean } var isConnectedToChilipiper = function isConnectedToChilipiper(formId) { if (!formId) return false; if (/chilipiper/gi.test(formId)) return true; var ele = document.getElementById(formId); if (!ele) return false; if (ele.parentElement && ele.parentElement.id) { var parentId = ele.parentElement.id; // Check for chilipiper button association if (document.querySelector("[data-avaform-id=\"".concat(parentId, "\"]"))) { return true; // Validate as true } } return false; }; var failureRedirect = function failureRedirect(formId, redirect) { window.ava = window.ava || {}; if (redirect && redirect !== null && redirect !== '.html') { window.location.assign(redirect); return; } logger({ level: 'error', msgType: 'ChilipiperTriggerFailure', formId: formId, data: { message: 'Error with Chilipiper, missing redirect' } }); window.ava.chiliPiper = { status: 'fail', error: 'Error with Chilipiper, missing redirect' }; }; // Function to submit to chilipiper // @return { null } var launchChilipiper = function launchChilipiper(payload, formId) { var router = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'contact-me-router'; var redirect = arguments.length > 3 ? arguments[3] : undefined; window.ava = window.ava || {}; if (!payload) { logger({ level: 'error', msgType: 'ChilipiperTriggerFailure', formId: formId, data: { message: 'Error with Chilipiper, missing payload' } }); window.ava.chiliPiper = { status: 'fail', error: 'Error with Chilipiper, missing payload' }; return; } var chiliPiper = window && window.ChiliPiper; if (!chiliPiper) { logger({ level: 'error', msgType: 'ChilipiperTriggerFailure', formId: formId, data: { message: 'Error with Chilipiper, function missing from window' } }); window.ava.chiliPiper = { status: 'fail', error: 'Error with Chilipiper, function missing from window' }; failureRedirect(formId, redirect); return; } try { // eslint-disable-next-line no-console console.log("Logging to chilipiper ".concat(JSON.stringify({ Email: payload.email.value, FirstName: payload.first_name.value, LastName: payload.last_name.value, Company: payload.company.value, Phone: payload.phone.value, MarketingFeedbackNotes: payload.marketing_feedback_notes.value || payload.additional_information.value }))); chiliPiper.submit('avalara', router, { titleStyle: 'Roboto 22px #EA5938', closeOnOutside: true, mobileRedirectLink: window.location.href, // This sets the redirect on mobile only. Chilipiper handles the mobile routing/use from their side. onRouted: closeAfterRouted, // This is triggered when the chilipiper router has loaded. Will close Avaform Modal after Chilipiper is visible lead: { Email: payload.email.value, FirstName: payload.first_name.value, LastName: payload.last_name.value, Company: payload.company.value, Phone: payload.phone.value, MarketingFeedbackNotes: payload.marketing_feedback_notes.value || payload.additional_information.value } }); } catch (err) { logger({ level: 'error', msgType: 'ChilipiperTriggerFailure', formId: formId, data: { message: "Error with Chilipiper, Chilipiper submission failure. Error: ".concat(err) } }); window.ava.chiliPiper = { status: 'fail', error: "Error with Chilipiper, Chilipiper submission failure. Error: ".concat(err) }; failureRedirect(formId, redirect); } }; // Function to update associated chilipiper button // @return { Void } var updateChilipiperButton = function updateChilipiperButton(formId, status) { var updateClass = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; if (updateClass === null) return; var ele = document.getElementById(formId); if (!ele) return; if (ele.parentElement && ele.parentElement.id) { var parentId = ele.parentElement.id; var connectedChilipiperElement = document.querySelector("[data-avaform-id=\"".concat(parentId, "\"]")); // Check for chilipiper button association if (connectedChilipiperElement) { switch (status) { case 'remove': connectedChilipiperElement.classList.remove(updateClass); break; default: connectedChilipiperElement.classList.add(updateClass); break; } } } }; // EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js var dayjs_min = __webpack_require__(7484); var dayjs_min_default = /*#__PURE__*/__webpack_require__.n(dayjs_min); ;// CONCATENATED MODULE: ./src/lib/actions.js // Ensure alpha order // Action Types // Types // Dispatch Actions (Keep alpha order by action) // Create your redux action below. // If you have not registered your Action type [ (): [ActionType] => () ] make sure to go into lib/types/actions and register // Failure to register will cause flow to error due to inability to find your Action for youre reducer case // Once you have created your action and registered your Action type, go to your desired reducer in /reducers and create your case // Avatax var setMltRateResponse = function setMltRateResponse(formId, response) { return { type: 'AVATAX_MLT_RESPONSE', formId: formId, response: response }; }; var captureMltAvaTaxResponse = function captureMltAvaTaxResponse(formId, response) { return { type: 'CAPTURE_MLT_AVATAX_RESPONSE', formId: formId, response: response }; }; // Init actions var initApplication = function initApplication(envStats, adobeVisitorId) { return { type: 'INIT_APPLICATION', envStats: envStats, adobeVisitorId: adobeVisitorId }; }; var initFormApplication = function initFormApplication(configs, formId, isModal, params, url, userInfo, disableHideFields) { var data = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; return { type: 'INIT_FORM_APPLICATION', configs: configs, formId: formId, isModal: isModal, params: params, url: url, userInfo: userInfo, disableHideFields: disableHideFields, data: data }; }; var initFormApplicationFailed = function initFormApplicationFailed(configs, error, formId) { return { type: 'INIT_FORM_APPLICATION_FAILED', configs: configs, error: error, formId: formId }; }; // Capture actions var addRequiredField = function addRequiredField(newFormFields, formId, newField) { return { type: 'ADD_REQUIRED_FIELD', newFormFields: newFormFields, formId: formId, newField: newField }; }; var captureInput = function captureInput(dispatch, formId, inputTarget, inputTargetTrackAbandon) { return { type: 'CAPTURE_INPUT_FIELD', dispatch: dispatch, formId: formId, inputTarget: inputTarget, inputTargetTrackAbandon: inputTargetTrackAbandon }; }; var captureIntlPhone = function captureIntlPhone(formId, countryData, id, value) { return { type: 'CAPTURE_INPUT_FIELD_INTL_PHONE', formId: formId, countryData: countryData, id: id, value: value }; }; var captureDialCode = function captureDialCode(dialCode, formId) { return { type: 'CAPTURE_DIAL_CODE', dialCode: dialCode, formId: formId }; }; var removeAbandon = function removeAbandon(formId) { return { type: 'REMOVE_ABANDON', formId: formId }; }; var setActiveField = function setActiveField(formId, id) { return { type: 'SET_ACTIVE_FIELD', formId: formId, id: id }; }; var setActiveForm = function setActiveForm(formId) { return { type: 'SET_ACTIVE_FORM', formId: formId }; }; var setInputCaptureInvalid = function setInputCaptureInvalid(formId, id, message) { return { type: 'SET_INPUT_CAPTURE_INVALID', formId: formId, id: id, message: message }; }; var setInputCaptureValid = function setInputCaptureValid(formId, id) { return { type: 'SET_INPUT_CAPTURE_VALID', formId: formId, id: id }; }; var validateConnector = function validateConnector(connectors, fieldId, formId, value) { return { type: 'VALIDATE_CONNECTORS', connectors: connectors, fieldId: fieldId, formId: formId, value: value }; }; var validateIntlPhone = function validateIntlPhone(formId, status, value, countryData, number, id) { return { type: 'VALIDATE_INPUT_FIELD_INTL_PHONE', formId: formId, status: status, value: value, countryData: countryData, number: number, id: id }; }; // Eloqua Lookup var setEloquaLookupValid = function setEloquaLookupValid(formId, values) { return { type: 'SET_ELOQUA_LOOKUP_VALID', formId: formId, values: values }; }; var setEloquaLookupInvalid = function setEloquaLookupInvalid(formId, message) { return { type: 'SET_ELOQUA_LOOKUP_INVALID', formId: formId, message: message }; }; // Loading actions // $FlowFixMe - TODO: Find all possible error information for typing var receiveSystemError = function receiveSystemError(info, statusCode) { return { type: 'RECEIVE_SYSTEM_ERROR', info: info, statusCode: statusCode }; }; var setLastFieldValidation = function setLastFieldValidation(formId, fields) { return { type: 'SET_LAST_FIELD_VALIDATION', formId: formId, fields: fields }; }; var setLoadingStart = function setLoadingStart(message, request) { return { type: 'SET_LOADING_START', message: message, request: request }; }; var setLoadingFinish = function setLoadingFinish(message) { return { type: 'SET_LOADING_FINISH', message: message }; }; // Submission actions var clearFormSubmit = function clearFormSubmit(formId) { return { type: 'CLEAR_FORM_SUBMIT', formId: formId }; }; var clearCapturedValues = function clearCapturedValues(formId, fields) { return { type: 'CLEAR_FORM_VALUES', formId: formId, fields: fields }; }; // Dynamic field actions var updateDynamicRequiredField = function updateDynamicRequiredField(formId, add, remove) { return { type: 'UPDATE_DYNAMIC_REQUIRED_FIELD', formId: formId, add: add, remove: remove }; }; // Track var trackFormAbandonStatus = function trackFormAbandonStatus(formId, fieldId) { return { type: 'TRACK_FORM_ABANDON_STATUS', formId: formId, fieldId: fieldId }; }; // SERVICES // CONNECTORS var closePickList = function closePickList(formId) { return { type: 'CLOSE_PICK_LIST', formId: formId }; }; var connectorSearchFailed = function connectorSearchFailed(endpoint, formId, message) { return { type: 'CONNECTOR_DATA_FETCH_FAILED', endpoint: endpoint, formId: formId, message: message }; }; var connectorSearchSuccess = function connectorSearchSuccess(connectors, endpoint, fieldId, formId) { return { type: 'CONNECTOR_DATA_FETCH_SUCCESS', connectors: connectors, endpoint: endpoint, fieldId: fieldId, formId: formId }; }; var searchData = function searchData(endpoint, fieldId, formId, term) { return { type: 'SEARCH_CONNECTORS', endpoint: endpoint, fieldId: fieldId, formId: formId, term: term }; }; var hideSearchResults = function hideSearchResults(fieldId, formId) { return { type: 'HIDE_SEARCH_RESULTS', fieldId: fieldId, formId: formId }; }; var saveSearchSelection = function saveSearchSelection(fieldId, formId, alt) { return { type: 'SAVE_SEARCH_SELECTION', fieldId: fieldId, formId: formId, alt: alt }; }; // Maxmind API var maxmindRunning = function maxmindRunning() { return { type: 'MAXMIND_RUNNING' }; }; var maxmindStopped = function maxmindStopped() { return { type: 'MAXMIND_STOPPED' }; }; var maxmindSuccess = function maxmindSuccess(results, url) { return { type: 'MAXMIND_SUCCESS', results: results, url: url }; }; var maxmindFail = function maxmindFail(message, url) { return { type: 'MAXMIND_FAIL', message: message, url: url }; }; var maxmindPrevented = function maxmindPrevented() { return { type: 'MAXMIND_PREVENTED' }; }; // Miles maxmind API var milesMaxmindRunning = function milesMaxmindRunning() { return { type: 'MILES_MAXMIND_RUNNING' }; }; var milesMaxmindStopped = function milesMaxmindStopped() { return { type: 'MILES_MAXMIND_STOPPED' }; }; var milesMaxmindSuccess = function milesMaxmindSuccess(results, url) { return { type: 'MILES_MAXMIND_SUCCESS', results: results, url: url }; }; var milesMaxmindFail = function milesMaxmindFail(message, url) { return { type: 'MILES_MAXMIND_FAIL', message: message, url: url }; }; var milesMaxmindPrevented = function milesMaxmindPrevented() { return { type: 'MILES_MAXMIND_PREVENTED' }; }; // Marketing API - Email verify var briteVerifyResponse = function briteVerifyResponse(email, data, status, url) { return { type: 'BRITE_VERIFY_RESPONSE', data: data, email: email, status: status, url: url }; }; var emailVerifyFailed = function emailVerifyFailed(formId, email, inputId, response) { return { type: 'EMAIL_VERIFY_FAILED', formId: formId, email: email, inputId: inputId, response: response }; }; var emailVerifySuccess = function emailVerifySuccess(response, url) { return { type: 'EMAIL_VERIFY_SUCCESS', response: response, url: url }; }; // Miles var setMilesSubmissionStatus = function setMilesSubmissionStatus(error, formId, payload, response, status) { return { type: 'SET_MILES_SUBMISSION_STATUS', error: error, formId: formId, payload: payload, response: response, status: status }; }; // Submission limite var submissionLimitApiFailed = function submissionLimitApiFailed(formId, submissionlimitid, success, response) { return { type: 'SUBMISSION_LIMIT_API_FAILED', formId: formId, submissionlimitid: submissionlimitid, success: success, response: response }; }; var setSubmissionLimitExceeeded = function setSubmissionLimitExceeeded(formId) { return { type: 'SET_SUBMISSION_LIMIT_EXCEEDED', formId: formId }; }; // Sytstem var setSystemError = function setSystemError(formId, error, info, statusCode) { return { type: 'SET_SYSTEM_ERROR', formId: formId, error: error, info: info, statusCode: statusCode }; }; // Modal var resetForm = function resetForm(formId) { return { type: 'RESET_FORM', formId: formId }; }; var toggleModal = function toggleModal(formId) { return { type: 'TOGGLE_FORM_MODAL', formId: formId }; }; var trackAsModalForm = function trackAsModalForm(formId) { return { type: 'TRACK_MODAL_FORM', formId: formId }; }; ;// CONCATENATED MODULE: ./src/schema/brite-verify.js // eslint-disable-next-line import/prefer-default-export var birghtVerifySchema = { type: 'object', properties: { account: { type: 'string' }, address: { type: 'string' }, connected: { type: ['boolean', 'string', 'null'] }, disposable: { type: 'boolean' }, domain: { type: 'string' }, duration: { type: 'number' }, error: { type: 'string' }, error_code: { type: 'string' }, role_address: { type: 'boolean' }, status: { type: 'string' } } }; /* harmony default export */ const schema_brite_verify = (birghtVerifySchema); ;// CONCATENATED MODULE: ./src/api/brite-verify.js function api_brite_verify_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function api_brite_verify_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? api_brite_verify_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : api_brite_verify_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Docs // Use the following URLs to review documentation around brite verify service // https://wiki.avalara.com/display/MT/BriteVerify+-+API+Calls // https://miles.marketing.avalara.com/swagger/doc/email_verify // Logging // Actions // Schema // API Settings // Types var marketingAPI = src_config.MILES_API; // API should technically always return success (200), however, errors are reflected in the response response.value.status var briteVerifyEmailAddressValidation = /*#__PURE__*/function () { var _ref = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(dispatch, formId, inputId) { var email, testing, userEmail, requestUrl, response, _ref2, briteVerify, schemaValidationResponse, domain, value, message, isStatus, _args = arguments; return regenerator_default().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: email = _args.length > 3 && _args[3] !== undefined ? _args[3] : null; testing = _args.length > 4 && _args[4] !== undefined ? _args[4] : false; if (!(!email || email === null)) { _context.next = 5; break; } // Log to issues found in pre-process to Sumo logger_api({ level: 'error', msgType: 'BriteVerifyEmailValidation', formId: formId, data: { message: 'Email not found during API process: no email found' } }); return _context.abrupt("return"); case 5: // Do not process API if there is no email address. userEmail = encodeURIComponent(email); userEmail = userEmail.trim(); requestUrl = "".concat(marketingAPI, "/email/verify?user_email=").concat(userEmail); _context.next = 10; return (0,shared/* fetch */.he)(requestUrl, { method: 'GET', headers: { 'Content-Type': 'application/json' } }, api_settings.timeout).then(function (result) { return result; }); case 10: response = _context.sent; window.ava = window.ava || {}; _ref2 = window.ava || { briteVerify: {} }, briteVerify = _ref2.briteVerify; window.ava.briteVerify = api_brite_verify_objectSpread(api_brite_verify_objectSpread({}, briteVerify), {}, (0,defineProperty/* default */.Z)({}, userEmail, { endpoint: requestUrl, response: response })); if (testing) { // Return response is mainly used for testing purposes // eslint-disable-next-line no-console console.log(response); } logger_api({ level: 'info', msgType: 'BriteVerifyEmailValidation', formId: formId, data: { message: "Schema validation for brite verify. Data: ".concat(JSON.stringify(response)) } }); // Run schema validation schemaValidationResponse = (0,shared/* schemaValidator */.qu)(schema_brite_verify, response); if (schemaValidationResponse && !schemaValidationResponse.ok) { // Silently fail schema, do not interrupt user, sent to Sumo for logging logger_api({ level: 'error', msgType: 'BriteVerifyResponseValidation', formId: formId, data: { message: 'Error with brite verify response schema validation', response: JSON.stringify(schemaValidationResponse) } }); } // Check the status of the returned information to be valid. Any other status is considered failed // Dispatch failure to redux reducer reducer/forms.js if no response is found if (!(!response || !response.value)) { _context.next = 27; break; } domain = ''; try { domain = window.location.host; } catch (err) { // Do nothing; } value = { account: '', address: userEmail, connected: null, disposable: false, domain: domain, duration: 1, role_address: false, status: 'unknown' }; logger_api({ level: 'error', msgType: 'BriteVerifyResponseValidation', formId: formId, data: { message: 'Error with brite verify response, no value' } }); dispatch(setInputCaptureValid(formId, inputId)); dispatch(emailVerifySuccess(value, requestUrl)); dispatch(briteVerifyResponse(userEmail, value, value.status, requestUrl)); return _context.abrupt("return"); case 27: if (!(response.value && response.value.status === 'invalid')) { _context.next = 33; break; } message = response && response.value && response.value.error ? response.value.error : 'Invalid email'; dispatch(emailVerifyFailed(formId, userEmail, inputId, response.value)); dispatch(setInputCaptureInvalid(formId, inputId, message)); // Place after verified failed to capture message and translate if needed dispatch(briteVerifyResponse(userEmail, response.value, 'fail', requestUrl)); return _context.abrupt("return"); case 33: isStatus = response.value && response.value.status ? response.value.status : 'unknown'; dispatch(setInputCaptureValid(formId, inputId)); dispatch(emailVerifySuccess(response.value, requestUrl)); dispatch(briteVerifyResponse(userEmail, response.value, isStatus, requestUrl)); case 37: case "end": return _context.stop(); } } }, _callee); })); return function briteVerifyEmailAddressValidation(_x, _x2, _x3) { return _ref.apply(this, arguments); }; }(); /* harmony default export */ const api_brite_verify = ((/* unused pure expression or super */ null && (briteVerifyEmailAddressValidation))); ;// CONCATENATED MODULE: ./src/constants/error-messages.js var errorMessages = { ADDRESS: 'Please enter your address', ADDRESS1: 'Please enter your address', COUNTRY: 'Please enter your country', CITY: 'Please enter a city', FIRSTNAME: 'Please enter your first name', LASTNAME: 'Please enter your last name', PHONE: 'Please enter your phone number', POSTALCODE: 'Please enter your postal code', STATE: 'Please enter your state', TELEPHONE: 'Please enter your telephone number', VATNUMBER: 'Please enter a valid VAT number', ZIP: 'Please enter your zip', ZIPCODE: 'Please enter your zip code' }; /* harmony default export */ const error_messages = (errorMessages); ;// CONCATENATED MODULE: ./src/constants/regexp.js // EMAIL not includes due to multi validation requirements var addressCheck = /[A-a-zZ0-9. \-()#, ]{2,}$/i; var alphaCheck = /^([a-z-]+$)/i; var alphaCheckWithSpace = /^[a-z ]{2,}$/i; var alphaNameCheck = /^[A-Za-z. -]{2,}$/i; var alphaNumericCheck = /^[a-z0-9-]+$/i; var alphaUpperCheck = /^[A-Z-]+$/g; var cityCheck = addressCheck; var companyCheck = /[#@$%^&*()<>;"+=]/i; /** This regular expression enforces the following rules for email addresses: The email address must be between 1 and 254 characters in length (inclusive). The local part (before the @ symbol) must be between 1 and 64 characters in length (inclusive). The local part may only contain alphanumeric characters, dots, underscores, slashes, plus signs, and hyphens. The local part may not contain consecutive identical special characters (e.g., "++", "//", "--"). The domain name (after the @ symbol) must be between 1 and 63 characters in length (inclusive). The domain name may only contain alphanumeric characters and hyphens. The top-level domain (e.g., ".com", ".net") must be at least 2 characters long and may be followed by one or more subdomains (e.g., ".co.uk"). */ var emailCheck = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; var lengthCheck1 = /^([a-z0-9]){1,}/i; var numericCheck = /^[0-9 ]*$/i; var noNumbersCheck = /(?:[0-9])+/i; var oneAlphaOneNumericRequired = /([a-z]){1,}([0-9]){1,}([a-z0-9]){2,}/gi; // Must include one alpha and 1 numeric to pass var phoneCheck = /[0-9]{11,}$/i; // To include dialCode var postalCheck = /^[a-zA-Z0-9\- ]{4,}$/; var StateProviceCheck = /[^0-9<>;]{2,}$/i; var xssPrevent = /[*?^$:{}()![\]\\<>=;!#%`&\\/`|~]/i; var websiteValidation = /^((http|https):\/\/)?([a-z0-9\-_]+\.)?[a-z0-9\-_]+\.[a-z]{2,}(?!.*?\.\.)[a-z0-9/-_.]*$/i; var emojiValidation = /(?:[\xA9\xAE\u2122\u23E9-\u23EF\u23F3\u23F8-\u23FA\u24C2\u25B6\u2600-\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDE51\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F\uDE80-\uDEFF]|\uD83E[\uDD00-\uDDFF])/; var REGEXP = { ADDRESS: addressCheck, // Alpha numeric check ADDRESS1: addressCheck, // Alpha numeric check APPOINTMENTDATETIME: /[0-9]/i, COMPANY: companyCheck, // Similart to xssPrevent but with more values COUNTRY: alphaCheckWithSpace, // Alpha only with space check CITY: cityCheck, // Keep seperate until more variables needed CWEBSITE: websiteValidation, // Website check DEFAULT: lengthCheck1, // Alpha only check EMAIL: emailCheck, // email regex EMOJI: emojiValidation, // emoji regex NAME: noNumbersCheck, // no numbers PHONE: phoneCheck, // Numeric only check POSTALCODE: postalCheck, // Alpha numeric check PROVINCE: alphaNameCheck, // Alpha with space REGION: alphaNameCheck, // Alpha with space STATE: StateProviceCheck, // XSS exclude TELEPHONE: numericCheck, // Numeric check XSSCHECK: xssPrevent, // Invalidate on XSS Threat matrix ZIP: postalCheck, // Alpha numeric check ZIPCODE: postalCheck // Alpha numeric check }; /* harmony default export */ const regexp = (REGEXP); ;// CONCATENATED MODULE: ./src/helpers/forms.js function forms_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function forms_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? forms_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : forms_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Service // Actions // Types // Constants // Helper to set fields to information from logged in AWP user // @return { void } var captureUserInfo = function captureUserInfo(dispatch, fields, userInfo, formId) { return fields.forEach(function (f) { if (!userInfo) { return; } if (Array.isArray(f)) { captureUserInfo(dispatch, (0,toConsumableArray/* default */.Z)(f), userInfo, formId); return; } var newField = f; if (userInfo[f.id]) { newField.value = userInfo[f.id]; dispatch(captureInput(dispatch, formId, { id: newField.id, type: newField.type || 'text', value: newField.value }, false)); } }); }; // Add or removes form requirements based on dyanmic fields being added or removed var captureDynamicsRequiredFields = function captureDynamicsRequiredFields(dispatch, formId, target, dynamicFields) { var value = target.value; var allValues = Object.keys(dynamicFields); var add = []; var remove = []; var setUpdateFieldDynamicsArrays = function setUpdateFieldDynamicsArrays(fieldsArray) { var addRequired = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; for (var i = 0; i < fieldsArray.length; i++) { if (Array.isArray(fieldsArray[i])) { setUpdateFieldDynamicsArrays(fieldsArray[i]); } else { var required = fieldsArray[i].required; var childId = fieldsArray[i].id; remove.push(childId); // Flow requirement for null check if (addRequired && required != null && required) add.push(childId); } } }; // iterate through all fields to remove all those previously set allValues.forEach(function (k) { // Boolean will only set add, when it is the array key equal the value passed in. setUpdateFieldDynamicsArrays(dynamicFields[k], Boolean(k === value)); }); dispatch(updateDynamicRequiredField(formId, add, remove)); }; // Helper to clean the field values as needed // @return { string } var cleanFieldValue = function cleanFieldValue(value, id) { var stripSpacesFromField = ['firstName', 'lastName', 'email', 'partner_rep_email']; if (stripSpacesFromField.includes(id)) { return value.trim(); } return value; }; // Helper to check the fields array for a field by id. // @return { boolean } var checkIfFieldIsSet = function checkIfFieldIsSet() { var fields = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var id = arguments.length > 1 ? arguments[1] : undefined; return Boolean(fields.filter(function (f) { return f.id === id; }).length > 0); }; // Checks to see if the id of the field is in the hasError Array // return @{Boolean} var checkIfHasError = function checkIfHasError(id, fields) { if (!fields) return false; if (fields.filter(function (f) { return f.id === id; }).length > 0) { return fields.filter(function (f) { return f.id === id; })[0]; } return false; }; // Helper to allow GDPR to be set inside a field container other than the submit var containsGdprField = function containsGdprField(id, gdprField) { return Boolean(id === gdprField); }; var formatFormTemplateName = function formatFormTemplateName() { var formName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (name !== null) return name.replace(/[\W\-_ ]+/g, '').toUpperCase(); if (formName !== null) return formName.replace(/[\W\-_ ]+/g, '').toUpperCase(); return ''; }; // Helper function to loop through the active form data and obtain the JSON to render said field // @return @Object var getFieldValueObject = function getFieldValueObject(fields, id) { return fields.filter(function (f) { return f.id === id; })[0] || { value: '' }; }; // Helper function to formate captured date time // @return { String } var getFormattedDate = function getFormattedDate(selectedDate) { var date = new Date(selectedDate); var year = date.getFullYear(); var hours = date.getHours(); var minutes = date.getMinutes().toString(); minutes = minutes.length > 1 ? minutes : "0".concat(minutes); var month = (1 + date.getMonth()).toString(); month = month.length > 1 ? month : "0".concat(month); var day = date.getDate().toString(); day = day.length > 1 ? day : "0".concat(day); return "".concat(year, "-").concat(month, "-").concat(day, " ").concat(hours, ":").concat(minutes); }; // Helper, checks the ENV to set the country for testing purposes: var checkDefaultIntlPhoneCountry = function checkDefaultIntlPhoneCountry() { var isoCode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; if (localStorage.getItem('avlrTesting') && localStorage.getItem('avlrTesting') === 'true' && localStorage.getItem('avlrGeoLocale')) { var testLocale = localStorage.getItem('avlrGeoLocale') || 'US'; return testLocale.toLocaleLowerCase(); // Use testing if available } if (isoCode !== null) return isoCode.toLowerCase(); // Use isoCode if available return 'auto'; // default to auto }; // Get all field IDs // @return { array } var getFieldIds = function getFieldIds(fields) { var fieldIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; if (!fields) return []; fields.forEach(function (f) { if (Array.isArray(f)) { fieldIds.concat(getFieldIds((0,toConsumableArray/* default */.Z)(f), fieldIds)); } if (!Array.isArray(f)) { fieldIds.push(f.id); } }); return fieldIds; }; // Helper to enable/disable submit button // @return { boolean } // Updated to look through captured and requred explicitly since using a count can be construded as success when blind capture is being complete. // D&B, Maxmind, Eloqua blind data captures were causing this to return the wrong value var isSubmitDisabled = function isSubmitDisabled(requiredFields, validatedFields) { return requiredFields.some(function (r) { return !validatedFields.includes(r); }); }; // Helper to append scripts to page for usage // @return { null } var loadAssociatedScripts = function loadAssociatedScripts(scripts) { var pageHead = document.getElementsByTagName('head'); if (!pageHead || !scripts || scripts && scripts.length < 1) return; var newPageHead = pageHead[0]; var script = document.createElement('script'); script.async = true; for (var i = 0; i < scripts.length; i++) { script.src = scripts[i]; var getId = scripts[i].split('/'); getId = getId[getId.length - 1].split('.')[0].toUpperCase(); script.id = "avaform-script-".concat(getId); if (!document.getElementById(script.id)) { newPageHead.appendChild(script); } } }; // Helper function to find the value needed to display field text on render // IE: displayText: "First name" placeholder: "Please enter your first name" // Placeholder text is required, but the placeholder text and displayText can be differnt. // @return @String var setDisplayText = function setDisplayText() { var displayText = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var placeholder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; if (displayText !== null && displayText !== '') { return displayText; } return placeholder; }; // Helper function to assist with setting the input name value // Ex: // @return @String var setFieldName = function setFieldName() { var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var id = arguments.length > 1 ? arguments[1] : undefined; if (name === null || name === '') { return id; } return name; }; var setFieldOverwriteConfigs = function setFieldOverwriteConfigs(configs, fields) { var newConfig = forms_objectSpread({}, configs); var overwriteValues = { partnersource: null, campaign_id: null }; var overwrite = function overwrite(keysToOverwrite) { Object.keys(keysToOverwrite).forEach(function (key) { var fieldValue = fields.filter(function (field) { return field.id === key; }).map(function (field) { return field.value; }); if (fieldValue[0]) { // this suggstion does not make sense, i am not destructuring /* eslint-disable prefer-destructuring */ // $FlowFixMe newConfig[key] = fieldValue[0]; } }); }; overwrite(configs); overwrite(overwriteValues); // if (window.location.pathname.includes('/us/en/get-started.html')) { // // eslint-disable-next-line no-undef // const poi = adobeDataLayer[0].page?.state?.previous_page_poi; // newConfig.poi = poi || newConfig.poi; // } return newConfig; }; // Helper function to allow custom classes to be passed to the field container. // JSON Data: ['class1', 'class2', 'class3'] // Ex output: "class1 class2 class3" // @return @String var setActiveContainer = function setActiveContainer() { var activeField = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var id = arguments.length > 1 ? arguments[1] : undefined; var setClass = []; if (activeField !== null && activeField === id) { setClass.push('activeContainer', 'active'); } return setClass.join(' '); }; // Helper function to allow custom classes to be passed to the field input. // @return @String var setActiveInputClass = function setActiveInputClass() { var activeField = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var id = arguments.length > 1 ? arguments[1] : undefined; var setClass = []; if (activeField !== null && activeField === id) { setClass.push('active'); } return "".concat(setClass.join(' '), " "); }; // Helper function to allow custom classes to be passed to the field at the input level. // JSON Data: ['class1', 'class2', 'class3'] // Ex output: "class1 class2 class3" // @return @String var setFieldClasses = function setFieldClasses(classes) { var newClasses = []; if (classes) { newClasses = classes; } return newClasses.join(' '); }; // Helper function to pass class to the placeholder text container // JSON Data: 'class1'; // Ex ouput 'class1' // @return @String var setInputClass = function setInputClass() { var setClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; if (setClass === null) { return ''; } return setClass; }; // Helper class to add validation classes to the active field // @return @String var setInputValidationClass = function setInputValidationClass(errorState, id, isSet, hasBeenValidated) { var setClass = []; if (!!errorState && errorState.message) { setClass.push('inValid'); } if (isSet) { setClass.push('isSet'); } if ((!errorState || errorState && errorState.message === null) && isSet && hasBeenValidated.includes(id)) { setClass.push('valid'); } return setClass.join(' '); }; // Helper to set the parent z-index of a form holding an intl phone element // @return { void } var setParentZindex = function setParentZindex(formId) { if (!formId) return; var el = document.getElementById(formId); if (!el || !el.style) return; el.style.zIndex = '10'; }; // Helper class to get error messages from ERRORMESSAGES constant // @return @String var setErrorMessage = function setErrorMessage(id) { return error_messages[id.replace(/[\W\-_ ]+/gi, '').toUpperCase()] || 'This field is required'; }; // Helper to append connector id that was found during search var setSearchFieldValue = function setSearchFieldValue(search, formId, fields) { var newFields = fields; if (search && search[formId] && search[formId].connector_id) { // set connector Id if is set from search fields.push({ id: 'C_Connector1', value: search[formId].connector_id }); } if (search && search[formId] && search[formId].industry_id) { var newIndustry = [{ id: 'C_Industry1', value: fields.filter(function (f) { return f.id === 'industry_id'; })[0].value }, { id: 'industry_api_id', value: search[formId].industry_id }]; var newItem = true; // overwrite with the new field set var newIndustryFields = newFields.map(function (obj) { var newField = newIndustry.find(function (o) { return o.id === obj.id; }); if (newField) newItem = false; return newField || obj; }); newFields = newIndustryFields; if (newItem) { var _newFields; (_newFields = newFields).push.apply(_newFields, newIndustry); } } return newFields; }; // Set values to the window var removeFromWindowAbandoned = function removeFromWindowAbandoned(formId) { try { var abandonedForms = window.ava.abandonedForms; var remainingForms = abandonedForms.filter(function (f) { return f !== formId; }); window.ava = forms_objectSpread(forms_objectSpread({}, window.ava), {}, { abandonedForms: remainingForms }); } catch (e) { // Do nothing } }; // Helper to get Eloqua Customer GUID // @return { String } var getEloquaGUID = function getEloquaGUID() { var _window = window, GetElqCustomerGUID = _window.GetElqCustomerGUID; if (GetElqCustomerGUID && typeof GetElqCustomerGUID === 'function') { return window.GetElqCustomerGUID(); } return ''; }; // Helper function to retrieve regex validation from REGEXP_VALIDATION constant // getRegExpPattern is a constants file with regEx patters set for validation // @return @RegExp var getRegExpPattern = function getRegExpPattern(id) { if (regexp[id]) { return regexp[id]; } return regexp.DEFAULT; }; // Check if value is set in the string var isSelected = function isSelected(captureValue, value) { if (!captureValue || captureValue === '') return false; if (captureValue.split(',').includes(value)) return true; return false; }; // Set the target value capture for select-multiple var setMultiSelectTarget = function setMultiSelectTarget(parent, id, parentValue, value) { var hasBeenSelected = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; // $FlowFixMe - ToDo: Find out why this is failing if (!parent || parent && !parent.getElementsByTagName) return { id: id, value: parentValue, type: 'select-multiple' }; if (parent) { var selectedOptions = parent.getElementsByTagName('button'); var options = []; if (selectedOptions) { for (var i = 0; i < selectedOptions.length; i++) { if (selectedOptions[i].classList.contains('selected')) options.push(selectedOptions[i].value); } } options.push(value); // Remove if already selected if (hasBeenSelected) options = options.filter(function (o) { return o !== value; }); // eslint-disable-next-line consistent-return return { id: id, value: options.join(','), type: 'select-multiple' }; } // eslint-disable-next-line consistent-return return null; }; // Helper function to get vibrancy if exists // @return { string | null } var getFieldVibrancy = function getFieldVibrancy(formsState, formId) { if (!formsState) return null; if (formsState.activeForms && formsState.activeForms[formId] && formsState.activeForms[formId].configs && formsState.activeForms[formId].configs !== null && formsState.activeForms[formId].configs.vibrancy !== null) { return formsState.activeForms[formId].configs.vibrancy; } return null; }; // Helper function that handles field validation steps // Sends the results to the forms reducer // Email validation completes BriteVerify dispatch action is validates as true // @return @Void (no return value) var validateField = function validateField(dispatch) { var customValidation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var formId = arguments.length > 2 ? arguments[2] : undefined; var isRequired = arguments.length > 3 ? arguments[3] : undefined; var requiredFields = arguments.length > 4 ? arguments[4] : undefined; var target = arguments.length > 5 ? arguments[5] : undefined; var cleanTarget = target; var id = cleanTarget.id, type = cleanTarget.type; var value = cleanTarget.value; value = cleanFieldValue(value, id); var ignoreInputValidation = ['checkbox', 'radio', 'select', 'select-multiple', 'select-one', 'select-state']; // Ignore validation on these field types since they will be preset values passed. Intl phone will be validated through the plugin var ignoreFieldById = ['appointment_datetime', 'connector_id', 'industry_id']; if (!isRequired && value !== '') { switch (id) { case 'C_website': if (!regexp.CWEBSITE.test(value)) { dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'Please enter a valid URL')); // There is a second check for the below for required fields return; } dispatch(captureInput(dispatch, formId, cleanTarget)); dispatch(setInputCaptureValid(formId, id)); break; default: break; } } // if is not required and not in the required array stop processing if (!isRequired && !requiredFields.includes(id)) return; // All below assumes it is a required field // Ensure input values has value if required if (!ignoreInputValidation.includes(type) && value === '') { dispatch(captureInput(dispatch, formId, cleanTarget)); dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'This field is required')); return; } // Single out for select for checkbox could have an empty value if (type === 'select-one' || type === 'select-state' || type === 'select-multiple') { dispatch(captureInput(dispatch, formId, cleanTarget)); if (value === '') dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'This field is required')); // Can not be empty trigger error else dispatch(setInputCaptureValid(formId, id)); // Allow any value passed ignoring XSS return; } if (type === 'checkbox') { if (cleanTarget.checked === false && isRequired) { dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'This field is required')); return; } dispatch(setInputCaptureValid(formId, id)); return; } // Check XSS threat matrix if (regexp.XSSCHECK.test(value) && !ignoreInputValidation.includes(type) && !ignoreFieldById.includes(id)) { dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'Invalid characters found')); return; } // Check Emojis if (regexp.EMOJI.test(value) && !ignoreInputValidation.includes(type) && !ignoreFieldById.includes(id)) { dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'Emoji characters not allowed')); return; } if (regexp.XSSCHECK.test(value) && (ignoreInputValidation.includes(type) || ignoreFieldById.includes(id))) { logger_api({ level: 'error', msgType: 'RegexFieldValidationError', formId: formId, data: { message: 'Possible XSS error', field: JSON.stringify(cleanTarget), location: 'helpers/forms.js "validateField"' } }); } if (customValidation !== null) { if (!customValidation.test(value)) { dispatch(setInputCaptureInvalid(formId, id, setErrorMessage(id))); return; } dispatch(setInputCaptureValid(formId, id)); return; } if (ignoreInputValidation.includes(type) && isRequired) dispatch(setInputCaptureValid(formId, id)); if (!ignoreInputValidation.includes(type)) { switch (id.toLowerCase()) { case 'company': if (regexp.COMPANY.test(value)) { dispatch(setInputCaptureInvalid(formId, id, 'Invalid characters found')); return; } break; case 'c_website': if (!regexp.CWEBSITE.test(value)) { dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'Please enter a valid URL')); return; } break; case 'email': case 'ref_email': if (!/(['@.'])/.test(value) || value.split('@').length < 2) { dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'Please enter a valid email')); return; } // check for .[suffix] if (!regexp.EMAIL.test(value) || value.startsWith('@') || value.startsWith('+')) { dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'Invalid email format. Please enter a valid email')); return; } // Brite verify validation is happening on capture input // REFACTOR NOTE: Look to mock responses for tests to pass if ((0,ui/* checkIfIsTesting */.bE)()) dispatch(setInputCaptureValid(formId, id)); // For test passing this needs to be here if (!(0,ui/* checkIfIsTesting */.bE)()) briteVerifyEmailAddressValidation(dispatch, formId, id, value); return; case 'fullname': // Check value with and without middle name with dot value = value.trim(); if (value.split(' ').length < 2 || regexp.NAME.test(value)) { dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'Please enter your full name')); return; } break; case 'firstname': case 'lastname': if (regexp.NAME.test(value)) { dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'Please enter your name')); return; } break; case 'partner_rep_email': if (!/(['@.'])/.test(value) || value.split('@').length < 2) { dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'Please enter a valid email')); return; } // check for .[suffix] if (!regexp.EMAIL.test(value) || value.startsWith('@') || value.startsWith('+')) { dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'Invalid email format. Please enter a valid email')); return; } if (value.includes('avalara.com')) { dispatch(setInputCaptureInvalid(formId, cleanTarget.id, 'Please enter your email.')); return; } // Brite verify validation is happening on capture input // REFACTOR NOTE: Look to mock responses for tests to pass if ((0,ui/* checkIfIsTesting */.bE)()) dispatch(setInputCaptureValid(formId, id)); // For test passing this needs to be here if (!(0,ui/* checkIfIsTesting */.bE)()) briteVerifyEmailAddressValidation(dispatch, formId, id, value); return; default: { var pattern = getRegExpPattern(id.replace(/[\W\-_ ]+/gi, '').toUpperCase()); if (pattern && !pattern.test(value)) { dispatch(setInputCaptureInvalid(formId, id, setErrorMessage(id))); return; } } break; } } if (target) dispatch(captureInput(dispatch, formId, cleanTarget)); dispatch(setInputCaptureValid(formId, id)); }; // Helper function to remove the 0 when appending in alter locations // @return { string } var checkPhoneValue = function checkPhoneValue(dialCode, value) { var newValue = value.trim(); var cleanDialCode = dialCode.replace(/\D/gi, ''); var checkValue = newValue.toString().replace(cleanDialCode, '').replace(/\D/gi, ''); if (checkValue && checkValue[0] && checkValue[0].toString() === '0') { newValue = checkValue.split('').splice(1, checkValue.split('').length - 1).join(''); newValue = "".concat(dialCode.replace(/\D/gi, '')).concat(newValue.replace(/\D/gi, '')); } return newValue.replace(/\D/gi, '').trim(); }; // Helper function that handles field validation steps // Sends the results to the forms reducer // Email validation completes BriteVerify dispatch action is validates as true // @return @Void (no return value) var validateIntlPhoneField = function validateIntlPhoneField(dispatch) { var customValidation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var dialCode = arguments.length > 2 ? arguments[2] : undefined; var formId = arguments.length > 3 ? arguments[3] : undefined; var isRequired = arguments.length > 4 ? arguments[4] : undefined; var requiredFields = arguments.length > 5 ? arguments[5] : undefined; var target = arguments.length > 6 ? arguments[6] : undefined; if (!target) return; var id = target.id; var value = target.value; value = checkPhoneValue(dialCode, value); var newTarget = target; newTarget.value = value; if (target) dispatch(captureInput(dispatch, formId, newTarget)); if (isRequired && value === '') { dispatch(setInputCaptureInvalid(formId, id, setErrorMessage(id))); return; } if (customValidation !== null) { if (!customValidation.test(value)) { dispatch(setInputCaptureInvalid(formId, id, 'Please enter a valid phone number')); return; } dispatch(setInputCaptureValid(formId, id)); return; } var minLength = 4 + dialCode.replace(/\D/gi, '').length; value = value.replace(/\D/gi, ''); if (value.length < minLength || value.length > 18) { dispatch(setInputCaptureInvalid(formId, id, 'Please enter a valid phone number')); return; } dispatch(setInputCaptureValid(formId, id)); }; // Helper function that forces validation on all active form inputs var validateAllFields = function validateAllFields(dispatch, dialCode, formId, fields, requiredFields, activeData) { // Looping through activeData fields here to build up the "input target" with id and type for checkbox/select field types var mapFieldsToValidators = function mapFieldsToValidators(activeDataFields) { return activeDataFields.forEach(function (f) { if (Array.isArray(f)) { mapFieldsToValidators((0,toConsumableArray/* default */.Z)(f)); } else { var customValidation = null; var isRequired = requiredFields ? requiredFields.includes(f.id) : false; var targetField = fields.filter(function (field) { return field.id === f.id; }); var value = targetField.length > 0 ? targetField[0].value : null; if (value === null || value === '') { if (isRequired) { dispatch(setInputCaptureInvalid(formId, f.id, 'This field is required')); return; } } if (value !== null) { var target = { id: f.id, value: value, type: f.type || 'text' }; if (f.id === 'phone') { validateIntlPhoneField(dispatch, customValidation, dialCode, formId, isRequired, requiredFields, target); } else { validateField(dispatch, customValidation, formId, isRequired, requiredFields, target); } } } }); }; mapFieldsToValidators(activeData.fields); }; var validateAdditionalFields = function validateAdditionalFields(fields) { var acceptedValues = ['marketing_feedback_notes', 'download_link']; var validFields = []; Object.keys(fields).forEach(function (k) { if (acceptedValues.includes(k) && fields[k]) { validFields.push({ id: k, value: fields[k] }); } }); return validFields; }; // Check dates for form disabled. Return attribute value to set on input field var isFieldDisabled = function isFieldDisabled(limit) { var configs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { submissionLimitEndDate: null, submissionLimitStartDate: null }; if (limit) return 'disabled'; var now = dayjs_min_default()().format('YYYY-MM-DD'); var submissionLimitEndDate = configs.submissionLimitEndDate, submissionLimitStartDate = configs.submissionLimitStartDate; if (submissionLimitStartDate && submissionLimitStartDate !== null && submissionLimitStartDate !== '') { var startDate = dayjs_min_default()(submissionLimitStartDate).format('YYYY-MM-DD'); if (now < startDate) return 'disabled'; } if (submissionLimitEndDate && submissionLimitEndDate !== null && submissionLimitEndDate !== '') { var endDate = dayjs_min_default()(submissionLimitEndDate).format('YYYY-MM-DD'); if (now >= endDate) return 'disabled'; } return ''; }; ;// CONCATENATED MODULE: ./src/constants/language-by-field.js var fieldsByLocal = { Address: { de: 'Adresse', fr: 'Adresse', pr: 'Endereço' }, 'Address 1': { de: 'Adresse 1', fr: 'Adresse Ligne 1', it: 'Indirizzo 1', es: 'Dirección 1', pl: 'Adres 1', pt: null }, 'Address 2': { de: 'Adresse 2', fr: 'Adresse Ligne 2', it: 'Indirizzo 2', es: 'Dirección 2', pl: 'Adres 2', pt: null }, Comments: { de: 'Bemerkungen', es: 'Comentarios', fr: 'Commentaires', it: 'Commenti', pt: 'Mensagem' }, 'Choose Country': { de: 'Wähle Land', fr: 'choisissez un pays', it: 'Scegli il paese', es: 'Seleccione el país', pt: 'Wybierz kraj' }, 'Choose one': { de: 'Wähle ein', es: 'Elija uno', fr: 'choisissez-en un', it: 'Scegli uno', pl: 'Wybierz jeden', pt: null }, City: { de: 'Stadt', es: 'Ciudad', fr: 'Ville', it: 'Città', pl: 'Miasto', pt: 'Cidade' }, Company: { de: 'Firma', es: 'Empresa', fr: 'Nom de la compagnie', it: 'Nome della società', pt: 'Empresa' }, 'Company profile': { de: 'Firmenprofil', es: null, fr: 'Profile d’entreprise', it: null, pt: null }, Country: { de: 'Land', es: 'País', fr: 'Pays', it: 'Stato', pl: 'Kraj', pr: 'País' }, 'Country of Establishment': { de: null, es: null, fr: 'Pays d’ etablissement', it: null, pt: null }, Email: { de: 'E-Mail Adresse', fr: 'Adresse e-mail', it: 'Email', es: 'Email', pl: 'Email', pt: 'Email' }, 'Business email': { de: 'Geschäftliche E-Mail-Addresse', fr: 'Email Professionel', it: null, es: null, pl: null, pt: 'Email corporativo' }, 'First name': { de: 'Vorname', es: 'Nombre de pila', fr: 'Prénom', it: 'Nome di battesimo', pt: 'Primeiro nome' }, 'Full name': { de: 'Vollständiger Name', es: 'Nombre completo', fr: 'Nom complet', it: 'Nome e cognome', pt: 'Nome completo' }, 'Last name': { de: 'Nachname', es: 'Apellido', fr: 'Nom de famille', it: 'Cognome', pl: 'Último nome', pr: 'Sobrenome' }, Miss: { de: null, es: 'Señorita', fr: 'Mademoiselle', it: 'Signorina', pt: null }, Mr: { de: 'Herr', es: 'Señor', fr: 'Monsieur', it: 'Signore', pt: 'Senhor' }, Mrs: { de: 'Frau', es: 'Señora', fr: 'Madame', it: 'Signora', pt: null }, Ms: { de: 'Sehr geehrte Frau', es: 'Sra', fr: null, it: 'Sig.ra', pt: null }, Name: { de: 'Name', es: 'Nombre completo', fr: 'Nom complet', it: 'Nome e cognome', pl: 'Pełne imię i nazwisko', pt: 'Nome' }, No: { de: 'Nein', es: 'No', fr: 'Non', it: 'No', pt: 'Nie' }, Phone: { de: 'Telefonnummer', es: 'Número de teléfono', fr: 'Numéro de téléphone', it: 'Telefono', pl: 'Numer telefonu', pt: 'Número de telefone' }, 'Postal code': { de: 'PLZ', fr: 'Code postal', pr: 'Código postal (CEP)' }, 'Privacy Policy': { de: 'Datenschutzrichtlinie', es: null, fr: null, it: null, pl: null, pt: null }, Questions: { de: 'Fragen', es: null, fr: 'Questions', it: null, pt: 'Questões' }, Select: { de: 'Wählen', es: 'Seleccionar', fr: 'Sélectionner', it: 'Scegliere', pt: null }, Submit: { de: 'Anfrage abschicken', es: 'Enviar solicitud', fr: 'Envoyer demande', it: 'Invia richiesta', pl: 'Zatwierdź', pt: 'Enviar' }, State: { de: 'Mitgliedstaat', es: 'Estado/provincia', fr: 'État / province', it: 'Stato / Provincia', pl: 'Stan / Prowincja', pt: 'Estado' }, Title: { de: 'Titel', es: 'Título', fr: 'Titre', it: 'Appellativo', pt: 'Cargo' }, Website: { de: 'Webseite', fr: 'Site Internet', it: 'Sito Web', es: null, pl: null, pt: null }, Yes: { de: 'Ja', es: 'Sí', fr: 'Oui', it: 'Si', pl: 'Tak', pt: null }, Zip: { fr: 'Code postal', pt: 'Código postal (CEP)' }, 'Zip code': { de: 'PLZ', es: 'Código postal', fr: 'Code postal', it: 'Cap', pl: 'Kod pocztowy', pt: 'Código postal (CEP)' }, 'I would like to receive the latest in tax news, best practices, and other marketing communications from Avalara and may unsubscribe at any time.': { de: 'Ja, ich moechte ueber Neuigkeiten und Angebote informiert werden, kann aber jederzeit widerrufen.', es: null, fr: 'Je souhaite recevoir des communications marketing de Avalara, et peut me désabonner à tout moment.', it: null, pl: null, pt: null } }; /* harmony default export */ const language_by_field = (fieldsByLocal); ;// CONCATENATED MODULE: ./src/constants/language-by-question.js var questionByLocale = { 'Almost there! Please complete your profile. (FR)': { pt: 'Estamos quase lá! Por favor complete seu perfil' }, 'Amazon promotion code': { de: 'Amazon Promotion Code', es: 'Código promocional de Amazon', fr: 'code promotionnel d\'Amazon', it: 'codice promozionale Amazon', pl: null, pt: null }, 'Appointment Notes': { de: 'Termin Notizen', pt: 'Notas do compromisso' }, 'Are you looking for VAT registrations or returns?': { de: 'Wir benötigen folgende Informationen von Ihnen', es: null, fr: 'Est vous intéressez par les immatriculations a la TVA ou bien les déclarations de TVA?', it: null, pl: null, pt: null }, 'Are you VAT registered in your country?': { de: 'Sind Sie bereits umsatzsteuerlich erfasst?', es: '¿Está sujeto a IVA en su país?', fr: 'Êtes-vous inscrit a la TVA dans votre pays?', it: 'Sei registrato ai fini IVA nel tuo Stato di stabilimento?', pl: 'Czy posiadasz rejestrację VAT w swoim kraju?', pt: null }, 'Central European Expansion Poland and Czech Republic only': { de: 'Zentraleuropa Programm - Polen/Tschechien (nur Polen und Tschechien)', es: null, fr: null, it: null, pl: null, pt: null }, 'Date & Time (Pacific Time)': { de: 'Datum', pt: 'Data e horário (horário padrão do Pacífico)' }, 'Do you have a VAT question?': { de: 'Haben Sie eine Frage betreffend der Umsatzsteuer?', es: null, fr: 'Avez-vous une question relative a la TVA?', it: null, pl: null, pt: null }, 'European Union France, Czech Republic, Germany, Italy, Poland, Spain, UK': { de: 'Pan-Europa Programm – FR, UK, IT, SP, PL, CZ', es: null, fr: null, it: null, pl: null, pt: null }, 'EU countries you are already VAT registered in': { de: 'Sonstige EU Laender in denen Sie bereits umsatzsteuerlich erfasst sind', es: 'Países de la UE en los que tiene registrado el número de IVA', fr: 'Pays de l\'UE où vous êtes déjà inscrit dans la TVA', it: 'Elencare gli Stati UE in cui si è già registrati ai fini IVA', pl: 'Kraje w Unii Europejskiej w których posiadasz numer VAT', pt: null }, 'How can we help': { de: 'Wie können wir Ihnen behilflich sein?', es: null, fr: 'Comment pouvons nous vous aidez?', it: null, pl: null, pt: null }, 'I accept this partner agreement in whole': { de: 'Ich bin mit den AGBs der Partnerschaftsvertrag vollkommen einverstanden', pt: 'Declaro que li e aceito os termos deste contrato de parceria' }, 'I am a Company': { de: 'Unternehmen', es: null, fr: ' Je suis une Compagnie / Entreprise', it: null, pl: null, pt: null }, 'I am a Charity/Non Profit': { de: 'Wohlfahrtsverband', es: null, fr: 'Je suis une Compagnie / Entreprise', it: null, pl: null, pt: null }, 'I am a Partnership': { de: 'Partnerschaft (z.B. GbR)', es: null, fr: 'Je suis une entreprise en partenariat', it: null, pl: null, pt: null }, 'I am a Sole Trader': { de: 'Einzelunternehmen', es: null, fr: 'Je suis une Entreprise individuelle', it: null, pl: null, pt: null }, 'I am an Individual': { de: 'Person', es: null, fr: 'je suis un travailleur autonome', it: null, pl: null, pt: null }, 'Please choose a product': { de: 'Bitte wählen Sie ein Produkt aus', es: null, fr: null, it: null, pl: null, pt: null }, 'Please tell us': { de: 'Wir brauchen bitte die folgende Information', es: null, fr: 'S’il vous plait veuillez confirmer', it: null, pl: null, pt: null }, 'Prospect Email': { de: 'E-Mail Adresse des Interessenten', pt: 'Email do Prospec' }, 'Prospect Name': { de: 'Ansprechpartner des Interessenten', pt: 'Nome do Prospect' }, 'Prospect Phone': { de: 'Telefonnummer des Interessenten', pt: 'Telefone do Prospect' }, 'Prospect Title': { de: 'Titel des Interessenten', pt: 'Cargo do Prospect' }, 'Prospect Integration Software': { pt: 'Software de Integração do Prospect' }, 'Which countries are you interested in?': { de: 'In welchen Ländern möchten Sie sich umsatzsteuerlich registrieren lassen?', es: null, fr: 'Quels sont les pays qui vous intéresse?', it: null, pl: null, pt: null }, 'Your Amazon seller number': { de: 'Ihre Amazon Verkäufernummer', es: 'Su número de vendedor de Amazon', fr: 'Votre numéro de vendeur Amazon', it: 'Numero account venditore Amazon', pl: 'Twój numer sprzedawcy Amazon', pt: null }, 'Your Busienss Email': { pt: 'Por favor insira seu email comercial' }, 'Your country VAT number': { de: 'Umsatzsteuer-Identifikationsnummer', es: 'Número de IVA de su país', fr: 'Votre numéro de TVA intracommunautaire dans votre pays', it: 'Numero di partita IVA dello Stato di stabilimento', pl: 'Numer VAT w Twoim kraju', pt: null } }; /* harmony default export */ const language_by_question = (questionByLocale); ;// CONCATENATED MODULE: ./src/constants/language-by-error.js var errorByLocale = { 'Email domain invalid': { de: 'Bitte eine gueltige Email Adresse eintragen', es: 'Por favor introduzca un número de email válido', fr: 'S\'il vous plaît entrer un Adresse email valide', it: 'Si prega di inserire un numero di email valido', pt: 'Por favor insira um endereço de email válido' }, 'Field must be exactly 64-characters long': { de: 'Das Feld muss exakt 64 Zeichen lang sein', es: 'El campo tiene que tener exactamente 64 caracteres', fr: 'Le champ doit comporter exactement 64 caractères', it: 'Il campo deve contenere esattamente 64 caratteri', pt: null }, 'First and last name are both required': { de: 'Vor- und Zuname werden benoetigt', es: 'Nombre y apellido ambos son obligatorios', fr: 'Nom et prénom sont tous deux nécessaires', it: 'Nome e cognome sono entrambi necessari', pt: 'Nome e sobrenome são ambos necessários' }, 'First and last name are required': { pt: 'Nome e sobrenome são obrigatórios', fr: 'Nom et prénom sont tous deux nécessaires' }, 'Invalid characters found': { de: 'Ungültige Zeichen gefunden', pt: 'Caracteres inválidos encontrados' }, 'Illegal characters found': { de: 'Illegale Zeichen gefunden', pt: 'Caracteres ilegais encontrados' }, 'Invalid email': { de: 'Bitte eine gueltige Email Adresse eintragen', es: 'Por favor introduzca un número de email válido', fr: 'S\'il vous plaît entrer un Adresse email valide', it: 'Si prega di inserire un numero di email valido', pt: 'Por favor insira um endereço de email válido' }, 'Invalid email format. Please enter a valid email': { de: 'Ungültige E-Mail Adresse.', fr: 'S\'il vous plaît entrer un Adresse email valide\'anchor', pt: 'Formato de email inválido. Por favor insira um endereço de email válido.' }, 'Letters, hyphens, apostrophies, and spaces only': { de: 'Buchstaben, Bindestriche, Apostrophen und Freizeichen ausschliesslich', es: 'Lettere, trattini, apostrofi e spazi soltanto', fr: 'Lettres, trait d’union, apostrophe et espace seulement', it: 'Letras, guiones, apóstrofos, y espacios solamente', pt: 'Somente letras, hífens, apóstrofos e espaços' }, 'Please enter a valid email': { de: 'Bitte tragen Sie eine gültige E-Mail ein', es: 'Por favor introduzca un número de email válido', fr: 'S\'il vous plaît entrer un Adresse email valide', it: 'Si prega di inserire un numero di email valido', pt: 'Por favor insira um endereço de email válido' }, 'Please enter a valid email address': { de: 'Bitte eine gueltige Email Adresse eintragen', es: 'Por favor introduzca un número de email válido', fr: 'S\'il vous plaît entrer un Adresse email valide', it: 'Si prega di inserire un numero di email valido', pt: 'Por favor insira um endereço de email válido' }, 'Please enter a valid phone number': { de: 'Bitte geben Sie eine gültige Telefonnummer ein', es: 'Por favor introduzca un número de teléfono válido', fr: 's\'il vous plaît entrer un numéro de téléphone valide', it: 'Si prega di inserire un numero di telefono valido', pt: 'Por favor insira um número de telefone válido' }, 'Please enter a valid URL': { de: 'Bitte geben Sie eine gültige URL ein', es: null, fr: 'Veuillez entrer un URL valide', it: 'Inserisci un URL valido', pt: 'Por favor insira uma URL válida' }, 'Please enter a valid VAT number': { de: 'Bitte geben Sie eine gültige MwSt.-Nummer ein' }, 'Please enter your address': { de: 'Bitte geben Sie Ihre Adresse ein', pt: 'Digite seu endereço' }, 'Please enter your first name': { de: 'Bitte geben Sie Ihren vollständigen Vornamen ein', fr: 'Nom et prénom sont tous deux nécessaires', pt: 'Por favor insira seu primeiro nome' }, 'Please enter your full name': { de: 'Bitte geben Sie Ihren vollständigen Namen ein', fr: 'Nom et prénom sont tous deux nécessaires', pt: 'Por favor insira seu nome completo' }, 'Please enter your last name': { de: 'Bitte geben Sie Ihren Nachnamen ein', pt: 'Por favor insira seu sobrenome' }, 'Please enter your phone number': { de: 'Bitte geben Sie Ihre Telefonnummer ein', pt: 'Por favor insira seu número de telefone' }, 'Please enter your postal code': { de: 'Bitte geben Sie Ihre Postleitzahl ein', pt: 'Por favor insira seu CEP' }, 'Please enter your state': { de: 'Bitte geben Sie Ihre Mitgliedstaat ein ', pt: 'Por favor insira seu estado' }, 'Please enter your title': { de: 'Bitten geben Sie Ihre Titel ein', pt: 'Por favor insira seu cargo' }, 'Please enter your telephone number': { de: 'Bitte geben Sie Ihre Telefonnummer ein', pt: 'Por favor insira seu número de telefone' }, 'Please enter your email': { fr: 's\'il vous plaît entrer un Adresse e-mail valide', pl: 'Digite seu email', pt: 'Por favor insira seu email' }, 'Please enter your city': { de: 'Bitte geben Sie Ihren Staat ein', pt: 'Por favor insira sua cidade' }, 'Please enter your country': { de: 'Bitte geben Sie Ihr Land ein', pt: 'Por favor insira seu país' }, 'Please enter your zip': { de: 'Bitte geben Sie Ihre PLZ ein', pt: 'Por favor insira seu código postal (CEP)' }, 'Please enter your zipcode': { de: 'Bitte geben Sie Ihre Postleitzahl ein', pt: 'Por favor insira seu código postal (CEP)' }, 'Something went wrong. Why not call our sales team directly?': { de: 'Etwas ist schief gelaufen. Warum nicht direkt unseren Vertrieb anrufen?', pt: 'Algo deu errado. Por que não contatar nosso time de vendas diretamente?' }, 'Special characters are not allowed': { de: 'Buchstaben, Bindestriche, Apostrophen und Freizeichen ausschliesslich', es: 'Lettere, trattini, apostrofi e spazi soltanto', fr: 'Lettres, trait d’union, apostrophe et espace seulement', it: 'Letras, guiones, apóstrofos, y espacios solamente', pt: 'Somente letras, hífens, apóstrofos e espaços' }, 'System Error': { pt: 'Algo deu errado. Por que não contatar nosso time de vendas diretamente?' }, 'This field is invalid': { de: 'Dieses Feld is ungültig', es: 'Este campo no es valido', fr: 'Ce champ n\'est pas valide', it: 'Questo campo non è valido', pt: 'Campo inválido' }, 'This field is required': { de: 'Das ist ein Pflichtfeld', es: 'Este campo es obligatorio', fr: 'Ce champ est requis', it: 'Questo campo è obbligatorio', pt: 'Este campo é obrigatório' } }; /* harmony default export */ const language_by_error = (errorByLocale); ;// CONCATENATED MODULE: ./src/constants/language.js // Types var translationByLocale = { Austria: { de: 'Österreich', es: 'Austria', fr: 'Autriche', it: 'Austria', pt: 'Austria' }, Belgium: { de: 'Belgien', es: 'Bélgica', fr: 'Belgique', it: 'Belgio', pt: 'Belgia' }, Bulgaria: { de: 'Bulgarien', es: 'Bulgaria', fr: 'Bulgarie', it: 'Bulgaria', pt: 'Bułgaria' }, Croatia: { de: 'Kroatien', es: 'Croacia', fr: 'Croatie', it: 'Croazia', pt: 'Chorwacja' }, Cyprus: { de: 'Zypern', es: 'Chipre', fr: 'Chypre', it: 'Cipro', pt: 'Cypr' }, 'Czech Republic': { de: 'Tschechien', es: 'República Checa', fr: 'République Tchèque', it: 'Repubblica Ceca', pt: 'Republika Czeska' }, Denmark: { de: 'Dänemark', es: 'Dinamarca', fr: 'Danemark', it: 'Danimarca', pt: 'Dania' }, Estonia: { de: 'Estland', es: 'Estonia', fr: 'Estonie', it: 'Estonia', pt: 'Estonia' }, error: language_by_error, fields: language_by_field, Finland: { de: 'Finnland', es: 'Finlandia', fr: 'Finlande', it: 'Finlandia', pt: 'Finlandia' }, France: { de: 'Frankreich', es: 'Francia', fr: 'France', it: 'Francia', pt: 'Francja' }, Germany: { de: 'Deutschland', es: 'Alemania', fr: 'Allemagne', it: 'Germania', pt: 'Niemcy' }, Greece: { de: 'Griechenland', es: 'Grecia', fr: 'Grèce', it: 'Grecia', pt: 'Grecja' }, Hungary: { de: 'Ungarn', es: 'Hungría', fr: 'Hongrie', it: 'Ungheria', pt: 'Węgry' }, Ireland: { de: 'Irland', es: 'Irlanda', fr: 'Irlande', it: 'Irlanda', pt: 'Irlandia' }, Italy: { de: 'Italien', es: 'Italia', fr: 'Italie', it: 'Italia', pt: 'Włochy' }, Latvia: { de: 'Lettland', es: 'Letonia', fr: 'Lettonie', it: 'Lettonia', pt: 'Łotwa' }, Lithuania: { de: 'Litauen', es: 'Lituania', fr: 'Lituanie', it: 'Lituania', pt: 'Litwa' }, Luxembourg: { de: 'Luxemburg', es: 'Luxemburgo', fr: 'Luxembourg', it: 'Lussemburgo', pt: 'Luksemburg' }, Malta: { de: 'Malta', es: 'Malta', fr: 'Malte', it: 'Malta', pt: 'Malta' }, Netherlands: { de: 'Niederlande', es: 'Países Bajos', fr: 'Pays-Bas', it: 'Olanda', pt: 'Holandia' }, Poland: { de: 'Polen', es: 'Polonia', fr: 'Pologne', it: 'Polonia', pt: 'Polska' }, Portugal: { de: 'Portugal', es: 'Portugal', fr: 'Portugal', it: 'Portogallo', pt: 'Portugalia' }, Romania: { de: 'Rumänien', es: 'Rumania', fr: 'Roumanie', it: 'Romania', pt: 'Rumunia' }, Slovakia: { de: 'Slowakei', es: 'Eslovaquia', fr: 'Slovaquie', it: 'Slovacchia', pt: 'Słowacja' }, Slovenia: { de: 'Slowenien', es: 'Eslovenia', fr: 'Slovénie', it: 'Slovenia', pt: 'Słowenia' }, Spain: { de: 'Spanien', es: 'España', fr: 'Espagne', it: 'Spagna', pt: 'Hiszpania' }, Sweden: { de: 'Schweden', es: 'Suecia', fr: 'Suède', it: 'Svezia', pt: 'Szwecja' }, 'United Kingdom': { de: 'Großbritannien', es: 'Reino Unido', fr: 'Royaume-Uni', it: 'Regno Unito', pt: 'Wielka Brytania' }, questions: language_by_question }; /* harmony default export */ const language = (translationByLocale); ;// CONCATENATED MODULE: ./src/helpers/language.js // Data // Helper to get locale string text // @return { String } var getLocaleStringText = function getLocaleStringText(text, type) { var locale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'en'; if (!locale || locale === 'en' || locale === 'us') return text; // $FlowFixMe - Find out why flow is looking at number when it isn't being passed per above string set if (language[text] && language[text][locale] && language[text][locale] !== null && language[text][locale] !== '') return language[text][locale]; // $FlowFixMe - Find out why flow is looking at number when it isn't being passed per above string set if (language.fields && language.fields[text] && language.fields[text] && language.fields[text][locale] && language.fields[text][locale] !== null && language.fields[text][locale] !== '') return language.fields[text][locale]; // $FlowFixMe - Find out why flow is looking at number when it isn't being passed per above string set if (language.questions && language.questions[text] && language.questions[text] && language.questions[text][locale] && language.questions[text][locale] !== null && language.questions[text][locale] !== '') return language.questions[text][locale]; // $FlowFixMe - Find out why flow is looking at number when it isn't being passed per above string set if (language.error && language.error[text] && language.error[text] && language.error[text][locale] && language.error[text][locale] !== null && language.error[text][locale] !== '') return language.error[text][locale]; if (type === 'error') { // $FlowFixMe - Find out why flow is looking at number when it isn't being passed per above string set if (language.error && language.error[text] && language.error[text] && !language.error[text][locale]) return language.error["This field is invalid"][locale]; } return text; }; /* harmony default export */ const helpers_language = ((/* unused pure expression or super */ null && (getLocaleStringText))); ;// CONCATENATED MODULE: ./src/helpers/analytics.js function analytics_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function analytics_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? analytics_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : analytics_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var trackFields = (/* unused pure expression or super */ null && (['offer', 'contact_method', 'opp_subtype', 'email', 'goal_type', 'query_string'])); var triggerAutoFillTracking = function triggerAutoFillTracking(formId) { /* eslint-disable camelcase */ var _window = window, s_gi = _window.s_gi, _satellite = _window._satellite; if (_satellite && s_gi && s_gi !== null) { var env = !(0,ui/* checkIfIsDevelop */.QK)() ? 'avalaraprod' : 'avalaradev'; var s = s_gi(env); s.clearVars(); // Clean object s.linkTrackVars = 'events,prop51,pageURL'; s.linkTrackEvents = 'event130'; s.events = 'event130'; // Get current url and set value to prop51 and pageURL var currentURL = window && window.location ? window.location.href.split('?')[0] : 'undefined'; s.prop51 = currentURL; s.pageURL = currentURL; s.tl(true, 'o', 'EloquaAutoFill'); logger_api({ level: 'info', msgType: 'triggerAutoFillTracking', formId: formId, data: { message: 'analtyics.js "triggerAutoFillTracking" success.' } }); } else { logger_api({ level: 'info', msgType: 'triggerAutoFillTracking', formId: formId, data: { message: 'analtyics.js "triggerAutoFillTracking" failed. _satellite was not found' } }); } /* eslint-enable camelcase */ }; // Helper function to trigger tracking on MLT rate lookup // @return { Void } // This function is used to compile MLT rate tracking values, which will append to the AMO base tracking triggers. var triggerRateLookupTracking = function triggerRateLookupTracking(formId, name, isSatelliteBlocked) { /* eslint-disable camelcase */ var mltRateLookup = window.ava.mltRateLookup; var response = mltRateLookup[formId].response; var value = response.value; var address = value.address, rate = value.rate; var isValid = address.valid || false; var hasRate = rate !== null; var _window2 = window, s_gi = _window2.s_gi; if (!isSatelliteBlocked && s_gi && s_gi !== null) { var trackingName = name !== null ? name : 'MLT lodging rate lookup'; var env = !checkIfIsDevelop() ? 'avalaraprod' : 'avalaradev'; var s = s_gi(env); // Setup tracking s.linkTrackVars = 'events,prop51,pageURL'; var events = []; // check addressValidation if (!isValid) events.push('event131'); // check rate lookup if (!hasRate) events.push('event132'); // If is in a modal add new event tracking s.linkTrackEvents = events.join(','); s.events = events.join(','); // Get current url and set value to prop51 and pageURL var currentURL = window && window.location ? window.location.href.split('?')[0] : 'undefined'; s.prop51 = currentURL; s.pageURL = currentURL; // Track analytics metrics var analytics = window.ava.analytics ? window.ava.analytics : {}; window.ava.analytics = analytics_objectSpread(analytics_objectSpread({}, analytics), {}, { events: events, eVars: {}, linkTrackEvents: s.linkTrackEvents.split(','), trackingName: trackingName, name: name, pageURL: s.pageURL, props: { prop51: s.prop51 } }); // S.TL TRACKING TRIGGER IS RUN WITH THE HELPERS/AMO.JS logger({ level: 'info', msgType: 'triggerRateLookupTracking', formId: formId, data: { message: 'analtyics.js "triggerRateLookupTracking" successful' } }); } /* eslint-disable camelcase */ }; // Avaform Engagement Analytics Call var avaformEngagementAnalyticsCall = function avaformEngagementAnalyticsCall(formId, eVar15, eVar115, isModalForm) { var _window3 = window, s_gi = _window3.s_gi; if (s_gi) { // configure the env var based on working environment var env = !(0,ui/* checkIfIsDevelop */.QK)() ? 'avalaraprod' : 'avalaradev'; // initialize the analytics object with the working environment, which will bind to the window var s = s_gi(env); // clear all vars from the analytics object s.clearVars(); // set link track vars for all events, props, evars, and hierarchy variables s.linkTrackVars = 'events,prop30,prop31,prop32,prop51,eVar15,eVar115,eVar80,hier1,pageURL'; // event162 was previously non-assigned, we will be using this going forward to track this specific event (when a user first interacts with avaform) // s.linkTrackEvents will setup a binding to this specific event variable s.linkTrackEvents = 'event162'; s.events = 'event162'; // Collect Categories to be fetched from the window var _window$location$path = window.location.pathname.split('/').filter(function (c) { return c; }), _window$location$path2 = (0,slicedToArray/* default */.Z)(_window$location$path, 3), prop30 = _window$location$path2[0], prop31 = _window$location$path2[1], prop32 = _window$location$path2[2]; var cleanProp32 = prop32 ? prop32.split('.')[0] : ''; s.prop30 = prop30 || ''; s.prop31 = prop31 || ''; s.prop32 = cleanProp32; // fetch the current url from the window and bind to prop51 and pageURL in adobe analytics var currentUrl = window && window.location ? window.location.href.split('?')[0] : 'undefined'; s.prop51 = currentUrl; s.pageURL = currentUrl; s.eVar15 = eVar15; s.eVar115 = eVar115; s.eVar80 = isModalForm ? '1' : '0'; // Calculate hier1 hierarchy variable // this is based on the page domain, paths are separated by pipes // e.g. https://avalara.com/us/en/index.html would translate to www.avalara.com | us | en | index (file extension is omitted) var hier1 = ''; if (currentUrl !== 'undefined') { var url = new URL(currentUrl); var pathNameArray = url.pathname.split('/'); var pageFileName = pathNameArray[pathNameArray.length - 1].split('.')[0]; pathNameArray[pathNameArray.length - 1] = pageFileName; hier1 = ["www.".concat(url.host)].concat(pathNameArray.filter(function (element) { return element.length > 0; })).join(' | '); } else { hier1 = 'null'; } // bind hier1 to the analytics object s.hier1 = hier1; // trigger the avaform initial interaction analytics event s.tl(true, 'o', 'AvaformInitialInteraction'); // update analytics object in the window var analytics = window.ava.analytics ? window.ava.analytics : {}; window.ava.analytics = analytics_objectSpread(analytics_objectSpread({}, analytics), {}, { events: [s.events], eVars: { eVar15: s.eVar15, eVar115: s.eVar115, eVar80: s.eVar80 }, linkTrackEvents: s.linkTrackEvents.split(','), name: 'AvaformInitialInteraction', pageURL: s.pageURL, props: { prop30: s.prop30, prop31: s.prop31, prop32: s.prop32, prop51: s.prop51 } }); // clean the vars again from the analytics object s.clearVars(); // log to sumo that the analytics call was successful logger_api({ level: 'info', msgType: 'avaformEngagementAnalyticsCall', formId: formId, data: { message: 'analtyics.js "avaformEngagementAnalyticsCall" success' } }); } else { logger_api({ level: 'info', msgType: 'avaformEngagementAnalyticsCall', formId: formId, data: { message: 'analytics.js "avaformEngagementAnalyticsCall" failed. s_gi not set' } }); } }; var storedData = {}; var getParamFromAvaTag = function getParamFromAvaTag(param) { var _window4 = window, AvaTag = _window4.AvaTag; if (AvaTag) { var avaTagData = AvaTag.getCombinedData(); var normalizeParam = param.toLowerCase(); var keys = avaTagData ? Object.keys(avaTagData) : {}; // Convert all keys to lowercase for extraction if (!storedData[normalizeParam]) { for (var i = 0; i < keys.length; i++) { storedData[keys[i].toLowerCase()] = avaTagData[keys[i]]; } } if (storedData[normalizeParam]) return storedData[normalizeParam]; } return null; }; /* harmony default export */ const analytics = ((/* unused pure expression or super */ null && (triggerRateLookupTracking))); ;// CONCATENATED MODULE: ./src/reducers/forms.js function reducers_forms_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function reducers_forms_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? reducers_forms_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : reducers_forms_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Data // Helpers // Types var forms_defaultState = { abandonedForms: [], // This is used to track abandons. When field is set to active formId is set into this array if not already there. Remove on submit success activeForm: null, activeForms: {}, // Loads the active forms activeFields: {}, // onFocus will place as associatve to the form template {[formTemplate]: value} autoFillData: { forms: [], ok: false, values: null, fieldValues: null }, captureFields: {}, // Array of all fields once captured regardless of validation. key:value pair chilipiperConnected: [], cleanPayload: null, dialCode: {}, // Captures the current dial code for validation needs eloquaPayload: eloqua_field_mapping, // Default payload for eloqua gdprField: {}, hasBeenValidated: {}, // Array of all field after the field has been validated hasError: {}, // Captured in error array if required and doesn't validate as expected init: {}, // Form application init status initStatus: {}, // Used to load status messages if failed. lastField: {}, // Set value to capture last field check. Last field will validate in change to activate submit button sooner modalForms: [], // Hold form name in array to check if is inside a modal reCaptureFields: [], // Used to store all form capture and input already captured/validated fields when form is set to active requiredFields: {}, // Array of required fields is set on build setFields: {}, // All fields are set here upon capture and validation pass if required selectedCompany: null, showModal: {}, submissionlimit: {}, validatedFields: {} // Array of required fields that have been and validated }; // Helper to add submission lmnit information to form apture var addSubmissionLimitDataToCapture = function addSubmissionLimitDataToCapture() { var fields = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var submissionLimitId = arguments.length > 1 ? arguments[1] : undefined; var newFields = !fields || fields && !Array.isArray(fields) ? [] : fields; if (!submissionLimitId || submissionLimitId && submissionLimitId === '') { if (newFields.filter(function (f) { return f.id && f.id.toLowerCase() === 'submissionlimitid'; }).length > 0) { return newFields; } } var submissionField = { displayText: 'submissionlimitid', id: 'submissionlimitid', placeholder: 'submissionlimitid', required: false, type: 'hidden', value: submissionLimitId }; if (newFields.filter(function (f) { return f.id && f.id.toLowerCase() === 'submissionlimitid'; }).length < 1) newFields.push(submissionField); return newFields; }; // Helper functions required inside reducer // Takes the capture field and saves them to localStorage // @return { void } var autoSaveData = function autoSaveData(captureFields, formId) { try { // Save to localStorage for later capture var currentSave = localStorage && window.localStorage.getItem && window.localStorage.getItem && typeof window.localStorage.getItem === 'function' && window.localStorage.getItem('avaAutoSave') ? JSON.parse(window.localStorage.getItem('avaAutoSave')) : []; var autoSave = [].concat((0,toConsumableArray/* default */.Z)(captureFields), (0,toConsumableArray/* default */.Z)(currentSave)); // eslint-disable-next-line no-use-before-define autoSave = dedupeArray(autoSave); if (localStorage && window.localStorage.setItem && typeof window.localStorage.setItem === 'function') { window.localStorage.setItem('avaAutoSave', JSON.stringify(autoSave)); } return autoSave; } catch (err) { // Return empty logger_api({ level: 'error', msgType: 'AutoSaveError', formId: formId, data: { message: 'localStorage not available. Not saved.', info: JSON.stringify(err), fields: JSON.stringify(captureFields) } }); return []; } }; // Checks to see if the country field is available in the form. // @return { Boolean } var checkForVisibleCountry = function checkForVisibleCountry(fields) { if (!fields || fields.length < 1) return false; for (var i = 0; i < fields.length; i++) { if (Array.isArray(fields[i])) { return checkForVisibleCountry((0,toConsumableArray/* default */.Z)(fields[i])); } if (!Array.isArray(fields[i]) && fields[i].id === 'country') return true; } return false; }; // Dedupes an array down to single values of each item // @return { Array } var dedupeArray = function dedupeArray(array) { if (!Array.isArray(array)) return array; return array.reduce(function (acc, current) { var i = acc.find(function (item) { return item.id === current.id; }); return !i ? acc.concat([current]) : acc; }, []); }; // Filters out a value from an array -> Array type only // @return { array } var filterOutArrayById = function filterOutArrayById() { var filterArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var id = arguments.length > 1 ? arguments[1] : undefined; return filterArray.filter(function (f) { return f !== id; }); }; // Returns all original elements except the one equal to passed in ID // @return { array } var filterOutErrorById = function filterOutErrorById() { var filterArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var id = arguments.length > 1 ? arguments[1] : undefined; return filterArray.filter(function (f) { return f.id !== id; }); }; // Returns the field that is connected to GDPR // @return { Array } var getGdprField = function getGdprField(fields) { var gdprFields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; if (!fields) return []; fields.forEach(function (f) { if (Array.isArray(f)) { gdprFields.concat(getGdprField((0,toConsumableArray/* default */.Z)(f), gdprFields)); } if (!Array.isArray(f) && f.containsGdpr) { gdprFields.push(f.id); } }); return gdprFields; }; // Gets the ID of the last field. This is use to validate on change if is last field // @return { string } var getLastFieldId = function getLastFieldId(fields) { var field = fields[fields.length - 1]; if (Array.isArray(field)) { return getLastFieldId((0,toConsumableArray/* default */.Z)(field)); } return field.id; }; // Gets all required fields and sets them to an array // @return { array } var getRequiredFields = function getRequiredFields(fields) { var areRequired = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; if (!fields) return []; fields.forEach(function (f) { if (Array.isArray(f)) { areRequired.concat(getRequiredFields((0,toConsumableArray/* default */.Z)(f), areRequired)); } if (!Array.isArray(f) && f.required) { areRequired.push(f.id); } }); return areRequired; }; // Checks for hidden fields and captures the values // @return { array } var getHiddenFields = function getHiddenFields(fields) { var areHidden = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; if (!fields) return []; fields.forEach(function (f) { if (Array.isArray(f)) { areHidden.concat(getHiddenFields((0,toConsumableArray/* default */.Z)(f), areHidden)); } if (!Array.isArray(f) && f.type === 'hidden' && f.value) { areHidden.push({ id: f.id, value: f.value }); } }); return areHidden; }; // Gets the fields from localStorage // @return { Array<{ id: string, value: string }> } var getRequiredFieldsFromStorage = function getRequiredFieldsFromStorage(fields, stored) { if (!stored || stored.length < 1) return []; var newFields = []; // eslint-disable-next-line array-callback-return fields.map(function (f) { if (Array.isArray(f)) { newFields.concat(getRequiredFieldsFromStorage((0,toConsumableArray/* default */.Z)(f), stored)); } if (!Array.isArray(f) && stored.filter(function (s) { return s.id === f.id; })[0] && f.required) { newFields.push(stored.filter(function (s) { return s.id === f.id; })[0].id); } }); return newFields; }; // Removes object element from Object Array // @return { Array } var removeFieldsFromObjectArray = function removeFieldsFromObjectArray(fields, fieldsRemove) { if (!fields) return []; var newFields = []; fields.map(function (f) { if (Array.isArray(f)) { newFields.push(removeFieldsFromObjectArray((0,toConsumableArray/* default */.Z)(f), fieldsRemove)); } else if (!fieldsRemove.includes(f.id)) { newFields.push(f); } return f; }); return [].concat(newFields); }; // Convert key to Eloqua key for localStorage save var getEloquaKey = function getEloquaKey(key) { switch (key) { case 'company': return 'accountname'; case 'firstName': return 'firstname'; case 'lastName': return 'lastname'; case 'email': return 'emailId'; case 'phone': return 'phonenumber'; default: return key; } }; var removeFromEloquaData = function removeFromEloquaData(id) { try { var eloquaData = localStorage.getItem('avlrEloquaData') || '{}'; if (typeof eloquaData === 'string') eloquaData = JSON.parse(eloquaData); var _ref = eloquaData || { fieldValues: [] }, fieldValues = _ref.fieldValues; var _ref2 = eloquaData || { values: {} }, values = _ref2.values; fieldValues = fieldValues.filter(function (f) { return f.id !== id; }); delete values[getEloquaKey(id)]; eloquaData.fieldValues = fieldValues; eloquaData.values = values; window.localStorage.setItem('avlrEloquaData', JSON.stringify(eloquaData)); } catch (e) { // Do nothing } }; // Save values to eloquaData window object var saveToEloquaData = function saveToEloquaData(id, value) { if (value === '') return; // Don't overwrite values; var formId = 'N/A'; var _ref3 = window.ava || { eloquaData: { values: {}, fieldValues: [] } }, eloquaData = _ref3.eloquaData; var _ref4 = eloquaData || { values: {}, fieldValues: [] }, values = _ref4.values, fieldValues = _ref4.fieldValues; var storedData = {}; try { storedData = localStorage.getItem('avlrEloquaData') || '{}'; storedData = typeof storedData === 'string' ? JSON.parse(storedData) : {}; values = storedData.values || eloquaData.values; fieldValues = storedData.fieldValues || eloquaData.fieldValues; } catch (e) { // Do nothing } if (!values || values && values === null) values = {}; // Re-check mis-capture/save as null if (!fieldValues || fieldValues && fieldValues === null) fieldValues = []; if (id === 'fullname') { var split = value.split(' '); split = split.map(function (v) { return v.trim(); }); var _split = split, _split2 = (0,slicedToArray/* default */.Z)(_split, 2), firstname = _split2[0], lastname = _split2[1]; values.firstname = firstname; if (lastname) values.lastname = lastname; } // Set eloqua object value values[getEloquaKey(id)] = value; fieldValues = dedupeArray(fieldValues); fieldValues = fieldValues.filter(function (f) { return f && f.id && f.id !== id; }); fieldValues.push({ id: id, value: value }); if (id === 'fullname') { var _value$split$map = value.split(' ').map(function (v) { return v.trim(); }), _value$split$map2 = (0,slicedToArray/* default */.Z)(_value$split$map, 2), firstName = _value$split$map2[0], lastName = _value$split$map2[1]; if (firstName && firstName !== '') { fieldValues = fieldValues.filter(function (f) { return f.id !== 'firstName'; }); fieldValues.push({ id: 'firstName', firstName: firstName }); values.firstname = firstName; } if (lastName && lastName !== '') { fieldValues = fieldValues.filter(function (f) { return f.id !== 'lastName'; }); fieldValues.push({ id: 'lastName', lastName: lastName }); values.lastname = lastName; } } var date = new Date(); var timeStamp = date.getTime(); var newEloquaData = reducers_forms_objectSpread(reducers_forms_objectSpread({}, eloquaData), {}, { ok: true, fieldValues: fieldValues, timeStamp: timeStamp, values: values }); // Save data to window window.ava.eloquaData = newEloquaData; try { // Attempt to save data to localStorage localStorage.setItem('avlrEloquaData', JSON.stringify(newEloquaData)); } catch (err) { // Do nothing logger_api({ level: 'Info', msgType: 'saveToEloquaData', formId: formId, data: { message: 'localStorage not available. Not saved.', info: JSON.stringify(err), fields: JSON.stringify(fieldValues) } }); } }; // Passes in an array of fields that will override fields in the formData. This is mainly used when fieldsReplicate is used // @return { Array } var setFieldOverwrite = function setFieldOverwrite(fields, fieldsOverwrite) { if (!fields) return []; var newFields = []; for (var i = 0; i < fields.length; i++) { if (Array.isArray(fields[i])) { newFields.push(setFieldOverwrite((0,toConsumableArray/* default */.Z)(fields[i]), fieldsOverwrite)); } if (!Array.isArray(fields[i])) { (function () { var id = fields[i].id; var newField = fieldsOverwrite.filter(function (o) { return o.id === id; })[0]; if (newField) { newFields.push(newField); } else { newFields.push(fields[i]); } })(); } } return [].concat(newFields); }; // Converst the events object passed in from AEM into an array value to be used in the form // @return { Array } var setEventOptions = function setEventOptions(fields, eventArray) { if (!fields) return []; if (!eventArray || eventArray && eventArray.length < 1) return fields; // Set option object var newEventArray = eventArray.map(function (event) { return { display: event.eventLabel, value: JSON.stringify({ event_identifier: event.eventIdentifier1, event_identifier2: event.eventIdentifier2, datetime: event.eventDateTime }) }; }); return fields.map(function (f) { if (Array.isArray(f)) { // $FlowFixMe Why is this incompatible. It should be Array and is report it is not return setEventOptions((0,toConsumableArray/* default */.Z)(f), eventArray); } if (!Array.isArray(f) && f.id === 'events') { return reducers_forms_objectSpread(reducers_forms_objectSpread({}, f), {}, { options: newEventArray }); } return f; }); }; // Sets field array for validation on init // @return { Array } var setFieldsFromStorage = function setFieldsFromStorage(fields, stored) { if (stored.length < 1) return []; var newFields = []; // eslint-disable-next-line array-callback-return fields.map(function (f) { if (Array.isArray(f)) { newFields.concat(setFieldsFromStorage((0,toConsumableArray/* default */.Z)(f), stored)); } if (!Array.isArray(f) && stored.filter(function (s) { return s.id === f.id; })[0]) { newFields.push(stored.filter(function (s) { return s.id === f.id; })[0]); } }); return newFields; }; // Sets partner source to fields array var setHiddenPartnerSource = function setHiddenPartnerSource(configs, fields) { var newFields = fields; var _ref5 = window.location || '', search = _ref5.search; var partnerQSValue = new URLSearchParams(search); if (configs.partnersource && configs.partnersource !== '' || partnerQSValue.get('partner_rep_email')) { var partnerValue = configs.partnersource; // Start check form param value if (partnerQSValue.get('partnersource')) { partnerValue = partnerQSValue.get('partnersource') || configs.partnersource; } newFields.push({ displayText: 'partner_source', id: 'partnersource', placeholder: 'partner_source', type: 'hidden', value: partnerValue, required: false }); if (partnerQSValue.get('partner_rep_email')) { var partnerRepValue = partnerQSValue.get('partner_rep_email'); newFields.push({ displayText: 'partner_rep_email', id: 'partner_rep_email', placeholder: 'partner_rep_email', type: 'hidden', value: partnerRepValue, required: false }); } // End check for param value } return newFields; }; // Lcoalize display text to be witin the locale language. File constants/lanauge-questions // @return { Array } var translateDisplayText = function translateDisplayText() { var fields = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var locale = arguments.length > 1 ? arguments[1] : undefined; if (locale === 'en') return fields; if (!fields || fields === null) return fields; var setFields = []; fields.forEach(function (f) { if (Array.isArray(f)) { setFields.push(translateDisplayText((0,toConsumableArray/* default */.Z)(f), locale)); } if (!Array.isArray(f) && locale !== null) { var localeText = f.displayText; var displayText = f.displayText; if (displayText && locale !== null) { localeText = getLocaleStringText(displayText, 'question', locale); setFields.push(reducers_forms_objectSpread(reducers_forms_objectSpread({}, f), {}, { displayText: localeText, placeholder: localeText })); } } }); return setFields; }; // Parse out event information // Complete this step here in order to catch after append/remove/overwrite step var setEvents = function setEvents(configs, fields) { if (configs.events && configs.events !== null && configs.events !== '') { var events = typeof configs.events === 'string' && configs.events !== null && configs.events !== '' && (0,ui/* isJson */.sO)(configs.events) ? JSON.parse(configs.events) : configs.events; if (Array.isArray(events)) return setEventOptions(fields, events); } return fields; }; var WEBFORM_T1 = 'WEBFORM T1'; var INDUSTRY = 'INDUSTRY'; var hasIndustryField = function hasIndustryField(fields) { var hasFoundIndustry = false; fields.every(function (f) { if (Array.isArray(f)) { hasFoundIndustry = hasIndustryField(f); if (hasFoundIndustry) { return false; } } else if (f.displayText && INDUSTRY === f.displayText.toUpperCase()) { hasFoundIndustry = true; return false; } return true; }); return hasFoundIndustry; }; // Get data for modal setup var getModalData = function getModalData(hasBeenValidated, validatedFields, currentForm, isModal, formId, fields, state) { var autoSaveDataContent = JSON.stringify([]); try { autoSaveDataContent = window.localStorage.getItem('avaAutoSave') || autoSaveDataContent; } catch (err) { // Do nothing; } var newHasBeenValidated = hasBeenValidated; var newValidatedFields = validatedFields; var newCaptureFields = state.captureFields[formId] || []; var activeForm = currentForm; if (isModal) { activeForm.values = [].concat((0,toConsumableArray/* default */.Z)(newCaptureFields), (0,toConsumableArray/* default */.Z)(activeForm.values), (0,toConsumableArray/* default */.Z)(setFieldsFromStorage(fields, JSON.parse(autoSaveDataContent)))); var testHasBeenValidated = activeForm.values.map(function (a) { return a.id; }); // Set fields to have been validated var testValidatedFields = getRequiredFieldsFromStorage(fields, setFieldsFromStorage(fields, JSON.parse(autoSaveDataContent))); // set fields to validated newHasBeenValidated = testHasBeenValidated.concat(newHasBeenValidated); newValidatedFields = testValidatedFields.concat(newValidatedFields); } return { newActiveForm: activeForm, modalHasBeenValidated: newHasBeenValidated, modalValidatedFields: newValidatedFields }; }; // Set Chilipiper attributes on load var setChilipiperState = function setChilipiperState(chilipiper, formId) { chilipiper.filter(function (f) { return f !== formId; }); if (isConnectedToChilipiper(formId) && !/chilipiper/.test(formId)) { chilipiper.push(formId); disableChilipiperButton(formId); appendClassToHeader(); } return chilipiper; }; // eslint-disable-next-line func-names /* harmony default export */ function reducers_forms() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : forms_defaultState; var action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'ADD_REQUIRED_FIELD': { var newFormFields = action.newFormFields, formId = action.formId, newField = action.newField; return reducers_forms_objectSpread(reducers_forms_objectSpread({}, state), {}, { activeForms: reducers_forms_objectSpread(reducers_forms_objectSpread({}, state.activeForms), {}, (0,defineProperty/* default */.Z)({}, formId, reducers_forms_objectSpread(reducers_forms_objectSpread({}, state.activeForms[formId]), {}, { fields: newFormFields }))), requiredFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, state.requiredFields), {}, (0,defineProperty/* default */.Z)({}, formId, [].concat((0,toConsumableArray/* default */.Z)(state.requiredFields[formId]), [newField]))) }); } case 'CAPTURE_DIAL_CODE': { var dialCode = action.dialCode, _formId = action.formId; var newState = state; var newDialCode = newState.dialCode; return reducers_forms_objectSpread(reducers_forms_objectSpread({}, newState), {}, { dialCode: reducers_forms_objectSpread(reducers_forms_objectSpread({}, newDialCode), {}, (0,defineProperty/* default */.Z)({}, _formId, dialCode)) }); } case 'CAPTURE_INPUT_FIELD': { var _formId2 = action.formId, inputTarget = action.inputTarget; var id = inputTarget.id, type = inputTarget.type; var _newState = state; var captureFields = reducers_forms_objectSpread({}, _newState.captureFields); var value = inputTarget.value; if (type === 'checkbox') { value = inputTarget.checked && inputTarget.value ? inputTarget.value : '1'; if (!inputTarget.checked || inputTarget.checked === '') { value = ''; } } if (id === 'gdprConsentDate') { value = inputTarget.checked ? new Date().toISOString() : ''; } value = cleanFieldValue(value, id); var newFields = state.captureFields[_formId2] ? state.captureFields[_formId2].filter(function (v) { return v.id !== id; }) : []; // Remove field from array, prevent duplication var newCaptureFields = captureFields[_formId2] ? captureFields[_formId2].filter(function (v) { return v.id !== id; }) : []; newCaptureFields = dedupeArray(newCaptureFields); var newSetFields = filterOutArrayById(state.setFields[_formId2], id); // Remove field from array, prevent duplication var newRequiredValidation = filterOutArrayById(state.validatedFields[_formId2], id); var newErrorState = state.hasError[_formId2]; var newValidState = state.hasBeenValidated[_formId2]; newValidState = filterOutArrayById(newValidState, id); // Remove from hasBeenValidated array, prevent duplication newErrorState = filterOutErrorById(newErrorState, id); // Remove from error array, prevent duplication if (value !== '') { newFields.push({ id: id, value: value }); // Push new field value newCaptureFields.push({ id: id, value: value }); // Push new field value newSetFields.push(id); // Set as an active field } var reCaptureFields = dedupeArray([].concat((0,toConsumableArray/* default */.Z)(state.reCaptureFields), [{ id: inputTarget.id, value: inputTarget.value }])); return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState), {}, { captureFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, captureFields), {}, (0,defineProperty/* default */.Z)({}, _formId2, newCaptureFields)), hasBeenValidated: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState.hasBeenValidated), {}, (0,defineProperty/* default */.Z)({}, _formId2, newValidState)), hasError: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState.hasError), {}, (0,defineProperty/* default */.Z)({}, _formId2, newErrorState)), reCaptureFields: reCaptureFields, setFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, state.setFields), {}, (0,defineProperty/* default */.Z)({}, _formId2, newSetFields)), validatedFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState.validatedFields), {}, (0,defineProperty/* default */.Z)({}, _formId2, newRequiredValidation)) }); } case 'CAPTURE_INPUT_FIELD_INTL_PHONE': { var countryData = action.countryData, _formId3 = action.formId, _id = action.id; var _value = action.value; var _newState2 = state; var hasVisibleCountryField = checkForVisibleCountry(_newState2.activeForms[_formId3].fields); var _captureFields = reducers_forms_objectSpread({}, _newState2.captureFields); var _ref6 = countryData || { dialCode: '1', countryCode: 'US' }, _dialCode = _ref6.dialCode, countryCode = _ref6.countryCode; // Set contry code to window for submission usage window.ava = window.ava || {}; window.ava.userSelectedIsoCode = countryCode.toUpperCase(); _value = cleanFieldValue(_value, _id); var _newDialCode = state.dialCode; var _newFields = state.captureFields[_formId3].filter(function (v) { return v.id !== _id; }); // Remove field from array, prevent duplication var _newCaptureFields = _captureFields[_formId3] ? _captureFields[_formId3].filter(function (v) { return v.id !== _id; }) : []; var _newSetFields = filterOutArrayById(state.setFields[_formId3], _id); // Remove field from array, prevent duplication var _newRequiredValidation = filterOutArrayById(state.validatedFields[_formId3], _id); var _newErrorState = state.hasError[_formId3]; var _newValidState = state.hasBeenValidated[_formId3]; _newValidState = filterOutArrayById(_newValidState, _id); // Remove from hasBeenValidated array, prevent duplication _newErrorState = filterOutErrorById(_newErrorState, _id); // Remove from error array, prevent duplication if (_value !== '') { _newFields.push({ id: _id, value: _value }); // Push new field value _newCaptureFields.push({ id: _id, value: _value }); // Push new field value _newSetFields.push(_id); // Set as an active field if (!hasVisibleCountryField) { _newCaptureFields = _newCaptureFields.filter(function (f) { return f.id !== 'country'; }); // Filter out redundency _newCaptureFields.push({ id: 'country', value: countryData.countryCode.toUpperCase() }); } } var _reCaptureFields = dedupeArray([].concat((0,toConsumableArray/* default */.Z)(state.reCaptureFields), [{ id: _id, value: _value }])); return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState2), {}, { captureFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _captureFields), {}, (0,defineProperty/* default */.Z)({}, _formId3, _newCaptureFields)), dialCode: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newDialCode), {}, (0,defineProperty/* default */.Z)({}, _formId3, _dialCode)), hasBeenValidated: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState2.hasBeenValidated), {}, (0,defineProperty/* default */.Z)({}, _formId3, _newValidState)), hasError: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState2.hasError), {}, (0,defineProperty/* default */.Z)({}, _formId3, _newErrorState)), reCaptureFields: _reCaptureFields, setFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, state.setFields), {}, (0,defineProperty/* default */.Z)({}, _formId3, _newSetFields)), validatedFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState2.validatedFields), {}, (0,defineProperty/* default */.Z)({}, _formId3, _newRequiredValidation)) }); } case 'CAPTURE_MLT_AVATAX_RESPONSE': { var _formId4 = action.formId, response = action.response; var _newState3 = state; var _captureFields2 = _newState3.captureFields; var _newCaptureFields2 = _captureFields2[_formId4] || []; _newCaptureFields2 = _newCaptureFields2.filter(function (f) { return f.id !== 'avaTaxMLTResponse'; }); _newCaptureFields2 = _newCaptureFields2.filter(function (f) { return f.id !== 'C_TaxRate'; }); // Add full response _newCaptureFields2.push({ id: 'avaTaxMLTResponse', value: JSON.stringify(response) // Do not capture valid state at this time }); // Add rate to tax field _newCaptureFields2.push({ id: 'C_TaxRate', value: JSON.stringify(response.rate) }); return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState3), {}, { captureFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState3.captureFields), {}, (0,defineProperty/* default */.Z)({}, _formId4, _newCaptureFields2)) }); } case 'CLEAR_FORM_VALUES': { // This is used to be triggered by window clearFormValues var _formId5 = action.formId, fields = action.fields; var _newState4 = state; var _newCaptureFields3 = _newState4.captureFields[_formId5] || []; var _captureFields3 = _newCaptureFields3.filter(function (f) { return !fields.includes(f.id); }); var _newSetFields2 = _newState4.setFields[_formId5] || []; var _newRequiredValidation2 = _newState4.validatedFields[_formId5] || []; var hasBeenValidated = _newState4.hasBeenValidated[_formId5] || []; for (var i = 0; i < fields.length; i++) { _newSetFields2 = filterOutArrayById(_newSetFields2, fields[i]); _newRequiredValidation2 = filterOutArrayById(_newRequiredValidation2, fields[i]); hasBeenValidated = filterOutArrayById(hasBeenValidated, fields[i]); } return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState4), {}, { captureFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState4.captureFields), {}, (0,defineProperty/* default */.Z)({}, _formId5, _captureFields3)), hasBeenValidated: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState4.hasBeenValidated), {}, (0,defineProperty/* default */.Z)({}, _formId5, hasBeenValidated)), setFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState4.setFields), {}, (0,defineProperty/* default */.Z)({}, _formId5, _newSetFields2)), validatedFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState4.validatedFields), {}, (0,defineProperty/* default */.Z)({}, _formId5, _newRequiredValidation2)) }); } case 'EMAIL_VERIFY_FAILED': { var _formId6 = action.formId, inputId = action.inputId, _response = action.response; var _newState5 = state; var _newErrorState2 = state.hasError[_formId6]; var _newValidState2 = state.hasBeenValidated[_formId6]; var _newRequiredValidation3 = filterOutArrayById(state.validatedFields[_formId6], inputId); // Filter out field if exists. Protect against duplication _newErrorState2 = filterOutErrorById(_newErrorState2, inputId); // Filter out field if exists. Protect against duplication _newErrorState2.push({ id: inputId, message: _response.error || 'Unknown error type', serverMessage: _response.error_code // Capture server error for debugging }); // Add to error state with message for display _newValidState2 = filterOutArrayById(_newValidState2, inputId); // Filter out id from hasBeenValidated return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState5), {}, { activeField: null, hasError: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState5.hasError), {}, (0,defineProperty/* default */.Z)({}, _formId6, _newErrorState2)), hasBeenValidated: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState5.hasBeenValidated), {}, (0,defineProperty/* default */.Z)({}, _formId6, _newValidState2)), validatedFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState5.validatedFields), {}, (0,defineProperty/* default */.Z)({}, _formId6, _newRequiredValidation3)) }); } case 'EMAIL_VERIFY_SUCCESS': { // Added success in order to see in redux logger var _newState6 = state; return reducers_forms_objectSpread({}, _newState6); } case 'INIT_FORM_APPLICATION': { if (action.formId === null) return state; // Do nothing if formTemplate is missing var _formId7 = action.formId, isModal = action.isModal, params = action.params, url = action.url, userInfo = action.userInfo, disableHideFields = action.disableHideFields; var configs = action.configs; configs = !configs ? form_configs : JSON.parse(configs); var redirectUrl = configs.redirecturl || null; var formTemplate = formatFormTemplateName(configs.template); var _newState7 = state; var formData; if (action.data) { formData = action.data; } else { formData = form_data[formTemplate]; } configs = reducers_forms_objectSpread(reducers_forms_objectSpread({}, formData.configs), configs); // Parse out theme information // Currently not in use // configs.theme = configs.theme && typeof configs.theme === 'string' && configs.theme !== null && configs.theme !== '' && isJson(configs.theme) ? JSON.parse(configs.theme) : configs.theme; var _formData = formData, fieldsAppend = _formData.fieldsAppend, fieldsOverwrite = _formData.fieldsOverwrite, fieldsReplicate = _formData.fieldsReplicate, fieldsRemove = _formData.fieldsRemove; var _formData2 = formData, _fields = _formData2.fields; // Check for field replication. Set fields if replication is being asked for. if (fieldsReplicate && fieldsReplicate !== '') { _fields = form_data[fieldsReplicate] && form_data[fieldsReplicate].fields ? form_data[fieldsReplicate].fields : _fields; } if (fieldsRemove && fieldsRemove !== '') { _fields = removeFieldsFromObjectArray(_fields, fieldsRemove); } if (fieldsOverwrite && fieldsOverwrite.length > 0) { _fields = setFieldOverwrite(_fields, fieldsOverwrite); } if (fieldsOverwrite && fieldsOverwrite.length > 0) { _fields = setFieldOverwrite(_fields, fieldsOverwrite); } if (fieldsAppend && fieldsAppend !== '') { _fields = _fields.concat(fieldsAppend); } // Parse out event information _fields = setEvents(configs, _fields); // Set new field configuration formData.fields = configs.submissionLimitId && configs.submissionLimitId !== '' ? addSubmissionLimitDataToCapture(_fields, configs.submissionLimitId) : _fields; // Add submission limit; // Add hidden partner_source value // Move config value if (configs.partner_source) { configs.partnersource = configs.partner_source; delete configs.partner_source; } formData.fields = setHiddenPartnerSource(configs, formData.fields); var activeForm = reducers_forms_objectSpread({}, formData); // get the form data from constants file or set to default var requiredFields = getRequiredFields(formData.fields); if (userInfo && !disableHideFields) { // overridding required fields because we only have limited values from Elq on logged in hidden forms requiredFields = []; } // set in render or set here probably easier to do here? // could add here to validated fields also activeForm.values = (0,toConsumableArray/* default */.Z)(getHiddenFields(formData.fields)); // Set hidden field values activeForm.thankyou = reducers_forms_objectSpread(reducers_forms_objectSpread({}, activeForm.thankyou), {}, { redirect: redirectUrl }); activeForm.theme = activeForm.theme || {}; activeForm.theme = reducers_forms_objectSpread(reducers_forms_objectSpread({}, activeForm.theme), configs.theme); var newGdprField = getGdprField(formData.fields); var gdprField = reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState7.gdprField), {}, (0,defineProperty/* default */.Z)({}, _formId7, newGdprField[0] || 'submit')); activeForm.configs = reducers_forms_objectSpread({}, configs); // Set configs into form data // Translate field display text if (activeForm.configs.language && activeForm.configs.language !== 'en') { // $FlowFixMe: ToDo = Find out why flow is complaining about this activeForm.fields = translateDisplayText(formData.fields, activeForm.configs.language); } // Check for POI. If not set, default to Avatax if (!activeForm.configs.ost_poi || activeForm.configs.ost_poi === null) { activeForm.configs = reducers_forms_objectSpread(reducers_forms_objectSpread({}, activeForm.configs), {}, { ost_poi: 'AvaTax' }); } if (!activeForm.configs.poi || activeForm.configs.poi === null) { activeForm.configs = reducers_forms_objectSpread(reducers_forms_objectSpread({}, activeForm.configs), {}, { poi: 'AvaTax' }); } // Check for . If not set, default to General Contact if (!activeForm.configs.offer || activeForm.configs.offer === null) { activeForm.configs = reducers_forms_objectSpread(reducers_forms_objectSpread({}, activeForm.configs), {}, { offer: 'General Contact' }); } // This is weird because of flow the below are elements passed through for conditional form actions if (document && document.getElementById(_formId7) !== null && document.getElementById(_formId7)) { var formElement = document.getElementById(_formId7); if (formElement) { var dataGateCB = formElement.getAttribute('data-callback'); // check for dataGateCB, and set to callback if present if (dataGateCB) { // $FlowFixMe: ToDo - Find out what flow is complaining about activeForm.configs = reducers_forms_objectSpread(reducers_forms_objectSpread({}, activeForm.configs), {}, { callback: dataGateCB }); } } } // $FlowFixMe - ToDo - find out why flow has issues with this activeForm.values = [].concat((0,toConsumableArray/* default */.Z)(activeForm.values), (0,toConsumableArray/* default */.Z)(getHiddenFields(formData.fields))); // Set hidden field values var newHasBeenValidated = state.hasBeenValidated[_formId7] || []; var newValidatedFields = state.validatedFields[_formId7] || []; var _getModalData = getModalData(newHasBeenValidated, newValidatedFields, activeForm, isModal, _formId7, _fields, state), newActiveForm = _getModalData.newActiveForm, modalHasBeenValidated = _getModalData.modalHasBeenValidated, modalValidatedFields = _getModalData.modalValidatedFields; newHasBeenValidated = modalHasBeenValidated; newValidatedFields = modalValidatedFields; activeForm = newActiveForm; var init = Boolean(activeForm.fields && activeForm.fields.length > 0); var initStatus = null; if (!init) { initStatus = { message: "Form fields not found. Error trying to load '".concat(formTemplate, "'"), formTemplate: formTemplate }; } var chilipiper = setChilipiperState(_newState7.chilipiperConnected, _formId7); var saveFormId = formatFormTemplateName(_formId7); return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState7), {}, { activeForms: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState7.activeForms), {}, (0,defineProperty/* default */.Z)({}, saveFormId, activeForm)), captureFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState7.captureFields), {}, (0,defineProperty/* default */.Z)({}, saveFormId, activeForm.values)), chilipiperConnected: chilipiper, fields: activeForm.values, gdprField: gdprField, hasBeenValidated: reducers_forms_objectSpread(reducers_forms_objectSpread({}, state.hasBeenValidated), {}, (0,defineProperty/* default */.Z)({}, _formId7, newHasBeenValidated)), hasError: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState7.hasError), {}, (0,defineProperty/* default */.Z)({}, saveFormId, [])), init: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState7.init), {}, (0,defineProperty/* default */.Z)({}, saveFormId, init)), initStatus: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState7.initStatus), {}, (0,defineProperty/* default */.Z)({}, saveFormId, initStatus)), params: params, url: url, requiredFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState7.requiredFields), {}, (0,defineProperty/* default */.Z)({}, _formId7, requiredFields)), showModal: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState7.showModal), {}, (0,defineProperty/* default */.Z)({}, saveFormId, false)), validatedFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, state.validatedFields), {}, (0,defineProperty/* default */.Z)({}, _formId7, newValidatedFields)) }); } case 'INIT_FORM_APPLICATION_FAILED': { var _newState8 = state; return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState8), {}, { init: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState8.init), {}, (0,defineProperty/* default */.Z)({}, action.formId, false)) }); } case 'RESET_FORM': { var _formId8 = action.formId; var _newState9 = reducers_forms_objectSpread({}, state); _newState9.captureFields[_formId8] = []; _newState9.hasBeenValidated[_formId8] = []; _newState9.setFields[_formId8] = []; return reducers_forms_objectSpread({}, _newState9); } case 'REMOVE_ABANDON': { var _formId9 = action.formId; var _newState10 = state; var abandon = _newState10.abandonedForms; abandon = abandon.filter(function (f) { return f !== _formId9; }); // Remove from array. Triggered after successful submit // Register to the window for capture/user during tracking. window.ava.abandonedForms = abandon; return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState10), {}, { abandonedForms: abandon }); } case 'SET_ACTIVE_FIELD': { var _formId10 = action.formId, _id2 = action.id; var _newState11 = state; return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState11), {}, { activeFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState11.activeFields), {}, (0,defineProperty/* default */.Z)({}, _formId10, _id2)) }); } case 'SET_ACTIVE_FORM': { if (!state.activeForms[action.formId]) return state; var _formId11 = action.formId; var _newState12 = state; var _configs = _newState12.activeForms[_formId11].configs; if (window.location.pathname.includes('/us/en/get-started.html')) { var _adobeDataLayer$, _adobeDataLayer$$page, _adobeDataLayer$$page2; // eslint-disable-next-line no-undef var poi = (_adobeDataLayer$ = adobeDataLayer[0]) === null || _adobeDataLayer$ === void 0 ? void 0 : (_adobeDataLayer$$page = _adobeDataLayer$.page) === null || _adobeDataLayer$$page === void 0 ? void 0 : (_adobeDataLayer$$page2 = _adobeDataLayer$$page.state) === null || _adobeDataLayer$$page2 === void 0 ? void 0 : _adobeDataLayer$$page2.previous_page_poi; _configs.poi = poi || _configs.poi; } return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState12), {}, { activeForm: _formId11 }); } case 'SET_ELOQUA_LOOKUP_VALID': { if (window && window.location) { var baseHref = 'http://localhost'; var _ref7 = window.location || { href: baseHref }, href = _ref7.href; if (href !== baseHref && /get-started.html/gi.test(href)) triggerAutoFillTracking(action.formId); // Trigger analytics tracking around autofill complete } try { // Make sure user is not logged in if (window.ava.userInfo.isLoggedIn === true) { return state; } } catch (err) { // Do nothing on error } var allowedField = ['company', 'email', 'country', 'country_of_establishment', 'firstName', 'fullname', 'lastName', 'phone']; var excludeForms = ['partner', 'partneracp', 'partnerbharat', 'partnerdemo', 'partnerdsp', 'partnermsp', 'partnerreferral', 'partnerreferralsimple', 'partnerreferralactive', 'partnerreferralemerging', 'partnerreferralestablished', 'partnerreferrallaunch']; var _formId12 = action.formId; var _ref8 = action || { values: {} }, values = _ref8.values; // Don't process data if form is not allowed if (_formId12 && _formId12.indexOf('partner') > 0 || excludeForms.includes(_formId12.toLowerCase())) return state; if (values && Object.keys(values).length < 1) return state; // Stop processing if data isn't available var _newState13 = state; var _captureFields4 = _newState13.captureFields, activeForms = _newState13.activeForms, autoFillData = _newState13.autoFillData; var capturedValues = []; var fieldsArray = getFieldIds(activeForms[_formId12].fields); // this code is to ensure that 'country' is always added as captured fields if (!fieldsArray.includes('country')) fieldsArray.push('country'); if (autoFillData.forms.includes(_formId12)) return state; // Stop processing if data is already set autoFillData.forms.push(_formId12); // Check if field is captured. for (var _i = 0; _i < _captureFields4[_formId12].length; _i++) { // Push the id of the capture field so it isn't overwritten with payload information if (_captureFields4[_formId12][_i] && _captureFields4[_formId12][_i].id) capturedValues.push(_captureFields4[_formId12][_i].id); } var _hasBeenValidated = _newState13.hasBeenValidated, _requiredFields = _newState13.requiredFields, setFields = _newState13.setFields, validatedFields = _newState13.validatedFields; var _newHasBeenValidated = _hasBeenValidated[_formId12] || []; // Capture what already has been validated var _newSetFields3 = setFields[_formId12] || []; // Capture what already has been set var _newValidatedFields = validatedFields[_formId12] || []; // Capture what already has been validated window.ava.autoFillData = autoFillData; var newValues = _captureFields4[_formId12] && _captureFields4[_formId12].length > 0 ? _captureFields4[_formId12] : []; var keys = Object.keys(values); var testFormName = _formId12.toLowerCase(); for (var _i2 = 0; _i2 < keys.length; _i2++) { var _key2 = keys[_i2]; switch (_key2) { case 'accountname': _key2 = 'company'; break; case 'firstname': _key2 = 'firstName'; break; case 'lastname': _key2 = 'lastName'; break; case 'emailId': _key2 = 'email'; break; case 'phonenumber': _key2 = 'phone'; break; default: break; } if (!capturedValues.includes(_key2) && allowedField.includes(_key2) && values[keys[_i2]] !== '' && values[keys[_i2]].length > 1) { // Validate phone if (_key2 === 'phone' && values[keys[_i2]].length > 0) { var _value2 = values[keys[_i2]].replace(/\D/gi, ''); // we can assume a valid phone number has more than 4 digits in total if (_value2.length > 4 || _value2.length < 18) { newValues.push({ id: _key2, value: values[keys[_i2]] }); _newSetFields3.push(_key2); if (_requiredFields[_formId12].includes(_key2)) { _newHasBeenValidated.push(_key2); _newValidatedFields.push(_key2); } } } else { newValues.push({ id: _key2, value: values[keys[_i2]] }); _newSetFields3.push(_key2); if (_requiredFields[_formId12].includes(_key2)) { _newHasBeenValidated.push(_key2); _newValidatedFields.push(_key2); } } } } var _key = 'fullname'; var firstName = values.firstname || ''; var lastName = values.lastname || ''; var fullName = "".concat(firstName, " ").concat(lastName).trim(); if (!capturedValues.includes(_key) && allowedField.includes(_key) && fullName !== '' && !excludeForms.includes(testFormName) && testFormName.indexOf('partner') === -1) { newValues.push({ id: _key, value: fullName }); _newSetFields3.push(_key); if (_requiredFields[_formId12].includes(_key)) { _newHasBeenValidated.push(_key); _newValidatedFields.push(_key); } } // Clean out empty values // eslint-disable-next-line array-callback-return Object.keys(values).map(function (k) { if (values[k] === '') delete values[k]; }); window.ava.eloquaData = window.ava.eloquaData || {}; var date = new Date(); var timeStamp = date.getTime(); window.ava.eloquaData = { ok: true, error: null, fieldValues: newValues, timeStamp: timeStamp, values: values }; try { localStorage.setItem('avlrEloquaData', JSON.stringify(window.ava.eloquaData)); } catch (err) { // Do nothing } newValues = newValues.map(function (v) { if (fieldsArray.includes(v.id)) return v; return { id: '', value: '' }; }); newValues = newValues.filter(function (f) { return f.id !== ''; }); return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState13), {}, { autoFillData: reducers_forms_objectSpread(reducers_forms_objectSpread({}, autoFillData), {}, { ok: true, error: null, fieldValues: newValues, values: values }), captureFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _captureFields4), {}, (0,defineProperty/* default */.Z)({}, _formId12, newValues)), hasBeenValidated: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _hasBeenValidated), {}, (0,defineProperty/* default */.Z)({}, _formId12, _newHasBeenValidated)), validatedFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, validatedFields), {}, (0,defineProperty/* default */.Z)({}, _formId12, _newValidatedFields)), setFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, setFields), {}, (0,defineProperty/* default */.Z)({}, _formId12, _newSetFields3)) }); } case 'SET_ELOQUA_LOOKUP_INVALID': { var message = action.message; var _newState14 = state; var fieldValues = null; var _values = null; var _autoFillData = _newState14.autoFillData; var storedData = '{ ok: false, error: null, fieldValues: null, values: null }'; var ok = false; try { storedData = localStorage.getItem('avlrEloquaData') || storedData; storedData = JSON.parse(storedData); fieldValues = storedData.fieldValues || fieldValues; _values = storedData.values || _values; if (_values && Object.keys(_values).length > 1) ok = true; } catch (e) { // Do nothing } var _date = new Date(); var _timeStamp = _date.getTime(); _autoFillData = reducers_forms_objectSpread(reducers_forms_objectSpread({}, _autoFillData), {}, { ok: ok, error: { message: message }, fieldValues: fieldValues, timeStamp: _timeStamp, values: _values }); window.ava.eloquaData = _autoFillData; try { localStorage.setItem('avlrEloquaData', JSON.stringify(_autoFillData)); } catch (err) { // Do nothing } window.ava.autoFillData = _autoFillData; return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState14), {}, { autoFillData: _autoFillData }); } case 'SET_LAST_FIELD_VALIDATION': { var _formId13 = action.formId, _fields2 = action.fields; var _newState15 = state; var newLastField = _newState15.lastField; var isLastField = getLastFieldId(_fields2); return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState15), {}, { lastField: reducers_forms_objectSpread(reducers_forms_objectSpread({}, newLastField), {}, (0,defineProperty/* default */.Z)({}, _formId13, isLastField)) }); } case 'SET_INPUT_CAPTURE_INVALID': { var _formId14 = action.formId, _id3 = action.id; var _message = action.message; var _newState16 = state; var _newErrorState3 = state.hasError[_formId14]; var _newValidState3 = state.hasBeenValidated[_formId14]; var _configs2 = _newState16.activeForms[_formId14].configs; var isLanguage = _configs2 && _configs2.language ? _configs2.language : 'en'; _message = getLocaleStringText(_message, 'error', isLanguage); // Translate message if applicable var _newRequiredValidation4 = filterOutArrayById(state.validatedFields[_formId14], _id3); // Filter out field if exists. Protect against duplication _newErrorState3 = _newErrorState3.filter(function (h) { return h.id && h.id !== _id3; }); // Filter out field if exists. Protect against duplication _newErrorState3.push({ id: _id3, message: _message }); // Add to error state with message for display _newValidState3 = filterOutArrayById(_newValidState3, _id3); // Filter out id from hasBeenValidated try { var savedData = localStorage.getItem('avlrEloquaData') || '{}'; if (typeof savedData === 'string') savedData = JSON.parse(savedData); if (_id3 !== 'gdpr_eligible' && savedData && savedData.values && savedData.ok) removeFromEloquaData(_id3); // Only trigger auto save if values is set } catch (err) { // Do nothing } return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState16), {}, { activeField: null, hasError: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState16.hasError), {}, (0,defineProperty/* default */.Z)({}, _formId14, _newErrorState3)), hasBeenValidated: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState16.hasBeenValidated), {}, (0,defineProperty/* default */.Z)({}, _formId14, _newValidState3)), validatedFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState16.validatedFields), {}, (0,defineProperty/* default */.Z)({}, _formId14, _newRequiredValidation4)) }); } case 'SET_INPUT_CAPTURE_VALID': { var _formId15 = action.formId, _id4 = action.id; var _newState17 = state; var _newValidState4 = state.hasBeenValidated[_formId15]; var _newRequiredValidation5 = state.validatedFields[_formId15].filter(function (f) { return f !== _id4; }); // Filter out field if exists. Protect against duplication _newRequiredValidation5.push(_id4); // Put id into required validated state _newValidState4.push(_id4); // Put id back into general validation state var newHasError = _newState17.hasError[_formId15].filter(function (f) { return f.id !== _id4; }); // Double check to remove from hasError // Update eloquaData object try { var getValue = _newState17.captureFields[_formId15] ? _newState17.captureFields[_formId15].filter(function (f) { return f.id === _id4; })[0] : { value: '' }; var _value3 = getValue.value; var _savedData = localStorage.getItem('avlrEloquaData') || '{}'; if (typeof _savedData === 'string') _savedData = JSON.parse(_savedData); if (_id4 !== 'gdpr_eligible' && _savedData && _savedData.values && _savedData.ok) saveToEloquaData(_id4, _value3); // Only trigger auto save if values is set } catch (err) { // Do nothing } // Save to localStorage for later capture var autoSave = autoSaveData(state.captureFields[_formId15], _formId15); return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState17), {}, { activeField: null, hasError: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState17.hasError), {}, (0,defineProperty/* default */.Z)({}, _formId15, newHasError)), hasBeenValidated: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState17.hasBeenValidated), {}, (0,defineProperty/* default */.Z)({}, _formId15, _newValidState4)), reCaptureFields: autoSave, validatedFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState17.validatedFields), {}, (0,defineProperty/* default */.Z)({}, _formId15, _newRequiredValidation5)) }); } case 'SET_SUBMISSION_LIMIT_EXCEEDED': { var _formId16 = action.formId; var _newState18 = state; var submissionlimit = _newState18.submissionlimit; return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState18), {}, { submissionlimit: reducers_forms_objectSpread(reducers_forms_objectSpread({}, submissionlimit), {}, (0,defineProperty/* default */.Z)({}, _formId16, true)) }); } case 'TOGGLE_FORM_MODAL': { var _formId17 = action.formId; var _newState19 = reducers_forms_objectSpread({}, state); return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState19), {}, { showModal: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState19.showModal), {}, (0,defineProperty/* default */.Z)({}, _formId17, !_newState19.showModal[_formId17])) }); } case 'TRACK_MODAL_FORM': { var _formId18 = action.formId; var _newState20 = state; var newModalForms = _newState20.modalForms; newModalForms.push(_formId18); window.ava.modals = newModalForms; return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState20), {}, { modalForms: newModalForms }); } case 'TRACK_FORM_ABANDON_STATUS': { var _formId19 = action.formId, fieldId = action.fieldId; var _newState21 = state; var newAbandonForms = _newState21.abandonedForms; // Don't track form load gdpr_eligible for this hits on init form application and shouldn't register as user starting to fill out form. // Any other field counts toward abandon tracking. if (fieldId !== 'gdpr_eligible' && !newAbandonForms.includes(_formId19)) { newAbandonForms.push(_formId19); } window.ava.abandonedForms = newAbandonForms; return reducers_forms_objectSpread({ abandonedForms: newAbandonForms }, _newState21); } case 'UPDATE_DYNAMIC_REQUIRED_FIELD': { var _ret = function () { var _newRequiredFields; var formId = action.formId, add = action.add, remove = action.remove; var newState = state; var captureFields = newState.captureFields, requiredFields = newState.requiredFields, hasBeenValidated = newState.hasBeenValidated, validatedFields = newState.validatedFields; var newRequiredFields = requiredFields[formId]; var newHasBeenValidated = hasBeenValidated[formId]; var newValidatedFields = validatedFields[formId]; var newCaptureFields = captureFields[formId]; // Remove items first var _loop = function _loop(_i3) { newRequiredFields = newRequiredFields.filter(function (f) { return f !== remove[_i3]; }); newHasBeenValidated = newHasBeenValidated.filter(function (f) { return f !== remove[_i3]; }); newValidatedFields = newValidatedFields.filter(function (f) { return f !== remove[_i3]; }); newCaptureFields = newCaptureFields.filter(function (f) { return f.id !== remove[_i3]; }); }; for (var _i3 = 0; _i3 < remove.length; _i3++) { _loop(_i3); } // Add items second if (add.length > 0) (_newRequiredFields = newRequiredFields).push.apply(_newRequiredFields, (0,toConsumableArray/* default */.Z)(add)); return { v: reducers_forms_objectSpread(reducers_forms_objectSpread({}, newState), {}, { captureFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, newState.captureFields), {}, (0,defineProperty/* default */.Z)({}, formId, newCaptureFields)), hasBeenValidated: reducers_forms_objectSpread(reducers_forms_objectSpread({}, hasBeenValidated), {}, (0,defineProperty/* default */.Z)({}, formId, newHasBeenValidated)), requiredFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, requiredFields), {}, (0,defineProperty/* default */.Z)({}, formId, newRequiredFields)), validatedFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, validatedFields), {}, (0,defineProperty/* default */.Z)({}, formId, newValidatedFields)) }) }; }(); if ((0,esm_typeof/* default */.Z)(_ret) === "object") return _ret.v; } case 'VALIDATE_CONNECTORS': { var connectors = action.connectors, _fieldId = action.fieldId, _formId20 = action.formId, _value4 = action.value; var _newState22 = state; var isValid = Boolean(connectors.filter(function (f) { return _value4 === f.name; }).length > 0); var _newHasError = _newState22.hasError[_formId20]; _newHasError = _newHasError.filter(function (h) { return h.id && h.id !== _fieldId; }); // Filter out field if exists. Protect against duplication var _newRequiredValidation6 = state.validatedFields[_formId20].filter(function (f) { return f !== _fieldId; }); // Filter out field if exists. Protect against duplication var _newValidState5 = state.hasBeenValidated[_formId20]; var _reCaptureFields2 = _newState22.reCaptureFields; if (isValid) { _newRequiredValidation6.push(_fieldId); // Put id into required validated state _newValidState5.push(_fieldId); // Put id back into general validation state _reCaptureFields2 = dedupeArray([].concat((0,toConsumableArray/* default */.Z)(state.reCaptureFields), [{ id: _fieldId, value: _value4 }])); } if (!isValid) { _newHasError.push({ id: _fieldId, message: 'Please select a connector' }); } return reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState22), {}, { activeField: null, hasError: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState22.hasError), {}, (0,defineProperty/* default */.Z)({}, _formId20, _newHasError)), hasBeenValidated: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState22.hasBeenValidated), {}, (0,defineProperty/* default */.Z)({}, _formId20, _newValidState5)), reCaptureFields: _reCaptureFields2, validatedFields: reducers_forms_objectSpread(reducers_forms_objectSpread({}, _newState22.validatedFields), {}, (0,defineProperty/* default */.Z)({}, _formId20, _newRequiredValidation6)) }); } default: return state; } } // Helper functions related to the reducer but not required for the reducer below: ;// CONCATENATED MODULE: ./src/reducers/maxmind.js function maxmind_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function maxmind_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? maxmind_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : maxmind_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Types var maxmind_defaultState = { error: null, INSIGHTS: null, url: null, user: null, // IDLE - Starting/Default State, notes that Avaform has just mounted and the call may not have started yet // IN_PROGRESS - Equivalent to setting window.ava.maxmindAPIRunning in the window, this notifies the component that we are fetching maxmind data // SUCCESS - Maxmind API call completed and we received a successful response // FAILURE - Maxmind API call completed and we received a bad response // STOPPED - Maxmind API call was prevented - this will only happen when localStorage.avlrMaxmindEnabled is false - Used for testing status: 'IDLE' }; var maxmind_maxmindSuccess = function maxmindSuccess(action, state) { var results = action.results, url = action.url; if (localStorage.getItem('avlrMsTesting') && localStorage.getItem('avlrMsTesting') === 'true' && localStorage.getItem('avlrGeoLocale')) { results.country.iso_code = localStorage.getItem('avlrGeoLocale') || results.country.iso_code; } var newState = maxmind_objectSpread({}, state); var setResults = maxmind_objectSpread(maxmind_objectSpread({}, results), {}, { url: url }); var setState = maxmind_objectSpread(maxmind_objectSpread({}, newState), {}, { blocked: false, INSIGHTS: setResults, user: { ip: results.traits.ip_address, country: results.country }, url: url, status: 'SUCCESS' }); window.ava.maxmind = maxmind_objectSpread({}, setState); return setState; }; var maxmind_maxmindFail = function maxmindFail(action, state) { var message = action.message, url = action.url; var newState = maxmind_objectSpread({}, state); return maxmind_objectSpread(maxmind_objectSpread({}, newState), {}, { blocked: true, error: message, INSIGHTS: null, // ensure to empty the value url: url, status: 'FAILED' }); }; var maxmindFailMiles = function maxmindFailMiles(action, state) { var message = action.message, url = action.url; var newState = maxmind_objectSpread({}, state); return maxmind_objectSpread(maxmind_objectSpread({}, newState), {}, { blocked: true, error: message, INSIGHTS: null, // ensure to empty the value url: url, status: 'FAILEDMILES' }); }; var maxmind_maxmindPrevented = function maxmindPrevented(action, state) { var _ref = window.ava || { maxmind: null }, maxmind = _ref.maxmind; var newState = maxmind_objectSpread({}, state); if (!maxmind || maxmind === null) { setTimeout(function () { var newMaxmind = window.ava.maxmind; return maxmind_objectSpread(maxmind_objectSpread({}, newState), newMaxmind); }, 500); } return maxmind_objectSpread(maxmind_objectSpread({}, newState), maxmind); }; // eslint-disable-next-line func-names /* harmony default export */ function maxmind() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : maxmind_defaultState; var action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'MAXMIND_RUNNING': { return maxmind_objectSpread(maxmind_objectSpread({}, state), {}, { status: 'IN_PROGRESS' }); } case 'MAXMIND_STOPPED': { return maxmind_objectSpread(maxmind_objectSpread({}, state), {}, { status: 'STOPPED' }); } case 'MAXMIND_SUCCESS': { var newState = maxmind_maxmindSuccess(action, state); return maxmind_objectSpread({}, newState); } case 'MAXMIND_FAIL': { var _newState = maxmind_maxmindFail(action, state); return maxmind_objectSpread({}, _newState); } case 'MAXMIND_PREVENTED': { var _newState2 = maxmind_maxmindPrevented(action, state); return maxmind_objectSpread({}, _newState2); } case 'MILES_MAXMIND_SUCCESS': { var _newState3 = maxmind_maxmindSuccess(action, state); window.ava.maxmind = maxmind_objectSpread({}, _newState3); return maxmind_objectSpread({}, _newState3); } case 'MILES_MAXMIND_FAIL': { var _newState4 = maxmindFailMiles(action, state); return maxmind_objectSpread({}, _newState4); } case 'MILES_MAXMIND_PREVENTED': { var _newState5 = maxmind_maxmindPrevented(action, state); return maxmind_objectSpread({}, _newState5); } default: return state; } } ;// CONCATENATED MODULE: ./src/reducers/miles.js function miles_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function miles_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? miles_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : miles_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var miles_defaultState = { fail: {}, success: {} }; // eslint-disable-next-line func-names /* harmony default export */ function miles() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : miles_defaultState; var action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'CLEAR_FORM_SUBMIT': { var formId = action.formId; var newState = miles_objectSpread({}, state); return miles_objectSpread(miles_objectSpread({}, newState), {}, { fail: miles_objectSpread(miles_objectSpread({}, newState.fail), {}, (0,defineProperty/* default */.Z)({}, formId, null)), success: miles_objectSpread(miles_objectSpread({}, newState.success), {}, (0,defineProperty/* default */.Z)({}, formId, null)) }); } case 'SET_MILES_SUBMISSION_STATUS': { var error = action.error, _formId = action.formId, payload = action.payload, response = action.response, status = action.status; var _newState = state; var fail = _newState.fail, success = _newState.success; var jsonPayload = {}; if (payload && Object.keys(payload).length > 0) { // eslint-disable-next-line array-callback-return Object.keys(payload).map(function (k) { var newValue = payload[k].value; try { newValue = typeof newValue === 'string' ? JSON.parse(newValue) : newValue; } catch (err) { // Do nothing } jsonPayload[k] = { name: payload[k].name, value: newValue }; }); } // $FlowFixMe TODO: why doesn't flow like this var _ref = response || { value: {} }, value = _ref.value; var newResponse = miles_objectSpread(miles_objectSpread({}, response), {}, { value: miles_objectSpread(miles_objectSpread({}, value), {}, { status: status ? 'success' : 'failed' }) }); if (response && status) { if (fail[_formId]) delete fail[_formId]; // remove from failed state; success = miles_objectSpread(miles_objectSpread({}, success), {}, (0,defineProperty/* default */.Z)({}, _formId, { error: error, payload: payload, json: jsonPayload, response: newResponse })); } else { if (success[_formId]) delete success[_formId]; // remove from success state; fail = miles_objectSpread(miles_objectSpread({}, fail), {}, (0,defineProperty/* default */.Z)({}, _formId, { error: error, payload: payload, response: newResponse, status: status })); } return miles_objectSpread(miles_objectSpread({}, _newState), {}, { fail: fail, success: success }); } default: return state; } } // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js var objectWithoutProperties = __webpack_require__(1253); ;// CONCATENATED MODULE: ./src/reducers/search.js function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return (0,esm_typeof/* default */.Z)(key) === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if ((0,esm_typeof/* default */.Z)(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if ((0,esm_typeof/* default */.Z)(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } function search_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function search_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? search_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : search_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var search_defaultState = { data: {}, endpoints: [], results: {}, selected: {} }; // Helper to sort connectors alphabetically var alphaSort = function alphaSort(connectors) { var sortValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'id'; return connectors.sort(function (prev, next) { var value = 0; if (prev[sortValue] < next[sortValue]) { value = -1; } if (prev[sortValue] > next[sortValue]) { value = 1; } return value; }); }; // Helper to convert connectors array to object var convertObjectToArray = function convertObjectToArray(connectors) { var newConnectors = []; Object.keys(connectors).map(function (k) { return newConnectors.push(connectors[k]); }); // Convert to array return newConnectors; }; // eslint-disable-next-line func-names /* harmony default export */ function search() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : search_defaultState; var action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'CLOSE_PICK_LIST': { var formId = action.formId; var newState = state; var results = newState.results; delete results[formId]; return search_objectSpread(search_objectSpread({}, newState), {}, { results: results }); } case 'CONNECTOR_DATA_FETCH_SUCCESS': { var _newState = state; var connectors = action.connectors, endpoint = action.endpoint; var newConnectors = convertObjectToArray(connectors); // Convert to array var newData = search_objectSpread(search_objectSpread({}, _newState.data), {}, (0,defineProperty/* default */.Z)({}, endpoint, alphaSort(newConnectors, 'name'))); var newEndpoints = _newState.endpoints; if (!newEndpoints.includes(endpoint)) { newEndpoints.push(endpoint); } return search_objectSpread(search_objectSpread({}, _newState), {}, { data: newData, endpoints: newEndpoints }); } case 'HIDE_SEARCH_RESULTS': { var _formId = action.formId, fieldId = action.fieldId; var _newState2 = state; var newResults = _newState2.results; var formResults = newResults[_formId]; delete formResults[fieldId]; return search_objectSpread(search_objectSpread({}, _newState2), {}, { results: search_objectSpread(search_objectSpread({}, newResults), {}, (0,defineProperty/* default */.Z)({}, _formId, search_objectSpread({}, formResults))) }); } case 'SAVE_SEARCH_SELECTION': { var _fieldId = action.fieldId, _formId2 = action.formId, alt = action.alt; var _newState3 = state; var selectedData = _newState3.selected; var formData = selectedData[_formId2] || {}; return search_objectSpread(search_objectSpread({}, _newState3), {}, { selected: search_objectSpread(search_objectSpread({}, selectedData), {}, (0,defineProperty/* default */.Z)({}, _formId2, search_objectSpread(search_objectSpread({}, formData), {}, (0,defineProperty/* default */.Z)({}, _fieldId, alt)))) }); } case 'SEARCH_CONNECTORS': { var _endpoint = action.endpoint, _fieldId2 = action.fieldId, _formId3 = action.formId; var cleanTerm = function cleanTerm(term) { var newTerm = term; newTerm = newTerm.replace(/[()]/gi, ''); newTerm = newTerm.replace(/[^a-z0-9] /gi, ''); return newTerm; }; var term = action.term; term = cleanTerm(term); var regExp = new RegExp(term.toLowerCase(), 'gi'); var _newState4 = state; var _newResults = _newState4.results; var dataResults = _newState4.data[_endpoint]; var _selectedData = _newState4.selected; var _formData = _selectedData[_formId3] || {}; var remove = _formData[_fieldId2], rest = (0,objectWithoutProperties/* default */.Z)(_formData, [_fieldId2].map(_toPropertyKey)); // if current search field exists in selected remove var found = []; var startsWith = []; var updateResults = []; if (dataResults && dataResults.length > 0) { startsWith = alphaSort(dataResults.filter(function (f) { var name = f.name; var testName = cleanTerm(name); if (testName.toLowerCase().startsWith(term.toLowerCase())) { found.push(f.name); return f; } return null; }), 'name'); updateResults = dataResults.filter(function (f) { var name = f.name; var testName = cleanTerm(name); if (regExp.test(testName) && !found.includes(name)) { found.push(f.name); return f; } return null; }); updateResults = alphaSort(updateResults, 'name'); } var finalResults = [].concat((0,toConsumableArray/* default */.Z)(startsWith), (0,toConsumableArray/* default */.Z)(updateResults)); return search_objectSpread(search_objectSpread({}, _newState4), {}, { results: search_objectSpread(search_objectSpread({}, _newResults), {}, (0,defineProperty/* default */.Z)({}, _formId3, search_objectSpread(search_objectSpread({}, _newResults[_formId3]), {}, (0,defineProperty/* default */.Z)({}, _fieldId2, finalResults)))), selected: search_objectSpread(search_objectSpread({}, _selectedData), {}, (0,defineProperty/* default */.Z)({}, _formId3, search_objectSpread({}, rest))) }); } default: return state; } } ;// CONCATENATED MODULE: ./src/reducers/system.js function system_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function system_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? system_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : system_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var system_defaultState = { applicationInit: false, envStats: { API: null, DEMANDBASE_API: { COMPANYLOOKUP: null, EMAILLOOKUP: null, IPLOOKUP: null, KEY: null }, MAXMIND_API: null, MILES_API: null }, isAdobeSatelliteBlocked: true, // Default to blocked, true means it is blocked isLoading: false, loadingMessage: '', loadingRequests: 0, requests: [], systemError: {} }; // eslint-disable-next-line func-names /* harmony default export */ function system() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : system_defaultState; var action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'INIT_APPLICATION': { // Always set to help guard against state mutation var newState = state; // redundant but ensures no mutation is happening. var newApplicationInit = !state.applicationInit; // $FlowFixMe var isEnvStats = system_objectSpread(system_objectSpread({}, state.envStats), action.envStats); return system_objectSpread(system_objectSpread({}, newState), {}, { applicationInit: newApplicationInit, envStats: isEnvStats, isAdobeSatelliteBlocked: Boolean(action.adobeVisitorId === '') }); } case 'RECEIVE_SYSTEM_ERROR': { var info = action.info, statusCode = action.statusCode; var _newState = state; return system_objectSpread(system_objectSpread({}, _newState), {}, { info: info, statusCode: statusCode }); } case 'SET_LOADING_FINISH': { var newLoadingRequests = state.loadingRequests - 1; var isLoading = newLoadingRequests > 0; return system_objectSpread(system_objectSpread({}, state), {}, { isLoading: isLoading, loadingRequests: newLoadingRequests < 0 ? 0 : newLoadingRequests, loadingMessage: !isLoading ? '' : state.loadingMessage // If done loading, remove message, otherwise show existing message }); } case 'SET_LOADING_START': { var _newState2 = state; var newRequests = state.requests; if (action.request) newRequests.push(action.request); var _newLoadingRequests = state.loadingRequests + 1; return system_objectSpread(system_objectSpread({}, _newState2), {}, { isLoading: true, loadingRequests: _newLoadingRequests, loadingMessage: action.message || state.loadingMessage, // Leave messaging the same if not passed requests: newRequests }); } case 'SET_SYSTEM_ERROR': { var formId = action.formId, error = action.error, _info = action.info, _statusCode = action.statusCode; var _newState3 = state; return system_objectSpread(system_objectSpread({}, _newState3), {}, { systemError: system_objectSpread(system_objectSpread({}, _newState3.systemError), {}, (0,defineProperty/* default */.Z)({}, formId, { error: error, info: _info, statusCode: _statusCode })) }); } default: return state; } } ;// CONCATENATED MODULE: ./src/reducers/index.js // $FlowExpectedError: Allow - this has intermittent error and should not. // import type { Reducer } from 'redux'; var reducer = (0,redux/* combineReducers */.UY)({ avatax: avatax, briteVerify: brite_verify, forms: reducers_forms, maxmind: maxmind, miles: miles, search: search, system: system }); /* harmony default export */ const reducers = (reducer); var reducers_defaultState = { avatax: defaultState, briteVerify: brite_verify_defaultState, forms: forms_defaultState, maxmind: maxmind_defaultState, miles: miles_defaultState, search: search_defaultState, system: system_defaultState }; // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js var classCallCheck = __webpack_require__(6610); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/createClass.js var createClass = __webpack_require__(5991); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inherits.js var inherits = __webpack_require__(379); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js var possibleConstructorReturn = __webpack_require__(6070); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js var getPrototypeOf = __webpack_require__(7608); // EXTERNAL MODULE: ./node_modules/dayjs/plugin/duration.js var duration = __webpack_require__(1646); var duration_default = /*#__PURE__*/__webpack_require__.n(duration); ;// CONCATENATED MODULE: ./src/helpers/eloqua.js // Types dayjs_min_default().extend((duration_default())); var lookupUserDataInEloqua = function lookupUserDataInEloqua(_ref) { var configs = _ref.configs, formId = _ref.formId, hasUserInfo = _ref.hasUserInfo, onEloquaLookup = _ref.onEloquaLookup, onSetEloquaLookupValid = _ref.onSetEloquaLookupValid; // An immediate lookup to be run after delay check. var immediateLookupUserDataInEloqua = function immediateLookupUserDataInEloqua() { // eslint-disable-next-line no-underscore-dangle if (!hasUserInfo && configs && configs.autofillForm && window._satellite) { try { var _values = window.ava.eloquaData.data; if (_values && _values.value && _values.value !== null) { onSetEloquaLookupValid(formId, _values); // Use saved eloqua values to update form } else { onEloquaLookup(formId, hasUserInfo); // ping eloqua for saved values } } catch (err) { onEloquaLookup(formId, hasUserInfo); // ping eloqua for saved values } // eslint-disable-next-line no-underscore-dangle } else if (!hasUserInfo && configs && configs.autofillForm && !window._satellite) { // 'at-library-loaded' event fired when launch JS is asynchronously loaded document.addEventListener('at-library-loaded', function () { immediateLookupUserDataInEloqua(); }); } else { logger_api({ level: 'info', msgType: 'FormAutoFill', formId: '', data: { message: 'Form autoformFill not set in config. AutoFill did not trigger' } }); } }; immediateLookupUserDataInEloqua(); }; var getEloquaCache = function getEloquaCache() { var fieldValues = null; var values = null; var timeStamp = null; try { var savedEloquaData = window.localStorage.getItem('avlrEloquaData'); savedEloquaData = typeof savedEloquaData === 'string' ? JSON.parse(savedEloquaData) : savedEloquaData; if (savedEloquaData.fieldValues) fieldValues = savedEloquaData.fieldValues; if (savedEloquaData.values) values = savedEloquaData.values; if (savedEloquaData.timeStamp) timeStamp = savedEloquaData.timeStamp; } catch (err) { // Do not throw error when we can't retrieve cached values. } return { fieldValues: fieldValues, values: values, timeStamp: timeStamp }; }; var isEloquaCacheExpired = function isEloquaCacheExpired(eloquaCache) { try { if (eloquaCache.timeStamp !== null) { var date = new Date(); var endTime = dayjs_min_default()(date.getTime()); var startTime = dayjs_min_default()(eloquaCache.timeStamp); var eloquaCacheTimestampDuration = dayjs_min_default().duration(endTime.diff(startTime)); return eloquaCacheTimestampDuration.asHours() >= 4; } } catch (err) { // Do not throw error on failure checking expired. } // Default to expired true. return true; }; /* harmony default export */ const eloqua = ((/* unused pure expression or super */ null && (lookupUserDataInEloqua))); ;// CONCATENATED MODULE: ./src/schema/eloqua-lookup.js var eloquaSchema = { type: 'object', properties: { firstname: { type: 'string' }, lastname: { type: 'string' }, accountname: { type: 'string' }, phonenumber: { type: 'string' }, isCustomerActive: { type: 'boolean' }, sfdcId: { type: 'string' }, emailId: { type: 'string' } } }; /* harmony default export */ const eloqua_lookup = (eloquaSchema); ;// CONCATENATED MODULE: ./src/api/eloqua-api.js function eloqua_api_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function eloqua_api_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? eloqua_api_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : eloqua_api_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Docs // Use the following URLs to review documentation around brite verify service // https://wiki.avalara.com/display/MT/BriteVerify+-+API+Calls // https://miles.marketing.avalara.com/swagger/doc/email_verify // Actions // Logging // Helpers // Schema // API Settings // Types var eloquaAPI = src_config.ELOQUA_API; var eloquaApiRunning = false; // Ensure that it is only called once // API should technically always return success (200), however, errors are reflected in the response response.value.status var eloquaLookup = /*#__PURE__*/function () { var _ref = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(dispatch, formId, hasUserInfo) { var _ref2, eloquaData, _ref3, forms, adobeId, eloquaCache, values, fieldValues, date, isTime, requestUrl, headers, response, schemaValidationResponse, message, responseJsonValue, _message; return regenerator_default().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _ref2 = window.ava || { eloquaData: { forms: [], error: null, ok: false, values: null } }, eloquaData = _ref2.eloquaData; window.ava.eloquaData = eloqua_api_objectSpread({}, eloquaData); if (!(hasUserInfo || eloquaApiRunning)) { _context.next = 4; break; } return _context.abrupt("return"); case 4: // Do nothing if is logged in or already running eloquaApiRunning = true; // Set running status to stop multi-form triggers _ref3 = eloquaData || { forms: [] }, forms = _ref3.forms; if (forms) { _context.next = 10; break; } forms = [formId]; _context.next = 14; break; case 10: if (!(forms && forms.includes(formId))) { _context.next = 13; break; } eloquaApiRunning = false; return _context.abrupt("return"); case 13: forms.push(formId); case 14: window.ava.eloquaData.forms = forms; adobeId = (0,ui/* getAdobeVisitorId */.Su)() || null; try { adobeId = localStorage.getItem('avlrAdobeId') || adobeId; } catch (err) { // Do nothing } if (!(!adobeId || adobeId && adobeId === '' || adobeId === null)) { _context.next = 21; break; } logger_api({ level: 'error', msgType: 'eloquaLookup', formId: formId, data: { message: 'Error no adobeId found during lookup' } }); eloquaApiRunning = false; return _context.abrupt("return"); case 21: // Check for cached Eloqua data eloquaCache = getEloquaCache(); values = eloquaCache.values, fieldValues = eloquaCache.fieldValues; // If there are values and cache isn't expired then dispatch and return. if (!(values && Object.keys(values).length > 1)) { _context.next = 29; break; } if (!(isEloquaCacheExpired(eloquaCache) === false)) { _context.next = 29; break; } window.ava.eloquaData = eloquaCache; // Set data to window dispatch(setEloquaLookupValid(formId, values)); eloquaApiRunning = false; return _context.abrupt("return"); case 29: date = new Date(); isTime = window.ava.cacheTimeStamp || date.getTime(); // window.ava.cacheTimeStamp is used for local unit testing purposes requestUrl = "".concat(eloquaAPI, "?adobeId=").concat(adobeId, "&ccwts=").concat(isTime); headers = { 'Content-Type': 'application/json' }; _context.next = 35; return (0,shared/* fetch */.he)(requestUrl, { method: 'GET', headers: headers }, api_settings.timeout).then(function (result) { return result; }); case 35: response = _context.sent; /* eslint-disable-next-line prefer-destructuring */ eloquaData = window.ava.eloquaData; window.ava.eloquaData = eloqua_api_objectSpread(eloqua_api_objectSpread({}, eloquaData), {}, { adobeId: adobeId, error: null, fieldValues: fieldValues, ok: false, response: response, values: values }); // Run schema validation logger_api({ level: 'info', msgType: 'EloquaAPIValidation', formId: formId, data: { message: "Schema validation for eloqua api. Data: ".concat(JSON.stringify(response)) } }); if (response && !response.value) { logger_api({ level: 'error', msgType: 'EloquaAPIResponseValidation', formId: formId, data: { message: 'Error with eloqua API verify response schema validation', response: JSON.stringify(response) } }); } else { schemaValidationResponse = (0,shared/* schemaValidator */.qu)(eloqua_lookup, response); if (schemaValidationResponse && !schemaValidationResponse.ok) { // Silently fail schema, do not interrupt user, sent to Sumo for logging logger_api({ level: 'error', msgType: 'EloquaAPIResponseValidation', formId: formId, data: { message: 'Error with eloqua API response schema validation', response: JSON.stringify(schemaValidationResponse) } }); } } // Check the status of the returned information to be valid. Any other status is considered failed // Dispatch failure to redux reducer reducer/forms.js if no response is found if (!(!response.ok || response.ok && !response.value)) { _context.next = 49; break; } message = "Error with eloqua response. Response: ".concat(JSON.stringify(response)); message = response.message ? response.message : message; logger_api({ level: 'error', msgType: 'eloquaLookup', formId: formId, data: { error: 'Error with eloqua api lookup', message: message } }); window.ava.eloquaData.error = message; dispatch(setEloquaLookupInvalid(formId, message)); // Reload from cache if present if (window.ava && window.ava.eloquaData && window.ava.eloquaData.values && Object.keys(window.ava.eloquaData.values).length > 0) { dispatch(setEloquaLookupValid(formId, window.ava.eloquaData.values)); } eloquaApiRunning = false; // Reset status return _context.abrupt("return"); case 49: if (!response.value) { _context.next = 67; break; } responseJsonValue = typeof response.value === 'string' ? JSON.parse(response.value) : response.value; // Double check there is no error message in the return. if (!(responseJsonValue.message && responseJsonValue.message !== '')) { _context.next = 62; break; } window.ava.eloquaData.ok = false; _message = "Error with eloqua response. Response: ".concat(JSON.stringify(response)); _message = responseJsonValue.message ? responseJsonValue.message : _message; window.ava.eloquaData.fieldValues = fieldValues; window.ava.eloquaData.values = values; window.ava.eloquaData.error = _message; dispatch(setEloquaLookupInvalid(formId, _message)); // Reload from cache if present if (window.ava && window.ava.eloquaData && window.ava.eloquaData.values && Object.keys(window.ava.eloquaData.values).length > 0) { dispatch(setEloquaLookupValid(formId, window.ava.eloquaData.values)); } eloquaApiRunning = false; // Reset status return _context.abrupt("return"); case 62: try { localStorage.setItem('avlrEloquaData', JSON.stringify({ ok: true, error: null, values: responseJsonValue })); } catch (err) { // Do nothing } window.ava.eloquaData.values = responseJsonValue; window.ava.eloquaData.ok = true; eloquaApiRunning = false; // Reset status // Save data to redux. Format in redux function dispatch(setEloquaLookupValid(formId, responseJsonValue)); case 67: eloquaApiRunning = false; case 68: case "end": return _context.stop(); } } }, _callee); })); return function eloquaLookup(_x, _x2, _x3) { return _ref.apply(this, arguments); }; }(); /* harmony default export */ const eloqua_api = ((/* unused pure expression or super */ null && (eloquaLookup))); ;// CONCATENATED MODULE: ./src/schema/maxmind.js // eslint-disable-next-line import/prefer-default-export var maxmindInsightsSchema = { type: 'object', properties: { city: { type: 'object', properties: { confidence: { type: 'number' }, geoname_id: { type: 'number' }, names: { type: 'object', properties: { en: { type: 'string' }, ja: { type: 'string' } } } } }, continent: { type: 'object', properties: { code: { type: 'string' }, geoname_id: { type: 'number' }, names: { type: 'object', properties: { de: { type: 'string' }, en: { type: 'string' }, es: { type: 'string' }, fr: { type: 'string' }, ja: { type: 'string' }, 'pt-BR': { type: 'string' }, ru: { type: 'string' }, 'zh-CN': { type: 'string' } } } } }, location: { type: 'object', properties: { accuracy_radius: { type: 'number' }, average_income: { type: 'number' }, latitude: { type: 'number' }, longitude: { type: 'number' }, metro_code: { type: 'number' }, population_density: { type: 'number' }, time_zone: { type: 'string' } } }, postal: { type: 'object', properties: { confidence: { type: 'number' }, code: { type: 'string' } }, registered_country: { type: 'object', properties: { iso_code: { type: 'string' }, geoname_id: { type: 'number' }, names: { type: 'object', properties: { de: { type: 'string' }, en: { type: 'string' }, es: { type: 'string' }, fr: { type: 'string' }, ja: { type: 'string' }, 'pt-BR': { type: 'string' }, ru: { type: 'string' }, 'zh-CN': { type: 'string' } } } } }, subdivisions: { type: 'array', items: { type: 'object', properties: { confidence: { type: 'number' }, geoname_id: { type: 'number' }, iso_code: { type: 'string' }, names: { type: 'object', properties: { de: { type: 'string' }, en: { type: 'string' }, es: { type: 'string' }, fr: { type: 'string' }, ja: { type: 'string' }, 'pt-BR': { type: 'string' }, ru: { type: 'string' }, 'zh-CN': { type: 'string' } } } } } }, traits: { type: 'object', properties: { autonomous_system_number: { type: 'number' }, autonomous_system_organization: { type: 'string' }, ip_address: { type: 'string' }, isp: { type: 'string' }, organization: { type: 'string' }, user_type: { type: 'string' } } } }, url: { type: 'string' } } }; var maxmindCountrySchema = { type: 'object', properties: { continent: { type: 'object', properties: { code: { type: 'string' }, geoname_id: { type: 'number' }, names: { type: 'object', properties: { de: { type: 'string' }, en: { type: 'string' }, es: { type: 'string' }, fr: { type: 'string' }, ja: { type: 'string' }, 'pt-BR': { type: 'string' }, ru: { type: 'string' }, 'zh-CN': { type: 'string' } } } } }, country: { type: 'object', properties: { confidence: { type: 'number' }, iso_code: { type: 'string' }, geoname_id: { type: 'number' }, names: { type: 'object', properties: { de: { type: 'string' }, en: { type: 'string' }, es: { type: 'string' }, fr: { type: 'string' }, ja: { type: 'string' }, 'pt-BR': { type: 'string' }, ru: { type: 'string' }, 'zh-CN': { type: 'string' } } } } }, registered_country: { type: 'object', properties: { iso_code: { type: 'string' }, geoname_id: { type: 'number' }, names: { type: 'object', properties: { de: { type: 'string' }, en: { type: 'string' }, es: { type: 'string' }, fr: { type: 'string' }, ja: { type: 'string' }, 'pt-BR': { type: 'string' }, ru: { type: 'string' }, 'zh-CN': { type: 'string' } } } } }, traits: { type: 'object', properties: { autonomous_system_number: { type: 'number' }, autonomous_system_organization: { type: 'string' }, ip_address: { type: 'string' }, isp: { type: 'string' }, organization: { type: 'string' }, user_type: { type: 'string' } } } } }; ;// CONCATENATED MODULE: ./src/helpers/maxmind.js /* harmony default export */ const helpers_maxmind = ({ INSIGHTS: { city: { confidence: 20, geoname_id: 5799625, names: {} }, continent: { code: 'NA', geoname_id: 6255149, names: {} }, country: { confidence: 99, iso_code: 'US', geoname_id: 6252001, names: {} }, location: { accuracy_radius: 50, average_income: 24804, latitude: 47.3798, longitude: -122.2893, metro_code: 819, population_density: 1117, time_zone: 'America/Los_Angeles' }, postal: { confidence: 20, code: '98032' }, registered_country: { iso_code: 'US', geoname_id: 6252001, names: {} }, subdivisions: [{ confidence: 99, iso_code: 'WA', geoname_id: 5815135, names: {} }], traits: { autonomous_system_number: 7922, autonomous_system_organization: 'Comcast Cable Communications, LLC', ip_address: '2601:601:8180:7b:9cc0:9777:faac:753', isp: 'Comcast Cable', organization: 'Comcast Cable', user_type: 'residential' }, url: 'https://js.maxmind.com/geoip/v2.1/country/me' } }); ;// CONCATENATED MODULE: ./src/api/maxmind.js // import axios from 'axios'; // import 'url-search-params-polyfill'; // Logging // MILES MAXMIND BACKUP // Actions // Schema // API Settings // Types // mock var maxmindUrl = src_config.MAXMIND_API; window.ava.maxmindAPIRunning = typeof window.ava.maxmindAPIRunning !== 'undefined' ? window.ava.maxmindAPIRunning : false; window.ava.maxmindHasRanAFR = typeof window.ava.maxmindHasRanAFR !== 'undefined' ? window.ava.maxmindHasRanAFR : false; var maxmindAPI = /*#__PURE__*/function () { var _ref = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(dispatch, formId) { var _ref2, maxmindHasRanAFR, maxmind, _inputTarget, endpointUrl, response, schemaValidationResponse, inputTarget; return regenerator_default().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: dispatch(maxmindRunning()); _ref2 = window.ava || { maxmindHasRanAFR: false }, maxmindHasRanAFR = _ref2.maxmindHasRanAFR; // for QA/testing purposes to ensure maxmind is not triggered if (!(window && window.localStorage && window.localStorage.getItem('avlrMaxmindEnabled') && window.localStorage.getItem('avlrMaxmindEnabled') === 'false')) { _context.next = 5; break; } dispatch(maxmindStopped()); return _context.abrupt("return"); case 5: if (window && window.localStorage && window.localStorage.getItem('avlrMaxmindTestMockResults') && window.localStorage.getItem('avlrMaxmindTestMockResults').toString() === 'true') { window.ava.maxmind = helpers_maxmind; } if (!(window && window.ava && window.ava.maxmind && window.ava.maxmind.INSIGHTS && Object.keys(window.ava.maxmind.INSIGHTS).length > 0 || maxmindHasRanAFR)) { _context.next = 12; break; } logger_api({ level: 'info', msgType: 'MaxmindApiPrevented', formId: formId, data: { message: 'API call stopped. Call to maxmind service was stopped because it was found to have been already set' } }); maxmind = window.ava.maxmind; try { _inputTarget = { id: 'country', type: 'text', value: maxmind.INSIGHTS.country.iso_code, inputTargetTrackAbandon: false }; dispatch(captureInput(dispatch, formId, _inputTarget)); dispatch(setInputCaptureValid(formId, _inputTarget.id)); } catch (err) { logger_api({ level: 'info', msgType: 'MaxmindApiPreventedFailed', formId: formId, data: { message: 'API call stopped due to existing call. However, no data found in window.maxmind. Failing over to miles', error: err } }); } dispatch(maxmindPrevented()); return _context.abrupt("return"); case 12: endpointUrl = "".concat(maxmindUrl, "country/me"); _context.next = 15; return (0,shared/* fetch */.he)(endpointUrl, { method: 'GET' }, api_settings.timeout).then(function (result) { return result; }); case 15: response = _context.sent; if (!(!response || response && !response.ok)) { _context.next = 22; break; } dispatch(maxmindFail(response.message, endpointUrl)); // log failure logger_api({ level: 'error', msgType: 'MaxmindApiFailure', formId: formId, data: { message: 'API call failed to maxmind service. Maybe blocked', response: JSON.stringify(response) } }); window.ava.maxmindHasRan = true; window.ava.maxmindHasRanAFR = true; return _context.abrupt("return"); case 22: // Run Schema Validation logger_api({ level: 'info', msgType: 'MaxmindApiValidation', formId: formId, data: { message: 'MAXMIND schema validation - api/maxmind.js - CALL: INSIGHTS' } }); schemaValidationResponse = (0,shared/* schemaValidator */.qu)(maxmindInsightsSchema, response); if (schemaValidationResponse && !schemaValidationResponse.ok) { // Silently fail schema, do not interrupt user, sent to sumo for logging logger_api({ level: 'error', msgType: 'MaxmindApiValidation', formId: formId, data: { message: 'MAXMIND schema validation failure - api/maxmind.js - CALL: INSIGHTS', response: JSON.stringify(schemaValidationResponse) } }); } window.ava = window.ava || {}; window.ava.maxmind = { INSIGHTS: response.value }; // $FlowFixMe: TODO - find out why this is looking at fail type and not just success dispatch(maxmindSuccess(response.value, endpointUrl)); // $FlowFixMe: TODO - find out why this is looking at fail type and not just success inputTarget = { id: 'country', type: 'text', value: response.value.country.iso_code }; dispatch(captureInput(dispatch, formId, inputTarget)); dispatch(setInputCaptureValid(formId, inputTarget.id)); window.ava.maxmindHasRan = true; window.ava.maxmindHasRanAFR = true; case 33: case "end": return _context.stop(); } } }, _callee); })); return function maxmindAPI(_x, _x2) { return _ref.apply(this, arguments); }; }(); /* harmony default export */ const api_maxmind = (maxmindAPI); ;// CONCATENATED MODULE: ./src/api/miles-maxmind.js function miles_maxmind_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function miles_maxmind_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? miles_maxmind_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : miles_maxmind_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // import axios from 'axios'; // import 'url-search-params-polyfill'; // Logging // Actions // Schema // API Settings // Types // mock var miles_maxmind_maxmindUrl = src_config.MILES_MAXMIND_BACKUP; window.ava.milesMaxmindAPIRunning = typeof window.ava.milesMaxmindAPIRunning !== 'undefined' ? window.ava.milesMaxmindAPIRunning : false; window.ava.milesMaxmindHasRan = typeof window.ava.milesMaxmindHasRan !== 'undefined' ? window.ava.milesMaxmindHasRan : false; var milesMaxmindAPI = /*#__PURE__*/function () { var _ref = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(dispatch, formId) { var _ref2, milesMaxmindHasRan, _milesMaxmind, inputTarget, endpointUrl, response, _ref3, milesMaxmind, schemaValidationResponse, modifiedInsightsResponse; return regenerator_default().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: // $FlowFixMe dispatch(milesMaxmindRunning()); _ref2 = window.ava || { milesMaxmindHasRan: false }, milesMaxmindHasRan = _ref2.milesMaxmindHasRan; if (window && window.localStorage && window.localStorage.getItem('avlrMaxmindTestMockResults') && window.localStorage.getItem('avlrMaxmindTestMockResults').toString() === 'true') { window.ava.milesMaxmind = helpers_maxmind; } if (!(window && window.ava && window.ava.milesMaxmind && window.ava.milesMaxmind.INSIGHTS && Object.keys(window.ava.milesMaxmind.INSIGHTS).length > 0 || milesMaxmindHasRan)) { _context.next = 9; break; } logger_api({ level: 'info', msgType: 'MaxmindApiPrevented', formId: formId, data: { message: 'API call stopped. Call to maxmind service was stopped because it was found to have been already set' } }); _milesMaxmind = window.ava.milesMaxmind; try { inputTarget = { id: 'country', type: 'text', value: _milesMaxmind.INSIGHTS.country.iso_code, inputTargetTrackAbandon: false }; dispatch(captureInput(dispatch, formId, inputTarget)); dispatch(setInputCaptureValid(formId, inputTarget.id)); } catch (err) { // Do nothing logger_api({ level: 'info', msgType: 'MaxmindApiPreventedFailed', formId: formId, data: { message: 'API call stopped due to existing call. However, no data found in window.maxmind. Failing over to miles', error: err } }); api_maxmind(dispatch, formId); } dispatch(milesMaxmindPrevented()); return _context.abrupt("return"); case 9: endpointUrl = miles_maxmind_maxmindUrl; _context.next = 12; return (0,shared/* fetch */.he)(endpointUrl, { method: 'GET' }, api_settings.timeout).then(function (result) { return result; }); case 12: response = _context.sent; window.ava = window.ava || {}; _ref3 = window.ava || { milesMaxmind: {} }, milesMaxmind = _ref3.milesMaxmind; window.ava.milesMaxmind = miles_maxmind_objectSpread(miles_maxmind_objectSpread({}, milesMaxmind), {}, { INSIGHTS: response }); if (response.ok) { _context.next = 22; break; } dispatch(milesMaxmindFail(response.message, endpointUrl)); // log failure logger_api({ level: 'error', msgType: 'MilesMaxmindApiFailure', formId: formId, data: { message: 'API call failed to miles maxmind service.', response: JSON.stringify(response) } }); window.ava.milesMaxmindHasRan = true; api_maxmind(dispatch, formId); return _context.abrupt("return"); case 22: // Run Schema Validation logger_api({ level: 'info', msgType: 'MilesMaxmindApiValidation', formId: formId, data: { message: 'MILES MAXMIND schema validation - api/miles-maxmind.js - CALL: INSIGHTS' } }); schemaValidationResponse = (0,shared/* schemaValidator */.qu)(maxmindInsightsSchema, response); if (schemaValidationResponse && !schemaValidationResponse.ok) { // Silently fail schema, do not interrupt user, sent to sumo for logging logger_api({ level: 'error', msgType: 'MaxmindApiValidation', formId: formId, data: { message: 'MAXMIND schema validation failure - api/maxmind.js - CALL: INSIGHTS', response: JSON.stringify(schemaValidationResponse) } }); } // copying insights response object to update isoCode property to iso_code modifiedInsightsResponse = miles_maxmind_objectSpread(miles_maxmind_objectSpread({}, response.value), {}, { country: miles_maxmind_objectSpread(miles_maxmind_objectSpread({}, response.value), {}, { // $FlowFixMe iso_code: response.value.country.isoCode }) }); window.ava.milesMaxmind = miles_maxmind_objectSpread(miles_maxmind_objectSpread({}, milesMaxmind), {}, { INSIGHTS: modifiedInsightsResponse }); milesMaxmind = miles_maxmind_objectSpread(miles_maxmind_objectSpread({}, milesMaxmind), {}, { INSIGHTS: modifiedInsightsResponse }); // $FlowFixMe: TODO - find out why this is looking at fail type and not just success if (!milesMaxmindHasRan) dispatch(milesMaxmindSuccess(modifiedInsightsResponse, endpointUrl)); try { // $FlowFixMe: TODO - find out why this is looking at fail type and not just success inputTarget = { id: 'country', type: 'text', value: modifiedInsightsResponse.country.iso_code }; dispatch(captureInput(dispatch, formId, inputTarget)); dispatch(setInputCaptureValid(formId, inputTarget.id)); } catch (err) { // Do nothing console.log('Error setting maxmind country field'); } window.ava.milesMaxmindHasRan = true; case 31: case "end": return _context.stop(); } } }, _callee); })); return function milesMaxmindAPI(_x, _x2) { return _ref.apply(this, arguments); }; }(); /* harmony default export */ const miles_maxmind = ((/* unused pure expression or super */ null && (milesMaxmindAPI))); ;// CONCATENATED MODULE: ./src/schema/form-template-data.js // eslint-disable-next-line import/prefer-default-export var formTemplateDataSchema = { type: 'object', properties: { fields: { type: 'array', properties: { displayText: { type: 'string' }, id: { type: 'string' }, placeholder: { type: 'string' } } }, id: { type: 'string' }, name: { type: 'string' }, redirecturl: { type: ['string', 'null'] }, title: { type: 'string' } } }; /* harmony default export */ const form_template_data = (formTemplateDataSchema); ;// CONCATENATED MODULE: ./src/api/fetch-form-data.js function fetch_form_data_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function fetch_form_data_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? fetch_form_data_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : fetch_form_data_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Docs // Use the following URLs to review documentation around brite verify service // https://wiki.avalara.com/display/MT/BriteVerify+-+API+Calls // https://miles.marketing.avalara.com/swagger/doc/email_verify // Logging // Data // Actions // Schema // API Settings // Types var formDataAPI = src_config.AVAFORM_TEMPLATE_API; // API should technically always return success (200), however, errors are reflected in the response response.value.status var fetchFormTemplateData = /*#__PURE__*/function () { var _ref = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(dispatch, formId, configs, isModal, params, url, userInfo, disableHideFields) { var _ref2, host, env, enpointEnv, authorEnvironments, endPointEnvironments, template, checkTemplate, data, requestUrl, response, _ref3, formAPI, schemaValidationResponse, value, _data; return regenerator_default().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _ref2 = window && window.location && window.location.host ? window.location : { host: 'avalara.com' }, host = _ref2.host; // default to production env = 'prod'; // Default env to production enpointEnv = 'prod'; authorEnvironments = ['localhost:8080', 'author-p65817-e564943.adobeaemcloud.com', 'author-p65817-e741809.adobeaemcloud.com', 'author-p65817-e741793.adobeaemcloud.com']; endPointEnvironments = { dev: ['localhost:8080', 'aem-dev.avlr.net:4502', 'aem-dev.avlr.net', 'author-p65817-e564943.adobeaemcloud.com', 'publish-p65817-e564943.adobeaemcloud.com', 'cloud-dev.avlr.net'], // Dev instances stage: ['author-p65817-e741809.adobeaemcloud.com', 'publish-p65817-e741809.adobeaemcloud.com', 'cloud-stage.avlr.net'] // Staging instances }; // Determines if error message should be exposed in author mode // eslint-disable-next-line array-callback-return if (authorEnvironments.includes(host)) env = 'author'; // Determines what env to hit the API with // eslint-disable-next-line array-callback-return Object.keys(endPointEnvironments).map(function (k) { if (endPointEnvironments[k].includes(host)) { enpointEnv = k; } }); // Pull the template out of the configs and check for value in S3. FormId is the uuid for the form on the page and in the redux logger. We should not be checking S3 for the passed formId, but for the past template from the configs.template template = 'BASIC'; checkTemplate = null; try { template = JSON.parse(configs).template.replace(/[\W_]+/gi, '').toLowerCase(); checkTemplate = template; } catch (err) { // Do nothing } if (checkTemplate) { _context.next = 16; break; } logger_api({ level: 'error', msgType: 'fetchFormTemplateData', formId: 'null', data: { message: 'Error retrieving template data. No template sent. Defaulting to BASIC', template: template } }); data = form_data.BASIC; if (env !== 'prod') data.templateError = 'Error: formId not set. No template to retrieve.'; // Only show on lower env dispatch(initFormApplication(configs, 'BASIC', isModal, params, url, userInfo, disableHideFields, form_data.BASIC)); return _context.abrupt("return"); case 16: requestUrl = "".concat(formDataAPI, "/").concat(enpointEnv, "/").concat(template.toLowerCase(), ".json"); _context.next = 19; return (0,shared/* fetch */.he)(requestUrl, { method: 'GET' }, api_settings.timeout).then(function (result) { return result; }); case 19: response = _context.sent; window.ava = window.ava || {}; _ref3 = window.ava || { briteVerify: {} }, formAPI = _ref3.formAPI; window.ava.formDataAPI = fetch_form_data_objectSpread(fetch_form_data_objectSpread({}, formAPI), {}, (0,defineProperty/* default */.Z)({ env: env }, formId, { endpoint: requestUrl, response: response })); // Run schema validation logger_api({ level: 'info', msgType: 'fetchFormTemplateDataSchemaValidation', formId: formId, data: { message: "Schema validation for API template fetch. Data: ".concat(JSON.stringify(response)) } }); schemaValidationResponse = (0,shared/* schemaValidator */.qu)(form_template_data, response); if (schemaValidationResponse && !schemaValidationResponse.ok) { // Silently fail schema, do not interrupt user, sent to Sumo for logging logger_api({ level: 'error', msgType: 'fetchFormTemplateDataResponseSchemaValidation', formId: formId, data: { message: 'Error with API template fetch response schema validation', response: JSON.stringify(schemaValidationResponse) } }); } // Check the status of the returned information to be valid. Any other status is considered failed // Dispatch failure to redux reducer reducer/forms.js if no response is found if (!response || !response.ok) { logger_api({ level: 'error', msgType: 'fetchFormTemplateData', formId: formId, data: { message: "Error retrieving template data. Template not found. ".concat(template.toLowerCase()), response: JSON.stringify(response) } }); data = form_data.BASIC; if (env !== 'prod') data.templateError = "Error: \"".concat(template.toLowerCase(), "\" template does not exist. Defaulting to 'BASIC'."); // Only show on lower env dispatch(initFormApplication(configs, formId, isModal, params, url, userInfo, disableHideFields, form_data.BASIC)); } else { value = response.value; _data = value; dispatch(initFormApplication(configs, formId, isModal, params, url, userInfo, disableHideFields, _data)); } case 27: case "end": return _context.stop(); } } }, _callee); })); return function fetchFormTemplateData(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8) { return _ref.apply(this, arguments); }; }(); /* harmony default export */ const fetch_form_data = ((/* unused pure expression or super */ null && (fetchFormTemplateData))); ;// CONCATENATED MODULE: ./src/schema/submission-limit.js // eslint-disable-next-line import/prefer-default-export var submissionLimitSchema = { type: 'object', properties: { city: { type: 'object', properties: { confidence: { type: 'number' }, geoname_id: { type: 'number' }, names: { type: 'object', properties: { en: { type: 'string' }, ja: { type: 'string' } } } } }, continent: { type: 'object', properties: { code: { type: 'string' }, geoname_id: { type: 'number' }, names: { type: 'object', properties: { de: { type: 'string' }, en: { type: 'string' }, es: { type: 'string' }, fr: { type: 'string' }, ja: { type: 'string' }, 'pt-BR': { type: 'string' }, ru: { type: 'string' }, 'zh-CN': { type: 'string' } } } } }, location: { type: 'object', properties: { accuracy_radius: { type: 'number' }, average_income: { type: 'number' }, latitude: { type: 'number' }, longitude: { type: 'number' }, metro_code: { type: 'number' }, population_density: { type: 'number' }, time_zone: { type: 'string' } } }, postal: { type: 'object', properties: { confidence: { type: 'number' }, code: { type: 'string' } }, registered_country: { type: 'object', properties: { iso_code: { type: 'string' }, geoname_id: { type: 'number' }, names: { type: 'object', properties: { de: { type: 'string' }, en: { type: 'string' }, es: { type: 'string' }, fr: { type: 'string' }, ja: { type: 'string' }, 'pt-BR': { type: 'string' }, ru: { type: 'string' }, 'zh-CN': { type: 'string' } } } } }, subdivisions: { type: 'array', items: { type: 'object', properties: { confidence: { type: 'number' }, geoname_id: { type: 'number' }, iso_code: { type: 'string' }, names: { type: 'object', properties: { de: { type: 'string' }, en: { type: 'string' }, es: { type: 'string' }, fr: { type: 'string' }, ja: { type: 'string' }, 'pt-BR': { type: 'string' }, ru: { type: 'string' }, 'zh-CN': { type: 'string' } } } } } }, traits: { type: 'object', properties: { autonomous_system_number: { type: 'number' }, autonomous_system_organization: { type: 'string' }, ip_address: { type: 'string' }, isp: { type: 'string' }, organization: { type: 'string' }, user_type: { type: 'string' } } } }, url: { type: 'string' } } }; var submission_limit_maxmindCountrySchema = { type: 'object', properties: { continent: { type: 'object', properties: { code: { type: 'string' }, geoname_id: { type: 'number' }, names: { type: 'object', properties: { de: { type: 'string' }, en: { type: 'string' }, es: { type: 'string' }, fr: { type: 'string' }, ja: { type: 'string' }, 'pt-BR': { type: 'string' }, ru: { type: 'string' }, 'zh-CN': { type: 'string' } } } } }, country: { type: 'object', properties: { confidence: { type: 'number' }, iso_code: { type: 'string' }, geoname_id: { type: 'number' }, names: { type: 'object', properties: { de: { type: 'string' }, en: { type: 'string' }, es: { type: 'string' }, fr: { type: 'string' }, ja: { type: 'string' }, 'pt-BR': { type: 'string' }, ru: { type: 'string' }, 'zh-CN': { type: 'string' } } } } }, registered_country: { type: 'object', properties: { iso_code: { type: 'string' }, geoname_id: { type: 'number' }, names: { type: 'object', properties: { de: { type: 'string' }, en: { type: 'string' }, es: { type: 'string' }, fr: { type: 'string' }, ja: { type: 'string' }, 'pt-BR': { type: 'string' }, ru: { type: 'string' }, 'zh-CN': { type: 'string' } } } } }, traits: { type: 'object', properties: { autonomous_system_number: { type: 'number' }, autonomous_system_organization: { type: 'string' }, ip_address: { type: 'string' }, isp: { type: 'string' }, organization: { type: 'string' }, user_type: { type: 'string' } } } } }; ;// CONCATENATED MODULE: ./src/api/submission-limit-api.js function submission_limit_api_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function submission_limit_api_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? submission_limit_api_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : submission_limit_api_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // import axios from 'axios'; // import 'url-search-params-polyfill'; // Logging // Actions // Schema // API Settings // Types var submissionLimitURL = src_config.MILES_API; var submissionLimitRunning = []; var submissionLimitAPI = /*#__PURE__*/function () { var _ref = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(dispatch, formId, submissionlimitid, submissionlimitCap) { var endpointUrl, _ref2, submissionLimit, response, schemaValidationResponse, _ref3, submissionLimitCount; return regenerator_default().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: endpointUrl = "".concat(submissionLimitURL, "/leads/submission-limit/").concat(submissionlimitid); if (!(window && window.submissionLimit && window.submissionLimit[formId] || submissionLimitRunning.includes(formId))) { _context.next = 5; break; } if (!((0,ui/* checkForDebug */.HM)() || (0,ui/* checkIfIsDevelop */.QK)())) { _context.next = 5; break; } // eslint-disable-next-line no-console console.log("Submission limit api for ".concat(formId, " already called or is already running. Running: ").concat(JSON.stringify(submissionLimitRunning))); return _context.abrupt("return"); case 5: submissionLimitRunning.push(formId); window.ava = window.ava || {}; _ref2 = window.ava || { submissionLimit: {} }, submissionLimit = _ref2.submissionLimit; window.ava.submissionLimit = submission_limit_api_objectSpread(submission_limit_api_objectSpread({}, submissionLimit), {}, (0,defineProperty/* default */.Z)({}, formId, null)); _context.next = 11; return (0,shared/* fetch */.he)(endpointUrl, { method: 'GET' }, api_settings.timeout).then(function (result) { return result; }); case 11: response = _context.sent; // Add response to window window.ava.submissionLimit = submission_limit_api_objectSpread(submission_limit_api_objectSpread({}, submissionLimit), {}, (0,defineProperty/* default */.Z)({}, formId, { response: response, submissionlimitid: submissionlimitid })); // Remove from running submissionLimitRunning = submissionLimitRunning.filter(function (f) { return f !== formId; }); if (response.ok) { _context.next = 18; break; } dispatch(submissionLimitApiFailed(formId, submissionlimitid, response.ok, response)); // log failure logger_api({ level: 'error', msgType: 'SubmissionLimitApiFailure', formId: formId, data: { message: 'API call failed to MILES submission limit search service.', response: JSON.stringify(response) } }); return _context.abrupt("return"); case 18: if (response.ok) { // Run Schema Validation logger_api({ level: 'info', msgType: 'SubmissionLimitApiValidation', formId: formId, data: { message: 'Submission limit schema validation - api/maxmind.js - CALL: INSIGHTS' } }); schemaValidationResponse = (0,shared/* schemaValidator */.qu)(submissionLimitSchema, response); if (schemaValidationResponse && !schemaValidationResponse.ok) { // Silently fail schema, do not interrupt user, sent to sumo for logging logger_api({ level: 'error', msgType: 'SubmissionLimitApiValidation', formId: formId, data: { message: 'Submission limit schema validation failure - api/maxmind.js - CALL: INSIGHTS', response: JSON.stringify(schemaValidationResponse) } }); } _ref3 = response.value || { submissionLimitCount: 1 }, submissionLimitCount = _ref3.submissionLimitCount; if (submissionLimitCount >= submissionlimitCap) dispatch(setSubmissionLimitExceeeded(formId)); if (submissionLimitCount === 0) { logger_api({ level: 'error', msgType: 'SubmissionLimitApiFailure', formId: formId, data: { message: 'Submission limit count API call failed and returned 0. Check MILES API endpoint', response: JSON.stringify(response) } }); dispatch(setSubmissionLimitExceeeded(formId)); } } case 19: case "end": return _context.stop(); } } }, _callee); })); return function submissionLimitAPI(_x, _x2, _x3, _x4) { return _ref.apply(this, arguments); }; }(); /* harmony default export */ const submission_limit_api = ((/* unused pure expression or super */ null && (submissionLimitAPI))); ;// CONCATENATED MODULE: ./package.json const package_namespaceObject = {"i8":"25.2.0"}; ;// CONCATENATED MODULE: ./src/helpers/app-stats.js var setPackageStats = function setPackageStats() { var version = package_namespaceObject.i8; window.ava.stats = { version: version }; }; /* harmony default export */ const app_stats = ((/* unused pure expression or super */ null && (setPackageStats))); ;// CONCATENATED MODULE: ./src/helpers/index.js // eslint-disable-next-line import/no-cycle // Types // Helper to validate elements required to init form render // @return { void } ( no return ) // used in entry.js var formInitValidation = function formInitValidation(onSystemError, formId) { var configs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; if (!configs || configs === null || configs !== null && !(0,ui/* isJson */.sO)(configs)) { var readableConfigs = configs === null ? 'null' : configs; logger_api({ level: 'error', msgType: 'RegexFieldValidationError', formId: formId, data: { message: 'Non-existant or Malformed config', configs: JSON.stringify(readableConfigs), location: 'entry.js componentDidMount() in helpers/index.js' } }); } }; // Helper to check the theme for inline form style // @return { Boolean } var isFormDisplayInline = function isFormDisplayInline() { var activeData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; if (activeData === null) return false; return Boolean(activeData.theme && activeData.theme.layout && activeData.theme.layout === 'inline'); }; // Helper to pull the offset value from theme // @return { string | null } var getOffsetView = function getOffsetView(activeData) { if (activeData && activeData !== null && activeData.theme && activeData.theme.offset) { return activeData.theme.offset; } return null; }; var checkFormModal = function checkFormModal(elem) { if (elem instanceof HTMLElement) { if (elem.classList && (elem.classList.contains('modal-body') || elem.classList.contains('avaform-modal-body'))) { return true; } if (elem.parentElement && elem.parentElement instanceof HTMLElement) { return checkFormModal(elem.parentElement); } return false; // Assumes that no element was found with either class type } return false; // Assumes that elem is not an HTMLElement that can be checked }; // Helper to check if localStorage avlrPreventSubmit is set var checkForSubmissionSupression = function checkForSubmissionSupression() { return Boolean(window.localStorage.getItem('avlrPreventSubmit') && window.localStorage.getItem('avlrPreventSubmit') === 'true'); }; // Helper to check the status of if loader should be shown or not // @return { Bool } var getShowLoader = function getShowLoader() { var activeData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; if (activeData === null) return false; var theme = activeData.theme; return theme && theme.showLoader ? theme.showLoader : false; }; // Helper function to set the loading spinner position // @return { Enum } var getLoaderPosition = function getLoaderPosition() { var activeData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; if (activeData === null) return 'overlay'; var theme = activeData.theme; return theme && theme.loaderPosition ? theme.loaderPosition : 'overlay'; }; // Helper to add styles to the main container // @return nothing var setAttributesToRootDiv = function setAttributesToRootDiv(el, template) { var isModal = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; if (!el.style) return; /* eslint-disable no-param-reassign */ el.setAttribute('data-template', template); el.style.position = isModal ? 'static' : 'relative'; el.style.display = 'flex'; el.style['flex-direction'] = 'column'; /* eslint-enable no-param-reassign */ }; // Helper to clear form captured values // @return { void } var registerHelperFunctionToWindow = function registerHelperFunctionToWindow(functionName, passedFunction) { if (typeof passedFunction !== 'function' || !functionName) return; window[functionName] = passedFunction; }; var detectOS = function detectOS() { if (!window || window && window.navigator && !window.navigator.userAgent) return 'unknown'; var searchString = function searchString(data) { for (var i = 0; i < data.length; i++) { if (window && window.navigator && window.navigator.userAgent) { var userAgent = window.navigator.userAgent; if (userAgent.indexOf(data[i].subString) !== -1) { return data[i].identity; } } } return 'unknown'; }; var osVersions = [{ subString: 'iPhone', identity: 'iOS' }, { subString: 'iPad', identity: 'iOS' }, { subString: 'iPod', identity: 'iOS' }, { subString: 'Android', identity: 'Android' }, { subString: 'Win', identity: 'Windows' }, { subString: 'Mac', identity: 'macOS' }, { subString: 'Linux', identity: 'Linux' }]; return searchString(osVersions); }; // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js var taggedTemplateLiteral = __webpack_require__(2465); // EXTERNAL MODULE: ./node_modules/styled-components/dist/styled-components.browser.esm.js + 4 modules var styled_components_browser_esm = __webpack_require__(2788); ;// CONCATENATED MODULE: ./src/styled/config/colors.js var COLORS = { avataxBlue: '#027FAD', black: '#1A1A1A', blue: '#059BD2', brightBlue: '#21B7F9', buttonPrimary: 'rgb(2, 127, 173)', buttonHover: 'rgb(2, 127, 173, 90%)', darkBlue: '#0587BE', darkGreen: '#1A7A18', darkOrange: '#E65000', darkerkBlue: '#506470', darkRed: '#740c0c', disabledGray: '#EFEFEF', errorRed: '#D9604F', green: '#22AE36', grey1: '#5F6062', grey2: '#919195', grey3: '#EAEAEA', grey4: '#F5F6FA', grey4a1: '#D7D7D7', grey4a2: '#CCC', grey4a3: '#E7E7E7', grey5: '#333', greydark: '#6f6f6f', inputGrey: '#DDD', red: '#C70000', lightBlue: '#E4EFF6', lightGreen: '#D9E7D3', lightRed: '#F4CCCC', lightYellow: '#FFFAE6', orange: '#FA6400', orangeHover: '#E65000', transparent: 'rgba(255, 255, 255, 0)', transparentHover: 'rgba(255, 255, 255, 0.0980392156862745)', transparentFocus: 'rgba(255, 255, 255, 0.298039215686275)', validGreen: '#22AE36', yellow: '#FEDB4C', white: '#FFF' }; /* harmony default export */ const colors = (COLORS); ;// CONCATENATED MODULE: ./src/styled/config/form-theme.js // HELPER FUNCTIONS var getPixel = function getPixel(pixel) { return "".concat(pixel, "px"); }; var getHexColor = function getHexColor(value) { if (!value) { return ''; } return "#".concat(value.replace(/\W/, '')); }; // FLOW TYPE // CONSTANT var FORMTHEME = { button: { active: colors.orange, color: colors.white, disabled: colors.disabledGray }, font: { family: { apeterua: ['Apertura', 'source-sans-pro', 'Arial', 'sans-serif'], "default": ['source-sans-pro', 'Arial', 'sans-serif'] }, size: getPixel(18) }, field: { background: { color: colors.white }, border: { radius: getPixel(3), color: getHexColor(colors.greydark) }, font: { color: colors.grey2, size: getPixel(18) }, minHeight: getPixel(50), placeHolder: { backgroundColor: colors.transparent, fontColor: colors.greydark } } }; /* harmony default export */ const form_theme = (FORMTHEME); ;// CONCATENATED MODULE: ./src/constants/breakpoints.js var breakPoints = { tablet: 830, phone: 580 }; /* harmony default export */ const breakpoints = (breakPoints); ;// CONCATENATED MODULE: ./src/styled/helpers/index.js var browserSupport = ['-moz-', '-ms-', '-o-', '-webkit-']; var setBrowserCompatibility = function setBrowserCompatibility(asset, value) { var compatiblity = []; // get cross browser values browserSupport.map(function (b) { return compatiblity.push("".concat(b).concat(asset, ": ").concat(value)); }); // create cross browser value compatiblity.push("".concat(asset, ": ").concat(value, ";")); // push static value return compatiblity.join(';'); // Make string }; var setFontFamily = function setFontFamily(fontFamily) { return fontFamily.join(', '); }; var setIcoMoonIcon = function setIcoMoonIcon(icon) { var color = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#F60'; var position = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'before'; return "\n &:".concat(position, " {\n content: \"").concat(icon, "\";\n color: ").concat(color, ";\n font-family: 'icomoon' !important;\n font-style: normal;\n font-size: 1.25rem;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n speak: none;\n }\n"); }; ;// CONCATENATED MODULE: ./src/styled/containers/app.js var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5; // Accepts form data theme attributes to option out the blow elements // containerOffset: left, right // containerOffsetMinWidth: string value. Design/Dev option for px or % // containerOffsetWidth: string value. Design/Dev option for px or % var InlineFormDisplay = (0,styled_components_browser_esm/* css */.iv)(_templateObject || (_templateObject = (0,taggedTemplateLiteral/* default */.Z)(["\n display: flex;\n align-items: flex-start;\n justify-content: center;\n vertical-align: top;\n > * {\n width: 100%;\n margin-right: ", "px;\n &:last-child {\n margin-right: 0;\n ", "\n }\n ", "\n }\n @media (max-width: ", "px) {\n && {\n > * {\n margin-right: 15px;\n }\n }\n }\n @media (max-width: ", "px) {\n flex-direction: column;\n > * {\n margin-right: 0;\n width: 100%;\n &:last-of-type {\n width: 100%;\n }\n }\n }\n"])), function (props) { return props.fieldGutter ? props.fieldGutter : '30'; }, function (props) { return props.offset && props.offset.position === 'right' && "\n min-width: ".concat(props.offset.minWidth || '175px', ";\n width: ").concat(props.offset.width || 'auto', ";\n "); }, function (props) { return props.offset && props.offset.position === 'left' && "\n &:first-child {\n min-width: ".concat(props.offset.minWidth || '175px', ";\n width: ").concat(props.offset.width || 'auto', ";\n }\n "); }, breakpoints.tablet, breakpoints.phone); var AppContainer = styled_components_browser_esm/* default.div */.ZP.div(_templateObject2 || (_templateObject2 = (0,taggedTemplateLiteral/* default */.Z)(["\n margin: 0 auto;\n position: relative;\n width: 100%;\n ", "\n\n * {\n ", "\n color: ", ";\n font-family: ", "; /* Array is passed in */\n line-height: 1.25rem;\n margin: 0;\n padding: 0;\n position: relative;\n text-align: left;\n fieldset {\n border: none;\n }\n }\n\n fieldset {\n border: none;\n }\n"])), function (props) { return props.loadingTransition && 'opacity: .35;'; }, setBrowserCompatibility('box-sizing', 'border-box'), colors.black, setFontFamily(form_theme.font.family["default"])); var AvaForm = styled_components_browser_esm/* default.form */.ZP.form(_templateObject3 || (_templateObject3 = (0,taggedTemplateLiteral/* default */.Z)(["\n margin: 0 auto 15px;\n padding-top: 10px;\n ", "\n ", "\n position: relative;\n\n .form-control {\n border: none;\n &[readonly=readonly] {\n background: ", ";\n }\n }\n"])), function (props) { return props.isInline && InlineFormDisplay; }, function (props) { return props.isDisabled === 'disabled' && "\n opacity: .5;\n alpha-opacity: 50%;\n z-index: 0;\n "; }, colors.white); var TemplateErrorMessage = styled_components_browser_esm/* default.p */.ZP.p(_templateObject4 || (_templateObject4 = (0,taggedTemplateLiteral/* default */.Z)(["\n color: red;\n clear: both;\n font-weight: 400;\n margin-bottom: 1.25em;\n size: 1.25em;\n text-align: center;\n width: 100%;\n"]))); var LimitErrorContainer = styled_components_browser_esm/* default.div */.ZP.div(_templateObject5 || (_templateObject5 = (0,taggedTemplateLiteral/* default */.Z)(["\n color: ", ";\n margin-bottom: 20px;\n * {\n font-size: .90rem;\n }\n"])), colors.errorRed); // EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js var injectStylesIntoStyleTag = __webpack_require__(3379); var injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag); // EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleDomAPI.js var styleDomAPI = __webpack_require__(3380); var styleDomAPI_default = /*#__PURE__*/__webpack_require__.n(styleDomAPI); // EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertBySelector.js var insertBySelector = __webpack_require__(569); var insertBySelector_default = /*#__PURE__*/__webpack_require__.n(insertBySelector); // EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js var setAttributesWithoutAttributes = __webpack_require__(3565); var setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(setAttributesWithoutAttributes); // EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertStyleElement.js var insertStyleElement = __webpack_require__(9216); var insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement); // EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js var styleTagTransform = __webpack_require__(4589); var styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform); // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/css/icomoon.css var icomoon = __webpack_require__(7398); ;// CONCATENATED MODULE: ./src/css/icomoon.css var options = {}; options.styleTagTransform = (styleTagTransform_default()); options.setAttributes = (setAttributesWithoutAttributes_default()); options.insert = insertBySelector_default().bind(null, "head"); options.domAPI = (styleDomAPI_default()); options.insertStyleElement = (insertStyleElement_default()); var update = injectStylesIntoStyleTag_default()(icomoon/* default */.Z, options); /* harmony default export */ const css_icomoon = (icomoon/* default */.Z && icomoon/* default.locals */.Z.locals ? icomoon/* default.locals */.Z.locals : undefined); // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/css/clickwrap.css var clickwrap = __webpack_require__(8475); ;// CONCATENATED MODULE: ./src/css/clickwrap.css var clickwrap_options = {}; clickwrap_options.styleTagTransform = (styleTagTransform_default()); clickwrap_options.setAttributes = (setAttributesWithoutAttributes_default()); clickwrap_options.insert = insertBySelector_default().bind(null, "head"); clickwrap_options.domAPI = (styleDomAPI_default()); clickwrap_options.insertStyleElement = (insertStyleElement_default()); var clickwrap_update = injectStylesIntoStyleTag_default()(clickwrap/* default */.Z, clickwrap_options); /* harmony default export */ const css_clickwrap = (clickwrap/* default */.Z && clickwrap/* default.locals */.Z.locals ? clickwrap/* default.locals */.Z.locals : undefined); ;// CONCATENATED MODULE: ./src/styled/form.js var form_templateObject, form_templateObject2, form_templateObject3, form_templateObject4, form_templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21, _templateObject22, _templateObject23, _templateObject24, _templateObject25, _templateObject26, _templateObject27, _templateObject28, _templateObject29, _templateObject30, _templateObject31, _templateObject32, _templateObject33; // Breakpoints // eslint-disable-next-line no-unused-vars // CSS var defaultInputValues = (0,styled_components_browser_esm/* css */.iv)(form_templateObject || (form_templateObject = (0,taggedTemplateLiteral/* default */.Z)(["\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n\n ", "\n ", "\n background: ", ";\n border: 1px solid ", ";\n box-shadow: none;\n outline-color: transparent; /* REMOVE BROWSER DEFAULT OUTLINE */\n outline-style: none;\n outline: none;\n z-index: 2;\n\n &::placeholder { /* HIDE PLACE HOLDER */\n color: ", ";\n display: block;\n visibility: none;\n }\n &::-ms-clear {\n display: none;\n height: 0;\n width : 0;\n }\n\n &&::-webkit-contacts-auto-fill-button {\n visibility: hidden;\n display: none !important;\n pointer-events: none;\n position: absolute;\n right: 0;\n }\n\n &.inValid {\n border-color: ", ";\n }\n\n &.valid {\n border-color: ", ";\n }\n"])), setBrowserCompatibility('box-sizing', 'border-box'), setBrowserCompatibility('border-radius', form_theme.field.border.radius), form_theme.field.background.color, form_theme.field.border.color, colors.white, colors.errorRed, colors.validGreen); var animationDefault = (0,styled_components_browser_esm/* css */.iv)(form_templateObject2 || (form_templateObject2 = (0,taggedTemplateLiteral/* default */.Z)(["\n /* Set animation */\n ", "\n"])), setBrowserCompatibility('transition', 'top .2s, font-size .2s')); var formTitle = (0,styled_components_browser_esm/* css */.iv)(form_templateObject3 || (form_templateObject3 = (0,taggedTemplateLiteral/* default */.Z)(["\n color: #1A1A1A;\n line-height: 1.75rem;\n font-family: \"Apertura\", source-sans-pro, Arial, sans-serif;\n font-size: 1.25rem;\n"]))); var defaultFormTitle = (0,styled_components_browser_esm/* css */.iv)(form_templateObject4 || (form_templateObject4 = (0,taggedTemplateLiteral/* default */.Z)(["\n ", "\n margin-bottom: 1.25rem;\n text-align: center;\n"])), formTitle); var sectionFormTitle = (0,styled_components_browser_esm/* css */.iv)(form_templateObject5 || (form_templateObject5 = (0,taggedTemplateLiteral/* default */.Z)(["\n ", "\n margin-bottom: 0.5rem;\n text-align: left;\n"])), formTitle); var placeHolderSecondary = (0,styled_components_browser_esm/* css */.iv)(_templateObject6 || (_templateObject6 = (0,taggedTemplateLiteral/* default */.Z)(["\n ", "\n font-size: 14px;\n top: 0px;\n .span {\n line-height: 1; //Reset linehight for the white background to hover over the line\n background-color: ", ";\n width: max-content;\n }\n"])), animationDefault, colors.white); // set here to share between default TextInput and input[type='tel'] // allows intl-phone similation var textInput = (0,styled_components_browser_esm/* css */.iv)(_templateObject7 || (_templateObject7 = (0,taggedTemplateLiteral/* default */.Z)(["\n font-size: ", ";\n line-height: 0;\n min-height: ", ";\n padding: 10px 15px;\n width: 100%;\n &:hover,\n &:focus {\n ", "\n }\n\n &:focus,\n &:hover,\n &.isSet,\n &.valid {\n & + .placeholderText {\n ", "\n }\n }\n"])), form_theme.field.font.size, form_theme.field.minHeight, setBrowserCompatibility('box-shadow', '0 5px 10px rgba(0, 0, 0, .1)'), placeHolderSecondary); // Component styles var Desc = styled_components_browser_esm/* default.p */.ZP.p(_templateObject8 || (_templateObject8 = (0,taggedTemplateLiteral/* default */.Z)([""]))); var ErrorMessage = styled_components_browser_esm/* default.p */.ZP.p(_templateObject9 || (_templateObject9 = (0,taggedTemplateLiteral/* default */.Z)(["\n color: ", ";\n font-size: .75rem;\n margin-top: -12px;\n padding-left: 15px;\n padding-right: 15px;\n padding-bottom: 5px;\n width: 100%;\n z-index: unset;\n\n ", ";\n &.select-error-alert {\n &:after {\n right: 45px;\n }\n }\n\n &.error-alert-container {\n left: -12px;\n margin-top: -16px\n\n &::before {\n font-size: .9375rem;\n }\n }\n"])), colors.errorRed, function (props) { return !props.isGdpr && !props.isCheckbox ? "\n bottom: -15px;\n ".concat(setIcoMoonIcon('\\e934', colors.errorRed, 'after'), "\n\n &:after {\n position: absolute;\n right: 15px;\n top: -40px;\n z-index: 3;\n }") : "\n margin-bottom: 8px;\n ".concat(setIcoMoonIcon('\\e934', colors.errorRed, 'before'), "\n &:before {\n margin-right: 5px;\n }\n "); }); var DisabledMessage = styled_components_browser_esm/* default.p */.ZP.p(_templateObject10 || (_templateObject10 = (0,taggedTemplateLiteral/* default */.Z)(["\n margin-bottom: 1.25rem;\n"]))); var FieldRow = styled_components_browser_esm/* default.div */.ZP.div(_templateObject11 || (_templateObject11 = (0,taggedTemplateLiteral/* default */.Z)(["\n display: flex;\n flex-direction: row;\n justify-content: space-evenly;\n\n && {\n > * {\n width: 100%;\n margin-right: ", "px;\n\n &:last-child {\n margin-right: 0;\n }\n }\n }\n\n @media (max-width: ", "px) {\n flex-direction: column;\n && {\n * > {\n margin-right: 0;\n }\n }\n }\n"])), function (props) { return props.fieldGutter ? props.fieldGutter : '30'; }, breakpoints.phone); var FormHeader = styled_components_browser_esm/* default.div */.ZP.div(_templateObject12 || (_templateObject12 = (0,taggedTemplateLiteral/* default */.Z)(["\n margin-bottom: 20px;\n padding: 0 5px;\n"]))); var GdprField = styled_components_browser_esm/* default.div */.ZP.div(_templateObject13 || (_templateObject13 = (0,taggedTemplateLiteral/* default */.Z)(["\n width: auto;\n margin-top: 20px;\n margin-bottom: 20px;\n label {\n display: flex;\n flex-direction: row;\n margin-left: 2px;\n align-items: flex-start;\n justify-content: flex-start;\n width: auto;\n input {\n border-radius: 0px;\n border: .5px solid #DDD;\n min-width: .75rem;\n min-height: .75rem;\n }\n > *:first-child {\n margin-right: 10px;\n margin-top: 1px;\n width: auto;\n }\n }\n span {\n color: ", ";\n font-size: .8125rem;\n line-height: 1.25rem;\n }\n a {\n color: ", "\n }\n"])), colors.grey2, colors.orange); var FieldDisclaimerText = (0,styled_components_browser_esm/* default */.ZP)(GdprField)(_templateObject14 || (_templateObject14 = (0,taggedTemplateLiteral/* default */.Z)(["\n margin-top: 0px;\n\n span {\n color: ", ";\n font-size: 1rem;\n }\n"])), colors.grey1); var TermsSection = styled_components_browser_esm/* default.div */.ZP.div(_templateObject15 || (_templateObject15 = (0,taggedTemplateLiteral/* default */.Z)(["\n width: auto;\n margin-top: 20px;\n p {\n color: ", ";\n font-size: .8125rem;\n line-height: 1.25rem;\n }\n a {\n color: ", "\n }\n"])), colors.grey2, colors.orange); var InputContainer = styled_components_browser_esm/* default.div */.ZP.div(_templateObject16 || (_templateObject16 = (0,taggedTemplateLiteral/* default */.Z)(["\n position: relative;\n margin-bottom: 25px;\n\n .intl-tel-input {\n width: 100%;\n }\n\n &.activeContainer {\n z-index: 999;\n }\n\n input[type='tel'], .flatpickr-input {\n ", "\n font-size: ", ";\n line-height: 0;\n min-height: ", ";\n padding: 15px;\n width: 100%;\n\n &:hover,\n &:focus {\n ", "\n }\n\n &:focus,\n &:hover,\n &.isSet,\n &.valid {\n padding-bottom: 6px;\n padding-top: 24px;\n\n & + .placeholderText {\n ", "\n font-size: 12px;\n top: 16px;\n }\n }\n\n @media screen and (max-width:", "px) {\n padding-bottom: 6px;\n padding-top: 24px;\n\n & + .placeholderText {\n ", "\n font-size: 12px;\n top: 16px;\n }\n }\n }\n"])), defaultInputValues, form_theme.field.font.size, form_theme.field.minHeight, setBrowserCompatibility('box-shadow', '0 0 4px rgba(0, 0, 0, .15)'), animationDefault, breakpoints.phone, animationDefault); var FlatPickerContainer = (0,styled_components_browser_esm/* default */.ZP)(InputContainer)(_templateObject17 || (_templateObject17 = (0,taggedTemplateLiteral/* default */.Z)(["\n text-align: center;\n ", ";\n &:before {\n font-size: 1.75rem;\n position: absolute;\n right: 10px;\n top: 15px;\n z-index: 5;\n }\n\n input {\n box-shadow: none; /* Needed for FireFox fix. weird interaction*/\n }\n\n label {\n &.valid,\n &.inValid {\n &:after {\n right: 45px;\n }\n }\n\n &.inValid {\n + * {\n &:after {\n right: 45px;\n }\n }\n }\n }\n"])), setIcoMoonIcon('\\e617', colors.darkOrange, 'before')); // Styled var InputArrow = styled_components_browser_esm/* default.div */.ZP.div(_templateObject18 || (_templateObject18 = (0,taggedTemplateLiteral/* default */.Z)(["\n color: ", ";\n pointer-events: none;\n position: absolute;\n right: 15px;\n z-index: 2;\n\n ", "\n"])), colors.orange, setIcoMoonIcon('\\e61a', colors.orange, 'before')); var InputSelect = (0,styled_components_browser_esm/* default */.ZP)(InputContainer)(_templateObject19 || (_templateObject19 = (0,taggedTemplateLiteral/* default */.Z)(["\n width: auto;\n\n select {\n ", "\n ", "\n color: ", ";\n font-size: ", ";\n height: 50px;\n line-height: 1.25rem;\n padding: 10px 15px;\n width: 100%;\n\n option {\n font-size: ", ";\n }\n\n & + .arr {\n top: 16px;\n }\n\n &.inValid,\n &.valid,\n &:hover,\n &:focus {\n cursor: pointer;\n ", "\n\n & + .arr {\n &:before {\n color: ", ";\n }\n }\n }\n\n & + .arr + .placeholderText {\n font-size: 12px;\n top: 0px;\n }\n }\n select::-ms-expand {\n display: none;\n }\n"])), defaultInputValues, setBrowserCompatibility('appearance', 'none'), colors.black, form_theme.field.font.size, form_theme.field.font.size, setBrowserCompatibility('box-shadow', '0 0 4px rgba(0, 0, 0, .15)'), colors.orangeHover); var InputMultiSelect = styled_components_browser_esm/* default.div */.ZP.div(_templateObject20 || (_templateObject20 = (0,taggedTemplateLiteral/* default */.Z)(["\n label {\n line-height: 1.25rem;\n margin-left: -12px;\n margin-top: 20px;\n position: relative;\n overflow: auto;\n\n &.valid {\n &::after {\n top: 0;\n right: 0;\n }\n\n &.select-placeholder:after\n right: 0;\n top: 0;\n }\n }\n }\n\n div {\n border: 1px solid #DDD;\n height: 100%;\n margin-bottom: 25px;\n width: 100%;\n ", ";\n appearance: none;\n -webkit-appearance: none;\n -moz-webkit-appearance: none;\n\n > button {\n background: transparent;\n border: none;\n border-radius: 0;\n color: ", ";\n font-size: .9rem;\n padding: 8px;\n appearance: none;\n box-shadow: none;\n -webkit-appearance: none;\n width: 100%;\n\n &:hover {\n color: #FFF;\n cursor: pointer;\n background-color: ", ";\n }\n\n &.not-selected {\n && {\n background: transparent;\n }\n }\n &.selected {\n color: ", ";\n background-color: ", ";\n opacity: .5;\n filter: alpha(opacity=50);\n -khtml-opacity: 0.5;\n -moz-opacity: .5;\n }\n }\n }\n\n div {\n & + p {\n margin-bottom: 25px;\n &:not(.select-error-alert) {\n color: ", ";\n font-size: .9rem;\n }\n\n .removeSelection {\n padding: 5px;\n margin-left: 8px;\n\n &:hover {\n cursor: pointer;\n }\n }\n }\n & + .select-error-alert {\n margin-top: -22px;\n margin-bottom: 30px;\n &:after {\n top: 0;\n right: 15px;\n }\n }\n }\n"])), function (props) { return props.minheight && "min-height: ".concat(props.minheight, "px;"); }, colors.grey2, colors.orangeHover, colors.white, colors.orange, colors.grey2); var PlaceHolderText = styled_components_browser_esm/* default.label */.ZP.label(_templateObject21 || (_templateObject21 = (0,taggedTemplateLiteral/* default */.Z)(["\n display: inline-block;\n font-size: ", ";\n left: 0;\n padding: 15px;\n line-height: 0; /* Set to 0 so all hover state is on field and never touches overlaid element */\n position: absolute;\n text-align: left;\n transform: translateY(-50%);\n top: ", ";\n width: 100%;\n pointer-events: none;\n z-index: ", ";\n ", "\n span {\n color: ", ";\n width: max-content;\n background-color: ", ";\n padding: 0 2px;\n }\n &.inValid {\n // account for height of the added error message\n top: ", "\n ", "\n }\n\n &.phone {\n padding-left: 52px;\n }\n\n &.valid {\n ", "\n &:after {\n position: absolute;\n right: 15px;\n top: 50px;\n }\n\n &.select-placeholder {\n &:after {\n right: 45px;\n }\n }\n }\n"])), form_theme.field.font.size, function (props) { return props.positionTop ? '23px' : '50%'; }, function (props) { return props.hasPickList ? '10' : '2'; }, animationDefault, colors.grey1, colors.white, function (props) { return props.positionTop ? '14px' : '40%'; }, function (props) { if (props.errorState && props.emailOnly) return 'margin-top: 10px;'; }, setIcoMoonIcon('\\e601', colors.validGreen, 'after')); var TextInput = styled_components_browser_esm/* default.input */.ZP.input(_templateObject22 || (_templateObject22 = (0,taggedTemplateLiteral/* default */.Z)(["\n ", "\n ", "\n ", ";\n"])), defaultInputValues, textInput, function (props) { return props.disabled ? 'opacity: .5' : ''; }); var HiddenInput = styled_components_browser_esm/* default.input */.ZP.input(_templateObject23 || (_templateObject23 = (0,taggedTemplateLiteral/* default */.Z)(["\n display: none;\n visibility: hidden;\n height: 1px;\n width: 1px;\n"]))); var CheckboxContainer = styled_components_browser_esm/* default.div */.ZP.div(_templateObject24 || (_templateObject24 = (0,taggedTemplateLiteral/* default */.Z)(["\n label {\n * {\n color: ", ";\n font-size: .9375rem;\n }\n\n align-content: flex-start;\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n padding-bottom: 20px;\n width: auto;\n\n input {\n border-radius: 0px;\n border: .5px solid #DDD;\n min-width: .75rem;\n min-height: .75rem;\n\n margin-left: 2px;\n margin-top: 2px;\n min-height: auto;\n width: initial;\n\n &:hover,\n &:focus {\n ", "\n }\n }\n\n > * {\n margin-right: 8px;\n }\n > *:first-child {\n width: auto;\n }\n }\n\n a {\n color: ", ";\n\n &:hover,\n &:visited {\n color: ", ";\n }\n }\n"])), colors.grey2, setBrowserCompatibility('box-shadow', '0 0 4px rgba(0, 0, 0, .15)'), colors.orange, colors.orange); var RadioContainer = styled_components_browser_esm/* default.div */.ZP.div(_templateObject25 || (_templateObject25 = (0,taggedTemplateLiteral/* default */.Z)(["\n label {\n * {\n color: ", ";\n font-size: ", ";\n }\n\n align-content: flex-start;\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n padding-bottom: ", "px;\n width: auto;\n\n input {\n border-radius: 0px;\n border: .5px solid #DDD;\n min-width: .75rem;\n min-height: .75rem;\n\n margin-left: 2px;\n margin-top: 4px;\n min-height: auto;\n width: initial;\n\n &:hover,\n &:focus {\n ", "\n }\n }\n\n > * {\n margin-right: 8px;\n }\n > *:first-child {\n width: auto;\n }\n }\n\n ", "\n\n a {\n color: ", ";\n\n &:hover,\n &:visited {\n color: ", ";\n }\n }\n"])), colors.black, form_theme.field.font.size, function (props) { return props.hasDescription ? '8' : '20'; }, setBrowserCompatibility('box-shadow', '0 0 4px rgba(0, 0, 0, .15)'), function (props) { return props.hasDescription && ".desc-p {\n color: ".concat(colors.grey1, ";\n font-size: 1rem;\n\n &:last-of-type {\n padding-bottom: 20px;\n }\n }"); }, colors.orange, colors.orange); var IntlTextInputContainer = styled_components_browser_esm/* default.div */.ZP.div(_templateObject26 || (_templateObject26 = (0,taggedTemplateLiteral/* default */.Z)(["\n margin-bottom: 25px;\n z-index: 10; /* Force continer above all other containers */\n &:hover,\n &:focus {\n z-index: 10;\n }\n\n && {\n .form-control {\n padding: 0;\n }\n }\n\n > div {\n width: 100%;\n }\n\n .flag-container, .flag-dropdown {\n margin-right: 0;\n min-height: ", ";\n z-index: 15;\n\n .country-list {\n margin-top: 3px;\n }\n }\n\n\n input[type='tel'] {\n ", "\n ", "\n }\n\n .placeholderText {\n line-height: 0;\n }\n\n &:focus,\n &:hover,\n &.isSet,\n &.valid {\n input[type='tel'] {\n padding-bottom: 6px;\n padding-top: 24px;\n }\n\n .placeholderText {\n ", "\n }\n }\n\n &.inValid {\n input[type='tel'] {\n border-color: ", ";\n }\n }\n\n .intl-phone-placeholder {\n z-index: 5;\n }\n\n .react-tel-input {\n z-index: 5;\n min-height: fit-content;\n height: auto;\n\n input[type=text],\n input[type=tel] {\n ", "\n border: 1px solid ", ";\n border-radius: 3px;\n padding: 15px 15px 15px 48px;\n\n &.invalid-number { /* Over write package CSS */\n border: 1px solid ", ";\n background-color: inherit;\n &:hover, &:focus {\n border: 1px solid ", ";\n background-color: inherit;\n }\n }\n }\n .flag-dropdown {\n border: 1px solid ", ";\n }\n\n &.inValid {\n input[type='tel'],\n .flag-dropdown {\n border-color: ", ";\n }\n }\n\n &.valid {\n input[type='tel'],\n .flag-dropdown {\n border-color: ", ";\n }\n }\n }\n"])), form_theme.field.minHeight, defaultInputValues, textInput, placeHolderSecondary, colors.errorRed, textInput, form_theme.field.border.color, form_theme.field.border.color, form_theme.field.border.color, form_theme.field.border.color, colors.errorRed, colors.green); var TextArea = styled_components_browser_esm/* default.textarea */.ZP.textarea(_templateObject27 || (_templateObject27 = (0,taggedTemplateLiteral/* default */.Z)(["\n ", "\n font-size: 1rem;\n min-height: 80px;\n padding: 15px;\n resize: vertical;\n width: 100%;\n\n &:hover,\n &:focus {\n ", "\n }\n\n &:focus,\n &:hover,\n &.isSet,\n &.valid {\n padding-bottom: 8px;\n padding-top: 25px;\n\n & + .placeholderText {\n ", "\n font-size: 12px;\n top: 0px;\n }\n }\n"])), defaultInputValues, setBrowserCompatibility('box-shadow', '0 0 4px rgba(0, 0, 0, .15)'), animationDefault); var SubmitButton = (0,styled_components_browser_esm/* default */.ZP)(TextInput)(_templateObject28 || (_templateObject28 = (0,taggedTemplateLiteral/* default */.Z)(["\n font-size: ", ";\n line-height: 25px;\n padding: 10px 12px;\n text-align: center;\n width: 100%;\n"])), form_theme.font.size); var SubmitButtonContainer = styled_components_browser_esm/* default.div */.ZP.div(_templateObject29 || (_templateObject29 = (0,taggedTemplateLiteral/* default */.Z)(["\n clear: both;\n display: flex;\n flex-direction: row;\n position: relative;\n width: 100%;\n ", "\n"])), function (props) { return props.position && "\n ".concat(props.position === 'left' ? 'justify-content: flex-start;' : '', "\n ").concat(props.position === 'right' ? 'justify-content: flex-end;' : '', "\n ").concat(props.position === 'center' ? 'justify-content: center;' : '', "\n button {\n width: auto;\n }\n "); }); var SubmissionErrorContainer = styled_components_browser_esm/* default.div */.ZP.div(_templateObject30 || (_templateObject30 = (0,taggedTemplateLiteral/* default */.Z)(["\n margin-bottom: 20px;\n ", "\n text-align: center;\n p {\n color: ", ";\n text-align: center;\n }\n"])), function (props) { return props.isInline && 'margin-top: -15px;'; }, colors.red); var Title = styled_components_browser_esm/* default.span */.ZP.span(_templateObject31 || (_templateObject31 = (0,taggedTemplateLiteral/* default */.Z)(["\n ", "\n"])), defaultFormTitle); var SectionTitle = styled_components_browser_esm/* default.h3 */.ZP.h3(_templateObject32 || (_templateObject32 = (0,taggedTemplateLiteral/* default */.Z)(["\n ", "\n"])), sectionFormTitle); var Fieldset = styled_components_browser_esm/* default.div */.ZP.div(_templateObject33 || (_templateObject33 = (0,taggedTemplateLiteral/* default */.Z)(["\n border: none;\n > .title {\n margin-bottom: 20px;\n font-size: 1.25rem;\n font-weight: 500;\n }\n > .desc {\n margin-bottom: 1em;\n }\n > .required {\n float: left;\n margin-right: 8px;\n }\n .desc-bold {\n font-weight: 600;\n }\n"]))); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js var assertThisInitialized = __webpack_require__(3349); ;// CONCATENATED MODULE: ./src/components/system-error-message.jsx var SystemErrorMessage = function SystemErrorMessage(_ref) { var isLanguage = _ref.isLanguage; var messege = 'Something went wrong. Why not call our sales team directly?'; messege = getLocaleStringText(messege, 'error', isLanguage); return /*#__PURE__*/react.createElement("p", { id: "avaform-error-msg", className: "avaform-error" }, messege, " ", (isLanguage === 'en' || isLanguage === 'us') && /*#__PURE__*/react.createElement("a", { href: "tel:877-759-6520" }, "877-759-6520")); }; /* harmony default export */ const system_error_message = (SystemErrorMessage); ;// CONCATENATED MODULE: ./src/containers/error-boundary.jsx function error_boundary_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function error_boundary_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? error_boundary_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : error_boundary_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Types // Helpers // Component var ErrorBoundary = /*#__PURE__*/function (_Component) { (0,inherits/* default */.Z)(ErrorBoundary, _Component); var _super = _createSuper(ErrorBoundary); function ErrorBoundary() { var _this; (0,classCallCheck/* default */.Z)(this, ErrorBoundary); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); (0,defineProperty/* default */.Z)((0,assertThisInitialized/* default */.Z)(_this), "state", { hasError: false }); return _this; } (0,createClass/* default */.Z)(ErrorBoundary, [{ key: "componentDidCatch", value: function componentDidCatch(error, info) { this.setState({ hasError: true }); receiveSystemError(error_boundary_objectSpread(error_boundary_objectSpread({}, info), error), 500); } }, { key: "render", value: function render() { var isLanguage = this.props.isLanguage; if (this.state.hasError) { return /*#__PURE__*/react.createElement(system_error_message, { isLanguage: isLanguage }); } return this.props.children; } }]); return ErrorBoundary; }(react.Component); /* harmony default export */ const error_boundary = (ErrorBoundary); ;// CONCATENATED MODULE: ./src/styled/components/loader.js var loader_templateObject, loader_templateObject2, loader_templateObject3; var Loader = styled_components_browser_esm/* default.div */.ZP.div(loader_templateObject || (loader_templateObject = (0,taggedTemplateLiteral/* default */.Z)(["\n background: ", ";\n display: block;\n height: 100%;\n min-height: 100%;\n left: 1px;\n opacity: .85;\n position: absolute;\n top: -5px;\n width: 100%;\n z-index: 100;\n"])), function (props) { return props.showLoader ? '#FFF' : 'transparent'; }); var LoadingContainer = styled_components_browser_esm/* default.div */.ZP.div(loader_templateObject2 || (loader_templateObject2 = (0,taggedTemplateLiteral/* default */.Z)(["\n position: absolute;\n top: ", ";\n left: 45%;\n text-align: center;\n transform: translate(-50%, -50%);\n z-index: 101;\n"])), function (props) { return props.loaderSize === 'small' ? '10%' : '45%'; }); var Spinner = styled_components_browser_esm/* default.div */.ZP.div(loader_templateObject3 || (loader_templateObject3 = (0,taggedTemplateLiteral/* default */.Z)(["\n .lds-ring {\n display: block;\n position: absolute;\n height: 100%\n width: 100%;\n z-index: 101;\n\n div {\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n ", ";\n ", ";\n ", ";\n border-color: #F60 transparent transparent transparent;\n border-radius: 50%;\n box-sizing: border-box;\n display: block;\n height: ", "px;\n margin: 8px;\n position: absolute;\n width: ", "px;\n\n &:nth-child(1) {\n animation-delay: -0.45s;\n }\n &:nth-child(2) {\n animation-delay: -0.3s;\n }\n &:nth-child(3) {\n animation-delay: -0.15s;\n }\n }\n\n @keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n }\n"])), function (props) { return props.loaderSize === 'small' && 'border: 2px solid #F60;'; }, function (props) { return props.loaderSize === 'lg' && 'border: 8px solid #F60;'; }, function (props) { return !props.loaderSize && 'border: 8px solid #F60;'; }, function (props) { return props.size || '101'; }, function (props) { return props.size || '101'; }); /* harmony default export */ const loader = ((/* unused pure expression or super */ null && (Loader))); ;// CONCATENATED MODULE: ./src/components/spinner.jsx var SpiningContainer = function SpiningContainer(_ref) { var loaderSize = _ref.loaderSize; var isSize = loaderSize === 'small' ? '25' : '101'; return /*#__PURE__*/react.createElement(LoadingContainer, { loaderSize: loaderSize, size: isSize }, /*#__PURE__*/react.createElement(Spinner, { loaderSize: loaderSize, size: isSize }, /*#__PURE__*/react.createElement("div", { className: "lds-ring" }, /*#__PURE__*/react.createElement("div", null), /*#__PURE__*/react.createElement("div", null), /*#__PURE__*/react.createElement("div", null)))); }; /* harmony default export */ const spinner = (SpiningContainer); ;// CONCATENATED MODULE: ./src/components/loader.jsx // Stateless components should not contain any mapping. It should all be passed. // Condintions should be kept to a minimum. var Loading = function Loading(_ref) { var loaderPosition = _ref.loaderPosition, location = _ref.location, showLoader = _ref.showLoader; var loaderSize = location && location === 'submit' ? 'small' : 'lg'; return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(Loader, { showLoader: showLoader }), showLoader && loaderPosition === 'overlay' && /*#__PURE__*/react.createElement(spinner, { loaderSize: loaderSize })); }; /* harmony default export */ const components_loader = (Loading); ;// CONCATENATED MODULE: ./src/components/form-header.jsx // Types // Styles var FormHeaderComponent = function FormHeaderComponent(activeData) { var description = activeData.description, title = activeData.title; if (!title && !description) { return null; } return /*#__PURE__*/react.createElement(FormHeader, null, title && /*#__PURE__*/react.createElement(Title, null, title), description && /*#__PURE__*/react.createElement(Desc, null, description)); }; /* harmony default export */ const form_header = (FormHeaderComponent); ;// CONCATENATED MODULE: ./src/containers/form-header.jsx function form_header_createSuper(Derived) { var hasNativeReflectConstruct = form_header_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function form_header_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Import Types // Components // Helpers // Styles var FormContainer = /*#__PURE__*/function (_Component) { (0,inherits/* default */.Z)(FormContainer, _Component); var _super = form_header_createSuper(FormContainer); function FormContainer() { (0,classCallCheck/* default */.Z)(this, FormContainer); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(FormContainer, [{ key: "render", value: function render() { var _this$props = this.props, activeConfigs = _this$props.activeConfigs, activeData = _this$props.activeData, submissionlimit = _this$props.submissionlimit, isDisabled = _this$props.isDisabled; var description = activeData.description, title = activeData.title; return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(form_header, { title: title, description: description }), (submissionlimit || isDisabled && isDisabled === 'disabled') && /*#__PURE__*/react.createElement(LimitErrorContainer, null, activeConfigs && activeConfigs.submissionLimitDisabledMessage ? activeConfigs.submissionLimitDisabledMessage : /*#__PURE__*/react.createElement("p", null, "We appologies for the confusion but we are no longer accepting submissions for this form."))); } }]); return FormContainer; }(react.Component); var mapStateToProps = function mapStateToProps(state, ownProps) { var submissionlimit = state.forms.submissionlimit && state.forms.submissionlimit[ownProps.formId] ? state.forms.submissionlimit[ownProps.formId] : false; var activeData = state.forms.activeForms[ownProps.formId]; var _ref = activeData || { configs: {} }, configs = _ref.configs; return { activeData: state.forms.activeForms[ownProps.formId], activeConfigs: state.forms.activeForms[ownProps.formId] ? state.forms.activeForms[ownProps.formId].configs : null, submissionlimit: submissionlimit, isDisabled: isFieldDisabled(submissionlimit, configs) }; }; /* harmony default export */ const containers_form_header = ((0,es/* connect */.$j)(mapStateToProps)(FormContainer)); ;// CONCATENATED MODULE: ./src/components/form-load-error.jsx // Helpers var FormLoadError = function FormLoadError(_ref) { var initStatus = _ref.initStatus, formId = _ref.formId, isLanguage = _ref.isLanguage; logger_api({ level: 'error', msgType: 'FormLoadError', formId: formId, data: { message: 'Form failed to load', error: JSON.stringify(initStatus) } }); var message = 'Something went wrong. Why not call our sales team directly?'; message = getLocaleStringText(message, 'error', isLanguage); return /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement("p", null, message, " ", /*#__PURE__*/react.createElement("a", { href: "tel:877-759-6520" }, "877-759-6520"))); }; /* harmony default export */ const form_load_error = (FormLoadError); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js var esm_extends = __webpack_require__(2122); ;// CONCATENATED MODULE: ./src/styled/components/terms-of-services.js var terms_of_services_templateObject; var TermsOfServiceLinkContainer = styled_components_browser_esm/* default.span */.ZP.span(terms_of_services_templateObject || (terms_of_services_templateObject = (0,taggedTemplateLiteral/* default */.Z)(["\n > * {\n border-right: 1px solid ", "\n margin-right: 3px;\n padding-left: 3px;\n padding-right: 6px;\n &:last-of-type {\n border-right: none;\n padding-right: 0;\n }\n }\n\n a {\n display: inline-block;\n color: ", ";\n &:focus,\n &:hover,\n &:visited {\n color: ", ";\n }\n }\n"])), colors.grey2, colors.orange, colors.orange); /* harmony default export */ const terms_of_services = ((/* unused pure expression or super */ null && (TermsOfServiceLinkContainer))); ;// CONCATENATED MODULE: ./src/components/fields/terms-of-service-links.jsx // Styles // Types var TermsOfServiceLinks = function TermsOfServiceLinks(_ref) { var links = _ref.links; if (!links || links && links.length < 1) return null; var linkBuild = ''; for (var i = 0; i < links.length; i++) { linkBuild += "").concat(links[i].text, ""); } return /*#__PURE__*/react.createElement(TermsOfServiceLinkContainer, { dangerouslySetInnerHTML: { __html: linkBuild } }); }; /* harmony default export */ const terms_of_service_links = (TermsOfServiceLinks); ;// CONCATENATED MODULE: ./src/components/fields/checkbox.jsx // Components // Helpers // Types var CheckBoxComponent = function CheckBoxComponent(_ref) { var activeField = _ref.activeField, displayText = _ref.displayText, errorState = _ref.errorState, formId = _ref.formId, hasBeenValidated = _ref.hasBeenValidated, links = _ref.links, handleChange = _ref.handleChange, isDisabled = _ref.isDisabled, isRequired = _ref.isRequired, id = _ref.id, isChecked = _ref.isChecked, isSet = _ref.isSet, name = _ref.name, onSetActiveField = _ref.onSetActiveField; return /*#__PURE__*/react.createElement(CheckboxContainer, { className: "".concat(setActiveContainer(activeField, id)) }, /*#__PURE__*/react.createElement("label", null, /*#__PURE__*/react.createElement("input", { className: "".concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated)), disabled: isDisabled, id: id, name: setFieldName(name, id), onChange: function onChange(e) { return handleChange(e.target); }, onFocus: function onFocus(e) { return onSetActiveField(formId, e.target.id); }, type: "checkbox", checked: isChecked ? 'checked' : '' }), /*#__PURE__*/react.createElement("span", null, isRequired && '*', " ", displayText, " ", links && /*#__PURE__*/react.createElement(terms_of_service_links, { links: links }))), errorState && /*#__PURE__*/react.createElement(ErrorMessage, { className: "error-alert-container", "aria-live": "assertive", alert: "true", isCheckbox: true }, errorState.message)); }; /* harmony default export */ const fields_checkbox = (CheckBoxComponent); ;// CONCATENATED MODULE: ./src/containers/fields/checkbox.jsx function checkbox_createSuper(Derived) { var hasNativeReflectConstruct = checkbox_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function checkbox_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Actions // Components // Helpers // Types var Checkbox = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(Checkbox, _React$Component); var _super = checkbox_createSuper(Checkbox); function Checkbox() { var _this; (0,classCallCheck/* default */.Z)(this, Checkbox); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); (0,defineProperty/* default */.Z)((0,assertThisInitialized/* default */.Z)(_this), "handleChange", function (target) { var _this$props = _this.props, customValidation = _this$props.customValidation, dynamicFields = _this$props.dynamicFields, formId = _this$props.formId, hasDynamicField = _this$props.hasDynamicField, id = _this$props.id, isRequired = _this$props.isRequired, requiredFields = _this$props.requiredFields; var value = _this.props.fieldObject && _this.props.fieldObject.value ? _this.props.fieldObject.value : '1'; var checked = target.checked; var newValue = checked ? value : ''; _this.props.onCaptureInput(formId, hasDynamicField, { id: id, type: 'checkbox', value: newValue, checked: checked }, dynamicFields); if (isRequired) { _this.props.onValidateField(customValidation, formId, isRequired, requiredFields, { id: id, type: 'checkbox', value: newValue, checked: checked }); } }); return _this; } (0,createClass/* default */.Z)(Checkbox, [{ key: "render", value: function render() { var _this$props2 = this.props, activeField = _this$props2.activeField, customValidation = _this$props2.customValidation, errorState = _this$props2.errorState, fields = _this$props2.fields, fieldData = _this$props2.fieldData, fieldObject = _this$props2.fieldObject, formId = _this$props2.formId, hasBeenValidated = _this$props2.hasBeenValidated, id = _this$props2.id, isDisabled = _this$props2.isDisabled, isChecked = _this$props2.isChecked, isSet = _this$props2.isSet, name = _this$props2.name, onSetActiveField = _this$props2.onSetActiveField, requiredFields = _this$props2.requiredFields; var isRequired = fieldObject.required || false; return /*#__PURE__*/react.createElement(fields_checkbox, (0,esm_extends/* default */.Z)({}, fieldObject, { activeField: activeField, customValidation: customValidation, errorState: errorState, fields: fields, fieldData: fieldData, formId: formId, hasBeenValidated: hasBeenValidated, isDisabled: isDisabled, isRequired: isRequired, id: id, isChecked: isChecked, isSet: isSet, name: name, onSetActiveField: onSetActiveField, handleChange: this.handleChange, requiredFields: requiredFields })); } }]); return Checkbox; }(react.Component); var mapDispatchToProps = function mapDispatchToProps(dispatch) { return { onSetActiveField: function onSetActiveField(formId, id) { dispatch(setActiveField(formId, id)); }, onCaptureInput: function onCaptureInput(formId, hasDynamicField, inputTarget, dynamicFields) { dispatch(captureInput(dispatch, formId, inputTarget)); if (hasDynamicField) { captureDynamicsRequiredFields(dispatch, formId, inputTarget, dynamicFields); } }, onValidateField: function onValidateField(customValidation, formId, isRequired, requiredFields, target) { return validateField(dispatch, customValidation, formId, isRequired, requiredFields, target); } }; }; var checkbox_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId, id = ownProps.id; return { activeField: state.forms.activeFields[formId], containsGdprContainer: containsGdprField(id, state.forms.gdprField[formId]), errorState: checkIfHasError(id, state.forms.hasError[formId]), dynamicFields: state.forms.activeForms[formId] && state.forms.activeForms[formId].dynamicFields && state.forms.activeForms[formId].dynamicFields[ownProps.id] ? state.forms.activeForms[formId].dynamicFields[ownProps.id] : {}, fields: state.forms.captureFields[formId], fieldData: state.forms.activeForms, isChecked: Boolean(state.forms.captureFields && state.forms.captureFields[formId] && state.forms.captureFields[formId].filter(function (f) { return f.id === id; })[0]), isRequired: state.forms.requiredFields[formId] ? state.forms.requiredFields[formId].includes(id) : false, isSet: checkIfFieldIsSet(state.forms.captureFields[formId], id), requiredFields: state.forms.requiredFields[formId] }; }; /* harmony default export */ const containers_fields_checkbox = ((0,es/* connect */.$j)(checkbox_mapStateToProps, mapDispatchToProps)(Checkbox)); ;// CONCATENATED MODULE: ./src/components/fields/radio.jsx // Helpers // Types var RadioComponent = function RadioComponent(_ref) { var activeField = _ref.activeField, description = _ref.description, displayText = _ref.displayText, displayTextClass = _ref.displayTextClass, errorState = _ref.errorState, formId = _ref.formId, handleChange = _ref.handleChange, hasBeenValidated = _ref.hasBeenValidated, hasDynamicField = _ref.hasDynamicField, isRequired = _ref.isRequired, id = _ref.id, isChecked = _ref.isChecked, isDisabled = _ref.isDisabled, isInFieldSet = _ref.isInFieldSet, isSet = _ref.isSet, name = _ref.name, type = _ref.type, value = _ref.value, onSetActiveField = _ref.onSetActiveField; return /*#__PURE__*/react.createElement(RadioContainer, { className: "".concat(setActiveContainer(activeField, id)), hasDescription: description && description.length > 0 }, /*#__PURE__*/react.createElement("label", null, /*#__PURE__*/react.createElement("input", { className: "".concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated)), disabled: isDisabled, id: id, name: setFieldName(name, id), onChange: function onChange() { return handleChange({ id: id, value: value, type: 'radio' }, hasDynamicField); }, onFocus: function onFocus(e) { return onSetActiveField(formId, e.target.id); }, type: type || 'radio', checked: isChecked ? 'checked' : '', value: value }), /*#__PURE__*/react.createElement("span", { className: "".concat(displayTextClass ? displayTextClass.join(' ') : '') }, isRequired && !isInFieldSet && '*', " ", displayText)), description && Array.isArray(description) ? description.map(function (d, i) { return /*#__PURE__*/react.createElement("p", { key: i, className: "desc-p" }, d, " "); }) : /*#__PURE__*/react.createElement("p", { className: "desc-p" }, description, " ")); }; /* harmony default export */ const fields_radio = ((/* unused pure expression or super */ null && (RadioComponent))); ;// CONCATENATED MODULE: ./src/containers/fields/radio.jsx function radio_createSuper(Derived) { var hasNativeReflectConstruct = radio_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function radio_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Actions // Components // Helpers // Types var Radio = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(Radio, _React$Component); var _super = radio_createSuper(Radio); function Radio() { var _this; (0,classCallCheck/* default */.Z)(this, Radio); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); (0,defineProperty/* default */.Z)((0,assertThisInitialized/* default */.Z)(_this), "handleChange", function (target, hasDynamicField) { var _this$props = _this.props, dynamicFields = _this$props.dynamicFields, formId = _this$props.formId, id = _this$props.id, isRequired = _this$props.isRequired, requiredFields = _this$props.requiredFields; var value = _this.props.fieldObject.value || target.value || ''; var checked = target.checked; _this.props.onCaptureInput(formId, { id: id, type: 'radio', value: value, checked: checked }, hasDynamicField, dynamicFields); if (isRequired) { _this.props.onValidateField(null, formId, isRequired, requiredFields, { id: id, type: 'radio', value: value }); } }); return _this; } (0,createClass/* default */.Z)(Radio, [{ key: "render", value: function render() { var _this$props2 = this.props, activeField = _this$props2.activeField, dynamicFields = _this$props2.dynamicFields, errorState = _this$props2.errorState, fields = _this$props2.fields, fieldData = _this$props2.fieldData, fieldObject = _this$props2.fieldObject, formId = _this$props2.formId, hasBeenValidated = _this$props2.hasBeenValidated, hasDynamicField = _this$props2.hasDynamicField, isRequired = _this$props2.isRequired, id = _this$props2.id, isDisabled = _this$props2.isDisabled, isChecked = _this$props2.isChecked, isInFieldSet = _this$props2.isInFieldSet, isSet = _this$props2.isSet, name = _this$props2.name, onSetActiveField = _this$props2.onSetActiveField, requiredFields = _this$props2.requiredFields; var value = fieldObject.value; // $FlowFixMe: Ingore error. Flow isn't seeing the spread object as init values being set return /*#__PURE__*/react.createElement(RadioComponent, (0,esm_extends/* default */.Z)({}, fieldObject, { activeField: activeField, errorState: errorState, fields: fields, fieldData: fieldData, formId: formId, hasBeenValidated: hasBeenValidated, hasDynamicField: hasDynamicField, dynamicFields: dynamicFields, isRequired: isRequired, id: id, isDisabled: isDisabled, isChecked: isChecked, isInFieldSet: isInFieldSet || true, isSet: isSet, name: name, onSetActiveField: onSetActiveField, handleChange: this.handleChange, requiredFields: requiredFields, value: value || null })); } }]); return Radio; }(react.Component); var radio_mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { return { onSetActiveField: function onSetActiveField(formId, id) { dispatch(setActiveField(formId, id)); }, onCaptureInput: function onCaptureInput(formId, target) { var hasDynamicField = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var dynamicFields = arguments.length > 3 ? arguments[3] : undefined; if (ownProps.capturedValue === target.value) return; dispatch(captureInput(dispatch, formId, target)); if (hasDynamicField) { captureDynamicsRequiredFields(dispatch, formId, target, dynamicFields); } }, onValidateField: function onValidateField(customValidation, formId, isRequired, requiredFields, target) { return validateField(dispatch, customValidation, formId, isRequired, requiredFields, target); } }; }; var radio_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId, id = ownProps.id, fieldObject = ownProps.fieldObject; var value = fieldObject.value; var isSetValue = state.forms.captureFields && state.forms.captureFields[formId] && state.forms.captureFields[formId].filter(function (f) { return f.id === id; })[0] ? state.forms.captureFields[formId].filter(function (f) { return f.id === id; })[0] : null; var isChecked = false; if (isSetValue) { isChecked = Boolean(state.forms.captureFields && state.forms.captureFields[formId] && state.forms.captureFields[formId].filter(function (f) { return f.id === id; })[0] && state.forms.captureFields[formId].filter(function (f) { return f.id === id; })[0].value === value); } return { activeField: state.forms.activeFields[formId], dynamicFields: state.forms.activeForms[formId] && state.forms.activeForms[formId].dynamicFields && state.forms.activeForms[formId].dynamicFields[ownProps.parentId] ? state.forms.activeForms[formId].dynamicFields[ownProps.parentId] : {}, containsGdprContainer: containsGdprField(id, state.forms.gdprField[formId]), errorState: checkIfHasError(id, state.forms.hasError[formId]), fields: state.forms.captureFields[formId], fieldData: state.forms.activeForms, isChecked: isChecked, isRequired: state.forms.requiredFields[formId] ? state.forms.requiredFields[formId].includes(id) : false, isSet: checkIfFieldIsSet(state.forms.captureFields[formId], id), requiredFields: state.forms.requiredFields[formId] }; }; /* harmony default export */ const containers_fields_radio = ((0,es/* connect */.$j)(radio_mapStateToProps, radio_mapDispatchToProps)(Radio)); // EXTERNAL MODULE: ./node_modules/react-flatpickr/build/index.js var build = __webpack_require__(5953); ;// CONCATENATED MODULE: ./src/components/fields/gdpr-eligible.jsx // Helpers // Styles // Types var GdprFieldComponent = function GdprFieldComponent(_ref) { var errorState = _ref.errorState, formId = _ref.formId, gdprCountrySelected = _ref.gdprCountrySelected, isDisabled = _ref.isDisabled, isGdprEligable = _ref.isGdprEligable, optinEligible = _ref.optinEligible, locale = _ref.locale, onCaptureInput = _ref.onCaptureInput, optinValue = _ref.optinValue, setValue = _ref.setValue; (0,react.useEffect)(function () { if (!gdprCountrySelected && setValue) { onCaptureInput(formId, { id: 'gdprConsentDate', type: 'checkbox', value: '', checked: '' }); } return function () { if (!gdprCountrySelected && setValue) { onCaptureInput(formId, { id: 'gdprConsentDate', type: 'checkbox', value: '', checked: '' }); } }; }, [gdprCountrySelected]); var isChecked = optinValue === 'on' ? 'checked' : ''; if (isGdprEligable || gdprCountrySelected || optinEligible) { return /*#__PURE__*/react.createElement(GdprField, null, errorState && errorState.message && /*#__PURE__*/react.createElement(ErrorMessage, { isGdpr: true, className: "error-message", "aria-live": "assertive", alert: "true" }, errorState.message), /*#__PURE__*/react.createElement("label", null, /*#__PURE__*/react.createElement("input", { type: "checkbox", disabled: isDisabled, id: "gdprConsentDate", name: "gdpr-eligable", onChange: function onChange(e) { onCaptureInput(formId, e.target); // Capture value }, checked: isChecked, value: setValue }), " ", /*#__PURE__*/react.createElement("span", null, getLocaleStringText('I would like to receive the latest in tax news, best practices, and other marketing communications from Avalara and may unsubscribe at any time.', 'question', locale), " ", /*#__PURE__*/react.createElement("a", { href: "https://legal.avalara.com/#privacypolicy", target: "_blank", rel: "noreferrer noopener" }, getLocaleStringText('Privacy Policy', 'question', locale)), "."))); } return /*#__PURE__*/react.createElement(GdprField, null, /*#__PURE__*/react.createElement("span", null, getLocaleStringText('Avalara may contact me about Avalara products and news. I understand I can change my preferences at any time per Avalara’s', 'question', locale), " ", /*#__PURE__*/react.createElement("a", { href: "https://legal.avalara.com/#privacypolicy", target: "_blank", rel: "noreferrer noopener" }, getLocaleStringText('Privacy Policy', 'question', locale)), ".")); }; /* harmony default export */ const gdpr_eligible = (GdprFieldComponent); ;// CONCATENATED MODULE: ./src/constants/tables/ava-tables.js var AvaTables = { ost_poi: { 'alternativemotorfuels.avalara.com': { 'Opp Sub Type': 'Excise', 'Product of Interest': 'AvaTax Excise' }, 'avalara.co.uk': { 'Opp Sub Type': 'EMEA', 'Product of Interest': 'Logic' }, 'avalara.com': { 'Opp Sub Type': 'Logic', 'Product of Interest': 'Logic' }, 'avalaramarketingcenter.com': { 'Opp Sub Type': 'AvaTax', 'Product of Interest': 'AvaTax' }, 'certcapture.avalara.com': { 'Opp Sub Type': 'CertCapture', 'Product of Interest': 'CertCapture' }, 'certexpress.avalara.com': { 'Opp Sub Type': 'CertCapture', 'Product of Interest': 'CertExpress' }, 'communications.avalara.com': { 'Opp Sub Type': 'Communications', 'Product of Interest': 'AvaTax Communications' }, 'communicationstaxrates.avalara.com': { 'Opp Sub Type': 'Communications', 'Product of Interest': 'AvaTax Communications' }, 'developer.avalara.com': { 'Opp Sub Type': 'AvaTax', 'Product of Interest': 'AvaTax' }, 'exciserates.avalara.com': { 'Opp Sub Type': 'Excise', 'Product of Interest': 'AvaTax Excise' }, 'fatca.avalara.com': { 'Opp Sub Type': 'Excise', 'Product of Interest': 'AvaTax Excise' }, 'fuel.avalara.com': { 'Opp Sub Type': 'Excise', 'Product of Interest': 'AvaTax Excise' }, 'fuelinvoicing.avalara.com': { 'Opp Sub Type': 'Excise', 'Product of Interest': 'AvaTax Excise' }, 'info.avalara.com': { 'Opp Sub Type': 'Logic', 'Product of Interest': 'Logic' }, 'landedcost.avalara.com': { 'Opp Sub Type': 'AvaTax', 'Product of Interest': 'AvaTax' }, 'Mobileapp.avalara.com': { 'Opp Sub Type': 'AvaTax', 'Product of Interest': 'AvaTax' }, 'mylodgetax.avalara.com': { 'Opp Sub Type': 'MyLodge Tax', 'Product of Interest': 'MyLodge Tax' }, 'offers.avalara.com': { 'Opp Sub Type': 'Logic', 'Product of Interest': 'Logic' }, 'partners.avalara.com': { 'Opp Sub Type': 'AvaTax', 'Product of Interest': 'AvaTax' }, 'purechannelaps.com': { 'Opp Sub Type': 'AvaTax', 'Product of Interest': 'AvaTax' }, 'rewards.avalara.com': { 'Opp Sub Type': 'AvaTax', 'Product of Interest': 'AvaTax' }, 'salestax.avalara.com': { 'Opp Sub Type': 'Logic', 'Product of Interest': 'Logic' }, 'taxrates.com': { 'Opp Sub Type': 'Logic', 'Product of Interest': 'Logic' }, 'trustfile.avalara.com': { 'Opp Sub Type': 'TrustFile', 'Product of Interest': 'TrustFile' }, 'trustfilebharat.avalara.com': { 'Opp Sub Type': 'TrustFile Bharat', 'Product of Interest': 'TrustFile Bharat' }, 'vatlive.com': { 'Opp Sub Type': 'EMEA', 'Product of Interest': 'Logic' } }, psoi_menu_values: { 'AvaTax Cross-Border': { psoi: 'AvaTax Cross-Border', ost: 'AvaTax Cross-Border' }, 'Sales and use tax': { psoi: 'AvaTax', ost: 'AvaTax' }, 'Managing exemption certificates': { psoi: 'CertCapture', ost: 'CertCapture' }, 'Cross border transactions': { psoi: 'Landed Cost Cross Border', ost: 'AvaTax' }, 'Communications tax': { psoi: 'AvaTax Communications', ost: 'Communications' }, 'Excise tax': { psoi: 'AvaTax Excise', ost: 'Excise' }, 'Lodging tax': { psoi: 'MyLodge', ost: 'MyLodgeTax' } }, ost_poi_big_domains: ['avalara.com', 'vatlive.com', 'avalara.co.uk', 'offers.avalara.com', 'salestax.avalara.com'], soho: ['bigcommerce', 'cs-cart', 'epages', 'open-cart-ecom', 'pinnacle-cart-inc', 'pixami', 'prestashop', 'quickbooks-online', 'virtuemart', 'woocommerce', 'x-cart', 'zen-cart'], non_explicit_optin: ['US'], emea_countries: ['AL', 'DZ', 'AD', 'AO', 'AT', 'BH', 'BY', 'BE', 'BJ', 'BA', 'BW', 'BG', 'BF', 'BI', 'CM', 'CV', 'CF', 'TD', 'KM', 'HR', 'CY', 'CZ', 'CG', 'DK', 'DJ', 'EG', 'GQ', 'ER', 'EE', 'ET', 'FO', 'FI', 'FR', 'GA', 'GM', 'GE', 'DE', 'GH', 'GI', 'GR', 'GG', 'GN', 'GN', 'HU', 'IS', 'IR', 'IQ', 'IE', 'IM', 'IL', 'IT', 'CI', 'JE', 'JO', 'KE', 'KW', 'LV', 'LB', 'LS', 'LR', 'LY', 'LI', 'LT', 'LU', 'MK', 'MG', 'MW', 'ML', 'MT', 'MR', 'MU', 'MD', 'MC', 'ME', 'MA', 'MZ', 'NA', 'NL', 'NE', 'NG', 'NO', 'OM', 'PS', 'PL', 'PT', 'QA', 'RO', 'RW', 'SM', 'ST', 'SA', 'SN', 'RS', 'SK', 'SI', 'SO', 'ZA', 'ES', 'SD', 'SZ', 'SE', 'CH', 'SY', 'TZ', 'TG', 'TN', 'TR', 'UG', 'UA', 'AE', 'GB', 'VA', 'EH', 'YE', 'ZM', 'ZW'], gdpr_countries: ['AT', 'BE', 'BG', 'HR', 'CA', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'GB', 'AU', 'NZ', 'SG'] }; /* harmony default export */ const ava_tables = (AvaTables); ;// CONCATENATED MODULE: ./src/helpers/user.js // Helpers // Types // helper to format user info from loggedIn user var formatUserInfo = function formatUserInfo(userInfo) { if (!userInfo || Object.keys(userInfo).length === 0) return null; var firstName = userInfo.firstName, lastName = userInfo.lastName; // This should remove failures if first or last name is empty if (!firstName || !lastName) { logger_api({ level: 'error', msgType: 'UserInfoError', formId: '', data: { message: "Missing first or last name in user info firstName: ".concat(firstName, " lastName: ").concat(lastName) // response: JSON.stringify(responseValidation), } }); return null; } var setFullname = firstName.concat(' ', lastName); return { email: userInfo.email, firstName: userInfo.firstName, lastName: userInfo.lastName, fullname: setFullname, // the field capture value is fullname company: userInfo.accountName, phone: userInfo.phoneNumber.replace(/D/g, '') // Replace everything but digit values before pass }; }; // Return user's ip // @return {String} var getUserIp = function getUserIp() { var _ref = window.ava || { maxmind: null }, maxmind = _ref.maxmind; if (!maxmind || maxmind === null) { logger({ level: 'error', msgType: 'UserFunctionTriggerNotice', formId: '', data: { message: '"getUserIp" no ip found in data. Maxmind may not be set in time' } }); } var ipAddress = maxmind !== null ? maxmind.user.ip : null; logger({ level: 'info', msgType: 'UserFunctionTriggerNotice', formId: '', data: { message: '"getUserIp" function triggered' } }); return ipAddress; }; // Checks if a user is in a given country // @param {String} country An ISO country code // @return { boolean } var isIn = function isIn() { var checkCountry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; logger_api({ level: 'info', msgType: 'UserFunctionTriggerNotice', formId: '', data: { message: '"isIn" function triggered' } }); if (checkCountry === null || checkCountry === '') { throw new TypeError('country parameter is required.'); } var isoCode = null; var _ref2 = window.ava || { maxmind: null }, maxmind = _ref2.maxmind; if (maxmind !== null) { var maxmindData = maxmind.INSIGHTS; var country = maxmindData.country; isoCode = country.iso_code || isoCode; // If there is no maxmind data assume blocked and log if (isoCode === null) { logger_api({ level: 'info', msgType: 'UserFunctionTriggerNotice', formId: '', data: { message: "\"isIn\" function triggered, maxmind data not found ".concat(JSON.stringify(maxmindData)) } }); return false; } return Boolean(isoCode !== null && checkCountry.toUpperCase() === isoCode); } return false; }; // Checks if user is in emea region // @return { boolean } var isEmea = function isEmea() { var _ref3 = window.ava || { maxmind: null }, maxmind = _ref3.maxmind; logger({ level: 'info', msgType: 'UserFunctionTriggerNotice', formId: '', data: { message: '"isEmea" function triggered' } }); if (maxmind === null) return false; var INSIGHTS = maxmind.INSIGHTS; var isoCode = INSIGHTS.country.iso_code || null; if (isoCode === null) { return false; } return AVATABLES.emea_countries.includes(isoCode); }; // Checks if user is in india region // @return { boolean } var isIndia = function isIndia() { var _ref4 = window.ava || { maxmind: null }, maxmind = _ref4.maxmind; logger({ level: 'info', msgType: 'UserFunctionTriggerNotice', formId: '', data: { message: '"isIndia" function triggered' } }); if (maxmind === null || maxmind && !maxmind.INSIGHTS) return false; var INSIGHTS = maxmind.INSIGHTS; var isoCode = INSIGHTS.country.iso_code || null; if (isoCode === null) { return false; } return Boolean(isoCode === 'IN'); }; // Checks if user is in brazil region // @return { boolean } var isBrazil = function isBrazil() { var _ref5 = window.ava || { maxmind: null }, maxmind = _ref5.maxmind; logger({ level: 'info', msgType: 'UserFunctionTriggerNotice', formId: '', data: { message: '"isBrazil" function triggered' } }); if (maxmind === null) return false; var INSIGHTS = maxmind.INSIGHTS; var isoCode = INSIGHTS.country.iso_code || null; if (isoCode === null) { return false; } return Boolean(isoCode === 'BR'); }; // Checks is in a GDPR eligible country // @return { boolean } /* eslint-disable camelcase */ var isGdprEligible = function isGdprEligible() { var isoCode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; logger_api({ level: 'info', msgType: 'UserFunctionTriggerNotice', formId: '', data: { message: '"isGdprEligible" function triggered' } }); if (!isoCode) return false; var iso_code = isoCode.iso_code; if (!iso_code) return false; return Boolean(ava_tables.gdpr_countries.includes(iso_code)); }; /* eslint-enable camelcase */ // Checks if user should see optin // @return { boolean } // Question: Why is 'CA' hardcoded? Seems like this would aways return var isOptinEligible = function isOptinEligible() { var isoCode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; logger_api({ level: 'info', msgType: 'UserFunctionTriggerNotice', formId: '', data: { message: '"isGdprEligible" function triggered' } }); if (!isoCode) return true; var iso_code = isoCode.iso_code; if (!iso_code) return false; return Boolean(isIn('CA') || !ava_tables.non_explicit_optin.includes(iso_code)); }; /* eslint-enable camelcase */ ;// CONCATENATED MODULE: ./src/containers/fields/gdpr-eligable.jsx function gdpr_eligable_createSuper(Derived) { var hasNativeReflectConstruct = gdpr_eligable_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function gdpr_eligable_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Component // Types // Actions // Helpers var GdprContainer = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(GdprContainer, _React$Component); var _super = gdpr_eligable_createSuper(GdprContainer); function GdprContainer() { (0,classCallCheck/* default */.Z)(this, GdprContainer); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(GdprContainer, [{ key: "componentDidMount", value: function componentDidMount() { // Capture as form field to be set into payload later as user eligable this.props.onCaptureInput(this.props.formId, { id: 'gdpr_eligible', type: 'null', value: this.props.isGdprEligable ? '1' : '0' }); } }, { key: "componentDidUpdate", value: function componentDidUpdate() { // Capture as form field to be set into payload later as user eligable this.props.onCaptureInput(this.props.formId, { id: 'gdpr_eligible', type: 'null', value: this.props.isGdprEligable ? '1' : '0' }); } }, { key: "render", value: function render() { var _this$props = this.props, formId = _this$props.formId, errorState = _this$props.errorState, gdprCountrySelected = _this$props.gdprCountrySelected, isDisabled = _this$props.isDisabled, isGdprEligable = _this$props.isGdprEligable, optinEligible = _this$props.optinEligible, locale = _this$props.locale, onCaptureInput = _this$props.onCaptureInput, optinValue = _this$props.optinValue, requiredFields = _this$props.requiredFields, setValue = _this$props.setValue; return /*#__PURE__*/react.createElement(gdpr_eligible, { errorState: errorState, isDisabled: isDisabled, formId: formId, gdprCountrySelected: gdprCountrySelected, isGdprEligable: isGdprEligable, optinEligible: optinEligible, locale: locale, onCaptureInput: onCaptureInput, optinValue: optinValue, requiredFields: requiredFields, setValue: setValue }); } }]); return GdprContainer; }(react.Component); var gdpr_eligable_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId; var maxmindDataExists = Boolean(state.maxmind !== null && state.maxmind && state.maxmind.INSIGHTS && Boolean(Object.keys(state.maxmind.INSIGHTS).length > 0)); var countryField = state.forms.captureFields[formId] ? state.forms.captureFields[formId].filter(function (field) { return field.id === 'country'; }) : false; return { errorState: state.forms.hasError[formId] ? state.forms.hasError[formId].filter(function (f) { return f.id === 'gdprConsentDate'; })[0] : false, gdprCountrySelected: !maxmindDataExists && countryField ? countryField.length === 1 && isGdprEligible({ iso_code: countryField[0].value }) : false, isDisabled: state.forms.submissionlimit && state.forms.submissionlimit[formId] ? 'disabled' : '', isGdprEligable: state.maxmind && state.maxmind.INSIGHTS && state.maxmind.INSIGHTS.country && state.maxmind.INSIGHTS.country.iso_code ? isGdprEligible(state.maxmind.INSIGHTS.country) : true, optinEligible: state.maxmind && state.maxmind.INSIGHTS && state.maxmind.INSIGHTS.country && state.maxmind.INSIGHTS.country.iso_code ? isOptinEligible(state.maxmind.INSIGHTS.country) : true, locale: state.forms.activeForms && state.forms.activeForms[formId] && state.forms.activeForms[formId].configs && state.forms.activeForms[formId].configs.language ? state.forms.activeForms[formId].configs.language : 'en', requiredFields: state.forms.requiredFields[formId], optinValue: state.forms.captureFields[formId] && state.forms.captureFields[formId].filter(function (f) { return f.id === 'gdprConsentDate'; })[0] && state.forms.captureFields[formId].filter(function (f) { return f.id === 'gdprConsentDate'; })[0].value ? 'on' : 'off', setValue: state.forms.captureFields[formId] ? state.forms.captureFields[formId].filter(function (f) { return f.id === 'gdprConsentDate'; })[0] && state.forms.captureFields[formId].filter(function (f) { return f.id === 'gdprConsentDate'; })[0].value : '' }; }; var gdpr_eligable_mapDispatchToProps = function mapDispatchToProps(dispatch) { return { onCaptureInput: function onCaptureInput(formId, target) { return dispatch(captureInput(dispatch, formId, target)); } }; }; /* harmony default export */ const gdpr_eligable = ((0,es/* connect */.$j)(gdpr_eligable_mapStateToProps, gdpr_eligable_mapDispatchToProps)(GdprContainer)); ;// CONCATENATED MODULE: ./src/components/fields/placeholder.jsx // Styles // Helpers var PlaceholderText = function PlaceholderText(_ref) { var errorState = _ref.errorState, emailOnly = _ref.emailOnly, id = _ref.id, isSet = _ref.isSet, displayText = _ref.displayText, placeholder = _ref.placeholder, positionTop = _ref.positionTop, required = _ref.required, setClasses = _ref.setClasses, hasBeenValidated = _ref.hasBeenValidated; return /*#__PURE__*/react.createElement(PlaceHolderText, { htmlFor: id, positionTop: positionTop || false, emailOnly: emailOnly, errorState: errorState, className: "placeholderText\n ".concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated), " ").concat(setInputClass(setClasses)) }, /*#__PURE__*/react.createElement("span", null, setDisplayText(displayText, placeholder), required !== null && required && ' *')); }; /* harmony default export */ const fields_placeholder = (PlaceholderText); // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/css/flatpickr.css var flatpickr = __webpack_require__(4927); ;// CONCATENATED MODULE: ./src/css/flatpickr.css var flatpickr_options = {}; flatpickr_options.styleTagTransform = (styleTagTransform_default()); flatpickr_options.setAttributes = (setAttributesWithoutAttributes_default()); flatpickr_options.insert = insertBySelector_default().bind(null, "head"); flatpickr_options.domAPI = (styleDomAPI_default()); flatpickr_options.insertStyleElement = (insertStyleElement_default()); var flatpickr_update = injectStylesIntoStyleTag_default()(flatpickr/* default */.Z, flatpickr_options); /* harmony default export */ const css_flatpickr = (flatpickr/* default */.Z && flatpickr/* default.locals */.Z.locals ? flatpickr/* default.locals */.Z.locals : undefined); // EXTERNAL MODULE: ./node_modules/flatpickr/dist/flatpickr.min.css var flatpickr_min = __webpack_require__(2363); ;// CONCATENATED MODULE: ./src/components/fields/date.jsx // $FlowFixMe: Ignore untyped module // Containers // Components // Styles // Helpers // Types var DateTimePickerComponent = function DateTimePickerComponent(_ref) { var activeField = _ref.activeField, classes = _ref.classes, containsGdprContainer = _ref.containsGdprContainer, customValidation = _ref.customValidation, displayText = _ref.displayText, errorState = _ref.errorState, formId = _ref.formId, id = _ref.id, name = _ref.name, placeholder = _ref.placeholder, onCaptureInput = _ref.onCaptureInput, onSetActiveField = _ref.onSetActiveField, onValidateField = _ref.onValidateField, hasBeenValidated = _ref.hasBeenValidated, isDisabled = _ref.isDisabled, isRequired = _ref.isRequired, isSet = _ref.isSet, required = _ref.required, requiredFields = _ref.requiredFields, type = _ref.type, value = _ref.value; return /*#__PURE__*/react.createElement(FlatPickerContainer, { className: "".concat(setActiveContainer(activeField, id)), id: "".concat(formId, "-date-picker") }, /*#__PURE__*/react.createElement(build/* default */.Z, { "data-enable-time": true, autoComplete: "off", className: "".concat(setFieldClasses(classes)).concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated), " date-picker flatpickr-input"), disabled: isDisabled, id: id, name: setFieldName(name, id), onBlur: function onBlur(e) { return onValidateField(customValidation, formId, isRequired, requiredFields, e.target); }, onClose: function onClose(date) { return onValidateField(customValidation, formId, isRequired, requiredFields, { id: id, name: setFieldName(name, id), type: 'text', value: getFormattedDate(date[0]) }); }, onChange: function onChange(date) { return onCaptureInput(formId, { id: id, name: setFieldName(name, id), type: 'text', value: getFormattedDate(date[0]) }); }, options: { allowInput: true, dateFormat: 'Y-m-d H:i', disableMobile: true }, onFocus: function onFocus(e) { return onSetActiveField(formId, e.target.id); }, type: type || 'text', required: isRequired && 'required', value: value }), /*#__PURE__*/react.createElement(fields_placeholder, { containsGdprContainer: containsGdprContainer, errorState: errorState, id: id, isSet: isSet, displayText: displayText, placeholder: placeholder, positionTop: containsGdprContainer, required: required, hasBeenValidated: hasBeenValidated }), errorState && /*#__PURE__*/react.createElement(ErrorMessage, { "aria-live": "assertive", alert: "true" }, errorState.message), containsGdprContainer && /*#__PURE__*/react.createElement(gdpr_eligable, { formId: formId })); }; /* harmony default export */ const date = (DateTimePickerComponent); ;// CONCATENATED MODULE: ./src/containers/fields/date.jsx function date_createSuper(Derived) { var hasNativeReflectConstruct = date_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function date_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // scrict-local // Components // Helpers // Types var DateTimePicker = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(DateTimePicker, _React$Component); var _super = date_createSuper(DateTimePicker); function DateTimePicker() { (0,classCallCheck/* default */.Z)(this, DateTimePicker); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(DateTimePicker, [{ key: "render", value: function render() { var _this$props = this.props, activeField = _this$props.activeField, containsGdprContainer = _this$props.containsGdprContainer, errorState = _this$props.errorState, fields = _this$props.fields, fieldData = _this$props.fieldData, fieldObject = _this$props.fieldObject, formId = _this$props.formId, hasBeenValidated = _this$props.hasBeenValidated, id = _this$props.id, isDisabled = _this$props.isDisabled, isLastField = _this$props.isLastField, isRequired = _this$props.isRequired, isSet = _this$props.isSet, onCaptureInput = _this$props.onCaptureInput, onSetActiveField = _this$props.onSetActiveField, onSetLastField = _this$props.onSetLastField, onValidateField = _this$props.onValidateField, requiredFields = _this$props.requiredFields; // $FlowFixMe: Ingore error. Flow isn't seeing the spread object as init values being set return /*#__PURE__*/react.createElement(date, (0,esm_extends/* default */.Z)({}, fieldObject, { // Spread field object to pass all by default for available object values see /lib/types/forms {SetJsonField} activeField: activeField, containsGdprContainer: containsGdprContainer, errorState: errorState, fields: fields, fieldData: fieldData, formId: formId, hasBeenValidated: hasBeenValidated, isDisabled: isDisabled, isLastField: isLastField, isRequired: isRequired, isSet: isSet, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onSetLastField: onSetLastField, onValidateField: onValidateField, requiredFields: requiredFields, value: getFieldValueObject(fields, id).value })); } }]); return DateTimePicker; }(react.Component); var date_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId, id = ownProps.id; return { activeField: state.forms.activeFields[formId], containsGdprContainer: containsGdprField(id, state.forms.gdprField[formId]), errorState: checkIfHasError(id, state.forms.hasError[formId]), fields: state.forms.captureFields[formId], fieldData: state.forms.activeForms, isRequired: state.forms.requiredFields[formId] ? state.forms.requiredFields[formId].includes(id) : false, isSet: checkIfFieldIsSet(state.forms.captureFields[formId], id), requiredFields: state.forms.requiredFields[formId] }; }; /* harmony default export */ const fields_date = ((0,es/* connect */.$j)(date_mapStateToProps)(DateTimePicker)); ;// CONCATENATED MODULE: ./src/components/fields/hidden.jsx // Styles // Helpers // Types var InputTextComponent = function InputTextComponent(_ref) { var formId = _ref.formId, id = _ref.id, name = _ref.name, onCaptureInput = _ref.onCaptureInput, value = _ref.value; return /*#__PURE__*/react.createElement(InputContainer, { styles: { display: 'none', visibility: 'hidden' } }, /*#__PURE__*/react.createElement(HiddenInput, { autoComplete: "off", id: id, name: setFieldName(name, id), onChange: function onChange(e) { return onCaptureInput(formId, e.target); }, type: 'hidden', value: value, style: { display: 'none', visibility: 'hidden' } })); }; /* harmony default export */ const fields_hidden = (InputTextComponent); ;// CONCATENATED MODULE: ./src/constants/picklist.js var PickListFields = [{ data: 'connectors', id: 'connector_id', endpoint: '/connectors/search', miles: true }, { data: 'industries', id: 'industry_id', endpoint: src_config.BUSINESS_LICENSE_INDUSTRIES_STORAGE, miles: false }]; /* harmony default export */ const picklist = (PickListFields); ;// CONCATENATED MODULE: ./src/containers/fields/hidden.jsx function hidden_createSuper(Derived) { var hasNativeReflectConstruct = hidden_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function hidden_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // scrict-local // Components // Constants // Helpers // Types var TextInputContainer = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(TextInputContainer, _React$Component); var _super = hidden_createSuper(TextInputContainer); function TextInputContainer() { (0,classCallCheck/* default */.Z)(this, TextInputContainer); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(TextInputContainer, [{ key: "render", value: function render() { var _this$props = this.props, connectorData = _this$props.connectorData, fields = _this$props.fields, fieldData = _this$props.fieldData, fieldObject = _this$props.fieldObject, formId = _this$props.formId, id = _this$props.id, isLastField = _this$props.isLastField, onCaptureInput = _this$props.onCaptureInput; // $FlowFixMe: Ingore error. Flow isn't seeing the spread object as init values being set return /*#__PURE__*/react.createElement(fields_hidden, (0,esm_extends/* default */.Z)({}, fieldObject, { // Spread field object to pass all by default for available object values see /lib/types/forms {SetJsonField} connectorData: connectorData, fields: fields, fieldData: fieldData, formId: formId, pickList: picklist.filter(function (f) { return f.id === id; })[0], isLastField: isLastField, onCaptureInput: onCaptureInput, value: getFieldValueObject(fields, id).value })); } }]); return TextInputContainer; }(react.Component); var hidden_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId; return { fields: state.forms.captureFields[formId], fieldData: state.forms.activeForms }; }; /* harmony default export */ const containers_fields_hidden = ((0,es/* connect */.$j)(hidden_mapStateToProps)(TextInputContainer)); ;// CONCATENATED MODULE: ./src/components/fields/multi-select.jsx // Compnents // Styles // Helpers // Types var InputMultiSelectComponent = function InputMultiSelectComponent(_ref) { var activeField = _ref.activeField, classes = _ref.classes, customValidation = _ref.customValidation, defaultValue = _ref.defaultValue, displayText = _ref.displayText, errorState = _ref.errorState, formId = _ref.formId, hasBeenValidated = _ref.hasBeenValidated, id = _ref.id, isDisabled = _ref.isDisabled, isRequired = _ref.isRequired, isSet = _ref.isSet, minheight = _ref.minheight, name = _ref.name, options = _ref.options, onCaptureInput = _ref.onCaptureInput, onSetActiveField = _ref.onSetActiveField, onValidateField = _ref.onValidateField, placeholder = _ref.placeholder, requiredFields = _ref.requiredFields, value = _ref.value; return /*#__PURE__*/react.createElement(InputMultiSelect, { className: "".concat(setActiveContainer(activeField, id)), minheight: minheight !== null ? minheight : 'auto' }, /*#__PURE__*/react.createElement(fields_placeholder, { className: "select-placeholder", errorState: errorState, id: id, isSet: isSet, displayText: displayText, placeholder: placeholder, required: isRequired, setClasses: "multi-select-placeholder", hasBeenValidated: hasBeenValidated }), /*#__PURE__*/react.createElement("div", { className: "form-group ".concat(setFieldClasses(classes)).concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated)), disabled: isDisabled, id: id, name: setFieldName(name, id), onFocus: function onFocus(e) { return onSetActiveField(formId, e.target.id); }, required: isRequired && 'required', defaultValue: value !== null && value !== '' ? value.split(',') : defaultValue.split(',') }, !!options && options.map(function (o, index) { return /*#__PURE__*/react.createElement("button", { key: index, value: o.value, className: isSelected(value, o.display) ? 'selected' : '', onClick: function onClick(e) { e.preventDefault(); var container = document.getElementById(id); var selectedOptions = []; var selected = []; if (container) selectedOptions = container.getElementsByTagName('div'); for (var i = 0; i < selectedOptions.length; i++) { if (selectedOptions[i].classList.contains('selected')) selected.push(o.value); } onCaptureInput(formId, setMultiSelectTarget(document.getElementById(id), id, value, o.value, isSelected(value, o.display))); if (isRequired) onValidateField(customValidation, formId, isRequired, requiredFields, setMultiSelectTarget(document.getElementById(id), id, value, o.value, isSelected(value, o.display))); } }, o.display); })), errorState && /*#__PURE__*/react.createElement(ErrorMessage, { className: "select-error-alert" }, errorState.message)); }; /* harmony default export */ const multi_select = (InputMultiSelectComponent); ;// CONCATENATED MODULE: ./src/hooks/useDebounce.js var useDebounce = function useDebounce(func, delay) { // declare a ref to store the current debounce timer var debounceTimerRef = (0,react.useRef)(null); // Debounced Function // We're using useCallback here so we can memoize the function if any of the args for useDebounce changes // This is useful for performance so the original func instance is returned instead of having to re-render the component if the same args are passed var debouncedFunction = (0,react.useCallback)(function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } // clear the existing timer clearTimeout(debounceTimerRef.current); // set a new timer to execute the function after the delay debounceTimerRef.current = setTimeout(function () { func.apply(void 0, args); }, delay); }, [func, delay]); // useEffect will return a cleanup function that will clear the timeout when the component unmounts (0,react.useEffect)(function () { return function () { clearTimeout(debounceTimerRef.current); }; }, []); return debouncedFunction; }; /* harmony default export */ const hooks_useDebounce = (useDebounce); ;// CONCATENATED MODULE: ./src/schema/connector.js // eslint-disable-next-line import/prefer-default-export var connectorSearchSchema = { type: 'object', key: { type: 'string' }, properties: { name: { type: 'string' }, id: { type: 'string' }, vibrancy: { type: 'string' } } }; /* harmony default export */ const connector = (connectorSearchSchema); ;// CONCATENATED MODULE: ./src/schema/typeahead.js // eslint-disable-next-line import/prefer-default-export var typeaheadSearchSchema = { type: 'object', key: { type: 'string' }, properties: { name: { type: 'string' }, id: { type: 'string' } } }; /* harmony default export */ const typeahead = (typeaheadSearchSchema); ;// CONCATENATED MODULE: ./src/api/connectors.js function connectors_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function connectors_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? connectors_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : connectors_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Docs // Logging // Actions // Schemas // API Settings // Types var MILESAPI = src_config.MILES_API; var AVAFORMTYPEAHEADAPI = src_config.AVAFORM_TYPEAHEAD_API; // API should technically always return success (200), however, errors are reflected in the response response.value.status var connectorSearch = /*#__PURE__*/function () { var _ref = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(dispatch) { var endpoint, milesEndpoint, fieldId, formId, vibrancy, connectorApi, response, saveEndpoint, validatorSchema, schemaValidationResponse, _ref2, connectors, typeAhead, _args = arguments; return regenerator_default().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: endpoint = _args.length > 1 && _args[1] !== undefined ? _args[1] : null; milesEndpoint = _args.length > 2 ? _args[2] : undefined; fieldId = _args.length > 3 ? _args[3] : undefined; formId = _args.length > 4 ? _args[4] : undefined; vibrancy = _args.length > 5 && _args[5] !== undefined ? _args[5] : null; if (endpoint) { _context.next = 10; break; } // Log failure logger_api({ level: 'error', msgType: 'ApiConnectorNoEndpoint', formId: formId, data: { message: 'CONNECTOR unknown endpoint found - No endpoint configured' } }); dispatch(connectorSearchFailed(formId, 'No enpoint configured', 'null')); dispatch(setLoadingFinish()); return _context.abrupt("return"); case 10: if (!milesEndpoint) { _context.next = 17; break; } connectorApi = vibrancy && vibrancy !== null ? "".concat(MILESAPI).concat(endpoint, "?vibrancy=").concat(vibrancy) : "".concat(MILESAPI).concat(endpoint); _context.next = 14; return (0,shared/* fetch */.he)(connectorApi, { method: 'POST' }, api_settings.timeout).then(function (result) { return result; }); case 14: response = _context.sent; _context.next = 21; break; case 17: connectorApi = "".concat(AVAFORMTYPEAHEADAPI).concat(endpoint); _context.next = 20; return (0,shared/* fetch */.he)(connectorApi, { method: 'GET' }, api_settings.timeout).then(function (result) { return result; }); case 20: response = _context.sent; case 21: saveEndpoint = vibrancy ? "".concat(endpoint, ":").concat(vibrancy) : endpoint; validatorSchema = milesEndpoint ? connector : typeahead; logger_api({ level: 'info', msgType: 'ApiConnectorValidation', formId: formId, data: { message: "Schema validation for connector. Data: ".concat(JSON.stringify(response)) } }); schemaValidationResponse = (0,shared/* schemaValidator */.qu)(validatorSchema, response); if (schemaValidationResponse && !schemaValidationResponse.ok) { // Silently fail schema, do not interrupt user, sent to Sumo for logging logger_api({ level: 'error', msgType: 'ApiConnectorValidation', formId: formId, data: { message: 'Error with connector response schema validation', response: JSON.stringify(schemaValidationResponse) } }); } // Check the status of the returned information to be valid. Any other status is considered failed // Dispatch failure to redux reducer reducer/forms.js if (response.ok) { _context.next = 31; break; } dispatch(connectorSearchFailed(formId, response.message, saveEndpoint)); dispatch(setLoadingFinish()); // Log failure logger_api({ level: 'error', msgType: 'ApiConnectorEndpoint', formId: formId, data: { message: 'CONNECTOR unknown error found - api/connector-search.js', response: JSON.stringify(response), endpoint: saveEndpoint } }); return _context.abrupt("return"); case 31: // Log data to window for testing _ref2 = window.ava || { connectors: {} }, connectors = _ref2.connectors; typeAhead = connectors && connectors[formId] ? connectors[formId] : {}; window.ava.connectors = connectors_objectSpread(connectors_objectSpread({}, connectors), {}, (0,defineProperty/* default */.Z)({}, formId, connectors_objectSpread(connectors_objectSpread({}, typeAhead), {}, (0,defineProperty/* default */.Z)({}, fieldId, response.value)))); dispatch(connectorSearchSuccess(connectors_objectSpread({}, response.value), saveEndpoint, fieldId, formId)); dispatch(setLoadingFinish()); case 36: case "end": return _context.stop(); } } }, _callee); })); return function connectorSearch(_x) { return _ref.apply(this, arguments); }; }(); /* harmony default export */ const connectors = (connectorSearch); ;// CONCATENATED MODULE: ./src/styled/containers/picklist.js var picklist_templateObject; // COLORS var PickListContainer = styled_components_browser_esm/* default.div */.ZP.div(picklist_templateObject || (picklist_templateObject = (0,taggedTemplateLiteral/* default */.Z)(["\n bottom: 0;\n display: block;\n height: auto;\n left: 0;\n margin-top: -2px;\n position: absolute;\n top: 100%;\n width: 100%;\n z-index: 5;\n ul {\n background: #FFF;\n border: 1px solid ", ";\n border-radius: 3px;\n box-shadow: 1px 3px 5px #CCC;\n margin: 0;\n max-height: 240px;\n overflow-y: scroll;\n padding: 0;\n\n li {\n list-style: none;\n\n &.no-results {\n color: ", "\n font-size: .95rem;\n padding: 10px 15px;\n\n &:hover {\n background: transparent;\n }\n }\n\n * {\n background: transparent;\n background:none;\n border:none;\n color: ", "\n cursor: pointer;\n display: block;\n font-size: .95rem;\n padding: 10px 15px;\n text-decoration: none;\n width: 100%;\n }\n\n .picklist-value-active {\n background-color: #F6F6F6;\n color: #F60;\n cursor: pointer;\n }\n\n .closePickList {\n background-color: ", ";\n border: none;\n color: ", ";\n font-weight: 600;\n text-align: center;\n &:hover {\n color: #FFF;\n }\n }\n\n &:hover {\n background-color: #F6F6F6;\n * {\n color: #F60;\n cursor: pointer;\n }\n }\n }\n &.closePickList {\n border: none;\n }\n }\n"])), form_theme.field.border.color, colors.grey2, colors.grey2, colors.orange, colors.white); /* harmony default export */ const containers_picklist = ((/* unused pure expression or super */ null && (PickListContainer))); ;// CONCATENATED MODULE: ./src/components/picklist.jsx // Styles // Types var PickListComponent = function PickListComponent(_ref) { var formId = _ref.formId, fieldId = _ref.fieldId, hasData = _ref.hasData, highlightedItem = _ref.highlightedItem, selectedItem = _ref.selectedItem, isActive = _ref.isActive, onCaptureInput = _ref.onCaptureInput, onClosePicklist = _ref.onClosePicklist, onFocusCapture = _ref.onFocusCapture, pickListResults = _ref.pickListResults; // Return empty if not active or has no results; if (!isActive || !hasData) return ''; var refs = pickListResults.reduce(function (acc, value) { acc[value.id] = /*#__PURE__*/(0,react.createRef)(); return acc; }, {}); (0,react.useEffect)(function () { var key = pickListResults[highlightedItem]; if (key && key.id) { refs[key.id].current.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }, [highlightedItem]); (0,react.useEffect)(function () { var key = pickListResults[selectedItem]; if ((selectedItem || selectedItem === 0) && key && key.id) { var refToListItem = refs[key.id]; var selectedButton = refToListItem.current.childNodes[0]; selectedButton.focus(); selectedButton.click(); } }, [selectedItem]); return /*#__PURE__*/react.createElement(PickListContainer, null, /*#__PURE__*/react.createElement("ul", null, pickListResults && pickListResults.length < 1 && /*#__PURE__*/react.createElement("li", { className: "no-results" }, "No Results"), pickListResults && pickListResults.length > 0 && pickListResults.map(function (p, key) { return /*#__PURE__*/react.createElement("li", { key: key, ref: refs[p.id] }, /*#__PURE__*/react.createElement("button", { // $FlowFixMe className: "picklist-value ".concat(highlightedItem === key && 'picklist-value-active'), onClick: function onClick(e) { e.preventDefault(); onCaptureInput({ alt: p.id, id: fieldId, type: 'text', value: p.name }); }, onFocus: function onFocus() { onFocusCapture({ alt: p.id, id: fieldId, type: 'text', value: p.name }); } }, p.name)); })), /*#__PURE__*/react.createElement("ul", { className: "closePickList" }, /*#__PURE__*/react.createElement("li", null, /*#__PURE__*/react.createElement("button", { className: "closePickList", onClick: function onClick() { return onClosePicklist(formId); } }, "Close")))); }; /* harmony default export */ const components_picklist = (PickListComponent); ;// CONCATENATED MODULE: ./src/containers/picklist.jsx function picklist_createSuper(Derived) { var hasNativeReflectConstruct = picklist_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function picklist_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Actions // API // Component // Helpers // Types var TypeAheadPickList = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(TypeAheadPickList, _React$Component); var _super = picklist_createSuper(TypeAheadPickList); function TypeAheadPickList() { (0,classCallCheck/* default */.Z)(this, TypeAheadPickList); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(TypeAheadPickList, [{ key: "componentDidMount", value: function componentDidMount() { var hasData = this.props.hasData; if (!hasData) { // ping MILES connector/search API var pickList = this.props.pickList; var _vibrancy = this.props.vibrancy; _vibrancy = _vibrancy || null; if (pickList && pickList.endpoint) this.props.onGetConnectorData(_vibrancy); } } }, { key: "render", value: function render() { var _this$props = this.props, formId = _this$props.formId, fieldId = _this$props.fieldId, hasData = _this$props.hasData, highlightedItem = _this$props.highlightedItem, selectedItem = _this$props.selectedItem, isActive = _this$props.isActive, onCaptureInput = _this$props.onCaptureInput, onClosePicklist = _this$props.onClosePicklist, onFocusCapture = _this$props.onFocusCapture, pickListResults = _this$props.pickListResults; return /*#__PURE__*/react.createElement(components_picklist, { formId: formId, fieldId: fieldId, hasData: hasData, highlightedItem: highlightedItem, selectedItem: selectedItem, isActive: isActive, onCaptureInput: onCaptureInput, onClosePicklist: onClosePicklist, onFocusCapture: onFocusCapture, pickListResults: pickListResults }); } }]); return TypeAheadPickList; }(react.Component); var picklist_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId, fieldId = ownProps.fieldId; return { hasData: Boolean(state.search.results && state.search.results[formId] && state.search.results[formId][fieldId]), requiredFields: state.forms.requiredFields[formId], pickListResults: state.search && state.search.results && state.search.results[formId] && state.search.results[formId][fieldId] ? state.search.results[formId][fieldId] : [], vibrancy: getFieldVibrancy(state.forms, formId) }; }; var picklist_mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { var customValidation = ownProps.customValidation, fieldId = ownProps.fieldId, formId = ownProps.formId, pickList = ownProps.pickList, isRequired = ownProps.isRequired, requiredFields = ownProps.requiredFields; var connectorEndpoint = pickList && pickList.endpoint ? pickList.endpoint : null; var milesEndpoint = pickList && pickList.miles ? pickList.miles : false; return { onClosePicklist: function onClosePicklist() { return dispatch(closePickList(formId)); }, onFocusCapture: function onFocusCapture(target) { return dispatch(captureInput(dispatch, formId, target)); }, onCaptureInput: function onCaptureInput(target) { dispatch(hideSearchResults(fieldId, formId)); dispatch(captureInput(dispatch, formId, target)); validateField(dispatch, customValidation, formId, isRequired, requiredFields, target); if (target.alt) dispatch(saveSearchSelection(fieldId, formId, target.alt)); // Redundant flow if check }, onGetConnectorData: function onGetConnectorData(vibrancy) { return connectors(dispatch, connectorEndpoint, milesEndpoint, fieldId, formId, vibrancy); } }; }; /* harmony default export */ const src_containers_picklist = ((0,es/* connect */.$j)(picklist_mapStateToProps, picklist_mapDispatchToProps)(TypeAheadPickList)); ;// CONCATENATED MODULE: ./src/components/fields/text.jsx // Containers // Components // Styles // Helpers // Types var text_InputTextComponent = function InputTextComponent(_ref) { var activeField = _ref.activeField, classes = _ref.classes, connectorData = _ref.connectorData, containsGdprContainer = _ref.containsGdprContainer, customValidation = _ref.customValidation, displayText = _ref.displayText, errorState = _ref.errorState, formId = _ref.formId, pickList = _ref.pickList, id = _ref.id, name = _ref.name, placeholder = _ref.placeholder, onCaptureInput = _ref.onCaptureInput, onSearch = _ref.onSearch, onSetActiveField = _ref.onSetActiveField, onValidateConnector = _ref.onValidateConnector, onValidateField = _ref.onValidateField, hasBeenValidated = _ref.hasBeenValidated, isLastField = _ref.isLastField, isDisabled = _ref.isDisabled, isRequired = _ref.isRequired, isSet = _ref.isSet, required = _ref.required, requiredFields = _ref.requiredFields, type = _ref.type, value = _ref.value, vibrancy = _ref.vibrancy; var _useState = (0,react.useState)(0), _useState2 = (0,slicedToArray/* default */.Z)(_useState, 2), highlightedItem = _useState2[0], setHighlightedItem = _useState2[1]; var _useState3 = (0,react.useState)(), _useState4 = (0,slicedToArray/* default */.Z)(_useState3, 2), selectedItem = _useState4[0], setSelectedItem = _useState4[1]; var debouncedOnValidateField = hooks_useDebounce(onValidateField, 700); var handleKeyDown = function handleKeyDown(e) { if (pickList) { if (e.keyCode === 38 && highlightedItem > 0) { setHighlightedItem(function (prevState) { return prevState - 1; }); } else if (e.keyCode === 40 && highlightedItem < connectorData.length - 1) { setHighlightedItem(function (prevState) { return prevState + 1; }); } else if (e.keyCode === 13) { e.preventDefault(); setSelectedItem(highlightedItem); } else { setHighlightedItem(0); setSelectedItem(); } } }; return /*#__PURE__*/react.createElement(InputContainer, { className: "".concat(setActiveContainer(activeField, id)), hasPickList: pickList, onBlur: function onBlur() { // Redundant typof check for flow requirements if (isRequired && connectorData && connectorData !== null && pickList && value !== null && typeof value === 'string' && value !== '' && onValidateConnector) { onValidateConnector(connectorData, id, formId, value); } } }, /*#__PURE__*/react.createElement(TextInput, { autoComplete: "off", className: "".concat(setFieldClasses(classes)).concat(setActiveInputClass(activeField, id)).concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated)), disabled: isDisabled, id: id, name: setFieldName(name, id), onBlur: function onBlur(e) { if (id === 'email' || id === 'partner_rep_email' || id === 'ref_email') { debouncedOnValidateField(customValidation, formId, isRequired, requiredFields, e.target); } else { onValidateField(customValidation, formId, isRequired, requiredFields, e.target); } }, onChange: function onChange(e) { if ((id === 'connector_id' || id === 'industry_id') && pickList && onSearch) { // Check for vibrancy for endpoint update var setEndpoint = typeof vibrancy !== 'undefined' && vibrancy !== null ? "".concat(pickList.endpoint, ":").concat(vibrancy) : pickList.endpoint; onSearch(setEndpoint, id, formId, e.target.value); } if (id === 'email' || id === 'partner_rep_email' || id === 'ref_email') { debouncedOnValidateField(customValidation, formId, isRequired, requiredFields, e.target); } else if (isLastField && isLastField === id && isRequired && id !== 'connector_id' && id !== 'industry_id') { onValidateField(customValidation, formId, isRequired, requiredFields, e.target); } onCaptureInput(formId, e.target); }, onFocus: function onFocus(e) { return onSetActiveField(formId, e.target.id); }, onKeyDown: handleKeyDown, placeholder: placeholder, type: type || 'text', required: isRequired && 'required', customValidation: customValidation, value: value }), /*#__PURE__*/react.createElement(fields_placeholder, { containsGdprContainer: containsGdprContainer, errorState: errorState, id: id, isSet: isSet, displayText: displayText, placeholder: placeholder, emailOnly: formId === 'EMAILONLYREACT' || formId === 'EMAILONLYCOLUMN' ? true : false, positionTop: containsGdprContainer, required: required, hasBeenValidated: hasBeenValidated }), pickList && /*#__PURE__*/react.createElement(src_containers_picklist, { customValidation: customValidation, fieldId: id, formId: formId, isActive: /[active]/g.test(setActiveContainer(activeField, id)), isRequired: isRequired, requiredFields: requiredFields, pickList: pickList, highlightedItem: highlightedItem, selectedItem: selectedItem }), errorState && /*#__PURE__*/react.createElement(ErrorMessage, { "aria-live": "assertive", alert: "true" }, errorState.message), containsGdprContainer && /*#__PURE__*/react.createElement(gdpr_eligable, { formId: formId })); }; /* harmony default export */ const fields_text = (text_InputTextComponent); ;// CONCATENATED MODULE: ./src/containers/fields/text.jsx function text_createSuper(Derived) { var hasNativeReflectConstruct = text_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function text_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // scrict-local // Actions // Components // Constants // Helpers // Types var text_TextInputContainer = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(TextInputContainer, _React$Component); var _super = text_createSuper(TextInputContainer); function TextInputContainer() { (0,classCallCheck/* default */.Z)(this, TextInputContainer); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(TextInputContainer, [{ key: "render", value: function render() { var _this$props = this.props, activeField = _this$props.activeField, connectorData = _this$props.connectorData, containsGdprContainer = _this$props.containsGdprContainer, errorState = _this$props.errorState, fields = _this$props.fields, fieldData = _this$props.fieldData, fieldObject = _this$props.fieldObject, formId = _this$props.formId, hasBeenValidated = _this$props.hasBeenValidated, id = _this$props.id, isDisabled = _this$props.isDisabled, isLastField = _this$props.isLastField, isRequired = _this$props.isRequired, isSet = _this$props.isSet, onCaptureInput = _this$props.onCaptureInput, onSearch = _this$props.onSearch, onSetActiveField = _this$props.onSetActiveField, onSetLastField = _this$props.onSetLastField, onValidateConnector = _this$props.onValidateConnector, onValidateField = _this$props.onValidateField, requiredFields = _this$props.requiredFields, vibrancy = _this$props.vibrancy; // $FlowFixMe: Ingore error. Flow isn't seeing the spread object as init values being set return /*#__PURE__*/react.createElement(fields_text, (0,esm_extends/* default */.Z)({}, fieldObject, { // Spread field object to pass all by default for available object values see /lib/types/forms {SetJsonField} activeField: activeField, connectorData: connectorData, containsGdprContainer: containsGdprContainer, errorState: errorState, fields: fields, fieldData: fieldData, formId: formId, hasBeenValidated: hasBeenValidated, pickList: picklist.filter(function (f) { return f.id === id; })[0], isDisabled: isDisabled, isRequired: isRequired, isLastField: isLastField, isSet: isSet, onCaptureInput: onCaptureInput, onSearch: onSearch, onSetActiveField: onSetActiveField, onSetLastField: onSetLastField, onValidateField: onValidateField, onValidateConnector: onValidateConnector, requiredFields: requiredFields, value: getFieldValueObject(fields, id).value, vibrancy: vibrancy })); } }]); return TextInputContainer; }(react.Component); var text_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId, id = ownProps.id; return { activeField: state.forms.activeFields[formId], containsGdprContainer: containsGdprField(id, state.forms.gdprField[formId]), connectorData: state.search.results && state.search.results[formId] && state.search.results[formId][id] ? state.search.results[formId][id] : [], errorState: checkIfHasError(id, state.forms.hasError[formId]), fields: state.forms.captureFields[formId], fieldData: state.forms.activeForms, isRequired: state.forms.requiredFields[formId] ? state.forms.requiredFields[formId].includes(id) : false, isSet: checkIfFieldIsSet(state.forms.captureFields[formId], id), pickList: picklist.filter(function (f) { return f.id === id; })[0], requiredFields: state.forms.requiredFields[formId], vibrancy: getFieldVibrancy(state.forms, formId) }; }; var text_mapDispatchToProps = function mapDispatchToProps(dispatch) { return { onSearch: function onSearch(endpoint, id, formId, value) { return dispatch(searchData(endpoint, id, formId, value)); }, onValidateConnector: function onValidateConnector(connectorData, fieldId, formId, value) { return dispatch(validateConnector(connectorData, fieldId, formId, value)); } }; }; /* harmony default export */ const containers_fields_text = ((0,es/* connect */.$j)(text_mapStateToProps, text_mapDispatchToProps)(text_TextInputContainer)); ;// CONCATENATED MODULE: ./src/containers/fields/multi-select.jsx function multi_select_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function multi_select_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? multi_select_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : multi_select_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function multi_select_createSuper(Derived) { var hasNativeReflectConstruct = multi_select_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function multi_select_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // scrict-local // Components // Helpers // Functions // Types var MultiSelectContainer = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(MultiSelectContainer, _React$Component); var _super = multi_select_createSuper(MultiSelectContainer); function MultiSelectContainer() { (0,classCallCheck/* default */.Z)(this, MultiSelectContainer); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(MultiSelectContainer, [{ key: "render", value: function render() { var _this$props = this.props, activeField = _this$props.activeField, captureFields = _this$props.captureFields, errorState = _this$props.errorState, hasBeenValidated = _this$props.hasBeenValidated, id = _this$props.id, isDisabled = _this$props.isDisabled, isRequired = _this$props.isRequired, isSet = _this$props.isSet, fields = _this$props.fields, fieldData = _this$props.fieldData, fieldObject = _this$props.fieldObject, formId = _this$props.formId, onCaptureInput = _this$props.onCaptureInput, onRemoveSelected = _this$props.onRemoveSelected, onSetActiveField = _this$props.onSetActiveField, onSetLastField = _this$props.onSetLastField, onValidateField = _this$props.onValidateField, requiredFields = _this$props.requiredFields; var options = fieldObject && fieldObject.options ? fieldObject.options : []; var capturedValue = captureFields.filter(function (f) { return f.id === id; })[0]; capturedValue = capturedValue && capturedValue.value ? capturedValue.value : null; var setValue = getFieldValueObject(fields, id).value; var defaultValue = fieldObject && fieldObject.defaultValue ? fieldObject.defaultValue : setValue; // $FlowFixMe: Ingore error. Flow isn't seeing the spread object as init values being set return /*#__PURE__*/react.createElement(multi_select, (0,esm_extends/* default */.Z)({}, fieldObject, { // Spread field object to pass all by default for available object values see /lib/types/forms {SetJsonField} activeField: activeField, defaultValue: defaultValue, errorState: errorState, fieldData: fieldData, formId: formId, hasBeenValidated: hasBeenValidated, isDisabled: isDisabled, isRequired: isRequired, options: options, onCaptureInput: onCaptureInput, onRemoveSelected: onRemoveSelected, onSetActiveField: onSetActiveField, onSetLastField: onSetLastField, onValidateField: onValidateField, requiredFields: requiredFields, isSet: isSet, value: capturedValue || setValue || defaultValue })); } }]); return MultiSelectContainer; }(react.Component); var multi_select_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId; var parentProps = text_mapStateToProps(state, ownProps); return multi_select_objectSpread(multi_select_objectSpread({}, parentProps), {}, { captureFields: state.forms.captureFields && state.forms.captureFields[formId], requiredFields: state.forms.requiredFields[formId] }); }; // mapStateToProps and mapDispatch to props are taking from the text container while they are similar. // These attributes should be split once there is a requirement to do more than the current state/dispatch /* harmony default export */ const fields_multi_select = ((0,es/* connect */.$j)(multi_select_mapStateToProps)(MultiSelectContainer)); ;// CONCATENATED MODULE: ./src/components/fields/select.jsx // Compnents // Styles // Helpers // Types var InputSelectComponent = function InputSelectComponent(_ref) { var activeField = _ref.activeField, classes = _ref.classes, customValidation = _ref.customValidation, defaultValue = _ref.defaultValue, displayText = _ref.displayText, errorState = _ref.errorState, formId = _ref.formId, hasBeenValidated = _ref.hasBeenValidated, id = _ref.id, isDisabled = _ref.isDisabled, isRequired = _ref.isRequired, isSet = _ref.isSet, name = _ref.name, options = _ref.options, onCaptureInput = _ref.onCaptureInput, onSetActiveField = _ref.onSetActiveField, onValidateField = _ref.onValidateField, placeholder = _ref.placeholder, requiredFields = _ref.requiredFields, value = _ref.value; return /*#__PURE__*/react.createElement(InputSelect, { className: "".concat(setActiveContainer(activeField, id)) }, /*#__PURE__*/react.createElement("select", { className: "form-group ".concat(setFieldClasses(classes)).concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated)), disabled: isDisabled, id: id, name: setFieldName(name, id), onBlur: function onBlur(e) { return onValidateField(customValidation, formId, isRequired, requiredFields, e.target); }, onChange: function onChange(e) { onCaptureInput(formId, e.target); if (isRequired) onValidateField(customValidation, formId, isRequired, requiredFields, e.target); }, onFocus: function onFocus(e) { return onSetActiveField(formId, e.target.id); }, required: isRequired && 'required', defaultValue: value !== null && value !== '' ? defaultValue : value, "data-currentlyselected": value }, !!options && [{ value: '', display: '- Please Select -' }].concat(options).map(function (o, index) { return /*#__PURE__*/react.createElement("option", { key: index, value: o.value }, o.display); })), /*#__PURE__*/react.createElement(InputArrow, { className: "arr" }), /*#__PURE__*/react.createElement(fields_placeholder, { className: "select-placeholder", errorState: errorState, id: id, isSet: isSet, displayText: displayText, placeholder: placeholder, required: isRequired, setClasses: "select-placeholder", hasBeenValidated: hasBeenValidated }), errorState && /*#__PURE__*/react.createElement(ErrorMessage, { className: "select-error-alert" }, errorState.message)); }; /* harmony default export */ const fields_select = (InputSelectComponent); ;// CONCATENATED MODULE: ./src/containers/fields/select.jsx function select_createSuper(Derived) { var hasNativeReflectConstruct = select_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function select_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // scrict-local // Components // Helpers // Functions // Types var SelectContainer = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(SelectContainer, _React$Component); var _super = select_createSuper(SelectContainer); function SelectContainer() { (0,classCallCheck/* default */.Z)(this, SelectContainer); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(SelectContainer, [{ key: "render", value: function render() { var _this$props = this.props, activeField = _this$props.activeField, errorState = _this$props.errorState, hasBeenValidated = _this$props.hasBeenValidated, id = _this$props.id, isDisabled = _this$props.isDisabled, isRequired = _this$props.isRequired, isSet = _this$props.isSet, fields = _this$props.fields, fieldData = _this$props.fieldData, fieldObject = _this$props.fieldObject, formId = _this$props.formId, onCaptureInput = _this$props.onCaptureInput, onSetActiveField = _this$props.onSetActiveField, onSetLastField = _this$props.onSetLastField, onValidateField = _this$props.onValidateField, requiredFields = _this$props.requiredFields; var options = fieldObject && fieldObject.options ? fieldObject.options : []; var setValue = getFieldValueObject(fields, id).value; var defaultValue = fieldObject && fieldObject.defaultValue ? fieldObject.defaultValue : setValue; // $FlowFixMe: Ingore error. Flow isn't seeing the spread object as init values being set return /*#__PURE__*/react.createElement(fields_select, (0,esm_extends/* default */.Z)({}, fieldObject, { // Spread field object to pass all by default for available object values see /lib/types/forms {SetJsonField} activeField: activeField, defaultValue: defaultValue, errorState: errorState, fieldData: fieldData, formId: formId, hasBeenValidated: hasBeenValidated, isDisabled: isDisabled, isRequired: isRequired, options: options, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onSetLastField: onSetLastField, onValidateField: onValidateField, requiredFields: requiredFields, isSet: isSet, value: setValue || defaultValue })); } }]); return SelectContainer; }(react.Component); // mapStateToProps and mapDispatch to props are taking from the text container while they are similar. // These attributes should be split once there is a requirement to do more than the current state/dispatch /* harmony default export */ const containers_fields_select = ((0,es/* connect */.$j)(text_mapStateToProps)(SelectContainer)); ;// CONCATENATED MODULE: ./src/constants/countries.js var COUNTRIES = [{ name: 'United States', value: 'US' }, { name: 'United Kingdom', value: 'GB', emea: true, gdpr: true }, { name: 'Canada', value: 'CA', gdpr: true }, { name: 'India', value: 'IN' }, { name: 'Netherlands', value: 'NL', emea: true, gdpr: true }, { name: 'Australia', value: 'AU', gdpr: true }, { name: 'South Africa', value: 'ZA', emea: true }, { name: 'France', value: 'FR', emea: true, gdpr: true }, { name: 'Germany', value: 'DE', emea: true, gdpr: true }, { name: 'Singapore', value: 'SG', gdpr: true }, { name: 'Sweden', value: 'SE', emea: true, gdpr: true }, { name: 'Brazil', value: 'BR' }, { name: 'Afghanistan', value: 'AF' }, { name: 'Aland Islands', value: 'AX' }, { name: 'Albania', value: 'AL', emea: true }, { name: 'Algeria', value: 'DZ', emea: true }, { name: 'American Samoa', value: 'AS' }, { name: 'Andorra', value: 'AD', emea: true }, { name: 'Angola', value: 'AO', emea: true }, { name: 'Anguilla', value: 'AI' }, { name: 'Antarctica', value: 'AQ' }, { name: 'Antigua and Barbuda', value: 'AG' }, { name: 'Argentina', value: 'AR' }, { name: 'Armenia', value: 'AM' }, { name: 'Aruba', value: 'AW' }, { name: 'Austria', value: 'AT', emea: true, gdpr: true }, { name: 'Azerbaijan', value: 'AZ' }, { name: 'Bahamas', value: 'BS' }, { name: 'Bahrain', value: 'BH', emea: true }, { name: 'Bangladesh', value: 'BD' }, { name: 'Barbados', value: 'BB' }, { name: 'Belarus', value: 'BY', emea: true }, { name: 'Belgium', value: 'BE', emea: true, gdpr: true }, { name: 'Belize', value: 'BZ' }, { name: 'Benin', value: 'BJ', emea: true }, { name: 'Bermuda', value: 'BM' }, { name: 'Bhutan', value: 'BT' }, { name: 'Bolivia', value: 'BO' }, { name: 'Bosnia and Herzegovina', value: 'BA', emea: true }, { name: 'Botswana', value: 'BW', emea: true }, { name: 'Bouvet Island', value: 'BV' }, { name: 'Brit/Indian Ocean Terr.', value: 'IO' }, { name: 'Brunei Darussalam', value: 'BN' }, { name: 'Bulgaria', value: 'BG', emea: true, gdpr: true }, { name: 'Burkina Faso', value: 'BF', emea: true }, { name: 'Burundi', value: 'BI', emea: true }, { name: 'Cambodia', value: 'KH' }, { name: 'Cameroon', value: 'CM', emea: true }, { name: 'Cape Verde', value: 'CV', emea: true }, { name: 'Cayman Islands', value: 'KY' }, { name: 'Central African Republic', value: 'CF', emea: true }, { name: 'Chad', value: 'TD', emea: true }, { name: 'Chile', value: 'CL' }, { name: 'China', value: 'CN' }, { name: 'Christmas Island', value: 'CX' }, { name: 'Cocos (Keeling) Islands', value: 'CC' }, { name: 'Colombia', value: 'CO' }, { name: 'Comoros', value: 'KM', emea: true }, { name: 'Congo', value: 'CG', emea: true }, { name: 'Congo, The Dem. Republic Of', value: 'CD' }, { name: 'Cook Islands', value: 'CK' }, { name: 'Costa Rica', value: 'CR' }, { name: 'Côte D\'Ivore', value: 'CI', emea: true }, { name: 'Croatia', value: 'HR', emea: true, gdpr: true }, { name: 'Cyprus', value: 'CY', emea: true, gdpr: true }, { name: 'Czech Republic', value: 'CZ', emea: true, gdpr: true }, { name: 'Denmark', value: 'DK', emea: true, gdpr: true }, { name: 'Djibouti', value: 'DJ', emea: true }, { name: 'Dominica', value: 'DM' }, { name: 'Dominican Republic', value: 'DO' }, { name: 'Ecuador', value: 'EC' }, { name: 'Egypt', value: 'EG', emea: true }, { name: 'El Salvador', value: 'SV' }, { name: 'Equatorial Guinea', value: 'GQ', emea: true }, { name: 'Eritrea', value: 'ER', emea: true }, { name: 'Estonia', value: 'EE', emea: true, gdpr: true }, { name: 'Ethiopia', value: 'ET', emea: true }, { name: 'Falkland Islands', value: 'FK' }, { name: 'Faroe Islands', value: 'FO', emea: true }, { name: 'Fiji', value: 'FJ' }, { name: 'Finland', value: 'FI', emea: true, gdpr: true }, { name: 'French Guiana', value: 'GF' }, { name: 'French Polynesia', value: 'PF' }, { name: 'French Southern Terr.', value: 'TF' }, { name: 'Gabon', value: 'GA', emea: true }, { name: 'Gambia', value: 'GM', emea: true }, { name: 'Georgia', value: 'GE', emea: true }, { name: 'Ghana', value: 'GH', emea: true }, { name: 'Gibraltar', value: 'GI', emea: true }, { name: 'Greece', value: 'GR', emea: true, gdpr: true }, { name: 'Greenland', value: 'GL' }, { name: 'Grenada', value: 'GD' }, { name: 'Guadeloupe', value: 'GP' }, { name: 'Guam', value: 'GU' }, { name: 'Guatemala', value: 'GT' }, { name: 'Guinea', value: 'GN', emea: true }, { name: 'Guinea-Bissau', value: 'GW' }, { name: 'Guyana', value: 'GY' }, { name: 'Haiti', value: 'HT' }, { name: 'Heard/McDonald Isls.', value: 'HM' }, { name: 'Honduras', value: 'HN' }, { name: 'Hong Kong', value: 'HK' }, { name: 'Hungary', value: 'HU', emea: true, gdpr: true }, { name: 'Iceland', value: 'IS', emea: true }, { name: 'Indonesia', value: 'ID' }, { name: 'Iraq', value: 'IQ', emea: true }, { name: 'Ireland', value: 'IE', emea: true, gdpr: true }, { name: 'Israel', value: 'IL', emea: true }, { name: 'Italy', value: 'IT', emea: true, gdpr: true }, { name: 'Jamaica', value: 'JM' }, { name: 'Japan', value: 'JP' }, { name: 'Jordan', value: 'JO', emea: true }, { name: 'Kazakhstan', value: 'KZ' }, { name: 'Kenya', value: 'KE', emea: true }, { name: 'Kiribati', value: 'KI' }, { name: 'Korea (South)', value: 'KR' }, { name: 'Kuwait', value: 'KW', emea: true }, { name: 'Kyrgyzstan', value: 'KG' }, { name: 'Laos', value: 'LA' }, { name: 'Latvia', value: 'LV', emea: true, gdpr: true }, { name: 'Lebanon', value: 'LB', emea: true }, { name: 'Lesotho', value: 'LS', emea: true }, { name: 'Liberia', value: 'LR', emea: true }, { name: 'Libya', value: 'LY', emea: true }, { name: 'Liechtenstein', value: 'LI', emea: true }, { name: 'Lithuania', value: 'LT', emea: true, gdpr: true }, { name: 'Luxembourg', value: 'LU', emea: true, gdpr: true }, { name: 'Macau', value: 'MO' }, { name: 'Macedonia', value: 'MK', emea: true }, { name: 'Madagascar', value: 'MG', emea: true }, { name: 'Malawi', value: 'MW', emea: true }, { name: 'Malaysia', value: 'MY' }, { name: 'Maldives', value: 'MV' }, { name: 'Mali', value: 'ML', emea: true }, { name: 'Malta', value: 'MT', emea: true, gdpr: true }, { name: 'Marshall Islands', value: 'MH' }, { name: 'Martinique', value: 'MQ' }, { name: 'Mauritania', value: 'MR', emea: true }, { name: 'Mauritius', value: 'MU', emea: true }, { name: 'Mayotte', value: 'YT' }, { name: 'Mexico', value: 'MX' }, { name: 'Micronesia', value: 'FM' }, { name: 'Moldova', value: 'MD', emea: true }, { name: 'Monaco', value: 'MC', emea: true }, { name: 'Mongolia', value: 'MN' }, { name: 'Montenegro', value: 'ME', emea: true }, { name: 'Montserrat', value: 'MS' }, { name: 'Morocco', value: 'MA', emea: true }, { name: 'Mozambique', value: 'MZ', emea: true }, { name: 'Myanmar', value: 'MM' }, { name: 'N. Mariana Isls.', value: 'MP' }, { name: 'Namibia', value: 'NA', emea: true }, { name: 'Nauru', value: 'NR' }, { name: 'Nepal', value: 'NP' }, { name: 'Netherlands Antilles', value: 'AN' }, { name: 'New Caledonia', value: 'NC' }, { name: 'New Zealand', value: 'NZ', gdpr: true }, { name: 'Nicaragua', value: 'NI' }, { name: 'Niger', value: 'NE', emea: true }, { name: 'Nigeria', value: 'NG', emea: true }, { name: 'Niue', value: 'NU' }, { name: 'Norfolk Island', value: 'NF' }, { name: 'Norway', value: 'NO', emea: true }, { name: 'Oman', value: 'OM', emea: true }, { name: 'Pakistan', value: 'PK' }, { name: 'Palau', value: 'PW' }, { name: 'Palestinian Territory, Occupie', value: 'PS', emea: true }, { name: 'Panama', value: 'PA' }, { name: 'Papua New Guinea', value: 'PG' }, { name: 'Paraguay', value: 'PY' }, { name: 'Peru', value: 'PE' }, { name: 'Philippines', value: 'PH' }, { name: 'Pitcairn', value: 'PN' }, { name: 'Poland', value: 'PL', emea: true, gdpr: true }, { name: 'Portugal', value: 'PT', emea: true, gdpr: true }, { name: 'Puerto Rico', value: 'PR' }, { name: 'Qatar', value: 'QA', emea: true }, { name: 'Reunion', value: 'RE' }, { name: 'Romania', value: 'RO', emea: true, gdpr: true }, { name: 'Russian Federation', value: 'RU' }, { name: 'Rwanda', value: 'RW', emea: true }, { name: 'Saint Kitts and Nevis', value: 'KN' }, { name: 'Saint Lucia', value: 'LC' }, { name: 'Samoa', value: 'WS' }, { name: 'San Marino', value: 'SM', emea: true }, { name: 'Sao Tome/Principe', value: 'ST', emea: true }, { name: 'Saudi Arabia', value: 'SA', emea: true }, { name: 'Senegal', value: 'SN', emea: true }, { name: 'Serbia', value: 'RS', emea: true }, { name: 'Seychelles', value: 'SC' }, { name: 'Sierra Leone', value: 'SL' }, { name: 'Slovak Republic', value: 'SK', emea: true, gdpr: true }, { name: 'Slovenia', value: 'SI', emea: true, gdpr: true }, { name: 'Solomon Islands', value: 'SB' }, { name: 'Somalia', value: 'SO', emea: true }, { name: 'Spain', value: 'ES', emea: true, gdpr: true }, { name: 'Sri Lanka', value: 'LK' }, { name: 'St. Helena', value: 'SH' }, { name: 'St. Pierre and Miquelon', value: 'PM' }, { name: 'St. Vincent and Grenadines', value: 'VC' }, { name: 'Sudan', value: 'SD', emea: true }, { name: 'Suriname', value: 'SR' }, { name: 'Svalbard/Jan Mayen Isls.', value: 'SJ' }, { name: 'Swaziland', value: 'SZ', emea: true }, { name: 'Switzerland', value: 'CH', emea: true }, { name: 'Taiwan', value: 'TW' }, { name: 'Tajikistan', value: 'TJ' }, { name: 'Tanzania', value: 'TZ', emea: true }, { name: 'Thailand', value: 'TH' }, { name: 'Timor-Leste', value: 'TL' }, { name: 'Togo', value: 'TG', emea: true }, { name: 'Tokelau', value: 'TK' }, { name: 'Tonga', value: 'TO' }, { name: 'Trinidad and Tobago', value: 'TT' }, { name: 'Tunisia', value: 'TN', emea: true }, { name: 'Turkey', value: 'TR', emea: true }, { name: 'Turkmenistan', value: 'TM' }, { name: 'Turks/Caicos Isls.', value: 'TC' }, { name: 'Tuvalu', value: 'TV' }, { name: 'Uganda', value: 'UG', emea: true }, { name: 'Ukraine', value: 'UA', emea: true }, { name: 'United Arab Emirates', value: 'AE', emea: true }, { name: 'US Minor Outlying Is.', value: 'UM' }, { name: 'Uruguay', value: 'UY' }, { name: 'Uzbekistan', value: 'UZ' }, { name: 'Vanuatu', value: 'VU' }, { name: 'Vatican City', value: 'VA', emea: true }, { name: 'Venezuela', value: 'VE' }, { name: 'Viet Nam', value: 'VN' }, { name: 'Virgin Islands (British)', value: 'VG' }, { name: 'Virgin Islands (U.S.)', value: 'VI' }, { name: 'Wallis/Futuna Isls.', value: 'WF' }, { name: 'Western Sahara', value: 'EH', emea: true }, { name: 'Yemen', value: 'YE', emea: true }, { name: 'Zambia', value: 'ZM', emea: true }, { name: 'Zimbabwe', value: 'ZW', emea: true }]; /* harmony default export */ const countries = (COUNTRIES); ;// CONCATENATED MODULE: ./src/components/fields/country.jsx // Data // Compnents // Styles // Helpers // Types var CountryPickList = function CountryPickList(_ref) { var activeField = _ref.activeField, classes = _ref.classes, customValidation = _ref.customValidation, displayText = _ref.displayText, errorState = _ref.errorState, formId = _ref.formId, hasBeenValidated = _ref.hasBeenValidated, id = _ref.id, isDisabled = _ref.isDisabled, isRequired = _ref.isRequired, isSet = _ref.isSet, name = _ref.name, onSetActiveField = _ref.onSetActiveField, onValidateField = _ref.onValidateField, placeholder = _ref.placeholder, requiredFields = _ref.requiredFields, value = _ref.value; return /*#__PURE__*/react.createElement(InputSelect, { className: "".concat(setActiveContainer(activeField, id)) }, /*#__PURE__*/react.createElement("select", { className: "form-group ".concat(setFieldClasses(classes)).concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated)), disabled: isDisabled, id: id, name: setFieldName(name, id), onBlur: function onBlur(e) { return onValidateField(customValidation, formId, isRequired, requiredFields, e.target); } // Redundant but catches for validation if there is intl phone field on the form , onChange: function onChange(e) { return onValidateField(customValidation, formId, isRequired, requiredFields, e.target); }, onFocus: function onFocus(e) { return onSetActiveField(formId, e.target.id); }, required: isRequired && 'required', defaultValue: '', value: value }, /*#__PURE__*/react.createElement("option", { value: "" }, "- Please select -"), countries.map(function (o, index) { return /*#__PURE__*/react.createElement("option", { key: index, value: o.value }, o.name); })), /*#__PURE__*/react.createElement(InputArrow, { className: "arr" }), /*#__PURE__*/react.createElement(fields_placeholder, { className: "select-placeholder", errorState: errorState, id: id, isSet: isSet, displayText: displayText, placeholder: placeholder, required: isRequired, setClasses: "select-placeholder", hasBeenValidated: hasBeenValidated }), errorState && /*#__PURE__*/react.createElement(ErrorMessage, { className: "select-error-alert" }, errorState.message)); }; /* harmony default export */ const country = (CountryPickList); ;// CONCATENATED MODULE: ./src/containers/fields/country.jsx function country_createSuper(Derived) { var hasNativeReflectConstruct = country_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function country_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // scrict-local // Components // Helpers // Types var CountrySelect = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(CountrySelect, _React$Component); var _super = country_createSuper(CountrySelect); function CountrySelect() { (0,classCallCheck/* default */.Z)(this, CountrySelect); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(CountrySelect, [{ key: "render", value: function render() { var _this$props = this.props, activeField = _this$props.activeField, errorState = _this$props.errorState, hasBeenValidated = _this$props.hasBeenValidated, id = _this$props.id, isDisabled = _this$props.isDisabled, isRequired = _this$props.isRequired, isSet = _this$props.isSet, isoCode = _this$props.isoCode, fields = _this$props.fields, fieldData = _this$props.fieldData, fieldObject = _this$props.fieldObject, formId = _this$props.formId, onCaptureInput = _this$props.onCaptureInput, onSetActiveField = _this$props.onSetActiveField, onSetLastField = _this$props.onSetLastField, onValidateField = _this$props.onValidateField, requiredFields = _this$props.requiredFields; var options = fieldObject && fieldObject.options ? fieldObject.options : []; var setValue = getFieldValueObject(fields, id).value; if ((!setValue || setValue && setValue === '') && isoCode) { setTimeout(function () { onCaptureInput(formId, { id: id, value: isoCode, type: 'select' }); onValidateField(/^[a-z ]/i, formId, isRequired, requiredFields, { id: id, value: isoCode, type: 'select' }); }, 500); } // $FlowFixMe: Ingore error. Flow isn't seeing the spread object as init values being set return /*#__PURE__*/react.createElement(country, (0,esm_extends/* default */.Z)({}, fieldObject, { // Spread field object to pass all by default for available object values see /lib/types/forms {SetJsonField} activeField: activeField, errorState: errorState, fieldData: fieldData, formId: formId, hasBeenValidated: hasBeenValidated, isDisabled: isDisabled, isRequired: isRequired, options: options, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onSetLastField: onSetLastField, onValidateField: onValidateField, requiredFields: requiredFields, isSet: isSet, value: setValue })); } }]); return CountrySelect; }(react.Component); var country_mapStateToProps = function mapStateToProps(state, ownProps) { var _state$maxmind, _state$maxmind$INSIGH, _state$maxmind$INSIGH2; var formId = ownProps.formId, id = ownProps.id; var maxmindEnabledFlag = window.localStorage.getItem('avlrMaxmindEnabled'); return { activeField: state.forms.activeFields[formId], containsGdprContainer: containsGdprField(id, state.forms.gdprField[formId]), errorState: checkIfHasError(id, state.forms.hasError[formId]), fields: state.forms.captureFields[formId], fieldData: state.forms.activeForms, isRequired: state.forms.requiredFields[formId] ? state.forms.requiredFields[formId].includes(id) : false, isSet: checkIfFieldIsSet(state.forms.captureFields[formId], id), // $FlowFixMe isoCode: !maxmindEnabledFlag || maxmindEnabledFlag === 'true' ? (_state$maxmind = state.maxmind) === null || _state$maxmind === void 0 ? void 0 : (_state$maxmind$INSIGH = _state$maxmind.INSIGHTS) === null || _state$maxmind$INSIGH === void 0 ? void 0 : (_state$maxmind$INSIGH2 = _state$maxmind$INSIGH.country) === null || _state$maxmind$INSIGH2 === void 0 ? void 0 : _state$maxmind$INSIGH2.iso_code : null, requiredFields: state.forms.requiredFields[formId] }; }; // mapStateToProps and mapDispatch to props are taking from the text container while they are similar. // These attributes should be split once there is a requirement to do more than the current state/dispatch /* harmony default export */ const fields_country = ((0,es/* connect */.$j)(country_mapStateToProps)(CountrySelect)); ;// CONCATENATED MODULE: ./src/components/fields/textarea.jsx // Components // Styles // Helpers // Types var textarea_InputTextComponent = function InputTextComponent(_ref) { var activeField = _ref.activeField, classes = _ref.classes, customValidation = _ref.customValidation, description = _ref.description, displayText = _ref.displayText, errorState = _ref.errorState, formId = _ref.formId, id = _ref.id, isDisabled = _ref.isDisabled, name = _ref.name, placeholder = _ref.placeholder, onCaptureInput = _ref.onCaptureInput, onSetActiveField = _ref.onSetActiveField, onValidateField = _ref.onValidateField, hasBeenValidated = _ref.hasBeenValidated, isRequired = _ref.isRequired, isSet = _ref.isSet, required = _ref.required, requiredFields = _ref.requiredFields, type = _ref.type, value = _ref.value; return /*#__PURE__*/react.createElement(InputContainer, { className: "".concat(setActiveContainer(activeField, id)) }, /*#__PURE__*/react.createElement(TextArea, { className: "".concat(setFieldClasses(classes)).concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated)), disabled: isDisabled, defaultValue: value, id: id, name: setFieldName(name, id), onBlur: function onBlur(e) { return onValidateField(customValidation, formId, isRequired, requiredFields, e.target); }, onChange: function onChange(e) { return onCaptureInput(formId, e.target); }, onFocus: function onFocus(e) { return onSetActiveField(formId, e.target.id); }, type: type || 'textarea', required: isRequired && 'required', customValidation: customValidation }), /*#__PURE__*/react.createElement(fields_placeholder, { errorState: errorState, id: id, isSet: isSet, displayText: displayText, placeholder: placeholder, positionTop: true, required: required, hasBeenValidated: hasBeenValidated }), errorState && /*#__PURE__*/react.createElement(ErrorMessage, { "aria-live": "assertive", alert: "true" }, errorState.message), description && Array.isArray(description) ? description.map(function (d, i) { return /*#__PURE__*/react.createElement("p", { key: i, className: "desc-p" }, d); }) : /*#__PURE__*/react.createElement("p", { className: "desc-p" }, description)); }; /* harmony default export */ const fields_textarea = (textarea_InputTextComponent); ;// CONCATENATED MODULE: ./src/containers/fields/textarea.jsx function textarea_createSuper(Derived) { var hasNativeReflectConstruct = textarea_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function textarea_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // scrict-local // Components // Helpers // Types var TextareaInputContainer = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(TextareaInputContainer, _React$Component); var _super = textarea_createSuper(TextareaInputContainer); function TextareaInputContainer() { (0,classCallCheck/* default */.Z)(this, TextareaInputContainer); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(TextareaInputContainer, [{ key: "render", value: function render() { var _this$props = this.props, activeField = _this$props.activeField, errorState = _this$props.errorState, fields = _this$props.fields, fieldData = _this$props.fieldData, fieldObject = _this$props.fieldObject, formId = _this$props.formId, hasBeenValidated = _this$props.hasBeenValidated, id = _this$props.id, isDisabled = _this$props.isDisabled, isRequired = _this$props.isRequired, isSet = _this$props.isSet, onCaptureInput = _this$props.onCaptureInput, onSetActiveField = _this$props.onSetActiveField, onSetLastField = _this$props.onSetLastField, onValidateField = _this$props.onValidateField, requiredFields = _this$props.requiredFields; // $FlowFixMe: Ingore error. Flow isn't seeing the spread object as init values being set return /*#__PURE__*/react.createElement(fields_textarea, (0,esm_extends/* default */.Z)({}, fieldObject, { // Spread field object to pass all by default for available object values see /lib/types/forms {SetJsonField} activeField: activeField, errorState: errorState, fields: fields, fieldData: fieldData, formId: formId, hasBeenValidated: hasBeenValidated, isDisabled: isDisabled, isRequired: isRequired, isSet: isSet, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onSetLastField: onSetLastField, onValidateField: onValidateField, requiredFields: requiredFields, value: getFieldValueObject(fields, id).value })); } }]); return TextareaInputContainer; }(react.Component); /* harmony default export */ const containers_fields_textarea = ((0,es/* connect */.$j)(text_mapStateToProps)(TextareaInputContainer)); // EXTERNAL MODULE: ./node_modules/react-intl-phone3/dist/lib.js var lib = __webpack_require__(5761); var lib_default = /*#__PURE__*/__webpack_require__.n(lib); // EXTERNAL MODULE: ./node_modules/react-intl-phone3/dist/style.css var style = __webpack_require__(1279); ;// CONCATENATED MODULE: ./src/components/fields/intl-phone.jsx // CSS // Components // Styles // Helpers // Types // import type { InputEvent } from '../../lib/types'; var InputPhoneComponent = function InputPhoneComponent(_ref) { var classes = _ref.classes, displayText = _ref.displayText, errorState = _ref.errorState, id = _ref.id, name = _ref.name, placeholder = _ref.placeholder, onHandleChange = _ref.onHandleChange, onValidateIntlPhone = _ref.onValidateIntlPhone, hasBeenValidated = _ref.hasBeenValidated, isDefaultCountry = _ref.isDefaultCountry, isDisabled = _ref.isDisabled, isRequired = _ref.isRequired, isSet = _ref.isSet, type = _ref.type, value = _ref.value; return /*#__PURE__*/react.createElement(IntlTextInputContainer, { className: "isSet ".concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated)) }, /*#__PURE__*/react.createElement((lib_default()), { inputExtraProps: { autoFocus: false, id: id, name: setFieldName(name, id), type: type || 'tel' }, id: id, country: isDefaultCountry, disabled: isDisabled, autoSelectCountry: false, autoFormat: false, autoPlaceholder: false, countryCodeEditable: false, containerClass: "isSet react-tel-input form-control ".concat(setFieldClasses(classes)).concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated)), inputClass: "isSet ".concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated)), defaultCountry: isDefaultCountry, disableAreaCodes: true, disableCountryCode: false, disableSearchIcon: true, excludeCountries: ['cu', 'ir', 'kp', 'sy'], fieldId: id, fieldName: setFieldName(name, id), format: false, onBlur: function onBlur(e) { return onValidateIntlPhone(e.target); }, onChange: onHandleChange, placeholder: placeholder, required: isRequired && 'required', value: value }), /*#__PURE__*/react.createElement(fields_placeholder, { setClasses: "phone intl-phone-placeholder", errorState: errorState, id: id, isSet: isSet, displayText: displayText, placeholder: placeholder, required: isRequired, hasBeenValidated: hasBeenValidated }), errorState && /*#__PURE__*/react.createElement(ErrorMessage, { className: "intl-phone-error", "aria-live": "assertive", alert: "true" }, errorState.message)); }; /* harmony default export */ const intl_phone = (InputPhoneComponent); ;// CONCATENATED MODULE: ./src/containers/fields/intl-phone.jsx function intl_phone_createSuper(Derived) { var hasNativeReflectConstruct = intl_phone_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function intl_phone_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // scrict-local // For more use and information; review: https://patw0929.github.io/react-intl-tel-input/ // Components // Helpers // Actions // Types var PhoneInputContainer = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(PhoneInputContainer, _React$Component); var _super = intl_phone_createSuper(PhoneInputContainer); function PhoneInputContainer() { var _this; (0,classCallCheck/* default */.Z)(this, PhoneInputContainer); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); (0,defineProperty/* default */.Z)((0,assertThisInitialized/* default */.Z)(_this), "onValidateIntlPhone", function (event) { var _this$props = _this.props, dialCode = _this$props.dialCode, customValidation = _this$props.customValidation, isRequired = _this$props.isRequired, onValidateIntlPhoneField = _this$props.onValidateIntlPhoneField, requiredFields = _this$props.requiredFields; onValidateIntlPhoneField(customValidation, dialCode, isRequired, requiredFields, event); }); (0,defineProperty/* default */.Z)((0,assertThisInitialized/* default */.Z)(_this), "onHandleChange", function (value, data) { var _this$props2 = _this.props, customValidation = _this$props2.customValidation, id = _this$props2.id, isRequired = _this$props2.isRequired, onCaptureDialCode = _this$props2.onCaptureDialCode, onCaptureIntlPhone = _this$props2.onCaptureIntlPhone, onValidateIntlPhoneField = _this$props2.onValidateIntlPhoneField, requiredFields = _this$props2.requiredFields; var dialCode = data.dialCode; var event = { id: id, type: 'text', value: value }; onCaptureDialCode(dialCode.replace(/D/g, '')); onCaptureIntlPhone(data, _this.props.id, value); onValidateIntlPhoneField(customValidation, dialCode, isRequired, requiredFields, event); }); return _this; } (0,createClass/* default */.Z)(PhoneInputContainer, [{ key: "render", value: function render() { var _this$props3 = this.props, dialCode = _this$props3.dialCode, errorState = _this$props3.errorState, fields = _this$props3.fields, fieldData = _this$props3.fieldData, fieldObject = _this$props3.fieldObject, formId = _this$props3.formId, hasBeenValidated = _this$props3.hasBeenValidated, id = _this$props3.id, isDisabled = _this$props3.isDisabled, isRequired = _this$props3.isRequired, isSet = _this$props3.isSet, isoCode = _this$props3.isoCode, onSetActiveField = _this$props3.onSetActiveField, requiredFields = _this$props3.requiredFields; var isDefaultCountry = checkDefaultIntlPhoneCountry(isoCode); setParentZindex(formId); // $FlowFixMe: Ingore error. Flow isn't seeing the spread object as init values being set return /*#__PURE__*/react.createElement(intl_phone, (0,esm_extends/* default */.Z)({}, fieldObject, { // Spread field object to pass all by default for available object values see /lib/types/forms {SetJsonField} dialCode: dialCode, errorState: errorState, fields: fields, fieldData: fieldData, formId: formId, hasBeenValidated: hasBeenValidated, isDefaultCountry: isDefaultCountry, isDisabled: isDisabled, isRequired: isRequired, isSet: isSet, onHandleChange: this.onHandleChange, onSetActiveField: onSetActiveField, onValidateIntlPhone: this.onValidateIntlPhone, requiredFields: requiredFields, value: getFieldValueObject(fields, id).value })); } }]); return PhoneInputContainer; }(react.Component); var intl_phone_mapStateToProps = function mapStateToProps(state, ownProps) { var _state$maxmind, _state$maxmind$INSIGH, _state$maxmind$INSIGH2; var formId = ownProps.formId; var maxmindEnabledFlag = window.localStorage.getItem('avlrMaxmindEnabled'); return { dialCode: state.forms.dialCode[formId] || '1', errorState: checkIfHasError(ownProps.id, state.forms.hasError[formId]), fields: state.forms.captureFields[formId], fieldData: state.forms.activeForms, isRequired: state.forms.requiredFields[formId] ? state.forms.requiredFields[formId].includes(ownProps.id) : false, isSet: checkIfFieldIsSet(state.forms.captureFields[formId], ownProps.id), // $FlowFixMe - Ignore Optional Chaining Warning isoCode: !maxmindEnabledFlag || maxmindEnabledFlag === 'true' ? (_state$maxmind = state.maxmind) === null || _state$maxmind === void 0 ? void 0 : (_state$maxmind$INSIGH = _state$maxmind.INSIGHTS) === null || _state$maxmind$INSIGH === void 0 ? void 0 : (_state$maxmind$INSIGH2 = _state$maxmind$INSIGH.country) === null || _state$maxmind$INSIGH2 === void 0 ? void 0 : _state$maxmind$INSIGH2.iso_code : 'us', requiredFields: state.forms.requiredFields[formId] }; }; var intl_phone_mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { var formId = ownProps.formId; return { onCaptureIntlPhone: function onCaptureIntlPhone(countryData, id, value) { return dispatch(captureIntlPhone(formId, countryData, id, value)); }, onCaptureDialCode: function onCaptureDialCode(dialCode) { return dispatch(captureDialCode(dialCode, formId)); }, onValidateIntlPhoneField: function onValidateIntlPhoneField(customValidation, dialCode, isRequired, requiredFields, value) { return validateIntlPhoneField(dispatch, customValidation, dialCode, formId, isRequired, requiredFields, value); } }; }; /* harmony default export */ const fields_intl_phone = ((0,es/* connect */.$j)(intl_phone_mapStateToProps, intl_phone_mapDispatchToProps)(PhoneInputContainer)); ;// CONCATENATED MODULE: ./src/constants/us-states-territories.js var states = [{ name: 'Alabama', abbr: 'AL' }, { name: 'Alaska', abbr: 'AK' }, { name: 'American Samoa', abbr: 'AS' }, { name: 'Arizona', abbr: 'AZ' }, { name: 'Arkansas', abbr: 'AR' }, { name: 'California', abbr: 'CA' }, { name: 'Colorado', abbr: 'CO' }, { name: 'Connecticut', abbr: 'CT' }, { name: 'Delaware', abbr: 'DE' }, { name: 'District Of Columbia', abbr: 'DC' }, { name: 'Federated States Of Micronesia', abbr: 'FM' }, { name: 'Florida', abbr: 'FL' }, { name: 'Georgia', abbr: 'GA' }, { name: 'Guam', abbr: 'GU' }, { name: 'Hawaii', abbr: 'HI' }, { name: 'Idaho', abbr: 'ID' }, { name: 'Illinois', abbr: 'IL' }, { name: 'Indiana', abbr: 'IN' }, { name: 'Iowa', abbr: 'IA' }, { name: 'Kansas', abbr: 'KS' }, { name: 'Kentucky', abbr: 'KY' }, { name: 'Louisiana', abbr: 'LA' }, { name: 'Maine', abbr: 'ME' }, { name: 'Marshall Islands', abbr: 'MH' }, { name: 'Maryland', abbr: 'MD' }, { name: 'Massachusetts', abbr: 'MA' }, { name: 'Michigan', abbr: 'MI' }, { name: 'Minnesota', abbr: 'MN' }, { name: 'Mississippi', abbr: 'MS' }, { name: 'Missouri', abbr: 'MO' }, { name: 'Montana', abbr: 'MT' }, { name: 'Nebraska', abbr: 'NE' }, { name: 'Nevada', abbr: 'NV' }, { name: 'New Hampshire', abbr: 'NH' }, { name: 'New Jersey', abbr: 'NJ' }, { name: 'New Mexico', abbr: 'NM' }, { name: 'New York', abbr: 'NY' }, { name: 'North Carolina', abbr: 'NC' }, { name: 'North Dakota', abbr: 'ND' }, { name: 'Northern Mariana Islands', abbr: 'MP' }, { name: 'Ohio', abbr: 'OH' }, { name: 'Oklahoma', abbr: 'OK' }, { name: 'Oregon', abbr: 'OR' }, { name: 'Palau', abbr: 'PW' }, { name: 'Pennsylvania', abbr: 'PA' }, { name: 'Puerto Rico', abbr: 'PR' }, { name: 'Rhode Island', abbr: 'RI' }, { name: 'South Carolina', abbr: 'SC' }, { name: 'South Dakota', abbr: 'SD' }, { name: 'Tennessee', abbr: 'TN' }, { name: 'Texas', abbr: 'TX' }, { name: 'Utah', abbr: 'UT' }, { name: 'Vermont', abbr: 'VT' }, { name: 'Virgin Islands', abbr: 'VI' }, { name: 'Virginia', abbr: 'VA' }, { name: 'Washington', abbr: 'WA' }, { name: 'West Virginia', abbr: 'WV' }, { name: 'Wisconsin', abbr: 'WI' }, { name: 'Wyoming', abbr: 'WY' }]; /* harmony default export */ const us_states_territories = (states); ;// CONCATENATED MODULE: ./src/components/fields/state-select.jsx // Data // Compnents // Styles // Helpers // Types var state_select_options = [{ name: 'Please select -', abbr: '' }].concat(us_states_territories); var StateSelectList = function StateSelectList(_ref) { var activeField = _ref.activeField, classes = _ref.classes, customValidation = _ref.customValidation, defaultValue = _ref.defaultValue, displayText = _ref.displayText, errorState = _ref.errorState, formId = _ref.formId, hasBeenValidated = _ref.hasBeenValidated, id = _ref.id, isDisabled = _ref.isDisabled, isRequired = _ref.isRequired, isSet = _ref.isSet, name = _ref.name, onSetActiveField = _ref.onSetActiveField, onValidateField = _ref.onValidateField, placeholder = _ref.placeholder, requiredFields = _ref.requiredFields; return /*#__PURE__*/react.createElement(InputSelect, { className: "".concat(setActiveContainer(activeField, id)) }, /*#__PURE__*/react.createElement("select", { className: "form-group ".concat(setFieldClasses(classes)).concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated)), disabled: isDisabled, id: id, name: setFieldName(name, id), onChange: function onChange(e) { return onValidateField(customValidation, formId, isRequired, requiredFields, e.target); }, onFocus: function onFocus(e) { return onSetActiveField(formId, e.target.id); }, required: isRequired && 'required', value: defaultValue, "data-currentlyselected": defaultValue }, state_select_options.map(function (o, index) { return /*#__PURE__*/react.createElement("option", { key: index, value: o.abbr }, "".concat(o.abbr, " - ").concat(o.name)); })), /*#__PURE__*/react.createElement(InputArrow, { className: "arr" }), /*#__PURE__*/react.createElement(fields_placeholder, { className: "select-placeholder", errorState: errorState, id: id, isSet: isSet, displayText: displayText, placeholder: placeholder, required: isRequired, setClasses: "select-placeholder", hasBeenValidated: hasBeenValidated }), errorState && /*#__PURE__*/react.createElement(ErrorMessage, { className: "select-error-alert" }, errorState.message)); }; /* harmony default export */ const state_select = (StateSelectList); ;// CONCATENATED MODULE: ./src/containers/fields/state-select.jsx function state_select_createSuper(Derived) { var hasNativeReflectConstruct = state_select_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function state_select_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // scrict-local // Components // Helpers // Types var StateSelect = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(StateSelect, _React$Component); var _super = state_select_createSuper(StateSelect); function StateSelect() { (0,classCallCheck/* default */.Z)(this, StateSelect); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(StateSelect, [{ key: "render", value: function render() { var _this$props = this.props, activeField = _this$props.activeField, errorState = _this$props.errorState, hasBeenValidated = _this$props.hasBeenValidated, id = _this$props.id, isDisabled = _this$props.isDisabled, isRequired = _this$props.isRequired, isSet = _this$props.isSet, fields = _this$props.fields, fieldData = _this$props.fieldData, fieldObject = _this$props.fieldObject, formId = _this$props.formId, onCaptureInput = _this$props.onCaptureInput, onSetActiveField = _this$props.onSetActiveField, onSetLastField = _this$props.onSetLastField, onValidateField = _this$props.onValidateField, requiredFields = _this$props.requiredFields; var options = fieldObject && fieldObject.options ? fieldObject.options : []; var setValue = getFieldValueObject(fields, id).value; var setDefaultValue = fieldObject && fieldObject.defaultValue ? fieldObject.defaultValue : setValue; var defaultValue = setValue || setDefaultValue || ''; // $FlowFixMe: Ingore error. Flow isn't seeing the spread object as init values being set return /*#__PURE__*/react.createElement(state_select, (0,esm_extends/* default */.Z)({}, fieldObject, { // Spread field object to pass all by default for available object values see /lib/types/forms {SetJsonField} activeField: activeField, defaultValue: defaultValue, errorState: errorState, fieldData: fieldData, formId: formId, hasBeenValidated: hasBeenValidated, isDisabled: isDisabled, isRequired: isRequired, options: options, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onSetLastField: onSetLastField, onValidateField: onValidateField, requiredFields: requiredFields, isSet: isSet })); } }]); return StateSelect; }(react.Component); var state_select_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId, id = ownProps.id; return { activeField: state.forms.activeFields[formId], containsGdprContainer: containsGdprField(id, state.forms.gdprField[formId]), errorState: checkIfHasError(id, state.forms.hasError[formId]), fields: state.forms.captureFields[formId], fieldData: state.forms.activeForms, isRequired: state.forms.requiredFields[formId] ? state.forms.requiredFields[formId].includes(id) : false, isSet: checkIfFieldIsSet(state.forms.captureFields[formId], id), requiredFields: state.forms.requiredFields[formId] }; }; // mapStateToProps and mapDispatch to props are taking from the text container while they are similar. // These attributes should be split once there is a requirement to do more than the current state/dispatch /* harmony default export */ const fields_state_select = ((0,es/* connect */.$j)(state_select_mapStateToProps)(StateSelect)); ;// CONCATENATED MODULE: ./src/components/fields/terms-of-service.jsx // Components // Helpers // Types var TermsOfServiceComponent = function TermsOfServiceComponent(_ref) { var activeField = _ref.activeField, displayText = _ref.displayText, errorState = _ref.errorState, formId = _ref.formId, hasBeenValidated = _ref.hasBeenValidated, links = _ref.links, handleChange = _ref.handleChange, isDisabled = _ref.isDisabled, isRequired = _ref.isRequired, id = _ref.id, isSet = _ref.isSet, name = _ref.name, onSetActiveField = _ref.onSetActiveField; return /*#__PURE__*/react.createElement(CheckboxContainer, { className: "".concat(setActiveContainer(activeField, id)) }, /*#__PURE__*/react.createElement("label", null, /*#__PURE__*/react.createElement("input", { className: "".concat(setInputValidationClass(errorState, id, isSet, hasBeenValidated)), disabled: isDisabled, id: id, name: setFieldName(name, id), onChange: function onChange(e) { return handleChange(e.target); }, onFocus: function onFocus(e) { return onSetActiveField(formId, e.target.id); }, type: "checkbox", checked: isSet ? 'checked' : '' }), /*#__PURE__*/react.createElement("span", null, isRequired && '*', " ", displayText, " ", links && /*#__PURE__*/react.createElement(terms_of_service_links, { links: links }))), errorState && /*#__PURE__*/react.createElement(ErrorMessage, { className: "error-alert-container", "aria-live": "assertive", alert: "true", isCheckbox: true }, errorState.message)); }; /* harmony default export */ const terms_of_service = (TermsOfServiceComponent); ;// CONCATENATED MODULE: ./src/containers/fields/terms-of-service.jsx function terms_of_service_createSuper(Derived) { var hasNativeReflectConstruct = terms_of_service_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function terms_of_service_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Actions // Components // Helpers // Types var TermsOfService = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(TermsOfService, _React$Component); var _super = terms_of_service_createSuper(TermsOfService); function TermsOfService() { var _this; (0,classCallCheck/* default */.Z)(this, TermsOfService); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); (0,defineProperty/* default */.Z)((0,assertThisInitialized/* default */.Z)(_this), "handleChange", function (target) { var _this$props = _this.props, customValidation = _this$props.customValidation, formId = _this$props.formId, id = _this$props.id, isRequired = _this$props.isRequired, onCaptureInput = _this$props.onCaptureInput, onValidateField = _this$props.onValidateField, requiredFields = _this$props.requiredFields; var value = _this.props.fieldObject && _this.props.fieldObject.value ? _this.props.fieldObject.value : '1'; onCaptureInput(formId, { id: id, type: 'checkbox', value: value, checked: target.checked }); onValidateField(customValidation, formId, isRequired, requiredFields, { checked: target.checked, id: id, type: 'checkbox', value: value }); }); return _this; } (0,createClass/* default */.Z)(TermsOfService, [{ key: "render", value: function render() { var _this$props2 = this.props, activeField = _this$props2.activeField, customValidation = _this$props2.customValidation, errorState = _this$props2.errorState, fields = _this$props2.fields, fieldData = _this$props2.fieldData, fieldObject = _this$props2.fieldObject, formId = _this$props2.formId, hasBeenValidated = _this$props2.hasBeenValidated, isRequired = _this$props2.isRequired, id = _this$props2.id, isDisabled = _this$props2.isDisabled, isSet = _this$props2.isSet, name = _this$props2.name, onSetActiveField = _this$props2.onSetActiveField, requiredFields = _this$props2.requiredFields, onCaptureInput = _this$props2.onCaptureInput; // $FlowFixMe: Ingore error. Flow isn't seeing the spread object as init values being set return /*#__PURE__*/react.createElement(terms_of_service, (0,esm_extends/* default */.Z)({}, fieldObject, { activeField: activeField, customValidation: customValidation, errorState: errorState, fields: fields, fieldData: fieldData, formId: formId, hasBeenValidated: hasBeenValidated, isDisabled: isDisabled, isRequired: isRequired, id: id, isSet: isSet, name: name, onSetActiveField: onSetActiveField, handleChange: this.handleChange, requiredFields: requiredFields, onCaptureInput: onCaptureInput })); } }]); return TermsOfService; }(react.Component); var terms_of_service_mapDispatchToProps = function mapDispatchToProps(dispatch) { return { onSetActiveField: function onSetActiveField(formId, id) { dispatch(setActiveField(formId, id)); }, onCaptureInput: function onCaptureInput(formId, inputTarget) { return dispatch(captureInput(dispatch, formId, inputTarget)); }, onValidateField: function onValidateField(customValidation, formId, isRequired, requiredFields, target) { return validateField(dispatch, customValidation, formId, isRequired, requiredFields, target); } }; }; var terms_of_service_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId, id = ownProps.id; return { activeField: state.forms.activeFields[formId], containsGdprContainer: containsGdprField(id, state.forms.gdprField[formId]), errorState: checkIfHasError(id, state.forms.hasError[formId]), fields: state.forms.captureFields[formId], fieldData: state.forms.activeForms, isRequired: state.forms.requiredFields[formId] ? state.forms.requiredFields[formId].includes(id) : false, isSet: checkIfFieldIsSet(state.forms.captureFields[formId], id), requiredFields: state.forms.requiredFields[formId] }; }; /* harmony default export */ const fields_terms_of_service = ((0,es/* connect */.$j)(terms_of_service_mapStateToProps, terms_of_service_mapDispatchToProps)(TermsOfService)); // EXTERNAL MODULE: ./node_modules/@pactsafe/pactsafe-react-sdk/es/index.js var pactsafe_react_sdk_es = __webpack_require__(4451); ;// CONCATENATED MODULE: ./src/components/fields/clickwrap.jsx // $FlowFixMe // Types var ClickwrapComponent = function ClickwrapComponent(_ref) { var activeField = _ref.activeField, errorState = _ref.errorState, accessId = _ref.accessId, groupKey = _ref.groupKey, clickWrapStyle = _ref.clickWrapStyle, sendConfirmationEmail = _ref.sendConfirmationEmail, signerIdSelector = _ref.signerIdSelector, handleChange = _ref.handleChange, id = _ref.id; return /*#__PURE__*/react.createElement(CheckboxContainer, { id: "clickwrap-container", className: "".concat(setActiveContainer(activeField, id)) }, /*#__PURE__*/react.createElement(pactsafe_react_sdk_es/* PSClickWrap */.x, { accessId: accessId, groupKey: groupKey, containerId: "clickwrap-container", confirmationEmail: true, signerIdSelector: signerIdSelector, testMode: "production" !== 'production', onChecked: function onChecked(el) { return handleChange(el); }, onUnchecked: function onUnchecked(el) { return handleChange(el); } }), errorState && /*#__PURE__*/react.createElement(ErrorMessage, { className: "error-alert-container", "aria-live": "assertive", alert: "true", isCheckbox: true }, errorState.message)); }; /* harmony default export */ const fields_clickwrap = ((/* unused pure expression or super */ null && (ClickwrapComponent))); ;// CONCATENATED MODULE: ./src/containers/fields/clickwrap-terms.jsx function clickwrap_terms_createSuper(Derived) { var hasNativeReflectConstruct = clickwrap_terms_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function clickwrap_terms_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Actions // Helpers // Types var Clickwrap = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(Clickwrap, _React$Component); var _super = clickwrap_terms_createSuper(Clickwrap); function Clickwrap() { var _this; (0,classCallCheck/* default */.Z)(this, Clickwrap); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); (0,defineProperty/* default */.Z)((0,assertThisInitialized/* default */.Z)(_this), "handleChange", function (target) { var _this$props = _this.props, customValidation = _this$props.customValidation, formId = _this$props.formId, id = _this$props.id, isRequired = _this$props.isRequired, onCaptureInput = _this$props.onCaptureInput, onValidateField = _this$props.onValidateField, requiredFields = _this$props.requiredFields; var value = _this.props.fieldObject && _this.props.fieldObject.value ? _this.props.fieldObject.value : '1'; onCaptureInput(formId, { id: id, type: 'checkbox', value: value, checked: target.checked }); onValidateField(customValidation, formId, isRequired, requiredFields, { checked: target.checked, id: id, type: 'checkbox', value: value }); }); return _this; } (0,createClass/* default */.Z)(Clickwrap, [{ key: "render", value: function render() { var _this$props2 = this.props, activeField = _this$props2.activeField, connectedFieldValue = _this$props2.connectedFieldValue, errorState = _this$props2.errorState, fieldObject = _this$props2.fieldObject, formId = _this$props2.formId, id = _this$props2.id, showField = _this$props2.showField; var blockTermsAgreementFieldValues = ['DSP']; if (!fieldObject.clickWrapConfig || connectedFieldValue && blockTermsAgreementFieldValues.includes(connectedFieldValue) || !showField) return null; var _fieldObject$clickWra = fieldObject.clickWrapConfig, accessId = _fieldObject$clickWra.accessId, groupKey = _fieldObject$clickWra.groupKey, clickWrapStyle = _fieldObject$clickWra.clickWrapStyle, sendConfirmationEmail = _fieldObject$clickWra.sendConfirmationEmail, signerIdSelector = _fieldObject$clickWra.signerIdSelector; return /*#__PURE__*/react.createElement(ClickwrapComponent, { accessId: accessId, groupKey: groupKey, clickWrapStyle: clickWrapStyle, sendConfirmationEmail: sendConfirmationEmail, signerIdSelector: signerIdSelector, activeField: activeField, formId: formId, handleChange: this.handleChange, errorState: errorState, id: id }); } }]); return Clickwrap; }(react.Component); var clickwrap_terms_mapDispatchToProps = function mapDispatchToProps(dispatch) { return { onCaptureInput: function onCaptureInput(formId, inputTarget) { return dispatch(captureInput(dispatch, formId, inputTarget)); }, onValidateField: function onValidateField(customValidation, formId, isRequired, requiredFields, target) { return validateField(dispatch, customValidation, formId, isRequired, requiredFields, target); } }; }; var clickwrap_terms_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId, id = ownProps.id, fieldObject = ownProps.fieldObject; var fields = state.forms.captureFields[formId]; return { activeField: state.forms.activeFields[formId], connectedFieldValue: fieldObject.connectedField && checkIfFieldIsSet(fields, fieldObject.connectedField) ? fields.filter(function (field) { return field.id === fieldObject.connectedField; })[0].value : null, errorState: checkIfHasError(id, state.forms.hasError[formId]), fields: fields, isRequired: state.forms.requiredFields[formId] ? state.forms.requiredFields[formId].includes(id) : false, isSet: checkIfFieldIsSet(fields, id), requiredFields: state.forms.requiredFields[formId], showField: fieldObject.connectedField ? checkIfFieldIsSet(fields, fieldObject.connectedField) : true }; }; /* harmony default export */ const clickwrap_terms = ((0,es/* connect */.$j)(clickwrap_terms_mapStateToProps, clickwrap_terms_mapDispatchToProps)(Clickwrap)); ;// CONCATENATED MODULE: ./src/containers/setFields.jsx // Containers // Types var setFieldContainer = function setFieldContainer(_ref) { var dynamicFormField = _ref.dynamicFormField, field = _ref.field, index = _ref.index, isDisabled = _ref.isDisabled, formId = _ref.formId, props = _ref.props, _ref$isInFieldSet = _ref.isInFieldSet, isInFieldSet = _ref$isInFieldSet === void 0 ? true : _ref$isInFieldSet, hasDynamicField = _ref.hasDynamicField; // if (field.type === 'hidden') return null; var hasBeenValidated = props.hasBeenValidated, isLastField = props.isLastField, parentId = props.parentId, onCaptureInput = props.onCaptureInput, onSetActiveField = props.onSetActiveField, onValidateField = props.onValidateField; var FieldCompnent = null; var DynamicField = dynamicFormField; switch (field.type) { case 'checkbox': switch (field.id) { case 'terms_of_service': FieldCompnent = /*#__PURE__*/react.createElement(fields_terms_of_service, { fieldObject: field, formId: formId, hasBeenValidated: hasBeenValidated, hasDynamicField: hasDynamicField, id: field.id, isDisabled: isDisabled, isLastField: isLastField, key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onValidateField: onValidateField }); break; case 'clickwrap_terms_acceptance': FieldCompnent = /*#__PURE__*/react.createElement(clickwrap_terms, { fieldObject: field, formId: formId, hasBeenValidated: hasBeenValidated, id: field.id, key: index, onCaptureInput: onCaptureInput, onValidateField: onValidateField }); break; default: FieldCompnent = /*#__PURE__*/react.createElement(containers_fields_checkbox, { fieldObject: field, formId: formId, hasBeenValidated: hasBeenValidated, hasDynamicField: hasDynamicField, id: field.id, isDisabled: isDisabled, isRequired: field.required, key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onValidateField: onValidateField }); } break; case 'radio': FieldCompnent = /*#__PURE__*/react.createElement(containers_fields_radio, { fieldObject: field, formId: formId, hasBeenValidated: hasBeenValidated, hasDynamicField: hasDynamicField, id: field.id, isDisabled: isDisabled, isInFieldSet: isInFieldSet || false // default should be true. Radios should be grouped and within a field set , key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onValidateField: onValidateField, parentId: parentId }); break; case 'select': switch (field.id) { case 'country': FieldCompnent = /*#__PURE__*/react.createElement(fields_country, { fieldObject: field, formId: formId, hasBeenValidated: hasBeenValidated, id: field.id, isDisabled: isDisabled, key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onValidateField: onValidateField }); break; case 'country_of_establishment': FieldCompnent = /*#__PURE__*/react.createElement(fields_country, { fieldObject: field, formId: formId, hasBeenValidated: hasBeenValidated, id: field.id, isDisabled: isDisabled, key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onValidateField: onValidateField }); break; default: switch (field.id) { default: FieldCompnent = /*#__PURE__*/react.createElement(containers_fields_select, { fieldObject: field, formId: formId, hasBeenValidated: hasBeenValidated, id: field.id, isDisabled: isDisabled, key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onValidateField: onValidateField }); break; } break; } break; case 'multi-select': { switch (field.id) { default: FieldCompnent = /*#__PURE__*/react.createElement(fields_multi_select, { fieldObject: field, formId: formId, hasBeenValidated: hasBeenValidated, id: field.id, isDisabled: isDisabled, key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onValidateField: onValidateField }); break; } break; } case 'select-state': FieldCompnent = /*#__PURE__*/react.createElement(fields_state_select, { fieldObject: field, formId: formId, hasBeenValidated: hasBeenValidated, id: field.id, isDisabled: isDisabled, key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onValidateField: onValidateField }); break; case 'textarea': FieldCompnent = /*#__PURE__*/react.createElement(containers_fields_textarea, { fieldObject: field, formId: formId, id: field.id, isDisabled: isDisabled, isLastField: isLastField, key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onValidateField: onValidateField, hasBeenValidated: hasBeenValidated }); break; default: switch (field.id) { case 'appointment_datetime': FieldCompnent = /*#__PURE__*/react.createElement(fields_date, { fieldObject: field, formId: formId, hasBeenValidated: hasBeenValidated, id: field.id, isDisabled: isDisabled, isLastField: isLastField, isRequired: field.required, key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onValidateField: onValidateField }); break; case 'phone': FieldCompnent = /*#__PURE__*/react.createElement(fields_intl_phone, { fieldObject: field, formId: formId, hasBeenValidated: hasBeenValidated, id: field.id, isDisabled: isDisabled, isLastField: isLastField, key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField }); break; default: switch (field.type) { case 'hidden': FieldCompnent = /*#__PURE__*/react.createElement(containers_fields_hidden, { fieldObject: field, formId: formId, id: field.id, isDisabled: isDisabled, isLastField: isLastField, key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onValidateField: onValidateField, hasBeenValidated: hasBeenValidated }); break; default: FieldCompnent = /*#__PURE__*/react.createElement(containers_fields_text, { fieldObject: field, formId: formId, id: field.id, isDisabled: isDisabled, isLastField: isLastField, key: index, onCaptureInput: onCaptureInput, onSetActiveField: onSetActiveField, onValidateField: onValidateField, hasBeenValidated: hasBeenValidated }); break; } break; } break; } return /*#__PURE__*/react.createElement(react.Fragment, { key: "".concat(index, "-").concat(field.id) }, FieldCompnent, hasDynamicField && dynamicFormField && /*#__PURE__*/react.createElement(DynamicField, { parentId: field.id, formId: formId })); }; /* harmony default export */ const setFields = (setFieldContainer); ;// CONCATENATED MODULE: ./src/helpers/get-fields.js function get_fields_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function get_fields_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? get_fields_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : get_fields_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Styles // Types // Use getFields to allow check for array type to iterate. var getFields = function getFields(dynamicFormField, fieldsArray, formId, hasDynamicField, isDisabled, props, locale) { if (!Array.isArray(fieldsArray)) return null; return fieldsArray.map(function (f, i) { if (f.type === 'fieldset') { var description = f.description, fieldSet = f.fieldSet, required = f.required, title = f.title, titleTag = f.titleTag, fieldDisclaimer = f.fieldDisclaimer; var FieldDisclaimer = function FieldDisclaimer(_ref) { var fieldDisclaimer = _ref.fieldDisclaimer; if (formId !== 'PARTNERSIGNUPNEW') return null; if (!fieldDisclaimer) return null; var message = fieldDisclaimer.message, hyperlink = fieldDisclaimer.hyperlink; if (!message) return null; var renderMessageWithLink = function renderMessageWithLink(message, hyperlink) { if (hyperlink && hyperlink.url && hyperlink.textToLink) { var url = hyperlink.url, textToLink = hyperlink.textToLink; var parts = message.split(textToLink); // If no textToLink found, return message as is if (parts.length === 1) return getLocaleStringText(message, locale); return /*#__PURE__*/react.createElement("span", null, getLocaleStringText(parts[0], locale), /*#__PURE__*/react.createElement("a", { href: url, target: "_blank", rel: "noopener noreferrer" }, getLocaleStringText(textToLink, locale)), getLocaleStringText(parts.slice(1).join(''), locale)); } // If no hyperlink, just return the message return getLocaleStringText(message, locale); }; return /*#__PURE__*/react.createElement(FieldDisclaimerText, null, renderMessageWithLink(message, hyperlink)); }; // Can not move to own component. Doing so will end up building a life cycle dependency. // This is the optimal place at this time. var ElementTag = titleTag || null; return /*#__PURE__*/react.createElement(react.Fragment, { key: i }, /*#__PURE__*/react.createElement(Fieldset, { key: i }, title && !ElementTag && /*#__PURE__*/react.createElement("h3", { className: "title" }, title, " ", required && /*#__PURE__*/react.createElement("span", { className: "required" }, "*")), title && ElementTag && /*#__PURE__*/react.createElement(ElementTag, { className: "elementTag" }, title), description && /*#__PURE__*/react.createElement("p", { className: "desc" }, description), /*#__PURE__*/react.createElement("fieldset", { key: i, id: f.id }, fieldSet.map(function (fs, index) { return setFields({ dynamicFormField: null, field: get_fields_objectSpread(get_fields_objectSpread({}, fs), {}, { id: f.id }), index: parseInt("".concat(i).concat(index), 10), isDisabled: isDisabled, formId: formId, props: props, isInFieldSet: true, hasDynamicField: f.hasDynamicField || false }); }))), /*#__PURE__*/react.createElement(FieldDisclaimer, { fieldDisclaimer: fieldDisclaimer })); } // If column is set and is true iterate back through the found fields if (Array.isArray(f)) { return /*#__PURE__*/react.createElement(FieldRow, { key: i, className: "column-view" }, getFields(dynamicFormField, (0,toConsumableArray/* default */.Z)(f), formId, hasDynamicField, isDisabled, props, locale)); } // Set field return setFields({ dynamicFormField: dynamicFormField, field: f, isDisabled: isDisabled, index: i, formId: formId, props: props, isInFieldSet: false, hasDynamicField: hasDynamicField }); }); }; /* harmony default export */ const get_fields = ((/* unused pure expression or super */ null && (getFields))); // import React from 'react'; // import type { Element } from 'react'; // import setFields from '../containers/setFields'; // import { GdprField } from '../styled/form'; // import { getLocaleStringText } from '../helpers/language'; // // Styles // import { FieldRow, Fieldset, FieldDisclaimerText } from '../styled/form'; // // Types // import type { JsonFields } from '../lib/types/forms'; // // Use getFields to allow check for array type to iterate. // export const getFields = (dynamicFormField: any, fieldsArray: JsonFields, formId: string, hasDynamicField: boolean, isDisabled: string, props: { [key: string]: any }, locale: string): Array> | Element<*> | null => { // if (!Array.isArray(fieldsArray)) return null; // return fieldsArray.map((f, i) => { // if (f.type === 'fieldset') { // const { // description, fieldSet, required, title, titleTag, fieldDisclaimer, // } = f; // const FieldDisclaimer = ({ fieldDisclaimer }) => { // if (formId !== 'PARTNERSIGNUPNEW') return null; // if (!fieldDisclaimer) return null; // const { message, hyperlink } = fieldDisclaimer; // if (!message) return null; // const renderMessageWithLink = (message, hyperlink) => { // if (hyperlink && hyperlink.url && hyperlink.textToLink) { // const { url, textToLink } = hyperlink; // const parts = message.split(textToLink); // // If no textToLink found, return message as is // if (parts.length === 1) return getLocaleStringText(message, locale); // return ( // // {getLocaleStringText(parts[0], locale)}{/* Part before link */} // // {getLocaleStringText(textToLink, locale)} // // {getLocaleStringText(parts.slice(1).join(''), locale)}{/* Part after link */} // // ); // } // // If no hyperlink, just return the message // return getLocaleStringText(message, locale); // }; // return {renderMessageWithLink(message, hyperlink)}; // }; // // Can not move to own component. Doing so will end up building a life cycle dependency. // // This is the optimal place at this time. // const ElementTag = titleTag || null; // return //
// {title && !ElementTag &&

{title} {required && *}

} // {title && ElementTag && {title}} // {description &&

{description}

} //
// {fieldSet.map((fs, index) => setFields({ // dynamicFormField: null, // field: { // ...fs, // id: f.id, // }, // index: parseInt(`${i}${index}`, 10), // isDisabled, // formId, // props, // isInFieldSet: true, // hasDynamicField: f.hasDynamicField || false, // }))} //
//
// //
; // } // // If column is set and is true iterate back through the found fields // if (Array.isArray(f)) { // return // { getFields(dynamicFormField, [...f], formId, hasDynamicField, isDisabled, props, locale) } // ; // } // // Set field // return setFields({ // dynamicFormField, // field: f, // isDisabled, // index: i, // formId, // props, // isInFieldSet: false, // hasDynamicField, // }); // }); // }; // export default getFields; ;// CONCATENATED MODULE: ./src/containers/fields/dynamic-field.jsx function dynamic_field_createSuper(Derived) { var hasNativeReflectConstruct = dynamic_field_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function dynamic_field_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Containers // Helpers // Types // Actions // Local Types var DynamicField = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(DynamicField, _React$Component); var _super = dynamic_field_createSuper(DynamicField); function DynamicField() { (0,classCallCheck/* default */.Z)(this, DynamicField); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(DynamicField, [{ key: "componentDidUpdate", value: function componentDidUpdate() { var props = this.props; var captureFields = props.captureFields, dynamicFields = props.dynamicFields, formId = props.formId, parentId = props.parentId; var value = captureFields.filter(function (f) { return f.id === parentId; })[0]; value = value ? value.value : null; var fields = value && dynamicFields && dynamicFields[value] ? dynamicFields[value] : []; if (fields.length > 0) this.props.onUpdateDynamicRequiredField(formId, getRequiredFields(fields), []); } }, { key: "render", value: function render() { var props = this.props; var dynamicFormField = props.dynamicFormField, captureFields = props.captureFields, dynamicFields = props.dynamicFields, hasDynamicField = props.hasDynamicField, isDisabled = props.isDisabled, formId = props.formId, parentId = props.parentId, locale = props.locale; var value = captureFields.filter(function (f) { return f.id === parentId; })[0]; value = value ? value.value : null; var fields = value && dynamicFields && dynamicFields[value] ? dynamicFields[value] : []; if (fields && fields.length < 1 || !this.props.formId) return null; var components = getFields(dynamicFormField, fields, formId, hasDynamicField, isDisabled, props, locale); return /*#__PURE__*/react.createElement("div", { id: "dynamic-component-".concat(parentId) }, components); } }]); return DynamicField; }(react.Component); var dynamic_field_mapDispatchToProps = function mapDispatchToProps(dispatch) { return { onUpdateDynamicRequiredField: function onUpdateDynamicRequiredField(formId, add, remove) { return dispatch(updateDynamicRequiredField(formId, add, remove)); }, onCaptureInput: function onCaptureInput(formId, target) { return dispatch(captureInput(dispatch, formId, target)); }, onSetActiveField: function onSetActiveField(formId, id) { dispatch(setActiveField(formId, id)); dispatch(trackFormAbandonStatus(formId, id)); }, onSetLastField: function onSetLastField(formId, fields) { return dispatch(setLastFieldValidation(formId, fields)); }, onValidateField: function onValidateField(customValidation, formId, isRequired, requiredFields, target) { validateField(dispatch, customValidation, formId, isRequired, requiredFields, target); } }; }; var dynamic_field_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId, parentId = ownProps.parentId; return { activeForms: state.forms.activeForms, captureFields: state.forms.captureFields[formId] || [], dynamicFields: state.forms.activeForms && state.forms.activeForms[formId] && state.forms.activeForms[formId].dynamicFields ? state.forms.activeForms[formId].dynamicFields[parentId] : [], hasBeenValidated: state.forms.hasBeenValidated[formId], isDisabled: state.forms.submissionlimit && state.forms.submissionlimit[formId] ? 'disabled' : '', isLastField: state.forms.lastField[formId] || false, isLoading: state.system.isLoading, locale: state.forms.activeForms && state.forms.activeForms[formId] && state.forms.activeForms[formId].configs && state.forms.activeForms[formId].configs.language ? state.forms.activeForms[formId].configs.language : 'en', requiredFields: state.forms.requiredFields[formId], setFields: state.forms.setFields[formId], validatedFields: state.forms.validatedFields[formId], isButtonDisabled: Boolean(state.forms.validatedFields.length === state.forms.requiredFields.length) }; }; /* harmony default export */ const dynamic_field = ((0,es/* connect */.$j)(dynamic_field_mapStateToProps, dynamic_field_mapDispatchToProps)(DynamicField)); ;// CONCATENATED MODULE: ./src/containers/fields.jsx function fields_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function fields_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? fields_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : fields_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function fields_createSuper(Derived) { var hasNativeReflectConstruct = fields_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function fields_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Containers // Actions // Helpers // Types // Styles // Local Types var SetFormFields = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(SetFormFields, _React$Component); var _super = fields_createSuper(SetFormFields); function SetFormFields() { (0,classCallCheck/* default */.Z)(this, SetFormFields); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(SetFormFields, [{ key: "componentDidMount", value: function componentDidMount() { var formId = this.props.formId; if (this.props.activeForms[formId]) { var _fields = this.props.activeForms[formId].fields; if (_fields && _fields.length > 0) this.props.onSetLastField(formId, _fields); } if (window && window.ava && !window.ava.os) { var osValue = detectOS(); window.ava = window.ava || {}; window.ava.os = osValue; this.props.onCaptureInput(this.props.formId, { id: 'C_Operating_System1', type: 'hidden', value: osValue }); } if (window && window.ava && window.ava.os) { this.props.onCaptureInput(this.props.formId, { id: 'C_Operating_System1', type: 'hidden', value: window.ava.os }); } } }, { key: "render", value: function render() { var _this = this; var _this$props = this.props, activeForms = _this$props.activeForms, formId = _this$props.formId, isDisabled = _this$props.isDisabled; // Use iterateFields to allow check for array type to iterate. // Accepts Array<{@Object}> or Array> var iterateFields = function iterateFields(fields) { return fields.filter(function (fld) { return !!fld; }).map(function (f, i) { // If column is set and is true iterate back through the fields if (Array.isArray(f)) { return /*#__PURE__*/react.createElement(FieldRow, { key: i, className: "column-view" }, iterateFields((0,toConsumableArray/* default */.Z)(f))); } // Set fieldset - should be used for all radio buttons if (f.type === 'fieldset') { var description = f.description, fieldSet = f.fieldSet, required = f.required, title = f.title, titleTag = f.titleTag; // Can not move to own component. Doing so will end up building a life cycle dependency. // This is the optimal place at this time. if (fieldSet) { var ElementTag = titleTag || null; return /*#__PURE__*/react.createElement(react.Fragment, { key: i }, /*#__PURE__*/react.createElement(Fieldset, { key: i }, title && !ElementTag && /*#__PURE__*/react.createElement("h3", { className: "title" }, title, " ", required && /*#__PURE__*/react.createElement("span", { className: "required" }, "*")), title && ElementTag && /*#__PURE__*/react.createElement(ElementTag, { className: "elementTag" }, title), description && /*#__PURE__*/react.createElement("p", { className: "desc" }, description), /*#__PURE__*/react.createElement("fieldset", { key: i, id: f.id }, fieldSet.map(function (fs, index) { return setFields({ dynamicFormField: null, field: fields_objectSpread(fields_objectSpread({}, fs), {}, { id: f.id }), index: parseInt("".concat(i).concat(index), 10), isDisabled: isDisabled, formId: formId, props: fields_objectSpread(fields_objectSpread({}, _this.props), {}, { parentId: f.id }), isInFieldSet: true, hasDynamicField: f.hasDynamicField || false }); })), f.hasDynamicField && /*#__PURE__*/react.createElement(dynamic_field, { formId: formId, parentId: f.id, isRequired: f.required }))); } return null; } // Set field return setFields({ dynamicFormField: dynamic_field, field: f, index: i, isDisabled: isDisabled, formId: formId, props: fields_objectSpread(fields_objectSpread({}, _this.props), {}, { parentId: f.id }), isInFieldSet: false, hasDynamicField: f.hasDynamicField || false }); }); }; if (!this.props.formId) return null; var _activeForms$formId = activeForms[formId], fields = _activeForms$formId.fields, sections = _activeForms$formId.sections; if (sections && Array.isArray(sections) && sections.length > 0) { var fieldsRendered = []; var displaySections = sections.map(function (section) { var fieldsToRender = section.fields.map(function (field) { var fieldFound = fields.find(function (f) { return f.id === field; }); return fieldFound; }); var subFields = iterateFields(fieldsToRender); section.fields.forEach(function (field) { return fieldsRendered.push(field); }); return /*#__PURE__*/react.createElement("div", { key: section.id }, /*#__PURE__*/react.createElement(SectionTitle, null, section.title), subFields); }); var remainingFields = fields.filter(function (field) { return !fieldsRendered.includes(field.id); }); var renderRemainingFields = iterateFields(remainingFields); return /*#__PURE__*/react.createElement(react.Fragment, null, renderRemainingFields, displaySections); } var components = iterateFields(fields); return /*#__PURE__*/react.createElement(react.Fragment, null, components); } }]); return SetFormFields; }(react.Component); var fields_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId; var _ref = state.forms.activeForms && state.forms.activeForms[formId] ? state.forms.activeForms[formId] : { configs: {} }, configs = _ref.configs; return { activeForms: state.forms.activeForms, captureFields: state.forms.captureFields[formId] || [], hasBeenValidated: state.forms.hasBeenValidated[formId], isDisabled: isFieldDisabled(state.forms.submissionlimit[formId], configs), isLastField: state.forms.lastField[formId] || false, isLoading: state.system.isLoading, requiredFields: state.forms.requiredFields[formId], setFields: state.forms.setFields[formId], validatedFields: state.forms.validatedFields[formId], isButtonDisabled: Boolean(state.forms.validatedFields.length === state.forms.requiredFields.length) }; }; var fields_mapDispatchToProps = function mapDispatchToProps(dispatch) { return { onCaptureInput: function onCaptureInput(formId, target) { return dispatch(captureInput(dispatch, formId, target)); }, onSetActiveField: function onSetActiveField(formId, id) { dispatch(setActiveField(formId, id)); dispatch(trackFormAbandonStatus(formId, id)); }, onSetLastField: function onSetLastField(formId, fields) { return dispatch(setLastFieldValidation(formId, fields)); }, onValidateField: function onValidateField(customValidation, formId, isRequired, requiredFields, target) { return validateField(dispatch, customValidation, formId, isRequired, requiredFields, target); } }; }; /* harmony default export */ const fields = (react.memo((0,es/* connect */.$j)(fields_mapStateToProps, fields_mapDispatchToProps)(SetFormFields))); ;// CONCATENATED MODULE: ./src/styled/buttons.js var buttons_templateObject, buttons_templateObject2, buttons_templateObject3; var Button = styled_components_browser_esm/* default.button */.ZP.button(buttons_templateObject || (buttons_templateObject = (0,taggedTemplateLiteral/* default */.Z)(["\n border: none;\n border-radius: 3px;\n padding: 10px 20px;\n text-align: center;\n width: 100%;\n transition: all .2s ease-in-out;\n box-shadow: 0 10px 15px 0 rgba(0,0,0,0.15);\n font-weight: 600;\n\n &:hover {\n background: ", ";\n cursor: pointer;\n transform: translateY(-2px);\n box-shadow: 0 13px 18px 0 rgba(0,0,0,0.18);\n }\n\n &:active {\n background: ", ";\n cursor: pointer;\n transform: none;\n box-shadow: 0 10px 15px 0 rgba(0,0,0,0.15);\n }\n\n &.disabled,\n [disabled=true] {\n background: ", ";\n border: ", ";\n cursor: not-allowed !important;\n filter: alpha(opacity=50);\n opacity: 0.5;\n transform: none;\n box-shadow: none;\n }\n\n &:focus {\n background: ", ";\n cursor: pointer;\n outline: none;\n transform: none;\n box-shadow: 0 10px 15px 0 rgba(0,0,0,0.15);\n }\n"])), form_theme.button.active, form_theme.button.active, form_theme.button.active, form_theme.button.active, form_theme.button.active); var ButtonPrimary = (0,styled_components_browser_esm/* default */.ZP)(Button)(buttons_templateObject2 || (buttons_templateObject2 = (0,taggedTemplateLiteral/* default */.Z)(["\n background: ", ";\n color: ", ";\n font-size: 18px;\n line-height: 25px;\n ", "\n &:hover {\n cursor: pointer;\n }\n"])), form_theme.button.active, form_theme.button.color, function (props) { return props.isInline && 'padding: 12px 15px;'; }); var ModalButton = (0,styled_components_browser_esm/* default */.ZP)(ButtonPrimary)(buttons_templateObject3 || (buttons_templateObject3 = (0,taggedTemplateLiteral/* default */.Z)(["\n margin-bottom: 20px;\n min-width: 150px;\n width: auto;\n"]))); ;// CONCATENATED MODULE: ./src/components/submit.jsx // Components // Styles var getButtonDisplayText = function getButtonDisplayText() { var displayText = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var isLoading = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var loaderPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'overlay'; var showLoader = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; if (showLoader && loaderPosition === 'button') { if (isLoading) { return /*#__PURE__*/react.createElement(spinner, { loaderSize: 'small' }); } } return displayText === null ? 'Submit' : displayText; }; var addBriteVerifyStatusField = function addBriteVerifyStatusField(fields, briteVerifyState) { var newFields = fields; var emailField = fields.find(function (field) { return field.id === 'email'; }); var submittedEmail = emailField && emailField.value; var success = briteVerifyState.success, unknown = briteVerifyState.unknown; if (submittedEmail) { if (success && success.data && success.data.address === submittedEmail) { newFields.push({ id: 'briteVerifyStatus', value: success.data.status }); } else if (unknown && unknown.data && unknown.data.address === submittedEmail) { newFields.push({ id: 'briteVerifyStatus', value: unknown.data.status }); } } return newFields; }; var SubmitComponent = function SubmitComponent(_ref) { var address = _ref.address, activeData = _ref.activeData, briteVerify = _ref.briteVerify, classes = _ref.classes, containsGdprContainer = _ref.containsGdprContainer, dialCode = _ref.dialCode, displayText = _ref.displayText, formConfigs = _ref.formConfigs, fields = _ref.fields, formId = _ref.formId, isButtonDisabled = _ref.isButtonDisabled, isInline = _ref.isInline, isLoading = _ref.isLoading, isRateLookupForm = _ref.isRateLookupForm, loaderPosition = _ref.loaderPosition, onSubmitForRate = _ref.onSubmitForRate, onSubmitForm = _ref.onSubmitForm, onValidateAllFields = _ref.onValidateAllFields, position = _ref.position, requiredFields = _ref.requiredFields, search = _ref.search, showLoader = _ref.showLoader; return /*#__PURE__*/react.createElement(react.Fragment, null, containsGdprContainer && /*#__PURE__*/react.createElement(gdpr_eligable, { formId: formId }), /*#__PURE__*/react.createElement(SubmitButtonContainer, { className: classes, isInline: isInline, position: position }, /*#__PURE__*/react.createElement(ButtonPrimary, { className: "avaformSubmit btn-primary".concat(isButtonDisabled ? ' disabled' : ''), onClick: function onClick(e) { e.preventDefault(); if (isButtonDisabled) onValidateAllFields(dialCode, formId, fields, requiredFields, activeData); if (!isButtonDisabled) { var newFields = addBriteVerifyStatusField(fields, briteVerify); if (isRateLookupForm) { onSubmitForRate(address, newFields, formConfigs, formId); return; } onSubmitForm(formId, formConfigs, newFields, search); } }, onKeyPress: function onKeyPress(e) { e.preventDefault(); if (isButtonDisabled) onValidateAllFields(dialCode, formId, fields, requiredFields, activeData); if (e.which === 13 && !isButtonDisabled) { var newFields = addBriteVerifyStatusField(fields, briteVerify); if (isRateLookupForm) { onSubmitForRate(address, newFields, formConfigs, formId); return; } onSubmitForm(formId, formConfigs, newFields, search); } }, isInline: isInline }, getButtonDisplayText(displayText, isLoading, loaderPosition, showLoader)))); }; /* harmony default export */ const components_submit = (SubmitComponent); ;// CONCATENATED MODULE: ./src/api/avatax-rate-lookup.js function avatax_rate_lookup_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function avatax_rate_lookup_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? avatax_rate_lookup_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : avatax_rate_lookup_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Docs // Use the following URLs to review documentation around brite verify service // https://wiki.avalara.com/display/MT/BriteVerify+-+API+Calls // https://miles.marketing.avalara.com/swagger/doc/email_verify // Actions // Logging // API Settings // Types var AVATAX_API = src_config.AVATAX_API; // Types var avaTaxRateLookup = /*#__PURE__*/function () { var _ref = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(dispatch, formId, address) { var requestUrl, address1, city, state, response, _ref2, mltRateLookup, failedResponse, errorMessage; return regenerator_default().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: requestUrl = "".concat(AVATAX_API); address1 = address.address1, city = address.city, state = address.state; requestUrl = "".concat(requestUrl, "?lineAddress1=").concat(encodeURI(address1), "&city=").concat(encodeURI(city), "®ion=").concat(encodeURI(state), "&calctype=mlt"); _context.next = 5; return (0,shared/* fetch */.he)(requestUrl, { method: 'GET' }, api_settings.timeout).then(function (result) { var res = result; if (res.value) { res.value = typeof res.value === 'string' ? JSON.parse(res.value) : res.value; } return res; }); case 5: response = _context.sent; _ref2 = window.ava || { mltRateLookup: {} }, mltRateLookup = _ref2.mltRateLookup; if (response.ok) { _context.next = 16; break; } failedResponse = { ok: false, value: { rate: null, address: { valid: false, address: { lineAddress1: address1, city: city, region: state } } } }; // Log API error logger_api({ level: 'error', msgType: 'AvaTaxAPIFailure', formId: formId, data: { message: 'Avatax API Failure', response: JSON.stringify(response) } }); window.ava.mltRateLookup = avatax_rate_lookup_objectSpread(avatax_rate_lookup_objectSpread({}, mltRateLookup), {}, (0,defineProperty/* default */.Z)({}, formId, { response: failedResponse, userInput: address })); _context.next = 13; return dispatch(captureMltAvaTaxResponse(formId, failedResponse.value)); case 13: _context.next = 15; return dispatch(setMltRateResponse(formId, failedResponse.value)); case 15: return _context.abrupt("return", failedResponse); case 16: // Check to see if there is error message in the response object if (response.ok && response.value && response.value.error) { // Set default message - redundant for flow needs errorMessage = response.value.error || 'Invalid rate found - default'; // No the default. This indicates error was found but no value was found. // Log API response error message logger_api({ level: 'error', msgType: 'AvaTaxAPIRateFailure', formId: formId, data: { message: "AvaTax api rate failure. Response rate invalid. Message: ".concat(errorMessage, "."), response: JSON.stringify(response) } }); } window.ava.mltRateLookup = avatax_rate_lookup_objectSpread(avatax_rate_lookup_objectSpread({}, mltRateLookup), {}, (0,defineProperty/* default */.Z)({}, formId, { response: response, userInput: address })); _context.next = 20; return dispatch(captureMltAvaTaxResponse(formId, response.value)); case 20: _context.next = 22; return dispatch(setMltRateResponse(formId, response.value)); case 22: return _context.abrupt("return", response); case 23: case "end": return _context.stop(); } } }, _callee); })); return function avaTaxRateLookup(_x, _x2, _x3) { return _ref.apply(this, arguments); }; }(); /* harmony default export */ const avatax_rate_lookup = ((/* unused pure expression or super */ null && (avaTaxRateLookup))); ;// CONCATENATED MODULE: ./src/helpers/avatax.js function helpers_avatax_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function helpers_avatax_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? helpers_avatax_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : helpers_avatax_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Actions // Types // Helpers // Logging // Helper function to format address validation object from state // @return { Object } var setValidationAddress = function setValidationAddress(fields) { var address = { address1: fields.filter(function (f) { return f.id === 'address1'; })[0] && fields.filter(function (f) { return f.id === 'address1'; })[0].value ? fields.filter(function (f) { return f.id === 'address1'; })[0].value : '', city: fields.filter(function (f) { return f.id === 'city'; })[0] && fields.filter(function (f) { return f.id === 'city'; })[0].value ? fields.filter(function (f) { return f.id === 'city'; })[0].value : '', state: fields.filter(function (f) { return f.id === 'state'; })[0] && fields.filter(function (f) { return f.id === 'state'; })[0].value ? fields.filter(function (f) { return f.id === 'state'; })[0].value : '' }; var completeAddress = true; if (address.address1 === '' || address.city === '' || address.state === '') completeAddress = false; return !completeAddress ? null : address; }; // Helper function to trigger rate component render in AEM // @return { void } var triggerMLTRenderFunction = function triggerMLTRenderFunction(formId, callback) { if (window.mltRateResponse && typeof window.mltRateResponse === 'function') { var _window = window, ava = _window.ava; if (ava.mltRateLookup && ava.mltRateLookup[formId]) { var mltRateLookup = ava.mltRateLookup; var response = mltRateLookup[formId].response; var value = response.value; var address = value.address, rate = value.rate; var successCallback = callback || 'mltRateResponse'; try { window[successCallback]({ formId: formId, address: address || {}, rate: rate }); } catch (err) { logger_api({ level: 'error', msgType: 'AvaTaxFailure', formId: formId, data: { message: 'AvaTax unkown error found - helpers/avatax.js - Callback or callback data not found', response: JSON.stringify(err) } }); } return; } logger_api({ level: 'error', msgType: 'AvaTaxFailure', formId: formId, data: { message: 'MLT AEM trigger found - helpers/avatax.js - Callback not found' } }); } }; var DECIMAL_LIMIT = 2; function convertAndLimitDecimal(inputString) { var number = parseFloat(inputString); if (Number.isNaN(number)) { return ''; } // toFixed method rounds up if 3rd decimal is equal or greater 5 var limitedNumberString = number.toFixed(DECIMAL_LIMIT); return limitedNumberString; } // Helper to trigger neccessary functions prior to MILES submission // @return { void } var submitRateLookup = /*#__PURE__*/function () { var _ref = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(dispatch, address, fields, formConfigs, formId) { var _ref2, avatax, response, rate, newFields, responseValue, callback; return regenerator_default().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: // Due to more actions needing to be taking secondary submit action created in order to handle additional API calls before MILES submission // Send address to AvaTax API to validate address _ref2 = window.ava || { avatax: {} }, avatax = _ref2.avatax; window.ava.avatax = helpers_avatax_objectSpread(helpers_avatax_objectSpread({}, avatax), {}, { submittedRateForm: formId }); _context.next = 4; return avaTaxRateLookup(dispatch, formId, address); case 4: response = _context.sent; window.ava.mltRateLookup = (0,defineProperty/* default */.Z)({}, formId, { response: response }); // Rate look up complete, submit information to miles if (!response) { _context.next = 33; break; } if (!(response.value.address && response.value.address.valid && response.value.address.valid === true)) { _context.next = 28; break; } _context.prev = 8; rate = response.value.rate; rate = rate === null ? '' : rate.toString(); newFields = fields; newFields = newFields.filter(function (f) { return f.id !== 'C_TaxRate'; }); newFields.push({ id: 'C_TaxRate', value: convertAndLimitDecimal(rate) }); responseValue = response.value || 'null'; _context.next = 17; return newFields.map(function (field) { switch (field.id) { case 'avaTaxMLTResponse': return { id: field.id, value: JSON.stringify(responseValue) }; default: return field; } }); case 17: newFields = _context.sent; _context.next = 20; return window.ava.trigger(newFields, formId, formConfigs); case 20: dispatch(setLoadingFinish()); _context.next = 26; break; case 23: _context.prev = 23; _context.t0 = _context["catch"](8); logger_api({ level: 'error', msgType: 'SubmissionError', formId: formId, data: { message: 'Submission error found. Possible window.ava.trigger not available. Data did not submit to MILES endpoint', location: 'src/containers/submit' } }); case 26: _context.next = 33; break; case 28: callback = formConfigs.callback; callback = !callback || callback === '' ? 'mltRateResponse' : callback; if (callback) { triggerMLTRenderFunction(formId, callback); } else { logger_api({ level: 'error', msgType: 'AvaTaxRateLookupCallbackError', formId: formId, data: { message: 'Could not trigger avaTaxCallback. Was either not passed or not found', location: 'src/helpers/avatax' } }); } dispatch(setLoadingFinish()); return _context.abrupt("return"); case 33: if (!response.ok) { logger_api({ level: 'error', msgType: 'AvaTaxApiResponseFailure', formId: formId, data: { message: 'AvaTax unkown error found with API response - helpers/avatax.js', response: JSON.stringify(response) } }); dispatch(setLoadingFinish()); } case 34: case "end": return _context.stop(); } } }, _callee, null, [[8, 23]]); })); return function submitRateLookup(_x, _x2, _x3, _x4, _x5) { return _ref.apply(this, arguments); }; }(); ;// CONCATENATED MODULE: ./src/helpers/bypass-submit.js // Helper to trigger callback functions incase of no submission to miles // @return { void } var bypassSubmitToCallbacks = function bypassSubmitToCallbacks(newFields, formConfigs, formId) { var successCallback = formConfigs.callback ? formConfigs.callback : null; // Check for success callback if (successCallback && successCallback !== null) { logger_api({ level: 'info', msgType: 'BypassMilesSubmission', formId: formId, data: { message: 'Bypassing miles submisison - Executing Callback' } }); if (typeof successCallback === 'function') { successCallback(newFields); // If function is passed in, trigger it return false; // Assumes the callback presidence, stop processing } if (typeof successCallback === 'string' && window[successCallback] && typeof window[successCallback] === 'function') { window[successCallback](newFields); // if string is passed it, assume the function is already registered to the window, trigger from the window. return false; // Assumes the callback presidence, stop processing } return false; // Stop processing if callback is present } return false; }; /* harmony default export */ const bypass_submit = ((/* unused pure expression or super */ null && (bypassSubmitToCallbacks))); ;// CONCATENATED MODULE: ./src/helpers/tatari.js // Logging var triggerTatariTrackEvent = function triggerTatariTrackEvent(formId) { try { var _window = window, tatari = _window.tatari; if (tatari && tatari !== null) { var details = { pagePath: window && window.location ? window.location.href : '', tatariSessionId: tatari.sessionId }; tatari.track('tatariConversions', details); // logger success logger_api({ level: 'info', msgType: 'tatariPixel', formId: formId, data: { message: 'tatari track event sucessfull submission', details: details } }); } else { // logger tatari not loaded. logger_api({ level: 'info', msgType: 'tatariPixel', formId: formId, data: { message: 'tatari not loaded on page.', pagePath: window && window.location ? window.location.href : '' } }); } } catch (error) { // logger error for tracking failing. logger_api({ level: 'error', msgType: 'tatariPixel', formId: formId, data: { message: 'error while triggering tatarti track event.', pagePath: window && window.location ? window.location.href : '' } }); } /* eslint-disable camelcase */ }; /* harmony default export */ const tatari = (triggerTatariTrackEvent); ;// CONCATENATED MODULE: ./src/containers/submit.jsx function submit_createSuper(Derived) { var hasNativeReflectConstruct = submit_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function submit_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Components // Types // Actions // Helpers var SubmitContainer = /*#__PURE__*/function (_React$Component) { (0,inherits/* default */.Z)(SubmitContainer, _React$Component); var _super = submit_createSuper(SubmitContainer); function SubmitContainer() { (0,classCallCheck/* default */.Z)(this, SubmitContainer); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(SubmitContainer, [{ key: "render", value: function render() { var _this$props = this.props, address = _this$props.address, activeData = _this$props.activeData, briteVerify = _this$props.briteVerify, containsGdprContainer = _this$props.containsGdprContainer, dialCode = _this$props.dialCode, eloquaPayload = _this$props.eloquaPayload, formConfigs = _this$props.formConfigs, formId = _this$props.formId, fields = _this$props.fields, isButtonDisabled = _this$props.isButtonDisabled, isLoading = _this$props.isLoading, maxmindData = _this$props.maxmindData, MILES_API = _this$props.MILES_API, onSubmitForRate = _this$props.onSubmitForRate, onSubmitForm = _this$props.onSubmitForm, onValidateAllFields = _this$props.onValidateAllFields, redirect = _this$props.redirect, requiredFields = _this$props.requiredFields, search = _this$props.search; var buttonLabel = formConfigs.button_label; var rateLookupForm = formConfigs.rateLookupForm; var submit = activeData.submit; var classes = submit.classes, position = submit.position; var displayText = buttonLabel || submit.displayText || 'Submit'; var language = activeData.configs ? activeData.configs.language : null; displayText = getLocaleStringText(displayText, 'field', language || 'en'); // enable/disable chilipiper button if connected if (isConnectedToChilipiper(formId)) { if (!isButtonDisabled) { enableChilipiperButton(formId); } else { disableChilipiperButton(formId); } } return /*#__PURE__*/react.createElement(components_submit, { address: address, activeData: activeData, briteVerify: briteVerify, containsGdprContainer: containsGdprContainer, classes: classes, dialCode: dialCode, displayText: displayText, eloquaPayload: eloquaPayload, formConfigs: formConfigs, formId: formId, fields: fields, isButtonDisabled: isButtonDisabled, isRateLookupForm: rateLookupForm || false, isLoading: isLoading, isInline: isFormDisplayInline(activeData), loaderPosition: getLoaderPosition(activeData), maxmindData: maxmindData, MILES_API: MILES_API, onSubmitForRate: onSubmitForRate, onSubmitForm: onSubmitForm, onValidateAllFields: onValidateAllFields, position: position, redirect: redirect, requiredFields: requiredFields, search: search, showLoader: getShowLoader(activeData) }); } }]); return SubmitContainer; }(react.Component); var submit_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId; return { address: setValidationAddress(state.forms.captureFields[formId] || []), activeData: state.forms.activeForms[formId], briteVerify: state.briteVerify || null, callback: state.forms.activeForms[formId].configs && state.forms.activeForms[formId].configs.callback ? state.forms.activeForms[formId].configs.callback : null, containsGdprContainer: Boolean(state.forms.gdprField && state.forms.gdprField[formId] && state.forms.gdprField[formId] === 'submit'), dialCode: state.forms.dialCode && state.forms.dialCode[formId] ? state.forms.dialCode[formId] : '+1', formConfigs: state.forms.activeForms[formId].configs, fields: state.forms.captureFields[formId], requiredFields: state.forms.requiredFields[formId], isAdobeSatelliteBlocked: state.system.isAdobeSatelliteBlocked, isButtonDisabled: state.forms.requiredFields[formId] && state.forms.validatedFields[formId] ? isSubmitDisabled(state.forms.requiredFields[formId], state.forms.validatedFields[formId]) : true, isLoading: state.system.isLoading, MILES_API: state.system.envStats !== null ? state.system.envStats.MILES_API : null, redirect: state.forms.activeForms[formId] && state.forms.activeForms[formId].thankyou ? state.forms.activeForms[formId].thankyou.redirect : null, submitFailed: state.miles.fail !== null, search: state.search.selected }; }; var submit_mapDispatchToProps = function mapDispatchToProps(dispatch) { return { onSubmitForRate: function onSubmitForRate(address, fields, formConfigs, formId) { dispatch(setLoadingStart(null, window.location.href)); submitRateLookup(dispatch, address, fields, formConfigs, formId); }, onSubmitForm: function () { var _onSubmitForm = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(formId, formConfigs, fields, search) { var newFields, newConfig, marketingFeedbackNotes, MILESResponse; return regenerator_default().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: tatari(formId); if (!(!window.ava || window.ava && !window.ava.trigger || window.ava && window.ava.trigger && typeof window.ava.trigger !== 'function')) { _context.next = 4; break; } logger_api({ level: 'error', msgType: 'SubmissionError', formId: formId, data: { message: 'Error during MILES submission process.', location: 'src/containers/submit' } }); return _context.abrupt("return"); case 4: removeFromWindowAbandoned(formId); // Combine the two value collections to one newFields = fields; newFields = setSearchFieldValue(search, formId, fields); dispatch(setLoadingStart(null, window.location.href)); if (!formConfigs.noSubmission) { _context.next = 12; break; } // do not submit but call window callbacks with the expected field set bypassSubmitToCallbacks(newFields, formConfigs, formId); dispatch(setLoadingFinish()); return _context.abrupt("return"); case 12: // Trigger submission newConfig = formConfigs; newConfig = setFieldOverwriteConfigs(newConfig, newFields); if (formId === 'PARTNERSIGNUPNEW' && newFields.filter(function (field) { return field.id === 'opp_subtype'; })[0].value !== 'DSP' && !newFields.find(function (field) { return field.id === 'clickwrap_terms_acceptance' && field.value === '1'; })) { marketingFeedbackNotes = newFields.find(function (field) { return field.id === 'marketing_feedback_notes'; }); if (!marketingFeedbackNotes) { newFields = newFields.concat({ id: 'marketing_feedback_notes', value: 'Prospect does not agree to terms and/or has questions about the terms.' }); } else { newFields = newFields.map(function (field) { if (field.id === 'marketing_feedback_notes') return { id: field.id, value: "".concat(field.value, "\n[NOTE] Prospect does not agree to terms and/or has questions about the terms.") }; return field; }); } } _context.next = 17; return window.ava.trigger(newFields, formId, newConfig, search); case 17: MILESResponse = _context.sent; dispatch(setMilesSubmissionStatus(MILESResponse.error, formId, MILESResponse.cleanPayload, MILESResponse.response, MILESResponse.success)); dispatch(setLoadingFinish()); if (MILESResponse.response.value && MILESResponse.response.value.submissionlimitcount >= formConfigs.submissionLimitCap) { dispatch(setSubmissionLimitExceeeded(formId)); // Remove initial call from window to ensure the count is correct on reload if (window && window.submissionLimit && window.submissionLimit[formId]) delete window.submissionLimit[formId]; } case 21: case "end": return _context.stop(); } } }, _callee); })); function onSubmitForm(_x, _x2, _x3, _x4) { return _onSubmitForm.apply(this, arguments); } return onSubmitForm; }(), onValidateAllFields: function onValidateAllFields(dialCode, formId, fields, requiredFields, activeData) { validateAllFields(dispatch, dialCode, formId, fields, requiredFields, activeData); } }; }; /* harmony default export */ const containers_submit = ((0,es/* connect */.$j)(submit_mapStateToProps, submit_mapDispatchToProps)(SubmitContainer)); ;// CONCATENATED MODULE: ./src/components/thankyou-link.jsx var ThankyouLink = function ThankyouLink(_ref) { var link = _ref.link; if (link.href === null) return null; return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("a", { href: link.href }, link.type === 'button' ? /*#__PURE__*/react.createElement("button", null, link.displayText) : link.displayText)); }; /* harmony default export */ const thankyou_link = (ThankyouLink); ;// CONCATENATED MODULE: ./src/styled/components/thankyou.js var thankyou_templateObject, thankyou_templateObject2, thankyou_templateObject3; var ThankyouContainer = styled_components_browser_esm/* default.div */.ZP.div(thankyou_templateObject || (thankyou_templateObject = (0,taggedTemplateLiteral/* default */.Z)(["\n font-family: ", "; /* Array is passed in */\n font-weight: 500;\n line-height: 1rem;\n text-align: center;\n width: 100%;\n"])), setFontFamily(form_theme.font.family["default"])); var ThankyouTitle = styled_components_browser_esm/* default.h3 */.ZP.h3(thankyou_templateObject2 || (thankyou_templateObject2 = (0,taggedTemplateLiteral/* default */.Z)(["\n color: ", ";\n font-family: \"Apertura\",source-sans-pro,Arial,sans-serif,\n font-size: 1.625em;\n margin: 0;\n"])), colors.black); var ThankyouSubTitle = styled_components_browser_esm/* default.p */.ZP.p(thankyou_templateObject3 || (thankyou_templateObject3 = (0,taggedTemplateLiteral/* default */.Z)(["\n color: ", ";\n font-family: \"Apertura\",source-sans-pro,Arial,sans-serif,\n font-size: 1.0625em;\n line-height: 1.375em;\n"])), colors.black); ;// CONCATENATED MODULE: ./src/components/thankyou.jsx var ThankyouMessage = function ThankyouMessage(_ref) { var message = _ref.message, link = _ref.link, title = _ref.title, subTitle = _ref.subTitle; return /*#__PURE__*/react.createElement(ThankyouContainer, { className: "thankyou-message" }, title !== null && /*#__PURE__*/react.createElement(ThankyouTitle, null, title), subTitle !== null && /*#__PURE__*/react.createElement(ThankyouSubTitle, null, subTitle), message !== null && Array.isArray(message) && message.map(function (m, i) { return /*#__PURE__*/react.createElement("p", { key: i }, m); }), message !== null && !Array.isArray(message) && /*#__PURE__*/react.createElement("p", null, message), link && link !== null && /*#__PURE__*/react.createElement(thankyou_link, { link: link })); }; /* harmony default export */ const thankyou = (ThankyouMessage); ;// CONCATENATED MODULE: ./src/components/terms.jsx // Components var TermsText = function TermsText(_ref) { var terms = _ref.terms, isLanguage = _ref.isLanguage; var links = terms.links, text = terms.text; var message = getLocaleStringText(text, 'terms', isLanguage); return /*#__PURE__*/react.createElement(TermsSection, null, /*#__PURE__*/react.createElement("p", null, " ", message, " ", links && /*#__PURE__*/react.createElement(terms_of_service_links, { links: links }), " ")); }; /* harmony default export */ const terms = (TermsText); ;// CONCATENATED MODULE: ./src/containers/entry.jsx function entry_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function entry_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? entry_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : entry_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function entry_createSuper(Derived) { var hasNativeReflectConstruct = entry_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function entry_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Styles // Types // Actions // Helpers // Components // Local Types var Entry = /*#__PURE__*/function (_Component) { (0,inherits/* default */.Z)(Entry, _Component); var _super = entry_createSuper(Entry); function Entry(props) { var _this; (0,classCallCheck/* default */.Z)(this, Entry); _this = _super.call(this, props); _this.state = { initialFormTrigger: 'disengaged' }; return _this; } (0,createClass/* default */.Z)(Entry, [{ key: "render", value: function render() { var _this2 = this; if (typeof this.props.initStatus === 'undefined') return null; // Stop processing is initStatus has not been set var _this$props = this.props, activeData = _this$props.activeData, activeForm = _this$props.activeForm, initStatus = _this$props.initStatus, initSuccess = _this$props.initSuccess, isDisabled = _this$props.isDisabled, isLoading = _this$props.isLoading, isModal = _this$props.isModal, hasTerms = _this$props.hasTerms, language = _this$props.language, onSetActiveForm = _this$props.onSetActiveForm, submitFailed = _this$props.submitFailed, submitSuccess = _this$props.submitSuccess, userInfo = _this$props.userInfo, disableHideFields = _this$props.disableHideFields; var formId = formatFormTemplateName(this.props.formId); // const formTemplate = formatFormTemplateName(formId); var isInline = isFormDisplayInline(activeData); var offsetView = getOffsetView(activeData); var isActiveForm = activeForm === formId; var activeClass = isActiveForm ? ' active' : ''; var configs = activeData.configs; if (submitSuccess && configs) { if (configs.submissionLimitId && submitSuccess.response && submitSuccess.response.value && submitSuccess.response.value.submissionlimitcount <= configs.submissionLimitCap && configs.submissionLimitThankYouMessage) return /*#__PURE__*/react.createElement("p", { className: "submissionlimit-thankyou" }, configs.submissionLimitThankYouMessage); if (!configs.submissionLimitId && activeData.thankyou && (activeData.thankyou.title && activeData.thankyou.title !== null || activeData.thankyou.message && activeData.thankyou.message !== null) && (!activeData.thankyou.redirect || activeData.redirect !== null && activeData.redirect !== '.html') && !isConnectedToChilipiper(formId)) return /*#__PURE__*/react.createElement(thankyou, activeData.thankyou); } return /*#__PURE__*/react.createElement(error_boundary, { isLanguage: language }, /*#__PURE__*/react.createElement(react.Fragment, null, isLoading && isActiveForm && /*#__PURE__*/react.createElement(components_loader, { location: 'default', showLoader: getShowLoader(activeData), loaderPosition: getLoaderPosition(activeData) }), activeData && activeData.templateError && /*#__PURE__*/react.createElement(TemplateErrorMessage, null, activeData.templateError), /*#__PURE__*/react.createElement(AppContainer, { key: formId, "data-avaform-root": formId, loadingTransition: activeForm === formId && isLoading && !getShowLoader(activeData) }, isDisabled && isDisabled === 'disabled' && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(components_loader, { location: 'default', showLoader: getShowLoader(activeData), loaderPosition: getLoaderPosition(activeData) })), initSuccess ? /*#__PURE__*/react.createElement(react.Fragment, null, !isModal && /*#__PURE__*/react.createElement(containers_form_header, { formId: formId }), /*#__PURE__*/react.createElement(AvaForm, { name: formId, autoComplete: "off", className: "".concat(formId, " avaform-form").concat(activeClass), formId: formId, isDisabled: isDisabled, isInline: isInline, key: formId, loaderPosition: getLoaderPosition(activeData), offset: offsetView, onFocus: function onFocus() { if (_this2.props.activeForm !== formId) { onSetActiveForm(formId); } // if this form is in a state of 'disengaged'/has not been triggered for the first time, compute args and fire avaform initial interaction analytics call if (_this2.state.initialFormTrigger === 'disengaged') { var DEFAULT_CAMPAIGN_ID = '7010b000001EwjLAAS'; var eVar15 = ''; var eVar115 = ''; var eVar80 = _this2.props.isModal; if (configs) { var url = window && window.location && window.location.href ? window.location.href : ''; var cleanUrl = url !== null ? url.split('?')[0] : ''; var params = new window.URLSearchParams(window.location.search); var campaignId = getParamFromAvaTag('campaignID') || params.get('CampaignID') || params.get('campaignID') || params.get('campaignid') || configs.campaign_id || DEFAULT_CAMPAIGN_ID; eVar15 = configs.contact_method ? configs.contact_method : ''; eVar15 = configs.offer ? "".concat(eVar15, ">").concat(configs.offer) : "".concat(eVar15, ">"); eVar15 = configs.poi ? "".concat(eVar15, ">").concat(configs.poi) : "".concat(eVar15, ">"); eVar15 = campaignId ? "".concat(eVar15, ">").concat(campaignId) : "".concat(eVar15, ">"); eVar15 = cleanUrl ? "".concat(eVar15, ">").concat(cleanUrl) : "".concat(eVar15, ">"); eVar115 = configs.poi ? configs.poi : 'null'; } avaformEngagementAnalyticsCall(_this2.props.formId, eVar15, eVar115, eVar80); // set initialFormTrigger to engaged, this logic won't be called again during the component lifecycle unless the component unmounts, then remounts _this2.setState(entry_objectSpread(entry_objectSpread({}, _this2.state), {}, { initialFormTrigger: 'engaged' })); } }, tabIndex: 0 }, (!userInfo || disableHideFields) && /*#__PURE__*/react.createElement(fields, { formId: formId }), submitFailed && activeForm !== null && activeForm === formId && !isInline && /*#__PURE__*/react.createElement(SubmissionErrorContainer, { className: "submit-error-container" }, /*#__PURE__*/react.createElement(system_error_message, { isLanguage: language })), /*#__PURE__*/react.createElement(containers_submit, { formId: formId })), submitFailed && isInline && activeForm !== null && activeForm === formId && /*#__PURE__*/react.createElement(SubmissionErrorContainer, { className: "submit-error-container", isInline: isInline }, /*#__PURE__*/react.createElement(system_error_message, { isLanguage: language })), hasTerms && /*#__PURE__*/react.createElement(terms, { terms: activeData.terms, isLanguage: language })) : /*#__PURE__*/react.createElement(react.Fragment, null, initStatus !== null && /*#__PURE__*/react.createElement(form_load_error, { initStatus: initStatus, formId: formId, isLanguage: language }))))); } }]); return Entry; }(react.Component); var entry_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId; formId = formatFormTemplateName(formId); var _ref = state.forms && state.forms.activeForms && state.forms.activeForms[formId] ? state.forms.activeForms[formId] : { configs: {} }, configs = _ref.configs; return { activeData: state.forms.activeForms[formId], activeForm: state.forms.activeForm, hasSystemError: state.system.systemError[formId] && state.system.systemError[formId] !== null, hasTerms: state.forms.activeForms[formId] && state.forms.activeForms[formId].terms, isDisabled: isFieldDisabled(state.forms.submissionlimit[formId], configs), initSuccess: state.forms.init[formId], initStatus: state.forms.initStatus[formId], isLoading: state.system.isLoading, isModal: state.forms.modalForms.includes(formId) || Boolean(state.forms.activeForms[formId] && state.forms.activeForms[formId].configs && state.forms.activeForms[formId].configs.theme && state.forms.activeForms[formId].configs.theme.layout === 'modal'), language: state.forms && state.forms.activeForms && state.forms.activeForms[formId] && state.forms.activeForms[formId].configs && state.forms.activeForms[formId].configs.language ? state.forms.activeForms[formId].configs.language : 'us', submitFailed: state.miles.fail && state.miles.fail[formId] ? state.miles.fail[formId] : null, submitSuccess: state.miles.success && state.miles.success[formId] ? state.miles.success[formId] : null }; }; var entry_mapDispatchToProps = function mapDispatchToProps(dispatch) { return { onSetActiveForm: function onSetActiveForm(formId) { return dispatch(setActiveForm(formId)); } }; }; /* harmony default export */ const entry = ((0,es/* connect */.$j)(entry_mapStateToProps, entry_mapDispatchToProps)(Entry)); ;// CONCATENATED MODULE: ./src/styled/modal.js var modal_templateObject, modal_templateObject2, modal_templateObject3, modal_templateObject4, modal_templateObject5, modal_templateObject6; var ModalContainer = styled_components_browser_esm/* default.div */.ZP.div(modal_templateObject || (modal_templateObject = (0,taggedTemplateLiteral/* default */.Z)(["\n background: #FFF;\n border-radius: 3px;\n position: absolute;\n display: ", ";\n flex-direction: column;\n top: ", "px;\n max-width: 600px;\n margin-top: 30px;\n margin-bottom: 10%;\n left: 50%;\n min-width: 330px;\n transform: translateX(-50%);\n width: 100%;\n z-index: 901;\n\n > * {\n box-sizing: border-box;\n\n &:last-child {\n padding: 30px;\n }\n }\n\n @media screen and (max-width: ", "px) {\n max-width: 360px;\n > *:last-child {\n padding: 15px 15px 30px;\n }\n }\n"])), function (props) { return props.toggle ? 'flex' : 'none'; }, function (props) { return props.positionTop ? props.positionTop : '30'; }, breakpoints.phone); var ModalHeader = styled_components_browser_esm/* default.div */.ZP.div(modal_templateObject2 || (modal_templateObject2 = (0,taggedTemplateLiteral/* default */.Z)(["\n align-items: center;\n background: #F1F1F1;\n display: flex;\n flex-direction: row;\n justify-content: center;\n padding: 0;\n position: relative;\n top: 0;\n left: 0;\n width: 100%;\n\n * {\n margin: 0;\n padding: 0;\n }\n > * {\n width: 100%;\n\n &:last-child {\n width: auto;\n }\n }\n\n button {\n background: none;\n border: none;\n color: #F60;\n float: right;\n font-size: 1.75rem;\n line-height: 0;\n padding: 18px 15px 22px;\n text-align: center;\n\n &:hover {\n border: none;\n cursor: pointer;\n }\n }\n"]))); var TitleContainer = styled_components_browser_esm/* default.div */.ZP.div(modal_templateObject3 || (modal_templateObject3 = (0,taggedTemplateLiteral/* default */.Z)(["\n padding: 15px;\n"]))); var Description = styled_components_browser_esm/* default.p */.ZP.p(modal_templateObject4 || (modal_templateObject4 = (0,taggedTemplateLiteral/* default */.Z)([""]))); var HeaderTitle = styled_components_browser_esm/* default.h3 */.ZP.h3(modal_templateObject5 || (modal_templateObject5 = (0,taggedTemplateLiteral/* default */.Z)([""]))); var NoClick = styled_components_browser_esm/* default.div */.ZP.div(modal_templateObject6 || (modal_templateObject6 = (0,taggedTemplateLiteral/* default */.Z)(["\n background: #000;\n display: ", ";\n opacity: .8;\n filter: alpha(opacity=80%);\n position: fixed;\n top: 0;\n left: 0;\n width: 101%;\n height: 101%;\n z-index: 900;\n"])), function (props) { return props.toggle ? 'block' : 'none'; }); ;// CONCATENATED MODULE: ./src/components/modal/header.js // Styles // types var ModalHeaderComponents = function ModalHeaderComponents(_ref) { var activeData = _ref.activeData, onToggleModal = _ref.onToggleModal, hasBeenSubmitted = _ref.hasBeenSubmitted; if (!activeData) return null; var title = activeData.title; return /*#__PURE__*/react.createElement(ModalHeader, null, /*#__PURE__*/react.createElement(TitleContainer, null, title && /*#__PURE__*/react.createElement(HeaderTitle, null, title)), /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement("button", { "data-dismiss": "modal", onClick: function onClick() { return onToggleModal(hasBeenSubmitted); } }, "x"))); }; /* harmony default export */ const header = (ModalHeaderComponents); ;// CONCATENATED MODULE: ./src/containers/modal/header.js function header_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function header_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? header_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : header_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Components // Types // eslint-disable-next-line import/no-cycle var header_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId; return header_objectSpread(header_objectSpread({}, form_modal_mapStateToProps(state, ownProps)), {}, { activeData: state.forms.activeForms[formId] }); }; /* harmony default export */ const modal_header = ((0,es/* connect */.$j)(header_mapStateToProps, form_modal_mapDispatchToProps)(header)); ;// CONCATENATED MODULE: ./src/containers/form-modal.jsx function form_modal_createSuper(Derived) { var hasNativeReflectConstruct = form_modal_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function form_modal_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Import Types // Actions // Containers // eslint-disable-next-line import/no-cycle // Components // Styles // Local Types var Modal = /*#__PURE__*/function (_Component) { (0,inherits/* default */.Z)(Modal, _Component); var _super = form_modal_createSuper(Modal); function Modal() { (0,classCallCheck/* default */.Z)(this, Modal); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(Modal, [{ key: "render", value: function render() { var _this$props = this.props, activeData = _this$props.activeData, disableHideFields = _this$props.disableHideFields, formId = _this$props.formId, onToggleModal = _this$props.onToggleModal, hasBeenSubmitted = _this$props.hasBeenSubmitted, language = _this$props.language, toggle = _this$props.toggle, userInfo = _this$props.userInfo; if (!activeData || !formId) return null; var submit = activeData.submit; var displayText = activeData.configs && activeData.configs.button_label || submit.displayText || 'Get Started'; return /*#__PURE__*/react.createElement(error_boundary, { isLanguage: language }, /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement(ModalButton, { onClick: function onClick() { return onToggleModal(hasBeenSubmitted); } }, displayText)), /*#__PURE__*/react.createElement(NoClick, { className: "background-container", toggle: toggle, onClick: function onClick() { return onToggleModal(hasBeenSubmitted); } }), /*#__PURE__*/react.createElement(ModalContainer, { toggle: toggle, className: "avaform-modal-container avaform-modal", positionTop: window.pageYOffset + 30 }, /*#__PURE__*/react.createElement(modal_header, { formId: formId, onToggleModal: onToggleModal, hasBeenSubmitted: hasBeenSubmitted }), /*#__PURE__*/react.createElement(entry, { formId: formId, userInfo: userInfo, disableHideFields: disableHideFields }))); } }]); return Modal; }(react.Component); var form_modal_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId; return { activeData: state.forms.activeForms[formId], toggle: Boolean(state.forms.showModal[formId]), hasBeenSubmitted: Boolean(state.miles.success[formId] && state.miles.success[formId].response && state.miles.success[formId].response.transactionid.length), language: state.forms && state.forms.activeForms && state.forms.activeForms[formId] && state.forms.activeForms[formId].configs && state.forms.activeForms[formId].configs.language ? state.forms.activeForms[formId].configs.language : 'us' }; }; var form_modal_mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { var formId = ownProps.formId; return { onToggleModal: function onToggleModal(hasBeenSubmitted) { if (hasBeenSubmitted) { // dispatch(resetForm(formId)); dispatch(clearFormSubmit(formId)); } dispatch(toggleModal(formId)); } }; }; /* harmony default export */ const form_modal = ((0,es/* connect */.$j)(form_modal_mapStateToProps, form_modal_mapDispatchToProps)(Modal)); ;// CONCATENATED MODULE: ./src/containers/app.jsx function app_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function app_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? app_ownKeys(Object(source), !0).forEach(function (key) { (0,defineProperty/* default */.Z)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : app_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function app_createSuper(Derived) { var hasNativeReflectConstruct = app_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,getPrototypeOf/* default */.Z)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,getPrototypeOf/* default */.Z)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,possibleConstructorReturn/* default */.Z)(this, result); }; } function app_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // Actions // Data // API // Helpers // Import Types // Config // Containers // import SpiningContainer from '../components/spinner'; var FORMDATAKEYS = Object.keys(form_data); var App = /*#__PURE__*/function (_Component) { (0,inherits/* default */.Z)(App, _Component); var _super = app_createSuper(App); function App() { (0,classCallCheck/* default */.Z)(this, App); return _super.apply(this, arguments); } (0,createClass/* default */.Z)(App, [{ key: "componentDidMount", value: function componentDidMount() { registerHelperFunctionToWindow('clearFormValues', this.props.onClearCapturedValues); var _this$props = this.props, activeConfigs = _this$props.activeConfigs, formId = _this$props.formId, userInfo = _this$props.userInfo, disableHideFields = _this$props.disableHideFields, isMaxmindInsightsSet = _this$props.isMaxmindInsightsSet, onEloquaLookup = _this$props.onEloquaLookup, onSetEloquaLookupValid = _this$props.onSetEloquaLookupValid, onSetMilesMaxmind = _this$props.onSetMilesMaxmind; setPackageStats(); if (!this.props.hasSystemError) { if (this.props.formId === null) { // TODO: It should never get here. Double check this secondary check logger_api({ level: 'error', msgType: 'FormLoadError', formId: '', data: { error: 'entry.js system failure', message: 'No form id found at entry.js' } }); this.props.onSystemError(formId, 'Error on entry init', 'No form id found at entry.js. Can not load form', 500); return; } var el = document.getElementById(formId); // Find the element on the page var _window$location = window.location, href = _window$location.href, search = _window$location.search; var formConfig = el && el.getAttribute('data-configs'); // Get formConfig from data-config off element with id avaform-root // Check if is base64 encoded try { formConfig = formConfig && formConfig !== null ? atob(formConfig) : formConfig; } catch (err) { // Do nothing // Assumes this is default AEM set state } formInitValidation(this.props.onSystemError, formId, formConfig); // Validate data- elements found on div if (el && formConfig && formConfig !== null && (0,ui/* isJson */.sO)(formConfig)) { var _this$props2 = this.props, onInitApp = _this$props2.onInitApp, onInitFormApp = _this$props2.onInitFormApp; var _hasUserInfo = Boolean(this.props.userInfo !== null && this.props.userInfo && this.props.userInfo.email !== ''); // Check if is logged in // Try to run Elouqa look early if (!_hasUserInfo && activeConfigs && activeConfigs.autofillForm && !/partner/gi.test(formId)) { lookupUserDataInEloqua({ formId: formId, hasUserInfo: _hasUserInfo, configs: activeConfigs, onEloquaLookup: onEloquaLookup, onSetEloquaLookupValid: onSetEloquaLookupValid }); } setAttributesToRootDiv(el, formId, this.props.isModal); onInitApp(src_config, (0,ui/* getAdobeVisitorId */.Su)()); // Save application information to state (state.system reducer) // If this not an existing form from form-data JSON, then hit the api and look for it in the S3 bucket. // File name will be alphanumeric all lowercase only. Hyphens and other non-alphanumerice are stripped out. var template = 'BASIC'; // Pluck form templatate from json Object and verify/pass try { template = JSON.parse(formConfig).template; template = template.replace(/[\W_]+/gi, '').toLowerCase(); } catch (err) { // Do nothing } if (!FORMDATAKEYS.includes(formId) && !FORMDATAKEYS.includes(template) && !FORMDATAKEYS.includes(template.toUpperCase())) this.props.onInitFormAppWithApi(formId, formConfig, this.props.isModal, search, href, userInfo, disableHideFields);else { onInitFormApp(formConfig, formId, this.props.isModal, search, href, userInfo, disableHideFields); // Save form information to state (state.forms reducer) } // Run maxmind to get INSIGHTS data if (!isMaxmindInsightsSet) onSetMilesMaxmind(this.props.formId); // Initial full ping for user data } else { logger_api({ level: 'error', msgType: 'FormLoadError', formId: '', data: { error: 'entry.js system failure', message: 'Element or formId not found FNF - form will not render' } }); } } } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { var _this$props3 = this.props, activeConfigs = _this$props3.activeConfigs, activeData = _this$props3.activeData, formId = _this$props3.formId, userInfo = _this$props3.userInfo, disableHideFields = _this$props3.disableHideFields, isMaxmindUserSet = _this$props3.isMaxmindUserSet, maxmindStatus = _this$props3.maxmindStatus, onAddRequiredField = _this$props3.onAddRequiredField, onEloquaLookup = _this$props3.onEloquaLookup, onGetSubmissionLimitCount = _this$props3.onGetSubmissionLimitCount, onSetEloquaLookupValid = _this$props3.onSetEloquaLookupValid; // Trigger datalayer tracking if (activeConfigs) { // set configs to window for later pull from for abandon tracking window.ava.staticFormConfigs = app_objectSpread(app_objectSpread({}, window.ava.staticFormConfigs), {}, (0,defineProperty/* default */.Z)({}, formId, activeConfigs)); var triggerResponse = (0,ui/* dataLayerTrigger */.YE)(formId, 'form_start'); if (!triggerResponse.success) { // if data layer trigger failed, return resulting errors and log to sumo logger_api({ level: 'error', msgType: 'AFR - DataLayerTriggerError', formId: formId, data: triggerResponse.errors // array of errors pushed from the helper }); } } if (activeConfigs && activeConfigs.submissionLimitId) { // TODO: call API for limit count var submissionLimitId = activeConfigs.submissionLimitId, submissionLimitCap = activeConfigs.submissionLimitCap; onGetSubmissionLimitCount(formId, submissionLimitId, submissionLimitCap); } var hasUserInfo = Boolean(this.props.userInfo !== null && this.props.userInfo && this.props.userInfo.email !== ''); // Check if is logged in // Catch run eloqua look up if rerender and hasn't run. if (!hasUserInfo && activeConfigs && activeConfigs.autofillForm) { lookupUserDataInEloqua({ formId: formId, hasUserInfo: hasUserInfo, configs: activeConfigs, onEloquaLookup: onEloquaLookup, onSetEloquaLookupValid: onSetEloquaLookupValid }); } if (userInfo !== prevProps.userInfo) { window.localStorage.removeItem('avaAutoSave'); // included here for testing var el = document.getElementById(formId); var formConfig = el && el.getAttribute('data-configs'); try { formConfig = formConfig && formConfig !== null ? atob(formConfig) : formConfig; } catch (err) { // Do nothing // Assumes value is not encoded } var _window$location2 = window.location, href = _window$location2.href, search = _window$location2.search; if (el && formConfig && formConfig !== null && (0,ui/* isJson */.sO)(formConfig)) { // for flow // Ensure base64 decode has been sent through this.props.onInitFormApp(formConfig, formId, this.props.isModal, search, href, userInfo, disableHideFields); // Save form information to state (state.forms reducer) } } var elem = document.querySelector("[data-template=\"".concat(this.props.formId, "\"]")); if (elem && checkFormModal(elem)) { elem.setAttribute('data-active-modal', checkFormModal(elem).toString()); this.props.onTrackAsModalForm(this.props.formId); } // Returns boolean if the activeData in our form has a field with an id of "country". // We'll use this to determine whether our component needs to re-render with a country field added var countryFieldAdded = activeData && activeData.fields && activeData.fields.some(function (field) { return field.id === 'country'; }); // If Maxmind was successful, no user data was returned, and the country field wasn't added, dispatch an action and add country to activeData on form // If maxmind failed or was stopped (for testing), and the country field wasn't added, dispatch and add country field if ((maxmindStatus === 'SUCCESS' || maxmindStatus === 'FAILEDMILES' || maxmindStatus === 'STOPPED') && !isMaxmindUserSet && !countryFieldAdded) { var newActiveDataFields = activeData.fields.concat({ displayText: 'Country', id: 'country', placeholder: 'Country', required: true, type: 'select' }); onAddRequiredField(newActiveDataFields, formId, 'country'); } } }, { key: "render", value: function render() { var _this$props4 = this.props, activeData = _this$props4.activeData, hasSystemError = _this$props4.hasSystemError, isModal = _this$props4.isModal, language = _this$props4.language, userInfo = _this$props4.userInfo, onCaptureUserInfo = _this$props4.onCaptureUserInfo, disableHideFields = _this$props4.disableHideFields; var formId = this.props.formId || null; var Container = isModal ? form_modal : entry; // Switch render container based on theme: { layout: ... }; if (!activeData || !formId) return null; if (activeData.configs && activeData.configs.chilipiperRouter !== null && activeData.configs.chilipiperRouter !== '') { var scripts = activeData.scripts; var _fields = activeData.fields; scripts = scripts || []; var hasPhoneField = _fields.filter(function (f) { return f && f.id && f.id === 'phone'; }).length > 0; if (hasPhoneField && scripts && scripts.indexOf('https://js.chilipiper.com/marketing.js') === -1) { scripts.push('https://js.chilipiper.com/marketing.js'); } activeData.scripts = scripts; } if (activeData && activeData.scripts && activeData.scripts.length > 0) { loadAssociatedScripts(activeData.scripts); } if (userInfo) { // capture information from userInfo, bypasses regular input validation onCaptureUserInfo(activeData.fields, userInfo, formId); } if (hasSystemError) return /*#__PURE__*/react.createElement(system_error_message, { isLanguage: language }); return /*#__PURE__*/react.createElement(Container, { formId: formId, userInfo: userInfo, disableHideFields: disableHideFields }); } }]); return App; }(react.Component); var app_mapStateToProps = function mapStateToProps(state, ownProps) { var formId = ownProps.formId; formId = formatFormTemplateName(formId); return { activeData: state.forms.activeForms[formId], activeConfigs: state.forms.activeForms[formId] ? state.forms.activeForms[formId].configs : null, hasSystemError: state.system.systemError[formId] && state.system.systemError[formId] !== null, isMaxmindInsightsSet: state.maxmind !== null && state.maxmind && state.maxmind.INSIGHTS ? Boolean(Object.keys(state.maxmind.INSIGHTS).length > 0) : false, // $FlowFixMe isMaxmindUserSet: state.maxmind !== null && state.maxmind && state.maxmind.user ? Boolean(Object.keys(state.maxmind.user).length > 0) : false, // $FlowFixMe: TO-DO: revisit this after initial testing language: state.forms && state.forms.activeForms && state.forms.activeForms[formId] && state.forms.activeForms[formId].configs && state.forms.activeForms[formId].configs.language ? state.forms.activeForms[formId].configs.language : 'us', maxmindStatus: state.maxmind.status, submitFailed: state.miles && state.miles.fail && state.miles.fail[formId] ? state.miles.fail[formId] : null, submitSuccess: state.miles && state.miles.success && state.miles.success[formId] ? state.miles.success[formId] : null }; }; var app_mapDispatchToProps = function mapDispatchToProps(dispatch) { return { onAddRequiredField: function onAddRequiredField(newFormFields, formId, newField) { return dispatch(addRequiredField(newFormFields, formId, newField)); }, onCaptureUserInfo: function onCaptureUserInfo(formFields, userInfo, formId) { return captureUserInfo(dispatch, formFields, userInfo, formId); }, onClearCapturedValues: function onClearCapturedValues(formId, fields) { return dispatch(clearCapturedValues(formId, fields)); }, onEloquaLookup: function onEloquaLookup(formId, hasUserInfo) { return eloquaLookup(dispatch, formId, hasUserInfo); }, onGetSubmissionLimitCount: function onGetSubmissionLimitCount(formId, submissionlimitid, submissionlimitCap) { return submissionLimitAPI(dispatch, formId, submissionlimitid, submissionlimitCap); }, onInitApp: function onInitApp(envStats, adobeVisitorId) { return dispatch(initApplication(envStats, adobeVisitorId)); }, onInitFormApp: function onInitFormApp(configs, formId, isModal, params, url, userInfo, disableHideFields) { return dispatch(initFormApplication(configs, formId, isModal, params, url, userInfo, disableHideFields)); }, onInitFormAppWithApi: function onInitFormAppWithApi(formId, configs, isModal, params, url, userInfo, disableHideFields) { return fetchFormTemplateData(dispatch, formId, configs, isModal, params, url, userInfo, disableHideFields); }, onSetMilesMaxmind: function onSetMilesMaxmind(formId) { return milesMaxmindAPI(dispatch, formId); }, onSetEloquaLookupValid: function onSetEloquaLookupValid(formId, values) { return dispatch(setEloquaLookupValid(formId, values)); }, onSystemError: function onSystemError(formId, error, info, statusCode) { return dispatch(setSystemError(formId, error, info, statusCode)); }, onTrackAsModalForm: function onTrackAsModalForm(formId) { return dispatch(trackAsModalForm(formId)); } }; }; /* harmony default export */ const app = ((0,es/* connect */.$j)(app_mapStateToProps, app_mapDispatchToProps)(App)); ;// CONCATENATED MODULE: ./src/index.js /* eslint-disable import/first */ // Configs // Components // Helpers // Styles var middleware = [redux_thunk_es/* default */.Z]; window.ava = window.ava || {}; window.ava.user = { isLoggedIn: false }; if ((0,ui/* checkIfIsDevelop */.QK)() || (0,ui/* checkForDebug */.HM)()) middleware.push((0,redux_logger.createLogger)()); var store = (0,redux/* createStore */.MT)(reducers, redux/* applyMiddleware.apply */.md.apply(void 0, middleware)); var completedForms = window.avaCompletedForms || []; /* eslint-disable consistent-return */ // eslint-disable-next-line func-names window.onbeforeunload = function () { (0,ui/* trackAbandonedForms */.Mg)(window.ava.abandonedForms); if (window.ava && window.ava.abandonedForms) { // eslint-disable-next-line array-callback-return window.ava.abandonedForms.map(function (formId) { (0,ui/* dataLayerTrigger */.YE)(formId, 'form_abandon'); }); } if (localStorage.getItem('avlrTesting')) { // Setting avlrTesting will 'pause' the unloading allowing the console to be read. // eslint-disable-next-line no-console console.log(JSON.stringify(window.ava.abandonedForms)); return 'Are you sure you want to leave?'; } }; /* eslint-enable consistent-return */ function initAvaform() { var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'avaform-root'; var formTemplate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var isModal = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var disableHideFields = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var userInfo = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; if (formTemplate === null) return; if (!document.getElementById(id)) { logger_api({ level: 'error', msgType: 'FormRenderError', formId: id, data: { message: "".concat(formTemplate, " - src/index.js system failure") } }); return; } react_dom.render( /*#__PURE__*/react.createElement(es/* Provider */.zt, { store: store }, /*#__PURE__*/react.createElement(app, { formId: id, formTemplate: formTemplate, isModal: isModal, disableHideFields: disableHideFields, userInfo: userInfo })), document.getElementById(id)); } function setForms(userInformation) { var errorNotification = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; // Form title styling. // Form title is outside the application so this needs to append to the head // TODO: update AEM to pass in form title for application control/styling and remove this funtion/feature var isHead = document.head || document.getElementsByTagName('head')[0]; if (isHead) { var style = document.createElement('style'); style.id = 'avaFormReactStylesAppend'; style.innerHTML = ".avaform-js .form-title { ".concat(defaultFormTitle, "}"); isHead.appendChild(style); } var demoItems = document.getElementsByClassName('avaform-demo-alert'); if (demoItems.length > 0) { for (var d = 0; d < demoItems.length; d++) { demoItems[d].style.display = 'none'; } } var forms = document.getElementsByClassName('avaform-root'); if (forms.length < 1 && errorNotification) { logger_api({ level: 'error', msgType: 'FormRenderError', formId: '', data: { message: 'No elements by className "avaform-root"' } }); } var userInfo = formatUserInfo(userInformation); if (userInfo && userInfo !== null && userInfo.email && userInfo.email !== '') { window.ava.user = { isLoggedIn: true }; } if (userInfo) { completedForms.length = 0; var removeAvaformComplete = document.querySelector('[data-avaform-complete="true"]'); if (removeAvaformComplete && removeAvaformComplete != null) removeAvaformComplete.removeAttribute('data-avaform-complete'); window.localStorage.removeItem('avaAutoSave'); } for (var i = 0; i < forms.length; i++) { var isSet = forms[i].getAttribute('data-complete'); // data-configs ties to finalJsonObject in react Helpers var configs = forms[i].getAttribute('data-configs') || '{}'; try { configs = atob(configs); } catch (err) { // Do nothing. // Assumes it is not decoded and is AEM default JSON } configs = (0,ui/* isJson */.sO)(configs) ? JSON.parse(configs) : null; if (configs === null) { logger_api({ level: 'error', msgType: 'FormRenderError', formId: '', data: { message: 'No config found on element.' } }); return; // If no configs are found, stop processing } var isModalForm = false; var id = forms[i].getAttribute('id'); // Get the div ID if (!id) { // If div ID is not set, use the config template id = configs.template; id = formatFormTemplateName(id); isModalForm = configs.theme && configs.theme.layout && configs.theme.layout === 'modal'; if (completedForms.includes(id)) { id = formatFormTemplateName("".concat(id, "-").concat(i, "-").concat(completedForms.length)); } // If is already set, stop processing forms[i].setAttribute('id', id); // set the div ID forms[i].setAttribute('data-template', configs.template); // set redundant data-formtemplate forms[i].setAttribute('data-avaform-complete', 'true'); // set redundant data-formtemplate // Run form process window.avaCompletedForms = completedForms; } completedForms.push(id); if (!isSet && id) initAvaform(id, configs.template, isModalForm, configs.showForm, userInfo); } } /* If react hits this on initial render then we request a refire of auth complete we only require this on initial render, if the set forms fn is available on window we use that instead */ function setWindowForms() { try { var requestAuth = new CustomEvent('auth:requested'); window.setForms = function (userInfo) { return setForms(userInfo, true); }; setForms(null); window.dispatchEvent(requestAuth); } catch (err) { console.error('an error occurred in set window forms', err); } } setWindowForms(); var readyStateCallback = function readyStateCallback() { try { var scripts = document.getElementsByTagName('script'); var hasSubmissionScript = false; for (var i = 0; i < scripts.length; i++) { if (scripts[i].src.indexOf('/react/micro-service/') !== -1) hasSubmissionScript = true; } if (!hasSubmissionScript) { var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.src = src_config.SUBMISSION_SERVICES; script.id = 'rms-submission-service'; if (!document.getElementById('rms-submission-service')) head.appendChild(script); } } catch (err) { console.error('an error occurred in readyStateCallback', err); } }; // $FlowFixMe: Allow if (document.readyState === 'complete' || document.readyState !== 'loading' && document.documentElement && !document.documentElement.doScroll) readyStateCallback();else document.addEventListener('DOMContentLoaded', readyStateCallback);//# sourceURL=[module] //# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxDQUNMO0VBQ0RDLGNBQWMsRUFBRSxDQUNkLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJ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Qy9DcVEsTUFBTSxDQUFDRSxHQUFHLEdBQUdtL0IsOEJBQWlDO01BQzlDci9CLE1BQU0sQ0FBQ25iLEVBQUUsR0FBRyx3QkFBd0I7TUFDcEMsSUFBSSxDQUFDMkssUUFBUSxDQUFDQyxjQUFjLENBQUMsd0JBQXdCLENBQUMsRUFBRXd3QyxJQUFJLENBQUNud0MsV0FBVyxDQUFDa1EsTUFBTSxDQUFDO0lBQ2xGO0VBQ0EsQ0FBQyxDQUFDLE9BQU9oTixHQUFHLEVBQUU7SUFDWjFVLE9BQU8sQ0FBQzJULEtBQUssQ0FBQyx5Q0FBeUMsRUFBRWUsR0FBRyxDQUFDO0VBQy9EO0FBQ0YsQ0FBQzs7QUFFRDtBQUNBLElBQUl4RCxRQUFRLENBQUNveEMsVUFBVSxLQUFLLFVBQVUsSUFBS3B4QyxRQUFRLENBQUNveEMsVUFBVSxLQUFLLFNBQVMsSUFBSXB4QyxRQUFRLENBQUNxeEMsZUFBZSxJQUFJLENBQUNyeEMsUUFBUSxDQUFDcXhDLGVBQWUsQ0FBQ0MsUUFBUyxFQUFFSixrQkFBa0IsRUFBRSxDQUFDLEtBQ2pLbHhDLFFBQVEsQ0FBQ2dxQixnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRWtuQixrQkFBa0IsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9zaGFyZWQvZW52LmpzPzFiNzkiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbmZpZy5qcz9kYjQ5Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9zaGFyZWQvYXBpLXNldHRpbmdzLmpzPzdlNjAiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2FwaS9sb2dnZXItYXBpLmpzP2FkMmYiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL3JlZHVjZXJzL2F2YXRheC5qcz83NDhmIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9yZWR1Y2Vycy9icml0ZS12ZXJpZnkuanM/YTNiNyIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29uc3RhbnRzL2Zvcm0tY29uZmlncy5qcz80ZTQwIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb25zdGFudHMvZm9ybS1kYXRhLmpzPzQ5MzAiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnN0YW50cy9lbG9xdWEtZmllbGQtbWFwcGluZy5qcz9lNjc0Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9oZWxwZXJzL2NoaWxpcGlwZXIuanM/MGYyMCIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvbGliL2FjdGlvbnMuanM/MWQyYiIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvc2NoZW1hL2JyaXRlLXZlcmlmeS5qcz9lMDk0Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9hcGkvYnJpdGUtdmVyaWZ5LmpzPzViOGMiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnN0YW50cy9lcnJvci1tZXNzYWdlcy5qcz8xZjc0Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb25zdGFudHMvcmVnZXhwLmpzPzdmMzMiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2hlbHBlcnMvZm9ybXMuanM/NDlhNyIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29uc3RhbnRzL2xhbmd1YWdlLWJ5LWZpZWxkLmpzPzA5YjMiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnN0YW50cy9sYW5ndWFnZS1ieS1xdWVzdGlvbi5qcz8yYTA0Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb25zdGFudHMvbGFuZ3VhZ2UtYnktZXJyb3IuanM/MjBmZCIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29uc3RhbnRzL2xhbmd1YWdlLmpzPzFkZjUiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2hlbHBlcnMvbGFuZ3VhZ2UuanM/MTc1NSIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvaGVscGVycy9hbmFseXRpY3MuanM/Mjc2MSIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvcmVkdWNlcnMvZm9ybXMuanM/YTEzNCIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvcmVkdWNlcnMvbWF4bWluZC5qcz8wMGMzIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9yZWR1Y2Vycy9taWxlcy5qcz82M2U3Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9yZWR1Y2Vycy9zZWFyY2guanM/Y2M0ZiIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvcmVkdWNlcnMvc3lzdGVtLmpzP2JiMTkiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL3JlZHVjZXJzL2luZGV4LmpzPzcyODkiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2hlbHBlcnMvZWxvcXVhLmpzPzI2ZTkiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL3NjaGVtYS9lbG9xdWEtbG9va3VwLmpzPzIwYmIiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2FwaS9lbG9xdWEtYXBpLmpzP2UyY2IiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL3NjaGVtYS9tYXhtaW5kLmpzPzMyMGUiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2hlbHBlcnMvbWF4bWluZC5qcz9lMGI0Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9hcGkvbWF4bWluZC5qcz80ODNjIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9hcGkvbWlsZXMtbWF4bWluZC5qcz8xZjYzIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9zY2hlbWEvZm9ybS10ZW1wbGF0ZS1kYXRhLmpzP2YzZTkiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2FwaS9mZXRjaC1mb3JtLWRhdGEuanM/NzViOSIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvc2NoZW1hL3N1Ym1pc3Npb24tbGltaXQuanM/NjMzYyIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvYXBpL3N1Ym1pc3Npb24tbGltaXQtYXBpLmpzP2E3ZGQiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2hlbHBlcnMvYXBwLXN0YXRzLmpzPzg4ZDYiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2hlbHBlcnMvaW5kZXguanM/Y2U5NiIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvc3R5bGVkL2NvbmZpZy9jb2xvcnMuanM/NmY3MSIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvc3R5bGVkL2NvbmZpZy9mb3JtLXRoZW1lLmpzPzY1MTciLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnN0YW50cy9icmVha3BvaW50cy5qcz9hMTNjIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9zdHlsZWQvaGVscGVycy9pbmRleC5qcz81NTJhIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9zdHlsZWQvY29udGFpbmVycy9hcHAuanM/NjI3YSIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY3NzL2ljb21vb24uY3NzP2ZhYzMiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2Nzcy9jbGlja3dyYXAuY3NzPzRhMTYiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL3N0eWxlZC9mb3JtLmpzPzM1MjgiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbXBvbmVudHMvc3lzdGVtLWVycm9yLW1lc3NhZ2UuanN4PzdkM2QiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnRhaW5lcnMvZXJyb3ItYm91bmRhcnkuanN4PzZkMzciLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL3N0eWxlZC9jb21wb25lbnRzL2xvYWRlci5qcz8zNGE0Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb21wb25lbnRzL3NwaW5uZXIuanN4P2I0ZDUiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbXBvbmVudHMvbG9hZGVyLmpzeD9jOGViIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb21wb25lbnRzL2Zvcm0taGVhZGVyLmpzeD82MTM3Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb250YWluZXJzL2Zvcm0taGVhZGVyLmpzeD9hZDkxIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb21wb25lbnRzL2Zvcm0tbG9hZC1lcnJvci5qc3g/NjllYyIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvc3R5bGVkL2NvbXBvbmVudHMvdGVybXMtb2Ytc2VydmljZXMuanM/Y2U2OCIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29tcG9uZW50cy9maWVsZHMvdGVybXMtb2Ytc2VydmljZS1saW5rcy5qc3g/MDA1YyIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29tcG9uZW50cy9maWVsZHMvY2hlY2tib3guanN4P2JlYzciLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnRhaW5lcnMvZmllbGRzL2NoZWNrYm94LmpzeD9kYmMyIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9yYWRpby5qc3g/OWY5ZSIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29udGFpbmVycy9maWVsZHMvcmFkaW8uanN4PzJhNjkiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2dkcHItZWxpZ2libGUuanN4P2M4NGIiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnN0YW50cy90YWJsZXMvYXZhLXRhYmxlcy5qcz9jYmM5Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9oZWxwZXJzL3VzZXIuanM/ZTc2OCIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29udGFpbmVycy9maWVsZHMvZ2Rwci1lbGlnYWJsZS5qc3g/ZjNkNCIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29tcG9uZW50cy9maWVsZHMvcGxhY2Vob2xkZXIuanN4P2UwY2MiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2Nzcy9mbGF0cGlja3IuY3NzPzRiNmYiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2RhdGUuanN4PzY1Y2EiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnRhaW5lcnMvZmllbGRzL2RhdGUuanN4PzUyZGIiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2hpZGRlbi5qc3g/ZTM1ZCIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29uc3RhbnRzL3BpY2tsaXN0LmpzPzAwOGQiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnRhaW5lcnMvZmllbGRzL2hpZGRlbi5qc3g/N2E0NyIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29tcG9uZW50cy9maWVsZHMvbXVsdGktc2VsZWN0LmpzeD9kZTc2Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9ob29rcy91c2VEZWJvdW5jZS5qcz80M2I3Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9zY2hlbWEvY29ubmVjdG9yLmpzPzI1ZDYiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL3NjaGVtYS90eXBlYWhlYWQuanM/Nzc4YSIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvYXBpL2Nvbm5lY3RvcnMuanM/MTlmYiIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvc3R5bGVkL2NvbnRhaW5lcnMvcGlja2xpc3QuanM/YmIwYSIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29tcG9uZW50cy9waWNrbGlzdC5qc3g/NTU3ZSIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29udGFpbmVycy9waWNrbGlzdC5qc3g/YzU0YyIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29tcG9uZW50cy9maWVsZHMvdGV4dC5qc3g/MDM5NCIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29udGFpbmVycy9maWVsZHMvdGV4dC5qc3g/M2JkNiIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29udGFpbmVycy9maWVsZHMvbXVsdGktc2VsZWN0LmpzeD9mNzVhIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9zZWxlY3QuanN4PzM2MzUiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnRhaW5lcnMvZmllbGRzL3NlbGVjdC5qc3g/OTdhMSIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29uc3RhbnRzL2NvdW50cmllcy5qcz85MDdlIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9jb3VudHJ5LmpzeD8zMmFjIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb250YWluZXJzL2ZpZWxkcy9jb3VudHJ5LmpzeD85MmQwIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb21wb25lbnRzL2ZpZWxkcy90ZXh0YXJlYS5qc3g/OGE2YyIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29udGFpbmVycy9maWVsZHMvdGV4dGFyZWEuanN4PzQ1MzciLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ludGwtcGhvbmUuanN4PzAxMjQiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnRhaW5lcnMvZmllbGRzL2ludGwtcGhvbmUuanN4P2Q1NmIiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnN0YW50cy91cy1zdGF0ZXMtdGVycml0b3JpZXMuanM/NmQyYiIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29tcG9uZW50cy9maWVsZHMvc3RhdGUtc2VsZWN0LmpzeD9lNmMxIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb250YWluZXJzL2ZpZWxkcy9zdGF0ZS1zZWxlY3QuanN4P2M0MTIiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbXBvbmVudHMvZmllbGRzL3Rlcm1zLW9mLXNlcnZpY2UuanN4P2RmNzMiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnRhaW5lcnMvZmllbGRzL3Rlcm1zLW9mLXNlcnZpY2UuanN4P2VkMjciLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2NsaWNrd3JhcC5qc3g/YzMwZiIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29udGFpbmVycy9maWVsZHMvY2xpY2t3cmFwLXRlcm1zLmpzeD9lNDE5Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb250YWluZXJzL3NldEZpZWxkcy5qc3g/ODk5ZCIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvaGVscGVycy9nZXQtZmllbGRzLmpzPzlkMDUiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnRhaW5lcnMvZmllbGRzL2R5bmFtaWMtZmllbGQuanN4PzNiNzkiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnRhaW5lcnMvZmllbGRzLmpzeD83OWQyIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9zdHlsZWQvYnV0dG9ucy5qcz85NmRkIiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9jb21wb25lbnRzL3N1Ym1pdC5qc3g/YzlkMiIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvYXBpL2F2YXRheC1yYXRlLWxvb2t1cC5qcz8yNGE2Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9oZWxwZXJzL2F2YXRheC5qcz82MTY2Iiwid2VicGFjazovL210Z2F2YWZvcm1yZWFjdC8uL3NyYy9oZWxwZXJzL2J5cGFzcy1zdWJtaXQuanM/YmVjMyIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvaGVscGVycy90YXRhcmkuanM/NGM3ZiIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29udGFpbmVycy9zdWJtaXQuanN4PzljZTEiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbXBvbmVudHMvdGhhbmt5b3UtbGluay5qc3g/ODE3YyIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvc3R5bGVkL2NvbXBvbmVudHMvdGhhbmt5b3UuanM/ZjhlZiIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29tcG9uZW50cy90aGFua3lvdS5qc3g/ZTNiMyIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29tcG9uZW50cy90ZXJtcy5qc3g/OGYwOCIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29udGFpbmVycy9lbnRyeS5qc3g/YWRkNyIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvc3R5bGVkL21vZGFsLmpzPzAyZTkiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbXBvbmVudHMvbW9kYWwvaGVhZGVyLmpzPzVjZjgiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnRhaW5lcnMvbW9kYWwvaGVhZGVyLmpzPzRmNjkiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2NvbnRhaW5lcnMvZm9ybS1tb2RhbC5qc3g/ZTEwOCIsIndlYnBhY2s6Ly9tdGdhdmFmb3JtcmVhY3QvLi9zcmMvY29udGFpbmVycy9hcHAuanN4PzU2YTUiLCJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vc3JjL2luZGV4LmpzP2I2MzUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3cgc3RyaWN0XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGV2OiB7XG4gICAgQVBJOiAnLy9sb2NhbGhvc3Q6ODA4MCcsXG4gICAgQVZBRk9STV9URU1QTEFURV9BUEk6ICdodHRwczovL2Nkbi5hdmxyLm5ldC9yZWFjdC9hdmFmb3JtLXRlbXBsYXRlcycsXG4gICAgQVZBRk9STV9UWVBFQUhFQURfQVBJOiAnaHR0cHM6Ly9jZG4uYXZsci5uZXQvcmVhY3QvYXZhZm9ybS10eXBlYWhlYWQvZGV2JyxcbiAgICBBVkFUQVhfQVBJOiAnaHR0cHM6Ly9hdmF0YXgtZGV2LmF2bHIubmV0L2F2YWxhcmEvYXZhdGF4L2dldHJlc3BvbnNlJyxcbiAgICBCVVNJTkVTU19MSUNFTlNFX0lORFVTVFJJRVNfU1RPUkFHRTogJy9hdmFmb3JtYnVzaW5lc3NsaWNlbnNlc2luZHVzdHJpZXMuanNvbicsXG4gICAgQ09OTkVDVDBSX0FQSTogJ2h0dHBzOi8vbWlsZXMuZGV2ZWxvcC5hdmxyLm5ldC9hcGkvY29ubmVjdG9ycy9zZWFyY2gnLFxuICAgIEVMT1FVQV9BUEk6ICdodHRwczovL2Vsb3F1YS1kZXYuYXZsci5uZXQvYXZhbGFyYS9lbG9xdWEvZ2V0cmVzcG9uc2UnLFxuICAgIE1BWE1JTkRfQVBJOiAnaHR0cHM6Ly9qcy5tYXhtaW5kLmNvbS9nZW9pcC92Mi4xLycsXG4gICAgTUlMRVNfQVBJOiAnaHR0cHM6Ly9taWxlcy5kZXZlbG9wLmF2bHIubmV0L2FwaScsXG4gICAgTUFSS0VUSU5HX0FQSTogJ2h0dHBzOi8vYXBpLm1hcmtldGluZy5hdmFsYXJhLmNvbS9sZWFkcy9jcmVhdGUnLFxuICAgIE1JTEVTX01BWE1JTkRfQkFDS1VQOiAnaHR0cHM6Ly9taWxlcy5kZXZlbG9wLmF2bHIubmV0L2dlb0lwL2xvb2t1cCcsXG4gICAgU1VNT19BUEk6ICdodHRwczovL2xvZ2dlci1kZXZlbG9wLmF2bHIubmV0JyxcbiAgICBTVUJNSVNTSU9OX1NFUlZJQ0VTOiAnaHR0cHM6Ly9jZG4uYXZsci5uZXQvcmVhY3QvbWljcm8tc2VydmljZS9zdWJtaXNzaW9uLWRldmVsb3AvcmVhY3QtbWljcm8tc2VydmljZS1idW5kbGUuanMnLFxuICB9LFxuICBwcm9kOiB7XG4gICAgQVBJOiAnLy9hdmFsYXJhLmNvbScsXG4gICAgQVZBRk9STV9URU1QTEFURV9BUEk6ICdodHRwczovL2Nkbi5hdmxyLm5ldC9yZWFjdC9hdmFmb3JtLXRlbXBsYXRlcycsXG4gICAgQVZBRk9STV9UWVBFQUhFQURfQVBJOiAnaHR0cHM6Ly9jZG4uYXZsci5uZXQvcmVhY3QvYXZhZm9ybS10eXBlYWhlYWQvcHJvZCcsXG4gICAgQVZBVEFYX0FQSTogJ2h0dHBzOi8vYXZhdGF4LXByb2QuYXZsci5uZXQvYXZhbGFyYS9hdmF0YXgvZ2V0cmVzcG9uc2UnLFxuICAgIEJVU0lORVNTX0xJQ0VOU0VfSU5EVVNUUklFU19TVE9SQUdFOiAnL2F2YWZvcm1idXNpbmVzc2xpY2Vuc2VzaW5kdXN0cmllcy5qc29uJyxcbiAgICBDT05ORUNUMFJfQVBJOiAnaHR0cHM6Ly9taWxlcy5tYXJrZXRpbmcuYXZhbGFyYS5jb20vYXBpL2Nvbm5lY3RvcnMvc2VhcmNoJyxcbiAgICBFTE9RVUFfQVBJOiAnaHR0cHM6Ly9lbG9xdWEtcHJvZC5hdmxyLm5ldC9hdmFsYXJhL2Vsb3F1YS9nZXRyZXNwb25zZScsXG4gICAgTUFYTUlORF9BUEk6ICdodHRwczovL2pzLm1heG1pbmQuY29tL2dlb2lwL3YyLjEvJyxcbiAgICBNSUxFU19BUEk6ICdodHRwczovL21pbGVzLm1hcmtldGluZy5hdmFsYXJhLmNvbS9hcGknLFxuICAgIE1BUktFVElOR19BUEk6ICdodHRwczovL2FwaS5tYXJrZXRpbmcuYXZhbGFyYS5jb20vbGVhZHMvY3JlYXRlJyxcbiAgICBNSUxFU19NQVhNSU5EX0JBQ0tVUDogJ2h0dHBzOi8vYXBpLm1hcmtldGluZy5hdmFsYXJhLmNvbS9nZW9JcC9sb29rdXAnLFxuICAgIFNVTU9fQVBJOiAnaHR0cHM6Ly9sb2dnZXItcHJvZC5hdmxyLm5ldCcsXG4gICAgU1VCTUlTU0lPTl9TRVJWSUNFUzogJ2h0dHBzOi8vY2RuLmF2bHIubmV0L3JlYWN0L21pY3JvLXNlcnZpY2Uvc3VibWlzc2lvbi1wcm9kL3JlYWN0LW1pY3JvLXNlcnZpY2UtYnVuZGxlLmpzJyxcbiAgfSxcbiAgc3RhZ2U6IHtcbiAgICBBUEk6ICcvL2xvY2FsaG9zdDowODgwJyxcbiAgICBBVkFGT1JNX1RFTVBMQVRFX0FQSTogJ2h0dHBzOi8vY2RuLmF2bHIubmV0L3JlYWN0L2F2YWZvcm0tdGVtcGxhdGVzJyxcbiAgICBBVkFGT1JNX1RZUEVBSEVBRF9BUEk6ICdodHRwczovL2Nkbi5hdmxyLm5ldC9yZWFjdC9hdmFmb3JtLXR5cGVhaGVhZC9zdGFnZScsXG4gICAgQVZBVEFYX0FQSTogJ2h0dHBzOi8vYXZhdGF4LXN0YWdlLmF2bHIubmV0L2F2YWxhcmEvYXZhdGF4L2dldHJlc3BvbnNlJyxcbiAgICBCVVNJTkVTU19MSUNFTlNFX0lORFVTVFJJRVNfU1RPUkFHRTogJy9hdmFmb3JtYnVzaW5lc3NsaWNlbnNlc2luZHVzdHJpZXMuanNvbicsXG4gICAgQ09OTkVDVDBSX0FQSTogJ2h0dHBzOi8vbWlsZXMtc3RhZ2UuYXZsci5uZXQvYXBpL2Nvbm5lY3RvcnMvc2VhcmNoJyxcbiAgICBFTE9RVUFfQVBJOiAnaHR0cHM6Ly9lbG9xdWEtc3RhZ2UuYXZsci5uZXQvYXZhbGFyYS9lbG9xdWEvZ2V0cmVzcG9uc2UnLFxuICAgIE1BWE1JTkRfQVBJOiAnaHR0cHM6Ly9qcy5tYXhtaW5kLmNvbS9nZW9pcC92Mi4xLycsXG4gICAgTUlMRVNfQVBJOiAnaHR0cHM6Ly9taWxlcy1zdGFnZS5hdmxyLm5ldC9hcGknLFxuICAgIE1BUktFVElOR19BUEk6ICdodHRwczovL2FwaS5tYXJrZXRpbmcuYXZhbGFyYS5jb20vbGVhZHMvY3JlYXRlJyxcbiAgICBNSUxFU19NQVhNSU5EX0JBQ0tVUDogJ2h0dHBzOi8vbWlsZXMtc3RhZ2UuYXZsci5uZXQvZ2VvSXAvbG9va3VwJyxcbiAgICBTVU1PX0FQSTogJ2h0dHBzOi8vbG9nZ2VyLWRldmVsb3AuYXZsci5uZXQnLCAvLyB0byBiZSB1cGRhdGVkXG4gICAgU1VCTUlTU0lPTl9TRVJWSUNFUzogJ2h0dHBzOi8vY2RuLmF2bHIubmV0L3JlYWN0L21pY3JvLXNlcnZpY2Uvc3VibWlzc2lvbi1zdGFnZS9yZWFjdC1taWNyby1zZXJ2aWNlLWJ1bmRsZS5qcycsXG4gIH0sXG59O1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7IGNoZWNrSWZJc0RldmVsb3AgfSBmcm9tICdAYXZhbGFyYS1tdGcvaGVscGVycy9saWIvdWknO1xuaW1wb3J0IGVudiBmcm9tICcuL3NoYXJlZC9lbnYnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICcuL3NoYXJlZC90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCB7IE5PREVfRU5WIH0gPSBwcm9jZXNzLmVudjtcblxubGV0IEFWQV9FTlYgPSAhY2hlY2tJZklzRGV2ZWxvcCgpID8gJ3Byb2QnIDogJ2Rldic7XG5pZiAod2luZG93ICYmIHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKCdzdGFnZScpICE9PSAtMSkge1xuICBBVkFfRU5WID0gJ3N0YWdlJztcbn1cblxuLy8gaWYgdGVzdGluZywganVzdCBncmFiIGxvY2FsIGNvbmZpZzpcbmNvbnN0IGNvbmZpZzogQ29uZmlnID0geyAuLi5lbnZbQVZBX0VOVl0gfTtcblxud2luZG93LmF2YSA9IHdpbmRvdy5hdmEgfHwge307XG53aW5kb3cuYXZhLnJlYWN0ID0gY2hlY2tJZklzRGV2ZWxvcCgpID8gY29uZmlnIDogbnVsbDtcblxuZXhwb3J0IGRlZmF1bHQgY29uZmlnO1xuIiwiLy8gQGZsb3cgc3RyaWN0LWxvY2FsXG5cbnR5cGUgQXBpU2V0dGluZ3MgPSB7XG4gIHRpbWVvdXQ6IG51bWJlcixcbn1cblxuZXhwb3J0IGNvbnN0IGFwaVNldHRpbmdzOiBBcGlTZXR0aW5ncyA9IHtcbiAgdGltZW91dDogOTAwMDAsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBhcGlTZXR0aW5ncztcbiIsIi8vIEBmbG93XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGZldGNoIH0gZnJvbSAnQGF2YWxhcmEtbXRnL2hlbHBlcnMvbGliL3NoYXJlZCc7XG5pbXBvcnQge1xuICBjaGVja0lmSXNEZXZlbG9wLCBjaGVja0ZvckRlYnVnLCBjaGVja0lmSXNUZXN0aW5nLCBnZXRBZG9iZVZpc2l0b3JJZCwgZ2V0QnJvd3NlckluZm8sXG59IGZyb20gJ0BhdmFsYXJhLW10Zy9oZWxwZXJzL2xpYi91aSc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWN5Y2xlXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgQVBJX1NFVFRJTkdTIGZyb20gJy4uL3NoYXJlZC9hcGktc2V0dGluZ3MnO1xuaW1wb3J0IHR5cGUgeyBTdW1vTG9nZ2VyRXZlbnQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgUmVzdWx0IH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcblxubGV0IGJyb3dzZXJJbmZvID0gbnVsbDtcbmNvbnN0IHNlc3Npb25JZCA9IGdldEFkb2JlVmlzaXRvcklkKCkgfHwgdXVpZHY0KCk7XG5cbmV4cG9ydCBjb25zdCBjYWxsVG9TdW1vTG9nZ2VyID0gYXN5bmMgKGV2ZW50OiBTdW1vTG9nZ2VyRXZlbnQpID0+IHtcbiAgaWYgKGJyb3dzZXJJbmZvID09PSBudWxsKSB7XG4gICAgYnJvd3NlckluZm8gPSBnZXRCcm93c2VySW5mbygpO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3Qgc3Vtb0VuZHBvaW50ID0gY29uZmlnLlNVTU9fQVBJO1xuICAgIGxldCB1cmwgPSAnJztcbiAgICBpZiAoIWNoZWNrSWZJc1Rlc3RpbmcoKSkge1xuICAgICAgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2U6IFJlc3VsdDxudWxsIHwgbnVsbD4gPSBhd2FpdCBmZXRjaChzdW1vRW5kcG9pbnQsIHtcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIHVybCxcbiAgICAgICAgYnJvd3NlckluZm8sXG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgc3Vtb1BhcmFtOiAhY2hlY2tJZklzRGV2ZWxvcCgpID8gJ0FWQUZPUk1fUFJPRF9FTkRQT0lOVCcgOiAnQVZBRk9STV9ERVZfRU5EUE9JTlQnLFxuICAgICAgICBzcmNDYXRlZ29yeTogIWNoZWNrSWZJc0RldmVsb3AoKSA/ICdQUk9EL01URy9hdmFmb3JtJyA6ICdERVYvTVRHL2F2YWZvcm0nLFxuICAgICAgICB0ZXN0aW5nOiBjaGVja0lmSXNUZXN0aW5nLFxuICAgICAgfSksXG4gICAgICAvLyB0aGlzIGluY2x1c2lvbiBvZiBoZWFkZXIgaXMgb3ZlcndyaXRpbmcgdGhlIGNvcnMgaGFkZXJzXG4gICAgICAvLyAnYXBwbGljYXRpb24vanNvbicgaXMgbm90IGluIGFjY2VwdGVkIHR5cGVzIGZvciBjb3JzXG4gICAgICAvLyBoZWFkZXJzOiB7XG4gICAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAvLyB9LFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgfSwgQVBJX1NFVFRJTkdTLnRpbWVvdXQpLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgIGNvbnNvbGUubG9nKCdCYWQgQ29ubmVjdGlvbiB0byBBV1MnLCByZXNwb25zZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5sb2coJ1VuZXhwZWN0ZWQgRXJyb3IgLSBTdW1vTG9nZ2VyJywgZSk7XG4gIH1cbn07XG5cbmNvbnN0IGxvZ2dpbmdGaWx0ZXIgPSAoZXZlbnQ6IFN1bW9Mb2dnZXJFdmVudCkgPT4ge1xuICBpZiAoY2hlY2tGb3JEZWJ1ZygpKSB7IGNvbnNvbGUubG9nKGV2ZW50KTsgfVxuICBpZiAoKCFwcm9jZXNzIHx8IChwcm9jZXNzICYmICFwcm9jZXNzLmVudikgfHwgKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JykpICYmIChldmVudC5sZXZlbCAhPT0gJ2luZm8nIHx8IGNoZWNrRm9yRGVidWcoKSkpIHtcbiAgICBjYWxsVG9TdW1vTG9nZ2VyKGV2ZW50KTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nZ2luZ0ZpbHRlcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gJy4uL2xpYi90eXBlcy9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgQXZhVGF4U3RhdGUgfSBmcm9tICcuLi9saWIvdHlwZXMvcmVkdWNlci1zdGF0ZXMnO1xuXG4vLyBpbXBvcnQgc3Vtb0xvZyBmcm9tICcuLi9hcGkvc3Vtby1sb2dnZXInO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFN0YXRlOiBBdmFUYXhTdGF0ZSA9IHtcbiAgYWRkcmVzc1ZhbGlkYXRpb246IHt9LFxuICByYXRlOiBudWxsLFxufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChzdGF0ZTogQXZhVGF4U3RhdGUgPSBkZWZhdWx0U3RhdGUsIGFjdGlvbjogQWN0aW9uKTogQXZhVGF4U3RhdGUge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnQVZBVEFYX01MVF9SRVNQT05TRSc6IHtcbiAgICAgIGNvbnN0IHsgZm9ybUlkLCByZXNwb25zZSB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgeyBhZGRyZXNzLCByYXRlIH0gPSByZXNwb25zZTtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGU7XG4gICAgICBjb25zdCBuZXdBZGRyZXNzQ2FwdHVyZSA9IG5ld1N0YXRlLmFkZHJlc3NWYWxpZGF0aW9uO1xuICAgICAgY29uc3QgY2FwdHVyZUFkZHJlc3MgPSBbYWRkcmVzc10uY29uY2F0KG5ld0FkZHJlc3NDYXB0dXJlW2Zvcm1JZF0gfHwgW10pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgYWRkcmVzc1ZhbGlkYXRpb246IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS5hZGRyZXNzVmFsaWRhdGlvbixcbiAgICAgICAgICBbZm9ybUlkXTogY2FwdHVyZUFkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICAgIHJhdGU6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS5yYXRlLFxuICAgICAgICAgIFtmb3JtSWRdOiByYXRlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IEJyaXRlVmVyaWZ5U3RhdGUgfSBmcm9tICcuLi9saWIvdHlwZXMvcmVkdWNlci1zdGF0ZXMnO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFN0YXRlOiBCcml0ZVZlcmlmeVN0YXRlID0ge1xuICBmYWlsOiBudWxsLFxuICBzdWNjZXNzOiBudWxsLFxuICB1bmtub3duOiBudWxsLFxufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChzdGF0ZTogQnJpdGVWZXJpZnlTdGF0ZSA9IGRlZmF1bHRTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pOiBCcml0ZVZlcmlmeVN0YXRlIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ0JSSVRFX1ZFUklGWV9SRVNQT05TRSc6IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9O1xuICAgICAgY29uc3Qge1xuICAgICAgICBkYXRhLCB1cmwsIGVtYWlsLCBzdGF0dXMsXG4gICAgICB9ID0gYWN0aW9uO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIFtzdGF0dXNdOiB7XG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICB1cmwsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBGb3JtRGVmYXVsdENvbmZpZ3MgfSBmcm9tICcuLi9saWIvdHlwZXMvZm9ybXMnO1xuXG5jb25zdCBmb3JtQ29uZmlnczogRm9ybURlZmF1bHRDb25maWdzID0ge1xuICBhdHRyaWJ1dGlvbl9lbmdpbmU6ICdtYXJ2YXInLFxuICBhZGRpdGlvbmFsOiBmYWxzZSxcbiAgYWRkaXRpb25hbF9yZXF1aXJlZDogZmFsc2UsXG4gIGFkZGl0aW9uYWxfcXVlcnk6IG51bGwsXG4gIGF1dG9Gb2N1czogZmFsc2UsXG4gIGF2YWZvcm1fdGVtcGxhdGU6IG51bGwsXG4gIGJ1dHRvbl9sYWJlbDogbnVsbCxcbiAgYnJhemlsOiBmYWxzZSxcbiAgY2FsbGJhY2s6IG51bGwsXG4gIGNhbXBhaWduX2lkOiBudWxsLFxuICBjYW1wYWlnbl9uYW1lOiBudWxsLFxuICBjb21wYW55X3Byb2ZpbGU6IGZhbHNlLFxuICBjb25uZWN0b3JfaWQ6IG51bGwsXG4gIGNvbm5lY3Rvcl9uYW1lOiBudWxsLFxuICBjb25uZWN0b3Jfc2VhcmNoOiBmYWxzZSxcbiAgY29udGFjdF9tZXRob2Q6IG51bGwsXG4gIGNvbnRhaW5lcjogbnVsbCwgLy8gSFRNTCBFbGVtZW50XG4gIGNvdW50cmllczogZmFsc2UsXG4gIGNvdW50cmllc19yZXF1aXJlZDogZmFsc2UsXG4gIGNvdW50cnlfbGFiZWw6IG51bGwsXG4gIGNvdW50cnlfb2ZfaW50ZXJlc3Q6IGZhbHNlLFxuICBjdXN0b20wOiBudWxsLFxuICBjdXN0b20wX2Vsb3F1YTogbnVsbCxcbiAgY3VzdG9tMF9tZXJnZTogZmFsc2UsXG4gIGN1c3RvbTBfcmVxdWlyZWQ6IGZhbHNlLFxuICBjdXN0b20wX3ZhbGlkYXRlOiBmYWxzZSxcbiAgY3VzdG9tX3ZhbGlkYXRvcnM6IGZhbHNlLFxuICBkYXRhX2xvY2FsOiBmYWxzZSxcbiAgZGVidWc6IGZhbHNlLFxuICBkaXNhYmxlX2ZhZGU6IGZhbHNlLFxuICBlY29tbWVyY2U6IGZhbHNlLFxuICBlbWFpbF92YWxpZGF0aW9uOiBmYWxzZSxcbiAgZW1lYTogZmFsc2UsXG4gIGVtcGxveWVlX3NpemU6IDAsXG4gIGVuZ2xpc2g6IGZhbHNlLFxuICBldmVudF9pZGVudGlmaWVyOiBudWxsLFxuICBmb3JtX25hbWU6IG51bGwsXG4gIGZvcm06IG51bGwsXG4gIGdvYWxfdHlwZTogbnVsbCxcbiAgaW5kaWE6IGZhbHNlLFxuICBpbmR1c3RyeV9pZDogbnVsbCxcbiAgaW5saW5lX2ZpZWxkczogbnVsbCxcbiAgaXA6IG51bGwsXG4gIGxhbmd1YWdlOiBudWxsLFxuICBsZWFkX3N0YXR1czogbnVsbCxcbiAgbHNtcjogbnVsbCxcbiAgbHNvOiBudWxsLFxuICBtYXNrX3NlbnNpdGl2ZV9maWVsZHM6IG51bGwsXG4gIG5haWNzOiBudWxsLFxuICBub1N1Ym1pc3Npb246IGZhbHNlLFxuICBvZmZlcjogbnVsbCxcbiAgb3BwX3N1YnR5cGU6IG51bGwsXG4gIG9wcF90eXBlOiBudWxsLFxuICBvcHRpbjogZmFsc2UsXG4gIG9wdGluX2NoZWNrZWQ6IGZhbHNlLFxuICBvc3RfcG9pOiBudWxsLFxuICBwYXJ0bmVyc291cmNlOiBudWxsLFxuICBwYXJ0bmVyX3JvbGU6IG51bGwsXG4gIHBvaTogbnVsbCxcbiAgcG9pX21lbnU6IGZhbHNlLFxuICBwb2lfbWVudV9kZWZhdWx0OiBudWxsLFxuICBwb2lfbWVudV9sYWJlbDogJycsXG4gIHBvaV9tZW51X3ZhbHVlczogbnVsbCxcbiAgcHJvZ3Jlc3NpdmVfY2hhaW46IG51bGwsXG4gIHByb2dyZXNzaXZlX3Byb2ZpbGluZzogZmFsc2UsXG4gIHJhdGVMb29rdXBGb3JtOiBmYWxzZSwgLy8gQ3VycmVudCB1c2UgaWYgTUxUIFJhdGUgTG9va3VwXG4gIHJlZGlyZWN0dXJsOiBudWxsLFxuICByZWZlcnJlcjogbnVsbCxcbiAgc3VjY2VzczogbnVsbCxcbiAgc29obzogbnVsbCxcbiAgdGVtcGxhdGU6IG51bGwsXG4gIHRoZW1lOiBudWxsLFxuICBxczogbnVsbCxcbiAgcXVlcnlfc3RyaW5nOiBudWxsLFxuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtQ29uZmlncztcbiIsIi8vIEBmbG93IHN0cmljdC1sb2NhbFxuXG4vKiAqKioqKiBURU1QTEFURSBERVNDUklQVElPTiAqKioqKiAqL1xuLy8gRU1BSUxPTkxZOiB7IC8vIFRlbXBsYXRlIGtleSB2YWx1ZS4gVXNlZCBvbiBJTklUX0ZPUk1fQVBQTElDQVRJT04gdG8gZ2V0IHRoZSBkYXRhIHRvIGJlIHVzZWQgb24gcmVuZGVyXG4vLyAgIGNoaWxpcGlwZXI6IHtcbi8vICAgICByb3V0ZXI6IHN0cmluZyxcbi8vICAgfVxuLy8gICBjbGFzc2VzOiBbXSwgLy8gY2xhc3NlcyB0byBhZGQgdG8gdGhlIGZvcm0gY29udGFpbmVyXG4vLyAgIGNvbmZpZ3M6IHsgLy8gc2V0IGNvbmZpZ3MuIFdpbGwgYmUgb3ZlciB3cml0dGVuIGJ5IGNvbmZpZ3MgcGFzc2VkIGZyb20gQUVNLiBEZWZhdWx0cyBjYW4gYmUgc2V0IGluIGhlcmUuXG4vLyAgICAgLi4uRk9STUNPTkZJR1MsIC8vIERlZmF1bHQgZm9ybSBjb25maWcgZGF0YS5cbi8vICAgICBwb2k6ICdBdmF0YXgnLCAvLyBFeGFtcGxlIGRlZmF1bHQgdmFsdWVcbi8vICAgICBvZmZlcjogJ05ld3NMZXR0ZXInLCAvLyBFeGFtcGxlIGRlZmF1bHQgdmFsdWVcbi8vICAgfSxcbi8vICAgZGVzY3JpcHRpb246IG51bGwsIC8vIFVzZWQgaW4gdGhlIGZvcm0taGVhZGVyIGNvbnRhaW5lclxuLy9cbi8vICAgLy8gQXJyYXkgb2Ygb2JqZWN0cyB0byBiZSB1c2VkIHRvIHNldCB0aGUgZm9ybSBmaWVsZHMuXG4vLyAgIC8vIEFycmF5PHsgT2JqZWN0IH0+IHdpbGwgYmUgc3RhY2tlZC5cbi8vICAgLy8gQW4gQXJyYXk8QXJyYXk8e09iamVjdH0+PiB3aWxsIGJlIHNldCBpbiBjb2x1bW5zLiBBcnJheTx7IE9iamVjdCB9PiB3aWxsIGJlIHN0YWNrZWQuXG4vLyAgIGZpZWxkczogWyAvLyBGaWVsZCBhdHRyaWJ1dGVzXG4vLyAgICAge1xuLy8gICAgICAgY29udGFpbnNHZHByOiB0cnVlLCAvLyBUaGlzIHdpbGwgdHJpZ2dlciBHRFBSIGNoZWNrYm94IGluc2lkZSB0aGUgZW1haWwgY29udGFpbmVyIGFuZCBub3QgaW4gdGhlIHN1Ym1pdCBjb250YWluZXJcbi8vICAgICAgIGN1c3RvbVZhbGlkYXRpb246IFJlZ0V4cCAvLyBjYW4gcGFzcyBjdXN0b20gUmVnRXhwIHZhbGlkYXRpb24gcGF0dGVyblxuLy8gICAgICAgZGlzcGxheVRleHQ6ICdQbGVhc2UgZW50ZXIgeW91ciBidXNpbmVzcyBlbWFpbCcsIC8vIFRoaXMgc2V0cyB0aGUgZGlzcGxheSB0ZXh0IGZvciB0aGUgZmllbGRcbi8vICAgICAgIGlkOiAnZW1haWwnLCAvLyBUaGlzIHNldHMgdGhlIGlkIG9mIHRoZSBpbnB1dCBmaWVsZFxuLy8gICAgICAgbGlua3M6IFsgLy8gQXJyYXkgb2YgbGlua3MgdG8gYmUgc2V0LiBVc2VkIGZvciB0ZXJtcyBvZiBzZXJ2aWNlXG4vLyAgICAgICAgICB7XG4vLyAgICAgICAgICAgIGhyZWY6ICdhdmFsYXJhLmNvbScsXG4vLyAgICAgICAgICAgIHRleHQ6ICdMZWFyIG1vcmUnLFxuLy8gICAgICAgICAgfSxcbi8vICAgICAgIF0sXG4vLyAgICAgICBvcHRpb25zOiBbIC8vIEFycmF5IG9mIHZhbHVlcyB0byBiZSB1c2VkIGZvciBzZWxlY3Qtb25lIG9yIG11bHRpLXNlbGVjdCBmaWVsZHNcbi8vICAgICAgICAgIHtcbi8vICAgICAgICAgICAgZGlzcGxheTogJ09wdGlvbiAxIGRpc3BsYXkgdGV4dCcsXG4vLyAgICAgICAgICAgIHZhbHVlOiAnb3B0aW9uIHZhbHVlJyxcbi8vICAgICAgICAgIH0sXG4vLyAgICAgICAgXVxuLy8gICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBidXNpbmVzcyBlbWFpbCcsIC8vIFNldHMgdGhlIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBmaWVsZFxuLy8gICAgICAgcmVxdWlyZWQ6IHRydWUsIC8vIGluZGljYXRlcyBpZiBpcyByZXF1aXJlZFxuLy8gICAgICAgdHlwZTogJ2VtYWlsJywgLy8gSW5kaWNhdGVzIGZpZWxkIHR5cGUuIFRoaXMgaXMgdXNlZCB0byBwdWxsIHRoZSBjb3JyZWN0IGZpZWxkcy8qKi5qcyBmaWxlLlxuLy8gICAgIH0sXG4vLyAgICAgT1Jcbi8vICAgIFsgLy8gQW55IGFycmF5IGluc2lkZSB0aGUgYXJyYXkgd2lsbCBhbGxvdyBmb3IgZmllbGQgY29sdW1uIHZpZXcgaW5zdGVhZCBvZiBmaWVsZCBjb2x1bW5cbi8vICAgICAge1xuLy8gICAgICAgIGNvbnRhaW5zR2RwcjogdHJ1ZSwgLy8gVGhpcyB3aWxsIHRyaWdnZXIgR0RQUiBjaGVja2JveCBpbnNpZGUgdGhlIGVtYWlsIGNvbnRhaW5lciBhbmQgbm90IGluIHRoZSBzdWJtaXQgY29udGFpbmVyXG4vLyAgICAgICAgY3VzdG9tVmFsaWRhdGlvbjogUmVnRXhwIC8vIGNhbiBwYXNzIGN1c3RvbSBSZWdFeHAgdmFsaWRhdGlvbiBwYXR0ZXJuXG4vLyAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyBvciBBcnJheTxzdHJpbmc+IC0gYWxsb3dzIHNpbmdsZSBzZW50ZW5jZSB0byBiZSBhZGRlZCBiZWZvcmUgdGhlIGlucHV0IGZpZWxkIC0gY3VycmVudGx5IG9ubHkgYXZhaWxhYmxlIGZvciBmaWVsZHNldCBvcHRpb25zXG4vLyAgICAgICAgZGlzcGxheVRleHQ6ICdQbGVhc2UgZW50ZXIgeW91ciBidXNpbmVzcyBlbWFpbCcsIC8vIFRoaXMgc2V0cyB0aGUgZGlzcGxheSB0ZXh0IGZvciB0aGUgZmllbGRcbi8vICAgICAgICBkaXNwbGF5VGV4dENsYXNzOiBBcnJheTxzdHJpbmc+IC0gQWxsb3dzIGNsYXNzZXMgdG8gYmUgcGFzc2VkIGludG8gdGhlIGRpc3BsYXkgdGV4dCBzcGFuIHRhZyB0byBiZSB0YXJnZXRlZCB3aXRoIENTU1xuLy8gICAgICAgIGlkOiAnZW1haWwnLCAvLyBUaGlzIHNldHMgdGhlIGlkIG9mIHRoZSBpbnB1dCBmaWVsZFxuLy8gICAgICAgIGxpbmtzOiBbIC8vIEFycmF5IG9mIGxpbmtzIHRvIGJlIHNldC4gVXNlZCBmb3IgdGVybXMgb2Ygc2VydmljZVxuLy8gICAgICAgICAgICB7XG4vLyAgICAgICAgICAgICAgaHJlZjogJ2F2YWxhcmEuY29tJyxcbi8vICAgICAgICAgICAgICB0ZXh0OiAnTGVhciBtb3JlJyxcbi8vICAgICAgICAgICAgfSxcbi8vICAgICAgICBdLFxuLy8gICAgICAgIG9wdGlvbnM6IFsgLy8gQXJyYXkgb2YgdmFsdWVzIHRvIGJlIHVzZWQgZm9yIHNlbGVjdC1vbmUgb3IgbXVsdGktc2VsZWN0IGZpZWxkc1xuLy8gICAgICAgICAge1xuLy8gICAgICAgICAgICBkaXNwbGF5OiAnT3B0aW9uIDEgZGlzcGxheSB0ZXh0Jyxcbi8vICAgICAgICAgICAgdmFsdWU6ICdvcHRpb24gdmFsdWUnLFxuLy8gICAgICAgICAgfSxcbi8vICAgICAgICBdXG4vLyAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBidXNpbmVzcyBlbWFpbCcsIC8vIFNldHMgdGhlIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBmaWVsZFxuLy8gICAgICAgIHJlcXVpcmVkOiB0cnVlLCAvLyBpbmRpY2F0ZXMgaWYgaXMgcmVxdWlyZWRcbi8vICAgICAgICB0aXRsZTogc3RyaW5nIC8vIEFsbG93cyBhIHRpdGxlIHRvIGJlIGFkZGVkIHRvIHRoZSBmaWVsZCAtIEN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgZmllbGRzZXQgb3B0aW9uc1xuLy8gICAgICAgIHR5cGU6ICd0ZXh0JywgLy8gSW5kaWNhdGVzIGZpZWxkIHR5cGUuIFRoaXMgaXMgdXNlZCB0byBwdWxsIHRoZSBjb3JyZWN0IGZpZWxkcy8qKi5qcyBmaWxlLlxuLy8gICAgICAgICAgT3B0aW9uIGZpZWxkc2V0IHdpbGwgdHJpZ2dlciBhIHJlbmRlciBvcHRpb24gdG8gZ3JvdXAgaXRlbXMgaW4gYSBmaWVsZCBzZXQuIFNob3VsZCBpZGVhbGx5IGJlIHVzZWQgZm9yIGNoZWNrYm94IGFuZCByYWRpbyBvcHRpb25zIG9ubHkuXG4vLyAgICAgIH1cbi8vICAgIF1cbi8vICAgXSxcbi8vICAgZmllbGRzUmVtb3ZlOiBbXSwgLy8gYXJyYXkgLT4gQXJyYXkgb2YgZmllbGRzIHRoYXQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgY29waWVkIGZpZWxkcy4gVGhpcyBpcyB1c2VkIHdpdGggXCJmaWVsZHNSZXBsaWNhdGVcIi5cbi8vICAgZmllbGRzUmVwbGljYXRlOiAvLyBzdHJpbmcgLT4gbmFtZSBvZiB0aGUgZm9ybSBpbiB3aGljaCB0aGUgZmllbGRzIGFyZSB0byBiZSBjb3BpZWQuXG4vLyAgIGZpZWxkc092ZXJ3cml0ZTogc2ltaWxhciB0byBmaWVsZHMuIFRoaXMgaXMgdXNlZCB3aXRoIGZpZWxkc1JlcGxpY2F0ZS4gVGhpcyBpcyBhbiBhcnJheSBvZiBvYmplY3RzIHRoYXQgd291bGQgb3Zlci13cml0ZSBleGlzdGluZyBmaWVsZHMgdGhhdCB3ZXJlIGNvcGllZC4gVGhpcyBpcyBpZGVhbCB0byB1c2Ugd2hlbiB5b3UgYXJlIGNvcHlpbmcgYSBzZXJpZXMgb2YgZmllbGRzIGJ1dCBuZWVkIG9uZSBvciB0d28gZGlmZmVyZW50IGRpZmZlcmVudC5cbi8vICAgaWQ6ICdhdmFmb3JtJywgLy8gRm9ybSBpZCBhdHRyaWJ1dGVcbi8vICAgbmFtZTogJ0VNQUlMT05MWScsIC8vIEZvcm0gbmFtZSBhdHRyaWJ1dGVcbi8vICAgcmVkaXJlY3R1cmw6IG51bGwsIC8vICBJZiBzZXQgdGhlIHVzZXIgd2lsbCBiZSByZWRpcmVjdGVkIHRvIHRoZSBzZXQgVVJMLiBJZiBub3Qgc2V0LCBhIHRleHQgbWVzc2FnZSB3aWxsIGJlIGRpc3BsYXllZC5cbi8vICAgc3VibWl0OiB7IC8vIFN1Ym1pdCBhdHRyaWJ1dGVzXG4vLyAgICAgZGlzcGxheVRleHQ6ICdTaWdudXAnLCAvLyBUZXh0IHRvIHNob3cgb24gdGhlIHN1Ym1pdCBidXR0b25cbi8vICAgICBwb3NpdGlvbjogJ2NlbnRlcicgfCAnbGVmdCcgfCAncmlnaHQnIC8vIGJ1dHRvbiBhbGlnbm1lbnRcbi8vICAgfSxcbi8vICAgdGhhbmt5b3U6IHsgLy8gVGhhbmsgeW91IGF0dHJpYnV0ZXNcbi8vICAgICB0aXRsZTogJ1RoYW5rIHlvdScgLy8gVGV4dCB0byBkaXNwbGF5IGZvciBtZXNzYWdlXG4vLyAgICAgc3ViVGl0bGU6ICdTdWNjZXNzJyAvLyBUZXh0IHRvIGRpc3BsYXkgZm9yIG1lc3NhZ2Vcbi8vICAgICBtZXNzYWdlOiAnVGhhbmsgeW91IGZvciBzaWduaW5nIHVwLicsIC8vIFRleHQgdG8gZGlzcGxheSBhZnRlciBmb3JtIHN1Ym1pc3Npb25cbi8vICAgfSxcbi8vICAgdGVtcGxhdGU6IHsgLy8gdGVtcGxhdGUgZGF0YSBhdHRyaWJ1dGVzXG4vLyAgICAgbmFtZTogJ0VNQUlMT05MWScsIC8vIGZvcm0gbmFtZSBhdHRyaWJ1dGVcbi8vICAgICBkZXNjcmlwdGlvbjogJ0VtYWlsIG9ubHkgdGVtcGxhdGUnLFxuLy8gICAgIGRpc3BsYXlOYW1lOiAnQXZhZm9ybSBlbWFpbCBvbmx5IGlubGluZSBsYXlvdXQnLFxuLy8gICB9LFxuLy8gICB0aGVtZTogeyAvLyBUaGVtZSBhdHRyaWJ1dGVzXG4vLyAgICAgbGF5b3V0OiAnaW5saW5lJywgLy8gTGF5b3V0IHR5cGUuIEF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIHN0eWxlZC1jb21wb25lbnRzIGZvciBsYXlvdXQgY29sdW1uIG9yIGlubGluZVxuLy8gICAgIHNob3dMb2FkZXI6IGZhbHNlLCAvLyB3aWxsIHNob3cvbm90IHNob3cgbG9hZGVyIG9uIHN1Ym1pc3Npb25cbi8vICAgICBvZmZzZXQ6IHN0cmluZyAtPiByaWdodC9sZWZ0L251bGwgbGF5b3V0IG9wdGlvbiBmb3IgaW5saW5lIGZvcm1zIHRvIGFsbG93IG1vcmUgZmllbGQgc2l6ZSB0aGFuIGJ1dHRvbiBzaXplXG4vLyAgIH0sXG4vLyAgIHRpdGxlOiAnQXZhZm9ybSBzaWdudXAgZm9ybScsIC8vIFRpdGxlIHRvIGJlIHVzZWQgaW4gdGhlIGZvcm0taGVhZGVyIGNvbnRhaW5lclxuLy8gfSxcblxuaW1wb3J0IHR5cGUgeyBBdmFGb3JtcywgU2luZ2xlSnNvbkZpZWxkIH0gZnJvbSAnLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCBGT1JNQ09ORklHUyBmcm9tICcuL2Zvcm0tY29uZmlncyc7XG5cbmV4cG9ydCBjb25zdCBBVkFGT1JNUzogQXZhRm9ybXMgPSB7XG4gIEFWQUZPUk1FTUFJTDoge1xuICAgIGNsYXNzZXM6IFtdLFxuICAgIGRlc2NyaXB0aW9uOiBudWxsLFxuICAgIGZpZWxkczogW1xuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1BsZWFzZSBlbnRlciB5b3VyIGJ1c2luZXNzIGVtYWlsJyxcbiAgICAgICAgaWQ6ICdlbWFpbCcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIHlvdXIgYnVzaW5lc3MgZW1haWwnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2VtYWlsJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogJ2F2YWZvcm0tZW1haWwtb25seScsXG4gICAgbmFtZTogJ0F2YUZvcm0gRW1haWwgVGVzdCcsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ1NpZ251cCcsXG4gICAgfSxcbiAgICB0aGFua3lvdToge1xuICAgICAgbWVzc2FnZTogJ1RoYW5rIHlvdSBmb3Igc2lnbmluZyB1cC4nLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdBVkFGT1JNRU1BSUwnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbWFpbCBvbmx5IHRlbXBsYXRlJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnQXZhZm9ybSBlbWFpbCBvbmx5IGlubGluZSBsYXlvdXQnLFxuICAgIH0sXG4gICAgdGhlbWU6IHtcbiAgICAgIGxheW91dDogJ2lubGluZScsXG4gICAgICBzaG93TG9hZGVyOiBmYWxzZSxcbiAgICB9LFxuICAgIHRpdGxlOiAnQXZhZm9ybSBlbWFpbCBmb3JtJyxcbiAgfSxcbiAgQVZBRk9STUVNQUlMSElEREVOOiB7XG4gICAgY2xhc3NlczogW10sXG4gICAgZGVzY3JpcHRpb246IG51bGwsXG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnZmlyc3ROYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB0eXBlOiAnaGlkZGVuJyxcbiAgICAgICAgdmFsdWU6ICdCcnVjZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ2xhc3ROYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB0eXBlOiAnaGlkZGVuJyxcbiAgICAgICAgdmFsdWU6ICdXYXluZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1BsZWFzZSBlbnRlciB5b3VyIGJ1c2luZXNzIGVtYWlsJyxcbiAgICAgICAgaWQ6ICdlbWFpbCcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIHlvdXIgYnVzaW5lc3MgZW1haWwnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2VtYWlsJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogJ2F2YWZvcm0taGlkZGVuLWZpZWxkLWRlbW8nLFxuICAgIG5hbWU6ICdBdmFGb3JtIEVtYWlsIEhpZGRlbiBUZXN0JyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU2lnbnVwJyxcbiAgICB9LFxuICAgIHRoYW5reW91OiB7XG4gICAgICBtZXNzYWdlOiAnVGhhbmsgeW91IGZvciBzaWduaW5nIHVwLicsXG4gICAgfSxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbmFtZTogJ0FWQUZPUk1FTUFJTEhJRERFTicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VtYWlsIG9ubHkgdGVtcGxhdGUnLFxuICAgICAgZGlzcGxheU5hbWU6ICdBdmFmb3JtIGVtYWlsIG9ubHkgaW5saW5lIGxheW91dCcsXG4gICAgfSxcbiAgICB0aGVtZToge1xuICAgICAgbGF5b3V0OiAnaW5saW5lJyxcbiAgICAgIHNob3dMb2FkZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgdGl0bGU6ICdBdmFmb3JtIGVtYWlsIGhpZGRlbiB2YWx1ZSBmb3JtJyxcbiAgfSxcbiAgQVZBRk9STURFTU86IHtcbiAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgYSBkZW1vIGZvcm0gdG8gdXNlIHdpdGggdGVzdCBzdWl0ZScsXG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIGVudGVyIHlvdXIgZnVsbCBuYW1lJyxcbiAgICAgICAgaWQ6ICdmdWxsbmFtZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIHlvdXIgZnVsbCBuYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1BsZWFzZSBlbnRlciB5b3VyIGZpcnN0IG5hbWUnLFxuICAgICAgICBpZDogJ2ZpcnN0TmFtZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIHlvdXIgZmlyc3QgbmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQbGVhc2UgZW50ZXIgeW91ciBsYXN0IG5hbWUnLFxuICAgICAgICBpZDogJ2xhc3ROYW1lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBsYXN0IG5hbWUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIGVudGVyIHlvdXIgYnVzaW5lc3MgZW1haWwnLFxuICAgICAgICBpZDogJ2VtYWlsJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBidXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnZW1haWwnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQbGVhc2UgZW50ZXIgY29tcGFueSBuYW1lJyxcbiAgICAgICAgaWQ6ICdjb21wYW55JyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgY29tcGFueSBuYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1BsZWFzZSBlbnRlciB5b3VyIGNvdW50cnknLFxuICAgICAgICBpZDogJ2NvdW50cnknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciB5b3VyIGNvdW50cnknLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdUZWxsIHVzIHdoYXQgeW91IHRoaW5rJyxcbiAgICAgICAgaWQ6ICdhZGRpdGlvbmFsSW5mb3JtYXRpb24nLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1RlbGwgdXMgd2hhdCB5b3UgdGhpbmsnLFxuICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICdhdmFmb3JtLWRlbW8nLFxuICAgIG5hbWU6ICdBdmFGb3JtIERlbW8nLFxuICAgIHJlZGlyZWN0dXJsOiBudWxsLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdTdWJtaXQnLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdBVkFGT1JNREVNTycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyaWMgQXZhZm9ybSBsYXlvdXQnLFxuICAgICAgZGlzcGxheU5hbWU6ICdBdmFmb3JtIGdlbmVyaWMgbGF5b3V0JyxcbiAgICB9LFxuICAgIHRpdGxlOiAnQXZhZm9ybSBEZW1vIFRlc3QgRm9ybScsXG4gIH0sXG4gIEFWQUZPUk1MQU5HVUFHRToge1xuICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyBhIGRlbW8gZm9ybSB0byB1c2UgdG8gc2hvdyBsb2NhbGUgc3dpdGNoJyxcbiAgICBmaWVsZHM6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdOYW1lJyxcbiAgICAgICAgaWQ6ICdmdWxsbmFtZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIHlvdXIgZnVsbCBuYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheVRleHQ6ICdGaXJzdCBuYW1lJyxcbiAgICAgICAgICBpZDogJ2ZpcnN0TmFtZScsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBmaXJzdCBuYW1lJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGRpc3BsYXlUZXh0OiAnTGFzdCBuYW1lJyxcbiAgICAgICAgICBpZDogJ2xhc3ROYW1lJyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciB5b3VyIGxhc3QgbmFtZScsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0J1c2luZXNzIEVtYWlsJyxcbiAgICAgICAgaWQ6ICdlbWFpbCcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIHlvdXIgYnVzaW5lc3MgZW1haWwnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2VtYWlsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ29tcGFueScsXG4gICAgICAgIGlkOiAnY29tcGFueScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIGNvbXBhbnkgbmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDb3VudHJ5JyxcbiAgICAgICAgaWQ6ICdjb3VudHJ5JyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBjb3VudHJ5JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ29tbWVudHMnLFxuICAgICAgICBpZDogJ2FkZGl0aW9uYWxJbmZvcm1hdGlvbicsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnVGVsbCB1cyB3aGF0IHlvdSB0aGluaycsXG4gICAgICAgIHR5cGU6ICd0ZXh0YXJlYScsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogJ2F2YWZvcm0tbGFuZ3VhZ2UtZGVtbycsXG4gICAgbmFtZTogJ0F2YUZvcm0gTG9jYWxlIERlbW8nLFxuICAgIHJlZGlyZWN0dXJsOiBudWxsLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdTdWJtaXQnLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdBVkFGT1JNTEFOR1VBR0UnLFxuICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmljIEF2YWZvcm0gbGF5b3V0JyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnQXZhZm9ybSBnZW5lcmljIGxheW91dCcsXG4gICAgfSxcbiAgICB0aXRsZTogJ0F2YWZvcm0gTG9jYWxlIFRlc3QgRm9ybScsXG4gIH0sXG4gIEFWQUZPUk1URVNUOiB7XG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIGEgdGVzdCBmb3JtIHRvIHVzZSB3aXRoIEF2YWZvcm0nLFxuICAgIGZpZWxkczogW1xuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1BsZWFzZSBlbnRlciB5b3VyIGZ1bGwgbmFtZScsXG4gICAgICAgIGlkOiAnZnVsbG5hbWUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciB5b3VyIGZ1bGwgbmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQbGVhc2UgZW50ZXIgeW91ciBmaXJzdCBuYW1lJyxcbiAgICAgICAgaWQ6ICdmaXJzdE5hbWUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciB5b3VyIGZpcnN0IG5hbWUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIGVudGVyIHlvdXIgbGFzdCBuYW1lJyxcbiAgICAgICAgaWQ6ICdsYXN0TmFtZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIHlvdXIgbGFzdCBuYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1BsZWFzZSBlbnRlciB5b3VyIGJ1c2luZXNzIGVtYWlsJyxcbiAgICAgICAgaWQ6ICdlbWFpbCcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIHlvdXIgYnVzaW5lc3MgZW1haWwnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2VtYWlsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIGVudGVyIGNvbXBhbnkgbmFtZScsXG4gICAgICAgIGlkOiAnY29tcGFueScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIGNvbXBhbnkgbmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQbGVhc2UgZW50ZXIgeW91ciBwaG9uZSBudW1iZXInLFxuICAgICAgICBpZDogJ3Bob25lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBwaG9uZSBudW1iZXInLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIGVudGVyIHlvdXIgY291bnRyeScsXG4gICAgICAgIGlkOiAnY291bnRyeScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIHlvdXIgY291bnRyeScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1BsZWFzZSBzZWxlY3QgeW91ciBzdGF0ZScsXG4gICAgICAgIGlkOiAnc3RhdGUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBzZWxlY3QgeW91ciBzdGF0ZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdBbGFiYW1hJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQUwnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ01hc3NhY2h1c2V0dHMnLFxuICAgICAgICAgICAgdmFsdWU6ICdNQScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnV2FzaGluZ3RvbicsXG4gICAgICAgICAgICB2YWx1ZTogJ1dBJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdSYWRpbyBmaWVsZCcsXG4gICAgICAgIGlkOiAncmFkaW8tZmllbGQnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ3JhZGlvJyxcbiAgICAgICAgdmFsdWU6ICdyYWRpbyB2YWx1ZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1RlbGwgdXMgd2hhdCB5b3UgdGhpbmsnLFxuICAgICAgICBpZDogJ2FkZGl0aW9uYWxJbmZvcm1hdGlvbicsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnVGVsbCB1cyB3aGF0IHlvdSB0aGluaycsXG4gICAgICAgIHR5cGU6ICd0ZXh0YXJlYScsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ29ubmVjdG9yIFNlbGVjdG9yJyxcbiAgICAgICAgaWQ6ICdjb25uZWN0b3JfaWQnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0Nvbm5lY3RvciBTZWxlY3RvcicsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdBcmUgeW91IGxvY2F0ZWQgaW4gRVU/JyxcbiAgICAgICAgaWQ6ICdldScsXG4gICAgICAgIHZhbHVlOiAnaW5FdXJvcGUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1NpZ24gbWUgdXAgZm9yIEZyZWUgVHJpYWwnLFxuICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnRG8geW91IGFncmVlIHRvIHRoaXMgZm9ybT8nLFxuICAgICAgICBpZDogJ3Rlcm1zX29mX3NlcnZpY2UnLFxuICAgICAgICB2YWx1ZTogJ2FncmVlcycsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnU2lnbiBtZSB1cCBmb3IgRnJlZSBUcmlhbCcsXG4gICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGlkOiAnYXZhZm9ybS10ZXN0JyxcbiAgICBuYW1lOiAnQXZhRm9ybSBUZXN0JyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRoYW5reW91OiB7XG4gICAgICBtZXNzYWdlOiAnVGhhbmsgeW91IGZvciB5b3VyIHN1Ym1pc3Npb24uIFNvbWVvbmUgd2lsbCBiZSBpbiBjb250YWN0IHdpdGggeW91IHNob3J0bHknLFxuICAgICAgdGl0bGU6ICdUaGFuayB5b3UnLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdBVkFGT1JNVEVTVCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyaWMgQXZhZm9ybSBsYXlvdXQnLFxuICAgICAgZGlzcGxheU5hbWU6ICdBdmFmb3JtIGdlbmVyaWMgbGF5b3V0JyxcbiAgICB9LFxuICAgIHRpdGxlOiAnQXZhZm9ybSBUZXN0IEZvcm0nLFxuICB9LFxuICBBVkFGT1JNQ09MVU1OOiB7XG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIGEgdGVzdCBmb3JtIHRvIHVzZSB3aXRoIEF2YWZvcm0nLFxuICAgIGZpZWxkczogW3tcbiAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIGVudGVyIHlvdXIgZnVsbCBuYW1lJyxcbiAgICAgIGlkOiAnZnVsbG5hbWUnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBmdWxsIG5hbWUnLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSxcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIGVudGVyIHlvdXIgZmlyc3QgbmFtZScsXG4gICAgICAgIGlkOiAnZmlyc3ROYW1lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBmaXJzdCBuYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1BsZWFzZSBlbnRlciB5b3VyIGxhc3QgbmFtZScsXG4gICAgICAgIGlkOiAnbGFzdE5hbWUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciB5b3VyIGxhc3QgbmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIGVudGVyIHlvdXIgYnVzaW5lc3MgZW1haWwnLFxuICAgICAgaWQ6ICdlbWFpbCcsXG4gICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciB5b3VyIGJ1c2luZXNzIGVtYWlsJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgdHlwZTogJ2VtYWlsJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIGVudGVyIGNvbXBhbnkgbmFtZScsXG4gICAgICBpZDogJ2NvbXBhbnknLFxuICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgY29tcGFueSBuYW1lJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgZGlzcGxheVRleHQ6ICdQbGVhc2UgZW50ZXIgeW91ciBwaG9uZSBudW1iZXInLFxuICAgICAgaWQ6ICdwaG9uZScsXG4gICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciB5b3VyIHBob25lIG51bWJlcicsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIGVudGVyIHlvdXIgY291bnRyeScsXG4gICAgICBpZDogJ2NvdW50cnknLFxuICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBjb3VudHJ5JyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgdHlwZTogJ3RleHQnLFxuICAgIH0sXG4gICAgW1xuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0NpdHknLFxuICAgICAgICBpZDogJ2NpdHknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciB5b3VyIGNpdHknLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIHNlbGVjdCB5b3VyIHN0YXRlJyxcbiAgICAgICAgaWQ6ICdzdGF0ZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIHNlbGVjdCB5b3VyIHN0YXRlJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ0FsYWJhbWEnLFxuICAgICAgICAgICAgdmFsdWU6ICdBTCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnTWFzc2FjaHVzZXR0cycsXG4gICAgICAgICAgICB2YWx1ZTogJ01BJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdXYXNoaW5ndG9uJyxcbiAgICAgICAgICAgIHZhbHVlOiAnV0EnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1Bvc3RhbCBjb2RlJyxcbiAgICAgICAgaWQ6ICd6aXBfY29kZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIHlvdXIgemlwX2NvZGUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICB7XG4gICAgICBkaXNwbGF5VGV4dDogJ1RlbGwgdXMgd2hhdCB5b3UgdGhpbmsnLFxuICAgICAgaWQ6ICdhZGRpdGlvbmFsSW5mb3JtYXRpb24nLFxuICAgICAgcGxhY2Vob2xkZXI6ICdUZWxsIHVzIHdoYXQgeW91IHRoaW5rJyxcbiAgICAgIHR5cGU6ICd0ZXh0YXJlYScsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgfV0sXG4gICAgaWQ6ICdhdmFmb3JtLWNvbHVtbi12aWV3JyxcbiAgICBuYW1lOiAnQXZhRm9ybSBUZXN0JyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnQVZBRk9STUNPTFVNTicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0F2YWZvcm0gY29sdW1uIGxheW91dCB0ZXN0JyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnQXZhZm9ybSBjb2x1bW4gbGF5b3V0JyxcbiAgICB9LFxuICAgIHRpdGxlOiAnQXZhZm9ybSBDb2x1bW4gbGF5b3V0IFRlc3QgRm9ybScsXG4gIH0sXG4gIEJBU0lDOiB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGZpZWxkczogW1xuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ05hbWUnLFxuICAgICAgICBpZDogJ2Z1bGxuYW1lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdOYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0J1c2luZXNzIGVtYWlsJyxcbiAgICAgICAgaWQ6ICdlbWFpbCcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQnVzaW5lc3MgZW1haWwnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2VtYWlsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ29tcGFueScsXG4gICAgICAgIGlkOiAnY29tcGFueScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQ29tcGFueScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQaG9uZScsXG4gICAgICAgIGlkOiAncGhvbmUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1Bob25lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICdhdmFmb3JtLWJhc2ljJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnQkFTSUMnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgIH0sXG4gICAgdGl0bGU6ICcnLFxuICB9LFxuICBCQVNJQ1dJVEhJTkRVU1RSWVRFU1Q6IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnTmFtZScsXG4gICAgICAgIGlkOiAnZnVsbG5hbWUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ05hbWUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQnVzaW5lc3MgZW1haWwnLFxuICAgICAgICBpZDogJ2VtYWlsJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdCdXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnZW1haWwnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDb21wYW55JyxcbiAgICAgICAgaWQ6ICdjb21wYW55JyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdDb21wYW55JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1Bob25lJyxcbiAgICAgICAgaWQ6ICdwaG9uZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGhvbmUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnSW5kdXN0cnknLFxuICAgICAgICBpZDogJ2luZHVzdHJ5JyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdJbmR1c3RyeScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdBY2NvdW50aW5nJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQWNjb3VudGluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnQmV2ZXJhZ2UgJiBBbGNvaG9sJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQmV2ZXJhZ2UgQWxjb2hvbCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnQ29tbXVuaWNhdGlvbnMnLFxuICAgICAgICAgICAgdmFsdWU6ICdDb21tdW5pY2F0aW9ucycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnQ29uc3RydWN0aW9uJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQ29uc3RydWN0aW9uJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdFbmVyZ3knLFxuICAgICAgICAgICAgdmFsdWU6ICdFbmVyZ3knLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ0xvZGdpbmcgJiBIb3NwaXRhbGl0eScsXG4gICAgICAgICAgICB2YWx1ZTogJ0xvZGdpbmcgJiBIb3NwaXRhbGl0eScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnTWFudWZhY3R1cmluZycsXG4gICAgICAgICAgICB2YWx1ZTogJ01hbnVmYWN0dXJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ1Jlc3RhdXJhbnQgSW5kdXN0cnknLFxuICAgICAgICAgICAgdmFsdWU6ICdBY2NvbW1vZGF0aW9uICYgRm9vZCBTZXJ2aWNlcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnUmV0YWlsJyxcbiAgICAgICAgICAgIHZhbHVlOiAnUmV0YWlsJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdTb2Z0d2FyZScsXG4gICAgICAgICAgICB2YWx1ZTogJ1NvZnR3YXJlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdXaG9sZXNhbGUgJiBEaXN0cmlidXRpb24nLFxuICAgICAgICAgICAgdmFsdWU6ICdXaG9sZXNhbGUgJiBEaXN0cmlidXRpb24nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ090aGVyJyxcbiAgICAgICAgICAgIHZhbHVlOiAnT3RoZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICdiYXNpYy13aXRoLWluZHVzdHJ5JyxcbiAgICBuYW1lOiAnQXZhZm9ybSBiYXNpYyBpbmR1c3RyeSByZXF1aXJlZCB0ZW1wbGF0ZSB0ZXN0JyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRoYW5reW91OiB7XG4gICAgICBtZXNzYWdlOiAnVGhhbmsgeW91IGZvciB5b3VyIHN1Ym1pc3Npb24uJyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnQkFTSUNXSVRISU5EVVNUUllURVNUJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQmFzaWMgaW5kdXN0cnkgcmVxdWlyZWQnLFxuICAgICAgZGlzcGxheU5hbWU6ICdCYXNpYyBpbmR1c3RyeSByZXF1aXJlZCcsXG4gICAgfSxcbiAgICB0aGVtZToge1xuICAgICAgbGF5b3V0OiBudWxsLFxuICAgICAgc2hvd0xvYWRlcjogZmFsc2UsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG4gIEJBU0lDU1VCTUlTU0lPTkxJTUlUVEVTVDoge1xuICAgIGNvbmZpZ3M6IHtcbiAgICAgIHN1Ym1pc3Npb25MaW1pdENhcDogMTAsXG4gICAgICBzdWJtaXNzaW9uTGltaXRJZDogJ0JBU0lDU1VCTUlTU0lPTkxJTUlUVEVTVDInLFxuICAgICAgc3VibWlzc2lvbkxpbWl0VGhhbmt5b3VNZXNzYWdlOiAnVGhhbmsgeW91IGZvciByZWdpc3RlcmluZycsXG4gICAgICBzdWJtaXNzaW9uTGltaXREaXNhYmxlZE1lc3NhZ2U6ICdUaGFuayB5b3UgZm9yIHlvdXIgaW50ZXJlc3QgYnV0IHRoZSBudW1iZXIgb2YgcmVnaXN0cmF0aW9ucyBoYXMgYmVlbiBtZXQuJyxcbiAgICAgIHN1Ym1pc3Npb25FbmREYXRlOiAnJyxcbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdOYW1lJyxcbiAgICAgICAgaWQ6ICdmdWxsbmFtZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnTmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdCdXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIGlkOiAnZW1haWwnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0J1c2luZXNzIGVtYWlsJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdlbWFpbCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0NvbXBhbnknLFxuICAgICAgICBpZDogJ2NvbXBhbnknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0NvbXBhbnknLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUGhvbmUnLFxuICAgICAgICBpZDogJ3Bob25lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQaG9uZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGlkOiAnYXZhZm9ybS1iYXNpYycsXG4gICAgbmFtZTogJycsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ1N1Ym1pdCcsXG4gICAgfSxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbmFtZTogJ0JBU0lDJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgQkFTSUNXSVRIQlVTSU5FU1M6IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnTmFtZScsXG4gICAgICAgIGlkOiAnZnVsbG5hbWUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ05hbWUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQnVzaW5lc3MgZW1haWwnLFxuICAgICAgICBpZDogJ2VtYWlsJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdCdXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnZW1haWwnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDb21wYW55JyxcbiAgICAgICAgaWQ6ICdjb21wYW55JyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdDb21wYW55JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1Bob25lJyxcbiAgICAgICAgaWQ6ICdwaG9uZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGhvbmUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogJ2F2YWZvcm0tYmFzaWMnLFxuICAgIG5hbWU6ICcnLFxuICAgIHJlZGlyZWN0dXJsOiBudWxsLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdTdWJtaXQnLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdCQVNJQycsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG4gIEJBU0lDV0lUSFdFQlNJVEU6IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnTmFtZScsXG4gICAgICAgIGlkOiAnZnVsbG5hbWUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ05hbWUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQnVzaW5lc3MgZW1haWwnLFxuICAgICAgICBpZDogJ2VtYWlsJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdCdXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnZW1haWwnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDb21wYW55JyxcbiAgICAgICAgaWQ6ICdjb21wYW55JyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdDb21wYW55JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1dlYnNpdGUnLFxuICAgICAgICBpZDogJ0Nfd2Vic2l0ZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnV2Vic2l0ZScsXG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQaG9uZScsXG4gICAgICAgIGlkOiAncGhvbmUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1Bob25lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICdhdmFmb3JtLWJhc2ljJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnQkFTSUMnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgIH0sXG4gICAgdGl0bGU6ICcnLFxuICB9LFxuICBCQVNJQ1dJVEhXRUJTSVRFUkVRVUlSRUQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXSxcbiAgICBmaWVsZHNPdmVyd3JpdGU6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdXZWJzaXRlJyxcbiAgICAgICAgaWQ6ICdDX3dlYnNpdGUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1dlYnNpdGUnLFxuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGZpZWxkc1JlcGxpY2F0ZTogJ0JBU0lDV0lUSFdFQlNJVEUnLFxuICAgIGlkOiAnYXZhZm9ybS1iYXNpYycsXG4gICAgbmFtZTogJycsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ1N1Ym1pdCcsXG4gICAgfSxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbmFtZTogJ0JBU0lDJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgQkFTSUNNT0RBTDoge1xuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtdLFxuICAgIGZpZWxkc1JlcGxpY2F0ZTogJ0JBU0lDJyxcbiAgICBpZDogJ2F2YWZvcm0tYmFzaWMtbW9kYWwnLFxuICAgIG5hbWU6ICcnLFxuICAgIHJlZGlyZWN0dXJsOiBudWxsLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdTdWJtaXQnLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdCQVNJQ01PREFMJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgQkFTSUNXSVRIQ09NTUVOVFM6IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnTmFtZScsXG4gICAgICAgIGlkOiAnZnVsbG5hbWUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ05hbWUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQnVzaW5lc3MgZW1haWwnLFxuICAgICAgICBpZDogJ2VtYWlsJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdCdXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnZW1haWwnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDb21wYW55JyxcbiAgICAgICAgaWQ6ICdjb21wYW55JyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdDb21wYW55JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1Bob25lJyxcbiAgICAgICAgaWQ6ICdwaG9uZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGhvbmUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ29tbWVudHMnLFxuICAgICAgICBpZDogJ2FkZGl0aW9uYWxJbmZvcm1hdGlvbicsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQ29tbWVudHMnLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIHR5cGU6ICd0ZXh0YXJlYScsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICdhdmFmb3JtLWJhc2ljLXdpdGgtY29tbWVudCcsXG4gICAgbmFtZTogJycsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ1N1Ym1pdCcsXG4gICAgfSxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbmFtZTogJ0JBU0lDV0lUSENPTU1FTlRTJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgQkFTSUNXSVRIVE9TOiB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGZpZWxkczogW10sXG4gICAgZmllbGRzQXBwZW5kOiBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ291bnRyeScsXG4gICAgICAgIGlkOiAnY291bnRyeScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQ291bnRyeScsXG4gICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ29tbWVudHMnLFxuICAgICAgICBpZDogJ2FkZGl0aW9uYWxJbmZvcm1hdGlvbicsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQ29tbWVudHMnLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIHR5cGU6ICd0ZXh0YXJlYScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0kgYWNjZXB0IHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucy4nLFxuICAgICAgICBpZDogJ3Rlcm1zX29mX3NlcnZpY2UnLFxuICAgICAgICBsaW5rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhyZWY6ICdodHRwczovL3d3dy5hdmFsYXJhLmNvbS91cy9lbi9sZWdhbC9zaXRlLXRlcm1zLmh0bWwnLFxuICAgICAgICAgICAgdGV4dDogJ1Rlcm1zIGFuZCBDb25kaXRpb25zJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBmaWVsZHNSZXBsaWNhdGU6ICdCQVNJQycsXG4gICAgaWQ6ICdhdmFmb3JtLWJhc2ljLXdpdGgtdG9zJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnQkFTSUNXSVRIVE9TJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgQkFTSUNQTEFJTjoge1xuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtdLFxuICAgIGZpZWxkc1JlcGxpY2F0ZTogJ0JBU0lDJyxcbiAgICBmaWVsZHNPdmVyd3JpdGU6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQaG9uZScsXG4gICAgICAgIGlkOiAncGhvbmUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1Bob25lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICdhdmFmb3JtLWJhc2ljLXBsYWluLXBob25lLWZpZWxkJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnQkFTSUNQTEFJTicsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG4gIENIQVQ6IHtcbiAgICBjb25maWdzOiB7XG4gICAgICAuLi5GT1JNQ09ORklHUyxcbiAgICAgIGNvbnRhY3RfbWV0aG9kOiAnQ2hhdCcsXG4gICAgfSxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXSxcbiAgICBpZDogJ2F2YWZvcm0tY2hhdCcsXG4gICAgZmllbGRzUmVwbGljYXRlOiAnQkFTSUMnLFxuICAgIG5hbWU6ICcnLFxuICAgIHJlZGlyZWN0dXJsOiBudWxsLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdHZXQgU3RhcnRlZCcsXG4gICAgfSxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbmFtZTogJ0NIQVQnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgIH0sXG4gICAgdGl0bGU6ICcnLFxuICB9LFxuICBDSEFUU0lNUExFOiB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGZpZWxkczogW10sXG4gICAgZmllbGRzUmVwbGljYXRlOiAnQkFTSUMnLFxuICAgIGZpZWxkc1JlbW92ZTogWydwaG9uZSddLFxuICAgIGlkOiAnYXZhZm9ybS1jaGF0LXNpbXBsZScsXG4gICAgbmFtZTogJycsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ1N1Ym1pdCcsXG4gICAgfSxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbmFtZTogJ0JBU0lDUExBSU4nLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgIH0sXG4gICAgdGl0bGU6ICcnLFxuICB9LFxuICBDSElMSVBJUEVSOiB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGZpZWxkczogW10sXG4gICAgZmllbGRzUmVwbGljYXRlOiAnQkFTSUMnLFxuICAgIGlkOiAnY2hpbGlwaXBlcicsXG4gICAgbmFtZTogJycsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgY2hpbGlwaXBlcjoge1xuICAgICAgcm91dGVyOiAnY29udGFjdC1tZS1yb3V0ZXInLFxuICAgIH0sXG4gICAgc2NyaXB0czogW1xuICAgICAgJ2h0dHBzOi8vanMuY2hpbGlwaXBlci5jb20vbWFya2V0aW5nLmpzJyxcbiAgICBdLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdTY2hlZHVsZSBhIGNhbGwnLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdDSElMSVBJUEVSJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgREVGQVVMVDoge1xuICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyBhIHRlc3QgZm9ybSB0byB1c2Ugd2l0aCBBdmFmb3JtJyxcbiAgICBmaWVsZHM6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQbGVhc2UgZW50ZXIgeW91ciBmdWxsIG5hbWUnLFxuICAgICAgICBpZDogJ2Z1bGxuYW1lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBmdWxsIG5hbWUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIGVudGVyIHlvdXIgYnVzaW5lc3MgZW1haWwnLFxuICAgICAgICBpZDogJ2VtYWlsJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBidXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnZW1haWwnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQbGVhc2UgZW50ZXIgY29tcGFueSBuYW1lJyxcbiAgICAgICAgaWQ6ICdjb21wYW55JyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgY29tcGFueSBuYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1BsZWFzZSBlbnRlciB5b3VyIHBob25lIG51bWJlcicsXG4gICAgICAgIGlkOiAncGhvbmUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciB5b3VyIHBob25lIG51bWJlcicsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGlkOiAnYXZhZm9ybS1kZWZhdWx0JyxcbiAgICBuYW1lOiAnQXZhRm9ybSBTYW1wbGUgVGVzdCcsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ0dldCBTdGFydGVkJyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnREVGQVVMVCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0RlZmF1bHQgQXZhZm9ybSBsYXlvdXQnLFxuICAgICAgZGlzcGxheU5hbWU6ICdBdmFmb3JtIGRlZmF1bHQgbGF5b3V0JyxcbiAgICB9LFxuICAgIHRoYW5reW91OiB7XG4gICAgICBtZXNzYWdlOiAnVGhhbmsgeW91IGZvciB5b3VyIHN1Ym1pc3Npb24uIFNvbWVvbmUgd2lsbCBiZSBpbiBjb250YWN0IHdpdGggeW91IHNob3J0bHkuJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnQXZhZm9ybSBkZWZhdWx0IHRlc3QgZm9ybScsXG4gIH0sXG4gIEVNQUlMT05MWVJFQUNUOiB7XG4gICAgY2xhc3NlczogW10sXG4gICAgY29uZmlnczoge1xuICAgICAgLi4uRk9STUNPTkZJR1MsXG4gICAgICBwb2k6ICdBdmF0YXgnLFxuICAgICAgb2ZmZXI6ICdOZXdzbGV0dGVyJyxcbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiBudWxsLFxuICAgIGZpZWxkczogW1xuICAgICAge1xuICAgICAgICBjb250YWluc0dkcHI6IHRydWUsXG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUGxlYXNlIGVudGVyIHlvdXIgYnVzaW5lc3MgZW1haWwnLFxuICAgICAgICBpZDogJ2VtYWlsJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgeW91ciBidXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnZW1haWwnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGlkOiAnYXZhZm9ybS1lbWFpbC1vbmx5LXJlYWN0JyxcbiAgICBuYW1lOiAnRU1BSUxPTkxZJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU2lnbnVwJyxcbiAgICB9LFxuICAgIHRoYW5reW91OiB7XG4gICAgICB0aXRsZTogJ1RoYW5rIHlvdSEgWW91XFwncmUgc2lnbmVkIHVwLicsXG4gICAgfSxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbmFtZTogJ0VNQUlMT05MWVJFQUNUJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW1haWwgb25seSB0ZW1wbGF0ZScsXG4gICAgICBkaXNwbGF5TmFtZTogJ0F2YWZvcm0gZW1haWwgb25seSBpbmxpbmUgbGF5b3V0JyxcbiAgICB9LFxuICAgIHRoZW1lOiB7XG4gICAgICBsYXlvdXQ6IG51bGwsXG4gICAgICBvZmZzZXQ6IHtcbiAgICAgICAgcG9zaXRpb246ICdsZWZ0JyxcbiAgICAgIH0sXG4gICAgICBzaG93TG9hZGVyOiBmYWxzZSxcbiAgICB9LFxuICB9LFxuICBFTUFJTE9OTFlDT0xVTU46IHtcbiAgICBjbGFzc2VzOiBbXSxcbiAgICBjb25maWdzOiB7XG4gICAgICAuLi5GT1JNQ09ORklHUyxcbiAgICAgIHBvaTogJ0F2YXRheCcsXG4gICAgICBvZmZlcjogJ05ld3NsZXR0ZXInLFxuICAgIH0sXG4gICAgZGVzY3JpcHRpb246IG51bGwsXG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIGNvbnRhaW5zR2RwcjogdHJ1ZSxcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQbGVhc2UgZW50ZXIgeW91ciBidXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIGlkOiAnZW1haWwnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciB5b3VyIGJ1c2luZXNzIGVtYWlsJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdlbWFpbCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICdlbWFpbC1vbmx5LWNvbHVtbicsXG4gICAgbmFtZTogJ0VNQUlMT05MWUNPTFVNTicsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ1NpZ251cCcsXG4gICAgfSxcbiAgICB0aGFua3lvdToge1xuICAgICAgdGl0bGU6ICdUaGFuayB5b3UhIFlvdVxcJ3JlIHNpZ25lZCB1cC4nLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdFTUFJTE9OTFlDT0xVTU4nLFxuICAgICAgZGVzY3JpcHRpb246ICdFbWFpbCBvbmx5IHRlbXBsYXRlJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnQXZhZm9ybSBlbWFpbCBvbmx5IGNvbHVtbiBsYXlvdXQnLFxuICAgIH0sXG4gIH0sXG4gIEVWRU5UUzoge1xuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtdLFxuICAgIGZpZWxkc1JlcGxpY2F0ZTogJ0JBU0lDJyxcbiAgICBmaWVsZHNBcHBlbmQ6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdFdmVudHMnLFxuICAgICAgICBpZDogJ2V2ZW50cycsXG4gICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0V2ZW50cycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogJ2F2YWZvcm0tZXZlbnRzJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnQkFTSUMnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgIH0sXG4gICAgdGl0bGU6ICcnLFxuICB9LFxuICBJTklUVEVTVDoge1xuICAgIGNsYXNzZXM6IFtdLFxuICAgIGRlc2NyaXB0aW9uOiBudWxsLFxuICAgIGZpZWxkczogW10sXG4gICAgaWQ6ICdpbml0LXRlc3QnLFxuICAgIG5hbWU6ICdBdmFGb3JtIEluaXQgVGVzdCcsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ1NpZ251cCcsXG4gICAgfSxcbiAgICB0aGFua3lvdToge1xuICAgICAgbWVzc2FnZTogJ1RoYW5rIHlvdSBmb3Igc2lnbmluZyB1cC4nLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdJTklUVEVTVCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VtYWlsIG9ubHkgdGVtcGxhdGUnLFxuICAgICAgZGlzcGxheU5hbWU6ICdBdmFmb3JtIGVtYWlsIG9ubHkgaW5saW5lIGxheW91dCcsXG4gICAgfSxcbiAgICB0aGVtZToge1xuICAgICAgbGF5b3V0OiAnaW5saW5lJyxcbiAgICAgIHNob3dMb2FkZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgdGl0bGU6ICdBdmFmb3JtIGluaXQgdGVzdCBmb3JtJyxcbiAgfSxcbiAgSU5URVJOQUxQQVJUTkVSUkVGRVJSQUw6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgXCJmaWVsZHNcIjogW1xuICAgICAge1xuICAgICAgICBcImRpc3BsYXlUZXh0XCI6IFwiUHJvc3BlY3QgTmFtZVwiLFxuICAgICAgICBcImlkXCI6IFwiZnVsbG5hbWVcIixcbiAgICAgICAgXCJwbGFjZWhvbGRlclwiOiBcIlByb3NwZWN0IE5hbWVcIixcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImRpc3BsYXlUZXh0XCI6IFwiUHJvc3BlY3QgVGl0bGVcIixcbiAgICAgICAgXCJpZFwiOiBcInRpdGxlXCIsXG4gICAgICAgIFwicGxhY2Vob2xkZXJcIjogXCJQcm9zcGVjdCBUaXRsZVwiLFxuICAgICAgICBcInJlcXVpcmVkXCI6IGZhbHNlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImRpc3BsYXlUZXh0XCI6IFwiUHJvc3BlY3QgRW1haWxcIixcbiAgICAgICAgXCJpZFwiOiBcImVtYWlsXCIsXG4gICAgICAgIFwicGxhY2Vob2xkZXJcIjogXCJQcm9zcGVjdCBFbWFpbFwiLFxuICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgIFwidHlwZVwiOiBcImVtYWlsXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwiZGlzcGxheVRleHRcIjogXCJQcm9zcGVjdCBDb21wYW55XCIsXG4gICAgICAgIFwiaWRcIjogXCJjb21wYW55XCIsXG4gICAgICAgIFwicGxhY2Vob2xkZXJcIjogXCJQcm9zcGVjdCBDb21wYW55XCIsXG4gICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJkaXNwbGF5VGV4dFwiOiBcIlByb3NwZWN0IFBob25lXCIsXG4gICAgICAgIFwiaWRcIjogXCJwaG9uZVwiLFxuICAgICAgICBcInBsYWNlaG9sZGVyXCI6IFwiUHJvc3BlY3QgUGhvbmVcIixcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImRpc3BsYXlUZXh0XCI6IFwiUHJvc3BlY3QgQ291bnRyeVwiLFxuICAgICAgICBcImlkXCI6IFwiY29tcGFueV9jb3VudHJ5XCIsXG4gICAgICAgIFwicGxhY2Vob2xkZXJcIjogXCJQcm9zcGVjdCBDb3VudHJ5XCIsXG4gICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJkaXNwbGF5VGV4dFwiOiBcIlByb3NwZWN0IEludGVncmF0aW9uIFNvZnR3YXJlXCIsXG4gICAgICAgIFwiaWRcIjogXCJjb25uZWN0b3JfaWRcIixcbiAgICAgICAgXCJwbGFjZWhvbGRlclwiOiBcIlByb3NwZWN0IEludGVncmF0aW9uIFNvZnR3YXJlXCIsXG4gICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJkaXNwbGF5VGV4dFwiOiBcIlBhcnRuZXIgUmVwIEVtYWlsXCIsXG4gICAgICAgIFwiaWRcIjogXCJwYXJ0bmVyX3JlcF9lbWFpbFwiLFxuICAgICAgICBcInBsYWNlaG9sZGVyXCI6IFwiUGFydG5lciBSZXAgRW1haWxcIixcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImRpc3BsYXlUZXh0XCI6IFwiTm90ZXMgKGlmIGF1dG8tb3BwLCBtZW50aW9uIHRoYXQgaGVyZSlcIixcbiAgICAgICAgXCJpZFwiOiBcIm1hcmtldGluZ19mZWVkYmFja19ub3Rlc1wiLFxuICAgICAgICBcInBsYWNlaG9sZGVyXCI6IFwiTm90ZXMgKGlmIGF1dG8tb3BwLCBtZW50aW9uIHRoYXQgaGVyZSlcIixcbiAgICAgICAgXCJyZXF1aXJlZFwiOiBmYWxzZSxcbiAgICAgICAgXCJ0eXBlXCI6IFwidGV4dGFyZWFcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJkaXNwbGF5VGV4dFwiOiBcIldoZXJlIGRpZCB0aGlzIGxlYWQgY29tZSBmcm9tP1wiLFxuICAgICAgICBcImlkXCI6IFwiY2FtcGFpZ25faWRcIixcbiAgICAgICAgXCJwbGFjZWhvbGRlclwiOiBcIldoZXJlIGRpZCB0aGlzIGxlYWQgY29tZSBmcm9tP1wiLFxuICAgICAgICBcInJlcXVpcmVkXCI6IGZhbHNlLFxuICAgICAgICBcInR5cGVcIjogXCJzZWxlY3RcIixcbiAgICAgICAgXCJvcHRpb25zXCI6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJTYWxlcyBFbmdhZ2VtZW50XCIsXG4gICAgICAgICAgICBcInZhbHVlXCI6IFwiNzAxNWEwMDAwMDFsNVhZQUFZXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGlzcGxheVwiOiBcIlBhcnRuZXIgTWFuYWdlbWVudCBFbmdhZ2VtZW50XCIsXG4gICAgICAgICAgICBcInZhbHVlXCI6IFwiNzAxNWEwMDAwMDFsNVhUQUFZXCJcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwiZGlzcGxheVRleHRcIjogXCJPcHBvcnR1bml0eSBTdWJUeXBlXCIsXG4gICAgICAgIFwiaWRcIjogXCJvcHBfc3VidHlwZVwiLFxuICAgICAgICBcInBsYWNlaG9sZGVyXCI6IFwiT3Bwb3J0dW5pdHkgU3ViVHlwZVwiLFxuICAgICAgICBcInJlcXVpcmVkXCI6IGZhbHNlLFxuICAgICAgICBcInR5cGVcIjogXCJzZWxlY3RcIixcbiAgICAgICAgXCJvcHRpb25zXCI6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJBdmFUYXhcIixcbiAgICAgICAgICAgIFwidmFsdWVcIjogXCJBdmFUYXhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkaXNwbGF5XCI6IFwiQUNQXCIsXG4gICAgICAgICAgICBcInZhbHVlXCI6IFwiQUNQXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGlzcGxheVwiOiBcIkJldkFsY1wiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcIkJldkFsY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJCaXpEZXZcIixcbiAgICAgICAgICAgIFwidmFsdWVcIjogXCJCaXpEZXZcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkaXNwbGF5XCI6IFwiQml6RGV2LUVtZXJnaW5nXCIsXG4gICAgICAgICAgICBcInZhbHVlXCI6IFwiQml6RGV2LUVtZXJnaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGlzcGxheVwiOiBcIkJyYXppbFwiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcIkJyYXppbFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJCdXNpbmVzcyBMaWNlbnNlc1wiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcIkFDUFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJDZXJ0Q2FwdHVyZVwiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcIkNlcnRDYXB0dXJlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGlzcGxheVwiOiBcIkNvbW11bmljYXRpb25zXCIsXG4gICAgICAgICAgICBcInZhbHVlXCI6IFwiQ29tbXVuaWNhdGlvbnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkaXNwbGF5XCI6IFwiQ3Jvc3MtYm9yZGVyXCIsXG4gICAgICAgICAgICBcInZhbHVlXCI6IFwiQ3Jvc3MtYm9yZGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGlzcGxheVwiOiBcIkRTUFwiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcIkRTUFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJFTUVBXCIsXG4gICAgICAgICAgICBcInZhbHVlXCI6IFwiRU1FQVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJFeGNpc2VcIixcbiAgICAgICAgICAgIFwidmFsdWVcIjogXCJFeGNpc2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkaXNwbGF5XCI6IFwiSW5jbHVkZWRcIixcbiAgICAgICAgICAgIFwidmFsdWVcIjogXCJJbmNsdWRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJJbmRpYVwiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcIkluZGlhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGlzcGxheVwiOiBcIk1hdHJpeE1hc3RlclwiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcIk1hdHJpeE1hc3RlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJNU1BcIixcbiAgICAgICAgICAgIFwidmFsdWVcIjogXCJNU1BcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkaXNwbGF5XCI6IFwiTVNQLVBheXJvbGxcIixcbiAgICAgICAgICAgIFwidmFsdWVcIjogXCJNU1AtUGF5cm9sbFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJNeUxvZGdlVGF4XCIsXG4gICAgICAgICAgICBcInZhbHVlXCI6IFwiTXlMb2RnZVRheFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJTT0hPXCIsXG4gICAgICAgICAgICBcInZhbHVlXCI6IFwiU09IT1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJUcnVzdEZpbGVcIixcbiAgICAgICAgICAgIFwidmFsdWVcIjogXCJUcnVzdEZpbGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJkaXNwbGF5VGV4dFwiOiBcIkNvbm5lY3RvclwiLFxuICAgICAgICBcImlkXCI6IFwiY29ubmVjdG9yX2lkXCIsXG4gICAgICAgIFwicGxhY2Vob2xkZXJcIjogXCJDb25uZWN0b3JcIixcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImRpc3BsYXlUZXh0XCI6IFwiUHJvZHVjdCBvZiBJbnRlcmVzdFwiLFxuICAgICAgICBcImlkXCI6IFwicG9pXCIsXG4gICAgICAgIFwicGxhY2Vob2xkZXJcIjogXCJQcm9kdWN0IG9mIEludGVyZXN0XCIsXG4gICAgICAgIFwicmVxdWlyZWRcIjogZmFsc2UsXG4gICAgICAgIFwidHlwZVwiOiBcInNlbGVjdFwiLFxuICAgICAgICBcIm9wdGlvbnNcIjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGlzcGxheVwiOiBcIkF2YXRheFwiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImExbTBiMDAwMDAxU2JMdUFBS1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJBdmFsYXJhIGZvciBBY2NvdW50YW50c1wiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImExbTBiMDAwMDAyVko1UEFBV1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJBQ1VcIixcbiAgICAgICAgICAgIFwidmFsdWVcIjogXCJhMW0wYjAwMDAwMXpiMFBBQVFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkaXNwbGF5XCI6IFwiQmV2ZXJhZ2UgQWxjb2hvbFwiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImExbTBiMDAwMDAxZW9LUEFBWVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJCdXNpbmVzcyBMaWNlbnNlc1wiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImExbTVhMDAwMDAyTGhQcEFBS1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJDZXJ0Q2FwdHVyZVwiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImExbTBiMDAwMDAxU2JNM0FBS1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJDb21tdW5pY2F0aW9uc1wiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImExbTBiMDAwMDAxU2JMd0FBS1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJDcm9zcy1ib3JkZXJcIixcbiAgICAgICAgICAgIFwidmFsdWVcIjogXCJhMW0wYjAwMDAwMVNiTUFBQTBcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkaXNwbGF5XCI6IFwiRXhjaXNlXCIsXG4gICAgICAgICAgICBcInZhbHVlXCI6IFwiYTFtMGIwMDAwMDFTYkx4QUFLXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGlzcGxheVwiOiBcIk15TG9kZ2VcIixcbiAgICAgICAgICAgIFwidmFsdWVcIjogXCJhMW0wYjAwMDAwMVNiTUNBQTBcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkaXNwbGF5XCI6IFwiUHJvcGVydHkgVGF4XCIsXG4gICAgICAgICAgICBcInZhbHVlXCI6IFwiYTFtNWEwMDAwMDNvRUplQUFNXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGlzcGxheVwiOiBcIlJldHVybnNcIixcbiAgICAgICAgICAgIFwidmFsdWVcIjogXCJhMW0wYjAwMDAwMVNiTUVBQTBcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkaXNwbGF5XCI6IFwiVHJ1c3RGaWxlXCIsXG4gICAgICAgICAgICBcInZhbHVlXCI6IFwiYTFtMGIwMDAwMDFTYk1PQUEwXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGlzcGxheVwiOiBcIlRUUlwiLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImExbTVhMDAwMDAyTGtDakFBS1wiXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImRpc3BsYXlUZXh0XCI6IFwiU3VibWl0dGVyJ3MgTmFtZVwiLFxuICAgICAgICBcImlkXCI6IFwiZGVzY3JpcHRpb25cIixcbiAgICAgICAgXCJwbGFjZWhvbGRlclwiOiBcIlN1Ym1pdHRlcidzIE5hbWVcIixcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImRpc3BsYXlUZXh0XCI6IFwiU3VibWl0dGVyJ3MgRW1haWxcIixcbiAgICAgICAgXCJpZFwiOiBcInJlZl9lbWFpbFwiLFxuICAgICAgICBcInBsYWNlaG9sZGVyXCI6IFwiU3VibWl0dGVyJ3MgRW1haWxcIixcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICBcInR5cGVcIjogXCJlbWFpbFwiXG4gICAgICB9XG4gICAgXSxcbiAgICBcInNlY3Rpb25zXCI6IFtcbiAgICAgIHtcbiAgICAgICAgXCJpZFwiOiBcInN1Ym1pdHRlcmRldGFpbHNcIixcbiAgICAgICAgXCJ0aXRsZVwiOiBcIkxlYWQvT3BwIFN1Ym1pdHRlciBEZXRhaWxzXCIsXG4gICAgICAgIFwiZmllbGRzXCI6IFtcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgXCJyZWZfZW1haWxcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImlkXCI6IFwicGFydG5lcmRldGFpbHNcIixcbiAgICAgICAgXCJ0aXRsZVwiOiBcIlBhcnRuZXIgRGV0YWlsc1wiLFxuICAgICAgICBcImZpZWxkc1wiOiBbXG4gICAgICAgICAgXCJwYXJ0bmVyX3JlcF9lbWFpbFwiLFxuICAgICAgICAgIFwiY2FtcGFpZ25faWRcIixcbiAgICAgICAgICBcIm9wcF9zdWJ0eXBlXCIsXG4gICAgICAgICAgXCJjb25uZWN0b3JfaWRcIixcbiAgICAgICAgICBcInBvaVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwiaWRcIjogXCJsZWFkZGV0YWlsc1wiLFxuICAgICAgICBcInRpdGxlXCI6IFwiTGVhZCBEZXRhaWxzXCIsXG4gICAgICAgIFwiZmllbGRzXCI6IFtcbiAgICAgICAgICBcImVtYWlsXCIsXG4gICAgICAgICAgXCJmdWxsbmFtZVwiLFxuICAgICAgICAgIFwiY29tcGFueVwiLFxuICAgICAgICAgIFwicGhvbmVcIixcbiAgICAgICAgICBcInRpdGxlXCIsXG4gICAgICAgICAgXCJtYXJrZXRpbmdfZmVlZGJhY2tfbm90ZXNcIixcbiAgICAgICAgICBcImluZHVzdHJ5XCIsXG4gICAgICAgICAgXCJjb21wYW55X2NvdW50cnlcIlxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICBcImlkXCI6IFwiSU5URVJOQUxQQVJUTkVSUkVGRVJSQUxcIixcbiAgICBcIm5hbWVcIjogXCJJTlRFUk5BTFBBUlRORVJSRUZFUlJBTFwiLFxuICAgIFwicmVkaXJlY3R1cmxcIjogbnVsbCxcbiAgICBcInN1Ym1pdFwiOiB7XG4gICAgICBcImRpc3BsYXlUZXh0XCI6IFwiU3VibWl0XCJcbiAgICB9LFxuICAgIFwidGVtcGxhdGVcIjoge1xuICAgICAgXCJuYW1lXCI6IFwiSU5URVJOQUxQQVJUTkVSUkVGRVJSQUxcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgIFwiZGlzcGxheU5hbWVcIjogXCJcIlxuICAgIH0sXG4gICAgXCJ0aXRsZVwiOiBcIlwiXG4gIH0sXG4gIE1URFRPT0w6IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnTmFtZScsXG4gICAgICAgIGlkOiAnZnVsbG5hbWUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ05hbWUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQnVzaW5lc3MgZW1haWwnLFxuICAgICAgICBpZDogJ2VtYWlsJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdCdXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnZW1haWwnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQaG9uZScsXG4gICAgICAgIGlkOiAncGhvbmUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1Bob25lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0NvbXBhbnknLFxuICAgICAgICBpZDogJ2NvbXBhbnknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0NvbXBhbnknLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnVkFUIG51bWJlcicsXG4gICAgICAgIGlkOiAndmF0X251bWJlcicsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnVkFUIG51bWJlcicsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdJIGFncmVlIHRvIHRoZSBBdmFsYXJhIE1URCBGaWxlcicsXG4gICAgICAgIGlkOiAndGVybXNfb2Zfc2VydmljZScsXG4gICAgICAgIGxpbmtzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHJlZjogJ2h0dHBzOi8vd3d3LmF2YWxhcmEuY29tL3VzL2VuL2xlZ2FsL210ZHRlcm1zLmh0bWwnLFxuICAgICAgICAgICAgdGV4dDogJ3Rlcm1zIGFuZCBjb25kaXRpb25zLicsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICdhdmFmb3JtLW10ZC10b29sJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnTURUVE9PTCcsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG4gIE1MVFJBVEVMT09LVVA6IHtcbiAgICBjb25maWdzOiB7XG4gICAgICAuLi5GT1JNQ09ORklHUyxcbiAgICAgIGNhbGxiYWNrOiAnbWx0UmF0ZVJlc3BvbnNlJyxcbiAgICAgIHJhdGVMb29rdXBGb3JtOiB0cnVlLFxuICAgIH0sXG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGZpZWxkczogW1xuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1JlbnRhbCBBZGRyZXNzJyxcbiAgICAgICAgaWQ6ICdhZGRyZXNzMScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUmVudGFsIEFkZHJlc3MnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBkaXNwbGF5VGV4dDogJ1JlbnRhbCBDaXR5JyxcbiAgICAgICAgICBpZDogJ2NpdHknLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnUmVudGFsIENpdHknLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheVRleHQ6ICdSZW50YWwgU3RhdGUnLFxuICAgICAgICAgIGlkOiAnc3RhdGUnLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnUmVudGFsIFN0YXRlJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnc2VsZWN0LXN0YXRlJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnRnVsbCBuYW1lJyxcbiAgICAgICAgaWQ6ICdmdWxsbmFtZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnRnVsbCBuYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0J1c2luZXNzIGVtYWlsJyxcbiAgICAgICAgaWQ6ICdlbWFpbCcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQnVzaW5lc3MgZW1haWwnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2VtYWlsJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogJ2F2YWZvcm0tbWx0LXJhdGUtbG9va3VwJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICAgIHBvc2l0aW9uOiAnbGVmdCcsXG4gICAgfSxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbmFtZTogJ01MVFJBVEVMT09LVVAnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgIH0sXG4gICAgdGl0bGU6ICcnLFxuICB9LFxuICBNTFRSQVRFTE9PS1VQV0lUSFBIT05FOiB7XG4gICAgY29uZmlnczoge1xuICAgICAgLi4uRk9STUNPTkZJR1MsXG4gICAgICBjYWxsYmFjazogJ21sdFJhdGVSZXNwb25zZScsXG4gICAgICByYXRlTG9va3VwRm9ybTogdHJ1ZSxcbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtdLFxuICAgIGZpZWxkc1JlcGxpY2F0ZTogJ01MVFJBVEVMT09LVVAnLFxuICAgIGZpZWxkc0FwcGVuZDogW1xuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1Bob25lJyxcbiAgICAgICAgaWQ6ICdwaG9uZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGhvbmUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogJ2F2YWZvcm0tbWx0LXJhdGUtbG9va3VwLXdpdGgtcGhvbmUnLFxuICAgIG5hbWU6ICcnLFxuICAgIHJlZGlyZWN0dXJsOiBudWxsLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdTdWJtaXQnLFxuICAgICAgcG9zaXRpb246ICdsZWZ0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnTUxUUkFURUxPT0tVUFdJVEhQSE9ORScsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG4gIE1MVENPTlRBQ1RVUzoge1xuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdOYW1lJyxcbiAgICAgICAgaWQ6ICdmdWxsbmFtZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnTmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdCdXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIGlkOiAnZW1haWwnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0J1c2luZXNzIGVtYWlsJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdlbWFpbCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1F1ZXN0aW9ucycsXG4gICAgICAgIGlkOiAnbWFya2V0aW5nX2ZlZWRiYWNrX25vdGVzJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdRdWVzdGlvbnMnLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIHR5cGU6ICd0ZXh0YXJlYScsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICdhdmFmb3JtLW1sdC1jb250YWN0LXVzJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnTUxUQ09OVEFDVFVTJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgUEFSVE5FUjoge1xuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdOYW1lJyxcbiAgICAgICAgaWQ6ICdmdWxsbmFtZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnTmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdCdXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIGlkOiAnZW1haWwnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0J1c2luZXNzIGVtYWlsJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdlbWFpbCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0FkZHJlc3MnLFxuICAgICAgICBpZDogJ2FkZHJlc3MnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0FkZHJlc3MnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ2l0eScsXG4gICAgICAgIGlkOiAnY2l0eScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnY2l0eScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdTdGF0ZScsXG4gICAgICAgIGlkOiAnc3RhdGUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1N0YXRlJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1Bvc3RhbCBjb2RlJyxcbiAgICAgICAgaWQ6ICd6aXBfY29kZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUG9zdGFsIGNvZGUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ29tcGFueScsXG4gICAgICAgIGlkOiAnY29tcGFueScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQ29tcGFueScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQaG9uZScsXG4gICAgICAgIGlkOiAncGhvbmUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1Bob25lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0kgYWNjZXB0IHRoaXMgcGFydG5lciBhZ3JlZW1lbnQgaW4gd2hvbGUuJyxcbiAgICAgICAgaWQ6ICd0ZXJtc19vZl9zZXJ2aWNlJyxcbiAgICAgICAgbGlua3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBocmVmOiAnaHR0cHM6Ly93d3cuYXZhbGFyYS5jb20vY29udGVudC9kYW0vYXZhbGFyYS9wdWJsaWMvZG9jdW1lbnRzL3BkZi9BdmFsYXJhLVBhcnRuZXItUHJvZ3JhbS1HZW5lcmFsLVRlcm1zLWFuZC1Db25kaXRpb25zLnBkZicsXG4gICAgICAgICAgICB0ZXh0OiAnR2VuZXJhbCBUZXJtcyBhbmQgQ29uZGl0aW9ucycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBocmVmOiAnaHR0cHM6Ly93d3cuYXZhbGFyYS5jb20vY29udGVudC9kYW0vYXZhbGFyYS9wdWJsaWMvZG9jdW1lbnRzL3BkZi9SZWZlcnJhbC1QYXJ0bmVyLUFncmVlbWVudC0yMDE4LTExLTI2LnBkZicsXG4gICAgICAgICAgICB0ZXh0OiAnUGFydG5lciBBZ3JlZW1lbnQgKHdpdGggY29tbWlzc2lvbiknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHJlZjogJ2h0dHBzOi8vd3d3LmF2YWxhcmEuY29tL2NvbnRlbnQvZGFtL2F2YWxhcmEvcHVibGljL2RvY3VtZW50cy9wZGYvQnVzaW5lc3MtUGFydG5lci1BZ3JlZW1lbnQtMjAxOS0wMy0xMS5wZGYnLFxuICAgICAgICAgICAgdGV4dDogJ1BhcnRuZXIgQWdyZWVtZW50ICh3aXRob3V0IGNvbW1pc3Npb24pJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogJ2F2YWZvcm0tcGFydG5lcicsXG4gICAgbmFtZTogJycsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ1N1Ym1pdCcsXG4gICAgfSxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbmFtZTogJ1BBUlRORVInLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgIH0sXG4gICAgdGl0bGU6ICcnLFxuICB9LFxuICBQQVJUTkVSQUNQOiB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGZpZWxkczogW1xuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ05hbWUnLFxuICAgICAgICBpZDogJ2Z1bGxuYW1lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdOYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0NvbXBhbnknLFxuICAgICAgICBpZDogJ2NvbXBhbnknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0NvbXBhbnknLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQWRkcmVzcycsXG4gICAgICAgIGlkOiAnYWRkcmVzcycsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQWRkcmVzcycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDaXR5JyxcbiAgICAgICAgaWQ6ICdjaXR5JyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdjaXR5JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1N0YXRlJyxcbiAgICAgICAgaWQ6ICdzdGF0ZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnU3RhdGUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ291bnRyeScsXG4gICAgICAgIGlkOiAnY291bnRyeScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQ291bnRyeScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUG9zdGFsIGNvZGUnLFxuICAgICAgICBpZDogJ3ppcF9jb2RlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQb3N0YWwgY29kZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdCdXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIGlkOiAnZW1haWwnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0J1c2luZXNzIGVtYWlsJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdlbWFpbCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1Bob25lJyxcbiAgICAgICAgaWQ6ICdwaG9uZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGhvbmUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnV2Vic2l0ZScsXG4gICAgICAgIGlkOiAnd2Vic2l0ZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnV2Vic2l0ZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdEb2VzIHlvdXIgZmlybSB3YW50IHRvIHJlY2VpdmUgY29tbWlzc2lvbnM/JyxcbiAgICAgICAgaWQ6ICdwYXJ0bmVyX2NvbW1pc3Npb25fYWdyZWVtZW50JyxcbiAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgICAgICBkaXNwbGF5OiAnTm8nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6ICcxJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdZZXMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnRG9lcyB5b3VyIGZpcm0gd2FudCB0byByZWNlaXZlIGNvbW1pc3Npb25zPycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnSSBhY2NlcHQgdGhpcyBwYXJ0bmVyIGFncmVlbWVudCBpbiB3aG9sZS4nLFxuICAgICAgICBpZDogJ3Rlcm1zX29mX3NlcnZpY2UnLFxuICAgICAgICBsaW5rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhyZWY6ICdodHRwczovL3d3dy5hdmFsYXJhLmNvbS9wYXJ0bmVyZ2VuZXJhbHRlcm1zJyxcbiAgICAgICAgICAgIHRleHQ6ICdHZW5lcmFsIFRlcm1zIGFuZCBDb25kaXRpb25zJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhyZWY6ICdodHRwczovL3d3dy5hdmFsYXJhLmNvbS91cy9lbi9sZWdhbC9hY3AuaHRtbCcsXG4gICAgICAgICAgICB0ZXh0OiAnUGFydG5lciBBZ3JlZW1lbnQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnSSBhY2NlcHQgdGhpcyBwYXJ0bmVyIGFncmVlbWVudCBpbiB3aG9sZS4nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogJ2F2YWZvcm0tcGFydG5lci1hY3AnLFxuICAgIG5hbWU6ICcnLFxuICAgIHJlZGlyZWN0dXJsOiBudWxsLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdTdWJtaXQnLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdQQVJUTkVSQUNQJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgUEFSVE5FUkJIQVJBVDoge1xuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtdLFxuICAgIGZpZWxkc1JlcGxpY2F0ZTogJ1BBUlRORVJBQ1AnLCAvLyBSZXBsaWNhdGUgZmllbGRzIGZyb20gdGhpcyBvYmplY3RcbiAgICBmaWVsZHNPdmVyd3JpdGU6IFsgLy8gT3ZlcndyaXRlIGZpZWxkcyB0byBiZSBjYXB0dXJlZFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0kgYWNjZXB0IHRoaXMgcGFydG5lciBhZ3JlZW1lbnQgaW4gd2hvbGUuJyxcbiAgICAgICAgaWQ6ICd0ZXJtc19vZl9zZXJ2aWNlJyxcbiAgICAgICAgbGlua3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBocmVmOiAnaHR0cHM6Ly93d3cuYXZhbGFyYS5jb20vY29udGVudC9kYW0vYXZhbGFyYS9wdWJsaWMvZG9jdW1lbnRzL3BkZi9HU1QtUmVmZXJyYWwtQWdyZWVtZW50LTIwMTctMDYtMTYucGRmJyxcbiAgICAgICAgICAgIHRleHQ6ICdQYXJ0bmVyIEFncmVlbWVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICdhdmFmb3JtLXBhcnRuZXItYmhhcmF0JyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnUEFSVE5FUkJIQVJBVCcsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG4gIFBBUlRORVJERU1POiB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGZpZWxkczogW10sXG4gICAgZmllbGRzUmVwbGljYXRlOiAnUEFSVE5FUkFDUCcsIC8vIFJlcGxpY2F0ZSBmaWVsZHMgZnJvbSB0aGlzIG9iamVjdFxuICAgIGZpZWxkc1JlbW92ZTogWyd0ZXJtc19vZl9zZXJ2aWNlJ10sXG4gICAgaWQ6ICdhdmFmb3JtLXBhcnRuZXItbXNwJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnUEFSVE5FUk1TUCcsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG4gIFBBUlRORVJEU1A6IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXSxcbiAgICBmaWVsZHNSZXBsaWNhdGU6ICdQQVJUTkVSQUNQJywgLy8gUmVwbGljYXRlIGZpZWxkcyBmcm9tIHRoaXMgb2JqZWN0XG4gICAgZmllbGRzUmVtb3ZlOiBbJ3Rlcm1zX29mX3NlcnZpY2UnXSxcbiAgICBpZDogJ2F2YWZvcm0tcGFydG5lci1kc3AnLFxuICAgIG5hbWU6ICcnLFxuICAgIHJlZGlyZWN0dXJsOiBudWxsLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdTdWJtaXQnLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdQQVJUTkVSRFNQJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgUEFSVE5FUk1TUDoge1xuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtdLFxuICAgIGZpZWxkc1JlcGxpY2F0ZTogJ1BBUlRORVJBQ1AnLCAvLyBSZXBsaWNhdGUgZmllbGRzIGZyb20gdGhpcyBvYmplY3RcbiAgICBmaWVsZHNPdmVyd3JpdGU6IFt7XG4gICAgICBkaXNwbGF5VGV4dDogJ0kgYWNjZXB0IHRoaXMgcGFydG5lciBhZ3JlZW1lbnQgaW4gd2hvbGUuJyxcbiAgICAgIGlkOiAndGVybXNfb2Zfc2VydmljZScsXG4gICAgICBsaW5rczogW1xuICAgICAgICB7XG4gICAgICAgICAgaHJlZjogJ2h0dHBzOi8vd3d3LmF2YWxhcmEuY29tL3BhcnRuZXJnZW5lcmFsdGVybXMnLFxuICAgICAgICAgIHRleHQ6ICdHZW5lcmFsIFRlcm1zIGFuZCBDb25kaXRpb25zJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGhyZWY6ICdodHRwczovL3d3dy5hdmFsYXJhLmNvbS9yZWZlcnJhbHByb2dyYW0nLFxuICAgICAgICAgIHRleHQ6ICdQYXJ0bmVyIEFncmVlbWVudCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcGxhY2Vob2xkZXI6ICdJIGFjY2VwdCB0aGlzIHBhcnRuZXIgYWdyZWVtZW50IGluIHdob2xlLicsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgfV0sXG4gICAgaWQ6ICdhdmFmb3JtLXBhcnRuZXItbXNwJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnUEFSVE5FUk1TUCcsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG4gIFBBUlRORVJSRUZFUlJBTDoge1xuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQcm9zcGVjdCBOYW1lJyxcbiAgICAgICAgaWQ6ICdmdWxsbmFtZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUHJvc3BlY3QgTmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQcm9zcGVjdCBUaXRsZScsXG4gICAgICAgIGlkOiAnam9iVGl0bGUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1Byb3NwZWN0IFRpdGxlJyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQcm9zcGVjdCBFbWFpbCcsXG4gICAgICAgIGlkOiAnZW1haWwnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1Byb3NwZWN0IEVtYWlsJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdlbWFpbCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1Byb3NwZWN0IENvbXBhbnknLFxuICAgICAgICBpZDogJ2NvbXBhbnknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1Byb3NwZWN0IENvbXBhbnknLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUHJvc3BlY3QgUGhvbmUnLFxuICAgICAgICBpZDogJ3Bob25lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQcm9zcGVjdCBQaG9uZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQcm9zcGVjdCBJbnRlZ3JhdGlvbiBTb2Z0d2FyZScsXG4gICAgICAgIGlkOiAnY29ubmVjdG9yX2lkJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQcm9zcGVjdCBJbnRlZ3JhdGlvbiBTb2Z0d2FyZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdZb3VyIEJ1c2luZXNzIEVtYWlsJyxcbiAgICAgICAgaWQ6ICdwYXJ0bmVyX3JlcF9lbWFpbCcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnWW91ciBCdXNpbmVzcyBFbWFpbCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdOb3RlcycsXG4gICAgICAgIGlkOiAnbWFya2V0aW5nX2ZlZWRiYWNrX25vdGVzJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdOb3RlcycsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ3RleHRhcmVhJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogJ2F2YWZvcm0tcGFydG5lci1yZWZlcnJhbCcsXG4gICAgbmFtZTogJycsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ0dldCBzdGFydGVkJyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnUEFSVE5FUlJFRkVSUkFMJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgUEFSVE5FUlJFRkVSUkFMU0lNUExFOiB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGZpZWxkczogW10sXG4gICAgZmllbGRzT3ZlcndyaXRlOiBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ29tbWVudHMnLFxuICAgICAgICBpZDogJ21hcmtldGluZ19mZWVkYmFja19ub3RlcycsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQ29tbWVudHMnLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIHR5cGU6ICd0ZXh0YXJlYScsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZmllbGRzUmVwbGljYXRlOiAnUEFSVE5FUlJFRkVSUkFMJyxcbiAgICBmaWVsZHNSZW1vdmU6IFsnY29ubmVjdG9yX2lkJ10sXG4gICAgaWQ6ICdhdmFmb3JtLXBhcnRuZXItcmVmZXJyYWwtc2ltcGxlJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnR2V0IHN0YXJ0ZWQnLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdQQVJUTkVSUkVGRVJSQUxTSU1QTEUnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgIH0sXG4gICAgdGl0bGU6ICcnLFxuICB9LFxuICBQQVJUTkVSUkVGRVJSQUxBQ1RJVkU6IHtcbiAgICBjb25maWdzOiB7XG4gICAgICAuLi5GT1JNQ09ORklHUyxcbiAgICAgIHZpYnJhbmN5OiAnYWN0aXZlJyxcbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtdLFxuICAgIGZpZWxkc1JlcGxpY2F0ZTogJ1BBUlRORVJSRUZFUlJBTCcsXG4gICAgaWQ6ICdhdmFmb3JtLXBhcnRuZXItcmVmZXJyYWwtYWN0aXZlJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnR2V0IHN0YXJ0ZWQnLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdQQVJUTkVSUkVGRVJSQUxBQ1RJVkUnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgIH0sXG4gICAgdGl0bGU6ICcnLFxuICB9LFxuICBQQVJUTkVSUkVGRVJSQUxFTUVSR0lORzoge1xuICAgIGNvbmZpZ3M6IHtcbiAgICAgIC4uLkZPUk1DT05GSUdTLFxuICAgICAgdmlicmFuY3k6ICdFbWVyZ2luZycsXG4gICAgfSxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXSxcbiAgICBmaWVsZHNSZXBsaWNhdGU6ICdQQVJUTkVSUkVGRVJSQUwnLFxuICAgIGlkOiAnYXZhZm9ybS1wYXJ0bmVyLXJlZmVycmFsLWVtZXJnaW5nJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnR2V0IHN0YXJ0ZWQnLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdQQVJUTkVSUkVGRVJSQUxFTUVSR0lORycsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG4gIFBBUlRORVJSRUZFUlJBTEVTVEFCTElTSEVEOiB7XG4gICAgY29uZmlnczoge1xuICAgICAgLi4uRk9STUNPTkZJR1MsXG4gICAgICB2aWJyYW5jeTogJ2VzdGFibGlzaGVkJyxcbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtdLFxuICAgIGZpZWxkc1JlcGxpY2F0ZTogJ1BBUlRORVJSRUZFUlJBTCcsXG4gICAgaWQ6ICdhdmFmb3JtLXBhcnRuZXItcmVmZXJyYWwtZXN0YWJsaXNoZWQnLFxuICAgIG5hbWU6ICcnLFxuICAgIHJlZGlyZWN0dXJsOiBudWxsLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdHZXQgc3RhcnRlZCcsXG4gICAgfSxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbmFtZTogJ1BBUlRORVJSRUZFUlJBTEVTVEFCTElTSEVEJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgUEFSVE5FUlJFRkVSUkFMTEFVTkNIOiB7XG4gICAgY29uZmlnczoge1xuICAgICAgLi4uRk9STUNPTkZJR1MsXG4gICAgICB2aWJyYW5jeTogJ2xhdW5jaCcsXG4gICAgfSxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXSxcbiAgICBmaWVsZHNSZXBsaWNhdGU6ICdQQVJUTkVSUkVGRVJSQUwnLFxuICAgIGlkOiAnYXZhZm9ybS1wYXJ0bmVyLXJlZmVycmFsLWxhdW5jaCcsXG4gICAgbmFtZTogJycsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ0dldCBzdGFydGVkJyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnUEFSVE5FUlJFRkVSUkFMTEFVTkNIJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgUEFSVE5FUlNFTEVDVDoge1xuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtcbiAgICAgIFt7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnRmlyc3QgbmFtZScsXG4gICAgICAgIGlkOiAnZmlyc3ROYW1lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdGaXJzdCBuYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LCB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnTGFzdCBuYW1lJyxcbiAgICAgICAgaWQ6ICdsYXN0TmFtZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnTGFzdCBuYW1lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9XSwge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0VtYWlsJyxcbiAgICAgICAgaWQ6ICdlbWFpbCcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnZW1haWwnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDb21wYW55IG5hbWUnLFxuICAgICAgICBpZDogJ2NvbXBhbnknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0NvbXBhbnkgbmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIFt7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQWRkcmVzcycsXG4gICAgICAgIGlkOiAnYWRkcmVzcycsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQWRkcmVzcycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSwge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0NpdHknLFxuICAgICAgICBpZDogJ2NpdHknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ2NpdHknLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBdLFxuICAgICAgW3tcbiAgICAgICAgZGlzcGxheVRleHQ6ICdTdGF0ZScsXG4gICAgICAgIGlkOiAnc3RhdGUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1N0YXRlJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1Bvc3RhbCBjb2RlJyxcbiAgICAgICAgaWQ6ICd6aXBfY29kZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUG9zdGFsIGNvZGUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBdLCB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ291bnRyeScsXG4gICAgICAgIGlkOiAnY291bnRyeScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQ291bnRyeScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQaG9uZScsXG4gICAgICAgIGlkOiAncGhvbmUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1Bob25lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LCB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnV2Vic2l0ZScsXG4gICAgICAgIGlkOiAnd2Vic2l0ZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnV2Vic2l0ZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSwge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0RvZXMgeW91ciBmaXJtIHdhbnQgdG8gcmVjZWl2ZSBjb21taXNzaW9ucz8nLFxuICAgICAgICBpZDogJ3BhcnRuZXJfY29tbWlzc2lvbl9hZ3JlZW1lbnQnLFxuICAgICAgICBvcHRpb25zOiBbe1xuICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgICAgZGlzcGxheTogJ05vJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiAnMScsXG4gICAgICAgICAgZGlzcGxheTogJ1llcycsXG4gICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnRG9lcyB5b3VyIGZpcm0gd2FudCB0byByZWNlaXZlIGNvbW1pc3Npb25zPycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQYXJ0bmVyc2hpcCBUeXBlIChwbGVhc2Ugc2VsZWN0IG9uZSknLFxuICAgICAgICBpZDogJ29wcF9zdWJ0eXBlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2Ugc2VsZWN0IGFuIG9wdGlvbicsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0aXRsZTogJ1BsZWFzZSBzZWxlY3QgYW4gb3B0aW9uJyxcbiAgICAgICAgdHlwZTogJ2ZpZWxkc2V0JyxcbiAgICAgICAgZmllbGRTZXQ6IFt7XG4gICAgICAgICAgZGlzcGxheVRleHQ6ICdUZWNobm9sb2d5IHBhcnRuZXJzJyxcbiAgICAgICAgICBkaXNwbGF5VGV4dENsYXNzOiBbJ2Rlc2MtYm9sZCddLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnT3JnYW5pemF0aW9ucyB0aGF0IHdhbnQgdG8gYnVpbGQgYSByZXBlYXRhYmxlIGludGVncmF0aW9uIHdpdGggQXZhbGFyYSBzb2x1dGlvbnMuIEluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlcnMgYW5kIHB1Ymxpc2hlcnMsIElTVnMsIGFuZCBtYXJrZXRwbGFjZXMuJyxcbiAgICAgICAgICBpZDogJ3JhZGlvLXNlbGVjdCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgIHR5cGU6ICdyYWRpbycsXG4gICAgICAgICAgdmFsdWU6ICdEU1AnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheVRleHQ6ICdBY2NvdW50aW5nIGZpcm1zJyxcbiAgICAgICAgICBkaXNwbGF5VGV4dENsYXNzOiBbJ2Rlc2MtYm9sZCddLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRmlybXMgdGhhdCB3YW50IHRvIHJlZmVyIGFuZC9vciBpbXBsZW1lbnQgQXZhbGFyYSBzb2x1dGlvbnMuIEluY2x1ZGVzIENQQXMgYW5kIGJvb2trZWVwZXJzIGZyb20gZmlybXMgb2YgYWxsIHNpemVzLicsXG4gICAgICAgICAgaWQ6ICdyYWRpby1zZWxlY3QnLFxuICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICB0eXBlOiAncmFkaW8nLFxuICAgICAgICAgIHZhbHVlOiAnQUNQJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGRpc3BsYXlUZXh0OiAnU3lzdGVtcyBpbnRlZ3JhdG9ycycsXG4gICAgICAgICAgZGlzcGxheVRleHRDbGFzczogWydkZXNjLWJvbGQnXSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ09yZ2FuaXphdGlvbnMgd2hvIHdhbnQgdG8gcmVmZXIgYW5kL29yIGltcGxlbWVudCBBdmFsYXJhIHNvbHV0aW9ucy4gSW5jbHVkZXMgdmFsdWUtYWRkZWQgcmVzZWxsZXJzLCBzZXJ2aWNlcyBmaXJtcywgZWNvbW1lcmNlIGFnZW5jaWVzLicsXG4gICAgICAgICAgaWQ6ICdyYWRpby1zZWxlY3QnLFxuICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICB0eXBlOiAncmFkaW8nLFxuICAgICAgICAgIHZhbHVlOiAnTVNQJyxcbiAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogJ2F2YWZvcm0tcGFydG5lci1zZWxlY3QnLFxuICAgIG5hbWU6ICcnLFxuICAgIHJlZGlyZWN0dXJsOiBudWxsLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdTdWJtaXQnLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdQQVJUTkVSU0VMRUNUJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgUEFSVE5FUlNFTEVDVFRFU1Q6IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBkaXNwbGF5VGV4dDogJ0ZpcnN0IG5hbWUnLFxuICAgICAgICAgIGlkOiAnZmlyc3ROYW1lJyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ0ZpcnN0IG5hbWUnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheVRleHQ6ICdMYXN0IG5hbWUnLFxuICAgICAgICAgIGlkOiAnbGFzdE5hbWUnLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnTGFzdCBuYW1lJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnRW1haWwnLFxuICAgICAgICBpZDogJ2VtYWlsJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdlbWFpbCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDb21wYW55IG5hbWUnLFxuICAgICAgICBpZDogJ2NvbXBhbnknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0NvbXBhbnkgbmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIFt7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQWRkcmVzcycsXG4gICAgICAgIGlkOiAnYWRkcmVzcycsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQWRkcmVzcycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDaXR5JyxcbiAgICAgICAgaWQ6ICdjaXR5JyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdjaXR5JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9XSxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGRpc3BsYXlUZXh0OiAnU3RhdGUnLFxuICAgICAgICAgIGlkOiAnc3RhdGUnLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnU3RhdGUnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheVRleHQ6ICdQb3N0YWwgY29kZScsXG4gICAgICAgICAgaWQ6ICd6aXBfY29kZScsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdQb3N0YWwgY29kZScsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0NvdW50cnknLFxuICAgICAgICBpZDogJ2NvdW50cnknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0NvdW50cnknLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1Bob25lJyxcbiAgICAgICAgaWQ6ICdwaG9uZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGhvbmUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnV2Vic2l0ZScsXG4gICAgICAgIGlkOiAnd2Vic2l0ZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnV2Vic2l0ZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdEb2VzIHlvdXIgZmlybSB3YW50IHRvIHJlY2VpdmUgY29tbWlzc2lvbnM/JyxcbiAgICAgICAgaWQ6ICdwYXJ0bmVyX2NvbW1pc3Npb25fYWdyZWVtZW50JyxcbiAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgICAgICBkaXNwbGF5OiAnTm8nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6ICcxJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdZZXMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnRG9lcyB5b3VyIGZpcm0gd2FudCB0byByZWNlaXZlIGNvbW1pc3Npb25zPycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUGFydG5lcnNoaXAgVHlwZSAocGxlYXNlIHNlbGVjdCBvbmUpJyxcbiAgICAgICAgaGFzRHluYW1pY0ZpZWxkOiB0cnVlLFxuICAgICAgICBpZDogJ29wcF9zdWJ0eXBlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2Ugc2VsZWN0IGFuIG9wdGlvbicsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0aXRsZTogJ1BsZWFzZSBzZWxlY3QgYW4gb3B0aW9uJyxcbiAgICAgICAgdHlwZTogJ2ZpZWxkc2V0JyxcbiAgICAgICAgZmllbGRTZXQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5VGV4dDogJ1RlY2hub2xvZ3kgcGFydG5lcnMnLFxuICAgICAgICAgICAgZGlzcGxheVRleHRDbGFzczogWydkZXNjLWJvbGQnXSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVycyBhbmQgcHVibGlzaGVycywgSVNWcywgYW5kIG1hcmtldHBsYWNlcy4nLFxuICAgICAgICAgICAgaWQ6ICdyYWRpby1zZWxlY3QnLCAvLyBUaGlzIGlzIG9ubHkgYSBwbGFjZSBob2xkZXIuIFRoaXMgZ2V0cyB0aGUgaWQgZnJvbSB0aGUgcGFyZW50IGZpZWxkc2V0XG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiAncmFkaW8nLFxuICAgICAgICAgICAgdmFsdWU6ICdEU1AnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheVRleHQ6ICdBY2NvdW50aW5nIGZpcm1zJyxcbiAgICAgICAgICAgIGRpc3BsYXlUZXh0Q2xhc3M6IFsnZGVzYy1ib2xkJ10sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0luY2x1ZGVzIENQQXMgYW5kIGJvb2trZWVwZXJzIGZyb20gZmlybXMgb2YgYWxsIHNpemVzLicsXG4gICAgICAgICAgICBpZDogJ3JhZGlvLXNlbGVjdCcsIC8vIFRoaXMgaXMgb25seSBhIHBsYWNlIGhvbGRlci4gVGhpcyBnZXRzIHRoZSBpZCBmcm9tIHRoZSBwYXJlbnQgZmllbGRzZXRcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6ICdyYWRpbycsXG4gICAgICAgICAgICB2YWx1ZTogJ0FDUCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5VGV4dDogJ1N5c3RlbXMgaW50ZWdyYXRvcnMnLFxuICAgICAgICAgICAgZGlzcGxheVRleHRDbGFzczogWydkZXNjLWJvbGQnXSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSW5jbHVkZXMgdmFsdWUtYWRkZWQgcmVzZWxsZXJzLCBzZXJ2aWNlcyBmaXJtcywgZWNvbW1lcmNlIGNvbXBhbmllcy4nLFxuICAgICAgICAgICAgaWQ6ICdyYWRpby1zZWxlY3QnLCAvLyBUaGlzIGlzIG9ubHkgYSBwbGFjZSBob2xkZXIuIFRoaXMgZ2V0cyB0aGUgaWQgZnJvbSB0aGUgcGFyZW50IGZpZWxkc2V0XG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiAncmFkaW8nLFxuICAgICAgICAgICAgdmFsdWU6ICdNU1AnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgZHluYW1pY0ZpZWxkczoge1xuICAgICAgb3BwX3N1YnR5cGU6IHtcbiAgICAgICAgQUNQOiBbe1xuICAgICAgICAgIGRpc3BsYXlUZXh0OiAnSSBhY2NlcHQgdGhpcyBwYXJ0bmVyIGFncmVlbWVudCBpbiB3aG9sZS4nLFxuICAgICAgICAgIGlkOiAndGVybXNfb2Zfc2VydmljZScsXG4gICAgICAgICAgbGlua3M6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaHJlZjogJ2h0dHBzOi8vd3d3LmF2YWxhcmEuY29tL3BhcnRuZXJnZW5lcmFsdGVybXMnLFxuICAgICAgICAgICAgICB0ZXh0OiAnR2VuZXJhbCBUZXJtcyBhbmQgQ29uZGl0aW9ucycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBocmVmOiAnaHR0cHM6Ly93d3cuYXZhbGFyYS5jb20vdXMvZW4vbGVnYWwvYWNwLmh0bWwnLFxuICAgICAgICAgICAgICB0ZXh0OiAnUGFydG5lciBBZ3JlZW1lbnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnSSBhY2NlcHQgdGhpcyBwYXJ0bmVyIGFncmVlbWVudCBpbiB3aG9sZS4nLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgIH1dLFxuICAgICAgICBNU1A6IFt7XG4gICAgICAgICAgZGlzcGxheVRleHQ6ICdJIGFjY2VwdCB0aGlzIHBhcnRuZXIgYWdyZWVtZW50IGluIHdob2xlLicsXG4gICAgICAgICAgaWQ6ICd0ZXJtc19vZl9zZXJ2aWNlJyxcbiAgICAgICAgICBsaW5rczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBocmVmOiAnaHR0cHM6Ly93d3cuYXZhbGFyYS5jb20vcGFydG5lcmdlbmVyYWx0ZXJtcycsXG4gICAgICAgICAgICAgIHRleHQ6ICdHZW5lcmFsIFRlcm1zIGFuZCBDb25kaXRpb25zJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGhyZWY6ICdodHRwczovL3d3dy5hdmFsYXJhLmNvbS9yZWZlcnJhbHByb2dyYW0nLFxuICAgICAgICAgICAgICB0ZXh0OiAnUGFydG5lciBBZ3JlZW1lbnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnSSBhY2NlcHQgdGhpcyBwYXJ0bmVyIGFncmVlbWVudCBpbiB3aG9sZS4nLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgIH1dLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGlkOiAnYXZhZm9ybS1wYXJ0bmVyLXNlbGVjdC10ZXN0JyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnUEFSVE5FUkFDUCcsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG4gIFBBUlRORVJTRUxFQ1RURVNUQ0hFQ0tCT1g6IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBkaXNwbGF5VGV4dDogJ0ZpcnN0IG5hbWUnLFxuICAgICAgICAgIGlkOiAnZmlyc3ROYW1lJyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ0ZpcnN0IG5hbWUnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheVRleHQ6ICdMYXN0IG5hbWUnLFxuICAgICAgICAgIGlkOiAnbGFzdE5hbWUnLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnTGFzdCBuYW1lJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnRW1haWwnLFxuICAgICAgICBpZDogJ2VtYWlsJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdlbWFpbCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDb21wYW55IG5hbWUnLFxuICAgICAgICBpZDogJ2NvbXBhbnknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0NvbXBhbnkgbmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQaG9uZScsXG4gICAgICAgIGlkOiAncGhvbmUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1Bob25lJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0RvZXMgeW91ciBmaXJtIHdhbnQgdG8gcmVjZWl2ZSBjb21taXNzaW9ucz8nLFxuICAgICAgICBoYXNEeW5hbWljRmllbGQ6IHRydWUsXG4gICAgICAgIGlkOiAncGFydG5lcl9jb21taXNzaW9uX2FncmVlbWVudCcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnRG9lcyB5b3VyIGZpcm0gd2FudCB0byByZWNlaXZlIGNvbW1pc3Npb25zPycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogJ3llcycsXG4gICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1BhcnRuZXJzaGlwIFR5cGUgKHBsZWFzZSBzZWxlY3Qgb25lKScsXG4gICAgICAgIGhhc0R5bmFtaWNGaWVsZDogdHJ1ZSxcbiAgICAgICAgaWQ6ICdvcHBfc3VidHlwZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIHNlbGVjdCBhbiBvcHRpb24nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdGl0bGU6ICdQbGVhc2Ugc2VsZWN0IGFuIG9wdGlvbicsXG4gICAgICAgIHR5cGU6ICdmaWVsZHNldCcsXG4gICAgICAgIGZpZWxkU2V0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheVRleHQ6ICdUZWNobm9sb2d5IHBhcnRuZXJzJyxcbiAgICAgICAgICAgIGRpc3BsYXlUZXh0Q2xhc3M6IFsnZGVzYy1ib2xkJ10sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0luY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlcnMgYW5kIHB1Ymxpc2hlcnMsIElTVnMsIGFuZCBtYXJrZXRwbGFjZXMuJyxcbiAgICAgICAgICAgIGlkOiAncmFkaW8tc2VsZWN0JywgLy8gVGhpcyBpcyBvbmx5IGEgcGxhY2UgaG9sZGVyLiBUaGlzIGdldHMgdGhlIGlkIGZyb20gdGhlIHBhcmVudCBmaWVsZHNldFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogJ3JhZGlvJyxcbiAgICAgICAgICAgIHZhbHVlOiAnRFNQJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlUZXh0OiAnQWNjb3VudGluZyBmaXJtcycsXG4gICAgICAgICAgICBkaXNwbGF5VGV4dENsYXNzOiBbJ2Rlc2MtYm9sZCddLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdJbmNsdWRlcyBDUEFzIGFuZCBib29ra2VlcGVycyBmcm9tIGZpcm1zIG9mIGFsbCBzaXplcy4nLFxuICAgICAgICAgICAgaWQ6ICdyYWRpby1zZWxlY3QnLCAvLyBUaGlzIGlzIG9ubHkgYSBwbGFjZSBob2xkZXIuIFRoaXMgZ2V0cyB0aGUgaWQgZnJvbSB0aGUgcGFyZW50IGZpZWxkc2V0XG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiAncmFkaW8nLFxuICAgICAgICAgICAgdmFsdWU6ICdBQ1AnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheVRleHQ6ICdTeXN0ZW1zIGludGVncmF0b3JzJyxcbiAgICAgICAgICAgIGRpc3BsYXlUZXh0Q2xhc3M6IFsnZGVzYy1ib2xkJ10sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0luY2x1ZGVzIHZhbHVlLWFkZGVkIHJlc2VsbGVycywgc2VydmljZXMgZmlybXMsIGVjb21tZXJjZSBjb21wYW5pZXMuJyxcbiAgICAgICAgICAgIGlkOiAncmFkaW8tc2VsZWN0JywgLy8gVGhpcyBpcyBvbmx5IGEgcGxhY2UgaG9sZGVyLiBUaGlzIGdldHMgdGhlIGlkIGZyb20gdGhlIHBhcmVudCBmaWVsZHNldFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogJ3JhZGlvJyxcbiAgICAgICAgICAgIHZhbHVlOiAnTVNQJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGR5bmFtaWNGaWVsZHM6IHtcbiAgICAgIG9wcF9zdWJ0eXBlOiB7XG4gICAgICAgIEFDUDogW3tcbiAgICAgICAgICBkaXNwbGF5VGV4dDogJ0kgYWNjZXB0IHRoaXMgcGFydG5lciBhZ3JlZW1lbnQgaW4gd2hvbGUuJyxcbiAgICAgICAgICBpZDogJ3Rlcm1zX29mX3NlcnZpY2UnLFxuICAgICAgICAgIGxpbmtzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGhyZWY6ICdodHRwczovL3d3dy5hdmFsYXJhLmNvbS9wYXJ0bmVyZ2VuZXJhbHRlcm1zJyxcbiAgICAgICAgICAgICAgdGV4dDogJ0dlbmVyYWwgVGVybXMgYW5kIENvbmRpdGlvbnMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaHJlZjogJ2h0dHBzOi8vd3d3LmF2YWxhcmEuY29tL3VzL2VuL2xlZ2FsL2FjcC5odG1sJyxcbiAgICAgICAgICAgICAgdGV4dDogJ1BhcnRuZXIgQWdyZWVtZW50JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ0kgYWNjZXB0IHRoaXMgcGFydG5lciBhZ3JlZW1lbnQgaW4gd2hvbGUuJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgICB9XSxcbiAgICAgICAgTVNQOiBbe1xuICAgICAgICAgIGRpc3BsYXlUZXh0OiAnSSBhY2NlcHQgdGhpcyBwYXJ0bmVyIGFncmVlbWVudCBpbiB3aG9sZS4nLFxuICAgICAgICAgIGlkOiAndGVybXNfb2Zfc2VydmljZScsXG4gICAgICAgICAgbGlua3M6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaHJlZjogJ2h0dHBzOi8vd3d3LmF2YWxhcmEuY29tL3BhcnRuZXJnZW5lcmFsdGVybXMnLFxuICAgICAgICAgICAgICB0ZXh0OiAnR2VuZXJhbCBUZXJtcyBhbmQgQ29uZGl0aW9ucycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBocmVmOiAnaHR0cHM6Ly93d3cuYXZhbGFyYS5jb20vcmVmZXJyYWxwcm9ncmFtJyxcbiAgICAgICAgICAgICAgdGV4dDogJ1BhcnRuZXIgQWdyZWVtZW50JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ0kgYWNjZXB0IHRoaXMgcGFydG5lciBhZ3JlZW1lbnQgaW4gd2hvbGUuJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgICB9XSxcbiAgICAgIH0sXG4gICAgICBwYXJ0bmVyX2NvbW1pc3Npb25fYWdyZWVtZW50OiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBxdW90ZS1wcm9wc1xuICAgICAgICB5ZXM6IFt7XG4gICAgICAgICAgZGlzcGxheVRleHQ6ICdZb3Ugc2VsZWN0ZWQgdGhhdCB5b3Ugd291bGQgbGlrZSBjb21taXNzaW9uJyxcbiAgICAgICAgICBpZDogJ3Rlcm1zX2FuZF9hZ2dyZW1lbnQnLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnSSBhY2NlcHQgdGhpcyBwYXJ0bmVyIGFncmVlbWVudCBpbiB3aG9sZS4nLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgIH1dLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGlkOiAnYXZhZm9ybS1wYXJ0bmVyLXNlbGVjdC10ZXN0JyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnUEFSVE5FUkFDUCcsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG4gIFFVRVNUSU9OU1dJVEhPVVRDT01QQU5ZOiB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGZpZWxkczogW10sXG4gICAgZmllbGRzUmVwbGljYXRlOiAnTUxUQ09OVEFDVFVTJyxcbiAgICBpZDogJ2F2YWZvcm0tcXVlc3Rpb25zLXdpdGhvdXQtY29tcGFueScsXG4gICAgbmFtZTogJycsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ1N1Ym1pdCcsXG4gICAgfSxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbmFtZTogJ1FVRVNUSU9OU1dJVEhPVVRDT01QQU5ZJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgVkFURUJBWVRFU1Q6IHtcbiAgICBjbGFzc2VzOiBbXSxcbiAgICBkZXNjcmlwdGlvbjogbnVsbCxcbiAgICBmaWVsZHM6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdOYW1lJyxcbiAgICAgICAgaWQ6ICdmdWxsbmFtZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnTmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdCdXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIGlkOiAnZW1haWwnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0J1c2luZXNzIGVtYWlsJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdlbWFpbCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0NvbXBhbnknLFxuICAgICAgICBpZDogJ2NvbXBhbnknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0NvbXBhbnknLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUGhvbmUnLFxuICAgICAgICBpZDogJ3Bob25lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdQaG9uZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdQcmltYXJ5IGJ1c2luZXNzIGFkZHJlc3MnLFxuICAgICAgICBpZDogJ0NfQWRkcmVzczEnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1ByaW1hcnkgYnVzaW5lc3MgYWRkcmVzcycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDaXR5JyxcbiAgICAgICAgaWQ6ICdDX0NpdHknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0NpdHknLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnU3RhdGUnLFxuICAgICAgICBpZDogJ0NfU3RhdGVfUHJvdicsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnU3RhdGUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ291bnRyeScsXG4gICAgICAgIGlkOiAnY291bnRyeScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQ291bnRyeScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnUG9zdGFsIGNvZGUnLFxuICAgICAgICBpZDogJ0NfWmlwX1Bvc3RhbCcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUG9zdGFsIGNvZGUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnRG8geW91IGFscmVhZHkgaGF2ZSBhbnkgVkFUIHJlZ2lzdHJhdGlvbnM/JyxcbiAgICAgICAgaWQ6ICdDX3ZhdF9xdWVzdGlvbicsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnRG8geW91IGFscmVhZHkgaGF2ZSBhbnkgVkFUIHJlZ2lzdHJhdGlvbnM/JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ1llcycsXG4gICAgICAgICAgICB2YWx1ZTogJ1llcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnTm8nLFxuICAgICAgICAgICAgdmFsdWU6ICdObycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnSSBkb25cXCd0IGtub3cnLFxuICAgICAgICAgICAgdmFsdWU6ICdJIGRvblxcJ3Qga25vdycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhhc0R5bmFtaWNGaWVsZDogZmFsc2UsXG4gICAgICAgIGRpc3BsYXlUZXh0OiAnRm9yIHdoaWNoIGp1cmlzZGljdGlvbnMgZG8geW91IHJlcXVpcmUgVkFUIHJlZ2lzdHJhdGlvbiBhbmQgcmV0dXJuIHNlcnZpY2VzPycsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnRm9yIHdoaWNoIGp1cmlzZGljdGlvbnMgZG8geW91IHJlcXVpcmUgVkFUIHJlZ2lzdHJhdGlvbiBhbmQgcmV0dXJuIHNlcnZpY2VzPycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnbXVsdGktc2VsZWN0JyxcbiAgICAgICAgaWQ6ICdtYXJrZXRpbmdfZmVlZGJhY2tfbm90ZXMnLFxuICAgICAgICBtaW5oZWlnaHQ6ICcyOTAnLFxuICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ09TUycsXG4gICAgICAgICAgICB2YWx1ZTogJ09TUycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnaU9TUycsXG4gICAgICAgICAgICB2YWx1ZTogJ2lPU1MnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ0dlcm1hbnknLFxuICAgICAgICAgICAgdmFsdWU6ICdHZXJtYW55JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdGcmFuY2UnLFxuICAgICAgICAgICAgdmFsdWU6ICdGcmFuY2UnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ1NwYWluJyxcbiAgICAgICAgICAgIHZhbHVlOiAnU3BhaW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ0l0YWx5JyxcbiAgICAgICAgICAgIHZhbHVlOiAnSXRhbHknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ1VuaXRlZCBLaW5nZG9tJyxcbiAgICAgICAgICAgIHZhbHVlOiAnVW5pdGVkIEtpbmdkb20nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ090aGVyIElcXCdtIG5vdCBzdXJlIC0gY29udGFjdCBtZSB0byBkaXNjdXNzJyxcbiAgICAgICAgICAgIHZhbHVlOiAnT3RoZXIgSVxcJ20gbm90IHN1cmUgLSBjb250YWN0IG1lIHRvIGRpc2N1c3MnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0FyZSB5b3UgYSBsaXN0ZWQgYnVzaW5lc3Mgb3Igc29sZSB0cmFkZXI/JyxcbiAgICAgICAgaWQ6ICdDX0VNRUFfQ29tcGFueV9Qcm9maWxlMScsXG4gICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogJ0xpc3RlZCBCdXNpbmVzcycsXG4gICAgICAgICAgICBkaXNwbGF5OiAnTGlzdGVkIEJ1c2luZXNzJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAnU29sZSBUcmFkZXInLFxuICAgICAgICAgICAgZGlzcGxheTogJ1NvbGUgVHJhZGVyJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAnSSBkb25cXCd0IGtub3cnLFxuICAgICAgICAgICAgZGlzcGxheTogJ0kgZG9uXFwndCBrbm93JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0FyZSB5b3UgYSBsaXN0ZWQgYnVzaW5lc3Mgb3Igc29sZSB0cmFkZXI/JyxcbiAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGlkOiAnZGVtby1iYXNpYy1zYWxlcy1yZXF1aXJlZC10ZXN0aW5nLWZvcm0nLFxuICAgIG5hbWU6ICdBdmFmb3JtIGJhc2ljIHNhbGVzIHJlcXVpcmVkIHRlbXBsYXRlIHRlc3QnLFxuICAgIHJlZGlyZWN0dXJsOiBudWxsLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdTdWJtaXQnLFxuICAgIH0sXG4gICAgdGhhbmt5b3U6IHtcbiAgICAgIG1lc3NhZ2U6ICdUaGFuayB5b3UgZm9yIHlvdXIgc3VibWlzc2lvbi4nLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdBVkFGT1JNQkFTSUNTQUxFU1JFUVVJUkVEVEVTVElORycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0F2YWZvcm0gYmFzaWMgc2FsZXMgcmVxdWlyZWQgdGVzdGluZyBkZW1vJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnQXZhZm9ybSBiYXNpYyBzYWxlcyByZXF1aXJlZCB0ZXN0aW5nJyxcbiAgICB9LFxuICAgIHRoZW1lOiB7XG4gICAgICBsYXlvdXQ6IG51bGwsXG4gICAgICBzaG93TG9hZGVyOiBmYWxzZSxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgVkFUTElWRToge1xuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdOYW1lJyxcbiAgICAgICAgaWQ6ICdmdWxsbmFtZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnTmFtZScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdCdXNpbmVzcyBlbWFpbCcsXG4gICAgICAgIGlkOiAnZW1haWwnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0J1c2luZXNzIGVtYWlsJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdlbWFpbCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ1Bob25lJyxcbiAgICAgICAgaWQ6ICdwaG9uZScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUGhvbmUnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ29tcGFueScsXG4gICAgICAgIGlkOiAnY29tcGFueScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQ29tcGFueScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDb3VudHJ5IG9mIGVzdGFibGlzaG1lbnQnLFxuICAgICAgICBpZDogJ2NvdW50cnlfb2ZfZXN0YWJsaXNobWVudCcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQ291bnRyeSBvZiBlc3RhYmxpc2htZW50JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGlkOiAnYXZhZm9ybS12YXRsaXZlJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU2VuZCBlbnF1aXJ5JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnVkFUTElWRScsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG4gIFZBVExJVkVXSVRIQ09NTUVOVFM6IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZmllbGRzOiBbXSxcbiAgICBmaWVsZHNSZXBsaWNhdGU6ICdWQVRMSVZFJyxcbiAgICBmaWVsZHNBcHBlbmQ6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDb21tZW50cycsXG4gICAgICAgIGlkOiAnbWFya2V0aW5nX2ZlZWRiYWNrX25vdGVzJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdDb21tZW50cycsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ3RleHRhcmVhJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogJ2F2YWZvcm0tdmF0bGl2ZScsXG4gICAgbmFtZTogJycsXG4gICAgcmVkaXJlY3R1cmw6IG51bGwsXG4gICAgc3VibWl0OiB7XG4gICAgICBkaXNwbGF5VGV4dDogJ1NlbmQgZW5xdWlyeScsXG4gICAgfSxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbmFtZTogJ1ZBVExJVkUnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgIH0sXG4gICAgdGl0bGU6ICcnLFxuICB9LFxuICBWQVRMSVZFQ09OVEFDVFVTOiB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGZpZWxkczogW10sXG4gICAgZmllbGRzUmVwbGljYXRlOiAnVkFUTElWRScsXG4gICAgZmllbGRzQXBwZW5kOiBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnQ29tbWVudHMnLFxuICAgICAgICBpZDogJ21hcmtldGluZ19mZWVkYmFja19ub3RlcycsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQ29tbWVudHMnLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIHR5cGU6ICd0ZXh0YXJlYScsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICdhdmFmb3JtLXZhdGxpdmUnLFxuICAgIG5hbWU6ICcnLFxuICAgIHJlZGlyZWN0dXJsOiBudWxsLFxuICAgIHN1Ym1pdDoge1xuICAgICAgZGlzcGxheVRleHQ6ICdTZW5kIGVucXVpcnknLFxuICAgIH0sXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIG5hbWU6ICdWQVRMSVZFJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICB9LFxuICAgIHRpdGxlOiAnJyxcbiAgfSxcbiAgVkFUTElWRUNPTlRBQ1RVU1JFR0lTVFJBVElPTjoge1xuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBmaWVsZHM6IFtdLFxuICAgIGZpZWxkc1JlcGxpY2F0ZTogJ1ZBVExJVkUnLFxuICAgIGZpZWxkc0FwcGVuZDogW1xuICAgICAge1xuICAgICAgICBkaXNwbGF5VGV4dDogJ0NvbW1lbnRzJyxcbiAgICAgICAgaWQ6ICdtYXJrZXRpbmdfZmVlZGJhY2tfbm90ZXMnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0NvbW1lbnRzJyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdBcmUgeW91IGxvb2tpbmcgZm9yIFZBVCByZWdpc3RyYXRpb24gb3IgcmV0dXJucz8nLFxuICAgICAgICBpZDogJ3JlZ2lzdHJhdGlvbnNfcmV0dXJucycsXG4gICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnUmVnaXN0cmF0aW9ucycsXG4gICAgICAgICAgICB2YWx1ZTogJ3JlZ2lzdHJhdGlvbnMnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheTogJ1JldHVybnMnLFxuICAgICAgICAgICAgdmFsdWU6ICdyZXR1cm5zJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ0FyZSB5b3UgbG9va2luZyBmb3IgVkFUIHJlZ2lzdHJhdGlvbiBvciByZXR1cm5zPycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlUZXh0OiAnV2hpY2ggY291bnRyaWVzIGFyZSB5b3UgaW50ZXJlc3RlZCBpbj8nLFxuICAgICAgICBpZDogJ2NvdW50cnlfaW50ZXJlc3QnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1doaWNoIGNvdW50cmllcyBhcmUgeW91IGludGVyZXN0ZWQgaW4/JyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdEbyB5b3UgaGF2ZSBhIFZBVCBxdWVzdGlvbj8nLFxuICAgICAgICBpZDogJ3ZhdF9xdWVzdGlvbicsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnRG8geW91IGhhdmUgYSBWQVQgcXVlc3Rpb24/JyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGlkOiAnYXZhZm9ybS12YXRsaXZlJyxcbiAgICBuYW1lOiAnJyxcbiAgICByZWRpcmVjdHVybDogbnVsbCxcbiAgICBzdWJtaXQ6IHtcbiAgICAgIGRpc3BsYXlUZXh0OiAnU2VuZCBlbnF1aXJ5JyxcbiAgICB9LFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBuYW1lOiAnVkFUTElWRScsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgfSxcbiAgICB0aXRsZTogJycsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgSU5EVVNUUllfRklFTEQ6IFNpbmdsZUpzb25GaWVsZCA9IHtcbiAgZGlzcGxheVRleHQ6ICdJbmR1c3RyeScsXG4gIGlkOiAnaW5kdXN0cnknLFxuICBwbGFjZWhvbGRlcjogJ0luZHVzdHJ5JyxcbiAgcmVxdWlyZWQ6IHRydWUsXG4gIHR5cGU6ICdzZWxlY3QnLFxuICBvcHRpb25zOiBbXG4gICAge1xuICAgICAgZGlzcGxheTogJ0FjY291bnRpbmcnLFxuICAgICAgdmFsdWU6ICdBY2NvdW50aW5nJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRpc3BsYXk6ICdCZXZlcmFnZSAmIEFsY29ob2wnLFxuICAgICAgdmFsdWU6ICdCZXZlcmFnZSBBbGNvaG9sJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRpc3BsYXk6ICdDb21tdW5pY2F0aW9ucycsXG4gICAgICB2YWx1ZTogJ0NvbW11bmljYXRpb25zJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRpc3BsYXk6ICdDb25zdHJ1Y3Rpb24nLFxuICAgICAgdmFsdWU6ICdDb25zdHJ1Y3Rpb24nLFxuICAgIH0sXG4gICAge1xuICAgICAgZGlzcGxheTogJ0VuZXJneScsXG4gICAgICB2YWx1ZTogJ0VuZXJneScsXG4gICAgfSxcbiAgICB7XG4gICAgICBkaXNwbGF5OiAnTG9kZ2luZyAmIEhvc3BpdGFsaXR5JyxcbiAgICAgIHZhbHVlOiAnTG9kZ2luZyAmIEhvc3BpdGFsaXR5JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRpc3BsYXk6ICdNYW51ZmFjdHVyaW5nJyxcbiAgICAgIHZhbHVlOiAnTWFudWZhY3R1cmluZycsXG4gICAgfSxcbiAgICB7XG4gICAgICBkaXNwbGF5OiAnUmVzdGF1cmFudCBJbmR1c3RyeScsXG4gICAgICB2YWx1ZTogJ0FjY29tbW9kYXRpb24gJiBGb29kIFNlcnZpY2VzJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRpc3BsYXk6ICdSZXRhaWwnLFxuICAgICAgdmFsdWU6ICdSZXRhaWwnLFxuICAgIH0sXG4gICAge1xuICAgICAgZGlzcGxheTogJ1NvZnR3YXJlJyxcbiAgICAgIHZhbHVlOiAnU29mdHdhcmUnLFxuICAgIH0sXG4gICAge1xuICAgICAgZGlzcGxheTogJ1dob2xlc2FsZSAmIERpc3RyaWJ1dGlvbicsXG4gICAgICB2YWx1ZTogJ1dob2xlc2FsZSAmIERpc3RyaWJ1dGlvbicsXG4gICAgfSxcbiAgICB7XG4gICAgICBkaXNwbGF5OiAnT3RoZXInLFxuICAgICAgdmFsdWU6ICdPdGhlcicsXG4gICAgfSxcbiAgXSxcbn07XG5leHBvcnQgZGVmYXVsdCBBVkFGT1JNUztcbiIsIi8vIEBmbG93IHN0cmljdFxuZXhwb3J0IHR5cGUgRWxvcXVhUGF5bG9hZCA9IHtcbiAgW2tleTogc3RyaW5nXToge1xuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgdmFsdWU6IHN0cmluZyB8IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gIH0sXG59O1xuXG5jb25zdCBlbG9xdWFQYXlsb2FkOiBFbG9xdWFQYXlsb2FkID0ge1xuICBhZGRpdGlvbmFsX2luZm9ybWF0aW9uOiB7XG4gICAgbmFtZTogJ0NfQWRkaXRpb25hbF9JbmZvcm1hdGlvbjEyJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGFkZHJlc3M6IHtcbiAgICBuYW1lOiAnQ19BZGRyZXNzMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBhZG9iZV92aXNpdG9yX2lkOiB7XG4gICAgbmFtZTogJ0NfQWRvYmVfVmlzaXRvcl9JRDEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgYXBwb2ludG1lbnRfZGF0ZXRpbWU6IHtcbiAgICBuYW1lOiAnQ19BcHBvaW50bWVudF9EYXRlX1RpbWUxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGF2YWZvcm1fdGVtcGxhdGU6IHtcbiAgICBuYW1lOiAnYXZhZm9ybV90ZW1wbGF0ZScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBiMmI6IHtcbiAgICBuYW1lOiAnQ19CMkIxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGIyYzoge1xuICAgIG5hbWU6ICdDX0IyQzEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgY2FtcGFpZ25faWQ6IHtcbiAgICBuYW1lOiAnQ19TRkRDTGFzdENhbXBhaWduSUQnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgY2l0eToge1xuICAgIG5hbWU6ICdDX0NpdHknLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgY29tY19ob3Vyc19zcGVudDoge1xuICAgIG5hbWU6ICdDX2hvdXJzX3NwZW50JyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGNvbWNfdGF4YWJsZV9yZXZlbnVlOiB7XG4gICAgbmFtZTogJ0NfdGF4YWJsZV9yZXZlbnVlJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGNvbWNfbGFib3JfY29zdHM6IHtcbiAgICBuYW1lOiAnQ19sYWJvcl9jb3N0cycsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBjb21jX2Jhc2VfdGF4X2xpYWJpbGl0eToge1xuICAgIG5hbWU6ICdDX2Jhc2VfdGF4X2xpYWJpbGl0eScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBjb21jX2ludGVyZXN0X3BlbmFsdHk6IHtcbiAgICBuYW1lOiAnQ19pbnRlcmVzdF9wZW5hbHR5JyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGNvbWNfcG90ZW50aWFsX3RheF9saWFiaWxpdHk6IHtcbiAgICBuYW1lOiAnQ19wb3RlbnRpYWxfdGF4X2xpYWJpbGl0eScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBjb21jX3RvdGFsX2Nvc3Q6IHtcbiAgICBuYW1lOiAnQ190b3RhbF9jb3N0JyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGNvbXBhbnk6IHtcbiAgICBuYW1lOiAnQ19Db21wYW55JyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGNvbXBhbnlfYWRkcmVzczoge1xuICAgIG5hbWU6ICdjb21wYW55X2FkZHJlc3MnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgY29tcGFueV9jaXR5OiB7XG4gICAgbmFtZTogJ2NvbXBhbnlfY2l0eScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBjb21wYW55X2NvdW50cnk6IHtcbiAgICBuYW1lOiAnY29tcGFueV9jb3VudHJ5JyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGNvbXBhbnlfcG9zdGFsY29kZToge1xuICAgIG5hbWU6ICdjb21wYW55X3Bvc3RhbGNvZGUnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgY29tcGFueV9wcm9maWxlOiB7XG4gICAgbmFtZTogJ0NfRU1FQV9Db21wYW55X1Byb2ZpbGUxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGNvbXBhbnlfc3RhdGU6IHtcbiAgICBuYW1lOiAnY29tcGFueV9zdGF0ZScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBjb25uZWN0b3JfaWQ6IHtcbiAgICBuYW1lOiAnQ19Db25uZWN0b3IxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGNvbnRhY3RfbWV0aG9kOiB7XG4gICAgbmFtZTogJ0NfTWV0aG9kX29mX0NvbnRhY3QxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGNvbnRlbnRfaWQ6IHtcbiAgICBuYW1lOiAnQ19DYW1wYWlnbl9Bc3NldF9JRDEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgY29udmVyc2lvbkRhdGU6IHtcbiAgICBuYW1lOiAnbW9zdFJlY2VudENvbnZlcnNpb25EYXRlMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBjb252ZXJzaW9uX3BhZ2U6IHtcbiAgICBuYW1lOiAnQ19Db252ZXJzaW9uUGFnZTEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgY291bnRyeToge1xuICAgIG5hbWU6ICdDX0NvdW50cnknLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgY291bnRyeV9pbnRlcmVzdDoge1xuICAgIG5hbWU6ICdDX2NvdW50cnlfaW50ZXJlc3QnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgY3JlYXRlX2FpX2FjY291bnQ6IHtcbiAgICBuYW1lOiAnY3JlYXRlX2FpX2FjY291bnQnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgY3VzdG9tX3JvdXRpbmc6IHtcbiAgICBuYW1lOiAnQ19DdXN0b21fUm91dGluZzEnLFxuICAgIHZhbHVlOiAnMScsXG4gIH0sXG4gIGRhdGU6IHtcbiAgICBuYW1lOiAnZGF0ZScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBkYXRldGltZToge1xuICAgIG5hbWU6ICdkYXRldGltZScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBkZXNjcmlwdGlvbjoge1xuICAgIG5hbWU6ICdDX0Rlc2NyaXB0aW9uMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBkb3dubG9hZF9saW5rOiB7XG4gICAgbmFtZTogJ0NfRG93bmxvYWRMaW5rJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGVjb21tZXJjZToge1xuICAgIG5hbWU6ICdDX0VfY29tbWVyY2UxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGVjb21tZXJjZV9zb2x1dGlvbjoge1xuICAgIG5hbWU6ICdDX0VfQ29tbWVyY2VfU2hvcHBpbmdfQ2FydF9Tb2x1dGlvbjEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgZWZfaWQ6IHtcbiAgICBuYW1lOiAnQ19lZl9pZF9Nb3N0X1JlY2VudDEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgZWxxX2d1aWQ6IHtcbiAgICBuYW1lOiAnZWxxQ3VzdG9tZXJHVUlEJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGVscV9zaXRlX2lkOiB7XG4gICAgbmFtZTogJ2VscVNpdGVJRCcsXG4gICAgdmFsdWU6ICc3MDYnLFxuICB9LFxuICBlbWFpbDoge1xuICAgIG5hbWU6ICdDX0VtYWlsQWRkcmVzcycsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBlbXBsb3llZV9iYW5kOiB7XG4gICAgbmFtZTogJ0NfRW1wbG95ZWVfQmFuZDEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgZW1wbG95ZWVfc2l6ZToge1xuICAgIG5hbWU6ICdDX0VtcGxveWVlX1NpemUxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGVycDoge1xuICAgIG5hbWU6ICdDX0N1c3RvbWVyX0VSUF9UeXBlMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBldmVudF9pZGVudGlmaWVyOiB7XG4gICAgbmFtZTogJ0V2ZW50X0lkZW50aWZpZXInLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgZXZlbnRfaWRlbnRpZmllcjI6IHtcbiAgICBuYW1lOiAnRXZlbnRfSWRlbnRpZmllcjInLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgZmlyc3RfbmFtZToge1xuICAgIG5hbWU6ICdDX0ZpcnN0TmFtZScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBmb3JtX25hbWU6IHtcbiAgICBuYW1lOiAnZWxxRm9ybU5hbWUnLFxuICAgIHZhbHVlOiAnR2V0U3RhcnRlZFdlYmZvcm0nLFxuICB9LFxuICBmb3JiZXM6IHtcbiAgICBuYW1lOiAnQ19Gb3JiZXNfMjAwMDEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgZm9ydHVuZToge1xuICAgIG5hbWU6ICdDX0ZvcnR1bmVfMTAwMDEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgZ2Rwcl9jb25zZW50X2RhdGU6IHtcbiAgICBuYW1lOiAnQ19HRFBSX0NvbnNlbnRfRGF0ZTEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgZ2Rwcl9lbGlnaWJsZToge1xuICAgIG5hbWU6ICdDX0dEUFJfRWxpZ2libGUxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGdvYWxfdHlwZToge1xuICAgIG5hbWU6ICdnb2FsX3R5cGUnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgZ29vZ2xlX2NsaWNrX2lkOiB7XG4gICAgbmFtZTogJ0NfR29vZ2xlX0NsaWNrX0lEX19nY2xpZF8xJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGluZHVzdHJ5OiB7XG4gICAgbmFtZTogJ0NfSW5kdXN0cnkxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGluZHVzdHJ5X2lkOiB7XG4gICAgbmFtZTogJ0NfSW5kdXN0cnkxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGlwX2FkZHJlc3M6IHtcbiAgICBuYW1lOiAnQ19JUF9BZGRyZXNzMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBqb2JfZnVuY3Rpb246IHtcbiAgICBuYW1lOiAnQ19Kb2JfRnVuY3Rpb24xJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGpvYl90aXRsZToge1xuICAgIG5hbWU6ICdDX1RpdGxlJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGxhbmd1YWdlOiB7XG4gICAgbmFtZTogJ0NfUHJlZmVycmVkX0xhbmd1YWdlMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBsYXN0X25hbWU6IHtcbiAgICBuYW1lOiAnQ19MYXN0TmFtZScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBsc21yOiB7XG4gICAgbmFtZTogJ0NfTGVhZF9Tb3VyY2VfX19Nb3N0X1JlY2VudDExJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGxzbzoge1xuICAgIG5hbWU6ICdDX0xlYWRfU291cmNlX19fT3JpZ2luYWwxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIGxzbzE6IHtcbiAgICBuYW1lOiAnQ19MZWFkX1NvdXJjZV9PcmlnaW5hbDEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgbWFya2V0aW5nX2ZlZWRiYWNrX25vdGVzOiB7XG4gICAgbmFtZTogJ0NfTWFya2V0aW5nX0ZlZWRiYWNrX05vdGVzMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBtYXhtaW5kX2R1bXA6IHtcbiAgICBuYW1lOiAnQ19NYXhtaW5kX0RhdGFfRHVtcDEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgbXlsb2RnZXRheF9zb3VyY2U6IHtcbiAgICBuYW1lOiAnTXlMb2RnZVRheF9Tb3VyY2UnLCAvLyBub3QgYSBmaWVsZCBpbiBlbG9xdWEsIGp1c3QgZm9yIE1MVFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgbXlsb2RnZXRheF9jaGFubmVsOiB7XG4gICAgbmFtZTogJ015TG9kZ2VUYXhfQ2hhbm5lbCcsIC8vIG5vdCBhIGZpZWxkIGluIGVsb3F1YSwganVzdCBmb3IgTUxUXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBuYWljczoge1xuICAgIG5hbWU6ICdDX05BSUNTXzZfRGlnaXQxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIG5hbWU6IHtcbiAgICBuYW1lOiAnbmFtZScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBvZmZlcjoge1xuICAgIG5hbWU6ICdDX09mZmVyMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBvcHBfdHlwZToge1xuICAgIG5hbWU6ICdDX09wcG9ydHVuaXR5X1R5cGUxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIG9wcF9zdWJ0eXBlOiB7XG4gICAgbmFtZTogJ0NfT3Bwb3J0dW5pdHlfU3ViX1R5cGUxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIG9wdF9pbjoge1xuICAgIG5hbWU6ICdDX0dEUFJfQ29uc2VudDEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgb3JpZ2luYWxfZWZfaWQ6IHtcbiAgICBuYW1lOiAnQ19lZl9pZF9PcmlnaW5hbDEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgcGFnZToge1xuICAgIG5hbWU6ICdwYWdlJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIHBhcnRuZXJzb3VyY2U6IHtcbiAgICBuYW1lOiAnQ19QYXJ0bmVyX19WQVJfMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBwYXJ0bmVyX3JlcF9lbWFpbDoge1xuICAgIG5hbWU6ICdDX1BhcnRuZXJfUmVwX0VtYWlsMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICBwYXJ0bmVyX3JvbGU6IHtcbiAgICBuYW1lOiAnQ19QYXJ0bmVyX1JvbGUxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIHBob25lOiB7XG4gICAgbmFtZTogJ0NfQnVzUGhvbmUnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgcG9pOiB7XG4gICAgbmFtZTogJ0NfUHJvZHVjdHNfU2VydmljZXNfb2ZfSW50ZXJlc3QxJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIHBvczoge1xuICAgIG5hbWU6ICdDX1JldGFpbF9Qb2ludF9vZl9TYWxlX1N5c3RlbTEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgcXVlcnlfc3RyaW5nOiB7XG4gICAgbmFtZTogJ0NfUXVlcnlfU3RyaW5nMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICByZWZlcnJpbmdfdXJsOiB7XG4gICAgbmFtZTogJ0NfUmVmZXJyaW5nX1VSTDEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgcmVnaXN0cmF0aW9uc19yZXR1cm5zOiB7XG4gICAgbmFtZTogJ0NfcmVnaXN0cmF0aW9uc19yZXR1cm5zJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIHJldmVudWU6IHtcbiAgICBuYW1lOiAnQ19Bbm51YWxfUmV2ZW51ZTEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgcmV2ZW51ZV9iYW5kOiB7XG4gICAgbmFtZTogJ0NfUmV2ZW51ZV9CYW5kMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICByb3V0ZV90bzoge1xuICAgIG5hbWU6ICdEZXBhcnRtZW50dG9Sb3V0ZXRvJyxcbiAgICB2YWx1ZTogJ1NhbGVzJyxcbiAgfSxcbiAgc3RhdGU6IHtcbiAgICBuYW1lOiAnQ19TdGF0ZV9Qcm92JyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIHN1Yl9pbmR1c3RyeToge1xuICAgIG5hbWU6ICdDX1N1Yl9JbmR1c3RyeTEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgc2ljX2NvZGU6IHtcbiAgICBuYW1lOiAnQ19TSUNfQ29kZTExJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIHN0YXR1czoge1xuICAgIG5hbWU6ICdDX0xlYWRfU3RhdHVzMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICB0aW1lOiB7XG4gICAgbmFtZTogJ3RpbWUnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgdWNpZDoge1xuICAgIG5hbWU6ICdDX1VuaXF1ZV9DbGlja19JRDEnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgdXNlcl9hZ2VudDoge1xuICAgIG5hbWU6ICd1c2VyX2FnZW50JyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIHZhdF9udW1iZXI6IHtcbiAgICBuYW1lOiAnQ19WQVRfTnVtYmVyMScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICB2YXRfcXVlc3Rpb246IHtcbiAgICBuYW1lOiAnQ192YXRfcXVlc3Rpb24nLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgd2Vic2l0ZToge1xuICAgIG5hbWU6ICdDX3dlYnNpdGUnLFxuICAgIHZhbHVlOiAnJyxcbiAgfSxcbiAgd2ViX3Byb3BlcnR5OiB7XG4gICAgbmFtZTogJ0NfV2ViX1Byb3BlcnR5MScsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICB6aXA6IHtcbiAgICBuYW1lOiAnemlwUG9zdGFsJyxcbiAgICB2YWx1ZTogJycsXG4gIH0sXG4gIHppcF9jb2RlOiB7XG4gICAgbmFtZTogJ0NfWmlwX1Bvc3RhbCcsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxuICB6aXBfbWF4bWluZDoge1xuICAgIG5hbWU6ICd6aXBfbWF4bWluZCcsXG4gICAgdmFsdWU6ICcnLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZWxvcXVhUGF5bG9hZDtcbiIsIi8vIEBmbG93XG5cbi8vIEhlbHBlcnNcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vYXBpL2xvZ2dlci1hcGknO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBFbG9xdWFQYXlsb2FkIH0gZnJvbSAnLi4vY29uc3RhbnRzL2Vsb3F1YS1maWVsZC1tYXBwaW5nJztcbmltcG9ydCB0eXBlIHsgRm9ybURlZmF1bHRDb25maWdzIH0gZnJvbSAnLi4vbGliL3R5cGVzL2Zvcm1zJztcblxuLy8gRnVuY3Rpb24gdG8gYXBwZW5kIGNsYXNzZXMgZm9yIGRpc2FibGVkIHVzZVxuLy8gQHJldHVybiB7IFZvaWQgfVxuZXhwb3J0IGNvbnN0IGFwcGVuZENsYXNzVG9IZWFkZXIgPSAoKSA9PiB7XG4gIGNvbnN0IGNsYXNzZXNTZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hpbGlwaXBlclJlYWN0Q2xhc3NlcycpO1xuICBpZiAoIWNsYXNzZXNTZXQpIHtcbiAgICBjb25zdCBhZGRTdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBhZGRTdHlsZXMuaWQgPSAnY2hpbGlwaXBlclJlYWN0Q2xhc3Nlcyc7XG4gICAgYWRkU3R5bGVzLmlubmVySFRNTCA9IGA8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+LmNoaWxpcGlwZXItZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZCAhaW1wb3J0YW50O1xuICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMTAyLCAwKTtcbiAgICAgIGJvcmRlci13aWR0aDogaW5pdGlhbDtcbiAgICAgIGJvcmRlci1zdHlsZTogaW5pdGlhbDtcbiAgICAgIGJvcmRlci1jb2xvcjogcmdiKDI1NSwgMTAyLCAwKTtcbiAgICAgIGJvcmRlci1pbWFnZTogaW5pdGlhbDtcbiAgICB9PC9zdHlsZT5gO1xuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChhZGRTdHlsZXMpO1xuICB9XG59O1xuXG4vLyBIZWxwZXIgZnVjbnRpb24gdG8gY2xvc2UgbW9kYWwgYWZ0ZXIgQ2hpbGlwaXBlciB3aW5kb3cgaGFzIG9wZW5lZFxuLy8gQHJldHVybiB7IEJvb2xlYW4gfVxuZXhwb3J0IGNvbnN0IGNsb3NlQWZ0ZXJSb3V0ZWQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1kaXNtaXNzPVwibW9kYWxcIl0nKTtcbiAgaWYgKGVsZW0gJiYgZWxlbSAhPT0gbnVsbCkge1xuICAgIGVsZW0uY2xpY2soKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBGdW5jdGlvbiB0byBkaXNhYmxlIGFzc29jaWF0ZWQgY2hpbGlwaXBlciBidXR0b25cbi8vIEByZXR1cm4geyBWb2lkIH1cbmV4cG9ydCBjb25zdCBkaXNhYmxlQ2hpbGlwaXBlckJ1dHRvbiA9IChmb3JtSWQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBjb25zdCBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtSWQpO1xuXG4gIGlmICghZWxlIHx8ICFlbGUucGFyZW50RWxlbWVudCB8fCAhZWxlLnBhcmVudEVsZW1lbnQuaWQpIHJldHVybjtcblxuICBjb25zdCBjb25uZWN0ZWRDaGlsaXBpcGVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWF2YWZvcm0taWQ9XCIke2VsZS5wYXJlbnRFbGVtZW50LmlkfVwiXWApO1xuICBpZiAoIWNvbm5lY3RlZENoaWxpcGlwZXJFbGVtZW50KSByZXR1cm47XG5cbiAgLy8gQ2hlY2sgZm9yIGNoaWxpcGlwZXIgYnV0dG9uIGFzc29jaWF0aW9uXG4gIGNvbm5lY3RlZENoaWxpcGlwZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAndHJ1ZScpO1xuICBjb25uZWN0ZWRDaGlsaXBpcGVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjaGlsaXBpcGVyLWRpc2FibGVkJywgJ2FjdGl2ZScpO1xufTtcblxuLy8gRnVuY3Rpb24gdG8gZW5hYmxlIGFzc29jaWF0ZWQgY2hpbGlwaXBlciBidXR0b25cbi8vIEByZXR1cm4geyBWb2lkIH1cbmV4cG9ydCBjb25zdCBlbmFibGVDaGlsaXBpcGVyQnV0dG9uID0gKGZvcm1JZDogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGNvbnN0IGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1JZCk7XG5cbiAgaWYgKCFlbGUgfHwgIWVsZS5wYXJlbnRFbGVtZW50IHx8ICFlbGUucGFyZW50RWxlbWVudC5pZCkgcmV0dXJuO1xuXG4gIGNvbnN0IGNvbm5lY3RlZENoaWxpcGlwZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtYXZhZm9ybS1pZD1cIiR7ZWxlLnBhcmVudEVsZW1lbnQuaWR9XCJdYCk7XG4gIGlmICghY29ubmVjdGVkQ2hpbGlwaXBlckVsZW1lbnQpIHJldHVybjtcblxuICAvLyBDaGVjayBmb3IgY2hpbGlwaXBlciBidXR0b24gYXNzb2NpYXRpb25cbiAgY29ubmVjdGVkQ2hpbGlwaXBlckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICBjb25uZWN0ZWRDaGlsaXBpcGVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdjaGlsaXBpcGVyLWRpc2FibGVkJywgJ2FjdGl2ZScpO1xufTtcblxuLy8gRnVuY3Rpb24gdG8gZ2V0IGRhdGEgYXR0cmlidXRlIGZyb20gY2hpbGlwaWVyIENUQVxuLy8gQHJldHVybiB7IHN0cmluZyB8IG51bGwgfVxuZXhwb3J0IGNvbnN0IGdldEFjdGl2ZUNoaWxpcGlwZXJBdHRyaWJ1dGUgPSAoZm9ybUlkOiBzdHJpbmcsIGF0dHJpYnV0ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmICghZm9ybUlkKSByZXR1cm4gbnVsbDtcblxuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybUlkKSkge1xuICAgIGNvbnN0IGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1JZCk7XG5cbiAgICBpZiAoIWVsZSB8fCAhZWxlLnBhcmVudEVsZW1lbnQgfHwgIWVsZS5wYXJlbnRFbGVtZW50LmlkKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNvbm5lY3RlZENoaWxpcGlwZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtYXZhZm9ybS1pZD1cIiR7ZWxlLnBhcmVudEVsZW1lbnQuaWR9XCJdYCk7XG4gICAgaWYgKCFjb25uZWN0ZWRDaGlsaXBpcGVyRWxlbWVudCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBkYXRhQXR0cmlidXRlID0gY29ubmVjdGVkQ2hpbGlwaXBlckVsZW1lbnQuZ2V0QXR0cmlidXRlKGBkYXRhLSR7YXR0cmlidXRlfWApO1xuICAgIGlmIChkYXRhQXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gZGF0YUF0dHJpYnV0ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoL2NoaWxpcGlwZXIvZ2kudGVzdChmb3JtSWQpKSB7XG4gICAgaWYgKGF0dHJpYnV0ZSA9PT0gJ3JvdXRlcicpIHJldHVybiAnY29udGFjdC1tZS1yb3V0ZXInO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vLyBGdW5jdGlvbiB0byB2YWxpZGF0ZSBpZiBjaGlsaXBpcGVyIGJ1dHRvbiBhcyBiZWVuIGNsaWNrZWRcbi8vIEByZXR1cm4geyBib29sZWFuIH1cbmV4cG9ydCBjb25zdCBpc0FjdGl2ZUNoaWxpcGlwZXJGb3JtID0gKGZvcm1JZDogc3RyaW5nLCBjYXB0dXJlRmllbGRzOiBBcnJheTx7IGlkOiBTdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT4sIGNvbmZpZ3M6IEZvcm1EZWZhdWx0Q29uZmlncyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoL2NoaWxpcGlwZXIvZ2kudGVzdChmb3JtSWQpKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoY2FwdHVyZUZpZWxkcyAmJiBjb25maWdzKSB7XG4gICAgcmV0dXJuICgoY2FwdHVyZUZpZWxkcy5maWx0ZXIoKGYpID0+IGYuaWQgPT09ICdwaG9uZScgJiYgZi52YWx1ZSAhPT0gJycpKS5sZW5ndGggPiAwICYmIEJvb2xlYW4oY29uZmlncy5jaGlsaXBpcGVyUm91dGVyKSAmJiBjb25maWdzLmNoaWxpcGlwZXJSb3V0ZXIgIT09ICcnKTtcbiAgfVxuXG4gIGNvbnN0IGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1JZCk7XG5cbiAgaWYgKCFlbGUgfHwgIWVsZS5wYXJlbnRFbGVtZW50IHx8ICFlbGUucGFyZW50RWxlbWVudC5pZCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBjb25uZWN0ZWRDaGlsaXBpcGVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWF2YWZvcm0taWQ9XCIke2VsZS5wYXJlbnRFbGVtZW50LmlkfVwiXWApO1xuICBpZiAoIWNvbm5lY3RlZENoaWxpcGlwZXJFbGVtZW50KSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIEJvb2xlYW4oY29ubmVjdGVkQ2hpbGlwaXBlckVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSk7XG59O1xuXG4vLyBGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgY2hsaWlwaXBlciBpcyBhc3NvY2lhdGVkIHRvIHRoZSBidWlsZGluZyBBdmFmb3JtXG4vLyBAcmV0dXJuIHsgQm9vbGVhbiB9XG5leHBvcnQgY29uc3QgaXNDb25uZWN0ZWRUb0NoaWxpcGlwZXIgPSAoZm9ybUlkOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgaWYgKCFmb3JtSWQpIHJldHVybiBmYWxzZTtcblxuICBpZiAoL2NoaWxpcGlwZXIvZ2kudGVzdChmb3JtSWQpKSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtSWQpO1xuXG4gIGlmICghZWxlKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGVsZS5wYXJlbnRFbGVtZW50ICYmIGVsZS5wYXJlbnRFbGVtZW50LmlkKSB7XG4gICAgY29uc3QgcGFyZW50SWQgPSBlbGUucGFyZW50RWxlbWVudC5pZDtcblxuICAgIC8vIENoZWNrIGZvciBjaGlsaXBpcGVyIGJ1dHRvbiBhc3NvY2lhdGlvblxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1hdmFmb3JtLWlkPVwiJHtwYXJlbnRJZH1cIl1gKSkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIFZhbGlkYXRlIGFzIHRydWVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgZmFpbHVyZVJlZGlyZWN0ID0gKGZvcm1JZDogc3RyaW5nLCByZWRpcmVjdDogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICB3aW5kb3cuYXZhID0gd2luZG93LmF2YSB8fCB7fTtcbiAgaWYgKHJlZGlyZWN0ICYmIHJlZGlyZWN0ICE9PSBudWxsICYmIHJlZGlyZWN0ICE9PSAnLmh0bWwnKSB7XG4gICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihyZWRpcmVjdCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyKHtcbiAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICBtc2dUeXBlOiAnQ2hpbGlwaXBlclRyaWdnZXJGYWlsdXJlJyxcbiAgICBmb3JtSWQsXG4gICAgZGF0YToge1xuICAgICAgbWVzc2FnZTogJ0Vycm9yIHdpdGggQ2hpbGlwaXBlciwgbWlzc2luZyByZWRpcmVjdCcsXG4gICAgfSxcbiAgfSk7XG5cbiAgd2luZG93LmF2YS5jaGlsaVBpcGVyID0ge1xuICAgIHN0YXR1czogJ2ZhaWwnLFxuICAgIGVycm9yOiAnRXJyb3Igd2l0aCBDaGlsaXBpcGVyLCBtaXNzaW5nIHJlZGlyZWN0JyxcbiAgfTtcbn07XG5cbi8vIEZ1bmN0aW9uIHRvIHN1Ym1pdCB0byBjaGlsaXBpcGVyXG4vLyBAcmV0dXJuIHsgbnVsbCB9XG5leHBvcnQgY29uc3QgbGF1bmNoQ2hpbGlwaXBlciA9IChwYXlsb2FkOiBFbG9xdWFQYXlsb2FkLCBmb3JtSWQ6IHN0cmluZywgcm91dGVyOiBzdHJpbmcgfCBudWxsID0gJ2NvbnRhY3QtbWUtcm91dGVyJywgcmVkaXJlY3Q6IHN0cmluZyB8IG51bGwpOiB2b2lkID0+IHtcbiAgd2luZG93LmF2YSA9IHdpbmRvdy5hdmEgfHwge307XG4gIGlmICghcGF5bG9hZCkge1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdDaGlsaXBpcGVyVHJpZ2dlckZhaWx1cmUnLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiAnRXJyb3Igd2l0aCBDaGlsaXBpcGVyLCBtaXNzaW5nIHBheWxvYWQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB3aW5kb3cuYXZhLmNoaWxpUGlwZXIgPSB7XG4gICAgICBzdGF0dXM6ICdmYWlsJyxcbiAgICAgIGVycm9yOiAnRXJyb3Igd2l0aCBDaGlsaXBpcGVyLCBtaXNzaW5nIHBheWxvYWQnLFxuICAgIH07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY2hpbGlQaXBlciA9IHdpbmRvdyAmJiB3aW5kb3cuQ2hpbGlQaXBlcjtcblxuICBpZiAoIWNoaWxpUGlwZXIpIHtcbiAgICBsb2dnZXIoe1xuICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICBtc2dUeXBlOiAnQ2hpbGlwaXBlclRyaWdnZXJGYWlsdXJlJyxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ0Vycm9yIHdpdGggQ2hpbGlwaXBlciwgZnVuY3Rpb24gbWlzc2luZyBmcm9tIHdpbmRvdycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgd2luZG93LmF2YS5jaGlsaVBpcGVyID0ge1xuICAgICAgc3RhdHVzOiAnZmFpbCcsXG4gICAgICBlcnJvcjogJ0Vycm9yIHdpdGggQ2hpbGlwaXBlciwgZnVuY3Rpb24gbWlzc2luZyBmcm9tIHdpbmRvdycsXG4gICAgfTtcbiAgICBmYWlsdXJlUmVkaXJlY3QoZm9ybUlkLCByZWRpcmVjdCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKGBMb2dnaW5nIHRvIGNoaWxpcGlwZXIgJHtKU09OLnN0cmluZ2lmeSh7XG4gICAgICBFbWFpbDogcGF5bG9hZC5lbWFpbC52YWx1ZSxcbiAgICAgIEZpcnN0TmFtZTogcGF5bG9hZC5maXJzdF9uYW1lLnZhbHVlLFxuICAgICAgTGFzdE5hbWU6IHBheWxvYWQubGFzdF9uYW1lLnZhbHVlLFxuICAgICAgQ29tcGFueTogcGF5bG9hZC5jb21wYW55LnZhbHVlLFxuICAgICAgUGhvbmU6IHBheWxvYWQucGhvbmUudmFsdWUsXG4gICAgICBNYXJrZXRpbmdGZWVkYmFja05vdGVzOiBwYXlsb2FkLm1hcmtldGluZ19mZWVkYmFja19ub3Rlcy52YWx1ZSB8fCBwYXlsb2FkLmFkZGl0aW9uYWxfaW5mb3JtYXRpb24udmFsdWUsXG4gICAgfSl9YCk7XG4gICAgY2hpbGlQaXBlci5zdWJtaXQoJ2F2YWxhcmEnLCByb3V0ZXIsIHtcbiAgICAgIHRpdGxlU3R5bGU6ICdSb2JvdG8gMjJweCAjRUE1OTM4JyxcbiAgICAgIGNsb3NlT25PdXRzaWRlOiB0cnVlLFxuICAgICAgbW9iaWxlUmVkaXJlY3RMaW5rOiB3aW5kb3cubG9jYXRpb24uaHJlZiwgLy8gVGhpcyBzZXRzIHRoZSByZWRpcmVjdCBvbiBtb2JpbGUgb25seS4gQ2hpbGlwaXBlciBoYW5kbGVzIHRoZSBtb2JpbGUgcm91dGluZy91c2UgZnJvbSB0aGVpciBzaWRlLlxuICAgICAgb25Sb3V0ZWQ6IGNsb3NlQWZ0ZXJSb3V0ZWQsIC8vIFRoaXMgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIGNoaWxpcGlwZXIgcm91dGVyIGhhcyBsb2FkZWQuIFdpbGwgY2xvc2UgQXZhZm9ybSBNb2RhbCBhZnRlciBDaGlsaXBpcGVyIGlzIHZpc2libGVcbiAgICAgIGxlYWQ6IHtcbiAgICAgICAgRW1haWw6IHBheWxvYWQuZW1haWwudmFsdWUsXG4gICAgICAgIEZpcnN0TmFtZTogcGF5bG9hZC5maXJzdF9uYW1lLnZhbHVlLFxuICAgICAgICBMYXN0TmFtZTogcGF5bG9hZC5sYXN0X25hbWUudmFsdWUsXG4gICAgICAgIENvbXBhbnk6IHBheWxvYWQuY29tcGFueS52YWx1ZSxcbiAgICAgICAgUGhvbmU6IHBheWxvYWQucGhvbmUudmFsdWUsXG4gICAgICAgIE1hcmtldGluZ0ZlZWRiYWNrTm90ZXM6IHBheWxvYWQubWFya2V0aW5nX2ZlZWRiYWNrX25vdGVzLnZhbHVlIHx8IHBheWxvYWQuYWRkaXRpb25hbF9pbmZvcm1hdGlvbi52YWx1ZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdDaGlsaXBpcGVyVHJpZ2dlckZhaWx1cmUnLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiBgRXJyb3Igd2l0aCBDaGlsaXBpcGVyLCBDaGlsaXBpcGVyIHN1Ym1pc3Npb24gZmFpbHVyZS4gRXJyb3I6ICR7ZXJyfWAsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgd2luZG93LmF2YS5jaGlsaVBpcGVyID0ge1xuICAgICAgc3RhdHVzOiAnZmFpbCcsXG4gICAgICBlcnJvcjogYEVycm9yIHdpdGggQ2hpbGlwaXBlciwgQ2hpbGlwaXBlciBzdWJtaXNzaW9uIGZhaWx1cmUuIEVycm9yOiAke2Vycn1gLFxuICAgIH07XG4gICAgZmFpbHVyZVJlZGlyZWN0KGZvcm1JZCwgcmVkaXJlY3QpO1xuICB9XG59O1xuXG4vLyBGdW5jdGlvbiB0byB1cGRhdGUgYXNzb2NpYXRlZCBjaGlsaXBpcGVyIGJ1dHRvblxuLy8gQHJldHVybiB7IFZvaWQgfVxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNoaWxpcGlwZXJCdXR0b24gPSAoZm9ybUlkOiBzdHJpbmcsIHN0YXR1czogc3RyaW5nLCB1cGRhdGVDbGFzczogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkID0+IHtcbiAgaWYgKHVwZGF0ZUNsYXNzID09PSBudWxsKSByZXR1cm47XG5cbiAgY29uc3QgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybUlkKTtcblxuICBpZiAoIWVsZSkgcmV0dXJuO1xuXG4gIGlmIChlbGUucGFyZW50RWxlbWVudCAmJiBlbGUucGFyZW50RWxlbWVudC5pZCkge1xuICAgIGNvbnN0IHBhcmVudElkID0gZWxlLnBhcmVudEVsZW1lbnQuaWQ7XG4gICAgY29uc3QgY29ubmVjdGVkQ2hpbGlwaXBlckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1hdmFmb3JtLWlkPVwiJHtwYXJlbnRJZH1cIl1gKTtcblxuICAgIC8vIENoZWNrIGZvciBjaGlsaXBpcGVyIGJ1dHRvbiBhc3NvY2lhdGlvblxuICAgIGlmIChjb25uZWN0ZWRDaGlsaXBpcGVyRWxlbWVudCkge1xuICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgY2FzZSAncmVtb3ZlJzpcbiAgICAgICAgICBjb25uZWN0ZWRDaGlsaXBpcGVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHVwZGF0ZUNsYXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25uZWN0ZWRDaGlsaXBpcGVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKHVwZGF0ZUNsYXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCIvLyBAZmxvdyBzdHJpY3QtbG9jYWxcblxuLy8gRW5zdXJlIGFscGhhIG9yZGVyXG5cbi8vIEFjdGlvbiBUeXBlc1xuaW1wb3J0IHR5cGUge1xuICBBZGRSZXF1aXJlZEZpZWxkLFxuICBCcml0ZVZlcmlmeVN0YXR1cyxcbiAgQ2FwdHVyZUF2YVRheE1MVFJlc3BvbnNlLFxuICBDYXB0dXJlRGlhbENvZGUsXG4gIENvbm5lY3RvclNlYXJjaEZhaWxlZCxcbiAgQ29ubmVjdG9yU2VhcmNoU3VjY2VzcyxcbiAgQ2xlYXJGb3JtU3VibWl0LFxuICBDbGVhckNhcHR1cmVkVmFsdWVzLFxuICBDbG9zZVBpY2tMaXN0LFxuICBEaXNwYXRjaCxcbiAgRW1haWxWZXJpZnlGYWlsZWQsXG4gIEVtYWlsVmVyaWZ5U3VjY2VzcyxcbiAgSGlkZVNlYXJjaFJlc3VsdHMsXG4gIEluaXRBcHBsaWNhdGlvbixcbiAgSW5wdXRDYXB0dXJlLFxuICBJbnB1dENhcHR1cmVJbnRsUGhvbmUsXG4gIEluaXRGb3JtQXBwbGljYXRpb24sXG4gIEluaXRGb3JtQXBwbGljYXRpb25GYWlsZWQsXG4gIElucHV0VmFsaWRhdGVJbnRsUGhvbmUsXG4gIE1heG1pbmRGYWlsLFxuICBNYXhtaW5kUnVubmluZyxcbiAgTWF4bWluZFN0b3BwZWQsXG4gIE1heG1pbmRTdWNjZXNzLFxuICBNYXhtaW5kUHJldmVudGVkLFxuICBNaWxlc01heG1pbmRSdW5uaW5nLFxuICBNaWxlc01heG1pbmRTdG9wcGVkLFxuICBNaWxlc01heG1pbmRGYWlsLFxuICBNaWxlc01heG1pbmRTdWNjZXNzLFxuICBNaWxlc01heG1pbmRQcmV2ZW50ZWQsXG4gIE1pbGVzU3VibWlzc2lvblN0YXR1cyxcbiAgUmVjZWl2ZVN5c3RlbUVycm9yLFxuICBSZXNldEZvcm0sXG4gIFNhdmVTZWFyY2hTZWxlY3Rpb24sXG4gIFNlYXJjaENvbm5lY3RvcnMsXG4gIFNldEFjdGl2ZUZpZWxkLFxuICBTZXRBY3RpdmVGb3JtLFxuICBTZXRFbG9xdWFMb29rdXBWYWxpZCxcbiAgU2V0RWxvcXVhTG9va3VwSW52YWxpZCxcbiAgU2V0SW5wdXRDYXB0dXJlSW52YWxpZCxcbiAgU2V0SW5wdXRDYXB0dXJlVmFsaWQsXG4gIFNldExhc3RGaWVsZFZhbGlkYXRpb24sXG4gIFNldExvYWRpbmdTdGFydCxcbiAgU2V0TG9hZGluZ0ZpbmlzaCxcbiAgU2V0TWx0UmF0ZVJlc3BvbnNlLFxuICBTZXRTdWJtaXNzaW9uTGltaXRFeGNlZWVkZWQsXG4gIFNldFN5c3RlbUVycm9yLFxuICBTdWJtaXNzaW9uTGltaXRBcGlGYWlsZWQsXG4gIFRvZ2dsZU1vZGFsLFxuICBUcmFja0FzTW9kYWxGb3JtLFxuICBUcmFja0Zvcm1BYmFuZG9uU3RhdHVzLFxuICBVcGRhdGVEeW5hbWljUmVxdWlyZWRGaWVsZCxcbiAgVmFsaWRhdGVDb25uZWN0b3IsXG59IGZyb20gJy4vdHlwZXMvYWN0aW9ucyc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IEF2YVRheE1sdFJlc3BvbnNlIH0gZnJvbSAnLi90eXBlcy9yZWR1Y2VyLXN0YXRlcyc7XG5pbXBvcnQgdHlwZSB7IElucHV0VGFyZ2V0IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEludGxDb3VudHJ5RGF0YSwgSnNvbkZpZWxkcywgQXZhZm9ybU9iamVjdCxcbn0gZnJvbSAnLi90eXBlcy9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZywgUmVzdWx0RXJyb3IgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBVc2VySW5mbyB9IGZyb20gJy4vdHlwZXMvdXNlcic7XG5pbXBvcnQgdHlwZSB7XG4gIEJyaXRlVmVyaWZ5UmVzcG9uc2VGYWlsLFxuICBCcml0ZVZlcmlmeVJlc3BvbnNlU3VjY2VzcyxcbiAgQ29ubmVjdG9yc0FycmF5LFxuICBDb25uZWN0b3JSZXN1bHRzLFxuICBFbG9xdWFMb29rdXBSZXNwb25zZSxcbiAgTWlsZXNSZXNwb25zZUZhaWwsXG4gIE1pbGVzUmVzcG9uc2VTdWNjZXNzLFxuICBTdWJtaXNzaW9uTGltaXRSZXNwb25zZVN1Y2Nlc3MsXG59IGZyb20gJy4uL2FwaS90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEVsb3F1YVBheWxvYWQgfSBmcm9tICcuLi9jb25zdGFudHMvZWxvcXVhLWZpZWxkLW1hcHBpbmcnO1xuaW1wb3J0IHR5cGUgeyBNYXhtaW5kUmVzcG9uc2VTdWNjZXNzIH0gZnJvbSAnLi90eXBlcy9tYXhtaW5kJztcblxuLy8gRGlzcGF0Y2ggQWN0aW9ucyAoS2VlcCBhbHBoYSBvcmRlciBieSBhY3Rpb24pXG4vLyBDcmVhdGUgeW91ciByZWR1eCBhY3Rpb24gYmVsb3cuXG4vLyBJZiB5b3UgaGF2ZSBub3QgcmVnaXN0ZXJlZCB5b3VyIEFjdGlvbiB0eXBlIFsgKCk6IFtBY3Rpb25UeXBlXSA9PiAoKSBdIG1ha2Ugc3VyZSB0byBnbyBpbnRvIGxpYi90eXBlcy9hY3Rpb25zIGFuZCByZWdpc3RlclxuLy8gRmFpbHVyZSB0byByZWdpc3RlciB3aWxsIGNhdXNlIGZsb3cgdG8gZXJyb3IgZHVlIHRvIGluYWJpbGl0eSB0byBmaW5kIHlvdXIgQWN0aW9uIGZvciB5b3VyZSByZWR1Y2VyIGNhc2Vcbi8vIE9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIGFjdGlvbiBhbmQgcmVnaXN0ZXJlZCB5b3VyIEFjdGlvbiB0eXBlLCBnbyB0byB5b3VyIGRlc2lyZWQgcmVkdWNlciBpbiAvcmVkdWNlcnMgYW5kIGNyZWF0ZSB5b3VyIGNhc2VcblxuLy8gQXZhdGF4XG5leHBvcnQgY29uc3Qgc2V0TWx0UmF0ZVJlc3BvbnNlID0gKGZvcm1JZDogc3RyaW5nLCByZXNwb25zZTogQXZhVGF4TWx0UmVzcG9uc2UpOiBTZXRNbHRSYXRlUmVzcG9uc2UgPT4gKHtcbiAgdHlwZTogJ0FWQVRBWF9NTFRfUkVTUE9OU0UnLCBmb3JtSWQsIHJlc3BvbnNlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBjYXB0dXJlTWx0QXZhVGF4UmVzcG9uc2UgPSAoZm9ybUlkOiBzdHJpbmcsIHJlc3BvbnNlOiBBdmFUYXhNbHRSZXNwb25zZSk6IENhcHR1cmVBdmFUYXhNTFRSZXNwb25zZSA9PiAoe1xuICB0eXBlOiAnQ0FQVFVSRV9NTFRfQVZBVEFYX1JFU1BPTlNFJywgZm9ybUlkLCByZXNwb25zZSxcbn0pO1xuXG4vLyBJbml0IGFjdGlvbnNcbmV4cG9ydCBjb25zdCBpbml0QXBwbGljYXRpb24gPSAoZW52U3RhdHM6IENvbmZpZywgYWRvYmVWaXNpdG9ySWQ6IHN0cmluZyB8IG51bGwpOiBJbml0QXBwbGljYXRpb24gPT4gKHsgdHlwZTogJ0lOSVRfQVBQTElDQVRJT04nLCBlbnZTdGF0cywgYWRvYmVWaXNpdG9ySWQgfSk7XG5leHBvcnQgY29uc3QgaW5pdEZvcm1BcHBsaWNhdGlvbiA9IChjb25maWdzOiBzdHJpbmcgfCBudWxsLCBmb3JtSWQ6IHN0cmluZyB8IG51bGwsIGlzTW9kYWw6IGJvb2xlYW4sIHBhcmFtczogc3RyaW5nLCB1cmw6IHN0cmluZywgdXNlckluZm86IFVzZXJJbmZvLCBkaXNhYmxlSGlkZUZpZWxkczogYm9vbGVhbiwgZGF0YT86IEF2YWZvcm1PYmplY3QgfCBudWxsID0gbnVsbCk6IEluaXRGb3JtQXBwbGljYXRpb24gPT4gKHtcbiAgdHlwZTogJ0lOSVRfRk9STV9BUFBMSUNBVElPTicsIGNvbmZpZ3MsIGZvcm1JZCwgaXNNb2RhbCwgcGFyYW1zLCB1cmwsIHVzZXJJbmZvLCBkaXNhYmxlSGlkZUZpZWxkcywgZGF0YSxcbn0pO1xuZXhwb3J0IGNvbnN0IGluaXRGb3JtQXBwbGljYXRpb25GYWlsZWQgPSAoY29uZmlnczogc3RyaW5nLCBlcnJvcjogc3RyaW5nLCBmb3JtSWQ6IHN0cmluZyk6IEluaXRGb3JtQXBwbGljYXRpb25GYWlsZWQgPT4gKHtcbiAgdHlwZTogJ0lOSVRfRk9STV9BUFBMSUNBVElPTl9GQUlMRUQnLCBjb25maWdzLCBlcnJvciwgZm9ybUlkLFxufSk7XG5cbi8vIENhcHR1cmUgYWN0aW9uc1xuXG5leHBvcnQgY29uc3QgYWRkUmVxdWlyZWRGaWVsZCA9IChuZXdGb3JtRmllbGRzOiBKc29uRmllbGRzLCBmb3JtSWQ6IHN0cmluZywgbmV3RmllbGQ6IHN0cmluZyk6IEFkZFJlcXVpcmVkRmllbGQgPT4gKHtcbiAgdHlwZTogJ0FERF9SRVFVSVJFRF9GSUVMRCcsIG5ld0Zvcm1GaWVsZHMsIGZvcm1JZCwgbmV3RmllbGQsXG59KTtcblxuZXhwb3J0IGNvbnN0IGNhcHR1cmVJbnB1dCA9IChkaXNwYXRjaDogRGlzcGF0Y2gsIGZvcm1JZDogc3RyaW5nLCBpbnB1dFRhcmdldDogSW5wdXRUYXJnZXQsIGlucHV0VGFyZ2V0VHJhY2tBYmFuZG9uPzogYm9vbGVhbik6IElucHV0Q2FwdHVyZSA9PiAoe1xuICB0eXBlOiAnQ0FQVFVSRV9JTlBVVF9GSUVMRCcsIGRpc3BhdGNoLCBmb3JtSWQsIGlucHV0VGFyZ2V0LCBpbnB1dFRhcmdldFRyYWNrQWJhbmRvbixcbn0pO1xuZXhwb3J0IGNvbnN0IGNhcHR1cmVJbnRsUGhvbmUgPSAoZm9ybUlkOiBzdHJpbmcsIGNvdW50cnlEYXRhOiBJbnRsQ291bnRyeURhdGEsIGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBJbnB1dENhcHR1cmVJbnRsUGhvbmUgPT4gKHtcbiAgdHlwZTogJ0NBUFRVUkVfSU5QVVRfRklFTERfSU5UTF9QSE9ORScsIGZvcm1JZCwgY291bnRyeURhdGEsIGlkLCB2YWx1ZSxcbn0pO1xuXG5leHBvcnQgY29uc3QgY2FwdHVyZURpYWxDb2RlID0gKGRpYWxDb2RlOiBzdHJpbmcsIGZvcm1JZDogc3RyaW5nKTogQ2FwdHVyZURpYWxDb2RlID0+ICh7XG4gIHR5cGU6ICdDQVBUVVJFX0RJQUxfQ09ERScsIGRpYWxDb2RlLCBmb3JtSWQsXG59KTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUFiYW5kb24gPSAoZm9ybUlkOiBzdHJpbmcpID0+ICh7IHR5cGU6ICdSRU1PVkVfQUJBTkRPTicsIGZvcm1JZCB9KTtcbmV4cG9ydCBjb25zdCBzZXRBY3RpdmVGaWVsZCA9IChmb3JtSWQ6IHN0cmluZywgaWQ6IHN0cmluZyk6IFNldEFjdGl2ZUZpZWxkID0+ICh7IHR5cGU6ICdTRVRfQUNUSVZFX0ZJRUxEJywgZm9ybUlkLCBpZCB9KTtcbmV4cG9ydCBjb25zdCBzZXRBY3RpdmVGb3JtID0gKGZvcm1JZDogc3RyaW5nKTogU2V0QWN0aXZlRm9ybSA9PiAoeyB0eXBlOiAnU0VUX0FDVElWRV9GT1JNJywgZm9ybUlkIH0pO1xuZXhwb3J0IGNvbnN0IHNldElucHV0Q2FwdHVyZUludmFsaWQgPSAoZm9ybUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IFNldElucHV0Q2FwdHVyZUludmFsaWQgPT4gKHtcbiAgdHlwZTogJ1NFVF9JTlBVVF9DQVBUVVJFX0lOVkFMSUQnLCBmb3JtSWQsIGlkLCBtZXNzYWdlLFxufSk7XG5leHBvcnQgY29uc3Qgc2V0SW5wdXRDYXB0dXJlVmFsaWQgPSAoZm9ybUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBTZXRJbnB1dENhcHR1cmVWYWxpZCA9PiAoeyB0eXBlOiAnU0VUX0lOUFVUX0NBUFRVUkVfVkFMSUQnLCBmb3JtSWQsIGlkIH0pO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDb25uZWN0b3IgPSAoY29ubmVjdG9yczogQ29ubmVjdG9yc0FycmF5LCBmaWVsZElkOiBzdHJpbmcsIGZvcm1JZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogVmFsaWRhdGVDb25uZWN0b3IgPT4gKHtcbiAgdHlwZTogJ1ZBTElEQVRFX0NPTk5FQ1RPUlMnLCBjb25uZWN0b3JzLCBmaWVsZElkLCBmb3JtSWQsIHZhbHVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUludGxQaG9uZSA9IChmb3JtSWQ6IHN0cmluZywgc3RhdHVzOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGNvdW50cnlEYXRhOiBJbnRsQ291bnRyeURhdGEsIG51bWJlcjogc3RyaW5nLCBpZDogc3RyaW5nKTogSW5wdXRWYWxpZGF0ZUludGxQaG9uZSA9PiAoe1xuICB0eXBlOiAnVkFMSURBVEVfSU5QVVRfRklFTERfSU5UTF9QSE9ORScsIGZvcm1JZCwgc3RhdHVzLCB2YWx1ZSwgY291bnRyeURhdGEsIG51bWJlciwgaWQsXG59KTtcblxuLy8gRWxvcXVhIExvb2t1cFxuZXhwb3J0IGNvbnN0IHNldEVsb3F1YUxvb2t1cFZhbGlkID0gKGZvcm1JZDogc3RyaW5nLCB2YWx1ZXM6IEVsb3F1YUxvb2t1cFJlc3BvbnNlKTogU2V0RWxvcXVhTG9va3VwVmFsaWQgPT4gKHtcbiAgdHlwZTogJ1NFVF9FTE9RVUFfTE9PS1VQX1ZBTElEJyxcbiAgZm9ybUlkLFxuICB2YWx1ZXMsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldEVsb3F1YUxvb2t1cEludmFsaWQgPSAoZm9ybUlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IFNldEVsb3F1YUxvb2t1cEludmFsaWQgPT4gKHtcbiAgdHlwZTogJ1NFVF9FTE9RVUFfTE9PS1VQX0lOVkFMSUQnLFxuICBmb3JtSWQsXG4gIG1lc3NhZ2UsXG59KTtcblxuLy8gTG9hZGluZyBhY3Rpb25zXG4vLyAkRmxvd0ZpeE1lIC0gVE9ETzogRmluZCBhbGwgcG9zc2libGUgZXJyb3IgaW5mb3JtYXRpb24gZm9yIHR5cGluZ1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVTeXN0ZW1FcnJvciA9IChpbmZvOiBhbnksIHN0YXR1c0NvZGU6IG51bWJlcik6IFJlY2VpdmVTeXN0ZW1FcnJvciA9PiAoeyB0eXBlOiAnUkVDRUlWRV9TWVNURU1fRVJST1InLCBpbmZvLCBzdGF0dXNDb2RlIH0pO1xuZXhwb3J0IGNvbnN0IHNldExhc3RGaWVsZFZhbGlkYXRpb24gPSAoZm9ybUlkOiBzdHJpbmcsIGZpZWxkczogSnNvbkZpZWxkcyk6IFNldExhc3RGaWVsZFZhbGlkYXRpb24gPT4gKHsgdHlwZTogJ1NFVF9MQVNUX0ZJRUxEX1ZBTElEQVRJT04nLCBmb3JtSWQsIGZpZWxkcyB9KTtcbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nU3RhcnQgPSAobWVzc2FnZT86IHN0cmluZyB8IG51bGwsIHJlcXVlc3Q/OiBzdHJpbmcpOiBTZXRMb2FkaW5nU3RhcnQgPT4gKHsgdHlwZTogJ1NFVF9MT0FESU5HX1NUQVJUJywgbWVzc2FnZSwgcmVxdWVzdCB9KTtcbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nRmluaXNoID0gKG1lc3NhZ2U/OiBzdHJpbmcpOiBTZXRMb2FkaW5nRmluaXNoID0+ICh7IHR5cGU6ICdTRVRfTE9BRElOR19GSU5JU0gnLCBtZXNzYWdlIH0pO1xuXG4vLyBTdWJtaXNzaW9uIGFjdGlvbnNcbmV4cG9ydCBjb25zdCBjbGVhckZvcm1TdWJtaXQgPSAoZm9ybUlkOiBzdHJpbmcpOiBDbGVhckZvcm1TdWJtaXQgPT4gKHsgdHlwZTogJ0NMRUFSX0ZPUk1fU1VCTUlUJywgZm9ybUlkIH0pO1xuZXhwb3J0IGNvbnN0IGNsZWFyQ2FwdHVyZWRWYWx1ZXMgPSAoZm9ybUlkOiBzdHJpbmcsIGZpZWxkczogQXJyYXk8c3RyaW5nPik6IENsZWFyQ2FwdHVyZWRWYWx1ZXMgPT4gKHsgdHlwZTogJ0NMRUFSX0ZPUk1fVkFMVUVTJywgZm9ybUlkLCBmaWVsZHMgfSk7XG5cbi8vIER5bmFtaWMgZmllbGQgYWN0aW9uc1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUR5bmFtaWNSZXF1aXJlZEZpZWxkID0gKGZvcm1JZDogc3RyaW5nLCBhZGQ6IEFycmF5PHN0cmluZz4sIHJlbW92ZTogQXJyYXk8c3RyaW5nPik6IFVwZGF0ZUR5bmFtaWNSZXF1aXJlZEZpZWxkID0+ICh7XG4gIHR5cGU6ICdVUERBVEVfRFlOQU1JQ19SRVFVSVJFRF9GSUVMRCcsIGZvcm1JZCwgYWRkLCByZW1vdmUsXG59KTtcblxuLy8gVHJhY2tcbmV4cG9ydCBjb25zdCB0cmFja0Zvcm1BYmFuZG9uU3RhdHVzID0gKGZvcm1JZDogc3RyaW5nLCBmaWVsZElkOiBzdHJpbmcpOiBUcmFja0Zvcm1BYmFuZG9uU3RhdHVzID0+ICh7IHR5cGU6ICdUUkFDS19GT1JNX0FCQU5ET05fU1RBVFVTJywgZm9ybUlkLCBmaWVsZElkIH0pO1xuXG4vLyBTRVJWSUNFU1xuXG4vLyBDT05ORUNUT1JTXG5leHBvcnQgY29uc3QgY2xvc2VQaWNrTGlzdCA9IChmb3JtSWQ6IHN0cmluZyk6IENsb3NlUGlja0xpc3QgPT4gKHsgdHlwZTogJ0NMT1NFX1BJQ0tfTElTVCcsIGZvcm1JZCB9KTtcbmV4cG9ydCBjb25zdCBjb25uZWN0b3JTZWFyY2hGYWlsZWQgPSAoZW5kcG9pbnQ6IHN0cmluZywgZm9ybUlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IENvbm5lY3RvclNlYXJjaEZhaWxlZCA9PiAoe1xuICB0eXBlOiAnQ09OTkVDVE9SX0RBVEFfRkVUQ0hfRkFJTEVEJywgZW5kcG9pbnQsIGZvcm1JZCwgbWVzc2FnZSxcbn0pO1xuXG5leHBvcnQgY29uc3QgY29ubmVjdG9yU2VhcmNoU3VjY2VzcyA9IChjb25uZWN0b3JzOiBDb25uZWN0b3JSZXN1bHRzLCBlbmRwb2ludDogc3RyaW5nLCBmaWVsZElkOiBzdHJpbmcsIGZvcm1JZDogc3RyaW5nKTogQ29ubmVjdG9yU2VhcmNoU3VjY2VzcyA9PiAoe1xuICB0eXBlOiAnQ09OTkVDVE9SX0RBVEFfRkVUQ0hfU1VDQ0VTUycsIGNvbm5lY3RvcnMsIGVuZHBvaW50LCBmaWVsZElkLCBmb3JtSWQsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNlYXJjaERhdGEgPSAoZW5kcG9pbnQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nLCBmb3JtSWQ6IHN0cmluZywgdGVybTogc3RyaW5nKTogU2VhcmNoQ29ubmVjdG9ycyA9PiAoe1xuICB0eXBlOiAnU0VBUkNIX0NPTk5FQ1RPUlMnLCBlbmRwb2ludCwgZmllbGRJZCwgZm9ybUlkLCB0ZXJtLFxufSk7XG5cbmV4cG9ydCBjb25zdCBoaWRlU2VhcmNoUmVzdWx0cyA9IChmaWVsZElkOiBzdHJpbmcsIGZvcm1JZDogc3RyaW5nKTogSGlkZVNlYXJjaFJlc3VsdHMgPT4gKHtcbiAgdHlwZTogJ0hJREVfU0VBUkNIX1JFU1VMVFMnLCBmaWVsZElkLCBmb3JtSWQsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNhdmVTZWFyY2hTZWxlY3Rpb24gPSAoZmllbGRJZDogc3RyaW5nLCBmb3JtSWQ6IHN0cmluZywgYWx0OiBzdHJpbmcpOiBTYXZlU2VhcmNoU2VsZWN0aW9uID0+ICh7XG4gIHR5cGU6ICdTQVZFX1NFQVJDSF9TRUxFQ1RJT04nLCBmaWVsZElkLCBmb3JtSWQsIGFsdCxcbn0pO1xuXG4vLyBNYXhtaW5kIEFQSVxuZXhwb3J0IGNvbnN0IG1heG1pbmRSdW5uaW5nID0gKCk6IE1heG1pbmRSdW5uaW5nID0+ICh7IHR5cGU6ICdNQVhNSU5EX1JVTk5JTkcnIH0pO1xuZXhwb3J0IGNvbnN0IG1heG1pbmRTdG9wcGVkID0gKCk6IE1heG1pbmRTdG9wcGVkID0+ICh7IHR5cGU6ICdNQVhNSU5EX1NUT1BQRUQnIH0pO1xuZXhwb3J0IGNvbnN0IG1heG1pbmRTdWNjZXNzID0gKHJlc3VsdHM6IE1heG1pbmRSZXNwb25zZVN1Y2Nlc3MsIHVybDogc3RyaW5nKTogTWF4bWluZFN1Y2Nlc3MgPT4gKHsgdHlwZTogJ01BWE1JTkRfU1VDQ0VTUycsIHJlc3VsdHMsIHVybCB9KTtcbmV4cG9ydCBjb25zdCBtYXhtaW5kRmFpbCA9IChtZXNzYWdlOiBzdHJpbmcsIHVybDogc3RyaW5nKTogTWF4bWluZEZhaWwgPT4gKHsgdHlwZTogJ01BWE1JTkRfRkFJTCcsIG1lc3NhZ2UsIHVybCB9KTtcbmV4cG9ydCBjb25zdCBtYXhtaW5kUHJldmVudGVkID0gKCk6IE1heG1pbmRQcmV2ZW50ZWQgPT4gKHsgdHlwZTogJ01BWE1JTkRfUFJFVkVOVEVEJyB9KTtcblxuLy8gTWlsZXMgbWF4bWluZCBBUElcbmV4cG9ydCBjb25zdCBtaWxlc01heG1pbmRSdW5uaW5nID0gKCk6IE1pbGVzTWF4bWluZFJ1bm5pbmcgPT4gKHsgdHlwZTogJ01JTEVTX01BWE1JTkRfUlVOTklORycgfSk7XG5leHBvcnQgY29uc3QgbWlsZXNNYXhtaW5kU3RvcHBlZCA9ICgpOiBNaWxlc01heG1pbmRTdG9wcGVkID0+ICh7IHR5cGU6ICdNSUxFU19NQVhNSU5EX1NUT1BQRUQnIH0pO1xuZXhwb3J0IGNvbnN0IG1pbGVzTWF4bWluZFN1Y2Nlc3MgPSAocmVzdWx0czogTWF4bWluZFJlc3BvbnNlU3VjY2VzcywgdXJsOiBzdHJpbmcpOiBNaWxlc01heG1pbmRTdWNjZXNzID0+ICh7IHR5cGU6ICdNSUxFU19NQVhNSU5EX1NVQ0NFU1MnLCByZXN1bHRzLCB1cmwgfSk7XG5leHBvcnQgY29uc3QgbWlsZXNNYXhtaW5kRmFpbCA9IChtZXNzYWdlOiBzdHJpbmcsIHVybDogc3RyaW5nKTogTWlsZXNNYXhtaW5kRmFpbCA9PiAoeyB0eXBlOiAnTUlMRVNfTUFYTUlORF9GQUlMJywgbWVzc2FnZSwgdXJsIH0pO1xuZXhwb3J0IGNvbnN0IG1pbGVzTWF4bWluZFByZXZlbnRlZCA9ICgpOiBNaWxlc01heG1pbmRQcmV2ZW50ZWQgPT4gKHsgdHlwZTogJ01JTEVTX01BWE1JTkRfUFJFVkVOVEVEJyB9KTtcblxuLy8gTWFya2V0aW5nIEFQSSAtIEVtYWlsIHZlcmlmeVxuZXhwb3J0IGNvbnN0IGJyaXRlVmVyaWZ5UmVzcG9uc2UgPSAoZW1haWw6IHN0cmluZywgZGF0YTogQnJpdGVWZXJpZnlSZXNwb25zZVN1Y2Nlc3MsIHN0YXR1czogc3RyaW5nLCB1cmw6IHN0cmluZyk6IEJyaXRlVmVyaWZ5U3RhdHVzID0+ICh7XG4gIHR5cGU6ICdCUklURV9WRVJJRllfUkVTUE9OU0UnLCBkYXRhLCBlbWFpbCwgc3RhdHVzLCB1cmwsXG59KTtcbmV4cG9ydCBjb25zdCBlbWFpbFZlcmlmeUZhaWxlZCA9IChmb3JtSWQ6IHN0cmluZywgZW1haWw6IHN0cmluZywgaW5wdXRJZDogc3RyaW5nLCByZXNwb25zZTogQnJpdGVWZXJpZnlSZXNwb25zZUZhaWwpOiBFbWFpbFZlcmlmeUZhaWxlZCA9PiAoe1xuICB0eXBlOiAnRU1BSUxfVkVSSUZZX0ZBSUxFRCcsIGZvcm1JZCwgZW1haWwsIGlucHV0SWQsIHJlc3BvbnNlLFxufSk7XG5leHBvcnQgY29uc3QgZW1haWxWZXJpZnlTdWNjZXNzID0gKHJlc3BvbnNlOiBCcml0ZVZlcmlmeVJlc3BvbnNlU3VjY2VzcywgdXJsOiBzdHJpbmcpOiBFbWFpbFZlcmlmeVN1Y2Nlc3MgPT4gKHtcbiAgdHlwZTogJ0VNQUlMX1ZFUklGWV9TVUNDRVNTJywgcmVzcG9uc2UsIHVybCxcbn0pO1xuXG4vLyBNaWxlc1xuZXhwb3J0IGNvbnN0IHNldE1pbGVzU3VibWlzc2lvblN0YXR1cyA9IChlcnJvcjogc3RyaW5nLCBmb3JtSWQ6IHN0cmluZywgcGF5bG9hZDogRWxvcXVhUGF5bG9hZCwgcmVzcG9uc2U6IE1pbGVzUmVzcG9uc2VTdWNjZXNzIHwgTWlsZXNSZXNwb25zZUZhaWwsIHN0YXR1czogYm9vbGVhbik6IE1pbGVzU3VibWlzc2lvblN0YXR1cyA9PiAoe1xuICB0eXBlOiAnU0VUX01JTEVTX1NVQk1JU1NJT05fU1RBVFVTJyxcbiAgZXJyb3IsXG4gIGZvcm1JZCxcbiAgcGF5bG9hZCxcbiAgcmVzcG9uc2UsXG4gIHN0YXR1cyxcbn0pO1xuXG4vLyBTdWJtaXNzaW9uIGxpbWl0ZVxuZXhwb3J0IGNvbnN0IHN1Ym1pc3Npb25MaW1pdEFwaUZhaWxlZCA9IChmb3JtSWQ6IHN0cmluZywgc3VibWlzc2lvbmxpbWl0aWQ6IHN0cmluZywgc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IFN1Ym1pc3Npb25MaW1pdFJlc3BvbnNlU3VjY2VzcyB8IFJlc3VsdEVycm9yKTogU3VibWlzc2lvbkxpbWl0QXBpRmFpbGVkID0+ICh7XG4gIHR5cGU6ICdTVUJNSVNTSU9OX0xJTUlUX0FQSV9GQUlMRUQnLFxuICBmb3JtSWQsXG4gIHN1Ym1pc3Npb25saW1pdGlkLFxuICBzdWNjZXNzLFxuICByZXNwb25zZSxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2V0U3VibWlzc2lvbkxpbWl0RXhjZWVlZGVkID0gKGZvcm1JZDogc3RyaW5nKTogU2V0U3VibWlzc2lvbkxpbWl0RXhjZWVlZGVkID0+ICh7XG4gIHR5cGU6ICdTRVRfU1VCTUlTU0lPTl9MSU1JVF9FWENFRURFRCcsXG4gIGZvcm1JZCxcbn0pO1xuXG4vLyBTeXRzdGVtXG5leHBvcnQgY29uc3Qgc2V0U3lzdGVtRXJyb3IgPSAoZm9ybUlkOiBzdHJpbmcsIGVycm9yOiBzdHJpbmcsIGluZm86IHN0cmluZywgc3RhdHVzQ29kZTogbnVtYmVyKTogU2V0U3lzdGVtRXJyb3IgPT4gKHtcbiAgdHlwZTogJ1NFVF9TWVNURU1fRVJST1InLCBmb3JtSWQsIGVycm9yLCBpbmZvLCBzdGF0dXNDb2RlLFxufSk7XG5cbi8vIE1vZGFsXG5leHBvcnQgY29uc3QgcmVzZXRGb3JtID0gKGZvcm1JZDogc3RyaW5nKTogUmVzZXRGb3JtID0+ICh7IHR5cGU6ICdSRVNFVF9GT1JNJywgZm9ybUlkIH0pO1xuZXhwb3J0IGNvbnN0IHRvZ2dsZU1vZGFsID0gKGZvcm1JZDogc3RyaW5nKTogVG9nZ2xlTW9kYWwgPT4gKHsgdHlwZTogJ1RPR0dMRV9GT1JNX01PREFMJywgZm9ybUlkIH0pO1xuZXhwb3J0IGNvbnN0IHRyYWNrQXNNb2RhbEZvcm0gPSAoZm9ybUlkOiBzdHJpbmcpOiBUcmFja0FzTW9kYWxGb3JtID0+ICh7IHR5cGU6ICdUUkFDS19NT0RBTF9GT1JNJywgZm9ybUlkIH0pO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB0eXBlIHsgSnNvblNjaGVtYSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydFxuY29uc3QgYmlyZ2h0VmVyaWZ5U2NoZW1hOiBKc29uU2NoZW1hID0ge1xuICB0eXBlOiAnb2JqZWN0JyxcbiAgcHJvcGVydGllczoge1xuICAgIGFjY291bnQ6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBhZGRyZXNzOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgY29ubmVjdGVkOiB7IHR5cGU6IFsnYm9vbGVhbicsICdzdHJpbmcnLCAnbnVsbCddIH0sXG4gICAgZGlzcG9zYWJsZTogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICBkb21haW46IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBkdXJhdGlvbjogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgIGVycm9yOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgZXJyb3JfY29kZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIHJvbGVfYWRkcmVzczogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICBzdGF0dXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGJpcmdodFZlcmlmeVNjaGVtYTtcbiIsIi8vIEBmbG93XG4vLyBEb2NzXG4vLyBVc2UgdGhlIGZvbGxvd2luZyBVUkxzIHRvIHJldmlldyBkb2N1bWVudGF0aW9uIGFyb3VuZCBicml0ZSB2ZXJpZnkgc2VydmljZVxuLy8gaHR0cHM6Ly93aWtpLmF2YWxhcmEuY29tL2Rpc3BsYXkvTVQvQnJpdGVWZXJpZnkrLStBUEkrQ2FsbHNcbi8vIGh0dHBzOi8vbWlsZXMubWFya2V0aW5nLmF2YWxhcmEuY29tL3N3YWdnZXIvZG9jL2VtYWlsX3ZlcmlmeVxuXG5pbXBvcnQgeyBmZXRjaCwgc2NoZW1hVmFsaWRhdG9yIH0gZnJvbSAnQGF2YWxhcmEtbXRnL2hlbHBlcnMvbGliL3NoYXJlZCc7XG5cbmltcG9ydCBjb25maWcgZnJvbSAnLi4vY29uZmlnJztcblxuLy8gTG9nZ2luZ1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlci1hcGknO1xuXG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBicml0ZVZlcmlmeVJlc3BvbnNlLCBlbWFpbFZlcmlmeUZhaWxlZCwgZW1haWxWZXJpZnlTdWNjZXNzLCBzZXRJbnB1dENhcHR1cmVJbnZhbGlkLCBzZXRJbnB1dENhcHR1cmVWYWxpZCxcbn0gZnJvbSAnLi4vbGliL2FjdGlvbnMnO1xuXG4vLyBTY2hlbWFcbmltcG9ydCBicml0ZVZlcmlmeVNjaGVtYSBmcm9tICcuLi9zY2hlbWEvYnJpdGUtdmVyaWZ5JztcblxuLy8gQVBJIFNldHRpbmdzXG5pbXBvcnQgQVBJX1NFVFRJTkdTIGZyb20gJy4uL3NoYXJlZC9hcGktc2V0dGluZ3MnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJy4uL2xpYi90eXBlcy9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgUmVzdWx0IH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgQnJpdGVWZXJpZnlSZXNwb25zZUZhaWwsIEJyaXRlVmVyaWZ5UmVzcG9uc2VTdWNjZXNzIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IG1hcmtldGluZ0FQSSA9IGNvbmZpZy5NSUxFU19BUEk7XG5cbi8vIEFQSSBzaG91bGQgdGVjaG5pY2FsbHkgYWx3YXlzIHJldHVybiBzdWNjZXNzICgyMDApLCBob3dldmVyLCBlcnJvcnMgYXJlIHJlZmxlY3RlZCBpbiB0aGUgcmVzcG9uc2UgcmVzcG9uc2UudmFsdWUuc3RhdHVzXG5leHBvcnQgY29uc3QgYnJpdGVWZXJpZnlFbWFpbEFkZHJlc3NWYWxpZGF0aW9uID0gYXN5bmMgKGRpc3BhdGNoOiBEaXNwYXRjaCwgZm9ybUlkOiBzdHJpbmcsIGlucHV0SWQ6IHN0cmluZywgZW1haWw6IHN0cmluZyB8IG51bGwgPSBudWxsLCB0ZXN0aW5nOiBib29sZWFuID0gZmFsc2UpID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGlmICghZW1haWwgfHwgZW1haWwgPT09IG51bGwpIHtcbiAgICAvLyBMb2cgdG8gaXNzdWVzIGZvdW5kIGluIHByZS1wcm9jZXNzIHRvIFN1bW9cbiAgICBsb2dnZXIoe1xuICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICBtc2dUeXBlOiAnQnJpdGVWZXJpZnlFbWFpbFZhbGlkYXRpb24nLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiAnRW1haWwgbm90IGZvdW5kIGR1cmluZyBBUEkgcHJvY2Vzczogbm8gZW1haWwgZm91bmQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH0vLyBEbyBub3QgcHJvY2VzcyBBUEkgaWYgdGhlcmUgaXMgbm8gZW1haWwgYWRkcmVzcy5cblxuICBsZXQgdXNlckVtYWlsID0gZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKTtcbiAgdXNlckVtYWlsID0gdXNlckVtYWlsLnRyaW0oKTtcbiAgY29uc3QgcmVxdWVzdFVybCA9IGAke21hcmtldGluZ0FQSX0vZW1haWwvdmVyaWZ5P3VzZXJfZW1haWw9JHt1c2VyRW1haWx9YDtcblxuICBjb25zdCByZXNwb25zZTogUmVzdWx0PEJyaXRlVmVyaWZ5UmVzcG9uc2VTdWNjZXNzIHwgQnJpdGVWZXJpZnlSZXNwb25zZUZhaWw+ID0gYXdhaXQgZmV0Y2gocmVxdWVzdFVybCwge1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICB9LFxuICB9LCBBUElfU0VUVElOR1MudGltZW91dCkudGhlbigocmVzdWx0KSA9PiByZXN1bHQpO1xuXG4gIHdpbmRvdy5hdmEgPSB3aW5kb3cuYXZhIHx8IHt9O1xuICBjb25zdCB7IGJyaXRlVmVyaWZ5IH0gPSB3aW5kb3cuYXZhIHx8IHsgYnJpdGVWZXJpZnk6IHt9IH07XG4gIHdpbmRvdy5hdmEuYnJpdGVWZXJpZnkgPSB7XG4gICAgLi4uYnJpdGVWZXJpZnksXG4gICAgW3VzZXJFbWFpbF06IHtcbiAgICAgIGVuZHBvaW50OiByZXF1ZXN0VXJsLFxuICAgICAgcmVzcG9uc2UsXG4gICAgfSxcbiAgfTtcblxuICBpZiAodGVzdGluZykge1xuICAgIC8vIFJldHVybiByZXNwb25zZSBpcyBtYWlubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlc1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICB9XG5cbiAgbG9nZ2VyKHtcbiAgICBsZXZlbDogJ2luZm8nLFxuICAgIG1zZ1R5cGU6ICdCcml0ZVZlcmlmeUVtYWlsVmFsaWRhdGlvbicsXG4gICAgZm9ybUlkLFxuICAgIGRhdGE6IHtcbiAgICAgIG1lc3NhZ2U6IGBTY2hlbWEgdmFsaWRhdGlvbiBmb3IgYnJpdGUgdmVyaWZ5LiBEYXRhOiAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlKX1gLFxuICAgIH0sXG4gIH0pO1xuICAvLyBSdW4gc2NoZW1hIHZhbGlkYXRpb25cbiAgY29uc3Qgc2NoZW1hVmFsaWRhdGlvblJlc3BvbnNlID0gc2NoZW1hVmFsaWRhdG9yKGJyaXRlVmVyaWZ5U2NoZW1hLCByZXNwb25zZSk7XG5cbiAgaWYgKHNjaGVtYVZhbGlkYXRpb25SZXNwb25zZSAmJiAhc2NoZW1hVmFsaWRhdGlvblJlc3BvbnNlLm9rKSB7XG4gICAgLy8gU2lsZW50bHkgZmFpbCBzY2hlbWEsIGRvIG5vdCBpbnRlcnJ1cHQgdXNlciwgc2VudCB0byBTdW1vIGZvciBsb2dnaW5nXG4gICAgbG9nZ2VyKHtcbiAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgbXNnVHlwZTogJ0JyaXRlVmVyaWZ5UmVzcG9uc2VWYWxpZGF0aW9uJyxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ0Vycm9yIHdpdGggYnJpdGUgdmVyaWZ5IHJlc3BvbnNlIHNjaGVtYSB2YWxpZGF0aW9uJyxcbiAgICAgICAgcmVzcG9uc2U6IEpTT04uc3RyaW5naWZ5KHNjaGVtYVZhbGlkYXRpb25SZXNwb25zZSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgcmV0dXJuZWQgaW5mb3JtYXRpb24gdG8gYmUgdmFsaWQuIEFueSBvdGhlciBzdGF0dXMgaXMgY29uc2lkZXJlZCBmYWlsZWRcbiAgLy8gRGlzcGF0Y2ggZmFpbHVyZSB0byByZWR1eCByZWR1Y2VyIHJlZHVjZXIvZm9ybXMuanMgaWYgbm8gcmVzcG9uc2UgaXMgZm91bmRcbiAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UudmFsdWUpIHtcbiAgICBsZXQgZG9tYWluID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIGRvbWFpbiA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gRG8gbm90aGluZztcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICBhY2NvdW50OiAnJyxcbiAgICAgIGFkZHJlc3M6IHVzZXJFbWFpbCxcbiAgICAgIGNvbm5lY3RlZDogbnVsbCxcbiAgICAgIGRpc3Bvc2FibGU6IGZhbHNlLFxuICAgICAgZG9tYWluLFxuICAgICAgZHVyYXRpb246IDEsXG4gICAgICByb2xlX2FkZHJlc3M6IGZhbHNlLFxuICAgICAgc3RhdHVzOiAndW5rbm93bicsXG4gICAgfTtcbiAgICBsb2dnZXIoe1xuICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICBtc2dUeXBlOiAnQnJpdGVWZXJpZnlSZXNwb25zZVZhbGlkYXRpb24nLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiAnRXJyb3Igd2l0aCBicml0ZSB2ZXJpZnkgcmVzcG9uc2UsIG5vIHZhbHVlJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZGlzcGF0Y2goc2V0SW5wdXRDYXB0dXJlVmFsaWQoZm9ybUlkLCBpbnB1dElkKSk7XG4gICAgZGlzcGF0Y2goZW1haWxWZXJpZnlTdWNjZXNzKHZhbHVlLCByZXF1ZXN0VXJsKSk7XG4gICAgZGlzcGF0Y2goYnJpdGVWZXJpZnlSZXNwb25zZSh1c2VyRW1haWwsIHZhbHVlLCB2YWx1ZS5zdGF0dXMsIHJlcXVlc3RVcmwpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEaXNwYXRjaCBmYWlsdXJlIHRvIHJlZHV4IHJlZHVjZXIgcmVkdWNlci9mb3Jtcy5qc1xuICBpZiAocmVzcG9uc2UudmFsdWUgJiYgcmVzcG9uc2UudmFsdWUuc3RhdHVzID09PSAnaW52YWxpZCcpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gcmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsdWUgJiYgcmVzcG9uc2UudmFsdWUuZXJyb3IgPyByZXNwb25zZS52YWx1ZS5lcnJvciA6ICdJbnZhbGlkIGVtYWlsJztcbiAgICBkaXNwYXRjaChlbWFpbFZlcmlmeUZhaWxlZChmb3JtSWQsIHVzZXJFbWFpbCwgaW5wdXRJZCwgcmVzcG9uc2UudmFsdWUpKTtcbiAgICBkaXNwYXRjaChzZXRJbnB1dENhcHR1cmVJbnZhbGlkKGZvcm1JZCwgaW5wdXRJZCwgbWVzc2FnZSkpOyAvLyBQbGFjZSBhZnRlciB2ZXJpZmllZCBmYWlsZWQgdG8gY2FwdHVyZSBtZXNzYWdlIGFuZCB0cmFuc2xhdGUgaWYgbmVlZGVkXG4gICAgZGlzcGF0Y2goYnJpdGVWZXJpZnlSZXNwb25zZSh1c2VyRW1haWwsIHJlc3BvbnNlLnZhbHVlLCAnZmFpbCcsIHJlcXVlc3RVcmwpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpc1N0YXR1cyA9IHJlc3BvbnNlLnZhbHVlICYmIHJlc3BvbnNlLnZhbHVlLnN0YXR1cyA/IHJlc3BvbnNlLnZhbHVlLnN0YXR1cyA6ICd1bmtub3duJztcbiAgZGlzcGF0Y2goc2V0SW5wdXRDYXB0dXJlVmFsaWQoZm9ybUlkLCBpbnB1dElkKSk7XG4gIGRpc3BhdGNoKGVtYWlsVmVyaWZ5U3VjY2VzcyhyZXNwb25zZS52YWx1ZSwgcmVxdWVzdFVybCkpO1xuICBkaXNwYXRjaChicml0ZVZlcmlmeVJlc3BvbnNlKHVzZXJFbWFpbCwgcmVzcG9uc2UudmFsdWUsIGlzU3RhdHVzLCByZXF1ZXN0VXJsKSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBicml0ZVZlcmlmeUVtYWlsQWRkcmVzc1ZhbGlkYXRpb247XG4iLCIvLyBAZmxvdyBzdHJpY3QtbG9jYWxcblxudHlwZSBFcnJvck1lc3NhZ2VzID0ge1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmcsXG59XG5cbmNvbnN0IGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZXMgPSB7XG4gIEFERFJFU1M6ICdQbGVhc2UgZW50ZXIgeW91ciBhZGRyZXNzJyxcbiAgQUREUkVTUzE6ICdQbGVhc2UgZW50ZXIgeW91ciBhZGRyZXNzJyxcbiAgQ09VTlRSWTogJ1BsZWFzZSBlbnRlciB5b3VyIGNvdW50cnknLFxuICBDSVRZOiAnUGxlYXNlIGVudGVyIGEgY2l0eScsXG4gIEZJUlNUTkFNRTogJ1BsZWFzZSBlbnRlciB5b3VyIGZpcnN0IG5hbWUnLFxuICBMQVNUTkFNRTogJ1BsZWFzZSBlbnRlciB5b3VyIGxhc3QgbmFtZScsXG4gIFBIT05FOiAnUGxlYXNlIGVudGVyIHlvdXIgcGhvbmUgbnVtYmVyJyxcbiAgUE9TVEFMQ09ERTogJ1BsZWFzZSBlbnRlciB5b3VyIHBvc3RhbCBjb2RlJyxcbiAgU1RBVEU6ICdQbGVhc2UgZW50ZXIgeW91ciBzdGF0ZScsXG4gIFRFTEVQSE9ORTogJ1BsZWFzZSBlbnRlciB5b3VyIHRlbGVwaG9uZSBudW1iZXInLFxuICBWQVROVU1CRVI6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBWQVQgbnVtYmVyJyxcbiAgWklQOiAnUGxlYXNlIGVudGVyIHlvdXIgemlwJyxcbiAgWklQQ09ERTogJ1BsZWFzZSBlbnRlciB5b3VyIHppcCBjb2RlJyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVycm9yTWVzc2FnZXM7XG4iLCIvLyBAZmxvdyBzdHJpY3QtbG9jYWxcblxuZXhwb3J0IHR5cGUgUmVnRXhwVmFsaWRhdGlvbiA9IHtcbiAgW2tleTogc3RyaW5nXTogUmVnRXhwLFxufVxuXG4vLyBFTUFJTCBub3QgaW5jbHVkZXMgZHVlIHRvIG11bHRpIHZhbGlkYXRpb24gcmVxdWlyZW1lbnRzXG5cbmV4cG9ydCBjb25zdCBhZGRyZXNzQ2hlY2sgPSAvW0EtYS16WjAtOS4gXFwtKCkjLCBdezIsfSQvaTtcbmV4cG9ydCBjb25zdCBhbHBoYUNoZWNrID0gL14oW2Etei1dKyQpL2k7XG5leHBvcnQgY29uc3QgYWxwaGFDaGVja1dpdGhTcGFjZSA9IC9eW2EteiBdezIsfSQvaTtcbmV4cG9ydCBjb25zdCBhbHBoYU5hbWVDaGVjayA9IC9eW0EtWmEtei4gLV17Mix9JC9pO1xuZXhwb3J0IGNvbnN0IGFscGhhTnVtZXJpY0NoZWNrID0gL15bYS16MC05LV0rJC9pO1xuZXhwb3J0IGNvbnN0IGFscGhhVXBwZXJDaGVjayA9IC9eW0EtWi1dKyQvZztcbmV4cG9ydCBjb25zdCBjaXR5Q2hlY2sgPSBhZGRyZXNzQ2hlY2s7XG5leHBvcnQgY29uc3QgY29tcGFueUNoZWNrID0gL1sjQCQlXiYqKCk8PjtcIis9XS9pO1xuLyoqXG5UaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmZvcmNlcyB0aGUgZm9sbG93aW5nIHJ1bGVzIGZvciBlbWFpbCBhZGRyZXNzZXM6XG5cblRoZSBlbWFpbCBhZGRyZXNzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTQgY2hhcmFjdGVycyBpbiBsZW5ndGggKGluY2x1c2l2ZSkuXG5UaGUgbG9jYWwgcGFydCAoYmVmb3JlIHRoZSBAIHN5bWJvbCkgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoIChpbmNsdXNpdmUpLlxuVGhlIGxvY2FsIHBhcnQgbWF5IG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgZG90cywgdW5kZXJzY29yZXMsIHNsYXNoZXMsIHBsdXMgc2lnbnMsIGFuZCBoeXBoZW5zLlxuVGhlIGxvY2FsIHBhcnQgbWF5IG5vdCBjb250YWluIGNvbnNlY3V0aXZlIGlkZW50aWNhbCBzcGVjaWFsIGNoYXJhY3RlcnMgKGUuZy4sIFwiKytcIiwgXCIvL1wiLCBcIi0tXCIpLlxuVGhlIGRvbWFpbiBuYW1lIChhZnRlciB0aGUgQCBzeW1ib2wpIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA2MyBjaGFyYWN0ZXJzIGluIGxlbmd0aCAoaW5jbHVzaXZlKS5cblRoZSBkb21haW4gbmFtZSBtYXkgb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoeXBoZW5zLlxuVGhlIHRvcC1sZXZlbCBkb21haW4gKGUuZy4sIFwiLmNvbVwiLCBcIi5uZXRcIikgbXVzdCBiZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgbG9uZyBhbmQgbWF5IGJlIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHN1YmRvbWFpbnMgKGUuZy4sIFwiLmNvLnVrXCIpLlxuICovXG5leHBvcnQgY29uc3QgZW1haWxDaGVjayA9IC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC87XG5leHBvcnQgY29uc3QgbGVuZ3RoQ2hlY2sxID0gL14oW2EtejAtOV0pezEsfS9pO1xuZXhwb3J0IGNvbnN0IG51bWVyaWNDaGVjayA9IC9eWzAtOSBdKiQvaTtcbmV4cG9ydCBjb25zdCBub051bWJlcnNDaGVjayA9IC8oPzpbMC05XSkrL2k7XG5leHBvcnQgY29uc3Qgb25lQWxwaGFPbmVOdW1lcmljUmVxdWlyZWQgPSAvKFthLXpdKXsxLH0oWzAtOV0pezEsfShbYS16MC05XSl7Mix9L2dpOyAvLyBNdXN0IGluY2x1ZGUgb25lIGFscGhhIGFuZCAxIG51bWVyaWMgdG8gcGFzc1xuZXhwb3J0IGNvbnN0IHBob25lQ2hlY2sgPSAvWzAtOV17MTEsfSQvaTsgLy8gVG8gaW5jbHVkZSBkaWFsQ29kZVxuZXhwb3J0IGNvbnN0IHBvc3RhbENoZWNrID0gL15bYS16QS1aMC05XFwtIF17NCx9JC87XG5leHBvcnQgY29uc3QgU3RhdGVQcm92aWNlQ2hlY2sgPSAvW14wLTk8PjtdezIsfSQvaTtcbmV4cG9ydCBjb25zdCB4c3NQcmV2ZW50ID0gL1sqP14kOnt9KCkhW1xcXVxcXFw8Pj07ISMlYCZcXFxcL2B8fl0vaTtcbmV4cG9ydCBjb25zdCB3ZWJzaXRlVmFsaWRhdGlvbiA9IC9eKChodHRwfGh0dHBzKTpcXC9cXC8pPyhbYS16MC05XFwtX10rXFwuKT9bYS16MC05XFwtX10rXFwuW2Etel17Mix9KD8hLio/XFwuXFwuKVthLXowLTkvLV8uXSokL2k7XG5leHBvcnQgY29uc3QgZW1vamlWYWxpZGF0aW9uID0gL1tcXHV7MWYzMDB9LVxcdXsxZjVmZn1cXHV7MWY5MDB9LVxcdXsxZjlmZn1cXHV7MWY2MDB9LVxcdXsxZjY0Zn1cXHV7MWY2ODB9LVxcdXsxZjZmZn1cXHV7MjYwMH0tXFx1ezI2ZmZ9XFx1ezI3MDB9LVxcdXsyN2JmfVxcdXsxZjFlNn0tXFx1ezFmMWZmfVxcdXsxZjE5MX0tXFx1ezFmMjUxfVxcdXsxZjAwNH1cXHV7MWYwY2Z9XFx1ezFmMTcwfS1cXHV7MWYxNzF9XFx1ezFmMTdlfS1cXHV7MWYxN2Z9XFx1ezFmMThlfVxcdXszMDMwfVxcdXsyYjUwfVxcdXsyYjU1fVxcdXsyOTM0fS1cXHV7MjkzNX1cXHV7MmIwNX0tXFx1ezJiMDd9XFx1ezJiMWJ9LVxcdXsyYjFjfVxcdXszMjk3fVxcdXszMjk5fVxcdXszMDNkfVxcdXswMGE5fVxcdXswMGFlfVxcdXsyMTIyfVxcdXsyM2YzfVxcdXsyNGMyfVxcdXsyM2U5fS1cXHV7MjNlZn1cXHV7MjViNn1cXHV7MjNmOH0tXFx1ezIzZmF9XS91O1xuXG5jb25zdCBSRUdFWFA6IFJlZ0V4cFZhbGlkYXRpb24gPSB7XG4gIEFERFJFU1M6IGFkZHJlc3NDaGVjaywgLy8gQWxwaGEgbnVtZXJpYyBjaGVja1xuICBBRERSRVNTMTogYWRkcmVzc0NoZWNrLCAvLyBBbHBoYSBudW1lcmljIGNoZWNrXG4gIEFQUE9JTlRNRU5UREFURVRJTUU6IC9bMC05XS9pLFxuICBDT01QQU5ZOiBjb21wYW55Q2hlY2ssIC8vIFNpbWlsYXJ0IHRvIHhzc1ByZXZlbnQgYnV0IHdpdGggbW9yZSB2YWx1ZXNcbiAgQ09VTlRSWTogYWxwaGFDaGVja1dpdGhTcGFjZSwgLy8gQWxwaGEgb25seSB3aXRoIHNwYWNlIGNoZWNrXG4gIENJVFk6IGNpdHlDaGVjaywgLy8gS2VlcCBzZXBlcmF0ZSB1bnRpbCBtb3JlIHZhcmlhYmxlcyBuZWVkZWRcbiAgQ1dFQlNJVEU6IHdlYnNpdGVWYWxpZGF0aW9uLCAvLyBXZWJzaXRlIGNoZWNrXG4gIERFRkFVTFQ6IGxlbmd0aENoZWNrMSwgLy8gQWxwaGEgb25seSBjaGVja1xuICBFTUFJTDogZW1haWxDaGVjaywgLy8gZW1haWwgcmVnZXhcbiAgRU1PSkk6IGVtb2ppVmFsaWRhdGlvbiwgLy8gZW1vamkgcmVnZXhcbiAgTkFNRTogbm9OdW1iZXJzQ2hlY2ssIC8vIG5vIG51bWJlcnNcbiAgUEhPTkU6IHBob25lQ2hlY2ssIC8vIE51bWVyaWMgb25seSBjaGVja1xuICBQT1NUQUxDT0RFOiBwb3N0YWxDaGVjaywgLy8gQWxwaGEgbnVtZXJpYyBjaGVja1xuICBQUk9WSU5DRTogYWxwaGFOYW1lQ2hlY2ssIC8vIEFscGhhIHdpdGggc3BhY2VcbiAgUkVHSU9OOiBhbHBoYU5hbWVDaGVjaywgLy8gQWxwaGEgd2l0aCBzcGFjZVxuICBTVEFURTogU3RhdGVQcm92aWNlQ2hlY2ssIC8vIFhTUyBleGNsdWRlXG4gIFRFTEVQSE9ORTogbnVtZXJpY0NoZWNrLCAvLyBOdW1lcmljIGNoZWNrXG4gIFhTU0NIRUNLOiB4c3NQcmV2ZW50LCAvLyBJbnZhbGlkYXRlIG9uIFhTUyBUaHJlYXQgbWF0cml4XG4gIFpJUDogcG9zdGFsQ2hlY2ssIC8vIEFscGhhIG51bWVyaWMgY2hlY2tcbiAgWklQQ09ERTogcG9zdGFsQ2hlY2ssIC8vIEFscGhhIG51bWVyaWMgY2hlY2tcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJFR0VYUDtcbiIsIi8vIEBmbG93XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHsgY2hlY2tJZklzVGVzdGluZyB9IGZyb20gJ0BhdmFsYXJhLW10Zy9oZWxwZXJzL2xpYi91aSc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2FwaS9sb2dnZXItYXBpJztcblxuLy8gU2VydmljZVxuaW1wb3J0IHsgYnJpdGVWZXJpZnlFbWFpbEFkZHJlc3NWYWxpZGF0aW9uIH0gZnJvbSAnLi4vYXBpL2JyaXRlLXZlcmlmeSc7XG5cbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGNhcHR1cmVJbnB1dCwgc2V0SW5wdXRDYXB0dXJlSW52YWxpZCwgc2V0SW5wdXRDYXB0dXJlVmFsaWQsIHVwZGF0ZUR5bmFtaWNSZXF1aXJlZEZpZWxkLFxufSBmcm9tICcuLi9saWIvYWN0aW9ucyc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoIH0gZnJvbSAnLi4vbGliL3R5cGVzL2FjdGlvbnMnO1xuaW1wb3J0IHR5cGUge1xuICBDYXB0dXJlZEZpZWxkcywgRXJyb3JGaWVsZCwgRm9ybURlZmF1bHRDb25maWdzLCBIYXNFcnJvckZpZWxkcywgU2luZ2xlQ2FwdHVyZUZpZWxkLCBKc29uRmllbGRzLCBTZXRKc29uRmllbGQsIFNpbmdsZUpzb25GaWVsZCwgRm9ybUF0dHJpYnV0ZXMsXG59IGZyb20gJy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IElucHV0VGFyZ2V0IH0gZnJvbSAnLi4vbGliL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcbmltcG9ydCB0eXBlIHsgVXNlckluZm8gfSBmcm9tICcuLi9saWIvdHlwZXMvdXNlcic7XG5cbi8vIENvbnN0YW50c1xuaW1wb3J0IEVSUk9STUVTU0FHRVMgZnJvbSAnLi4vY29uc3RhbnRzL2Vycm9yLW1lc3NhZ2VzJztcbmltcG9ydCBSRUdFWFBfVkFMSURBVElPTiBmcm9tICcuLi9jb25zdGFudHMvcmVnZXhwJztcblxuLy8gSGVscGVyIHRvIHNldCBmaWVsZHMgdG8gaW5mb3JtYXRpb24gZnJvbSBsb2dnZWQgaW4gQVdQIHVzZXJcbi8vIEByZXR1cm4geyB2b2lkIH1cbmV4cG9ydCBjb25zdCBjYXB0dXJlVXNlckluZm8gPSAoZGlzcGF0Y2g6IERpc3BhdGNoLCBmaWVsZHM6IEpzb25GaWVsZHMsIHVzZXJJbmZvOiBVc2VySW5mbywgZm9ybUlkOiBzdHJpbmcpID0+IGZpZWxkcy5mb3JFYWNoKChmKSA9PiB7XG4gIGlmICghdXNlckluZm8pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoZikpIHtcbiAgICBjYXB0dXJlVXNlckluZm8oZGlzcGF0Y2gsIFsuLi5mXSwgdXNlckluZm8sIGZvcm1JZCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG5ld0ZpZWxkID0gZjtcbiAgaWYgKHVzZXJJbmZvW2YuaWRdKSB7XG4gICAgbmV3RmllbGQudmFsdWUgPSB1c2VySW5mb1tmLmlkXTtcbiAgICBkaXNwYXRjaChjYXB0dXJlSW5wdXQoZGlzcGF0Y2gsIGZvcm1JZCwge1xuICAgICAgaWQ6IG5ld0ZpZWxkLmlkLFxuICAgICAgdHlwZTogbmV3RmllbGQudHlwZSB8fCAndGV4dCcsXG4gICAgICB2YWx1ZTogbmV3RmllbGQudmFsdWUsXG4gICAgfSwgZmFsc2UpKTtcbiAgfVxufSk7XG5cbi8vIEFkZCBvciByZW1vdmVzIGZvcm0gcmVxdWlyZW1lbnRzIGJhc2VkIG9uIGR5YW5taWMgZmllbGRzIGJlaW5nIGFkZGVkIG9yIHJlbW92ZWRcbmV4cG9ydCBjb25zdCBjYXB0dXJlRHluYW1pY3NSZXF1aXJlZEZpZWxkcyA9IChkaXNwYXRjaDogRGlzcGF0Y2gsIGZvcm1JZDogc3RyaW5nLCB0YXJnZXQ6IHsgdmFsdWU6IHN0cmluZyB9LCBkeW5hbWljRmllbGRzOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PFNldEpzb25GaWVsZD4gfSk6IHZvaWQgPT4ge1xuICBjb25zdCB7IHZhbHVlIH0gPSB0YXJnZXQ7XG4gIGNvbnN0IGFsbFZhbHVlcyA9IE9iamVjdC5rZXlzKGR5bmFtaWNGaWVsZHMpO1xuICBjb25zdCBhZGQgPSBbXTtcbiAgY29uc3QgcmVtb3ZlID0gW107XG4gIGNvbnN0IHNldFVwZGF0ZUZpZWxkRHluYW1pY3NBcnJheXMgPSAoZmllbGRzQXJyYXk6IEFycmF5PFNldEpzb25GaWVsZD4sIGFkZFJlcXVpcmVkOiBib29sZWFuID0gdHJ1ZSkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkc0FycmF5W2ldKSkge1xuICAgICAgICBzZXRVcGRhdGVGaWVsZER5bmFtaWNzQXJyYXlzKGZpZWxkc0FycmF5W2ldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgcmVxdWlyZWQgfSA9IGZpZWxkc0FycmF5W2ldO1xuICAgICAgICBjb25zdCBjaGlsZElkID0gZmllbGRzQXJyYXlbaV0uaWQ7XG4gICAgICAgIHJlbW92ZS5wdXNoKGNoaWxkSWQpO1xuICAgICAgICAvLyBGbG93IHJlcXVpcmVtZW50IGZvciBudWxsIGNoZWNrXG4gICAgICAgIGlmIChhZGRSZXF1aXJlZCAmJiByZXF1aXJlZCAhPSBudWxsICYmIHJlcXVpcmVkKSBhZGQucHVzaChjaGlsZElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8vIGl0ZXJhdGUgdGhyb3VnaCBhbGwgZmllbGRzIHRvIHJlbW92ZSBhbGwgdGhvc2UgcHJldmlvdXNseSBzZXRcbiAgYWxsVmFsdWVzLmZvckVhY2goKGspID0+IHtcbiAgICAvLyBCb29sZWFuIHdpbGwgb25seSBzZXQgYWRkLCB3aGVuIGl0IGlzIHRoZSBhcnJheSBrZXkgZXF1YWwgdGhlIHZhbHVlIHBhc3NlZCBpbi5cbiAgICBzZXRVcGRhdGVGaWVsZER5bmFtaWNzQXJyYXlzKGR5bmFtaWNGaWVsZHNba10sIEJvb2xlYW4oayA9PT0gdmFsdWUpKTtcbiAgfSk7XG5cbiAgZGlzcGF0Y2godXBkYXRlRHluYW1pY1JlcXVpcmVkRmllbGQoZm9ybUlkLCBhZGQsIHJlbW92ZSkpO1xufTtcblxuLy8gSGVscGVyIHRvIGNsZWFuIHRoZSBmaWVsZCB2YWx1ZXMgYXMgbmVlZGVkXG4vLyBAcmV0dXJuIHsgc3RyaW5nIH1cbmV4cG9ydCBjb25zdCBjbGVhbkZpZWxkVmFsdWUgPSAodmFsdWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHN0cmlwU3BhY2VzRnJvbUZpZWxkID0gWydmaXJzdE5hbWUnLCAnbGFzdE5hbWUnLCAnZW1haWwnLCAncGFydG5lcl9yZXBfZW1haWwnXTtcbiAgaWYgKHN0cmlwU3BhY2VzRnJvbUZpZWxkLmluY2x1ZGVzKGlkKSkge1xuICAgIHJldHVybiB2YWx1ZS50cmltKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gSGVscGVyIHRvIGNoZWNrIHRoZSBmaWVsZHMgYXJyYXkgZm9yIGEgZmllbGQgYnkgaWQuXG4vLyBAcmV0dXJuIHsgYm9vbGVhbiB9XG5leHBvcnQgY29uc3QgY2hlY2tJZkZpZWxkSXNTZXQgPSAoZmllbGRzOiBBcnJheTx7IGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT4gPSBbXSwgaWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4gQm9vbGVhbigoZmllbGRzLmZpbHRlcigoZikgPT4gZi5pZCA9PT0gaWQpKS5sZW5ndGggPiAwKTtcblxuLy8gQ2hlY2tzIHRvIHNlZSBpZiB0aGUgaWQgb2YgdGhlIGZpZWxkIGlzIGluIHRoZSBoYXNFcnJvciBBcnJheVxuLy8gcmV0dXJuIEB7Qm9vbGVhbn1cbmV4cG9ydCBjb25zdCBjaGVja0lmSGFzRXJyb3IgPSAoaWQ6IHN0cmluZywgZmllbGRzOiBIYXNFcnJvckZpZWxkcyk6IEVycm9yRmllbGQgfCBmYWxzZSA9PiB7XG4gIGlmICghZmllbGRzKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGZpZWxkcy5maWx0ZXIoKGYpID0+IGYuaWQgPT09IGlkKS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoKGYpID0+IGYuaWQgPT09IGlkKVswXTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBIZWxwZXIgdG8gYWxsb3cgR0RQUiB0byBiZSBzZXQgaW5zaWRlIGEgZmllbGQgY29udGFpbmVyIG90aGVyIHRoYW4gdGhlIHN1Ym1pdFxuZXhwb3J0IGNvbnN0IGNvbnRhaW5zR2RwckZpZWxkID0gKGlkOiBzdHJpbmcsIGdkcHJGaWVsZDogc3RyaW5nKSA9PiBCb29sZWFuKGlkID09PSBnZHByRmllbGQpO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0Rm9ybVRlbXBsYXRlTmFtZSA9IChmb3JtTmFtZT86IHN0cmluZyB8IG51bGwgPSBudWxsLCBuYW1lPzogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiBzdHJpbmcgPT4ge1xuICBpZiAobmFtZSAhPT0gbnVsbCkgcmV0dXJuIG5hbWUucmVwbGFjZSgvW1xcV1xcLV8gXSsvZywgJycpLnRvVXBwZXJDYXNlKCk7XG4gIGlmIChmb3JtTmFtZSAhPT0gbnVsbCkgcmV0dXJuIGZvcm1OYW1lLnJlcGxhY2UoL1tcXFdcXC1fIF0rL2csICcnKS50b1VwcGVyQ2FzZSgpO1xuICByZXR1cm4gJyc7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gbG9vcCB0aHJvdWdoIHRoZSBhY3RpdmUgZm9ybSBkYXRhIGFuZCBvYnRhaW4gdGhlIEpTT04gdG8gcmVuZGVyIHNhaWQgZmllbGRcbi8vIEByZXR1cm4gQE9iamVjdFxuZXhwb3J0IGNvbnN0IGdldEZpZWxkVmFsdWVPYmplY3QgPSAoZmllbGRzOiBDYXB0dXJlZEZpZWxkcywgaWQ6IHN0cmluZyk6IFNpbmdsZUNhcHR1cmVGaWVsZCA9PiBmaWVsZHMuZmlsdGVyKChmKSA9PiBmLmlkID09PSBpZClbMF0gfHwgeyB2YWx1ZTogJycgfTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGZvcm1hdGUgY2FwdHVyZWQgZGF0ZSB0aW1lXG4vLyBAcmV0dXJuIHsgU3RyaW5nIH1cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWREYXRlID0gKHNlbGVjdGVkRGF0ZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShzZWxlY3RlZERhdGUpO1xuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgbGV0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpO1xuICBtaW51dGVzID0gbWludXRlcy5sZW5ndGggPiAxID8gbWludXRlcyA6IGAwJHttaW51dGVzfWA7XG5cbiAgbGV0IG1vbnRoID0gKDEgKyBkYXRlLmdldE1vbnRoKCkpLnRvU3RyaW5nKCk7XG4gIG1vbnRoID0gbW9udGgubGVuZ3RoID4gMSA/IG1vbnRoIDogYDAke21vbnRofWA7XG5cbiAgbGV0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCk7XG4gIGRheSA9IGRheS5sZW5ndGggPiAxID8gZGF5IDogYDAke2RheX1gO1xuXG4gIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX0gJHtob3Vyc306JHttaW51dGVzfWA7XG59O1xuXG4vLyBIZWxwZXIsIGNoZWNrcyB0aGUgRU5WIHRvIHNldCB0aGUgY291bnRyeSBmb3IgdGVzdGluZyBwdXJwb3NlczpcbmV4cG9ydCBjb25zdCBjaGVja0RlZmF1bHRJbnRsUGhvbmVDb3VudHJ5ID0gKGlzb0NvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsKTogc3RyaW5nID0+IHtcbiAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhdmxyVGVzdGluZycpICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhdmxyVGVzdGluZycpID09PSAndHJ1ZScgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2F2bHJHZW9Mb2NhbGUnKSkge1xuICAgIGNvbnN0IHRlc3RMb2NhbGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXZsckdlb0xvY2FsZScpIHx8ICdVUyc7XG4gICAgcmV0dXJuIHRlc3RMb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKTsgLy8gVXNlIHRlc3RpbmcgaWYgYXZhaWxhYmxlXG4gIH1cbiAgaWYgKGlzb0NvZGUgIT09IG51bGwpIHJldHVybiBpc29Db2RlLnRvTG93ZXJDYXNlKCk7IC8vIFVzZSBpc29Db2RlIGlmIGF2YWlsYWJsZVxuICByZXR1cm4gJ2F1dG8nOyAvLyBkZWZhdWx0IHRvIGF1dG9cbn07XG5cbi8vIEdldCBhbGwgZmllbGQgSURzXG4vLyBAcmV0dXJuIHsgYXJyYXkgfVxuZXhwb3J0IGNvbnN0IGdldEZpZWxkSWRzID0gKGZpZWxkczogQXJyYXk8U2luZ2xlSnNvbkZpZWxkPiwgZmllbGRJZHM6IEFycmF5PHN0cmluZz4gPSBbXSkgPT4ge1xuICBpZiAoIWZpZWxkcykgcmV0dXJuIFtdO1xuXG4gIGZpZWxkcy5mb3JFYWNoKChmOiBTaW5nbGVKc29uRmllbGQpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmKSkge1xuICAgICAgZmllbGRJZHMuY29uY2F0KGdldEZpZWxkSWRzKFsuLi5mXSwgZmllbGRJZHMpKTtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGYpKSB7XG4gICAgICBmaWVsZElkcy5wdXNoKGYuaWQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmaWVsZElkcztcbn07XG5cbi8vIEhlbHBlciB0byBlbmFibGUvZGlzYWJsZSBzdWJtaXQgYnV0dG9uXG4vLyBAcmV0dXJuIHsgYm9vbGVhbiB9XG4vLyBVcGRhdGVkIHRvIGxvb2sgdGhyb3VnaCBjYXB0dXJlZCBhbmQgcmVxdXJlZCBleHBsaWNpdGx5IHNpbmNlIHVzaW5nIGEgY291bnQgY2FuIGJlIGNvbnN0cnVkZWQgYXMgc3VjY2VzcyB3aGVuIGJsaW5kIGNhcHR1cmUgaXMgYmVpbmcgY29tcGxldGUuXG4vLyBEJkIsIE1heG1pbmQsIEVsb3F1YSBibGluZCBkYXRhIGNhcHR1cmVzIHdlcmUgY2F1c2luZyB0aGlzIHRvIHJldHVybiB0aGUgd3JvbmcgdmFsdWVcbmV4cG9ydCBjb25zdCBpc1N1Ym1pdERpc2FibGVkID0gKHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LCB2YWxpZGF0ZWRGaWVsZHM6IEFycmF5PHN0cmluZz4pOiBib29sZWFuID0+IHJlcXVpcmVkRmllbGRzLnNvbWUoKHIpID0+ICF2YWxpZGF0ZWRGaWVsZHMuaW5jbHVkZXMocikpO1xuXG4vLyBIZWxwZXIgdG8gYXBwZW5kIHNjcmlwdHMgdG8gcGFnZSBmb3IgdXNhZ2Vcbi8vIEByZXR1cm4geyBudWxsIH1cbmV4cG9ydCBjb25zdCBsb2FkQXNzb2NpYXRlZFNjcmlwdHMgPSAoc2NyaXB0czogQXJyYXk8c3RyaW5nPikgPT4ge1xuICBjb25zdCBwYWdlSGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJyk7XG4gIGlmICghcGFnZUhlYWQgfHwgIXNjcmlwdHMgfHwgKHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggPCAxKSkgcmV0dXJuO1xuXG4gIGNvbnN0IG5ld1BhZ2VIZWFkID0gcGFnZUhlYWRbMF07XG4gIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykge1xuICAgIHNjcmlwdC5zcmMgPSBzY3JpcHRzW2ldO1xuICAgIGxldCBnZXRJZCA9IHNjcmlwdHNbaV0uc3BsaXQoJy8nKTtcbiAgICBnZXRJZCA9ICgoZ2V0SWRbZ2V0SWQubGVuZ3RoIC0gMV0pLnNwbGl0KCcuJylbMF0pLnRvVXBwZXJDYXNlKCk7XG4gICAgc2NyaXB0LmlkID0gYGF2YWZvcm0tc2NyaXB0LSR7Z2V0SWR9YDtcbiAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNjcmlwdC5pZCkpIHtcbiAgICAgIG5ld1BhZ2VIZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuICB9XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gZmluZCB0aGUgdmFsdWUgbmVlZGVkIHRvIGRpc3BsYXkgZmllbGQgdGV4dCBvbiByZW5kZXJcbi8vIElFOiBkaXNwbGF5VGV4dDogXCJGaXJzdCBuYW1lXCIgcGxhY2Vob2xkZXI6IFwiUGxlYXNlIGVudGVyIHlvdXIgZmlyc3QgbmFtZVwiXG4vLyBQbGFjZWhvbGRlciB0ZXh0IGlzIHJlcXVpcmVkLCBidXQgdGhlIHBsYWNlaG9sZGVyIHRleHQgYW5kIGRpc3BsYXlUZXh0IGNhbiBiZSBkaWZmZXJudC5cbi8vIEByZXR1cm4gQFN0cmluZ1xuZXhwb3J0IGNvbnN0IHNldERpc3BsYXlUZXh0ID0gKGRpc3BsYXlUZXh0Pzogc3RyaW5nID0gJycsIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJyk6IHN0cmluZyA9PiB7XG4gIGlmIChkaXNwbGF5VGV4dCAhPT0gbnVsbCAmJiBkaXNwbGF5VGV4dCAhPT0gJycpIHtcbiAgICByZXR1cm4gZGlzcGxheVRleHQ7XG4gIH1cbiAgcmV0dXJuIHBsYWNlaG9sZGVyO1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGFzc2lzdCB3aXRoIHNldHRpbmcgdGhlIGlucHV0IG5hbWUgdmFsdWVcbi8vIEV4OiA8aW5wdXQgbmFtZT1cInNldEZpZWxkTmFtZShuYW1lLCBpZClcIiAvPlxuLy8gQHJldHVybiBAU3RyaW5nXG5leHBvcnQgY29uc3Qgc2V0RmllbGROYW1lID0gKG5hbWU/OiBzdHJpbmcgfCBudWxsID0gbnVsbCwgaWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmIChuYW1lID09PSBudWxsIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIGlkO1xuICB9XG4gIHJldHVybiBuYW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldEZpZWxkT3ZlcndyaXRlQ29uZmlncyA9IChjb25maWdzOiBGb3JtRGVmYXVsdENvbmZpZ3MsIGZpZWxkczogQ2FwdHVyZWRGaWVsZHMpOiBGb3JtRGVmYXVsdENvbmZpZ3MgPT4ge1xuICBjb25zdCBuZXdDb25maWcgPSB7XG4gICAgLi4uY29uZmlncyxcbiAgfTtcbiAgY29uc3Qgb3ZlcndyaXRlVmFsdWVzID0geyBwYXJ0bmVyc291cmNlOiBudWxsLCBjYW1wYWlnbl9pZDogbnVsbCB9O1xuXG4gIGNvbnN0IG92ZXJ3cml0ZSA9IChrZXlzVG9PdmVyd3JpdGUpID0+IHtcbiAgICBPYmplY3Qua2V5cyhrZXlzVG9PdmVyd3JpdGUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IGZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0ga2V5KS5tYXAoKGZpZWxkKSA9PiBmaWVsZC52YWx1ZSk7XG4gICAgICBpZiAoZmllbGRWYWx1ZVswXSkge1xuICAgICAgICAvLyB0aGlzIHN1Z2dzdGlvbiBkb2VzIG5vdCBtYWtlIHNlbnNlLCBpIGFtIG5vdCBkZXN0cnVjdHVyaW5nXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIHByZWZlci1kZXN0cnVjdHVyaW5nICovXG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgbmV3Q29uZmlnW2tleV0gPSBmaWVsZFZhbHVlWzBdO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBvdmVyd3JpdGUoY29uZmlncyk7XG4gIG92ZXJ3cml0ZShvdmVyd3JpdGVWYWx1ZXMpO1xuXG4gIC8vIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuaW5jbHVkZXMoJy91cy9lbi9nZXQtc3RhcnRlZC5odG1sJykpIHtcbiAgLy8gICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgLy8gICBjb25zdCBwb2kgPSBhZG9iZURhdGFMYXllclswXS5wYWdlPy5zdGF0ZT8ucHJldmlvdXNfcGFnZV9wb2k7XG4gIC8vICAgbmV3Q29uZmlnLnBvaSA9IHBvaSB8fCBuZXdDb25maWcucG9pO1xuICAvLyB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBhbGxvdyBjdXN0b20gY2xhc3NlcyB0byBiZSBwYXNzZWQgdG8gdGhlIGZpZWxkIGNvbnRhaW5lci5cbi8vIEpTT04gRGF0YTogWydjbGFzczEnLCAnY2xhc3MyJywgJ2NsYXNzMyddXG4vLyBFeCBvdXRwdXQ6IFwiY2xhc3MxIGNsYXNzMiBjbGFzczNcIlxuLy8gQHJldHVybiBAU3RyaW5nXG5leHBvcnQgY29uc3Qgc2V0QWN0aXZlQ29udGFpbmVyID0gKGFjdGl2ZUZpZWxkOiBzdHJpbmcgfCBudWxsID0gbnVsbCwgaWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHNldENsYXNzID0gW107XG4gIGlmIChhY3RpdmVGaWVsZCAhPT0gbnVsbCAmJiBhY3RpdmVGaWVsZCA9PT0gaWQpIHtcbiAgICBzZXRDbGFzcy5wdXNoKCdhY3RpdmVDb250YWluZXInLCAnYWN0aXZlJyk7XG4gIH1cbiAgcmV0dXJuIHNldENsYXNzLmpvaW4oJyAnKTtcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBhbGxvdyBjdXN0b20gY2xhc3NlcyB0byBiZSBwYXNzZWQgdG8gdGhlIGZpZWxkIGlucHV0LlxuLy8gQHJldHVybiBAU3RyaW5nXG5leHBvcnQgY29uc3Qgc2V0QWN0aXZlSW5wdXRDbGFzcyA9IChhY3RpdmVGaWVsZDogc3RyaW5nIHwgbnVsbCA9IG51bGwsIGlkOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBzZXRDbGFzcyA9IFtdO1xuICBpZiAoYWN0aXZlRmllbGQgIT09IG51bGwgJiYgYWN0aXZlRmllbGQgPT09IGlkKSB7XG4gICAgc2V0Q2xhc3MucHVzaCgnYWN0aXZlJyk7XG4gIH1cbiAgcmV0dXJuIGAke3NldENsYXNzLmpvaW4oJyAnKX0gYDtcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBhbGxvdyBjdXN0b20gY2xhc3NlcyB0byBiZSBwYXNzZWQgdG8gdGhlIGZpZWxkIGF0IHRoZSBpbnB1dCBsZXZlbC5cbi8vIEpTT04gRGF0YTogWydjbGFzczEnLCAnY2xhc3MyJywgJ2NsYXNzMyddXG4vLyBFeCBvdXRwdXQ6IFwiY2xhc3MxIGNsYXNzMiBjbGFzczNcIlxuLy8gQHJldHVybiBAU3RyaW5nXG5leHBvcnQgY29uc3Qgc2V0RmllbGRDbGFzc2VzID0gKGNsYXNzZXM/OiBBcnJheTxzdHJpbmc+KTogc3RyaW5nID0+IHtcbiAgbGV0IG5ld0NsYXNzZXMgPSBbXTtcbiAgaWYgKGNsYXNzZXMpIHtcbiAgICBuZXdDbGFzc2VzID0gY2xhc3NlcztcbiAgfVxuICByZXR1cm4gbmV3Q2xhc3Nlcy5qb2luKCcgJyk7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gcGFzcyBjbGFzcyB0byB0aGUgcGxhY2Vob2xkZXIgdGV4dCBjb250YWluZXJcbi8vIEpTT04gRGF0YTogJ2NsYXNzMSc7XG4vLyBFeCBvdXB1dCAnY2xhc3MxJ1xuLy8gQHJldHVybiBAU3RyaW5nXG5leHBvcnQgY29uc3Qgc2V0SW5wdXRDbGFzcyA9IChzZXRDbGFzczogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiBzdHJpbmcgPT4ge1xuICBpZiAoc2V0Q2xhc3MgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHNldENsYXNzO1xufTtcblxuLy8gSGVscGVyIGNsYXNzIHRvIGFkZCB2YWxpZGF0aW9uIGNsYXNzZXMgdG8gdGhlIGFjdGl2ZSBmaWVsZFxuLy8gQHJldHVybiBAU3RyaW5nXG5leHBvcnQgY29uc3Qgc2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MgPSAoZXJyb3JTdGF0ZTogeyBpZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmd9IHwgZmFsc2UsIGlkOiBzdHJpbmcsIGlzU2V0OiBib29sZWFuLCBoYXNCZWVuVmFsaWRhdGVkOiBBcnJheTxzdHJpbmc+KTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc2V0Q2xhc3MgPSBbXTtcbiAgaWYgKCEhZXJyb3JTdGF0ZSAmJiBlcnJvclN0YXRlLm1lc3NhZ2UpIHtcbiAgICBzZXRDbGFzcy5wdXNoKCdpblZhbGlkJyk7XG4gIH1cbiAgaWYgKGlzU2V0KSB7XG4gICAgc2V0Q2xhc3MucHVzaCgnaXNTZXQnKTtcbiAgfVxuXG4gIGlmICgoIWVycm9yU3RhdGUgfHwgKGVycm9yU3RhdGUgJiYgZXJyb3JTdGF0ZS5tZXNzYWdlID09PSBudWxsKSkgJiYgaXNTZXQgJiYgaGFzQmVlblZhbGlkYXRlZC5pbmNsdWRlcyhpZCkpIHtcbiAgICBzZXRDbGFzcy5wdXNoKCd2YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHNldENsYXNzLmpvaW4oJyAnKTtcbn07XG5cbi8vIEhlbHBlciB0byBzZXQgdGhlIHBhcmVudCB6LWluZGV4IG9mIGEgZm9ybSBob2xkaW5nIGFuIGludGwgcGhvbmUgZWxlbWVudFxuLy8gQHJldHVybiB7IHZvaWQgfVxuZXhwb3J0IGNvbnN0IHNldFBhcmVudFppbmRleCA9IChmb3JtSWQ6IHN0cmluZykgPT4ge1xuICBpZiAoIWZvcm1JZCkgcmV0dXJuO1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1JZCk7XG4gIGlmICghZWwgfHwgIWVsLnN0eWxlKSByZXR1cm47XG4gIGVsLnN0eWxlLnpJbmRleCA9ICcxMCc7XG59O1xuXG4vLyBIZWxwZXIgY2xhc3MgdG8gZ2V0IGVycm9yIG1lc3NhZ2VzIGZyb20gRVJST1JNRVNTQUdFUyBjb25zdGFudFxuLy8gQHJldHVybiBAU3RyaW5nXG5leHBvcnQgY29uc3Qgc2V0RXJyb3JNZXNzYWdlID0gKGlkOiBzdHJpbmcpOiBzdHJpbmcgPT4gRVJST1JNRVNTQUdFU1tpZC5yZXBsYWNlKC9bXFxXXFwtXyBdKy9naSwgJycpLnRvVXBwZXJDYXNlKCldIHx8ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJztcblxuLy8gSGVscGVyIHRvIGFwcGVuZCBjb25uZWN0b3IgaWQgdGhhdCB3YXMgZm91bmQgZHVyaW5nIHNlYXJjaFxuZXhwb3J0IGNvbnN0IHNldFNlYXJjaEZpZWxkVmFsdWUgPSAoc2VhcmNoOiB7IFtrZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9LCBmb3JtSWQ6IHN0cmluZywgZmllbGRzOiBBcnJheTx7IGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT4pID0+IHtcbiAgbGV0IG5ld0ZpZWxkczogQXJyYXk8eyBpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0+ID0gZmllbGRzO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaFtmb3JtSWRdICYmIHNlYXJjaFtmb3JtSWRdLmNvbm5lY3Rvcl9pZCkge1xuICAgIC8vIHNldCBjb25uZWN0b3IgSWQgaWYgaXMgc2V0IGZyb20gc2VhcmNoXG4gICAgZmllbGRzLnB1c2goeyBpZDogJ0NfQ29ubmVjdG9yMScsIHZhbHVlOiBzZWFyY2hbZm9ybUlkXS5jb25uZWN0b3JfaWQgfSk7XG4gIH1cbiAgaWYgKHNlYXJjaCAmJiBzZWFyY2hbZm9ybUlkXSAmJiBzZWFyY2hbZm9ybUlkXS5pbmR1c3RyeV9pZCkge1xuICAgIGNvbnN0IG5ld0luZHVzdHJ5ID0gW1xuICAgICAgeyBpZDogJ0NfSW5kdXN0cnkxJywgdmFsdWU6IGZpZWxkcy5maWx0ZXIoKGYpID0+IGYuaWQgPT09ICdpbmR1c3RyeV9pZCcpWzBdLnZhbHVlIH0sXG4gICAgICB7IGlkOiAnaW5kdXN0cnlfYXBpX2lkJywgdmFsdWU6IHNlYXJjaFtmb3JtSWRdLmluZHVzdHJ5X2lkIH0sXG4gICAgXTtcbiAgICBsZXQgbmV3SXRlbSA9IHRydWU7XG4gICAgLy8gb3ZlcndyaXRlIHdpdGggdGhlIG5ldyBmaWVsZCBzZXRcbiAgICBjb25zdCBuZXdJbmR1c3RyeUZpZWxkcyA9IG5ld0ZpZWxkcy5tYXAoKG9iaikgPT4ge1xuICAgICAgY29uc3QgbmV3RmllbGQgPSBuZXdJbmR1c3RyeS5maW5kKChvKSA9PiBvLmlkID09PSBvYmouaWQpO1xuICAgICAgaWYgKG5ld0ZpZWxkKSBuZXdJdGVtID0gZmFsc2U7XG4gICAgICByZXR1cm4gbmV3RmllbGQgfHwgb2JqO1xuICAgIH0pO1xuICAgIG5ld0ZpZWxkcyA9IG5ld0luZHVzdHJ5RmllbGRzO1xuXG4gICAgaWYgKG5ld0l0ZW0pIHtcbiAgICAgIG5ld0ZpZWxkcy5wdXNoKC4uLm5ld0luZHVzdHJ5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3RmllbGRzO1xufTtcblxuLy8gU2V0IHZhbHVlcyB0byB0aGUgd2luZG93XG5leHBvcnQgY29uc3QgcmVtb3ZlRnJvbVdpbmRvd0FiYW5kb25lZCA9IChmb3JtSWQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgYWJhbmRvbmVkRm9ybXMgfSA9IHdpbmRvdy5hdmE7XG4gICAgY29uc3QgcmVtYWluaW5nRm9ybXMgPSBhYmFuZG9uZWRGb3Jtcy5maWx0ZXIoKGY6IHN0cmluZykgPT4gZiAhPT0gZm9ybUlkKTtcbiAgICB3aW5kb3cuYXZhID0ge1xuICAgICAgLi4ud2luZG93LmF2YSxcbiAgICAgIGFiYW5kb25lZEZvcm1zOiByZW1haW5pbmdGb3JtcyxcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG59O1xuXG4vLyBIZWxwZXIgdG8gZ2V0IEVsb3F1YSBDdXN0b21lciBHVUlEXG4vLyBAcmV0dXJuIHsgU3RyaW5nIH1cbmV4cG9ydCBjb25zdCBnZXRFbG9xdWFHVUlEID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHsgR2V0RWxxQ3VzdG9tZXJHVUlEIH0gPSB3aW5kb3c7XG4gIGlmIChHZXRFbHFDdXN0b21lckdVSUQgJiYgdHlwZW9mIEdldEVscUN1c3RvbWVyR1VJRCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB3aW5kb3cuR2V0RWxxQ3VzdG9tZXJHVUlEKCk7XG4gIH1cbiAgcmV0dXJuICcnO1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHJlZ2V4IHZhbGlkYXRpb24gZnJvbSBSRUdFWFBfVkFMSURBVElPTiBjb25zdGFudFxuLy8gZ2V0UmVnRXhwUGF0dGVybiBpcyBhIGNvbnN0YW50cyBmaWxlIHdpdGggcmVnRXggcGF0dGVycyBzZXQgZm9yIHZhbGlkYXRpb25cbi8vIEByZXR1cm4gQFJlZ0V4cFxuZXhwb3J0IGNvbnN0IGdldFJlZ0V4cFBhdHRlcm4gPSAoaWQ6IHN0cmluZyk6IFJlZ0V4cCA9PiB7XG4gIGlmIChSRUdFWFBfVkFMSURBVElPTltpZF0pIHtcbiAgICByZXR1cm4gUkVHRVhQX1ZBTElEQVRJT05baWRdO1xuICB9XG4gIHJldHVybiBSRUdFWFBfVkFMSURBVElPTi5ERUZBVUxUO1xufTtcblxuLy8gQ2hlY2sgaWYgdmFsdWUgaXMgc2V0IGluIHRoZSBzdHJpbmdcbmV4cG9ydCBjb25zdCBpc1NlbGVjdGVkID0gKGNhcHR1cmVWYWx1ZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGlmICghY2FwdHVyZVZhbHVlIHx8IGNhcHR1cmVWYWx1ZSA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgaWYgKChjYXB0dXJlVmFsdWUuc3BsaXQoJywnKSkuaW5jbHVkZXModmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gU2V0IHRoZSB0YXJnZXQgdmFsdWUgY2FwdHVyZSBmb3Igc2VsZWN0LW11bHRpcGxlXG5leHBvcnQgY29uc3Qgc2V0TXVsdGlTZWxlY3RUYXJnZXQgPSAocGFyZW50OiBIVE1MRWxlbWVudCB8IG51bGwsIGlkOiBzdHJpbmcsIHBhcmVudFZhbHVlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGhhc0JlZW5TZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlKTogeyBpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcgfSB8IG51bGwgPT4ge1xuICAvLyAkRmxvd0ZpeE1lIC0gVG9EbzogRmluZCBvdXQgd2h5IHRoaXMgaXMgZmFpbGluZ1xuICBpZiAoIXBhcmVudCB8fCAocGFyZW50ICYmICFwYXJlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpKSByZXR1cm4geyBpZCwgdmFsdWU6IHBhcmVudFZhbHVlLCB0eXBlOiAnc2VsZWN0LW11bHRpcGxlJyB9O1xuXG4gIGlmIChwYXJlbnQpIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSBwYXJlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpO1xuICAgIGxldCBvcHRpb25zID0gW107XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9ucykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoJ3NlbGVjdGVkJykpIG9wdGlvbnMucHVzaChzZWxlY3RlZE9wdGlvbnNbaV0udmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBvcHRpb25zLnB1c2godmFsdWUpO1xuICAgIC8vIFJlbW92ZSBpZiBhbHJlYWR5IHNlbGVjdGVkXG4gICAgaWYgKGhhc0JlZW5TZWxlY3RlZCkgb3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKChvKSA9PiBvICE9PSB2YWx1ZSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gICAgcmV0dXJuIHsgaWQsIHZhbHVlOiBvcHRpb25zLmpvaW4oJywnKSwgdHlwZTogJ3NlbGVjdC1tdWx0aXBsZScgfTtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHZpYnJhbmN5IGlmIGV4aXN0c1xuLy8gQHJldHVybiB7IHN0cmluZyB8IG51bGwgfVxuXG5leHBvcnQgY29uc3QgZ2V0RmllbGRWaWJyYW5jeSA9IChmb3Jtc1N0YXRlOiBGb3JtU3RhdGUsIGZvcm1JZDogc3RyaW5nKSA9PiB7XG4gIGlmICghZm9ybXNTdGF0ZSkgcmV0dXJuIG51bGw7XG5cbiAgaWYgKGZvcm1zU3RhdGUuYWN0aXZlRm9ybXMgJiYgZm9ybXNTdGF0ZS5hY3RpdmVGb3Jtc1tmb3JtSWRdICYmIGZvcm1zU3RhdGUuYWN0aXZlRm9ybXNbZm9ybUlkXS5jb25maWdzICYmIGZvcm1zU3RhdGUuYWN0aXZlRm9ybXNbZm9ybUlkXS5jb25maWdzICE9PSBudWxsICYmIGZvcm1zU3RhdGUuYWN0aXZlRm9ybXNbZm9ybUlkXS5jb25maWdzLnZpYnJhbmN5ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZvcm1zU3RhdGUuYWN0aXZlRm9ybXNbZm9ybUlkXS5jb25maWdzLnZpYnJhbmN5O1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBmaWVsZCB2YWxpZGF0aW9uIHN0ZXBzXG4vLyBTZW5kcyB0aGUgcmVzdWx0cyB0byB0aGUgZm9ybXMgcmVkdWNlclxuLy8gRW1haWwgdmFsaWRhdGlvbiBjb21wbGV0ZXMgQnJpdGVWZXJpZnkgZGlzcGF0Y2ggYWN0aW9uIGlzIHZhbGlkYXRlcyBhcyB0cnVlXG4vLyBAcmV0dXJuIEBWb2lkIChubyByZXR1cm4gdmFsdWUpXG5leHBvcnQgY29uc3QgdmFsaWRhdGVGaWVsZCA9IChcbiAgZGlzcGF0Y2g6IERpc3BhdGNoLFxuICBjdXN0b21WYWxpZGF0aW9uOiBSZWdFeHAgfCBudWxsID0gbnVsbCxcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxuICB0YXJnZXQ6IElucHV0VGFyZ2V0LFxuKTogdm9pZCA9PiB7XG4gIGNvbnN0IGNsZWFuVGFyZ2V0ID0gdGFyZ2V0O1xuICBjb25zdCB7IGlkLCB0eXBlIH0gPSBjbGVhblRhcmdldDtcbiAgbGV0IHsgdmFsdWUgfSA9IGNsZWFuVGFyZ2V0O1xuICB2YWx1ZSA9IGNsZWFuRmllbGRWYWx1ZSh2YWx1ZSwgaWQpO1xuICBjb25zdCBpZ25vcmVJbnB1dFZhbGlkYXRpb24gPSBbJ2NoZWNrYm94JywgJ3JhZGlvJywgJ3NlbGVjdCcsICdzZWxlY3QtbXVsdGlwbGUnLCAnc2VsZWN0LW9uZScsICdzZWxlY3Qtc3RhdGUnXTsgLy8gSWdub3JlIHZhbGlkYXRpb24gb24gdGhlc2UgZmllbGQgdHlwZXMgc2luY2UgdGhleSB3aWxsIGJlIHByZXNldCB2YWx1ZXMgcGFzc2VkLiBJbnRsIHBob25lIHdpbGwgYmUgdmFsaWRhdGVkIHRocm91Z2ggdGhlIHBsdWdpblxuICBjb25zdCBpZ25vcmVGaWVsZEJ5SWQgPSBbJ2FwcG9pbnRtZW50X2RhdGV0aW1lJywgJ2Nvbm5lY3Rvcl9pZCcsICdpbmR1c3RyeV9pZCddO1xuXG4gIGlmICghaXNSZXF1aXJlZCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICBjYXNlICdDX3dlYnNpdGUnOlxuICAgICAgICBpZiAoIVJFR0VYUF9WQUxJREFUSU9OLkNXRUJTSVRFLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgZGlzcGF0Y2goc2V0SW5wdXRDYXB0dXJlSW52YWxpZChmb3JtSWQsIGNsZWFuVGFyZ2V0LmlkLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMJykpOyAvLyBUaGVyZSBpcyBhIHNlY29uZCBjaGVjayBmb3IgdGhlIGJlbG93IGZvciByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGlzcGF0Y2goY2FwdHVyZUlucHV0KGRpc3BhdGNoLCBmb3JtSWQsIGNsZWFuVGFyZ2V0KSk7XG4gICAgICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZVZhbGlkKGZvcm1JZCwgaWQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBpZiBpcyBub3QgcmVxdWlyZWQgYW5kIG5vdCBpbiB0aGUgcmVxdWlyZWQgYXJyYXkgc3RvcCBwcm9jZXNzaW5nXG4gIGlmICghaXNSZXF1aXJlZCAmJiAhcmVxdWlyZWRGaWVsZHMuaW5jbHVkZXMoaWQpKSByZXR1cm47XG5cbiAgLy8gQWxsIGJlbG93IGFzc3VtZXMgaXQgaXMgYSByZXF1aXJlZCBmaWVsZFxuICAvLyBFbnN1cmUgaW5wdXQgdmFsdWVzIGhhcyB2YWx1ZSBpZiByZXF1aXJlZFxuICBpZiAoIWlnbm9yZUlucHV0VmFsaWRhdGlvbi5pbmNsdWRlcyh0eXBlKSAmJiB2YWx1ZSA9PT0gJycpIHtcbiAgICBkaXNwYXRjaChjYXB0dXJlSW5wdXQoZGlzcGF0Y2gsIGZvcm1JZCwgY2xlYW5UYXJnZXQpKTtcbiAgICBkaXNwYXRjaChzZXRJbnB1dENhcHR1cmVJbnZhbGlkKGZvcm1JZCwgY2xlYW5UYXJnZXQuaWQsICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNpbmdsZSBvdXQgZm9yIHNlbGVjdCBmb3IgY2hlY2tib3ggY291bGQgaGF2ZSBhbiBlbXB0eSB2YWx1ZVxuICBpZiAoKHR5cGUgPT09ICdzZWxlY3Qtb25lJyB8fCB0eXBlID09PSAnc2VsZWN0LXN0YXRlJyB8fCB0eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJykpIHtcbiAgICBkaXNwYXRjaChjYXB0dXJlSW5wdXQoZGlzcGF0Y2gsIGZvcm1JZCwgY2xlYW5UYXJnZXQpKTtcbiAgICBpZiAodmFsdWUgPT09ICcnKSBkaXNwYXRjaChzZXRJbnB1dENhcHR1cmVJbnZhbGlkKGZvcm1JZCwgY2xlYW5UYXJnZXQuaWQsICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJykpOyAvLyBDYW4gbm90IGJlIGVtcHR5IHRyaWdnZXIgZXJyb3JcbiAgICBlbHNlIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZVZhbGlkKGZvcm1JZCwgaWQpKTsgLy8gQWxsb3cgYW55IHZhbHVlIHBhc3NlZCBpZ25vcmluZyBYU1NcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgIGlmIChjbGVhblRhcmdldC5jaGVja2VkID09PSBmYWxzZSAmJiBpc1JlcXVpcmVkKSB7XG4gICAgICBkaXNwYXRjaChzZXRJbnB1dENhcHR1cmVJbnZhbGlkKGZvcm1JZCwgY2xlYW5UYXJnZXQuaWQsICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkaXNwYXRjaChzZXRJbnB1dENhcHR1cmVWYWxpZChmb3JtSWQsIGlkKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ2hlY2sgWFNTIHRocmVhdCBtYXRyaXhcbiAgaWYgKFJFR0VYUF9WQUxJREFUSU9OLlhTU0NIRUNLLnRlc3QodmFsdWUpICYmICFpZ25vcmVJbnB1dFZhbGlkYXRpb24uaW5jbHVkZXModHlwZSkgJiYgIWlnbm9yZUZpZWxkQnlJZC5pbmNsdWRlcyhpZCkpIHtcbiAgICBkaXNwYXRjaChzZXRJbnB1dENhcHR1cmVJbnZhbGlkKGZvcm1JZCwgY2xlYW5UYXJnZXQuaWQsICdJbnZhbGlkIGNoYXJhY3RlcnMgZm91bmQnKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ2hlY2sgRW1vamlzXG4gIGlmIChSRUdFWFBfVkFMSURBVElPTi5FTU9KSS50ZXN0KHZhbHVlKSAmJiAhaWdub3JlSW5wdXRWYWxpZGF0aW9uLmluY2x1ZGVzKHR5cGUpICYmICFpZ25vcmVGaWVsZEJ5SWQuaW5jbHVkZXMoaWQpKSB7XG4gICAgZGlzcGF0Y2goc2V0SW5wdXRDYXB0dXJlSW52YWxpZChmb3JtSWQsIGNsZWFuVGFyZ2V0LmlkLCAnRW1vamkgY2hhcmFjdGVycyBub3QgYWxsb3dlZCcpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoUkVHRVhQX1ZBTElEQVRJT04uWFNTQ0hFQ0sudGVzdCh2YWx1ZSkgJiYgKGlnbm9yZUlucHV0VmFsaWRhdGlvbi5pbmNsdWRlcyh0eXBlKSB8fCBpZ25vcmVGaWVsZEJ5SWQuaW5jbHVkZXMoaWQpKSkge1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdSZWdleEZpZWxkVmFsaWRhdGlvbkVycm9yJyxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ1Bvc3NpYmxlIFhTUyBlcnJvcicsXG4gICAgICAgIGZpZWxkOiBKU09OLnN0cmluZ2lmeShjbGVhblRhcmdldCksXG4gICAgICAgIGxvY2F0aW9uOiAnaGVscGVycy9mb3Jtcy5qcyBcInZhbGlkYXRlRmllbGRcIicsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGN1c3RvbVZhbGlkYXRpb24gIT09IG51bGwpIHtcbiAgICBpZiAoIWN1c3RvbVZhbGlkYXRpb24udGVzdCh2YWx1ZSkpIHtcbiAgICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZUludmFsaWQoZm9ybUlkLCBpZCwgc2V0RXJyb3JNZXNzYWdlKGlkKSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkaXNwYXRjaChzZXRJbnB1dENhcHR1cmVWYWxpZChmb3JtSWQsIGlkKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlnbm9yZUlucHV0VmFsaWRhdGlvbi5pbmNsdWRlcyh0eXBlKSAmJiBpc1JlcXVpcmVkKSBkaXNwYXRjaChzZXRJbnB1dENhcHR1cmVWYWxpZChmb3JtSWQsIGlkKSk7XG5cbiAgaWYgKCFpZ25vcmVJbnB1dFZhbGlkYXRpb24uaW5jbHVkZXModHlwZSkpIHtcbiAgICBzd2l0Y2ggKGlkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ2NvbXBhbnknOlxuICAgICAgICBpZiAoUkVHRVhQX1ZBTElEQVRJT04uQ09NUEFOWS50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZUludmFsaWQoZm9ybUlkLCBpZCwgJ0ludmFsaWQgY2hhcmFjdGVycyBmb3VuZCcpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjX3dlYnNpdGUnOlxuICAgICAgICBpZiAoIVJFR0VYUF9WQUxJREFUSU9OLkNXRUJTSVRFLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgZGlzcGF0Y2goc2V0SW5wdXRDYXB0dXJlSW52YWxpZChmb3JtSWQsIGNsZWFuVGFyZ2V0LmlkLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgIGNhc2UgJ3JlZl9lbWFpbCc6XG4gICAgICAgIGlmICghKC8oWydALiddKS8pLnRlc3QodmFsdWUpIHx8IHZhbHVlLnNwbGl0KCdAJykubGVuZ3RoIDwgMikge1xuICAgICAgICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZUludmFsaWQoZm9ybUlkLCBjbGVhblRhcmdldC5pZCwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayBmb3IgLltzdWZmaXhdXG4gICAgICAgIGlmICghUkVHRVhQX1ZBTElEQVRJT04uRU1BSUwudGVzdCh2YWx1ZSkgfHwgdmFsdWUuc3RhcnRzV2l0aCgnQCcpIHx8IHZhbHVlLnN0YXJ0c1dpdGgoJysnKSkge1xuICAgICAgICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZUludmFsaWQoZm9ybUlkLCBjbGVhblRhcmdldC5pZCwgJ0ludmFsaWQgZW1haWwgZm9ybWF0LiBQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCcpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gQnJpdGUgdmVyaWZ5IHZhbGlkYXRpb24gaXMgaGFwcGVuaW5nIG9uIGNhcHR1cmUgaW5wdXRcbiAgICAgICAgLy8gIFJFRkFDVE9SIE5PVEU6IExvb2sgdG8gbW9jayByZXNwb25zZXMgZm9yIHRlc3RzIHRvIHBhc3NcbiAgICAgICAgaWYgKGNoZWNrSWZJc1Rlc3RpbmcoKSkgZGlzcGF0Y2goc2V0SW5wdXRDYXB0dXJlVmFsaWQoZm9ybUlkLCBpZCkpOyAvLyBGb3IgdGVzdCBwYXNzaW5nIHRoaXMgbmVlZHMgdG8gYmUgaGVyZVxuICAgICAgICBpZiAoIWNoZWNrSWZJc1Rlc3RpbmcoKSkgYnJpdGVWZXJpZnlFbWFpbEFkZHJlc3NWYWxpZGF0aW9uKGRpc3BhdGNoLCBmb3JtSWQsIGlkLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2Z1bGxuYW1lJzpcbiAgICAgICAgLy8gQ2hlY2sgdmFsdWUgd2l0aCBhbmQgd2l0aG91dCBtaWRkbGUgbmFtZSB3aXRoIGRvdFxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgaWYgKHZhbHVlLnNwbGl0KCcgJykubGVuZ3RoIDwgMiB8fCBSRUdFWFBfVkFMSURBVElPTi5OQU1FLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgZGlzcGF0Y2goc2V0SW5wdXRDYXB0dXJlSW52YWxpZChmb3JtSWQsIGNsZWFuVGFyZ2V0LmlkLCAnUGxlYXNlIGVudGVyIHlvdXIgZnVsbCBuYW1lJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ZpcnN0bmFtZSc6XG4gICAgICBjYXNlICdsYXN0bmFtZSc6XG4gICAgICAgIGlmIChSRUdFWFBfVkFMSURBVElPTi5OQU1FLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgZGlzcGF0Y2goc2V0SW5wdXRDYXB0dXJlSW52YWxpZChmb3JtSWQsIGNsZWFuVGFyZ2V0LmlkLCAnUGxlYXNlIGVudGVyIHlvdXIgbmFtZScpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwYXJ0bmVyX3JlcF9lbWFpbCc6XG4gICAgICAgIGlmICghKC8oWydALiddKS8pLnRlc3QodmFsdWUpIHx8IHZhbHVlLnNwbGl0KCdAJykubGVuZ3RoIDwgMikge1xuICAgICAgICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZUludmFsaWQoZm9ybUlkLCBjbGVhblRhcmdldC5pZCwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayBmb3IgLltzdWZmaXhdXG4gICAgICAgIGlmICghUkVHRVhQX1ZBTElEQVRJT04uRU1BSUwudGVzdCh2YWx1ZSkgfHwgdmFsdWUuc3RhcnRzV2l0aCgnQCcpIHx8IHZhbHVlLnN0YXJ0c1dpdGgoJysnKSkge1xuICAgICAgICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZUludmFsaWQoZm9ybUlkLCBjbGVhblRhcmdldC5pZCwgJ0ludmFsaWQgZW1haWwgZm9ybWF0LiBQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCcpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKCdhdmFsYXJhLmNvbScpKSB7XG4gICAgICAgICAgZGlzcGF0Y2goc2V0SW5wdXRDYXB0dXJlSW52YWxpZChmb3JtSWQsIGNsZWFuVGFyZ2V0LmlkLCAnUGxlYXNlIGVudGVyIHlvdXIgZW1haWwuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBCcml0ZSB2ZXJpZnkgdmFsaWRhdGlvbiBpcyBoYXBwZW5pbmcgb24gY2FwdHVyZSBpbnB1dFxuICAgICAgICAvLyAgUkVGQUNUT1IgTk9URTogTG9vayB0byBtb2NrIHJlc3BvbnNlcyBmb3IgdGVzdHMgdG8gcGFzc1xuICAgICAgICBpZiAoY2hlY2tJZklzVGVzdGluZygpKSBkaXNwYXRjaChzZXRJbnB1dENhcHR1cmVWYWxpZChmb3JtSWQsIGlkKSk7IC8vIEZvciB0ZXN0IHBhc3NpbmcgdGhpcyBuZWVkcyB0byBiZSBoZXJlXG4gICAgICAgIGlmICghY2hlY2tJZklzVGVzdGluZygpKSBicml0ZVZlcmlmeUVtYWlsQWRkcmVzc1ZhbGlkYXRpb24oZGlzcGF0Y2gsIGZvcm1JZCwgaWQsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gZ2V0UmVnRXhwUGF0dGVybihpZC5yZXBsYWNlKC9bXFxXXFwtXyBdKy9naSwgJycpLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICBpZiAocGF0dGVybiAmJiAhcGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZUludmFsaWQoZm9ybUlkLCBpZCwgc2V0RXJyb3JNZXNzYWdlKGlkKSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodGFyZ2V0KSBkaXNwYXRjaChjYXB0dXJlSW5wdXQoZGlzcGF0Y2gsIGZvcm1JZCwgY2xlYW5UYXJnZXQpKTtcbiAgZGlzcGF0Y2goc2V0SW5wdXRDYXB0dXJlVmFsaWQoZm9ybUlkLCBpZCkpO1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUgMCB3aGVuIGFwcGVuZGluZyBpbiBhbHRlciBsb2NhdGlvbnNcbi8vIEByZXR1cm4geyBzdHJpbmcgfVxuZXhwb3J0IGNvbnN0IGNoZWNrUGhvbmVWYWx1ZSA9IChkaWFsQ29kZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgbGV0IG5ld1ZhbHVlID0gdmFsdWUudHJpbSgpO1xuICBjb25zdCBjbGVhbkRpYWxDb2RlID0gZGlhbENvZGUucmVwbGFjZSgvXFxEL2dpLCAnJyk7XG4gIGNvbnN0IGNoZWNrVmFsdWUgPSAobmV3VmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKGNsZWFuRGlhbENvZGUsICcnKSkucmVwbGFjZSgvXFxEL2dpLCAnJyk7XG5cbiAgaWYgKGNoZWNrVmFsdWUgJiYgY2hlY2tWYWx1ZVswXSAmJiBjaGVja1ZhbHVlWzBdLnRvU3RyaW5nKCkgPT09ICcwJykge1xuICAgIG5ld1ZhbHVlID0gKGNoZWNrVmFsdWUuc3BsaXQoJycpKS5zcGxpY2UoMSwgY2hlY2tWYWx1ZS5zcGxpdCgnJykubGVuZ3RoIC0gMSkuam9pbignJyk7XG4gICAgbmV3VmFsdWUgPSBgJHtkaWFsQ29kZS5yZXBsYWNlKC9cXEQvZ2ksICcnKX0ke25ld1ZhbHVlLnJlcGxhY2UoL1xcRC9naSwgJycpfWA7XG4gIH1cblxuICByZXR1cm4gbmV3VmFsdWUucmVwbGFjZSgvXFxEL2dpLCAnJykudHJpbSgpO1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBmaWVsZCB2YWxpZGF0aW9uIHN0ZXBzXG4vLyBTZW5kcyB0aGUgcmVzdWx0cyB0byB0aGUgZm9ybXMgcmVkdWNlclxuLy8gRW1haWwgdmFsaWRhdGlvbiBjb21wbGV0ZXMgQnJpdGVWZXJpZnkgZGlzcGF0Y2ggYWN0aW9uIGlzIHZhbGlkYXRlcyBhcyB0cnVlXG4vLyBAcmV0dXJuIEBWb2lkIChubyByZXR1cm4gdmFsdWUpXG5leHBvcnQgY29uc3QgdmFsaWRhdGVJbnRsUGhvbmVGaWVsZCA9IChcbiAgZGlzcGF0Y2g6IERpc3BhdGNoLFxuICBjdXN0b21WYWxpZGF0aW9uOiBSZWdFeHAgfCBudWxsID0gbnVsbCxcbiAgZGlhbENvZGU6IHN0cmluZyxcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxuICB0YXJnZXQ6IElucHV0VGFyZ2V0LFxuKTogdm9pZCA9PiB7XG4gIGlmICghdGFyZ2V0KSByZXR1cm47XG5cbiAgY29uc3QgeyBpZCB9ID0gdGFyZ2V0O1xuICBsZXQgeyB2YWx1ZSB9ID0gdGFyZ2V0O1xuICB2YWx1ZSA9IGNoZWNrUGhvbmVWYWx1ZShkaWFsQ29kZSwgdmFsdWUpO1xuXG4gIGNvbnN0IG5ld1RhcmdldCA9IHRhcmdldDtcbiAgbmV3VGFyZ2V0LnZhbHVlID0gdmFsdWU7XG5cbiAgaWYgKHRhcmdldCkgZGlzcGF0Y2goY2FwdHVyZUlucHV0KGRpc3BhdGNoLCBmb3JtSWQsIG5ld1RhcmdldCkpO1xuXG4gIGlmIChpc1JlcXVpcmVkICYmIHZhbHVlID09PSAnJykge1xuICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZUludmFsaWQoZm9ybUlkLCBpZCwgc2V0RXJyb3JNZXNzYWdlKGlkKSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjdXN0b21WYWxpZGF0aW9uICE9PSBudWxsKSB7XG4gICAgaWYgKCFjdXN0b21WYWxpZGF0aW9uLnRlc3QodmFsdWUpKSB7XG4gICAgICBkaXNwYXRjaChzZXRJbnB1dENhcHR1cmVJbnZhbGlkKGZvcm1JZCwgaWQsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBwaG9uZSBudW1iZXInKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlzcGF0Y2goc2V0SW5wdXRDYXB0dXJlVmFsaWQoZm9ybUlkLCBpZCkpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBtaW5MZW5ndGggPSA0ICsgZGlhbENvZGUucmVwbGFjZSgvXFxEL2dpLCAnJykubGVuZ3RoO1xuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcRC9naSwgJycpO1xuICBpZiAodmFsdWUubGVuZ3RoIDwgbWluTGVuZ3RoIHx8IHZhbHVlLmxlbmd0aCA+IDE4KSB7XG4gICAgZGlzcGF0Y2goc2V0SW5wdXRDYXB0dXJlSW52YWxpZChmb3JtSWQsIGlkLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgcGhvbmUgbnVtYmVyJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZVZhbGlkKGZvcm1JZCwgaWQpKTtcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IGZvcmNlcyB2YWxpZGF0aW9uIG9uIGFsbCBhY3RpdmUgZm9ybSBpbnB1dHNcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFsbEZpZWxkcyA9IChcbiAgZGlzcGF0Y2g6IERpc3BhdGNoLFxuICBkaWFsQ29kZTogc3RyaW5nLFxuICBmb3JtSWQ6IHN0cmluZyxcbiAgZmllbGRzOiBDYXB0dXJlZEZpZWxkcyxcbiAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG4gIGFjdGl2ZURhdGE6IEZvcm1BdHRyaWJ1dGVzLFxuKSA9PiB7XG4gIC8vIExvb3BpbmcgdGhyb3VnaCBhY3RpdmVEYXRhIGZpZWxkcyBoZXJlIHRvIGJ1aWxkIHVwIHRoZSBcImlucHV0IHRhcmdldFwiIHdpdGggaWQgYW5kIHR5cGUgZm9yIGNoZWNrYm94L3NlbGVjdCBmaWVsZCB0eXBlc1xuICBjb25zdCBtYXBGaWVsZHNUb1ZhbGlkYXRvcnMgPSAoYWN0aXZlRGF0YUZpZWxkczogQXJyYXk8U2luZ2xlSnNvbkZpZWxkPikgPT4gYWN0aXZlRGF0YUZpZWxkcy5mb3JFYWNoKChmOiBTaW5nbGVKc29uRmllbGQpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmKSkge1xuICAgICAgbWFwRmllbGRzVG9WYWxpZGF0b3JzKFsuLi5mXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1c3RvbVZhbGlkYXRpb24gPSBudWxsO1xuICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IHJlcXVpcmVkRmllbGRzID8gcmVxdWlyZWRGaWVsZHMuaW5jbHVkZXMoZi5pZCkgOiBmYWxzZTtcbiAgICAgIGNvbnN0IHRhcmdldEZpZWxkID0gZmllbGRzLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLmlkID09PSBmLmlkKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0RmllbGQubGVuZ3RoID4gMCA/IHRhcmdldEZpZWxkWzBdLnZhbHVlIDogbnVsbDtcblxuICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZUludmFsaWQoZm9ybUlkLCBmLmlkLCAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHtcbiAgICAgICAgICBpZDogZi5pZCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICB0eXBlOiBmLnR5cGUgfHwgJ3RleHQnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChmLmlkID09PSAncGhvbmUnKSB7XG4gICAgICAgICAgdmFsaWRhdGVJbnRsUGhvbmVGaWVsZChkaXNwYXRjaCwgY3VzdG9tVmFsaWRhdGlvbiwgZGlhbENvZGUsIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIHRhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGVGaWVsZChkaXNwYXRjaCwgY3VzdG9tVmFsaWRhdGlvbiwgZm9ybUlkLCBpc1JlcXVpcmVkLCByZXF1aXJlZEZpZWxkcywgdGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIG1hcEZpZWxkc1RvVmFsaWRhdG9ycyhhY3RpdmVEYXRhLmZpZWxkcyk7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBZGRpdGlvbmFsRmllbGRzID0gKGZpZWxkczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgPT4ge1xuICBjb25zdCBhY2NlcHRlZFZhbHVlcyA9IFsnbWFya2V0aW5nX2ZlZWRiYWNrX25vdGVzJywgJ2Rvd25sb2FkX2xpbmsnXTtcbiAgY29uc3QgdmFsaWRGaWVsZHMgPSBbXTtcbiAgT2JqZWN0LmtleXMoZmllbGRzKS5mb3JFYWNoKChrKSA9PiB7XG4gICAgaWYgKGFjY2VwdGVkVmFsdWVzLmluY2x1ZGVzKGspICYmIGZpZWxkc1trXSkge1xuICAgICAgdmFsaWRGaWVsZHMucHVzaCh7XG4gICAgICAgIGlkOiBrLFxuICAgICAgICB2YWx1ZTogZmllbGRzW2tdLFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHZhbGlkRmllbGRzO1xufTtcblxuLy8gQ2hlY2sgZGF0ZXMgZm9yIGZvcm0gZGlzYWJsZWQuIFJldHVybiBhdHRyaWJ1dGUgdmFsdWUgdG8gc2V0IG9uIGlucHV0IGZpZWxkXG5leHBvcnQgY29uc3QgaXNGaWVsZERpc2FibGVkID0gKGxpbWl0OiBib29sZWFuLCBjb25maWdzOiBGb3JtRGVmYXVsdENvbmZpZ3MgPSB7IHN1Ym1pc3Npb25MaW1pdEVuZERhdGU6IG51bGwsIHN1Ym1pc3Npb25MaW1pdFN0YXJ0RGF0ZTogbnVsbCB9KSA9PiB7XG4gIGlmIChsaW1pdCkgcmV0dXJuICdkaXNhYmxlZCc7XG4gIGNvbnN0IG5vdyA9IGRheWpzKCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gIGNvbnN0IHsgc3VibWlzc2lvbkxpbWl0RW5kRGF0ZSwgc3VibWlzc2lvbkxpbWl0U3RhcnREYXRlIH0gPSBjb25maWdzO1xuICBpZiAoc3VibWlzc2lvbkxpbWl0U3RhcnREYXRlICYmIHN1Ym1pc3Npb25MaW1pdFN0YXJ0RGF0ZSAhPT0gbnVsbCAmJiBzdWJtaXNzaW9uTGltaXRTdGFydERhdGUgIT09ICcnKSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF5anMoc3VibWlzc2lvbkxpbWl0U3RhcnREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICBpZiAobm93IDwgc3RhcnREYXRlKSByZXR1cm4gJ2Rpc2FibGVkJztcbiAgfVxuICBpZiAoc3VibWlzc2lvbkxpbWl0RW5kRGF0ZSAmJiBzdWJtaXNzaW9uTGltaXRFbmREYXRlICE9PSBudWxsICYmIHN1Ym1pc3Npb25MaW1pdEVuZERhdGUgIT09ICcnKSB7XG4gICAgY29uc3QgZW5kRGF0ZSA9IGRheWpzKHN1Ym1pc3Npb25MaW1pdEVuZERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgIGlmIChub3cgPj0gZW5kRGF0ZSkgcmV0dXJuICdkaXNhYmxlZCc7XG4gIH1cbiAgcmV0dXJuICcnO1xufTtcbiIsIi8vIEBmbG93XG5leHBvcnQgdHlwZSBMb2NhbGVCeUZpZWxkID0ge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVsbCxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBmaWVsZHNCeUxvY2FsOiBMb2NhbGVCeUZpZWxkID0ge1xuICBBZGRyZXNzOiB7XG4gICAgZGU6ICdBZHJlc3NlJyxcbiAgICBmcjogJ0FkcmVzc2UnLFxuICAgIHByOiAnRW5kZXJlw6dvJyxcbiAgfSxcbiAgJ0FkZHJlc3MgMSc6IHtcbiAgICBkZTogJ0FkcmVzc2UgMScsXG4gICAgZnI6ICdBZHJlc3NlIExpZ25lIDEnLFxuICAgIGl0OiAnSW5kaXJpenpvIDEnLFxuICAgIGVzOiAnRGlyZWNjacOzbiAxJyxcbiAgICBwbDogJ0FkcmVzIDEnLFxuICAgIHB0OiBudWxsLFxuICB9LFxuICAnQWRkcmVzcyAyJzoge1xuICAgIGRlOiAnQWRyZXNzZSAyJyxcbiAgICBmcjogJ0FkcmVzc2UgTGlnbmUgMicsXG4gICAgaXQ6ICdJbmRpcml6em8gMicsXG4gICAgZXM6ICdEaXJlY2Npw7NuIDInLFxuICAgIHBsOiAnQWRyZXMgMicsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gIENvbW1lbnRzOiB7XG4gICAgZGU6ICdCZW1lcmt1bmdlbicsXG4gICAgZXM6ICdDb21lbnRhcmlvcycsXG4gICAgZnI6ICdDb21tZW50YWlyZXMnLFxuICAgIGl0OiAnQ29tbWVudGknLFxuICAgIHB0OiAnTWVuc2FnZW0nLFxuICB9LFxuICAnQ2hvb3NlIENvdW50cnknOiB7XG4gICAgZGU6ICdXw6RobGUgTGFuZCcsXG4gICAgZnI6ICdjaG9pc2lzc2V6IHVuIHBheXMnLFxuICAgIGl0OiAnU2NlZ2xpIGlsIHBhZXNlJyxcbiAgICBlczogJ1NlbGVjY2lvbmUgZWwgcGHDrXMnLFxuICAgIHB0OiAnV3liaWVyeiBrcmFqJyxcbiAgfSxcbiAgJ0Nob29zZSBvbmUnOiB7XG4gICAgZGU6ICdXw6RobGUgZWluJyxcbiAgICBlczogJ0VsaWphIHVubycsXG4gICAgZnI6ICdjaG9pc2lzc2V6LWVuIHVuJyxcbiAgICBpdDogJ1NjZWdsaSB1bm8nLFxuICAgIHBsOiAnV3liaWVyeiBqZWRlbicsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gIENpdHk6IHtcbiAgICBkZTogJ1N0YWR0JyxcbiAgICBlczogJ0NpdWRhZCcsXG4gICAgZnI6ICdWaWxsZScsXG4gICAgaXQ6ICdDaXR0w6AnLFxuICAgIHBsOiAnTWlhc3RvJyxcbiAgICBwdDogJ0NpZGFkZScsXG4gIH0sXG4gIENvbXBhbnk6IHtcbiAgICBkZTogJ0Zpcm1hJyxcbiAgICBlczogJ0VtcHJlc2EnLFxuICAgIGZyOiAnTm9tIGRlIGxhIGNvbXBhZ25pZScsXG4gICAgaXQ6ICdOb21lIGRlbGxhIHNvY2lldMOgJyxcbiAgICBwdDogJ0VtcHJlc2EnLFxuICB9LFxuICAnQ29tcGFueSBwcm9maWxlJzoge1xuICAgIGRlOiAnRmlybWVucHJvZmlsJyxcbiAgICBlczogbnVsbCxcbiAgICBmcjogJ1Byb2ZpbGUgZOKAmWVudHJlcHJpc2UnLFxuICAgIGl0OiBudWxsLFxuICAgIHB0OiBudWxsLFxuICB9LFxuICBDb3VudHJ5OiB7XG4gICAgZGU6ICdMYW5kJyxcbiAgICBlczogJ1Bhw61zJyxcbiAgICBmcjogJ1BheXMnLFxuICAgIGl0OiAnU3RhdG8nLFxuICAgIHBsOiAnS3JhaicsXG4gICAgcHI6ICdQYcOtcycsXG4gIH0sXG4gICdDb3VudHJ5IG9mIEVzdGFibGlzaG1lbnQnOiB7XG4gICAgZGU6IG51bGwsXG4gICAgZXM6IG51bGwsXG4gICAgZnI6ICdQYXlzIGTigJkgZXRhYmxpc3NlbWVudCcsXG4gICAgaXQ6IG51bGwsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gIEVtYWlsOiB7XG4gICAgZGU6ICdFLU1haWwgQWRyZXNzZScsXG4gICAgZnI6ICdBZHJlc3NlIGUtbWFpbCcsXG4gICAgaXQ6ICdFbWFpbCcsXG4gICAgZXM6ICdFbWFpbCcsXG4gICAgcGw6ICdFbWFpbCcsXG4gICAgcHQ6ICdFbWFpbCcsXG4gIH0sXG4gICdCdXNpbmVzcyBlbWFpbCc6IHtcbiAgICBkZTogJ0dlc2Now6RmdGxpY2hlIEUtTWFpbC1BZGRyZXNzZScsXG4gICAgZnI6ICdFbWFpbCBQcm9mZXNzaW9uZWwnLFxuICAgIGl0OiBudWxsLFxuICAgIGVzOiBudWxsLFxuICAgIHBsOiBudWxsLFxuICAgIHB0OiAnRW1haWwgY29ycG9yYXRpdm8nLFxuICB9LFxuICAnRmlyc3QgbmFtZSc6IHtcbiAgICBkZTogJ1Zvcm5hbWUnLFxuICAgIGVzOiAnTm9tYnJlIGRlIHBpbGEnLFxuICAgIGZyOiAnUHLDqW5vbScsXG4gICAgaXQ6ICdOb21lIGRpIGJhdHRlc2ltbycsXG4gICAgcHQ6ICdQcmltZWlybyBub21lJyxcbiAgfSxcbiAgJ0Z1bGwgbmFtZSc6IHtcbiAgICBkZTogJ1ZvbGxzdMOkbmRpZ2VyIE5hbWUnLFxuICAgIGVzOiAnTm9tYnJlIGNvbXBsZXRvJyxcbiAgICBmcjogJ05vbSBjb21wbGV0JyxcbiAgICBpdDogJ05vbWUgZSBjb2dub21lJyxcbiAgICBwdDogJ05vbWUgY29tcGxldG8nLFxuICB9LFxuICAnTGFzdCBuYW1lJzoge1xuICAgIGRlOiAnTmFjaG5hbWUnLFxuICAgIGVzOiAnQXBlbGxpZG8nLFxuICAgIGZyOiAnTm9tIGRlIGZhbWlsbGUnLFxuICAgIGl0OiAnQ29nbm9tZScsXG4gICAgcGw6ICfDmmx0aW1vIG5vbWUnLFxuICAgIHByOiAnU29icmVub21lJyxcbiAgfSxcbiAgTWlzczoge1xuICAgIGRlOiBudWxsLFxuICAgIGVzOiAnU2XDsW9yaXRhJyxcbiAgICBmcjogJ01hZGVtb2lzZWxsZScsXG4gICAgaXQ6ICdTaWdub3JpbmEnLFxuICAgIHB0OiBudWxsLFxuICB9LFxuICBNcjoge1xuICAgIGRlOiAnSGVycicsXG4gICAgZXM6ICdTZcOxb3InLFxuICAgIGZyOiAnTW9uc2lldXInLFxuICAgIGl0OiAnU2lnbm9yZScsXG4gICAgcHQ6ICdTZW5ob3InLFxuICB9LFxuICBNcnM6IHtcbiAgICBkZTogJ0ZyYXUnLFxuICAgIGVzOiAnU2XDsW9yYScsXG4gICAgZnI6ICdNYWRhbWUnLFxuICAgIGl0OiAnU2lnbm9yYScsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gIE1zOiB7XG4gICAgZGU6ICdTZWhyIGdlZWhydGUgRnJhdScsXG4gICAgZXM6ICdTcmEnLFxuICAgIGZyOiBudWxsLFxuICAgIGl0OiAnU2lnLnJhJyxcbiAgICBwdDogbnVsbCxcbiAgfSxcbiAgTmFtZToge1xuICAgIGRlOiAnTmFtZScsXG4gICAgZXM6ICdOb21icmUgY29tcGxldG8nLFxuICAgIGZyOiAnTm9tIGNvbXBsZXQnLFxuICAgIGl0OiAnTm9tZSBlIGNvZ25vbWUnLFxuICAgIHBsOiAnUGXFgm5lIGltacSZIGkgbmF6d2lza28nLFxuICAgIHB0OiAnTm9tZScsXG4gIH0sXG4gIE5vOiB7XG4gICAgZGU6ICdOZWluJyxcbiAgICBlczogJ05vJyxcbiAgICBmcjogJ05vbicsXG4gICAgaXQ6ICdObycsXG4gICAgcHQ6ICdOaWUnLFxuICB9LFxuICBQaG9uZToge1xuICAgIGRlOiAnVGVsZWZvbm51bW1lcicsXG4gICAgZXM6ICdOw7ptZXJvIGRlIHRlbMOpZm9ubycsXG4gICAgZnI6ICdOdW3DqXJvIGRlIHTDqWzDqXBob25lJyxcbiAgICBpdDogJ1RlbGVmb25vJyxcbiAgICBwbDogJ051bWVyIHRlbGVmb251JyxcbiAgICBwdDogJ07Dum1lcm8gZGUgdGVsZWZvbmUnLFxuICB9LFxuICAnUG9zdGFsIGNvZGUnOiB7XG4gICAgZGU6ICdQTFonLFxuICAgIGZyOiAnQ29kZSBwb3N0YWwnLFxuICAgIHByOiAnQ8OzZGlnbyBwb3N0YWwgKENFUCknLFxuICB9LFxuICAnUHJpdmFjeSBQb2xpY3knOiB7XG4gICAgZGU6ICdEYXRlbnNjaHV0enJpY2h0bGluaWUnLFxuICAgIGVzOiBudWxsLFxuICAgIGZyOiBudWxsLFxuICAgIGl0OiBudWxsLFxuICAgIHBsOiBudWxsLFxuICAgIHB0OiBudWxsLFxuICB9LFxuICBRdWVzdGlvbnM6IHtcbiAgICBkZTogJ0ZyYWdlbicsXG4gICAgZXM6IG51bGwsXG4gICAgZnI6ICdRdWVzdGlvbnMnLFxuICAgIGl0OiBudWxsLFxuICAgIHB0OiAnUXVlc3TDtWVzJyxcbiAgfSxcbiAgU2VsZWN0OiB7XG4gICAgZGU6ICdXw6RobGVuJyxcbiAgICBlczogJ1NlbGVjY2lvbmFyJyxcbiAgICBmcjogJ1PDqWxlY3Rpb25uZXInLFxuICAgIGl0OiAnU2NlZ2xpZXJlJyxcbiAgICBwdDogbnVsbCxcbiAgfSxcbiAgU3VibWl0OiB7XG4gICAgZGU6ICdBbmZyYWdlIGFic2NoaWNrZW4nLFxuICAgIGVzOiAnRW52aWFyIHNvbGljaXR1ZCcsXG4gICAgZnI6ICdFbnZveWVyIGRlbWFuZGUnLFxuICAgIGl0OiAnSW52aWEgcmljaGllc3RhJyxcbiAgICBwbDogJ1phdHdpZXJkxbonLFxuICAgIHB0OiAnRW52aWFyJyxcbiAgfSxcbiAgU3RhdGU6IHtcbiAgICBkZTogJ01pdGdsaWVkc3RhYXQnLFxuICAgIGVzOiAnRXN0YWRvL3Byb3ZpbmNpYScsXG4gICAgZnI6ICfDiXRhdCAvIHByb3ZpbmNlJyxcbiAgICBpdDogJ1N0YXRvIC8gUHJvdmluY2lhJyxcbiAgICBwbDogJ1N0YW4gLyBQcm93aW5jamEnLFxuICAgIHB0OiAnRXN0YWRvJyxcbiAgfSxcbiAgVGl0bGU6IHtcbiAgICBkZTogJ1RpdGVsJyxcbiAgICBlczogJ1TDrXR1bG8nLFxuICAgIGZyOiAnVGl0cmUnLFxuICAgIGl0OiAnQXBwZWxsYXRpdm8nLFxuICAgIHB0OiAnQ2FyZ28nLFxuICB9LFxuICBXZWJzaXRlOiB7XG4gICAgZGU6ICdXZWJzZWl0ZScsXG4gICAgZnI6ICdTaXRlIEludGVybmV0JyxcbiAgICBpdDogJ1NpdG8gV2ViJyxcbiAgICBlczogbnVsbCxcbiAgICBwbDogbnVsbCxcbiAgICBwdDogbnVsbCxcbiAgfSxcbiAgWWVzOiB7XG4gICAgZGU6ICdKYScsXG4gICAgZXM6ICdTw60nLFxuICAgIGZyOiAnT3VpJyxcbiAgICBpdDogJ1NpJyxcbiAgICBwbDogJ1RhaycsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gIFppcDoge1xuICAgIGZyOiAnQ29kZSBwb3N0YWwnLFxuICAgIHB0OiAnQ8OzZGlnbyBwb3N0YWwgKENFUCknLFxuICB9LFxuICAnWmlwIGNvZGUnOiB7XG4gICAgZGU6ICdQTFonLFxuICAgIGVzOiAnQ8OzZGlnbyBwb3N0YWwnLFxuICAgIGZyOiAnQ29kZSBwb3N0YWwnLFxuICAgIGl0OiAnQ2FwJyxcbiAgICBwbDogJ0tvZCBwb2N6dG93eScsXG4gICAgcHQ6ICdDw7NkaWdvIHBvc3RhbCAoQ0VQKScsXG4gIH0sXG4gICdJIHdvdWxkIGxpa2UgdG8gcmVjZWl2ZSB0aGUgbGF0ZXN0IGluIHRheCBuZXdzLCBiZXN0IHByYWN0aWNlcywgYW5kIG90aGVyIG1hcmtldGluZyBjb21tdW5pY2F0aW9ucyBmcm9tIEF2YWxhcmEgYW5kIG1heSB1bnN1YnNjcmliZSBhdCBhbnkgdGltZS4nOiB7XG4gICAgZGU6ICdKYSwgaWNoIG1vZWNodGUgdWViZXIgTmV1aWdrZWl0ZW4gdW5kIEFuZ2Vib3RlIGluZm9ybWllcnQgd2VyZGVuLCBrYW5uIGFiZXIgamVkZXJ6ZWl0IHdpZGVycnVmZW4uJyxcbiAgICBlczogbnVsbCxcbiAgICBmcjogJ0plIHNvdWhhaXRlIHJlY2V2b2lyIGRlcyBjb21tdW5pY2F0aW9ucyBtYXJrZXRpbmcgZGUgQXZhbGFyYSwgZXQgcGV1dCBtZSBkw6lzYWJvbm5lciDDoCB0b3V0IG1vbWVudC4nLFxuICAgIGl0OiBudWxsLFxuICAgIHBsOiBudWxsLFxuICAgIHB0OiBudWxsLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZmllbGRzQnlMb2NhbDtcbiIsIi8vIEBmbG93XG5leHBvcnQgdHlwZSBMb2NhbGVCeVF1ZXN0aW9uID0ge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVsbCxcbiAgfSB8IG51bGwsXG59O1xuXG5leHBvcnQgY29uc3QgcXVlc3Rpb25CeUxvY2FsZTogTG9jYWxlQnlRdWVzdGlvbiA9IHtcbiAgJ0FsbW9zdCB0aGVyZSEgUGxlYXNlIGNvbXBsZXRlIHlvdXIgcHJvZmlsZS4gKEZSKSc6IHtcbiAgICBwdDogJ0VzdGFtb3MgcXVhc2UgbMOhISBQb3IgZmF2b3IgY29tcGxldGUgc2V1IHBlcmZpbCcsXG4gIH0sXG4gICdBbWF6b24gcHJvbW90aW9uIGNvZGUnOiB7XG4gICAgZGU6ICdBbWF6b24gUHJvbW90aW9uIENvZGUnLFxuICAgIGVzOiAnQ8OzZGlnbyBwcm9tb2Npb25hbCBkZSBBbWF6b24nLFxuICAgIGZyOiAnY29kZSBwcm9tb3Rpb25uZWwgZFxcJ0FtYXpvbicsXG4gICAgaXQ6ICdjb2RpY2UgcHJvbW96aW9uYWxlIEFtYXpvbicsXG4gICAgcGw6IG51bGwsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gICdBcHBvaW50bWVudCBOb3Rlcyc6IHtcbiAgICBkZTogJ1Rlcm1pbiBOb3RpemVuJyxcbiAgICBwdDogJ05vdGFzIGRvIGNvbXByb21pc3NvJyxcbiAgfSxcbiAgJ0FyZSB5b3UgbG9va2luZyBmb3IgVkFUIHJlZ2lzdHJhdGlvbnMgb3IgcmV0dXJucz8nOiB7XG4gICAgZGU6ICdXaXIgYmVuw7Z0aWdlbiBmb2xnZW5kZSBJbmZvcm1hdGlvbmVuIHZvbiBJaG5lbicsXG4gICAgZXM6IG51bGwsXG4gICAgZnI6ICdFc3Qgdm91cyBpbnTDqXJlc3NleiBwYXIgbGVzIGltbWF0cmljdWxhdGlvbnMgYSBsYSBUVkEgb3UgYmllbiBsZXMgZMOpY2xhcmF0aW9ucyBkZSBUVkE/JyxcbiAgICBpdDogbnVsbCxcbiAgICBwbDogbnVsbCxcbiAgICBwdDogbnVsbCxcbiAgfSxcbiAgJ0FyZSB5b3UgVkFUIHJlZ2lzdGVyZWQgaW4geW91ciBjb3VudHJ5Pyc6IHtcbiAgICBkZTogJ1NpbmQgU2llIGJlcmVpdHMgdW1zYXR6c3RldWVybGljaCBlcmZhc3N0PycsXG4gICAgZXM6ICfCv0VzdMOhIHN1amV0byBhIElWQSBlbiBzdSBwYcOtcz8nLFxuICAgIGZyOiAnw4p0ZXMtdm91cyBpbnNjcml0IGEgbGEgVFZBIGRhbnMgdm90cmUgcGF5cz8nLFxuICAgIGl0OiAnU2VpIHJlZ2lzdHJhdG8gYWkgZmluaSBJVkEgbmVsIHR1byBTdGF0byBkaSBzdGFiaWxpbWVudG8/JyxcbiAgICBwbDogJ0N6eSBwb3NpYWRhc3ogcmVqZXN0cmFjasSZIFZBVCB3IHN3b2ltIGtyYWp1PycsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gICdDZW50cmFsIEV1cm9wZWFuIEV4cGFuc2lvbiBQb2xhbmQgYW5kIEN6ZWNoIFJlcHVibGljIG9ubHknOiB7XG4gICAgZGU6ICdaZW50cmFsZXVyb3BhIFByb2dyYW1tIC0gUG9sZW4vVHNjaGVjaGllbiAobnVyIFBvbGVuIHVuZCBUc2NoZWNoaWVuKScsXG4gICAgZXM6IG51bGwsXG4gICAgZnI6IG51bGwsXG4gICAgaXQ6IG51bGwsXG4gICAgcGw6IG51bGwsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gICdEYXRlICYgVGltZSAoUGFjaWZpYyBUaW1lKSc6IHtcbiAgICBkZTogJ0RhdHVtJyxcbiAgICBwdDogJ0RhdGEgZSBob3LDoXJpbyAoaG9yw6FyaW8gcGFkcsOjbyBkbyBQYWPDrWZpY28pJyxcbiAgfSxcbiAgJ0RvIHlvdSBoYXZlIGEgVkFUIHF1ZXN0aW9uPyc6IHtcbiAgICBkZTogJ0hhYmVuIFNpZSBlaW5lIEZyYWdlIGJldHJlZmZlbmQgZGVyIFVtc2F0enN0ZXVlcj8nLFxuICAgIGVzOiBudWxsLFxuICAgIGZyOiAnQXZlei12b3VzIHVuZSBxdWVzdGlvbiByZWxhdGl2ZSBhIGxhIFRWQT8nLFxuICAgIGl0OiBudWxsLFxuICAgIHBsOiBudWxsLFxuICAgIHB0OiBudWxsLFxuICB9LFxuICAnRXVyb3BlYW4gVW5pb24gRnJhbmNlLCBDemVjaCBSZXB1YmxpYywgR2VybWFueSwgSXRhbHksIFBvbGFuZCwgU3BhaW4sIFVLJzoge1xuICAgIGRlOiAnUGFuLUV1cm9wYSBQcm9ncmFtbSDigJMgRlIsIFVLLCBJVCwgU1AsIFBMLCBDWicsXG4gICAgZXM6IG51bGwsXG4gICAgZnI6IG51bGwsXG4gICAgaXQ6IG51bGwsXG4gICAgcGw6IG51bGwsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gICdFVSBjb3VudHJpZXMgeW91IGFyZSBhbHJlYWR5IFZBVCByZWdpc3RlcmVkIGluJzoge1xuICAgIGRlOiAnU29uc3RpZ2UgRVUgTGFlbmRlciBpbiBkZW5lbiBTaWUgYmVyZWl0cyB1bXNhdHpzdGV1ZXJsaWNoIGVyZmFzc3Qgc2luZCcsXG4gICAgZXM6ICdQYcOtc2VzIGRlIGxhIFVFICBlbiBsb3MgcXVlIHRpZW5lIHJlZ2lzdHJhZG8gZWwgbsO6bWVybyBkZSBJVkEnLFxuICAgIGZyOiAnUGF5cyBkZSBsXFwnVUUgIG/DuSB2b3VzIMOqdGVzIGTDqWrDoCBpbnNjcml0IGRhbnMgbGEgVFZBJyxcbiAgICBpdDogJ0VsZW5jYXJlIGdsaSBTdGF0aSBVRSBpbiBjdWkgc2kgw6ggZ2nDoCByZWdpc3RyYXRpIGFpIGZpbmkgSVZBJyxcbiAgICBwbDogJ0tyYWplIHcgVW5paSBFdXJvcGVqc2tpZWogdyBrdMOzcnljaCBwb3NpYWRhc3ogbnVtZXIgVkFUJyxcbiAgICBwdDogbnVsbCxcbiAgfSxcbiAgJ0hvdyBjYW4gd2UgaGVscCc6IHtcbiAgICBkZTogJ1dpZSBrw7ZubmVuIHdpciBJaG5lbiBiZWhpbGZsaWNoIHNlaW4/JyxcbiAgICBlczogbnVsbCxcbiAgICBmcjogJ0NvbW1lbnQgcG91dm9ucyBub3VzIHZvdXMgYWlkZXo/JyxcbiAgICBpdDogbnVsbCxcbiAgICBwbDogbnVsbCxcbiAgICBwdDogbnVsbCxcbiAgfSxcbiAgJ0kgYWNjZXB0IHRoaXMgcGFydG5lciBhZ3JlZW1lbnQgaW4gd2hvbGUnOiB7XG4gICAgZGU6ICdJY2ggYmluIG1pdCBkZW4gQUdCcyBkZXIgUGFydG5lcnNjaGFmdHN2ZXJ0cmFnIHZvbGxrb21tZW4gZWludmVyc3RhbmRlbicsXG4gICAgcHQ6ICdEZWNsYXJvIHF1ZSBsaSBlIGFjZWl0byBvcyB0ZXJtb3MgZGVzdGUgY29udHJhdG8gZGUgcGFyY2VyaWEnLFxuICB9LFxuICAnSSBhbSBhIENvbXBhbnknOiB7XG4gICAgZGU6ICdVbnRlcm5laG1lbicsXG4gICAgZXM6IG51bGwsXG4gICAgZnI6ICcgSmUgc3VpcyB1bmUgQ29tcGFnbmllIC8gRW50cmVwcmlzZScsXG4gICAgaXQ6IG51bGwsXG4gICAgcGw6IG51bGwsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gICdJIGFtIGEgQ2hhcml0eS9Ob24gUHJvZml0Jzoge1xuICAgIGRlOiAnV29obGZhaHJ0c3ZlcmJhbmQnLFxuICAgIGVzOiBudWxsLFxuICAgIGZyOiAnSmUgc3VpcyB1bmUgQ29tcGFnbmllIC8gRW50cmVwcmlzZScsXG4gICAgaXQ6IG51bGwsXG4gICAgcGw6IG51bGwsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gICdJIGFtIGEgUGFydG5lcnNoaXAnOiB7XG4gICAgZGU6ICdQYXJ0bmVyc2NoYWZ0ICh6LkIuIEdiUiknLFxuICAgIGVzOiBudWxsLFxuICAgIGZyOiAnSmUgc3VpcyB1bmUgZW50cmVwcmlzZSBlbiBwYXJ0ZW5hcmlhdCcsXG4gICAgaXQ6IG51bGwsXG4gICAgcGw6IG51bGwsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gICdJIGFtIGEgU29sZSBUcmFkZXInOiB7XG4gICAgZGU6ICdFaW56ZWx1bnRlcm5laG1lbicsXG4gICAgZXM6IG51bGwsXG4gICAgZnI6ICdKZSBzdWlzIHVuZSBFbnRyZXByaXNlIGluZGl2aWR1ZWxsZScsXG4gICAgaXQ6IG51bGwsXG4gICAgcGw6IG51bGwsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gICdJIGFtIGFuIEluZGl2aWR1YWwnOiB7XG4gICAgZGU6ICdQZXJzb24nLFxuICAgIGVzOiBudWxsLFxuICAgIGZyOiAnamUgc3VpcyB1biB0cmF2YWlsbGV1ciBhdXRvbm9tZScsXG4gICAgaXQ6IG51bGwsXG4gICAgcGw6IG51bGwsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gICdQbGVhc2UgY2hvb3NlIGEgcHJvZHVjdCc6IHtcbiAgICBkZTogJ0JpdHRlIHfDpGhsZW4gU2llIGVpbiBQcm9kdWt0IGF1cycsXG4gICAgZXM6IG51bGwsXG4gICAgZnI6IG51bGwsXG4gICAgaXQ6IG51bGwsXG4gICAgcGw6IG51bGwsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gICdQbGVhc2UgdGVsbCB1cyc6IHtcbiAgICBkZTogJ1dpciBicmF1Y2hlbiBiaXR0ZSBkaWUgZm9sZ2VuZGUgSW5mb3JtYXRpb24nLFxuICAgIGVzOiBudWxsLFxuICAgIGZyOiAnU+KAmWlsIHZvdXMgcGxhaXQgdmV1aWxsZXogY29uZmlybWVyJyxcbiAgICBpdDogbnVsbCxcbiAgICBwbDogbnVsbCxcbiAgICBwdDogbnVsbCxcbiAgfSxcbiAgJ1Byb3NwZWN0IEVtYWlsJzoge1xuICAgIGRlOiAnRS1NYWlsIEFkcmVzc2UgZGVzIEludGVyZXNzZW50ZW4nLFxuICAgIHB0OiAnRW1haWwgZG8gUHJvc3BlYycsXG4gIH0sXG4gICdQcm9zcGVjdCBOYW1lJzoge1xuICAgIGRlOiAnQW5zcHJlY2hwYXJ0bmVyIGRlcyBJbnRlcmVzc2VudGVuJyxcbiAgICBwdDogJ05vbWUgZG8gUHJvc3BlY3QnLFxuICB9LFxuICAnUHJvc3BlY3QgUGhvbmUnOiB7XG4gICAgZGU6ICdUZWxlZm9ubnVtbWVyIGRlcyBJbnRlcmVzc2VudGVuJyxcbiAgICBwdDogJ1RlbGVmb25lIGRvIFByb3NwZWN0JyxcbiAgfSxcbiAgJ1Byb3NwZWN0IFRpdGxlJzoge1xuICAgIGRlOiAnVGl0ZWwgZGVzIEludGVyZXNzZW50ZW4nLFxuICAgIHB0OiAnQ2FyZ28gZG8gUHJvc3BlY3QnLFxuICB9LFxuICAnUHJvc3BlY3QgSW50ZWdyYXRpb24gU29mdHdhcmUnOiB7XG4gICAgcHQ6ICdTb2Z0d2FyZSBkZSBJbnRlZ3Jhw6fDo28gZG8gUHJvc3BlY3QnLFxuICB9LFxuICAnV2hpY2ggY291bnRyaWVzIGFyZSB5b3UgaW50ZXJlc3RlZCBpbj8nOiB7XG4gICAgZGU6ICdJbiB3ZWxjaGVuIEzDpG5kZXJuIG3DtmNodGVuIFNpZSBzaWNoIHVtc2F0enN0ZXVlcmxpY2ggcmVnaXN0cmllcmVuIGxhc3Nlbj8nLFxuICAgIGVzOiBudWxsLFxuICAgIGZyOiAnUXVlbHMgc29udCBsZXMgcGF5cyBxdWkgdm91cyBpbnTDqXJlc3NlPycsXG4gICAgaXQ6IG51bGwsXG4gICAgcGw6IG51bGwsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gICdZb3VyIEFtYXpvbiBzZWxsZXIgbnVtYmVyJzoge1xuICAgIGRlOiAnSWhyZSBBbWF6b24gVmVya8OkdWZlcm51bW1lcicsXG4gICAgZXM6ICdTdSBuw7ptZXJvIGRlIHZlbmRlZG9yIGRlIEFtYXpvbicsXG4gICAgZnI6ICdWb3RyZSBudW3DqXJvIGRlIHZlbmRldXIgQW1hem9uJyxcbiAgICBpdDogJ051bWVybyBhY2NvdW50IHZlbmRpdG9yZSBBbWF6b24nLFxuICAgIHBsOiAnVHfDs2ogbnVtZXIgc3ByemVkYXdjeSBBbWF6b24nLFxuICAgIHB0OiBudWxsLFxuICB9LFxuICAnWW91ciBCdXNpZW5zcyBFbWFpbCc6IHtcbiAgICBwdDogJ1BvciBmYXZvciBpbnNpcmEgc2V1IGVtYWlsIGNvbWVyY2lhbCcsXG4gIH0sXG4gICdZb3VyIGNvdW50cnkgVkFUIG51bWJlcic6IHtcbiAgICBkZTogJ1Vtc2F0enN0ZXVlci1JZGVudGlmaWthdGlvbnNudW1tZXInLFxuICAgIGVzOiAnTsO6bWVybyBkZSBJVkEgZGUgc3UgcGHDrXMnLFxuICAgIGZyOiAnVm90cmUgbnVtw6lybyBkZSBUVkEgaW50cmFjb21tdW5hdXRhaXJlIGRhbnMgdm90cmUgcGF5cycsXG4gICAgaXQ6ICdOdW1lcm8gZGkgcGFydGl0YSBJVkEgZGVsbG8gU3RhdG8gZGkgc3RhYmlsaW1lbnRvJyxcbiAgICBwbDogJ051bWVyIFZBVCB3IFR3b2ltIGtyYWp1JyxcbiAgICBwdDogbnVsbCxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHF1ZXN0aW9uQnlMb2NhbGU7XG4iLCIvLyBAZmxvd1xuZXhwb3J0IHR5cGUgTG9jYWxlQnlFcnJvciA9IHtcbiAgW2tleTogc3RyaW5nXToge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bGwsXG4gIH0gfCBzdHJpbmcgfCBudWxsLFxufTtcblxuZXhwb3J0IGNvbnN0IGVycm9yQnlMb2NhbGU6IExvY2FsZUJ5RXJyb3IgPSB7XG4gICdFbWFpbCBkb21haW4gaW52YWxpZCc6IHtcbiAgICBkZTogJ0JpdHRlIGVpbmUgZ3VlbHRpZ2UgRW1haWwgQWRyZXNzZSBlaW50cmFnZW4nLFxuICAgIGVzOiAnUG9yIGZhdm9yIGludHJvZHV6Y2EgdW4gbsO6bWVybyBkZcKgZW1haWwgdsOhbGlkbycsXG4gICAgZnI6ICdTXFwnaWwgdm91cyBwbGHDrnQgZW50cmVyIHVuIEFkcmVzc2UgZW1haWwgdmFsaWRlJyxcbiAgICBpdDogJ1NpIHByZWdhIGRpIGluc2VyaXJlIHVuIG51bWVybyBkaSBlbWFpbCB2YWxpZG8nLFxuICAgIHB0OiAnUG9yIGZhdm9yIGluc2lyYSB1bSBlbmRlcmXDp28gZGUgZW1haWwgdsOhbGlkbycsXG4gIH0sXG4gICdGaWVsZCBtdXN0IGJlIGV4YWN0bHkgNjQtY2hhcmFjdGVycyBsb25nJzoge1xuICAgIGRlOiAnRGFzIEZlbGQgbXVzcyBleGFrdCA2NCBaZWljaGVuIGxhbmcgc2VpbicsXG4gICAgZXM6ICdFbCBjYW1wbyB0aWVuZSBxdWUgdGVuZXIgZXhhY3RhbWVudGUgNjQgY2FyYWN0ZXJlcycsXG4gICAgZnI6ICdMZSBjaGFtcCBkb2l0IGNvbXBvcnRlciBleGFjdGVtZW50IDY0IGNhcmFjdMOocmVzJyxcbiAgICBpdDogJ0lsIGNhbXBvIGRldmUgY29udGVuZXJlIGVzYXR0YW1lbnRlIDY0IGNhcmF0dGVyaScsXG4gICAgcHQ6IG51bGwsXG4gIH0sXG4gICdGaXJzdCBhbmQgbGFzdCBuYW1lIGFyZSBib3RoIHJlcXVpcmVkJzoge1xuICAgIGRlOiAnVm9yLSB1bmQgWnVuYW1lIHdlcmRlbiBiZW5vZXRpZ3QnLFxuICAgIGVzOiAnTm9tYnJlIHkgYXBlbGxpZG8gYW1ib3Mgc29uIG9ibGlnYXRvcmlvcycsXG4gICAgZnI6ICdOb20gZXQgcHLDqW5vbSBzb250IHRvdXMgZGV1eCBuw6ljZXNzYWlyZXMnLFxuICAgIGl0OiAnTm9tZSBlIGNvZ25vbWUgc29ubyBlbnRyYW1iaSBuZWNlc3NhcmknLFxuICAgIHB0OiAnTm9tZSBlIHNvYnJlbm9tZSBzw6NvIGFtYm9zIG5lY2Vzc8OhcmlvcycsXG4gIH0sXG4gICdGaXJzdCBhbmQgbGFzdCBuYW1lIGFyZSByZXF1aXJlZCc6IHtcbiAgICBwdDogJ05vbWUgZSBzb2JyZW5vbWUgc8OjbyBvYnJpZ2F0w7NyaW9zJyxcbiAgICBmcjogJ05vbSBldCBwcsOpbm9tIHNvbnQgdG91cyBkZXV4IG7DqWNlc3NhaXJlcycsXG4gIH0sXG4gICdJbnZhbGlkIGNoYXJhY3RlcnMgZm91bmQnOiB7XG4gICAgZGU6ICdVbmfDvGx0aWdlIFplaWNoZW4gZ2VmdW5kZW4nLFxuICAgIHB0OiAnQ2FyYWN0ZXJlcyBpbnbDoWxpZG9zIGVuY29udHJhZG9zJyxcbiAgfSxcbiAgJ0lsbGVnYWwgY2hhcmFjdGVycyBmb3VuZCc6IHtcbiAgICBkZTogJ0lsbGVnYWxlIFplaWNoZW4gZ2VmdW5kZW4nLFxuICAgIHB0OiAnQ2FyYWN0ZXJlcyBpbGVnYWlzIGVuY29udHJhZG9zJyxcbiAgfSxcbiAgJ0ludmFsaWQgZW1haWwnOiB7XG4gICAgZGU6ICdCaXR0ZSBlaW5lIGd1ZWx0aWdlIEVtYWlsIEFkcmVzc2UgZWludHJhZ2VuJyxcbiAgICBlczogJ1BvciBmYXZvciBpbnRyb2R1emNhIHVuIG7Dum1lcm8gZGXCoGVtYWlsIHbDoWxpZG8nLFxuICAgIGZyOiAnU1xcJ2lsIHZvdXMgcGxhw650IGVudHJlciB1biBBZHJlc3NlIGVtYWlsIHZhbGlkZScsXG4gICAgaXQ6ICdTaSBwcmVnYSBkaSBpbnNlcmlyZSB1biBudW1lcm8gZGkgZW1haWwgdmFsaWRvJyxcbiAgICBwdDogJ1BvciBmYXZvciBpbnNpcmEgdW0gZW5kZXJlw6dvIGRlIGVtYWlsIHbDoWxpZG8nLFxuICB9LFxuICAnSW52YWxpZCBlbWFpbCBmb3JtYXQuIFBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsJzoge1xuICAgIGRlOiAnVW5nw7xsdGlnZSBFLU1haWwgQWRyZXNzZS4nLFxuICAgIGZyOiAnU1xcJ2lsIHZvdXMgcGxhw650IGVudHJlciB1biBBZHJlc3NlIGVtYWlsIHZhbGlkZVxcJ2FuY2hvcicsXG4gICAgcHQ6ICdGb3JtYXRvIGRlIGVtYWlsIGludsOhbGlkby4gUG9yIGZhdm9yIGluc2lyYSB1bSBlbmRlcmXDp28gZGUgZW1haWwgdsOhbGlkby4nLFxuICB9LFxuICAnTGV0dGVycywgaHlwaGVucywgYXBvc3Ryb3BoaWVzLCBhbmQgc3BhY2VzIG9ubHknOiB7XG4gICAgZGU6ICdCdWNoc3RhYmVuLCBCaW5kZXN0cmljaGUsIEFwb3N0cm9waGVuIHVuZCBGcmVpemVpY2hlbiBhdXNzY2hsaWVzc2xpY2gnLFxuICAgIGVzOiAnTGV0dGVyZSwgdHJhdHRpbmksIGFwb3N0cm9maSBlIHNwYXppIHNvbHRhbnRvJyxcbiAgICBmcjogJ0xldHRyZXMsIHRyYWl0IGTigJl1bmlvbiwgYXBvc3Ryb3BoZSBldCBlc3BhY2Ugc2V1bGVtZW50JyxcbiAgICBpdDogJ0xldHJhcywgZ3Vpb25lcywgYXDDs3N0cm9mb3MsIHkgZXNwYWNpb3Mgc29sYW1lbnRlJyxcbiAgICBwdDogJ1NvbWVudGUgbGV0cmFzLCBow61mZW5zLCBhcMOzc3Ryb2ZvcyBlIGVzcGHDp29zJyxcbiAgfSxcbiAgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsJzoge1xuICAgIGRlOiAnQml0dGUgdHJhZ2VuIFNpZSBlaW5lIGfDvGx0aWdlIEUtTWFpbCBlaW4nLFxuICAgIGVzOiAnUG9yIGZhdm9yIGludHJvZHV6Y2EgdW4gbsO6bWVybyBkZSBlbWFpbCB2w6FsaWRvJyxcbiAgICBmcjogJ1NcXCdpbCB2b3VzIHBsYcOudCBlbnRyZXIgdW4gQWRyZXNzZSBlbWFpbCB2YWxpZGUnLFxuICAgIGl0OiAnU2kgcHJlZ2EgZGkgaW5zZXJpcmUgdW4gbnVtZXJvIGRpIGVtYWlsIHZhbGlkbycsXG4gICAgcHQ6ICdQb3IgZmF2b3IgaW5zaXJhIHVtIGVuZGVyZcOnbyBkZSBlbWFpbCB2w6FsaWRvJyxcbiAgfSxcbiAgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnOiB7XG4gICAgZGU6ICdCaXR0ZSBlaW5lIGd1ZWx0aWdlIEVtYWlsIEFkcmVzc2UgZWludHJhZ2VuJyxcbiAgICBlczogJ1BvciBmYXZvciBpbnRyb2R1emNhIHVuIG7Dum1lcm8gZGXCoGVtYWlsIHbDoWxpZG8nLFxuICAgIGZyOiAnU1xcJ2lsIHZvdXMgcGxhw650IGVudHJlciB1biBBZHJlc3NlIGVtYWlsIHZhbGlkZScsXG4gICAgaXQ6ICdTaSBwcmVnYSBkaSBpbnNlcmlyZSB1biBudW1lcm8gZGkgZW1haWwgdmFsaWRvJyxcbiAgICBwdDogJ1BvciBmYXZvciBpbnNpcmEgdW0gZW5kZXJlw6dvIGRlIGVtYWlsIHbDoWxpZG8nLFxuICB9LFxuICAnUGxlYXNlIGVudGVyIGEgdmFsaWQgcGhvbmUgbnVtYmVyJzoge1xuICAgIGRlOiAnQml0dGUgZ2ViZW4gU2llIGVpbmUgZ8O8bHRpZ2UgVGVsZWZvbm51bW1lciBlaW4nLFxuICAgIGVzOiAnUG9yIGZhdm9yIGludHJvZHV6Y2EgdW4gbsO6bWVybyBkZSB0ZWzDqWZvbm8gdsOhbGlkbycsXG4gICAgZnI6ICdzXFwnaWwgdm91cyBwbGHDrnQgZW50cmVyIHVuIG51bcOpcm8gZGUgdMOpbMOpcGhvbmUgdmFsaWRlJyxcbiAgICBpdDogJ1NpIHByZWdhIGRpIGluc2VyaXJlIHVuIG51bWVybyBkaSB0ZWxlZm9ubyB2YWxpZG8nLFxuICAgIHB0OiAnUG9yIGZhdm9yIGluc2lyYSB1bSBuw7ptZXJvIGRlIHRlbGVmb25lIHbDoWxpZG8nLFxuICB9LFxuICAnUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMJzoge1xuICAgIGRlOiAnQml0dGUgZ2ViZW4gU2llIGVpbmUgZ8O8bHRpZ2UgVVJMIGVpbicsXG4gICAgZXM6IG51bGwsXG4gICAgZnI6ICdWZXVpbGxleiBlbnRyZXIgdW4gVVJMIHZhbGlkZScsXG4gICAgaXQ6ICdJbnNlcmlzY2kgdW4gVVJMIHZhbGlkbycsXG4gICAgcHQ6ICdQb3IgZmF2b3IgaW5zaXJhIHVtYSBVUkwgdsOhbGlkYScsXG4gIH0sXG4gICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBWQVQgbnVtYmVyJzoge1xuICAgIGRlOiAnQml0dGUgZ2ViZW4gU2llIGVpbmUgZ8O8bHRpZ2UgTXdTdC4tTnVtbWVyIGVpbicsXG4gIH0sXG4gICdQbGVhc2UgZW50ZXIgeW91ciBhZGRyZXNzJzoge1xuICAgIGRlOiAnQml0dGUgZ2ViZW4gU2llIElocmUgQWRyZXNzZSBlaW4nLFxuICAgIHB0OiAnRGlnaXRlIHNldSBlbmRlcmXDp28nLFxuICB9LFxuICAnUGxlYXNlIGVudGVyIHlvdXIgZmlyc3QgbmFtZSc6IHtcbiAgICBkZTogJ0JpdHRlIGdlYmVuIFNpZSBJaHJlbiB2b2xsc3TDpG5kaWdlbiBWb3JuYW1lbiBlaW4nLFxuICAgIGZyOiAnTm9tIGV0IHByw6lub20gc29udCB0b3VzIGRldXggbsOpY2Vzc2FpcmVzJyxcbiAgICBwdDogJ1BvciBmYXZvciBpbnNpcmEgc2V1IHByaW1laXJvIG5vbWUnLFxuICB9LFxuICAnUGxlYXNlIGVudGVyIHlvdXIgZnVsbCBuYW1lJzoge1xuICAgIGRlOiAnQml0dGUgZ2ViZW4gU2llIElocmVuIHZvbGxzdMOkbmRpZ2VuIE5hbWVuIGVpbicsXG4gICAgZnI6ICdOb20gZXQgcHLDqW5vbSBzb250IHRvdXMgZGV1eCBuw6ljZXNzYWlyZXMnLFxuICAgIHB0OiAnUG9yIGZhdm9yIGluc2lyYSBzZXUgbm9tZSBjb21wbGV0bycsXG4gIH0sXG4gICdQbGVhc2UgZW50ZXIgeW91ciBsYXN0IG5hbWUnOiB7XG4gICAgZGU6ICdCaXR0ZSBnZWJlbiBTaWUgSWhyZW4gTmFjaG5hbWVuIGVpbicsXG4gICAgcHQ6ICdQb3IgZmF2b3IgaW5zaXJhIHNldSBzb2JyZW5vbWUnLFxuICB9LFxuICAnUGxlYXNlIGVudGVyIHlvdXIgcGhvbmUgbnVtYmVyJzoge1xuICAgIGRlOiAnQml0dGUgZ2ViZW4gU2llIElocmXCoFRlbGVmb25udW1tZXIgZWluJyxcbiAgICBwdDogJ1BvciBmYXZvciBpbnNpcmEgc2V1IG7Dum1lcm8gZGUgdGVsZWZvbmUnLFxuICB9LFxuICAnUGxlYXNlIGVudGVyIHlvdXIgcG9zdGFsIGNvZGUnOiB7XG4gICAgZGU6ICdCaXR0ZSBnZWJlbiBTaWUgSWhyZSBQb3N0bGVpdHphaGwgZWluJyxcbiAgICBwdDogJ1BvciBmYXZvciBpbnNpcmEgc2V1IENFUCcsXG4gIH0sXG4gICdQbGVhc2UgZW50ZXIgeW91ciBzdGF0ZSc6IHtcbiAgICBkZTogJ0JpdHRlIGdlYmVuIFNpZSBJaHJlwqBNaXRnbGllZHN0YWF0IGVpbsKgJyxcbiAgICBwdDogJ1BvciBmYXZvciBpbnNpcmEgc2V1IGVzdGFkbycsXG4gIH0sXG4gICdQbGVhc2UgZW50ZXIgeW91ciB0aXRsZSc6IHtcbiAgICBkZTogJ0JpdHRlbiBnZWJlbiBTaWUgSWhyZSBUaXRlbCBlaW4nLFxuICAgIHB0OiAnUG9yIGZhdm9yIGluc2lyYSBzZXUgY2FyZ28nLFxuICB9LFxuICAnUGxlYXNlIGVudGVyIHlvdXIgdGVsZXBob25lIG51bWJlcic6IHtcbiAgICBkZTogJ0JpdHRlIGdlYmVuIFNpZSBJaHJlwqBUZWxlZm9ubnVtbWVyIGVpbicsXG4gICAgcHQ6ICdQb3IgZmF2b3IgaW5zaXJhIHNldSBuw7ptZXJvIGRlIHRlbGVmb25lJyxcbiAgfSxcbiAgJ1BsZWFzZSBlbnRlciB5b3VyIGVtYWlsJzoge1xuICAgIGZyOiAnc1xcJ2lsIHZvdXMgcGxhw650IGVudHJlciB1biBBZHJlc3NlIGUtbWFpbCB2YWxpZGUnLFxuICAgIHBsOiAnRGlnaXRlIHNldSBlbWFpbCcsXG4gICAgcHQ6ICdQb3IgZmF2b3IgaW5zaXJhIHNldSBlbWFpbCcsXG4gIH0sXG4gICdQbGVhc2UgZW50ZXIgeW91ciBjaXR5Jzoge1xuICAgIGRlOiAnQml0dGUgZ2ViZW4gU2llIElocmVuIFN0YWF0IGVpbicsXG4gICAgcHQ6ICdQb3IgZmF2b3IgaW5zaXJhIHN1YSBjaWRhZGUnLFxuICB9LFxuICAnUGxlYXNlIGVudGVyIHlvdXIgY291bnRyeSc6IHtcbiAgICBkZTogJ0JpdHRlIGdlYmVuIFNpZSBJaHIgTGFuZCBlaW4nLFxuICAgIHB0OiAnUG9yIGZhdm9yIGluc2lyYSBzZXUgcGHDrXMnLFxuICB9LFxuICAnUGxlYXNlIGVudGVyIHlvdXIgemlwJzoge1xuICAgIGRlOiAnQml0dGUgZ2ViZW4gU2llIElocmUgUExaIGVpbicsXG4gICAgcHQ6ICdQb3IgZmF2b3IgaW5zaXJhIHNldSBjw7NkaWdvIHBvc3RhbCAoQ0VQKScsXG4gIH0sXG4gICdQbGVhc2UgZW50ZXIgeW91ciB6aXBjb2RlJzoge1xuICAgIGRlOiAnQml0dGUgZ2ViZW4gU2llIElocmUgUG9zdGxlaXR6YWhsIGVpbicsXG4gICAgcHQ6ICdQb3IgZmF2b3IgaW5zaXJhIHNldSBjw7NkaWdvIHBvc3RhbCAoQ0VQKScsXG4gIH0sXG4gICdTb21ldGhpbmcgd2VudCB3cm9uZy4gV2h5IG5vdCBjYWxsIG91ciBzYWxlcyB0ZWFtIGRpcmVjdGx5Pyc6IHtcbiAgICBkZTogJ0V0d2FzIGlzdCBzY2hpZWYgZ2VsYXVmZW4uIFdhcnVtIG5pY2h0IGRpcmVrdCB1bnNlcmVuIFZlcnRyaWViIGFucnVmZW4/JyxcbiAgICBwdDogJ0FsZ28gZGV1IGVycmFkby4gUG9yIHF1ZSBuw6NvIGNvbnRhdGFyIG5vc3NvIHRpbWUgZGUgdmVuZGFzIGRpcmV0YW1lbnRlPycsXG4gIH0sXG4gICdTcGVjaWFsIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkJzoge1xuICAgIGRlOiAnQnVjaHN0YWJlbiwgQmluZGVzdHJpY2hlLCBBcG9zdHJvcGhlbiB1bmQgRnJlaXplaWNoZW4gYXVzc2NobGllc3NsaWNoJyxcbiAgICBlczogJ0xldHRlcmUsIHRyYXR0aW5pLCBhcG9zdHJvZmkgZSBzcGF6aSBzb2x0YW50bycsXG4gICAgZnI6ICdMZXR0cmVzLCB0cmFpdCBk4oCZdW5pb24sIGFwb3N0cm9waGUgZXQgZXNwYWNlIHNldWxlbWVudCcsXG4gICAgaXQ6ICdMZXRyYXMsIGd1aW9uZXMsIGFww7NzdHJvZm9zLCB5IGVzcGFjaW9zIHNvbGFtZW50ZScsXG4gICAgcHQ6ICdTb21lbnRlIGxldHJhcywgaMOtZmVucywgYXDDs3N0cm9mb3MgZSBlc3Bhw6dvcycsXG4gIH0sXG4gICdTeXN0ZW0gRXJyb3InOiB7XG4gICAgcHQ6ICdBbGdvIGRldSBlcnJhZG8uIFBvciBxdWUgbsOjbyBjb250YXRhciBub3NzbyB0aW1lIGRlIHZlbmRhcyBkaXJldGFtZW50ZT8nLFxuICB9LFxuICAnVGhpcyBmaWVsZCBpcyBpbnZhbGlkJzoge1xuICAgIGRlOiAnRGllc2VzIEZlbGQgaXMgdW5nw7xsdGlnJyxcbiAgICBlczogJ0VzdGUgY2FtcG8gbm8gZXMgdmFsaWRvJyxcbiAgICBmcjogJ0NlIGNoYW1wIG5cXCdlc3QgcGFzIHZhbGlkZScsXG4gICAgaXQ6ICdRdWVzdG8gY2FtcG8gbm9uIMOoIHZhbGlkbycsXG4gICAgcHQ6ICdDYW1wbyBpbnbDoWxpZG8nLFxuICB9LFxuICAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCc6IHtcbiAgICBkZTogJ0RhcyBpc3QgZWluIFBmbGljaHRmZWxkJyxcbiAgICBlczogJ0VzdGUgY2FtcG8gZXMgb2JsaWdhdG9yaW8nLFxuICAgIGZyOiAnQ2UgY2hhbXAgZXN0IHJlcXVpcycsXG4gICAgaXQ6ICdRdWVzdG8gY2FtcG8gw6ggb2JibGlnYXRvcmlvJyxcbiAgICBwdDogJ0VzdGUgY2FtcG8gw6kgb2JyaWdhdMOzcmlvJyxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVycm9yQnlMb2NhbGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRklFTERTIGZyb20gJy4vbGFuZ3VhZ2UtYnktZmllbGQnO1xuaW1wb3J0IFFVRVNUSU9OUyBmcm9tICcuL2xhbmd1YWdlLWJ5LXF1ZXN0aW9uJztcbmltcG9ydCBFUlJPUk1FU1NBR0UgZnJvbSAnLi9sYW5ndWFnZS1ieS1lcnJvcic7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IExvY2FsZUJ5RXJyb3IgfSBmcm9tICcuL2xhbmd1YWdlLWJ5LWVycm9yJztcbmltcG9ydCB0eXBlIHsgTG9jYWxlQnlRdWVzdGlvbiB9IGZyb20gJy4vbGFuZ3VhZ2UtYnktcXVlc3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBMb2NhbGVCeUZpZWxkIH0gZnJvbSAnLi9sYW5ndWFnZS1ieS1maWVsZCc7XG5cbnR5cGUgTG9jYWxlVHJhbnNsYXRpb24gPSB7XG4gIFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVsbCB9IHwgTG9jYWxlQnlFcnJvciB8IExvY2FsZUJ5UXVlc3Rpb24gfCBMb2NhbGVCeUZpZWxkIHwgc3RyaW5nIHwgbnVsbCxcbn07XG5cbmNvbnN0IHRyYW5zbGF0aW9uQnlMb2NhbGU6IExvY2FsZVRyYW5zbGF0aW9uID0ge1xuICBBdXN0cmlhOiB7XG4gICAgZGU6ICfDlnN0ZXJyZWljaCcsXG4gICAgZXM6ICdBdXN0cmlhJyxcbiAgICBmcjogJ0F1dHJpY2hlJyxcbiAgICBpdDogJ0F1c3RyaWEnLFxuICAgIHB0OiAnQXVzdHJpYScsXG4gIH0sXG4gIEJlbGdpdW06IHtcbiAgICBkZTogJ0JlbGdpZW4nLFxuICAgIGVzOiAnQsOpbGdpY2EnLFxuICAgIGZyOiAnQmVsZ2lxdWUnLFxuICAgIGl0OiAnQmVsZ2lvJyxcbiAgICBwdDogJ0JlbGdpYScsXG4gIH0sXG4gIEJ1bGdhcmlhOiB7XG4gICAgZGU6ICdCdWxnYXJpZW4nLFxuICAgIGVzOiAnQnVsZ2FyaWEnLFxuICAgIGZyOiAnQnVsZ2FyaWUnLFxuICAgIGl0OiAnQnVsZ2FyaWEnLFxuICAgIHB0OiAnQnXFgmdhcmlhJyxcbiAgfSxcbiAgQ3JvYXRpYToge1xuICAgIGRlOiAnS3JvYXRpZW4nLFxuICAgIGVzOiAnQ3JvYWNpYScsXG4gICAgZnI6ICdDcm9hdGllJyxcbiAgICBpdDogJ0Nyb2F6aWEnLFxuICAgIHB0OiAnQ2hvcndhY2phJyxcbiAgfSxcbiAgQ3lwcnVzOiB7XG4gICAgZGU6ICdaeXBlcm4nLFxuICAgIGVzOiAnQ2hpcHJlJyxcbiAgICBmcjogJ0NoeXByZScsXG4gICAgaXQ6ICdDaXBybycsXG4gICAgcHQ6ICdDeXByJyxcbiAgfSxcbiAgJ0N6ZWNoIFJlcHVibGljJzoge1xuICAgIGRlOiAnVHNjaGVjaGllbicsXG4gICAgZXM6ICdSZXDDumJsaWNhIENoZWNhJyxcbiAgICBmcjogJ1LDqXB1YmxpcXVlIFRjaMOocXVlJyxcbiAgICBpdDogJ1JlcHViYmxpY2EgQ2VjYScsXG4gICAgcHQ6ICdSZXB1Ymxpa2EgQ3plc2thJyxcbiAgfSxcbiAgRGVubWFyazoge1xuICAgIGRlOiAnRMOkbmVtYXJrJyxcbiAgICBlczogJ0RpbmFtYXJjYScsXG4gICAgZnI6ICdEYW5lbWFyaycsXG4gICAgaXQ6ICdEYW5pbWFyY2EnLFxuICAgIHB0OiAnRGFuaWEnLFxuICB9LFxuICBFc3RvbmlhOiB7XG4gICAgZGU6ICdFc3RsYW5kJyxcbiAgICBlczogJ0VzdG9uaWEnLFxuICAgIGZyOiAnRXN0b25pZScsXG4gICAgaXQ6ICdFc3RvbmlhJyxcbiAgICBwdDogJ0VzdG9uaWEnLFxuICB9LFxuICBlcnJvcjogRVJST1JNRVNTQUdFLFxuICBmaWVsZHM6IEZJRUxEUyxcbiAgRmlubGFuZDoge1xuICAgIGRlOiAnRmlubmxhbmQnLFxuICAgIGVzOiAnRmlubGFuZGlhJyxcbiAgICBmcjogJ0ZpbmxhbmRlJyxcbiAgICBpdDogJ0ZpbmxhbmRpYScsXG4gICAgcHQ6ICdGaW5sYW5kaWEnLFxuICB9LFxuICBGcmFuY2U6IHtcbiAgICBkZTogJ0ZyYW5rcmVpY2gnLFxuICAgIGVzOiAnRnJhbmNpYScsXG4gICAgZnI6ICdGcmFuY2UnLFxuICAgIGl0OiAnRnJhbmNpYScsXG4gICAgcHQ6ICdGcmFuY2phJyxcbiAgfSxcbiAgR2VybWFueToge1xuICAgIGRlOiAnRGV1dHNjaGxhbmQnLFxuICAgIGVzOiAnQWxlbWFuaWEnLFxuICAgIGZyOiAnQWxsZW1hZ25lJyxcbiAgICBpdDogJ0dlcm1hbmlhJyxcbiAgICBwdDogJ05pZW1jeScsXG4gIH0sXG4gIEdyZWVjZToge1xuICAgIGRlOiAnR3JpZWNoZW5sYW5kJyxcbiAgICBlczogJ0dyZWNpYScsXG4gICAgZnI6ICdHcsOoY2UnLFxuICAgIGl0OiAnR3JlY2lhJyxcbiAgICBwdDogJ0dyZWNqYScsXG4gIH0sXG4gIEh1bmdhcnk6IHtcbiAgICBkZTogJ1VuZ2FybicsXG4gICAgZXM6ICdIdW5ncsOtYScsXG4gICAgZnI6ICdIb25ncmllJyxcbiAgICBpdDogJ1VuZ2hlcmlhJyxcbiAgICBwdDogJ1fEmWdyeScsXG4gIH0sXG4gIElyZWxhbmQ6IHtcbiAgICBkZTogJ0lybGFuZCcsXG4gICAgZXM6ICdJcmxhbmRhJyxcbiAgICBmcjogJ0lybGFuZGUnLFxuICAgIGl0OiAnSXJsYW5kYScsXG4gICAgcHQ6ICdJcmxhbmRpYScsXG4gIH0sXG4gIEl0YWx5OiB7XG4gICAgZGU6ICdJdGFsaWVuJyxcbiAgICBlczogJ0l0YWxpYScsXG4gICAgZnI6ICdJdGFsaWUnLFxuICAgIGl0OiAnSXRhbGlhJyxcbiAgICBwdDogJ1fFgm9jaHknLFxuICB9LFxuICBMYXR2aWE6IHtcbiAgICBkZTogJ0xldHRsYW5kJyxcbiAgICBlczogJ0xldG9uaWEnLFxuICAgIGZyOiAnTGV0dG9uaWUnLFxuICAgIGl0OiAnTGV0dG9uaWEnLFxuICAgIHB0OiAnxYFvdHdhJyxcbiAgfSxcbiAgTGl0aHVhbmlhOiB7XG4gICAgZGU6ICdMaXRhdWVuJyxcbiAgICBlczogJ0xpdHVhbmlhJyxcbiAgICBmcjogJ0xpdHVhbmllJyxcbiAgICBpdDogJ0xpdHVhbmlhJyxcbiAgICBwdDogJ0xpdHdhJyxcbiAgfSxcbiAgTHV4ZW1ib3VyZzoge1xuICAgIGRlOiAnTHV4ZW1idXJnJyxcbiAgICBlczogJ0x1eGVtYnVyZ28nLFxuICAgIGZyOiAnTHV4ZW1ib3VyZycsXG4gICAgaXQ6ICdMdXNzZW1idXJnbycsXG4gICAgcHQ6ICdMdWtzZW1idXJnJyxcbiAgfSxcbiAgTWFsdGE6IHtcbiAgICBkZTogJ01hbHRhJyxcbiAgICBlczogJ01hbHRhJyxcbiAgICBmcjogJ01hbHRlJyxcbiAgICBpdDogJ01hbHRhJyxcbiAgICBwdDogJ01hbHRhJyxcbiAgfSxcbiAgTmV0aGVybGFuZHM6IHtcbiAgICBkZTogJ05pZWRlcmxhbmRlJyxcbiAgICBlczogJ1Bhw61zZXMgQmFqb3MnLFxuICAgIGZyOiAnUGF5cy1CYXMnLFxuICAgIGl0OiAnT2xhbmRhJyxcbiAgICBwdDogJ0hvbGFuZGlhJyxcbiAgfSxcbiAgUG9sYW5kOiB7XG4gICAgZGU6ICdQb2xlbicsXG4gICAgZXM6ICdQb2xvbmlhJyxcbiAgICBmcjogJ1BvbG9nbmUnLFxuICAgIGl0OiAnUG9sb25pYScsXG4gICAgcHQ6ICdQb2xza2EnLFxuICB9LFxuICBQb3J0dWdhbDoge1xuICAgIGRlOiAnUG9ydHVnYWwnLFxuICAgIGVzOiAnUG9ydHVnYWwnLFxuICAgIGZyOiAnUG9ydHVnYWwnLFxuICAgIGl0OiAnUG9ydG9nYWxsbycsXG4gICAgcHQ6ICdQb3J0dWdhbGlhJyxcbiAgfSxcbiAgUm9tYW5pYToge1xuICAgIGRlOiAnUnVtw6RuaWVuJyxcbiAgICBlczogJ1J1bWFuaWEnLFxuICAgIGZyOiAnUm91bWFuaWUnLFxuICAgIGl0OiAnUm9tYW5pYScsXG4gICAgcHQ6ICdSdW11bmlhJyxcbiAgfSxcbiAgU2xvdmFraWE6IHtcbiAgICBkZTogJ1Nsb3dha2VpJyxcbiAgICBlczogJ0VzbG92YXF1aWEnLFxuICAgIGZyOiAnU2xvdmFxdWllJyxcbiAgICBpdDogJ1Nsb3ZhY2NoaWEnLFxuICAgIHB0OiAnU8WCb3dhY2phJyxcbiAgfSxcbiAgU2xvdmVuaWE6IHtcbiAgICBkZTogJ1Nsb3dlbmllbicsXG4gICAgZXM6ICdFc2xvdmVuaWEnLFxuICAgIGZyOiAnU2xvdsOpbmllJyxcbiAgICBpdDogJ1Nsb3ZlbmlhJyxcbiAgICBwdDogJ1PFgm93ZW5pYScsXG4gIH0sXG4gIFNwYWluOiB7XG4gICAgZGU6ICdTcGFuaWVuJyxcbiAgICBlczogJ0VzcGHDsWEnLFxuICAgIGZyOiAnRXNwYWduZScsXG4gICAgaXQ6ICdTcGFnbmEnLFxuICAgIHB0OiAnSGlzenBhbmlhJyxcbiAgfSxcbiAgU3dlZGVuOiB7XG4gICAgZGU6ICdTY2h3ZWRlbicsXG4gICAgZXM6ICdTdWVjaWEnLFxuICAgIGZyOiAnU3XDqGRlJyxcbiAgICBpdDogJ1N2ZXppYScsXG4gICAgcHQ6ICdTendlY2phJyxcbiAgfSxcbiAgJ1VuaXRlZCBLaW5nZG9tJzoge1xuICAgIGRlOiAnR3Jvw59icml0YW5uaWVuJyxcbiAgICBlczogJ1JlaW5vIFVuaWRvJyxcbiAgICBmcjogJ1JveWF1bWUtVW5pJyxcbiAgICBpdDogJ1JlZ25vIFVuaXRvJyxcbiAgICBwdDogJ1dpZWxrYSBCcnl0YW5pYScsXG4gIH0sXG5cbiAgcXVlc3Rpb25zOiBRVUVTVElPTlMsXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbkJ5TG9jYWxlO1xuIiwiLy8gQGZsb3dcblxuLy8gRGF0YVxuaW1wb3J0IExBTkdVQUdFIGZyb20gJy4uL2NvbnN0YW50cy9sYW5ndWFnZSc7XG5cbi8vIEhlbHBlciB0byBnZXQgbG9jYWxlIHN0cmluZyB0ZXh0XG4vLyBAcmV0dXJuIHsgU3RyaW5nIH1cbmV4cG9ydCBjb25zdCBnZXRMb2NhbGVTdHJpbmdUZXh0ID0gKHRleHQ6IHN0cmluZywgdHlwZTogc3RyaW5nLCBsb2NhbGU6IHN0cmluZyA9ICdlbicpOiBzdHJpbmcgPT4ge1xuICBpZiAoIWxvY2FsZSB8fCBsb2NhbGUgPT09ICdlbicgfHwgbG9jYWxlID09PSAndXMnKSByZXR1cm4gdGV4dDtcblxuICAvLyAkRmxvd0ZpeE1lIC0gRmluZCBvdXQgd2h5IGZsb3cgaXMgbG9va2luZyBhdCBudW1iZXIgd2hlbiBpdCBpc24ndCBiZWluZyBwYXNzZWQgcGVyIGFib3ZlIHN0cmluZyBzZXRcbiAgaWYgKExBTkdVQUdFW3RleHRdICYmIExBTkdVQUdFW3RleHRdW2xvY2FsZV0gJiYgTEFOR1VBR0VbdGV4dF1bbG9jYWxlXSAhPT0gbnVsbCAmJiBMQU5HVUFHRVt0ZXh0XVtsb2NhbGVdICE9PSAnJykgcmV0dXJuIExBTkdVQUdFW3RleHRdW2xvY2FsZV07XG5cbiAgLy8gJEZsb3dGaXhNZSAtIEZpbmQgb3V0IHdoeSBmbG93IGlzIGxvb2tpbmcgYXQgbnVtYmVyIHdoZW4gaXQgaXNuJ3QgYmVpbmcgcGFzc2VkIHBlciBhYm92ZSBzdHJpbmcgc2V0XG4gIGlmIChMQU5HVUFHRS5maWVsZHMgJiYgTEFOR1VBR0UuZmllbGRzW3RleHRdICYmIExBTkdVQUdFLmZpZWxkc1t0ZXh0XSAmJiBMQU5HVUFHRS5maWVsZHNbdGV4dF1bbG9jYWxlXSAmJiBMQU5HVUFHRS5maWVsZHNbdGV4dF1bbG9jYWxlXSAhPT0gbnVsbCAmJiBMQU5HVUFHRS5maWVsZHNbdGV4dF1bbG9jYWxlXSAhPT0gJycpIHJldHVybiBMQU5HVUFHRS5maWVsZHNbdGV4dF1bbG9jYWxlXTtcblxuICAvLyAkRmxvd0ZpeE1lIC0gRmluZCBvdXQgd2h5IGZsb3cgaXMgbG9va2luZyBhdCBudW1iZXIgd2hlbiBpdCBpc24ndCBiZWluZyBwYXNzZWQgcGVyIGFib3ZlIHN0cmluZyBzZXRcbiAgaWYgKExBTkdVQUdFLnF1ZXN0aW9ucyAmJiBMQU5HVUFHRS5xdWVzdGlvbnNbdGV4dF0gJiYgTEFOR1VBR0UucXVlc3Rpb25zW3RleHRdICYmIExBTkdVQUdFLnF1ZXN0aW9uc1t0ZXh0XVtsb2NhbGVdICYmIExBTkdVQUdFLnF1ZXN0aW9uc1t0ZXh0XVtsb2NhbGVdICE9PSBudWxsICYmIExBTkdVQUdFLnF1ZXN0aW9uc1t0ZXh0XVtsb2NhbGVdICE9PSAnJykgcmV0dXJuIExBTkdVQUdFLnF1ZXN0aW9uc1t0ZXh0XVtsb2NhbGVdO1xuXG4gIC8vICRGbG93Rml4TWUgLSBGaW5kIG91dCB3aHkgZmxvdyBpcyBsb29raW5nIGF0IG51bWJlciB3aGVuIGl0IGlzbid0IGJlaW5nIHBhc3NlZCBwZXIgYWJvdmUgc3RyaW5nIHNldFxuICBpZiAoTEFOR1VBR0UuZXJyb3IgJiYgTEFOR1VBR0UuZXJyb3JbdGV4dF0gJiYgTEFOR1VBR0UuZXJyb3JbdGV4dF0gJiYgTEFOR1VBR0UuZXJyb3JbdGV4dF1bbG9jYWxlXSAmJiBMQU5HVUFHRS5lcnJvclt0ZXh0XVtsb2NhbGVdICE9PSBudWxsICYmIExBTkdVQUdFLmVycm9yW3RleHRdW2xvY2FsZV0gIT09ICcnKSByZXR1cm4gTEFOR1VBR0UuZXJyb3JbdGV4dF1bbG9jYWxlXTtcblxuICBpZiAodHlwZSA9PT0gJ2Vycm9yJykge1xuICAgIC8vICRGbG93Rml4TWUgLSBGaW5kIG91dCB3aHkgZmxvdyBpcyBsb29raW5nIGF0IG51bWJlciB3aGVuIGl0IGlzbid0IGJlaW5nIHBhc3NlZCBwZXIgYWJvdmUgc3RyaW5nIHNldFxuICAgIGlmIChMQU5HVUFHRS5lcnJvciAmJiBMQU5HVUFHRS5lcnJvclt0ZXh0XSAmJiBMQU5HVUFHRS5lcnJvclt0ZXh0XSAmJiAhTEFOR1VBR0UuZXJyb3JbdGV4dF1bbG9jYWxlXSkgcmV0dXJuIExBTkdVQUdFLmVycm9yWydUaGlzIGZpZWxkIGlzIGludmFsaWQnXVtsb2NhbGVdO1xuICB9XG5cbiAgcmV0dXJuIHRleHQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBnZXRMb2NhbGVTdHJpbmdUZXh0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHsgY2hlY2tJZklzRGV2ZWxvcCB9IGZyb20gJ0BhdmFsYXJhLW10Zy9oZWxwZXJzL2xpYi91aSc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2FwaS9sb2dnZXItYXBpJztcblxuZXhwb3J0IGNvbnN0IHRyYWNrRmllbGRzID0gWydvZmZlcicsICdjb250YWN0X21ldGhvZCcsICdvcHBfc3VidHlwZScsICdlbWFpbCcsICdnb2FsX3R5cGUnLCAncXVlcnlfc3RyaW5nJ107XG5cbmV4cG9ydCBjb25zdCB0cmlnZ2VyQXV0b0ZpbGxUcmFja2luZyA9IChmb3JtSWQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbiAgY29uc3QgeyBzX2dpLCBfc2F0ZWxsaXRlIH0gPSB3aW5kb3c7XG4gIGlmIChfc2F0ZWxsaXRlICYmIHNfZ2kgJiYgc19naSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGVudiA9ICFjaGVja0lmSXNEZXZlbG9wKCkgPyAnYXZhbGFyYXByb2QnIDogJ2F2YWxhcmFkZXYnO1xuICAgIGNvbnN0IHMgPSBzX2dpKGVudik7XG4gICAgcy5jbGVhclZhcnMoKTsgLy8gQ2xlYW4gb2JqZWN0XG4gICAgcy5saW5rVHJhY2tWYXJzID0gJ2V2ZW50cyxwcm9wNTEscGFnZVVSTCc7XG5cbiAgICBzLmxpbmtUcmFja0V2ZW50cyA9ICdldmVudDEzMCc7XG4gICAgcy5ldmVudHMgPSAnZXZlbnQxMzAnO1xuXG4gICAgLy8gR2V0IGN1cnJlbnQgdXJsIGFuZCBzZXQgdmFsdWUgdG8gcHJvcDUxIGFuZCBwYWdlVVJMXG4gICAgY29uc3QgY3VycmVudFVSTCA9IHdpbmRvdyAmJiB3aW5kb3cubG9jYXRpb24gPyB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnPycpWzBdIDogJ3VuZGVmaW5lZCc7XG4gICAgcy5wcm9wNTEgPSBjdXJyZW50VVJMO1xuICAgIHMucGFnZVVSTCA9IGN1cnJlbnRVUkw7XG5cbiAgICBzLnRsKHRydWUsICdvJywgJ0Vsb3F1YUF1dG9GaWxsJyk7XG4gICAgbG9nZ2VyKHtcbiAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICBtc2dUeXBlOiAndHJpZ2dlckF1dG9GaWxsVHJhY2tpbmcnLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiAnYW5hbHR5aWNzLmpzIFwidHJpZ2dlckF1dG9GaWxsVHJhY2tpbmdcIiBzdWNjZXNzLicsXG4gICAgICB9LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgbXNnVHlwZTogJ3RyaWdnZXJBdXRvRmlsbFRyYWNraW5nJyxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ2FuYWx0eWljcy5qcyBcInRyaWdnZXJBdXRvRmlsbFRyYWNraW5nXCIgZmFpbGVkLiBfc2F0ZWxsaXRlIHdhcyBub3QgZm91bmQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSAqL1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHRyaWdnZXIgdHJhY2tpbmcgb24gTUxUIHJhdGUgbG9va3VwXG4vLyBAcmV0dXJuIHsgVm9pZCB9XG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29tcGlsZSBNTFQgcmF0ZSB0cmFja2luZyB2YWx1ZXMsIHdoaWNoIHdpbGwgYXBwZW5kIHRvIHRoZSBBTU8gYmFzZSB0cmFja2luZyB0cmlnZ2Vycy5cbmV4cG9ydCBjb25zdCB0cmlnZ2VyUmF0ZUxvb2t1cFRyYWNraW5nID0gKFxuICBmb3JtSWQ6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgaXNTYXRlbGxpdGVCbG9ja2VkOiBib29sZWFuLFxuKSA9PiB7XG4gIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuICBjb25zdCB7IG1sdFJhdGVMb29rdXAgfSA9IHdpbmRvdy5hdmE7XG4gIGNvbnN0IHsgcmVzcG9uc2UgfSA9IG1sdFJhdGVMb29rdXBbZm9ybUlkXTtcbiAgY29uc3QgeyB2YWx1ZSB9ID0gcmVzcG9uc2U7XG4gIGNvbnN0IHsgYWRkcmVzcywgcmF0ZSB9ID0gdmFsdWU7XG5cbiAgY29uc3QgaXNWYWxpZCA9IGFkZHJlc3MudmFsaWQgfHwgZmFsc2U7XG4gIGNvbnN0IGhhc1JhdGUgPSAocmF0ZSAhPT0gbnVsbCk7XG5cbiAgY29uc3QgeyBzX2dpIH0gPSB3aW5kb3c7XG4gIGlmICghaXNTYXRlbGxpdGVCbG9ja2VkICYmIHNfZ2kgJiYgc19naSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYWNraW5nTmFtZSA9IG5hbWUgIT09IG51bGwgPyBuYW1lIDogJ01MVCBsb2RnaW5nIHJhdGUgbG9va3VwJztcbiAgICBjb25zdCBlbnYgPSAhY2hlY2tJZklzRGV2ZWxvcCgpID8gJ2F2YWxhcmFwcm9kJyA6ICdhdmFsYXJhZGV2JztcbiAgICBjb25zdCBzID0gc19naShlbnYpO1xuXG4gICAgLy8gU2V0dXAgdHJhY2tpbmdcbiAgICBzLmxpbmtUcmFja1ZhcnMgPSAnZXZlbnRzLHByb3A1MSxwYWdlVVJMJztcbiAgICBjb25zdCBldmVudHMgPSBbXTtcblxuICAgIC8vIGNoZWNrIGFkZHJlc3NWYWxpZGF0aW9uXG4gICAgaWYgKCFpc1ZhbGlkKSBldmVudHMucHVzaCgnZXZlbnQxMzEnKTtcblxuICAgIC8vIGNoZWNrIHJhdGUgbG9va3VwXG4gICAgaWYgKCFoYXNSYXRlKSBldmVudHMucHVzaCgnZXZlbnQxMzInKTtcblxuICAgIC8vIElmIGlzIGluIGEgbW9kYWwgYWRkIG5ldyBldmVudCB0cmFja2luZ1xuICAgIHMubGlua1RyYWNrRXZlbnRzID0gZXZlbnRzLmpvaW4oJywnKTtcbiAgICBzLmV2ZW50cyA9IGV2ZW50cy5qb2luKCcsJyk7XG5cbiAgICAvLyBHZXQgY3VycmVudCB1cmwgYW5kIHNldCB2YWx1ZSB0byBwcm9wNTEgYW5kIHBhZ2VVUkxcbiAgICBjb25zdCBjdXJyZW50VVJMID0gd2luZG93ICYmIHdpbmRvdy5sb2NhdGlvbiA/IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCc/JylbMF0gOiAndW5kZWZpbmVkJztcbiAgICBzLnByb3A1MSA9IGN1cnJlbnRVUkw7XG4gICAgcy5wYWdlVVJMID0gY3VycmVudFVSTDtcblxuICAgIC8vIFRyYWNrIGFuYWx5dGljcyBtZXRyaWNzXG4gICAgY29uc3QgYW5hbHl0aWNzID0gd2luZG93LmF2YS5hbmFseXRpY3MgPyB3aW5kb3cuYXZhLmFuYWx5dGljcyA6IHt9O1xuICAgIHdpbmRvdy5hdmEuYW5hbHl0aWNzID0ge1xuICAgICAgLi4uYW5hbHl0aWNzLFxuICAgICAgZXZlbnRzLFxuICAgICAgZVZhcnM6IHt9LFxuICAgICAgbGlua1RyYWNrRXZlbnRzOiBzLmxpbmtUcmFja0V2ZW50cy5zcGxpdCgnLCcpLFxuICAgICAgdHJhY2tpbmdOYW1lLFxuICAgICAgbmFtZSxcbiAgICAgIHBhZ2VVUkw6IHMucGFnZVVSTCxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHByb3A1MTogcy5wcm9wNTEsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBTLlRMIFRSQUNLSU5HIFRSSUdHRVIgSVMgUlVOIFdJVEggVEhFIEhFTFBFUlMvQU1PLkpTXG5cbiAgICBsb2dnZXIoe1xuICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgIG1zZ1R5cGU6ICd0cmlnZ2VyUmF0ZUxvb2t1cFRyYWNraW5nJyxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ2FuYWx0eWljcy5qcyBcInRyaWdnZXJSYXRlTG9va3VwVHJhY2tpbmdcIiBzdWNjZXNzZnVsJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG59O1xuXG4vLyBBdmFmb3JtIEVuZ2FnZW1lbnQgQW5hbHl0aWNzIENhbGxcbmV4cG9ydCBjb25zdCBhdmFmb3JtRW5nYWdlbWVudEFuYWx5dGljc0NhbGwgPSAoZm9ybUlkOiBzdHJpbmcsIGVWYXIxNTogc3RyaW5nLCBlVmFyMTE1OiBzdHJpbmcsIGlzTW9kYWxGb3JtOiBib29sZWFuKTogdm9pZCA9PiB7XG4gIGNvbnN0IHsgc19naSB9ID0gd2luZG93O1xuICBpZiAoc19naSkge1xuICAgIC8vIGNvbmZpZ3VyZSB0aGUgZW52IHZhciBiYXNlZCBvbiB3b3JraW5nIGVudmlyb25tZW50XG4gICAgY29uc3QgZW52ID0gIWNoZWNrSWZJc0RldmVsb3AoKSA/ICdhdmFsYXJhcHJvZCcgOiAnYXZhbGFyYWRldic7XG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgYW5hbHl0aWNzIG9iamVjdCB3aXRoIHRoZSB3b3JraW5nIGVudmlyb25tZW50LCB3aGljaCB3aWxsIGJpbmQgdG8gdGhlIHdpbmRvd1xuICAgIGNvbnN0IHMgPSBzX2dpKGVudik7XG4gICAgLy8gY2xlYXIgYWxsIHZhcnMgZnJvbSB0aGUgYW5hbHl0aWNzIG9iamVjdFxuICAgIHMuY2xlYXJWYXJzKCk7XG4gICAgLy8gc2V0IGxpbmsgdHJhY2sgdmFycyBmb3IgYWxsIGV2ZW50cywgcHJvcHMsIGV2YXJzLCBhbmQgaGllcmFyY2h5IHZhcmlhYmxlc1xuICAgIHMubGlua1RyYWNrVmFycyA9ICdldmVudHMscHJvcDMwLHByb3AzMSxwcm9wMzIscHJvcDUxLGVWYXIxNSxlVmFyMTE1LGVWYXI4MCxoaWVyMSxwYWdlVVJMJztcblxuICAgIC8vIGV2ZW50MTYyIHdhcyBwcmV2aW91c2x5IG5vbi1hc3NpZ25lZCwgd2Ugd2lsbCBiZSB1c2luZyB0aGlzIGdvaW5nIGZvcndhcmQgdG8gdHJhY2sgdGhpcyBzcGVjaWZpYyBldmVudCAod2hlbiBhIHVzZXIgZmlyc3QgaW50ZXJhY3RzIHdpdGggYXZhZm9ybSlcbiAgICAvLyBzLmxpbmtUcmFja0V2ZW50cyB3aWxsIHNldHVwIGEgYmluZGluZyB0byB0aGlzIHNwZWNpZmljIGV2ZW50IHZhcmlhYmxlXG4gICAgcy5saW5rVHJhY2tFdmVudHMgPSAnZXZlbnQxNjInO1xuICAgIHMuZXZlbnRzID0gJ2V2ZW50MTYyJztcblxuICAgIC8vIENvbGxlY3QgQ2F0ZWdvcmllcyB0byBiZSBmZXRjaGVkIGZyb20gdGhlIHdpbmRvd1xuICAgIGNvbnN0IFtwcm9wMzAsIHByb3AzMSwgcHJvcDMyXSA9ICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoJy8nKSkuZmlsdGVyKChjKSA9PiBjKTtcblxuICAgIGNvbnN0IGNsZWFuUHJvcDMyID0gcHJvcDMyID8gcHJvcDMyLnNwbGl0KCcuJylbMF0gOiAnJztcbiAgICBzLnByb3AzMCA9IHByb3AzMCB8fCAnJztcbiAgICBzLnByb3AzMSA9IHByb3AzMSB8fCAnJztcbiAgICBzLnByb3AzMiA9IGNsZWFuUHJvcDMyO1xuXG4gICAgLy8gZmV0Y2ggdGhlIGN1cnJlbnQgdXJsIGZyb20gdGhlIHdpbmRvdyBhbmQgYmluZCB0byBwcm9wNTEgYW5kIHBhZ2VVUkwgaW4gYWRvYmUgYW5hbHl0aWNzXG4gICAgY29uc3QgY3VycmVudFVybCA9IHdpbmRvdyAmJiB3aW5kb3cubG9jYXRpb24gPyB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnPycpWzBdIDogJ3VuZGVmaW5lZCc7XG4gICAgcy5wcm9wNTEgPSBjdXJyZW50VXJsO1xuICAgIHMucGFnZVVSTCA9IGN1cnJlbnRVcmw7XG5cbiAgICBzLmVWYXIxNSA9IGVWYXIxNTtcbiAgICBzLmVWYXIxMTUgPSBlVmFyMTE1O1xuICAgIHMuZVZhcjgwID0gaXNNb2RhbEZvcm0gPyAnMScgOiAnMCc7XG5cbiAgICAvLyBDYWxjdWxhdGUgaGllcjEgaGllcmFyY2h5IHZhcmlhYmxlXG4gICAgLy8gdGhpcyBpcyBiYXNlZCBvbiB0aGUgcGFnZSBkb21haW4sIHBhdGhzIGFyZSBzZXBhcmF0ZWQgYnkgcGlwZXNcbiAgICAvLyBlLmcuIGh0dHBzOi8vYXZhbGFyYS5jb20vdXMvZW4vaW5kZXguaHRtbCB3b3VsZCB0cmFuc2xhdGUgdG8gd3d3LmF2YWxhcmEuY29tIHwgdXMgfCBlbiB8IGluZGV4IChmaWxlIGV4dGVuc2lvbiBpcyBvbWl0dGVkKVxuICAgIGxldCBoaWVyMSA9ICcnO1xuXG4gICAgaWYgKGN1cnJlbnRVcmwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGN1cnJlbnRVcmwpO1xuICAgICAgY29uc3QgcGF0aE5hbWVBcnJheSA9IHVybC5wYXRobmFtZS5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgcGFnZUZpbGVOYW1lID0gcGF0aE5hbWVBcnJheVtwYXRoTmFtZUFycmF5Lmxlbmd0aCAtIDFdLnNwbGl0KCcuJylbMF07XG4gICAgICBwYXRoTmFtZUFycmF5W3BhdGhOYW1lQXJyYXkubGVuZ3RoIC0gMV0gPSBwYWdlRmlsZU5hbWU7XG4gICAgICBoaWVyMSA9IFtgd3d3LiR7dXJsLmhvc3R9YF0uY29uY2F0KHBhdGhOYW1lQXJyYXkuZmlsdGVyKChlbGVtZW50KSA9PiBlbGVtZW50Lmxlbmd0aCA+IDApKS5qb2luKCcgfCAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGllcjEgPSAnbnVsbCc7XG4gICAgfVxuXG4gICAgLy8gYmluZCBoaWVyMSB0byB0aGUgYW5hbHl0aWNzIG9iamVjdFxuICAgIHMuaGllcjEgPSBoaWVyMTtcblxuICAgIC8vIHRyaWdnZXIgdGhlIGF2YWZvcm0gaW5pdGlhbCBpbnRlcmFjdGlvbiBhbmFseXRpY3MgZXZlbnRcbiAgICBzLnRsKHRydWUsICdvJywgJ0F2YWZvcm1Jbml0aWFsSW50ZXJhY3Rpb24nKTtcblxuICAgIC8vIHVwZGF0ZSBhbmFseXRpY3Mgb2JqZWN0IGluIHRoZSB3aW5kb3dcbiAgICBjb25zdCBhbmFseXRpY3MgPSB3aW5kb3cuYXZhLmFuYWx5dGljcyA/IHdpbmRvdy5hdmEuYW5hbHl0aWNzIDoge307XG4gICAgd2luZG93LmF2YS5hbmFseXRpY3MgPSB7XG4gICAgICAuLi5hbmFseXRpY3MsXG4gICAgICBldmVudHM6IFtzLmV2ZW50c10sXG4gICAgICBlVmFyczoge1xuICAgICAgICBlVmFyMTU6IHMuZVZhcjE1LFxuICAgICAgICBlVmFyMTE1OiBzLmVWYXIxMTUsXG4gICAgICAgIGVWYXI4MDogcy5lVmFyODAsXG4gICAgICB9LFxuICAgICAgbGlua1RyYWNrRXZlbnRzOiBzLmxpbmtUcmFja0V2ZW50cy5zcGxpdCgnLCcpLFxuICAgICAgbmFtZTogJ0F2YWZvcm1Jbml0aWFsSW50ZXJhY3Rpb24nLFxuICAgICAgcGFnZVVSTDogcy5wYWdlVVJMLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgcHJvcDMwOiBzLnByb3AzMCxcbiAgICAgICAgcHJvcDMxOiBzLnByb3AzMSxcbiAgICAgICAgcHJvcDMyOiBzLnByb3AzMixcbiAgICAgICAgcHJvcDUxOiBzLnByb3A1MSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIGNsZWFuIHRoZSB2YXJzIGFnYWluIGZyb20gdGhlIGFuYWx5dGljcyBvYmplY3RcbiAgICBzLmNsZWFyVmFycygpO1xuXG4gICAgLy8gbG9nIHRvIHN1bW8gdGhhdCB0aGUgYW5hbHl0aWNzIGNhbGwgd2FzIHN1Y2Nlc3NmdWxcbiAgICBsb2dnZXIoe1xuICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgIG1zZ1R5cGU6ICdhdmFmb3JtRW5nYWdlbWVudEFuYWx5dGljc0NhbGwnLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiAnYW5hbHR5aWNzLmpzIFwiYXZhZm9ybUVuZ2FnZW1lbnRBbmFseXRpY3NDYWxsXCIgc3VjY2VzcycsXG4gICAgICB9LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgbXNnVHlwZTogJ2F2YWZvcm1FbmdhZ2VtZW50QW5hbHl0aWNzQ2FsbCcsXG4gICAgICBmb3JtSWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdhbmFseXRpY3MuanMgXCJhdmFmb3JtRW5nYWdlbWVudEFuYWx5dGljc0NhbGxcIiBmYWlsZWQuIHNfZ2kgbm90IHNldCcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59O1xuXG5jb25zdCBzdG9yZWREYXRhID0ge307XG5leHBvcnQgY29uc3QgZ2V0UGFyYW1Gcm9tQXZhVGFnID0gKHBhcmFtOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgeyBBdmFUYWcgfSA9IHdpbmRvdztcbiAgaWYgKEF2YVRhZykge1xuICAgIGNvbnN0IGF2YVRhZ0RhdGEgPSBBdmFUYWcuZ2V0Q29tYmluZWREYXRhKCk7XG4gICAgY29uc3Qgbm9ybWFsaXplUGFyYW0gPSBwYXJhbS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGtleXMgPSBhdmFUYWdEYXRhID8gT2JqZWN0LmtleXMoYXZhVGFnRGF0YSkgOiB7fTtcbiAgICAvLyBDb252ZXJ0IGFsbCBrZXlzIHRvIGxvd2VyY2FzZSBmb3IgZXh0cmFjdGlvblxuICAgIGlmICghc3RvcmVkRGF0YVtub3JtYWxpemVQYXJhbV0pIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdG9yZWREYXRhW2tleXNbaV0udG9Mb3dlckNhc2UoKV0gPSBhdmFUYWdEYXRhW2tleXNbaV1dO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RvcmVkRGF0YVtub3JtYWxpemVQYXJhbV0pIHJldHVybiBzdG9yZWREYXRhW25vcm1hbGl6ZVBhcmFtXTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRyaWdnZXJSYXRlTG9va3VwVHJhY2tpbmc7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHsgaXNKc29uIH0gZnJvbSAnQGF2YWxhcmEtbXRnL2hlbHBlcnMvbGliL3VpJztcblxuLy8gRGF0YVxuaW1wb3J0IEZPUk1DT05GSUdTIGZyb20gJy4uL2NvbnN0YW50cy9mb3JtLWNvbmZpZ3MnO1xuaW1wb3J0IEZPUk1EQVRBLCB7IElORFVTVFJZX0ZJRUxEIH0gZnJvbSAnLi4vY29uc3RhbnRzL2Zvcm0tZGF0YSc7XG5pbXBvcnQgRUxPUVVBUEFZTE9BRCBmcm9tICcuLi9jb25zdGFudHMvZWxvcXVhLWZpZWxkLW1hcHBpbmcnO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2FwaS9sb2dnZXItYXBpJztcbmltcG9ydCB7IGFwcGVuZENsYXNzVG9IZWFkZXIsIGRpc2FibGVDaGlsaXBpcGVyQnV0dG9uLCBpc0Nvbm5lY3RlZFRvQ2hpbGlwaXBlciB9IGZyb20gJy4uL2hlbHBlcnMvY2hpbGlwaXBlcic7XG5pbXBvcnQge1xuICBjbGVhbkZpZWxkVmFsdWUsIGZvcm1hdEZvcm1UZW1wbGF0ZU5hbWUsIGdldEZpZWxkSWRzLFxufSBmcm9tICcuLi9oZWxwZXJzL2Zvcm1zJztcbmltcG9ydCB7IGdldExvY2FsZVN0cmluZ1RleHQgfSBmcm9tICcuLi9oZWxwZXJzL2xhbmd1YWdlJztcbmltcG9ydCB7IHRyaWdnZXJBdXRvRmlsbFRyYWNraW5nIH0gZnJvbSAnLi4vaGVscGVycy9hbmFseXRpY3MnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IEZvcm1TdGF0ZSwgRm9ybUNhcHR1cmVGaWVsZCB9IGZyb20gJy4uL2xpYi90eXBlcy9yZWR1Y2VyLXN0YXRlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEVycm9yRmllbGQsIEZvcm1EZWZhdWx0Q29uZmlncywgSnNvbkZpZWxkcywgU2luZ2xlSnNvbkZpZWxkLCBTZXRKc29uRmllbGQsXG59IGZyb20gJy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U3RhdGU6IEZvcm1TdGF0ZSA9IHtcbiAgYWJhbmRvbmVkRm9ybXM6IFtdLCAvLyBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgYWJhbmRvbnMuIFdoZW4gZmllbGQgaXMgc2V0IHRvIGFjdGl2ZSBmb3JtSWQgaXMgc2V0IGludG8gdGhpcyBhcnJheSBpZiBub3QgYWxyZWFkeSB0aGVyZS4gUmVtb3ZlIG9uIHN1Ym1pdCBzdWNjZXNzXG4gIGFjdGl2ZUZvcm06IG51bGwsXG4gIGFjdGl2ZUZvcm1zOiB7fSwgLy8gTG9hZHMgdGhlIGFjdGl2ZSBmb3Jtc1xuICBhY3RpdmVGaWVsZHM6IHt9LCAvLyBvbkZvY3VzIHdpbGwgcGxhY2UgYXMgYXNzb2NpYXR2ZSB0byB0aGUgZm9ybSB0ZW1wbGF0ZSB7W2Zvcm1UZW1wbGF0ZV06IHZhbHVlfVxuICBhdXRvRmlsbERhdGE6IHtcbiAgICBmb3JtczogW10sXG4gICAgb2s6IGZhbHNlLFxuICAgIHZhbHVlczogbnVsbCxcbiAgICBmaWVsZFZhbHVlczogbnVsbCxcbiAgfSxcbiAgY2FwdHVyZUZpZWxkczoge30sIC8vIEFycmF5IG9mIGFsbCBmaWVsZHMgb25jZSBjYXB0dXJlZCByZWdhcmRsZXNzIG9mIHZhbGlkYXRpb24uIGtleTp2YWx1ZSBwYWlyXG4gIGNoaWxpcGlwZXJDb25uZWN0ZWQ6IFtdLFxuICBjbGVhblBheWxvYWQ6IG51bGwsXG4gIGRpYWxDb2RlOiB7fSwgLy8gQ2FwdHVyZXMgdGhlIGN1cnJlbnQgZGlhbCBjb2RlIGZvciB2YWxpZGF0aW9uIG5lZWRzXG4gIGVsb3F1YVBheWxvYWQ6IEVMT1FVQVBBWUxPQUQsIC8vIERlZmF1bHQgcGF5bG9hZCBmb3IgZWxvcXVhXG4gIGdkcHJGaWVsZDoge30sXG4gIGhhc0JlZW5WYWxpZGF0ZWQ6IHt9LCAvLyBBcnJheSBvZiBhbGwgZmllbGQgYWZ0ZXIgdGhlIGZpZWxkIGhhcyBiZWVuIHZhbGlkYXRlZFxuICBoYXNFcnJvcjoge30sIC8vIENhcHR1cmVkIGluIGVycm9yIGFycmF5IGlmIHJlcXVpcmVkIGFuZCBkb2Vzbid0IHZhbGlkYXRlIGFzIGV4cGVjdGVkXG4gIGluaXQ6IHt9LCAvLyBGb3JtIGFwcGxpY2F0aW9uIGluaXQgc3RhdHVzXG4gIGluaXRTdGF0dXM6IHt9LCAvLyBVc2VkIHRvIGxvYWQgc3RhdHVzIG1lc3NhZ2VzIGlmIGZhaWxlZC5cbiAgbGFzdEZpZWxkOiB7fSwgLy8gU2V0IHZhbHVlIHRvIGNhcHR1cmUgbGFzdCBmaWVsZCBjaGVjay4gTGFzdCBmaWVsZCB3aWxsIHZhbGlkYXRlIGluIGNoYW5nZSB0byBhY3RpdmF0ZSBzdWJtaXQgYnV0dG9uIHNvb25lclxuICBtb2RhbEZvcm1zOiBbXSwgLy8gSG9sZCBmb3JtIG5hbWUgaW4gYXJyYXkgdG8gY2hlY2sgaWYgaXMgaW5zaWRlIGEgbW9kYWxcbiAgcmVDYXB0dXJlRmllbGRzOiBbXSwgLy8gVXNlZCB0byBzdG9yZSBhbGwgZm9ybSBjYXB0dXJlIGFuZCBpbnB1dCBhbHJlYWR5IGNhcHR1cmVkL3ZhbGlkYXRlZCBmaWVsZHMgd2hlbiBmb3JtIGlzIHNldCB0byBhY3RpdmVcbiAgcmVxdWlyZWRGaWVsZHM6IHt9LCAvLyBBcnJheSBvZiByZXF1aXJlZCBmaWVsZHMgaXMgc2V0IG9uIGJ1aWxkXG4gIHNldEZpZWxkczoge30sIC8vIEFsbCBmaWVsZHMgYXJlIHNldCBoZXJlIHVwb24gY2FwdHVyZSBhbmQgdmFsaWRhdGlvbiBwYXNzIGlmIHJlcXVpcmVkXG4gIHNlbGVjdGVkQ29tcGFueTogbnVsbCxcbiAgc2hvd01vZGFsOiB7fSxcbiAgc3VibWlzc2lvbmxpbWl0OiB7fSxcbiAgdmFsaWRhdGVkRmllbGRzOiB7fSwgLy8gQXJyYXkgb2YgcmVxdWlyZWQgZmllbGRzIHRoYXQgaGF2ZSBiZWVuIGFuZCB2YWxpZGF0ZWRcbn07XG5cbnR5cGUgT2JqZWN0TWVzc2FnZUFycmF5ID0gQXJyYXk8RXJyb3JGaWVsZD47XG5cbi8vIEhlbHBlciB0byBhZGQgc3VibWlzc2lvbiBsbW5pdCBpbmZvcm1hdGlvbiB0byBmb3JtIGFwdHVyZVxuZXhwb3J0IGNvbnN0IGFkZFN1Ym1pc3Npb25MaW1pdERhdGFUb0NhcHR1cmUgPSAoZmllbGRzOiBBcnJheTxhbnk+IHwgbnVsbCA9IG51bGwsIHN1Ym1pc3Npb25MaW1pdElkOiA/c3RyaW5nKTogQXJyYXk8YW55PiA9PiB7XG4gIGNvbnN0IG5ld0ZpZWxkcyA9ICFmaWVsZHMgfHwgKGZpZWxkcyAmJiAhQXJyYXkuaXNBcnJheShmaWVsZHMpKSA/IFtdIDogZmllbGRzO1xuXG4gIGlmICghc3VibWlzc2lvbkxpbWl0SWRcbiAgICB8fCAoc3VibWlzc2lvbkxpbWl0SWQgJiYgc3VibWlzc2lvbkxpbWl0SWQgPT09ICcnKSkge1xuICAgIGlmIChuZXdGaWVsZHMuZmlsdGVyKChmKSA9PiBmLmlkICYmIGYuaWQudG9Mb3dlckNhc2UoKSA9PT0gJ3N1Ym1pc3Npb25saW1pdGlkJykubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG5ld0ZpZWxkcztcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdWJtaXNzaW9uRmllbGQgPSB7XG4gICAgZGlzcGxheVRleHQ6ICdzdWJtaXNzaW9ubGltaXRpZCcsXG4gICAgaWQ6ICdzdWJtaXNzaW9ubGltaXRpZCcsXG4gICAgcGxhY2Vob2xkZXI6ICdzdWJtaXNzaW9ubGltaXRpZCcsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHR5cGU6ICdoaWRkZW4nLFxuICAgIHZhbHVlOiBzdWJtaXNzaW9uTGltaXRJZCxcbiAgfTtcblxuICBpZiAobmV3RmllbGRzLmZpbHRlcigoZikgPT4gZi5pZCAmJiBmLmlkLnRvTG93ZXJDYXNlKCkgPT09ICdzdWJtaXNzaW9ubGltaXRpZCcpLmxlbmd0aCA8IDEpIG5ld0ZpZWxkcy5wdXNoKHN1Ym1pc3Npb25GaWVsZCk7XG5cbiAgcmV0dXJuIG5ld0ZpZWxkcztcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbnMgcmVxdWlyZWQgaW5zaWRlIHJlZHVjZXJcbi8vIFRha2VzIHRoZSBjYXB0dXJlIGZpZWxkIGFuZCBzYXZlcyB0aGVtIHRvIGxvY2FsU3RvcmFnZVxuLy8gQHJldHVybiB7IHZvaWQgfVxuZXhwb3J0IGNvbnN0IGF1dG9TYXZlRGF0YSA9IChjYXB0dXJlRmllbGRzOiBBcnJheTx7IGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT4sIGZvcm1JZDogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgLy8gU2F2ZSB0byBsb2NhbFN0b3JhZ2UgZm9yIGxhdGVyIGNhcHR1cmVcbiAgICBjb25zdCBjdXJyZW50U2F2ZSA9IGxvY2FsU3RvcmFnZSAmJiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0gJiYgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtICYmIHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0gPT09ICdmdW5jdGlvbicgJiYgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhdmFBdXRvU2F2ZScpID8gSlNPTi5wYXJzZSh3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2F2YUF1dG9TYXZlJykpIDogW107XG4gICAgbGV0IGF1dG9TYXZlID0gW1xuICAgICAgLi4uY2FwdHVyZUZpZWxkcyxcbiAgICAgIC4uLmN1cnJlbnRTYXZlLFxuICAgIF07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgYXV0b1NhdmUgPSBkZWR1cGVBcnJheShhdXRvU2F2ZSk7XG5cbiAgICBpZiAobG9jYWxTdG9yYWdlICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSAmJiB0eXBlb2Ygd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2F2YUF1dG9TYXZlJywgSlNPTi5zdHJpbmdpZnkoYXV0b1NhdmUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGF1dG9TYXZlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBSZXR1cm4gZW1wdHlcbiAgICBsb2dnZXIoe1xuICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICBtc2dUeXBlOiAnQXV0b1NhdmVFcnJvcicsXG4gICAgICBmb3JtSWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdsb2NhbFN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4gTm90IHNhdmVkLicsXG4gICAgICAgIGluZm86IEpTT04uc3RyaW5naWZ5KGVyciksXG4gICAgICAgIGZpZWxkczogSlNPTi5zdHJpbmdpZnkoY2FwdHVyZUZpZWxkcyksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxuLy8gQ2hlY2tzIHRvIHNlZSBpZiB0aGUgY291bnRyeSBmaWVsZCBpcyBhdmFpbGFibGUgaW4gdGhlIGZvcm0uXG4vLyBAcmV0dXJuIHsgQm9vbGVhbiB9XG5leHBvcnQgY29uc3QgY2hlY2tGb3JWaXNpYmxlQ291bnRyeSA9IChmaWVsZHM6IEFycmF5PFNpbmdsZUpzb25GaWVsZD4pID0+IHtcbiAgaWYgKCFmaWVsZHMgfHwgZmllbGRzLmxlbmd0aCA8IDEpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkc1tpXSkpIHtcbiAgICAgIHJldHVybiBjaGVja0ZvclZpc2libGVDb3VudHJ5KFsuLi5maWVsZHNbaV1dKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGRzW2ldKSAmJiBmaWVsZHNbaV0uaWQgPT09ICdjb3VudHJ5JykgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gRGVkdXBlcyBhbiBhcnJheSBkb3duIHRvIHNpbmdsZSB2YWx1ZXMgb2YgZWFjaCBpdGVtXG4vLyBAcmV0dXJuIHsgQXJyYXkgfVxuZXhwb3J0IGNvbnN0IGRlZHVwZUFycmF5ID0gKGFycmF5OiBBcnJheTxhbnk+KTogQXJyYXk8YW55PiA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnJheSkpIHJldHVybiBhcnJheTtcblxuICByZXR1cm4gYXJyYXkucmVkdWNlKChhY2MsIGN1cnJlbnQpID0+IHtcbiAgICBjb25zdCBpID0gYWNjLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGN1cnJlbnQuaWQpO1xuICAgIHJldHVybiAhaSA/IGFjYy5jb25jYXQoW2N1cnJlbnRdKSA6IGFjYztcbiAgfSwgW10pO1xufTtcblxuLy8gRmlsdGVycyBvdXQgYSB2YWx1ZSBmcm9tIGFuIGFycmF5IC0+IEFycmF5PHN0cmluZz4gdHlwZSBvbmx5XG4vLyBAcmV0dXJuIHsgYXJyYXkgfVxuZXhwb3J0IGNvbnN0IGZpbHRlck91dEFycmF5QnlJZCA9IChmaWx0ZXJBcnJheTogQXJyYXk8c3RyaW5nPiA9IFtdLCBpZDogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiA9PiBmaWx0ZXJBcnJheS5maWx0ZXIoKGYpID0+IGYgIT09IGlkKTtcblxuLy8gUmV0dXJucyBhbGwgb3JpZ2luYWwgZWxlbWVudHMgZXhjZXB0IHRoZSBvbmUgZXF1YWwgdG8gcGFzc2VkIGluIElEXG4vLyBAcmV0dXJuIHsgYXJyYXkgfVxuZXhwb3J0IGNvbnN0IGZpbHRlck91dEVycm9yQnlJZCA9IChmaWx0ZXJBcnJheTogT2JqZWN0TWVzc2FnZUFycmF5ID0gW10sIGlkOiBzdHJpbmcpOiBPYmplY3RNZXNzYWdlQXJyYXkgPT4gZmlsdGVyQXJyYXkuZmlsdGVyKChmKSA9PiBmLmlkICE9PSBpZCk7XG5cbi8vIFJldHVybnMgdGhlIGZpZWxkIHRoYXQgaXMgY29ubmVjdGVkIHRvIEdEUFJcbi8vIEByZXR1cm4geyBBcnJheTxzdHJpbmc+IH1cbmV4cG9ydCBjb25zdCBnZXRHZHByRmllbGQgPSAoZmllbGRzOiBBcnJheTxTaW5nbGVKc29uRmllbGQ+LCBnZHByRmllbGRzOiBBcnJheTxzdHJpbmc+ID0gW10pOiBBcnJheTxzdHJpbmc+ID0+IHtcbiAgaWYgKCFmaWVsZHMpIHJldHVybiBbXTtcblxuICBmaWVsZHMuZm9yRWFjaCgoZjogU2luZ2xlSnNvbkZpZWxkKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZikpIHtcbiAgICAgIGdkcHJGaWVsZHMuY29uY2F0KGdldEdkcHJGaWVsZChbLi4uZl0sIGdkcHJGaWVsZHMpKTtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGYpICYmIGYuY29udGFpbnNHZHByKSB7XG4gICAgICBnZHByRmllbGRzLnB1c2goZi5pZCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZ2RwckZpZWxkcztcbn07XG5cbi8vIEdldHMgdGhlIElEIG9mIHRoZSBsYXN0IGZpZWxkLiBUaGlzIGlzIHVzZSB0byB2YWxpZGF0ZSBvbiBjaGFuZ2UgaWYgaXMgbGFzdCBmaWVsZFxuLy8gQHJldHVybiB7IHN0cmluZyB9XG5leHBvcnQgY29uc3QgZ2V0TGFzdEZpZWxkSWQgPSAoZmllbGRzOiBKc29uRmllbGRzKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZmllbGQgPSBmaWVsZHNbZmllbGRzLmxlbmd0aCAtIDFdO1xuICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZCkpIHtcbiAgICByZXR1cm4gZ2V0TGFzdEZpZWxkSWQoWy4uLmZpZWxkXSk7XG4gIH1cbiAgcmV0dXJuIGZpZWxkLmlkO1xufTtcblxuLy8gR2V0cyBhbGwgcmVxdWlyZWQgZmllbGRzIGFuZCBzZXRzIHRoZW0gdG8gYW4gYXJyYXlcbi8vIEByZXR1cm4geyBhcnJheSB9XG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRGaWVsZHMgPSAoZmllbGRzOiBBcnJheTxTaW5nbGVKc29uRmllbGQ+LCBhcmVSZXF1aXJlZDogQXJyYXk8c3RyaW5nPiA9IFtdKSA9PiB7XG4gIGlmICghZmllbGRzKSByZXR1cm4gW107XG5cbiAgZmllbGRzLmZvckVhY2goKGY6IFNpbmdsZUpzb25GaWVsZCkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGYpKSB7XG4gICAgICBhcmVSZXF1aXJlZC5jb25jYXQoZ2V0UmVxdWlyZWRGaWVsZHMoWy4uLmZdLCBhcmVSZXF1aXJlZCkpO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZikgJiYgZi5yZXF1aXJlZCkge1xuICAgICAgYXJlUmVxdWlyZWQucHVzaChmLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXJlUmVxdWlyZWQ7XG59O1xuXG4vLyBDaGVja3MgZm9yIGhpZGRlbiBmaWVsZHMgYW5kIGNhcHR1cmVzIHRoZSB2YWx1ZXNcbi8vIEByZXR1cm4geyBhcnJheSB9XG5leHBvcnQgY29uc3QgZ2V0SGlkZGVuRmllbGRzID0gKGZpZWxkczogQXJyYXk8U2luZ2xlSnNvbkZpZWxkPiwgYXJlSGlkZGVuOiBBcnJheTxGb3JtQ2FwdHVyZUZpZWxkPiA9IFtdKTogQXJyYXk8eyBpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0+ID0+IHtcbiAgaWYgKCFmaWVsZHMpIHJldHVybiBbXTtcblxuICBmaWVsZHMuZm9yRWFjaCgoZjogU2luZ2xlSnNvbkZpZWxkKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZikpIHtcbiAgICAgIGFyZUhpZGRlbi5jb25jYXQoZ2V0SGlkZGVuRmllbGRzKFsuLi5mXSwgYXJlSGlkZGVuKSk7XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShmKSAmJiBmLnR5cGUgPT09ICdoaWRkZW4nICYmIGYudmFsdWUpIHtcbiAgICAgIGFyZUhpZGRlbi5wdXNoKHsgaWQ6IGYuaWQsIHZhbHVlOiBmLnZhbHVlIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhcmVIaWRkZW47XG59O1xuXG4vLyBHZXRzIHRoZSBmaWVsZHMgZnJvbSBsb2NhbFN0b3JhZ2Vcbi8vIEByZXR1cm4geyBBcnJheTx7IGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT4gfVxuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRmllbGRzRnJvbVN0b3JhZ2UgPSAoZmllbGRzOiBKc29uRmllbGRzLCBzdG9yZWQ6IEFycmF5PEZvcm1DYXB0dXJlRmllbGQ+KTogQXJyYXk8c3RyaW5nPiA9PiB7XG4gIGlmICghc3RvcmVkIHx8IHN0b3JlZC5sZW5ndGggPCAxKSByZXR1cm4gW107XG5cbiAgY29uc3QgbmV3RmllbGRzID0gW107XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhcnJheS1jYWxsYmFjay1yZXR1cm5cbiAgZmllbGRzLm1hcCgoZikgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGYpKSB7XG4gICAgICBuZXdGaWVsZHMuY29uY2F0KGdldFJlcXVpcmVkRmllbGRzRnJvbVN0b3JhZ2UoWy4uLmZdLCBzdG9yZWQpKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZikgJiYgc3RvcmVkLmZpbHRlcigocykgPT4gcy5pZCA9PT0gZi5pZClbMF0gJiYgZi5yZXF1aXJlZCkge1xuICAgICAgbmV3RmllbGRzLnB1c2goc3RvcmVkLmZpbHRlcigocykgPT4gcy5pZCA9PT0gZi5pZClbMF0uaWQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdGaWVsZHM7XG59O1xuXG4vLyBSZW1vdmVzIG9iamVjdCBlbGVtZW50IGZyb20gT2JqZWN0IEFycmF5XG4vLyBAcmV0dXJuIHsgQXJyYXk8T2JqZWN0PiB9XG5leHBvcnQgY29uc3QgcmVtb3ZlRmllbGRzRnJvbU9iamVjdEFycmF5ID0gKGZpZWxkczogSnNvbkZpZWxkcywgZmllbGRzUmVtb3ZlOiBBcnJheTxzdHJpbmc+KTogSnNvbkZpZWxkcyA9PiB7XG4gIGlmICghZmllbGRzKSByZXR1cm4gW107XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IFtdO1xuICBmaWVsZHMubWFwKChmKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZikpIHtcbiAgICAgIG5ld0ZpZWxkcy5wdXNoKHJlbW92ZUZpZWxkc0Zyb21PYmplY3RBcnJheShbLi4uZl0sIGZpZWxkc1JlbW92ZSkpO1xuICAgIH0gZWxzZSBpZiAoIWZpZWxkc1JlbW92ZS5pbmNsdWRlcyhmLmlkKSkge1xuICAgICAgbmV3RmllbGRzLnB1c2goZik7XG4gICAgfVxuICAgIHJldHVybiBmO1xuICB9KTtcbiAgcmV0dXJuIFsuLi5uZXdGaWVsZHNdO1xufTtcblxuLy8gQ29udmVydCBrZXkgdG8gRWxvcXVhIGtleSBmb3IgbG9jYWxTdG9yYWdlIHNhdmVcbmV4cG9ydCBjb25zdCBnZXRFbG9xdWFLZXkgPSAoa2V5OiBzdHJpbmcpID0+IHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdjb21wYW55JzpcbiAgICAgIHJldHVybiAnYWNjb3VudG5hbWUnO1xuICAgIGNhc2UgJ2ZpcnN0TmFtZSc6XG4gICAgICByZXR1cm4gJ2ZpcnN0bmFtZSc7XG4gICAgY2FzZSAnbGFzdE5hbWUnOlxuICAgICAgcmV0dXJuICdsYXN0bmFtZSc7XG4gICAgY2FzZSAnZW1haWwnOlxuICAgICAgcmV0dXJuICdlbWFpbElkJztcbiAgICBjYXNlICdwaG9uZSc6XG4gICAgICByZXR1cm4gJ3Bob25lbnVtYmVyJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGtleTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZyb21FbG9xdWFEYXRhID0gKGlkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgdHJ5IHtcbiAgICBsZXQgZWxvcXVhRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhdmxyRWxvcXVhRGF0YScpIHx8ICd7fSc7XG4gICAgaWYgKHR5cGVvZiBlbG9xdWFEYXRhID09PSAnc3RyaW5nJykgZWxvcXVhRGF0YSA9IEpTT04ucGFyc2UoZWxvcXVhRGF0YSk7XG4gICAgbGV0IHsgZmllbGRWYWx1ZXMgfSA9IGVsb3F1YURhdGEgfHwgeyBmaWVsZFZhbHVlczogW10gfTtcbiAgICBjb25zdCB7IHZhbHVlcyB9ID0gZWxvcXVhRGF0YSB8fCB7IHZhbHVlczoge30gfTtcbiAgICBmaWVsZFZhbHVlcyA9IGZpZWxkVmFsdWVzLmZpbHRlcigoZikgPT4gZi5pZCAhPT0gaWQpO1xuICAgIGRlbGV0ZSB2YWx1ZXNbZ2V0RWxvcXVhS2V5KGlkKV07XG4gICAgZWxvcXVhRGF0YS5maWVsZFZhbHVlcyA9IGZpZWxkVmFsdWVzO1xuICAgIGVsb3F1YURhdGEudmFsdWVzID0gdmFsdWVzO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXZsckVsb3F1YURhdGEnLCBKU09OLnN0cmluZ2lmeShlbG9xdWFEYXRhKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cbn07XG5cbi8vIFNhdmUgdmFsdWVzIHRvIGVsb3F1YURhdGEgd2luZG93IG9iamVjdFxuZXhwb3J0IGNvbnN0IHNhdmVUb0Vsb3F1YURhdGEgPSAoaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBpZiAodmFsdWUgPT09ICcnKSByZXR1cm47IC8vIERvbid0IG92ZXJ3cml0ZSB2YWx1ZXM7XG5cbiAgY29uc3QgZm9ybUlkID0gJ04vQSc7XG4gIGNvbnN0IHsgZWxvcXVhRGF0YSB9ID0gd2luZG93LmF2YSB8fCB7IGVsb3F1YURhdGE6IHsgdmFsdWVzOiB7fSwgZmllbGRWYWx1ZXM6IFtdIH0gfTtcbiAgbGV0IHsgdmFsdWVzLCBmaWVsZFZhbHVlcyB9ID0gZWxvcXVhRGF0YSB8fCB7IHZhbHVlczoge30sIGZpZWxkVmFsdWVzOiBbXSB9O1xuICBsZXQgc3RvcmVkRGF0YSA9IHt9O1xuXG4gIHRyeSB7XG4gICAgc3RvcmVkRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhdmxyRWxvcXVhRGF0YScpIHx8ICd7fSc7XG4gICAgc3RvcmVkRGF0YSA9IHR5cGVvZiBzdG9yZWREYXRhID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2Uoc3RvcmVkRGF0YSkgOiB7fTtcbiAgICB2YWx1ZXMgPSBzdG9yZWREYXRhLnZhbHVlcyB8fCBlbG9xdWFEYXRhLnZhbHVlcztcbiAgICBmaWVsZFZhbHVlcyA9IHN0b3JlZERhdGEuZmllbGRWYWx1ZXMgfHwgZWxvcXVhRGF0YS5maWVsZFZhbHVlcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIGlmICghdmFsdWVzIHx8ICh2YWx1ZXMgJiYgdmFsdWVzID09PSBudWxsKSkgdmFsdWVzID0ge307IC8vIFJlLWNoZWNrIG1pcy1jYXB0dXJlL3NhdmUgYXMgbnVsbFxuICBpZiAoIWZpZWxkVmFsdWVzIHx8IChmaWVsZFZhbHVlcyAmJiBmaWVsZFZhbHVlcyA9PT0gbnVsbCkpIGZpZWxkVmFsdWVzID0gW107XG5cbiAgaWYgKGlkID09PSAnZnVsbG5hbWUnKSB7XG4gICAgbGV0IHNwbGl0ID0gdmFsdWUuc3BsaXQoJyAnKTtcbiAgICBzcGxpdCA9IHNwbGl0Lm1hcCgodikgPT4gdi50cmltKCkpO1xuICAgIGNvbnN0IFtmaXJzdG5hbWUsIGxhc3RuYW1lXSA9IHNwbGl0O1xuICAgIHZhbHVlcy5maXJzdG5hbWUgPSBmaXJzdG5hbWU7XG4gICAgaWYgKGxhc3RuYW1lKSB2YWx1ZXMubGFzdG5hbWUgPSBsYXN0bmFtZTtcbiAgfVxuXG4gIC8vIFNldCBlbG9xdWEgb2JqZWN0IHZhbHVlXG4gIHZhbHVlc1tnZXRFbG9xdWFLZXkoaWQpXSA9IHZhbHVlO1xuXG4gIGZpZWxkVmFsdWVzID0gZGVkdXBlQXJyYXkoZmllbGRWYWx1ZXMpO1xuICBmaWVsZFZhbHVlcyA9IGZpZWxkVmFsdWVzLmZpbHRlcigoZikgPT4gZiAmJiBmLmlkICYmIGYuaWQgIT09IGlkKTtcbiAgZmllbGRWYWx1ZXMucHVzaCh7IGlkLCB2YWx1ZSB9KTtcblxuICBpZiAoaWQgPT09ICdmdWxsbmFtZScpIHtcbiAgICBjb25zdCBbZmlyc3ROYW1lLCBsYXN0TmFtZV0gPSAodmFsdWUuc3BsaXQoJyAnKSkubWFwKCh2KSA9PiB2LnRyaW0oKSk7XG4gICAgaWYgKGZpcnN0TmFtZSAmJiBmaXJzdE5hbWUgIT09ICcnKSB7XG4gICAgICBmaWVsZFZhbHVlcyA9IGZpZWxkVmFsdWVzLmZpbHRlcigoZikgPT4gZi5pZCAhPT0gJ2ZpcnN0TmFtZScpO1xuICAgICAgZmllbGRWYWx1ZXMucHVzaCh7IGlkOiAnZmlyc3ROYW1lJywgZmlyc3ROYW1lIH0pO1xuICAgICAgdmFsdWVzLmZpcnN0bmFtZSA9IGZpcnN0TmFtZTtcbiAgICB9XG4gICAgaWYgKGxhc3ROYW1lICYmIGxhc3ROYW1lICE9PSAnJykge1xuICAgICAgZmllbGRWYWx1ZXMgPSBmaWVsZFZhbHVlcy5maWx0ZXIoKGYpID0+IGYuaWQgIT09ICdsYXN0TmFtZScpO1xuICAgICAgZmllbGRWYWx1ZXMucHVzaCh7IGlkOiAnbGFzdE5hbWUnLCBsYXN0TmFtZSB9KTtcbiAgICAgIHZhbHVlcy5sYXN0bmFtZSA9IGxhc3ROYW1lO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCB0aW1lU3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcblxuICBjb25zdCBuZXdFbG9xdWFEYXRhID0ge1xuICAgIC4uLmVsb3F1YURhdGEsXG4gICAgb2s6IHRydWUsXG4gICAgZmllbGRWYWx1ZXMsXG4gICAgdGltZVN0YW1wLFxuICAgIHZhbHVlcyxcbiAgfTtcbiAgLy8gU2F2ZSBkYXRhIHRvIHdpbmRvd1xuICB3aW5kb3cuYXZhLmVsb3F1YURhdGEgPSBuZXdFbG9xdWFEYXRhO1xuXG4gIHRyeSB7XG4gICAgLy8gQXR0ZW1wdCB0byBzYXZlIGRhdGEgdG8gbG9jYWxTdG9yYWdlXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2F2bHJFbG9xdWFEYXRhJywgSlNPTi5zdHJpbmdpZnkobmV3RWxvcXVhRGF0YSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gICAgbG9nZ2VyKHtcbiAgICAgIGxldmVsOiAnSW5mbycsXG4gICAgICBtc2dUeXBlOiAnc2F2ZVRvRWxvcXVhRGF0YScsXG4gICAgICBmb3JtSWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdsb2NhbFN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4gTm90IHNhdmVkLicsXG4gICAgICAgIGluZm86IEpTT04uc3RyaW5naWZ5KGVyciksXG4gICAgICAgIGZpZWxkczogSlNPTi5zdHJpbmdpZnkoZmllbGRWYWx1ZXMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufTtcblxuLy8gUGFzc2VzIGluIGFuIGFycmF5IG9mIGZpZWxkcyB0aGF0IHdpbGwgb3ZlcnJpZGUgZmllbGRzIGluIHRoZSBmb3JtRGF0YS4gVGhpcyBpcyBtYWlubHkgdXNlZCB3aGVuIGZpZWxkc1JlcGxpY2F0ZSBpcyB1c2VkXG4vLyBAcmV0dXJuIHsgQXJyYXk8T2JqZWN0PiB9XG5leHBvcnQgY29uc3Qgc2V0RmllbGRPdmVyd3JpdGUgPSAoZmllbGRzOiBKc29uRmllbGRzLCBmaWVsZHNPdmVyd3JpdGU6IEFycmF5PFNldEpzb25GaWVsZD4pOiBKc29uRmllbGRzID0+IHtcbiAgaWYgKCFmaWVsZHMpIHJldHVybiBbXTtcbiAgY29uc3QgbmV3RmllbGRzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZHNbaV0pKSB7XG4gICAgICBuZXdGaWVsZHMucHVzaChzZXRGaWVsZE92ZXJ3cml0ZShbLi4uZmllbGRzW2ldXSwgZmllbGRzT3ZlcndyaXRlKSk7XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaWVsZHNbaV0pKSB7XG4gICAgICBjb25zdCB7IGlkIH0gPSBmaWVsZHNbaV07XG4gICAgICBjb25zdCBuZXdGaWVsZCA9IGZpZWxkc092ZXJ3cml0ZS5maWx0ZXIoKG8pID0+IG8uaWQgPT09IGlkKVswXTtcbiAgICAgIGlmIChuZXdGaWVsZCkge1xuICAgICAgICBuZXdGaWVsZHMucHVzaChuZXdGaWVsZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdGaWVsZHMucHVzaChmaWVsZHNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbLi4ubmV3RmllbGRzXTtcbn07XG5cbi8vIENvbnZlcnN0IHRoZSBldmVudHMgb2JqZWN0IHBhc3NlZCBpbiBmcm9tIEFFTSBpbnRvIGFuIGFycmF5IHZhbHVlIHRvIGJlIHVzZWQgaW4gdGhlIGZvcm1cbi8vIEByZXR1cm4geyBBcnJheTxPYmplY3Q+IH1cbmV4cG9ydCBjb25zdCBzZXRFdmVudE9wdGlvbnMgPSAoZmllbGRzOiBKc29uRmllbGRzLCBldmVudEFycmF5OiBBcnJheTx7IGV2ZW50RGF0ZVRpbWU6IHN0cmluZywgZXZlbnRJZGVudGlmaWVyMTogc3RyaW5nLCBldmVudElkZW50aWZpZXIyOiBzdHJpbmcsIGV2ZW50TGFiZWw6IHN0cmluZyB9Pik6IEpzb25GaWVsZHMgPT4ge1xuICBpZiAoIWZpZWxkcykgcmV0dXJuIFtdO1xuICBpZiAoIWV2ZW50QXJyYXkgfHwgKGV2ZW50QXJyYXkgJiYgZXZlbnRBcnJheS5sZW5ndGggPCAxKSkgcmV0dXJuIGZpZWxkcztcblxuICAvLyBTZXQgb3B0aW9uIG9iamVjdFxuICBjb25zdCBuZXdFdmVudEFycmF5ID0gZXZlbnRBcnJheS5tYXAoKGV2ZW50KSA9PiAoe1xuICAgIGRpc3BsYXk6IGV2ZW50LmV2ZW50TGFiZWwsXG4gICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGV2ZW50X2lkZW50aWZpZXI6IGV2ZW50LmV2ZW50SWRlbnRpZmllcjEsXG4gICAgICBldmVudF9pZGVudGlmaWVyMjogZXZlbnQuZXZlbnRJZGVudGlmaWVyMixcbiAgICAgIGRhdGV0aW1lOiBldmVudC5ldmVudERhdGVUaW1lLFxuICAgIH0pLFxuICB9KSk7XG5cbiAgcmV0dXJuIGZpZWxkcy5tYXAoKGYpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmKSkge1xuICAgICAgLy8gJEZsb3dGaXhNZSBXaHkgaXMgdGhpcyBpbmNvbXBhdGlibGUuIEl0IHNob3VsZCBiZSBBcnJheTxTZXRKc29uRmllbGQ+IGFuZCBpcyByZXBvcnQgaXQgaXMgbm90XG4gICAgICByZXR1cm4gc2V0RXZlbnRPcHRpb25zKFsuLi5mXSwgZXZlbnRBcnJheSk7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGYpICYmIGYuaWQgPT09ICdldmVudHMnKSB7XG4gICAgICByZXR1cm4geyAuLi5mLCBvcHRpb25zOiBuZXdFdmVudEFycmF5IH07XG4gICAgfVxuICAgIHJldHVybiBmO1xuICB9KTtcbn07XG5cbi8vIFNldHMgZmllbGQgYXJyYXkgZm9yIHZhbGlkYXRpb24gb24gaW5pdFxuLy8gQHJldHVybiB7IEFycmF5PHN0cmluZz4gfVxuZXhwb3J0IGNvbnN0IHNldEZpZWxkc0Zyb21TdG9yYWdlID0gKGZpZWxkczogSnNvbkZpZWxkcywgc3RvcmVkOiBBcnJheTxGb3JtQ2FwdHVyZUZpZWxkPikgPT4ge1xuICBpZiAoc3RvcmVkLmxlbmd0aCA8IDEpIHJldHVybiBbXTtcblxuICBjb25zdCBuZXdGaWVsZHMgPSBbXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFycmF5LWNhbGxiYWNrLXJldHVyblxuICBmaWVsZHMubWFwKChmKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZikpIHtcbiAgICAgIG5ld0ZpZWxkcy5jb25jYXQoc2V0RmllbGRzRnJvbVN0b3JhZ2UoWy4uLmZdLCBzdG9yZWQpKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZikgJiYgc3RvcmVkLmZpbHRlcigocykgPT4gcy5pZCA9PT0gZi5pZClbMF0pIHtcbiAgICAgIG5ld0ZpZWxkcy5wdXNoKHN0b3JlZC5maWx0ZXIoKHMpID0+IHMuaWQgPT09IGYuaWQpWzBdKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3RmllbGRzO1xufTtcblxuLy8gU2V0cyBwYXJ0bmVyIHNvdXJjZSB0byBmaWVsZHMgYXJyYXlcbmV4cG9ydCBjb25zdCBzZXRIaWRkZW5QYXJ0bmVyU291cmNlID0gKGNvbmZpZ3M6IEZvcm1EZWZhdWx0Q29uZmlncywgZmllbGRzOiBKc29uRmllbGRzKTogSnNvbkZpZWxkcyA9PiB7XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGZpZWxkcztcbiAgY29uc3QgeyBzZWFyY2ggfSA9IHdpbmRvdy5sb2NhdGlvbiB8fCAnJztcbiAgY29uc3QgcGFydG5lclFTVmFsdWUgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHNlYXJjaCk7XG5cbiAgaWYgKChjb25maWdzLnBhcnRuZXJzb3VyY2UgJiYgY29uZmlncy5wYXJ0bmVyc291cmNlICE9PSAnJykgfHwgcGFydG5lclFTVmFsdWUuZ2V0KCdwYXJ0bmVyX3JlcF9lbWFpbCcpKSB7XG4gICAgbGV0IHBhcnRuZXJWYWx1ZSA9IGNvbmZpZ3MucGFydG5lcnNvdXJjZTtcbiAgICAvLyBTdGFydCBjaGVjayBmb3JtIHBhcmFtIHZhbHVlXG4gICAgaWYgKHBhcnRuZXJRU1ZhbHVlLmdldCgncGFydG5lcnNvdXJjZScpKSB7XG4gICAgICBwYXJ0bmVyVmFsdWUgPSBwYXJ0bmVyUVNWYWx1ZS5nZXQoJ3BhcnRuZXJzb3VyY2UnKSB8fCBjb25maWdzLnBhcnRuZXJzb3VyY2U7XG4gICAgfVxuXG4gICAgbmV3RmllbGRzLnB1c2goe1xuICAgICAgZGlzcGxheVRleHQ6ICdwYXJ0bmVyX3NvdXJjZScsXG4gICAgICBpZDogJ3BhcnRuZXJzb3VyY2UnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdwYXJ0bmVyX3NvdXJjZScsXG4gICAgICB0eXBlOiAnaGlkZGVuJyxcbiAgICAgIHZhbHVlOiBwYXJ0bmVyVmFsdWUsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBpZiAocGFydG5lclFTVmFsdWUuZ2V0KCdwYXJ0bmVyX3JlcF9lbWFpbCcpKSB7XG4gICAgICBjb25zdCBwYXJ0bmVyUmVwVmFsdWUgPSBwYXJ0bmVyUVNWYWx1ZS5nZXQoJ3BhcnRuZXJfcmVwX2VtYWlsJyk7XG5cbiAgICAgIG5ld0ZpZWxkcy5wdXNoKHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdwYXJ0bmVyX3JlcF9lbWFpbCcsXG4gICAgICAgIGlkOiAncGFydG5lcl9yZXBfZW1haWwnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ3BhcnRuZXJfcmVwX2VtYWlsJyxcbiAgICAgICAgdHlwZTogJ2hpZGRlbicsXG4gICAgICAgIHZhbHVlOiBwYXJ0bmVyUmVwVmFsdWUsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBFbmQgY2hlY2sgZm9yIHBhcmFtIHZhbHVlXG4gIH1cblxuICByZXR1cm4gbmV3RmllbGRzO1xufTtcblxuLy8gTGNvYWxpemUgZGlzcGxheSB0ZXh0IHRvIGJlIHdpdGluIHRoZSBsb2NhbGUgbGFuZ3VhZ2UuIEZpbGUgY29uc3RhbnRzL2xhbmF1Z2UtcXVlc3Rpb25zXG4vLyBAcmV0dXJuIHsgQXJyYXk8T2JqZWN0PiB9XG5leHBvcnQgY29uc3QgdHJhbnNsYXRlRGlzcGxheVRleHQgPSAoZmllbGRzOiBBcnJheTxTaW5nbGVKc29uRmllbGQ+IHwgbnVsbCA9IG51bGwsIGxvY2FsZTogc3RyaW5nKSA9PiB7XG4gIGlmIChsb2NhbGUgPT09ICdlbicpIHJldHVybiBmaWVsZHM7XG4gIGlmICghZmllbGRzIHx8IGZpZWxkcyA9PT0gbnVsbCkgcmV0dXJuIGZpZWxkcztcbiAgY29uc3Qgc2V0RmllbGRzID0gW107XG4gIGZpZWxkcy5mb3JFYWNoKChmOiBTaW5nbGVKc29uRmllbGQpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmKSkge1xuICAgICAgc2V0RmllbGRzLnB1c2godHJhbnNsYXRlRGlzcGxheVRleHQoWy4uLmZdLCBsb2NhbGUpKTtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGYpICYmIGxvY2FsZSAhPT0gbnVsbCkge1xuICAgICAgbGV0IGxvY2FsZVRleHQgPSBmLmRpc3BsYXlUZXh0O1xuICAgICAgY29uc3QgeyBkaXNwbGF5VGV4dCB9ID0gZjtcbiAgICAgIGlmIChkaXNwbGF5VGV4dCAmJiBsb2NhbGUgIT09IG51bGwpIHtcbiAgICAgICAgbG9jYWxlVGV4dCA9IGdldExvY2FsZVN0cmluZ1RleHQoZGlzcGxheVRleHQsICdxdWVzdGlvbicsIGxvY2FsZSk7XG4gICAgICAgIHNldEZpZWxkcy5wdXNoKHsgLi4uZiwgZGlzcGxheVRleHQ6IGxvY2FsZVRleHQsIHBsYWNlaG9sZGVyOiBsb2NhbGVUZXh0IH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzZXRGaWVsZHM7XG59O1xuXG4vLyBQYXJzZSBvdXQgZXZlbnQgaW5mb3JtYXRpb25cbi8vIENvbXBsZXRlIHRoaXMgc3RlcCBoZXJlIGluIG9yZGVyIHRvIGNhdGNoIGFmdGVyIGFwcGVuZC9yZW1vdmUvb3ZlcndyaXRlIHN0ZXBcbmV4cG9ydCBjb25zdCBzZXRFdmVudHMgPSAoY29uZmlnczogYW55LCBmaWVsZHM6IEpzb25GaWVsZHMpOiBKc29uRmllbGRzID0+IHtcbiAgaWYgKGNvbmZpZ3MuZXZlbnRzICYmIGNvbmZpZ3MuZXZlbnRzICE9PSBudWxsICYmIGNvbmZpZ3MuZXZlbnRzICE9PSAnJykge1xuICAgIGNvbnN0IGV2ZW50cyA9IHR5cGVvZiBjb25maWdzLmV2ZW50cyA9PT0gJ3N0cmluZycgJiYgY29uZmlncy5ldmVudHMgIT09IG51bGwgJiYgY29uZmlncy5ldmVudHMgIT09ICcnICYmIGlzSnNvbihjb25maWdzLmV2ZW50cykgPyBKU09OLnBhcnNlKGNvbmZpZ3MuZXZlbnRzKSA6IGNvbmZpZ3MuZXZlbnRzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50cykpIHJldHVybiBzZXRFdmVudE9wdGlvbnMoZmllbGRzLCBldmVudHMpO1xuICB9XG4gIHJldHVybiBmaWVsZHM7XG59O1xuXG5jb25zdCBXRUJGT1JNX1QxOiBzdHJpbmcgPSAnV0VCRk9STSBUMSc7XG5jb25zdCBJTkRVU1RSWTogc3RyaW5nID0gJ0lORFVTVFJZJztcblxuZXhwb3J0IGNvbnN0IGhhc0luZHVzdHJ5RmllbGQgPSAoZmllbGRzOiBKc29uRmllbGRzIHwgQXJyYXk8U2V0SnNvbkZpZWxkPikgPT4ge1xuICBsZXQgaGFzRm91bmRJbmR1c3RyeSA9IGZhbHNlO1xuICBmaWVsZHMuZXZlcnkoKGY6IFNpbmdsZUpzb25GaWVsZCkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGYpKSB7XG4gICAgICBoYXNGb3VuZEluZHVzdHJ5ID0gaGFzSW5kdXN0cnlGaWVsZChmKTtcbiAgICAgIGlmIChoYXNGb3VuZEluZHVzdHJ5KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGYuZGlzcGxheVRleHQgJiYgSU5EVVNUUlkgPT09IGYuZGlzcGxheVRleHQudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGFzRm91bmRJbmR1c3RyeSA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gaGFzRm91bmRJbmR1c3RyeTtcbn07XG5cbi8vIEdldCBkYXRhIGZvciBtb2RhbCBzZXR1cFxuZXhwb3J0IGNvbnN0IGdldE1vZGFsRGF0YSA9IChcbiAgaGFzQmVlblZhbGlkYXRlZDogYW55LFxuICB2YWxpZGF0ZWRGaWVsZHM6IGFueSxcbiAgY3VycmVudEZvcm06IHsgW2tleTogc3RyaW5nXTogYW55fSxcbiAgaXNNb2RhbDogYm9vbGVhbixcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGZpZWxkczogSnNvbkZpZWxkcyxcbiAgc3RhdGU6IEZvcm1TdGF0ZSxcbik6IGFueSA9PiB7XG4gIGxldCBhdXRvU2F2ZURhdGFDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoW10pO1xuICB0cnkge1xuICAgIGF1dG9TYXZlRGF0YUNvbnRlbnQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2F2YUF1dG9TYXZlJykgfHwgYXV0b1NhdmVEYXRhQ29udGVudDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRG8gbm90aGluZztcbiAgfVxuICBsZXQgbmV3SGFzQmVlblZhbGlkYXRlZCA9IGhhc0JlZW5WYWxpZGF0ZWQ7XG4gIGxldCBuZXdWYWxpZGF0ZWRGaWVsZHMgPSB2YWxpZGF0ZWRGaWVsZHM7XG4gIGNvbnN0IG5ld0NhcHR1cmVGaWVsZHMgPSBzdGF0ZS5jYXB0dXJlRmllbGRzW2Zvcm1JZF0gfHwgW107XG4gIGNvbnN0IGFjdGl2ZUZvcm0gPSBjdXJyZW50Rm9ybTtcblxuICBpZiAoaXNNb2RhbCkge1xuICAgIGFjdGl2ZUZvcm0udmFsdWVzID0gW1xuICAgICAgLi4ubmV3Q2FwdHVyZUZpZWxkcywgLy8gc2V0IHByZXYgY2FwdHVyZWQgZmllbGRzXG4gICAgICAuLi5hY3RpdmVGb3JtLnZhbHVlcywgLy8gcmVzZXQgaGlkZGVuIHZhbHVlc1xuICAgICAgLi4uc2V0RmllbGRzRnJvbVN0b3JhZ2UoZmllbGRzLCBKU09OLnBhcnNlKGF1dG9TYXZlRGF0YUNvbnRlbnQpKSwgLy8gU2V0IHZhbHVlcyBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICBdO1xuICAgIGNvbnN0IHRlc3RIYXNCZWVuVmFsaWRhdGVkID0gYWN0aXZlRm9ybS52YWx1ZXMubWFwKChhKSA9PiBhLmlkKTsgLy8gU2V0IGZpZWxkcyB0byBoYXZlIGJlZW4gdmFsaWRhdGVkXG4gICAgY29uc3QgdGVzdFZhbGlkYXRlZEZpZWxkcyA9IGdldFJlcXVpcmVkRmllbGRzRnJvbVN0b3JhZ2UoZmllbGRzLCBzZXRGaWVsZHNGcm9tU3RvcmFnZShmaWVsZHMsIEpTT04ucGFyc2UoYXV0b1NhdmVEYXRhQ29udGVudCkpKTsgLy8gc2V0IGZpZWxkcyB0byB2YWxpZGF0ZWRcbiAgICBuZXdIYXNCZWVuVmFsaWRhdGVkID0gdGVzdEhhc0JlZW5WYWxpZGF0ZWQuY29uY2F0KG5ld0hhc0JlZW5WYWxpZGF0ZWQpO1xuICAgIG5ld1ZhbGlkYXRlZEZpZWxkcyA9IHRlc3RWYWxpZGF0ZWRGaWVsZHMuY29uY2F0KG5ld1ZhbGlkYXRlZEZpZWxkcyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5ld0FjdGl2ZUZvcm06IGFjdGl2ZUZvcm0sXG4gICAgbW9kYWxIYXNCZWVuVmFsaWRhdGVkOiBuZXdIYXNCZWVuVmFsaWRhdGVkLFxuICAgIG1vZGFsVmFsaWRhdGVkRmllbGRzOiBuZXdWYWxpZGF0ZWRGaWVsZHMsXG4gIH07XG59O1xuXG4vLyBTZXQgQ2hpbGlwaXBlciBhdHRyaWJ1dGVzIG9uIGxvYWRcbmV4cG9ydCBjb25zdCBzZXRDaGlsaXBpcGVyU3RhdGUgPSAoY2hpbGlwaXBlcjogQXJyYXk8c3RyaW5nPiwgZm9ybUlkOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+ID0+IHtcbiAgY2hpbGlwaXBlci5maWx0ZXIoKGYpID0+IGYgIT09IGZvcm1JZCk7XG4gIGlmIChpc0Nvbm5lY3RlZFRvQ2hpbGlwaXBlcihmb3JtSWQpICYmICEvY2hpbGlwaXBlci8udGVzdChmb3JtSWQpKSB7XG4gICAgY2hpbGlwaXBlci5wdXNoKGZvcm1JZCk7XG4gICAgZGlzYWJsZUNoaWxpcGlwZXJCdXR0b24oZm9ybUlkKTtcbiAgICBhcHBlbmRDbGFzc1RvSGVhZGVyKCk7XG4gIH1cbiAgcmV0dXJuIGNoaWxpcGlwZXI7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHN0YXRlOiBGb3JtU3RhdGUgPSBkZWZhdWx0U3RhdGUsIGFjdGlvbjogQWN0aW9uKTogRm9ybVN0YXRlIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ0FERF9SRVFVSVJFRF9GSUVMRCc6IHtcbiAgICAgIGNvbnN0IHsgbmV3Rm9ybUZpZWxkcywgZm9ybUlkLCBuZXdGaWVsZCB9ID0gYWN0aW9uO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGFjdGl2ZUZvcm1zOiB7XG4gICAgICAgICAgLi4uc3RhdGUuYWN0aXZlRm9ybXMsXG4gICAgICAgICAgW2Zvcm1JZF06IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLmFjdGl2ZUZvcm1zW2Zvcm1JZF0sXG4gICAgICAgICAgICBmaWVsZHM6IG5ld0Zvcm1GaWVsZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWRGaWVsZHM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5yZXF1aXJlZEZpZWxkcyxcbiAgICAgICAgICBbZm9ybUlkXTogWy4uLnN0YXRlLnJlcXVpcmVkRmllbGRzW2Zvcm1JZF0sIG5ld0ZpZWxkXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ0NBUFRVUkVfRElBTF9DT0RFJzoge1xuICAgICAgY29uc3QgeyBkaWFsQ29kZSwgZm9ybUlkIH0gPSBhY3Rpb247XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgY29uc3QgbmV3RGlhbENvZGUgPSBuZXdTdGF0ZS5kaWFsQ29kZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBkaWFsQ29kZToge1xuICAgICAgICAgIC4uLm5ld0RpYWxDb2RlLFxuICAgICAgICAgIFtmb3JtSWRdOiBkaWFsQ29kZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ0NBUFRVUkVfSU5QVVRfRklFTEQnOiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGZvcm1JZCwgaW5wdXRUYXJnZXQsXG4gICAgICB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgeyBpZCwgdHlwZSB9ID0gaW5wdXRUYXJnZXQ7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgY29uc3QgY2FwdHVyZUZpZWxkcyA9IHsgLi4ubmV3U3RhdGUuY2FwdHVyZUZpZWxkcyB9O1xuXG4gICAgICBsZXQgeyB2YWx1ZSB9ID0gaW5wdXRUYXJnZXQ7XG4gICAgICBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICB2YWx1ZSA9IGlucHV0VGFyZ2V0LmNoZWNrZWQgJiYgaW5wdXRUYXJnZXQudmFsdWUgPyBpbnB1dFRhcmdldC52YWx1ZSA6ICcxJztcbiAgICAgICAgaWYgKCFpbnB1dFRhcmdldC5jaGVja2VkIHx8IGlucHV0VGFyZ2V0LmNoZWNrZWQgPT09ICcnKSB7XG4gICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaWQgPT09ICdnZHByQ29uc2VudERhdGUnKSB7XG4gICAgICAgIHZhbHVlID0gaW5wdXRUYXJnZXQuY2hlY2tlZCA/IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSA6ICcnO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IGNsZWFuRmllbGRWYWx1ZSh2YWx1ZSwgaWQpO1xuICAgICAgY29uc3QgbmV3RmllbGRzID0gc3RhdGUuY2FwdHVyZUZpZWxkc1tmb3JtSWRdID8gc3RhdGUuY2FwdHVyZUZpZWxkc1tmb3JtSWRdLmZpbHRlcigodikgPT4gdi5pZCAhPT0gaWQpIDogW107IC8vIFJlbW92ZSBmaWVsZCBmcm9tIGFycmF5LCBwcmV2ZW50IGR1cGxpY2F0aW9uXG5cbiAgICAgIGxldCBuZXdDYXB0dXJlRmllbGRzID0gY2FwdHVyZUZpZWxkc1tmb3JtSWRdID8gY2FwdHVyZUZpZWxkc1tmb3JtSWRdLmZpbHRlcigodikgPT4gdi5pZCAhPT0gaWQpIDogW107XG4gICAgICBuZXdDYXB0dXJlRmllbGRzID0gZGVkdXBlQXJyYXkobmV3Q2FwdHVyZUZpZWxkcyk7XG5cbiAgICAgIGNvbnN0IG5ld1NldEZpZWxkcyA9IGZpbHRlck91dEFycmF5QnlJZChzdGF0ZS5zZXRGaWVsZHNbZm9ybUlkXSwgaWQpOyAvLyBSZW1vdmUgZmllbGQgZnJvbSBhcnJheSwgcHJldmVudCBkdXBsaWNhdGlvblxuXG4gICAgICBjb25zdCBuZXdSZXF1aXJlZFZhbGlkYXRpb24gPSBmaWx0ZXJPdXRBcnJheUJ5SWQoc3RhdGUudmFsaWRhdGVkRmllbGRzW2Zvcm1JZF0sIGlkKTtcblxuICAgICAgbGV0IG5ld0Vycm9yU3RhdGUgPSBzdGF0ZS5oYXNFcnJvcltmb3JtSWRdO1xuICAgICAgbGV0IG5ld1ZhbGlkU3RhdGUgPSBzdGF0ZS5oYXNCZWVuVmFsaWRhdGVkW2Zvcm1JZF07XG4gICAgICBuZXdWYWxpZFN0YXRlID0gZmlsdGVyT3V0QXJyYXlCeUlkKG5ld1ZhbGlkU3RhdGUsIGlkKTsgLy8gUmVtb3ZlIGZyb20gaGFzQmVlblZhbGlkYXRlZCBhcnJheSwgcHJldmVudCBkdXBsaWNhdGlvblxuICAgICAgbmV3RXJyb3JTdGF0ZSA9IGZpbHRlck91dEVycm9yQnlJZChuZXdFcnJvclN0YXRlLCBpZCk7IC8vIFJlbW92ZSBmcm9tIGVycm9yIGFycmF5LCBwcmV2ZW50IGR1cGxpY2F0aW9uXG5cbiAgICAgIGlmICh2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgbmV3RmllbGRzLnB1c2goeyBpZCwgdmFsdWUgfSk7IC8vIFB1c2ggbmV3IGZpZWxkIHZhbHVlXG4gICAgICAgIG5ld0NhcHR1cmVGaWVsZHMucHVzaCh7IGlkLCB2YWx1ZSB9KTsgLy8gUHVzaCBuZXcgZmllbGQgdmFsdWVcbiAgICAgICAgbmV3U2V0RmllbGRzLnB1c2goaWQpOyAvLyBTZXQgYXMgYW4gYWN0aXZlIGZpZWxkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlQ2FwdHVyZUZpZWxkcyA9IGRlZHVwZUFycmF5KFsuLi5zdGF0ZS5yZUNhcHR1cmVGaWVsZHMsIHsgaWQ6IGlucHV0VGFyZ2V0LmlkLCB2YWx1ZTogaW5wdXRUYXJnZXQudmFsdWUgfV0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGNhcHR1cmVGaWVsZHM6IHtcbiAgICAgICAgICAuLi5jYXB0dXJlRmllbGRzLFxuICAgICAgICAgIFtmb3JtSWRdOiBuZXdDYXB0dXJlRmllbGRzLFxuICAgICAgICB9LFxuICAgICAgICBoYXNCZWVuVmFsaWRhdGVkOiB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUuaGFzQmVlblZhbGlkYXRlZCxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3VmFsaWRTdGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgaGFzRXJyb3I6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS5oYXNFcnJvcixcbiAgICAgICAgICBbZm9ybUlkXTogbmV3RXJyb3JTdGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVDYXB0dXJlRmllbGRzLFxuICAgICAgICBzZXRGaWVsZHM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZXRGaWVsZHMsXG4gICAgICAgICAgW2Zvcm1JZF06IG5ld1NldEZpZWxkcyxcbiAgICAgICAgfSxcbiAgICAgICAgdmFsaWRhdGVkRmllbGRzOiB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUudmFsaWRhdGVkRmllbGRzLFxuICAgICAgICAgIFtmb3JtSWRdOiBuZXdSZXF1aXJlZFZhbGlkYXRpb24sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdDQVBUVVJFX0lOUFVUX0ZJRUxEX0lOVExfUEhPTkUnOiB7XG4gICAgICBjb25zdCB7IGNvdW50cnlEYXRhLCBmb3JtSWQsIGlkIH0gPSBhY3Rpb247XG4gICAgICBsZXQgeyB2YWx1ZSB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgICAgIGNvbnN0IGhhc1Zpc2libGVDb3VudHJ5RmllbGQgPSBjaGVja0ZvclZpc2libGVDb3VudHJ5KG5ld1N0YXRlLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uZmllbGRzKTtcbiAgICAgIGNvbnN0IGNhcHR1cmVGaWVsZHMgPSB7IC4uLm5ld1N0YXRlLmNhcHR1cmVGaWVsZHMgfTtcbiAgICAgIGNvbnN0IHsgZGlhbENvZGUsIGNvdW50cnlDb2RlIH0gPSBjb3VudHJ5RGF0YSB8fCB7IGRpYWxDb2RlOiAnMScsIGNvdW50cnlDb2RlOiAnVVMnIH07XG4gICAgICAvLyBTZXQgY29udHJ5IGNvZGUgdG8gd2luZG93IGZvciBzdWJtaXNzaW9uIHVzYWdlXG4gICAgICB3aW5kb3cuYXZhID0gd2luZG93LmF2YSB8fCB7fTtcbiAgICAgIHdpbmRvdy5hdmEudXNlclNlbGVjdGVkSXNvQ29kZSA9IGNvdW50cnlDb2RlLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgIHZhbHVlID0gY2xlYW5GaWVsZFZhbHVlKHZhbHVlLCBpZCk7XG4gICAgICBjb25zdCBuZXdEaWFsQ29kZSA9IHN0YXRlLmRpYWxDb2RlO1xuICAgICAgY29uc3QgbmV3RmllbGRzID0gc3RhdGUuY2FwdHVyZUZpZWxkc1tmb3JtSWRdLmZpbHRlcigodikgPT4gdi5pZCAhPT0gaWQpOyAvLyBSZW1vdmUgZmllbGQgZnJvbSBhcnJheSwgcHJldmVudCBkdXBsaWNhdGlvblxuICAgICAgbGV0IG5ld0NhcHR1cmVGaWVsZHMgPSBjYXB0dXJlRmllbGRzW2Zvcm1JZF0gPyBjYXB0dXJlRmllbGRzW2Zvcm1JZF0uZmlsdGVyKCh2KSA9PiB2LmlkICE9PSBpZCkgOiBbXTtcblxuICAgICAgY29uc3QgbmV3U2V0RmllbGRzID0gZmlsdGVyT3V0QXJyYXlCeUlkKHN0YXRlLnNldEZpZWxkc1tmb3JtSWRdLCBpZCk7IC8vIFJlbW92ZSBmaWVsZCBmcm9tIGFycmF5LCBwcmV2ZW50IGR1cGxpY2F0aW9uXG5cbiAgICAgIGNvbnN0IG5ld1JlcXVpcmVkVmFsaWRhdGlvbiA9IGZpbHRlck91dEFycmF5QnlJZChzdGF0ZS52YWxpZGF0ZWRGaWVsZHNbZm9ybUlkXSwgaWQpO1xuXG4gICAgICBsZXQgbmV3RXJyb3JTdGF0ZSA9IHN0YXRlLmhhc0Vycm9yW2Zvcm1JZF07XG4gICAgICBsZXQgbmV3VmFsaWRTdGF0ZSA9IHN0YXRlLmhhc0JlZW5WYWxpZGF0ZWRbZm9ybUlkXTtcbiAgICAgIG5ld1ZhbGlkU3RhdGUgPSBmaWx0ZXJPdXRBcnJheUJ5SWQobmV3VmFsaWRTdGF0ZSwgaWQpOyAvLyBSZW1vdmUgZnJvbSBoYXNCZWVuVmFsaWRhdGVkIGFycmF5LCBwcmV2ZW50IGR1cGxpY2F0aW9uXG4gICAgICBuZXdFcnJvclN0YXRlID0gZmlsdGVyT3V0RXJyb3JCeUlkKG5ld0Vycm9yU3RhdGUsIGlkKTsgLy8gUmVtb3ZlIGZyb20gZXJyb3IgYXJyYXksIHByZXZlbnQgZHVwbGljYXRpb25cblxuICAgICAgaWYgKHZhbHVlICE9PSAnJykge1xuICAgICAgICBuZXdGaWVsZHMucHVzaCh7IGlkLCB2YWx1ZSB9KTsgLy8gUHVzaCBuZXcgZmllbGQgdmFsdWVcbiAgICAgICAgbmV3Q2FwdHVyZUZpZWxkcy5wdXNoKHsgaWQsIHZhbHVlIH0pOyAvLyBQdXNoIG5ldyBmaWVsZCB2YWx1ZVxuICAgICAgICBuZXdTZXRGaWVsZHMucHVzaChpZCk7IC8vIFNldCBhcyBhbiBhY3RpdmUgZmllbGRcblxuICAgICAgICBpZiAoIWhhc1Zpc2libGVDb3VudHJ5RmllbGQpIHtcbiAgICAgICAgICBuZXdDYXB0dXJlRmllbGRzID0gbmV3Q2FwdHVyZUZpZWxkcy5maWx0ZXIoKGYpID0+IGYuaWQgIT09ICdjb3VudHJ5Jyk7IC8vIEZpbHRlciBvdXQgcmVkdW5kZW5jeVxuICAgICAgICAgIG5ld0NhcHR1cmVGaWVsZHMucHVzaCh7IGlkOiAnY291bnRyeScsIHZhbHVlOiBjb3VudHJ5RGF0YS5jb3VudHJ5Q29kZS50b1VwcGVyQ2FzZSgpIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlQ2FwdHVyZUZpZWxkcyA9IGRlZHVwZUFycmF5KFsuLi5zdGF0ZS5yZUNhcHR1cmVGaWVsZHMsIHsgaWQsIHZhbHVlIH1dKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBjYXB0dXJlRmllbGRzOiB7XG4gICAgICAgICAgLi4uY2FwdHVyZUZpZWxkcyxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3Q2FwdHVyZUZpZWxkcyxcbiAgICAgICAgfSxcbiAgICAgICAgZGlhbENvZGU6IHtcbiAgICAgICAgICAuLi5uZXdEaWFsQ29kZSxcbiAgICAgICAgICBbZm9ybUlkXTogZGlhbENvZGUsXG4gICAgICAgIH0sXG4gICAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS5oYXNCZWVuVmFsaWRhdGVkLFxuICAgICAgICAgIFtmb3JtSWRdOiBuZXdWYWxpZFN0YXRlLFxuICAgICAgICB9LFxuICAgICAgICBoYXNFcnJvcjoge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLmhhc0Vycm9yLFxuICAgICAgICAgIFtmb3JtSWRdOiBuZXdFcnJvclN0YXRlLFxuICAgICAgICB9LFxuICAgICAgICByZUNhcHR1cmVGaWVsZHMsXG4gICAgICAgIHNldEZpZWxkczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldEZpZWxkcyxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3U2V0RmllbGRzLFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZWRGaWVsZHM6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS52YWxpZGF0ZWRGaWVsZHMsXG4gICAgICAgICAgW2Zvcm1JZF06IG5ld1JlcXVpcmVkVmFsaWRhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ0NBUFRVUkVfTUxUX0FWQVRBWF9SRVNQT05TRSc6IHtcbiAgICAgIGNvbnN0IHsgZm9ybUlkLCByZXNwb25zZSB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHsgY2FwdHVyZUZpZWxkcyB9ID0gbmV3U3RhdGU7XG4gICAgICBsZXQgbmV3Q2FwdHVyZUZpZWxkcyA9IGNhcHR1cmVGaWVsZHNbZm9ybUlkXSB8fCBbXTtcbiAgICAgIG5ld0NhcHR1cmVGaWVsZHMgPSBuZXdDYXB0dXJlRmllbGRzLmZpbHRlcigoZikgPT4gZi5pZCAhPT0gJ2F2YVRheE1MVFJlc3BvbnNlJyk7XG4gICAgICBuZXdDYXB0dXJlRmllbGRzID0gbmV3Q2FwdHVyZUZpZWxkcy5maWx0ZXIoKGYpID0+IGYuaWQgIT09ICdDX1RheFJhdGUnKTtcblxuICAgICAgLy8gQWRkIGZ1bGwgcmVzcG9uc2VcbiAgICAgIG5ld0NhcHR1cmVGaWVsZHMucHVzaCh7XG4gICAgICAgIGlkOiAnYXZhVGF4TUxUUmVzcG9uc2UnLFxuICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpLCAvLyBEbyBub3QgY2FwdHVyZSB2YWxpZCBzdGF0ZSBhdCB0aGlzIHRpbWVcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgcmF0ZSB0byB0YXggZmllbGRcbiAgICAgIG5ld0NhcHR1cmVGaWVsZHMucHVzaCh7XG4gICAgICAgIGlkOiAnQ19UYXhSYXRlJyxcbiAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLnJhdGUpLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBjYXB0dXJlRmllbGRzOiB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUuY2FwdHVyZUZpZWxkcyxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3Q2FwdHVyZUZpZWxkcyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ0NMRUFSX0ZPUk1fVkFMVUVTJzoge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGJlIHRyaWdnZXJlZCBieSB3aW5kb3cgY2xlYXJGb3JtVmFsdWVzXG4gICAgICBjb25zdCB7IGZvcm1JZCwgZmllbGRzIH0gPSBhY3Rpb247XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgY29uc3QgbmV3Q2FwdHVyZUZpZWxkcyA9IG5ld1N0YXRlLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSB8fCBbXTtcbiAgICAgIGNvbnN0IGNhcHR1cmVGaWVsZHMgPSBuZXdDYXB0dXJlRmllbGRzLmZpbHRlcigoZikgPT4gIWZpZWxkcy5pbmNsdWRlcyhmLmlkKSk7XG5cbiAgICAgIGxldCBuZXdTZXRGaWVsZHMgPSBuZXdTdGF0ZS5zZXRGaWVsZHNbZm9ybUlkXSB8fCBbXTtcbiAgICAgIGxldCBuZXdSZXF1aXJlZFZhbGlkYXRpb24gPSBuZXdTdGF0ZS52YWxpZGF0ZWRGaWVsZHNbZm9ybUlkXSB8fCBbXTtcbiAgICAgIGxldCBoYXNCZWVuVmFsaWRhdGVkID0gbmV3U3RhdGUuaGFzQmVlblZhbGlkYXRlZFtmb3JtSWRdIHx8IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBuZXdTZXRGaWVsZHMgPSBmaWx0ZXJPdXRBcnJheUJ5SWQobmV3U2V0RmllbGRzLCBmaWVsZHNbaV0pO1xuICAgICAgICBuZXdSZXF1aXJlZFZhbGlkYXRpb24gPSBmaWx0ZXJPdXRBcnJheUJ5SWQobmV3UmVxdWlyZWRWYWxpZGF0aW9uLCBmaWVsZHNbaV0pO1xuICAgICAgICBoYXNCZWVuVmFsaWRhdGVkID0gZmlsdGVyT3V0QXJyYXlCeUlkKGhhc0JlZW5WYWxpZGF0ZWQsIGZpZWxkc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBjYXB0dXJlRmllbGRzOiB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUuY2FwdHVyZUZpZWxkcyxcbiAgICAgICAgICBbZm9ybUlkXTogY2FwdHVyZUZpZWxkcyxcbiAgICAgICAgfSxcbiAgICAgICAgaGFzQmVlblZhbGlkYXRlZDoge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLmhhc0JlZW5WYWxpZGF0ZWQsXG4gICAgICAgICAgW2Zvcm1JZF06IGhhc0JlZW5WYWxpZGF0ZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNldEZpZWxkczoge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLnNldEZpZWxkcyxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3U2V0RmllbGRzLFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZWRGaWVsZHM6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS52YWxpZGF0ZWRGaWVsZHMsXG4gICAgICAgICAgW2Zvcm1JZF06IG5ld1JlcXVpcmVkVmFsaWRhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ0VNQUlMX1ZFUklGWV9GQUlMRUQnOiB7XG4gICAgICBjb25zdCB7IGZvcm1JZCwgaW5wdXRJZCwgcmVzcG9uc2UgfSA9IGFjdGlvbjtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGU7XG4gICAgICBsZXQgbmV3RXJyb3JTdGF0ZSA9IHN0YXRlLmhhc0Vycm9yW2Zvcm1JZF07XG4gICAgICBsZXQgbmV3VmFsaWRTdGF0ZSA9IHN0YXRlLmhhc0JlZW5WYWxpZGF0ZWRbZm9ybUlkXTtcbiAgICAgIGNvbnN0IG5ld1JlcXVpcmVkVmFsaWRhdGlvbiA9IGZpbHRlck91dEFycmF5QnlJZChzdGF0ZS52YWxpZGF0ZWRGaWVsZHNbZm9ybUlkXSwgaW5wdXRJZCk7IC8vIEZpbHRlciBvdXQgZmllbGQgaWYgZXhpc3RzLiBQcm90ZWN0IGFnYWluc3QgZHVwbGljYXRpb25cbiAgICAgIG5ld0Vycm9yU3RhdGUgPSBmaWx0ZXJPdXRFcnJvckJ5SWQobmV3RXJyb3JTdGF0ZSwgaW5wdXRJZCk7IC8vIEZpbHRlciBvdXQgZmllbGQgaWYgZXhpc3RzLiBQcm90ZWN0IGFnYWluc3QgZHVwbGljYXRpb25cbiAgICAgIG5ld0Vycm9yU3RhdGUucHVzaCh7XG4gICAgICAgIGlkOiBpbnB1dElkLFxuICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5lcnJvciB8fCAnVW5rbm93biBlcnJvciB0eXBlJyxcbiAgICAgICAgc2VydmVyTWVzc2FnZTogcmVzcG9uc2UuZXJyb3JfY29kZSwgLy8gQ2FwdHVyZSBzZXJ2ZXIgZXJyb3IgZm9yIGRlYnVnZ2luZ1xuICAgICAgfSk7IC8vIEFkZCB0byBlcnJvciBzdGF0ZSB3aXRoIG1lc3NhZ2UgZm9yIGRpc3BsYXlcbiAgICAgIG5ld1ZhbGlkU3RhdGUgPSBmaWx0ZXJPdXRBcnJheUJ5SWQobmV3VmFsaWRTdGF0ZSwgaW5wdXRJZCk7IC8vIEZpbHRlciBvdXQgaWQgZnJvbSBoYXNCZWVuVmFsaWRhdGVkXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgYWN0aXZlRmllbGQ6IG51bGwsXG4gICAgICAgIGhhc0Vycm9yOiB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUuaGFzRXJyb3IsXG4gICAgICAgICAgW2Zvcm1JZF06IG5ld0Vycm9yU3RhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS5oYXNCZWVuVmFsaWRhdGVkLFxuICAgICAgICAgIFtmb3JtSWRdOiBuZXdWYWxpZFN0YXRlLFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZWRGaWVsZHM6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS52YWxpZGF0ZWRGaWVsZHMsXG4gICAgICAgICAgW2Zvcm1JZF06IG5ld1JlcXVpcmVkVmFsaWRhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ0VNQUlMX1ZFUklGWV9TVUNDRVNTJzoge1xuICAgICAgLy8gQWRkZWQgc3VjY2VzcyBpbiBvcmRlciB0byBzZWUgaW4gcmVkdXggbG9nZ2VyXG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdJTklUX0ZPUk1fQVBQTElDQVRJT04nOiB7XG4gICAgICBpZiAoYWN0aW9uLmZvcm1JZCA9PT0gbnVsbCkgcmV0dXJuIHN0YXRlOyAvLyBEbyBub3RoaW5nIGlmIGZvcm1UZW1wbGF0ZSBpcyBtaXNzaW5nXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZm9ybUlkLCBpc01vZGFsLCBwYXJhbXMsIHVybCwgdXNlckluZm8sIGRpc2FibGVIaWRlRmllbGRzLFxuICAgICAgfSA9IGFjdGlvbjtcbiAgICAgIGxldCB7IGNvbmZpZ3MgfSA9IGFjdGlvbjtcbiAgICAgIGNvbmZpZ3MgPSAhY29uZmlncyA/IEZPUk1DT05GSUdTIDogSlNPTi5wYXJzZShjb25maWdzKTtcblxuICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maWdzLnJlZGlyZWN0dXJsIHx8IG51bGw7XG5cbiAgICAgIGNvbnN0IGZvcm1UZW1wbGF0ZSA9IGZvcm1hdEZvcm1UZW1wbGF0ZU5hbWUoY29uZmlncy50ZW1wbGF0ZSk7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgbGV0IGZvcm1EYXRhO1xuXG4gICAgICBpZiAoYWN0aW9uLmRhdGEpIHtcbiAgICAgICAgZm9ybURhdGEgPSBhY3Rpb24uZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1EYXRhID0gRk9STURBVEFbZm9ybVRlbXBsYXRlXTtcbiAgICAgIH1cblxuICAgICAgY29uZmlncyA9IHtcbiAgICAgICAgLi4uZm9ybURhdGEuY29uZmlncyxcbiAgICAgICAgLi4uY29uZmlncyxcbiAgICAgIH07XG5cbiAgICAgIC8vIFBhcnNlIG91dCB0aGVtZSBpbmZvcm1hdGlvblxuICAgICAgLy8gIEN1cnJlbnRseSBub3QgaW4gdXNlXG4gICAgICAvLyBjb25maWdzLnRoZW1lID0gY29uZmlncy50aGVtZSAmJiB0eXBlb2YgY29uZmlncy50aGVtZSA9PT0gJ3N0cmluZycgJiYgY29uZmlncy50aGVtZSAhPT0gbnVsbCAmJiBjb25maWdzLnRoZW1lICE9PSAnJyAmJiBpc0pzb24oY29uZmlncy50aGVtZSkgPyBKU09OLnBhcnNlKGNvbmZpZ3MudGhlbWUpIDogY29uZmlncy50aGVtZTtcblxuICAgICAgY29uc3Qge1xuICAgICAgICBmaWVsZHNBcHBlbmQsIGZpZWxkc092ZXJ3cml0ZSwgZmllbGRzUmVwbGljYXRlLCBmaWVsZHNSZW1vdmUsXG4gICAgICB9ID0gZm9ybURhdGE7XG5cbiAgICAgIGxldCB7IGZpZWxkcyB9ID0gZm9ybURhdGE7XG5cbiAgICAgIC8vIENoZWNrIGZvciBmaWVsZCByZXBsaWNhdGlvbi4gU2V0IGZpZWxkcyBpZiByZXBsaWNhdGlvbiBpcyBiZWluZyBhc2tlZCBmb3IuXG4gICAgICBpZiAoZmllbGRzUmVwbGljYXRlICYmIGZpZWxkc1JlcGxpY2F0ZSAhPT0gJycpIHtcbiAgICAgICAgZmllbGRzID0gRk9STURBVEFbZmllbGRzUmVwbGljYXRlXSAmJiBGT1JNREFUQVtmaWVsZHNSZXBsaWNhdGVdLmZpZWxkcyA/IEZPUk1EQVRBW2ZpZWxkc1JlcGxpY2F0ZV0uZmllbGRzIDogZmllbGRzO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGRzUmVtb3ZlICYmIGZpZWxkc1JlbW92ZSAhPT0gJycpIHtcbiAgICAgICAgZmllbGRzID0gcmVtb3ZlRmllbGRzRnJvbU9iamVjdEFycmF5KGZpZWxkcywgZmllbGRzUmVtb3ZlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkc092ZXJ3cml0ZSAmJiBmaWVsZHNPdmVyd3JpdGUubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWVsZHMgPSBzZXRGaWVsZE92ZXJ3cml0ZShmaWVsZHMsIGZpZWxkc092ZXJ3cml0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZHNPdmVyd3JpdGUgJiYgZmllbGRzT3ZlcndyaXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmllbGRzID0gc2V0RmllbGRPdmVyd3JpdGUoZmllbGRzLCBmaWVsZHNPdmVyd3JpdGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGRzQXBwZW5kICYmIGZpZWxkc0FwcGVuZCAhPT0gJycpIHtcbiAgICAgICAgZmllbGRzID0gZmllbGRzLmNvbmNhdChmaWVsZHNBcHBlbmQpO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXJzZSBvdXQgZXZlbnQgaW5mb3JtYXRpb25cbiAgICAgIGZpZWxkcyA9IHNldEV2ZW50cyhjb25maWdzLCBmaWVsZHMpO1xuXG4gICAgICAvLyBTZXQgbmV3IGZpZWxkIGNvbmZpZ3VyYXRpb25cbiAgICAgIGZvcm1EYXRhLmZpZWxkcyA9IGNvbmZpZ3Muc3VibWlzc2lvbkxpbWl0SWQgJiYgY29uZmlncy5zdWJtaXNzaW9uTGltaXRJZCAhPT0gJycgPyBhZGRTdWJtaXNzaW9uTGltaXREYXRhVG9DYXB0dXJlKGZpZWxkcywgY29uZmlncy5zdWJtaXNzaW9uTGltaXRJZCkgOiBmaWVsZHM7IC8vIEFkZCBzdWJtaXNzaW9uIGxpbWl0O1xuXG4gICAgICAvLyBBZGQgaGlkZGVuIHBhcnRuZXJfc291cmNlIHZhbHVlXG4gICAgICAvLyBNb3ZlIGNvbmZpZyB2YWx1ZVxuICAgICAgaWYgKGNvbmZpZ3MucGFydG5lcl9zb3VyY2UpIHtcbiAgICAgICAgY29uZmlncy5wYXJ0bmVyc291cmNlID0gY29uZmlncy5wYXJ0bmVyX3NvdXJjZTtcbiAgICAgICAgZGVsZXRlIGNvbmZpZ3MucGFydG5lcl9zb3VyY2U7XG4gICAgICB9XG4gICAgICBmb3JtRGF0YS5maWVsZHMgPSBzZXRIaWRkZW5QYXJ0bmVyU291cmNlKGNvbmZpZ3MsIGZvcm1EYXRhLmZpZWxkcyk7XG5cbiAgICAgIGxldCBhY3RpdmVGb3JtID0geyAuLi5mb3JtRGF0YSB9OyAvLyBnZXQgdGhlIGZvcm0gZGF0YSBmcm9tIGNvbnN0YW50cyBmaWxlIG9yIHNldCB0byBkZWZhdWx0XG5cbiAgICAgIGxldCByZXF1aXJlZEZpZWxkcyA9IGdldFJlcXVpcmVkRmllbGRzKGZvcm1EYXRhLmZpZWxkcyk7XG5cbiAgICAgIGlmICh1c2VySW5mbyAmJiAhZGlzYWJsZUhpZGVGaWVsZHMpIHtcbiAgICAgICAgLy8gb3ZlcnJpZGRpbmcgcmVxdWlyZWQgZmllbGRzIGJlY2F1c2Ugd2Ugb25seSBoYXZlIGxpbWl0ZWQgdmFsdWVzIGZyb20gRWxxIG9uIGxvZ2dlZCBpbiBoaWRkZW4gZm9ybXNcbiAgICAgICAgcmVxdWlyZWRGaWVsZHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIC8vIHNldCBpbiByZW5kZXIgb3Igc2V0IGhlcmUgcHJvYmFibHkgZWFzaWVyIHRvIGRvIGhlcmU/XG4gICAgICAvLyBjb3VsZCBhZGQgaGVyZSB0byB2YWxpZGF0ZWQgZmllbGRzIGFsc29cbiAgICAgIGFjdGl2ZUZvcm0udmFsdWVzID0gWy4uLmdldEhpZGRlbkZpZWxkcyhmb3JtRGF0YS5maWVsZHMpXTsgLy8gU2V0IGhpZGRlbiBmaWVsZCB2YWx1ZXNcblxuICAgICAgYWN0aXZlRm9ybS50aGFua3lvdSA9IHtcbiAgICAgICAgLi4uYWN0aXZlRm9ybS50aGFua3lvdSxcbiAgICAgICAgcmVkaXJlY3Q6IHJlZGlyZWN0VXJsLFxuICAgICAgfTtcblxuICAgICAgYWN0aXZlRm9ybS50aGVtZSA9IGFjdGl2ZUZvcm0udGhlbWUgfHwge307XG4gICAgICBhY3RpdmVGb3JtLnRoZW1lID0ge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lOiBUb0RvIC0gaWdub3JlIGNhc2UgZXJyb3JcbiAgICAgICAgLi4uYWN0aXZlRm9ybS50aGVtZSxcbiAgICAgICAgLi4uY29uZmlncy50aGVtZSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG5ld0dkcHJGaWVsZCA9IGdldEdkcHJGaWVsZChmb3JtRGF0YS5maWVsZHMpO1xuICAgICAgY29uc3QgZ2RwckZpZWxkID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZS5nZHByRmllbGQsXG4gICAgICAgIFtmb3JtSWRdOiBuZXdHZHByRmllbGRbMF0gfHwgJ3N1Ym1pdCcsIC8vIGdkcHIgbG9jYXRpb24gc2hvd3MgYWJvdmUgJ3N1Ym1pdCcgYnkgZGVmYXVsdFxuICAgICAgfTtcblxuICAgICAgYWN0aXZlRm9ybS5jb25maWdzID0geyAvLyBzZXQgdGhlIGZvcm0gY29uZmlnc1xuICAgICAgICAuLi5jb25maWdzLFxuICAgICAgfTsgLy8gU2V0IGNvbmZpZ3MgaW50byBmb3JtIGRhdGFcblxuICAgICAgLy8gVHJhbnNsYXRlIGZpZWxkIGRpc3BsYXkgdGV4dFxuICAgICAgaWYgKGFjdGl2ZUZvcm0uY29uZmlncy5sYW5ndWFnZSAmJiBhY3RpdmVGb3JtLmNvbmZpZ3MubGFuZ3VhZ2UgIT09ICdlbicpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZTogVG9EbyA9IEZpbmQgb3V0IHdoeSBmbG93IGlzIGNvbXBsYWluaW5nIGFib3V0IHRoaXNcbiAgICAgICAgYWN0aXZlRm9ybS5maWVsZHMgPSB0cmFuc2xhdGVEaXNwbGF5VGV4dChmb3JtRGF0YS5maWVsZHMsIGFjdGl2ZUZvcm0uY29uZmlncy5sYW5ndWFnZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBQT0kuIElmIG5vdCBzZXQsIGRlZmF1bHQgdG8gQXZhdGF4XG4gICAgICBpZiAoIWFjdGl2ZUZvcm0uY29uZmlncy5vc3RfcG9pIHx8IGFjdGl2ZUZvcm0uY29uZmlncy5vc3RfcG9pID09PSBudWxsKSB7XG4gICAgICAgIGFjdGl2ZUZvcm0uY29uZmlncyA9IHtcbiAgICAgICAgICAuLi5hY3RpdmVGb3JtLmNvbmZpZ3MsXG4gICAgICAgICAgb3N0X3BvaTogJ0F2YVRheCcsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmICghYWN0aXZlRm9ybS5jb25maWdzLnBvaSB8fCBhY3RpdmVGb3JtLmNvbmZpZ3MucG9pID09PSBudWxsKSB7XG4gICAgICAgIGFjdGl2ZUZvcm0uY29uZmlncyA9IHtcbiAgICAgICAgICAuLi5hY3RpdmVGb3JtLmNvbmZpZ3MsXG4gICAgICAgICAgcG9pOiAnQXZhVGF4JyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIC4gSWYgbm90IHNldCwgZGVmYXVsdCB0byBHZW5lcmFsIENvbnRhY3RcbiAgICAgIGlmICghYWN0aXZlRm9ybS5jb25maWdzLm9mZmVyIHx8IGFjdGl2ZUZvcm0uY29uZmlncy5vZmZlciA9PT0gbnVsbCkge1xuICAgICAgICBhY3RpdmVGb3JtLmNvbmZpZ3MgPSB7XG4gICAgICAgICAgLi4uYWN0aXZlRm9ybS5jb25maWdzLFxuICAgICAgICAgIG9mZmVyOiAnR2VuZXJhbCBDb250YWN0JyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyBpcyB3ZWlyZCBiZWNhdXNlIG9mIGZsb3cgdGhlIGJlbG93IGFyZSBlbGVtZW50cyBwYXNzZWQgdGhyb3VnaCBmb3IgY29uZGl0aW9uYWwgZm9ybSBhY3Rpb25zXG4gICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybUlkKSAhPT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtSWQpKSB7XG4gICAgICAgIGNvbnN0IGZvcm1FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybUlkKTtcbiAgICAgICAgaWYgKGZvcm1FbGVtZW50KSB7XG4gICAgICAgICAgY29uc3QgZGF0YUdhdGVDQiA9IGZvcm1FbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1jYWxsYmFjaycpO1xuICAgICAgICAgIC8vIGNoZWNrIGZvciBkYXRhR2F0ZUNCLCBhbmQgc2V0IHRvIGNhbGxiYWNrIGlmIHByZXNlbnRcbiAgICAgICAgICBpZiAoZGF0YUdhdGVDQikge1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZTogVG9EbyAtIEZpbmQgb3V0IHdoYXQgZmxvdyBpcyBjb21wbGFpbmluZyBhYm91dFxuICAgICAgICAgICAgYWN0aXZlRm9ybS5jb25maWdzID0ge1xuICAgICAgICAgICAgICAuLi5hY3RpdmVGb3JtLmNvbmZpZ3MsXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiBkYXRhR2F0ZUNCLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vICRGbG93Rml4TWUgLSBUb0RvIC0gZmluZCBvdXQgd2h5IGZsb3cgaGFzIGlzc3VlcyB3aXRoIHRoaXNcbiAgICAgIGFjdGl2ZUZvcm0udmFsdWVzID0gWy4uLmFjdGl2ZUZvcm0udmFsdWVzLCAuLi5nZXRIaWRkZW5GaWVsZHMoZm9ybURhdGEuZmllbGRzKV07IC8vIFNldCBoaWRkZW4gZmllbGQgdmFsdWVzXG4gICAgICBsZXQgbmV3SGFzQmVlblZhbGlkYXRlZCA9IHN0YXRlLmhhc0JlZW5WYWxpZGF0ZWRbZm9ybUlkXSB8fCBbXTtcbiAgICAgIGxldCBuZXdWYWxpZGF0ZWRGaWVsZHMgPSBzdGF0ZS52YWxpZGF0ZWRGaWVsZHNbZm9ybUlkXSB8fCBbXTtcblxuICAgICAgY29uc3QgeyBuZXdBY3RpdmVGb3JtLCBtb2RhbEhhc0JlZW5WYWxpZGF0ZWQsIG1vZGFsVmFsaWRhdGVkRmllbGRzIH0gPSBnZXRNb2RhbERhdGEobmV3SGFzQmVlblZhbGlkYXRlZCwgbmV3VmFsaWRhdGVkRmllbGRzLCBhY3RpdmVGb3JtLCBpc01vZGFsLCBmb3JtSWQsIGZpZWxkcywgc3RhdGUpO1xuICAgICAgbmV3SGFzQmVlblZhbGlkYXRlZCA9IG1vZGFsSGFzQmVlblZhbGlkYXRlZDtcbiAgICAgIG5ld1ZhbGlkYXRlZEZpZWxkcyA9IG1vZGFsVmFsaWRhdGVkRmllbGRzO1xuICAgICAgYWN0aXZlRm9ybSA9IG5ld0FjdGl2ZUZvcm07XG5cbiAgICAgIGNvbnN0IGluaXQgPSBCb29sZWFuKGFjdGl2ZUZvcm0uZmllbGRzICYmIGFjdGl2ZUZvcm0uZmllbGRzLmxlbmd0aCA+IDApO1xuICAgICAgbGV0IGluaXRTdGF0dXMgPSBudWxsO1xuXG4gICAgICBpZiAoIWluaXQpIHtcbiAgICAgICAgaW5pdFN0YXR1cyA9IHtcbiAgICAgICAgICBtZXNzYWdlOiBgRm9ybSBmaWVsZHMgbm90IGZvdW5kLiBFcnJvciB0cnlpbmcgdG8gbG9hZCAnJHtmb3JtVGVtcGxhdGV9J2AsXG4gICAgICAgICAgZm9ybVRlbXBsYXRlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsaXBpcGVyID0gc2V0Q2hpbGlwaXBlclN0YXRlKG5ld1N0YXRlLmNoaWxpcGlwZXJDb25uZWN0ZWQsIGZvcm1JZCk7XG5cbiAgICAgIGNvbnN0IHNhdmVGb3JtSWQgPSBmb3JtYXRGb3JtVGVtcGxhdGVOYW1lKGZvcm1JZCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBhY3RpdmVGb3Jtczoge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLmFjdGl2ZUZvcm1zLFxuICAgICAgICAgIFtzYXZlRm9ybUlkXTogYWN0aXZlRm9ybSxcbiAgICAgICAgfSxcbiAgICAgICAgY2FwdHVyZUZpZWxkczoge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLmNhcHR1cmVGaWVsZHMsXG4gICAgICAgICAgW3NhdmVGb3JtSWRdOiBhY3RpdmVGb3JtLnZhbHVlcyxcbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGlwaXBlckNvbm5lY3RlZDogY2hpbGlwaXBlcixcbiAgICAgICAgZmllbGRzOiBhY3RpdmVGb3JtLnZhbHVlcyxcbiAgICAgICAgZ2RwckZpZWxkLFxuICAgICAgICBoYXNCZWVuVmFsaWRhdGVkOiB7XG4gICAgICAgICAgLi4uc3RhdGUuaGFzQmVlblZhbGlkYXRlZCxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3SGFzQmVlblZhbGlkYXRlZCxcbiAgICAgICAgfSxcbiAgICAgICAgaGFzRXJyb3I6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS5oYXNFcnJvcixcbiAgICAgICAgICBbc2F2ZUZvcm1JZF06IFtdLFxuICAgICAgICB9LFxuICAgICAgICBpbml0OiB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUuaW5pdCxcbiAgICAgICAgICBbc2F2ZUZvcm1JZF06IGluaXQsXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRTdGF0dXM6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS5pbml0U3RhdHVzLFxuICAgICAgICAgIFtzYXZlRm9ybUlkXTogaW5pdFN0YXR1cyxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB1cmwsXG4gICAgICAgIHJlcXVpcmVkRmllbGRzOiB7IC8vIHNldCByZXF1aXJlZCBmaWVsZHMgdG8gYmUgY2hlY2tlZFxuICAgICAgICAgIC4uLm5ld1N0YXRlLnJlcXVpcmVkRmllbGRzLFxuICAgICAgICAgIFtmb3JtSWRdOiByZXF1aXJlZEZpZWxkcyxcbiAgICAgICAgfSxcbiAgICAgICAgc2hvd01vZGFsOiB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUuc2hvd01vZGFsLFxuICAgICAgICAgIFtzYXZlRm9ybUlkXTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRlZEZpZWxkczoge1xuICAgICAgICAgIC4uLnN0YXRlLnZhbGlkYXRlZEZpZWxkcyxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3VmFsaWRhdGVkRmllbGRzLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnSU5JVF9GT1JNX0FQUExJQ0FUSU9OX0ZBSUxFRCc6IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgaW5pdDoge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLmluaXQsXG4gICAgICAgICAgW2FjdGlvbi5mb3JtSWRdOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ1JFU0VUX0ZPUk0nOiB7XG4gICAgICBjb25zdCB7IGZvcm1JZCB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLnN0YXRlIH07XG4gICAgICBuZXdTdGF0ZS5jYXB0dXJlRmllbGRzW2Zvcm1JZF0gPSBbXTtcbiAgICAgIG5ld1N0YXRlLmhhc0JlZW5WYWxpZGF0ZWRbZm9ybUlkXSA9IFtdO1xuICAgICAgbmV3U3RhdGUuc2V0RmllbGRzW2Zvcm1JZF0gPSBbXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnUkVNT1ZFX0FCQU5ET04nOiB7XG4gICAgICBjb25zdCB7IGZvcm1JZCB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICAgICAgbGV0IGFiYW5kb24gPSBuZXdTdGF0ZS5hYmFuZG9uZWRGb3JtcztcbiAgICAgIGFiYW5kb24gPSBhYmFuZG9uLmZpbHRlcigoZikgPT4gZiAhPT0gZm9ybUlkKTsgLy8gUmVtb3ZlIGZyb20gYXJyYXkuIFRyaWdnZXJlZCBhZnRlciBzdWNjZXNzZnVsIHN1Ym1pdFxuXG4gICAgICAvLyBSZWdpc3RlciB0byB0aGUgd2luZG93IGZvciBjYXB0dXJlL3VzZXIgZHVyaW5nIHRyYWNraW5nLlxuICAgICAgd2luZG93LmF2YS5hYmFuZG9uZWRGb3JtcyA9IGFiYW5kb247XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBhYmFuZG9uZWRGb3JtczogYWJhbmRvbixcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ1NFVF9BQ1RJVkVfRklFTEQnOiB7XG4gICAgICBjb25zdCB7IGZvcm1JZCwgaWQgfSA9IGFjdGlvbjtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBhY3RpdmVGaWVsZHM6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS5hY3RpdmVGaWVsZHMsXG4gICAgICAgICAgW2Zvcm1JZF06IGlkLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnU0VUX0FDVElWRV9GT1JNJzoge1xuICAgICAgaWYgKCFzdGF0ZS5hY3RpdmVGb3Jtc1thY3Rpb24uZm9ybUlkXSkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3QgeyBmb3JtSWQgfSA9IGFjdGlvbjtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgICAgIGNvbnN0IGNvbmZpZ3MgPSBuZXdTdGF0ZS5hY3RpdmVGb3Jtc1tmb3JtSWRdLmNvbmZpZ3M7XG4gICAgICBpZiAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLmluY2x1ZGVzKCcvdXMvZW4vZ2V0LXN0YXJ0ZWQuaHRtbCcpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgICAgICBjb25zdCBwb2kgPSBhZG9iZURhdGFMYXllclswXT8ucGFnZT8uc3RhdGU/LnByZXZpb3VzX3BhZ2VfcG9pO1xuICAgICAgICBjb25maWdzLnBvaSA9IHBvaSB8fCBjb25maWdzLnBvaTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGFjdGl2ZUZvcm06IGZvcm1JZCxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ1NFVF9FTE9RVUFfTE9PS1VQX1ZBTElEJzoge1xuICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubG9jYXRpb24pIHtcbiAgICAgICAgY29uc3QgYmFzZUhyZWYgPSAnaHR0cDovL2xvY2FsaG9zdCc7XG4gICAgICAgIGNvbnN0IHsgaHJlZiB9ID0gd2luZG93LmxvY2F0aW9uIHx8IHsgaHJlZjogYmFzZUhyZWYgfTtcbiAgICAgICAgaWYgKGhyZWYgIT09IGJhc2VIcmVmICYmICgvZ2V0LXN0YXJ0ZWQuaHRtbC9naSkudGVzdChocmVmKSkgdHJpZ2dlckF1dG9GaWxsVHJhY2tpbmcoYWN0aW9uLmZvcm1JZCk7IC8vIFRyaWdnZXIgYW5hbHl0aWNzIHRyYWNraW5nIGFyb3VuZCBhdXRvZmlsbCBjb21wbGV0ZVxuICAgICAgfVxuICAgICAgdHJ5IHsgLy8gTWFrZSBzdXJlIHVzZXIgaXMgbm90IGxvZ2dlZCBpblxuICAgICAgICBpZiAod2luZG93LmF2YS51c2VySW5mby5pc0xvZ2dlZEluID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gRG8gbm90aGluZyBvbiBlcnJvclxuICAgICAgfVxuXG4gICAgICBjb25zdCBhbGxvd2VkRmllbGQgPSBbJ2NvbXBhbnknLCAnZW1haWwnLCAnY291bnRyeScsICdjb3VudHJ5X29mX2VzdGFibGlzaG1lbnQnLCAnZmlyc3ROYW1lJywgJ2Z1bGxuYW1lJywgJ2xhc3ROYW1lJywgJ3Bob25lJ107XG4gICAgICBjb25zdCBleGNsdWRlRm9ybXMgPSBbJ3BhcnRuZXInLCAncGFydG5lcmFjcCcsICdwYXJ0bmVyYmhhcmF0JywgJ3BhcnRuZXJkZW1vJywgJ3BhcnRuZXJkc3AnLCAncGFydG5lcm1zcCcsICdwYXJ0bmVycmVmZXJyYWwnLCAncGFydG5lcnJlZmVycmFsc2ltcGxlJywgJ3BhcnRuZXJyZWZlcnJhbGFjdGl2ZScsICdwYXJ0bmVycmVmZXJyYWxlbWVyZ2luZycsICdwYXJ0bmVycmVmZXJyYWxlc3RhYmxpc2hlZCcsICdwYXJ0bmVycmVmZXJyYWxsYXVuY2gnXTtcbiAgICAgIGNvbnN0IHsgZm9ybUlkIH0gPSBhY3Rpb247XG4gICAgICBjb25zdCB7IHZhbHVlcyB9ID0gYWN0aW9uIHx8IHsgdmFsdWVzOiB7fSB9O1xuXG4gICAgICAvLyBEb24ndCBwcm9jZXNzIGRhdGEgaWYgZm9ybSBpcyBub3QgYWxsb3dlZFxuICAgICAgaWYgKChmb3JtSWQgJiYgZm9ybUlkLmluZGV4T2YoJ3BhcnRuZXInKSA+IDApIHx8IGV4Y2x1ZGVGb3Jtcy5pbmNsdWRlcyhmb3JtSWQudG9Mb3dlckNhc2UoKSkpIHJldHVybiBzdGF0ZTtcblxuICAgICAgaWYgKHZhbHVlcyAmJiBPYmplY3Qua2V5cyh2YWx1ZXMpLmxlbmd0aCA8IDEpIHJldHVybiBzdGF0ZTsgLy8gU3RvcCBwcm9jZXNzaW5nIGlmIGRhdGEgaXNuJ3QgYXZhaWxhYmxlXG5cbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGU7XG4gICAgICBjb25zdCB7IGNhcHR1cmVGaWVsZHMsIGFjdGl2ZUZvcm1zLCBhdXRvRmlsbERhdGEgfSA9IG5ld1N0YXRlO1xuICAgICAgY29uc3QgY2FwdHVyZWRWYWx1ZXMgPSBbXTtcbiAgICAgIGNvbnN0IGZpZWxkc0FycmF5ID0gZ2V0RmllbGRJZHMoYWN0aXZlRm9ybXNbZm9ybUlkXS5maWVsZHMpO1xuXG4gICAgICAvLyB0aGlzIGNvZGUgaXMgdG8gZW5zdXJlIHRoYXQgJ2NvdW50cnknIGlzIGFsd2F5cyBhZGRlZCBhcyBjYXB0dXJlZCBmaWVsZHNcbiAgICAgIGlmICghZmllbGRzQXJyYXkuaW5jbHVkZXMoJ2NvdW50cnknKSkgZmllbGRzQXJyYXkucHVzaCgnY291bnRyeScpO1xuXG4gICAgICBpZiAoYXV0b0ZpbGxEYXRhLmZvcm1zLmluY2x1ZGVzKGZvcm1JZCkpIHJldHVybiBzdGF0ZTsgLy8gU3RvcCBwcm9jZXNzaW5nIGlmIGRhdGEgaXMgYWxyZWFkeSBzZXRcbiAgICAgIGF1dG9GaWxsRGF0YS5mb3Jtcy5wdXNoKGZvcm1JZCk7XG5cbiAgICAgIC8vIENoZWNrIGlmIGZpZWxkIGlzIGNhcHR1cmVkLlxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYXB0dXJlRmllbGRzW2Zvcm1JZF0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gUHVzaCB0aGUgaWQgb2YgdGhlIGNhcHR1cmUgZmllbGQgc28gaXQgaXNuJ3Qgb3ZlcndyaXR0ZW4gd2l0aCBwYXlsb2FkIGluZm9ybWF0aW9uXG4gICAgICAgIGlmIChjYXB0dXJlRmllbGRzW2Zvcm1JZF1baV0gJiYgY2FwdHVyZUZpZWxkc1tmb3JtSWRdW2ldLmlkKSBjYXB0dXJlZFZhbHVlcy5wdXNoKGNhcHR1cmVGaWVsZHNbZm9ybUlkXVtpXS5pZCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaGFzQmVlblZhbGlkYXRlZCwgcmVxdWlyZWRGaWVsZHMsIHNldEZpZWxkcywgdmFsaWRhdGVkRmllbGRzLFxuICAgICAgfSA9IG5ld1N0YXRlO1xuICAgICAgY29uc3QgbmV3SGFzQmVlblZhbGlkYXRlZCA9IGhhc0JlZW5WYWxpZGF0ZWRbZm9ybUlkXSB8fCBbXTsgLy8gQ2FwdHVyZSB3aGF0IGFscmVhZHkgaGFzIGJlZW4gdmFsaWRhdGVkXG4gICAgICBjb25zdCBuZXdTZXRGaWVsZHMgPSBzZXRGaWVsZHNbZm9ybUlkXSB8fCBbXTsgLy8gQ2FwdHVyZSB3aGF0IGFscmVhZHkgaGFzIGJlZW4gc2V0XG4gICAgICBjb25zdCBuZXdWYWxpZGF0ZWRGaWVsZHMgPSB2YWxpZGF0ZWRGaWVsZHNbZm9ybUlkXSB8fCBbXTsgLy8gQ2FwdHVyZSB3aGF0IGFscmVhZHkgaGFzIGJlZW4gdmFsaWRhdGVkXG5cbiAgICAgIHdpbmRvdy5hdmEuYXV0b0ZpbGxEYXRhID0gYXV0b0ZpbGxEYXRhO1xuXG4gICAgICBsZXQgbmV3VmFsdWVzID0gY2FwdHVyZUZpZWxkc1tmb3JtSWRdICYmIGNhcHR1cmVGaWVsZHNbZm9ybUlkXS5sZW5ndGggPiAwID8gY2FwdHVyZUZpZWxkc1tmb3JtSWRdIDogW107XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWVzKTtcbiAgICAgIGNvbnN0IHRlc3RGb3JtTmFtZSA9IGZvcm1JZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGtleSA9IGtleXNbaV07XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgY2FzZSAnYWNjb3VudG5hbWUnOlxuICAgICAgICAgICAga2V5ID0gJ2NvbXBhbnknO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZmlyc3RuYW1lJzpcbiAgICAgICAgICAgIGtleSA9ICdmaXJzdE5hbWUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbGFzdG5hbWUnOlxuICAgICAgICAgICAga2V5ID0gJ2xhc3ROYW1lJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2VtYWlsSWQnOlxuICAgICAgICAgICAga2V5ID0gJ2VtYWlsJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Bob25lbnVtYmVyJzpcbiAgICAgICAgICAgIGtleSA9ICdwaG9uZSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNhcHR1cmVkVmFsdWVzLmluY2x1ZGVzKGtleSkgJiYgYWxsb3dlZEZpZWxkLmluY2x1ZGVzKGtleSkgJiYgdmFsdWVzW2tleXNbaV1dICE9PSAnJyAmJiB2YWx1ZXNba2V5c1tpXV0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIFZhbGlkYXRlIHBob25lXG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3Bob25lJyAmJiB2YWx1ZXNba2V5c1tpXV0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNba2V5c1tpXV0ucmVwbGFjZSgvXFxEL2dpLCAnJyk7XG4gICAgICAgICAgICAvLyB3ZSBjYW4gYXNzdW1lIGEgdmFsaWQgcGhvbmUgbnVtYmVyIGhhcyBtb3JlIHRoYW4gNCBkaWdpdHMgaW4gdG90YWxcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiA0IHx8IHZhbHVlLmxlbmd0aCA8IDE4KSB7XG4gICAgICAgICAgICAgIG5ld1ZhbHVlcy5wdXNoKHsgaWQ6IGtleSwgdmFsdWU6IHZhbHVlc1trZXlzW2ldXSB9KTtcbiAgICAgICAgICAgICAgbmV3U2V0RmllbGRzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkRmllbGRzW2Zvcm1JZF0uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIG5ld0hhc0JlZW5WYWxpZGF0ZWQucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIG5ld1ZhbGlkYXRlZEZpZWxkcy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3VmFsdWVzLnB1c2goeyBpZDoga2V5LCB2YWx1ZTogdmFsdWVzW2tleXNbaV1dIH0pO1xuICAgICAgICAgICAgbmV3U2V0RmllbGRzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZEZpZWxkc1tmb3JtSWRdLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgbmV3SGFzQmVlblZhbGlkYXRlZC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgIG5ld1ZhbGlkYXRlZEZpZWxkcy5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9ICdmdWxsbmFtZSc7XG4gICAgICBjb25zdCBmaXJzdE5hbWUgPSB2YWx1ZXMuZmlyc3RuYW1lIHx8ICcnO1xuICAgICAgY29uc3QgbGFzdE5hbWUgPSB2YWx1ZXMubGFzdG5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBmdWxsTmFtZSA9IChgJHtmaXJzdE5hbWV9ICR7bGFzdE5hbWV9YCkudHJpbSgpO1xuICAgICAgaWYgKCFjYXB0dXJlZFZhbHVlcy5pbmNsdWRlcyhrZXkpICYmIGFsbG93ZWRGaWVsZC5pbmNsdWRlcyhrZXkpICYmIGZ1bGxOYW1lICE9PSAnJyAmJiAhZXhjbHVkZUZvcm1zLmluY2x1ZGVzKHRlc3RGb3JtTmFtZSkgJiYgdGVzdEZvcm1OYW1lLmluZGV4T2YoJ3BhcnRuZXInKSA9PT0gLTEpIHtcbiAgICAgICAgbmV3VmFsdWVzLnB1c2goeyBpZDoga2V5LCB2YWx1ZTogZnVsbE5hbWUgfSk7XG4gICAgICAgIG5ld1NldEZpZWxkcy5wdXNoKGtleSk7XG4gICAgICAgIGlmIChyZXF1aXJlZEZpZWxkc1tmb3JtSWRdLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBuZXdIYXNCZWVuVmFsaWRhdGVkLnB1c2goa2V5KTtcbiAgICAgICAgICBuZXdWYWxpZGF0ZWRGaWVsZHMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFuIG91dCBlbXB0eSB2YWx1ZXNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhcnJheS1jYWxsYmFjay1yZXR1cm5cbiAgICAgIE9iamVjdC5rZXlzKHZhbHVlcykubWFwKChrOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlc1trXSA9PT0gJycpIGRlbGV0ZSB2YWx1ZXNba107XG4gICAgICB9KTtcblxuICAgICAgd2luZG93LmF2YS5lbG9xdWFEYXRhID0gd2luZG93LmF2YS5lbG9xdWFEYXRhIHx8IHt9O1xuXG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHRpbWVTdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuXG4gICAgICB3aW5kb3cuYXZhLmVsb3F1YURhdGEgPSB7XG4gICAgICAgIG9rOiB0cnVlLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgZmllbGRWYWx1ZXM6IG5ld1ZhbHVlcyxcbiAgICAgICAgdGltZVN0YW1wLFxuICAgICAgICB2YWx1ZXMsXG4gICAgICB9O1xuXG4gICAgICB0cnkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXZsckVsb3F1YURhdGEnLCBKU09OLnN0cmluZ2lmeSh3aW5kb3cuYXZhLmVsb3F1YURhdGEpKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICB9XG5cbiAgICAgIG5ld1ZhbHVlcyA9IG5ld1ZhbHVlcy5tYXAoKHYpID0+IHtcbiAgICAgICAgaWYgKGZpZWxkc0FycmF5LmluY2x1ZGVzKHYuaWQpKSByZXR1cm4gdjtcbiAgICAgICAgcmV0dXJuIHsgaWQ6ICcnLCB2YWx1ZTogJycgfTtcbiAgICAgIH0pO1xuICAgICAgbmV3VmFsdWVzID0gbmV3VmFsdWVzLmZpbHRlcigoZikgPT4gZi5pZCAhPT0gJycpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgYXV0b0ZpbGxEYXRhOiB7XG4gICAgICAgICAgLi4uYXV0b0ZpbGxEYXRhLFxuICAgICAgICAgIG9rOiB0cnVlLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIGZpZWxkVmFsdWVzOiBuZXdWYWx1ZXMsXG4gICAgICAgICAgdmFsdWVzLFxuICAgICAgICB9LFxuICAgICAgICBjYXB0dXJlRmllbGRzOiB7XG4gICAgICAgICAgLi4uY2FwdHVyZUZpZWxkcyxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3VmFsdWVzLFxuICAgICAgICB9LFxuICAgICAgICBoYXNCZWVuVmFsaWRhdGVkOiB7XG4gICAgICAgICAgLi4uaGFzQmVlblZhbGlkYXRlZCxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3SGFzQmVlblZhbGlkYXRlZCxcbiAgICAgICAgfSxcbiAgICAgICAgdmFsaWRhdGVkRmllbGRzOiB7XG4gICAgICAgICAgLi4udmFsaWRhdGVkRmllbGRzLFxuICAgICAgICAgIFtmb3JtSWRdOiBuZXdWYWxpZGF0ZWRGaWVsZHMsXG4gICAgICAgIH0sXG4gICAgICAgIHNldEZpZWxkczoge1xuICAgICAgICAgIC4uLnNldEZpZWxkcyxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3U2V0RmllbGRzLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnU0VUX0VMT1FVQV9MT09LVVBfSU5WQUxJRCc6IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZSB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgICAgIGxldCBmaWVsZFZhbHVlcyA9IG51bGw7XG4gICAgICBsZXQgdmFsdWVzID0gbnVsbDtcbiAgICAgIGxldCB7IGF1dG9GaWxsRGF0YSB9ID0gbmV3U3RhdGU7XG4gICAgICBsZXQgc3RvcmVkRGF0YSA9ICd7IG9rOiBmYWxzZSwgZXJyb3I6IG51bGwsIGZpZWxkVmFsdWVzOiBudWxsLCB2YWx1ZXM6IG51bGwgfSc7XG4gICAgICBsZXQgb2sgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0b3JlZERhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXZsckVsb3F1YURhdGEnKSB8fCBzdG9yZWREYXRhO1xuICAgICAgICBzdG9yZWREYXRhID0gSlNPTi5wYXJzZShzdG9yZWREYXRhKTtcbiAgICAgICAgZmllbGRWYWx1ZXMgPSBzdG9yZWREYXRhLmZpZWxkVmFsdWVzIHx8IGZpZWxkVmFsdWVzO1xuICAgICAgICB2YWx1ZXMgPSBzdG9yZWREYXRhLnZhbHVlcyB8fCB2YWx1ZXM7XG4gICAgICAgIGlmICh2YWx1ZXMgJiYgT2JqZWN0LmtleXModmFsdWVzKS5sZW5ndGggPiAxKSBvayA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCB0aW1lU3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcblxuICAgICAgYXV0b0ZpbGxEYXRhID0ge1xuICAgICAgICAuLi5hdXRvRmlsbERhdGEsXG4gICAgICAgIG9rLFxuICAgICAgICBlcnJvcjogeyBtZXNzYWdlIH0sXG4gICAgICAgIGZpZWxkVmFsdWVzLFxuICAgICAgICB0aW1lU3RhbXAsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5hdmEuZWxvcXVhRGF0YSA9IGF1dG9GaWxsRGF0YTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2F2bHJFbG9xdWFEYXRhJywgSlNPTi5zdHJpbmdpZnkoYXV0b0ZpbGxEYXRhKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuYXZhLmF1dG9GaWxsRGF0YSA9IGF1dG9GaWxsRGF0YTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGF1dG9GaWxsRGF0YSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ1NFVF9MQVNUX0ZJRUxEX1ZBTElEQVRJT04nOiB7XG4gICAgICBjb25zdCB7IGZvcm1JZCwgZmllbGRzIH0gPSBhY3Rpb247XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgY29uc3QgbmV3TGFzdEZpZWxkID0gbmV3U3RhdGUubGFzdEZpZWxkO1xuICAgICAgY29uc3QgaXNMYXN0RmllbGQgPSBnZXRMYXN0RmllbGRJZChmaWVsZHMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGxhc3RGaWVsZDoge1xuICAgICAgICAgIC4uLm5ld0xhc3RGaWVsZCxcbiAgICAgICAgICBbZm9ybUlkXTogaXNMYXN0RmllbGQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdTRVRfSU5QVVRfQ0FQVFVSRV9JTlZBTElEJzoge1xuICAgICAgY29uc3QgeyBmb3JtSWQsIGlkIH0gPSBhY3Rpb247XG4gICAgICBsZXQgeyBtZXNzYWdlIH0gPSBhY3Rpb247XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgbGV0IG5ld0Vycm9yU3RhdGUgPSBzdGF0ZS5oYXNFcnJvcltmb3JtSWRdO1xuICAgICAgbGV0IG5ld1ZhbGlkU3RhdGUgPSBzdGF0ZS5oYXNCZWVuVmFsaWRhdGVkW2Zvcm1JZF07XG4gICAgICBjb25zdCB7IGNvbmZpZ3MgfSA9IG5ld1N0YXRlLmFjdGl2ZUZvcm1zW2Zvcm1JZF07XG4gICAgICBjb25zdCBpc0xhbmd1YWdlID0gY29uZmlncyAmJiBjb25maWdzLmxhbmd1YWdlID8gY29uZmlncy5sYW5ndWFnZSA6ICdlbic7XG4gICAgICBtZXNzYWdlID0gZ2V0TG9jYWxlU3RyaW5nVGV4dChtZXNzYWdlLCAnZXJyb3InLCBpc0xhbmd1YWdlKTsgLy8gVHJhbnNsYXRlIG1lc3NhZ2UgaWYgYXBwbGljYWJsZVxuICAgICAgY29uc3QgbmV3UmVxdWlyZWRWYWxpZGF0aW9uID0gZmlsdGVyT3V0QXJyYXlCeUlkKHN0YXRlLnZhbGlkYXRlZEZpZWxkc1tmb3JtSWRdLCBpZCk7IC8vIEZpbHRlciBvdXQgZmllbGQgaWYgZXhpc3RzLiBQcm90ZWN0IGFnYWluc3QgZHVwbGljYXRpb25cbiAgICAgIG5ld0Vycm9yU3RhdGUgPSBuZXdFcnJvclN0YXRlLmZpbHRlcigoaCkgPT4gaC5pZCAmJiBoLmlkICE9PSBpZCk7IC8vIEZpbHRlciBvdXQgZmllbGQgaWYgZXhpc3RzLiBQcm90ZWN0IGFnYWluc3QgZHVwbGljYXRpb25cbiAgICAgIG5ld0Vycm9yU3RhdGUucHVzaCh7IGlkLCBtZXNzYWdlIH0pOyAvLyBBZGQgdG8gZXJyb3Igc3RhdGUgd2l0aCBtZXNzYWdlIGZvciBkaXNwbGF5XG4gICAgICBuZXdWYWxpZFN0YXRlID0gZmlsdGVyT3V0QXJyYXlCeUlkKG5ld1ZhbGlkU3RhdGUsIGlkKTsgLy8gRmlsdGVyIG91dCBpZCBmcm9tIGhhc0JlZW5WYWxpZGF0ZWRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHNhdmVkRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhdmxyRWxvcXVhRGF0YScpIHx8ICd7fSc7XG4gICAgICAgIGlmICh0eXBlb2Ygc2F2ZWREYXRhID09PSAnc3RyaW5nJykgc2F2ZWREYXRhID0gSlNPTi5wYXJzZShzYXZlZERhdGEpO1xuXG4gICAgICAgIGlmIChpZCAhPT0gJ2dkcHJfZWxpZ2libGUnICYmIHNhdmVkRGF0YSAmJiBzYXZlZERhdGEudmFsdWVzICYmIHNhdmVkRGF0YS5vaykgcmVtb3ZlRnJvbUVsb3F1YURhdGEoaWQpOyAvLyBPbmx5IHRyaWdnZXIgYXV0byBzYXZlIGlmIHZhbHVlcyBpcyBzZXRcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgYWN0aXZlRmllbGQ6IG51bGwsXG4gICAgICAgIGhhc0Vycm9yOiB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUuaGFzRXJyb3IsXG4gICAgICAgICAgW2Zvcm1JZF06IG5ld0Vycm9yU3RhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS5oYXNCZWVuVmFsaWRhdGVkLFxuICAgICAgICAgIFtmb3JtSWRdOiBuZXdWYWxpZFN0YXRlLFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZWRGaWVsZHM6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS52YWxpZGF0ZWRGaWVsZHMsXG4gICAgICAgICAgW2Zvcm1JZF06IG5ld1JlcXVpcmVkVmFsaWRhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ1NFVF9JTlBVVF9DQVBUVVJFX1ZBTElEJzoge1xuICAgICAgY29uc3QgeyBmb3JtSWQsIGlkIH0gPSBhY3Rpb247XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgY29uc3QgbmV3VmFsaWRTdGF0ZSA9IHN0YXRlLmhhc0JlZW5WYWxpZGF0ZWRbZm9ybUlkXTtcbiAgICAgIGNvbnN0IG5ld1JlcXVpcmVkVmFsaWRhdGlvbiA9IHN0YXRlLnZhbGlkYXRlZEZpZWxkc1tmb3JtSWRdLmZpbHRlcigoZikgPT4gZiAhPT0gaWQpOy8vIEZpbHRlciBvdXQgZmllbGQgaWYgZXhpc3RzLiBQcm90ZWN0IGFnYWluc3QgZHVwbGljYXRpb25cbiAgICAgIG5ld1JlcXVpcmVkVmFsaWRhdGlvbi5wdXNoKGlkKTsgLy8gUHV0IGlkIGludG8gcmVxdWlyZWQgdmFsaWRhdGVkIHN0YXRlXG4gICAgICBuZXdWYWxpZFN0YXRlLnB1c2goaWQpOyAvLyBQdXQgaWQgYmFjayBpbnRvIGdlbmVyYWwgdmFsaWRhdGlvbiBzdGF0ZVxuICAgICAgY29uc3QgbmV3SGFzRXJyb3IgPSBuZXdTdGF0ZS5oYXNFcnJvcltmb3JtSWRdLmZpbHRlcigoZikgPT4gZi5pZCAhPT0gaWQpOyAvLyBEb3VibGUgY2hlY2sgdG8gcmVtb3ZlIGZyb20gaGFzRXJyb3JcblxuICAgICAgLy8gVXBkYXRlIGVsb3F1YURhdGEgb2JqZWN0XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBnZXRWYWx1ZSA9IG5ld1N0YXRlLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSA/IG5ld1N0YXRlLmNhcHR1cmVGaWVsZHNbZm9ybUlkXS5maWx0ZXIoKGYpID0+IGYuaWQgPT09IGlkKVswXSA6IHsgdmFsdWU6ICcnIH07XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGdldFZhbHVlO1xuICAgICAgICBsZXQgc2F2ZWREYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2F2bHJFbG9xdWFEYXRhJykgfHwgJ3t9JztcbiAgICAgICAgaWYgKHR5cGVvZiBzYXZlZERhdGEgPT09ICdzdHJpbmcnKSBzYXZlZERhdGEgPSBKU09OLnBhcnNlKHNhdmVkRGF0YSk7XG5cbiAgICAgICAgaWYgKGlkICE9PSAnZ2Rwcl9lbGlnaWJsZScgJiYgc2F2ZWREYXRhICYmIHNhdmVkRGF0YS52YWx1ZXMgJiYgc2F2ZWREYXRhLm9rKSBzYXZlVG9FbG9xdWFEYXRhKGlkLCB2YWx1ZSk7IC8vIE9ubHkgdHJpZ2dlciBhdXRvIHNhdmUgaWYgdmFsdWVzIGlzIHNldFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgIH1cblxuICAgICAgLy8gU2F2ZSB0byBsb2NhbFN0b3JhZ2UgZm9yIGxhdGVyIGNhcHR1cmVcbiAgICAgIGNvbnN0IGF1dG9TYXZlID0gYXV0b1NhdmVEYXRhKHN0YXRlLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSwgZm9ybUlkKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGFjdGl2ZUZpZWxkOiBudWxsLFxuICAgICAgICBoYXNFcnJvcjoge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLmhhc0Vycm9yLFxuICAgICAgICAgIFtmb3JtSWRdOiBuZXdIYXNFcnJvcixcbiAgICAgICAgfSxcbiAgICAgICAgaGFzQmVlblZhbGlkYXRlZDoge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLmhhc0JlZW5WYWxpZGF0ZWQsXG4gICAgICAgICAgW2Zvcm1JZF06IG5ld1ZhbGlkU3RhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIHJlQ2FwdHVyZUZpZWxkczogYXV0b1NhdmUsXG4gICAgICAgIHZhbGlkYXRlZEZpZWxkczoge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLnZhbGlkYXRlZEZpZWxkcyxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3UmVxdWlyZWRWYWxpZGF0aW9uLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnU0VUX1NVQk1JU1NJT05fTElNSVRfRVhDRUVERUQnOiB7XG4gICAgICBjb25zdCB7IGZvcm1JZCB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHsgc3VibWlzc2lvbmxpbWl0IH0gPSBuZXdTdGF0ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzdWJtaXNzaW9ubGltaXQ6IHtcbiAgICAgICAgICAuLi5zdWJtaXNzaW9ubGltaXQsXG4gICAgICAgICAgW2Zvcm1JZF06IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdUT0dHTEVfRk9STV9NT0RBTCc6IHtcbiAgICAgIGNvbnN0IHsgZm9ybUlkIH0gPSBhY3Rpb247XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzaG93TW9kYWw6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS5zaG93TW9kYWwsXG4gICAgICAgICAgW2Zvcm1JZF06ICFuZXdTdGF0ZS5zaG93TW9kYWxbZm9ybUlkXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ1RSQUNLX01PREFMX0ZPUk0nOiB7XG4gICAgICBjb25zdCB7IGZvcm1JZCB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgICAgIGNvbnN0IG5ld01vZGFsRm9ybXMgPSBuZXdTdGF0ZS5tb2RhbEZvcm1zO1xuICAgICAgbmV3TW9kYWxGb3Jtcy5wdXNoKGZvcm1JZCk7XG4gICAgICB3aW5kb3cuYXZhLm1vZGFscyA9IG5ld01vZGFsRm9ybXM7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBtb2RhbEZvcm1zOiBuZXdNb2RhbEZvcm1zLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnVFJBQ0tfRk9STV9BQkFORE9OX1NUQVRVUyc6IHtcbiAgICAgIGNvbnN0IHsgZm9ybUlkLCBmaWVsZElkIH0gPSBhY3Rpb247XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgY29uc3QgbmV3QWJhbmRvbkZvcm1zID0gbmV3U3RhdGUuYWJhbmRvbmVkRm9ybXM7XG4gICAgICAvLyBEb24ndCB0cmFjayBmb3JtIGxvYWQgZ2Rwcl9lbGlnaWJsZSBmb3IgdGhpcyBoaXRzIG9uIGluaXQgZm9ybSBhcHBsaWNhdGlvbiBhbmQgc2hvdWxkbid0IHJlZ2lzdGVyIGFzIHVzZXIgc3RhcnRpbmcgdG8gZmlsbCBvdXQgZm9ybS5cbiAgICAgIC8vIEFueSBvdGhlciBmaWVsZCBjb3VudHMgdG93YXJkIGFiYW5kb24gdHJhY2tpbmcuXG4gICAgICBpZiAoZmllbGRJZCAhPT0gJ2dkcHJfZWxpZ2libGUnICYmICFuZXdBYmFuZG9uRm9ybXMuaW5jbHVkZXMoZm9ybUlkKSkge1xuICAgICAgICBuZXdBYmFuZG9uRm9ybXMucHVzaChmb3JtSWQpO1xuICAgICAgfVxuICAgICAgd2luZG93LmF2YS5hYmFuZG9uZWRGb3JtcyA9IG5ld0FiYW5kb25Gb3JtcztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFiYW5kb25lZEZvcm1zOiBuZXdBYmFuZG9uRm9ybXMsXG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnVVBEQVRFX0RZTkFNSUNfUkVRVUlSRURfRklFTEQnOiB7XG4gICAgICBjb25zdCB7IGZvcm1JZCwgYWRkLCByZW1vdmUgfSA9IGFjdGlvbjtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNhcHR1cmVGaWVsZHMsIHJlcXVpcmVkRmllbGRzLCBoYXNCZWVuVmFsaWRhdGVkLCB2YWxpZGF0ZWRGaWVsZHMsXG4gICAgICB9ID0gbmV3U3RhdGU7XG4gICAgICBsZXQgbmV3UmVxdWlyZWRGaWVsZHMgPSByZXF1aXJlZEZpZWxkc1tmb3JtSWRdO1xuICAgICAgbGV0IG5ld0hhc0JlZW5WYWxpZGF0ZWQgPSBoYXNCZWVuVmFsaWRhdGVkW2Zvcm1JZF07XG4gICAgICBsZXQgbmV3VmFsaWRhdGVkRmllbGRzID0gdmFsaWRhdGVkRmllbGRzW2Zvcm1JZF07XG4gICAgICBsZXQgbmV3Q2FwdHVyZUZpZWxkcyA9IGNhcHR1cmVGaWVsZHNbZm9ybUlkXTtcblxuICAgICAgLy8gUmVtb3ZlIGl0ZW1zIGZpcnN0XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbW92ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBuZXdSZXF1aXJlZEZpZWxkcyA9IG5ld1JlcXVpcmVkRmllbGRzLmZpbHRlcigoZikgPT4gZiAhPT0gcmVtb3ZlW2ldKTtcbiAgICAgICAgbmV3SGFzQmVlblZhbGlkYXRlZCA9IG5ld0hhc0JlZW5WYWxpZGF0ZWQuZmlsdGVyKChmKSA9PiBmICE9PSByZW1vdmVbaV0pO1xuICAgICAgICBuZXdWYWxpZGF0ZWRGaWVsZHMgPSBuZXdWYWxpZGF0ZWRGaWVsZHMuZmlsdGVyKChmKSA9PiBmICE9PSByZW1vdmVbaV0pO1xuICAgICAgICBuZXdDYXB0dXJlRmllbGRzID0gbmV3Q2FwdHVyZUZpZWxkcy5maWx0ZXIoKGYpID0+IGYuaWQgIT09IHJlbW92ZVtpXSk7XG4gICAgICB9XG4gICAgICAvLyBBZGQgaXRlbXMgc2Vjb25kXG4gICAgICBpZiAoYWRkLmxlbmd0aCA+IDApIG5ld1JlcXVpcmVkRmllbGRzLnB1c2goLi4uYWRkKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGNhcHR1cmVGaWVsZHM6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS5jYXB0dXJlRmllbGRzLFxuICAgICAgICAgIFtmb3JtSWRdOiBuZXdDYXB0dXJlRmllbGRzLFxuICAgICAgICB9LFxuICAgICAgICBoYXNCZWVuVmFsaWRhdGVkOiB7XG4gICAgICAgICAgLi4uaGFzQmVlblZhbGlkYXRlZCxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3SGFzQmVlblZhbGlkYXRlZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWRGaWVsZHM6IHtcbiAgICAgICAgICAuLi5yZXF1aXJlZEZpZWxkcyxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3UmVxdWlyZWRGaWVsZHMsXG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRlZEZpZWxkczoge1xuICAgICAgICAgIC4uLnZhbGlkYXRlZEZpZWxkcyxcbiAgICAgICAgICBbZm9ybUlkXTogbmV3VmFsaWRhdGVkRmllbGRzLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnVkFMSURBVEVfQ09OTkVDVE9SUyc6IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29ubmVjdG9ycywgZmllbGRJZCwgZm9ybUlkLCB2YWx1ZSxcbiAgICAgIH0gPSBhY3Rpb247XG5cbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGU7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gQm9vbGVhbihjb25uZWN0b3JzLmZpbHRlcigoZikgPT4gdmFsdWUgPT09IGYubmFtZSkubGVuZ3RoID4gMCk7XG4gICAgICBsZXQgbmV3SGFzRXJyb3IgPSBuZXdTdGF0ZS5oYXNFcnJvcltmb3JtSWRdO1xuICAgICAgbmV3SGFzRXJyb3IgPSBuZXdIYXNFcnJvci5maWx0ZXIoKGgpID0+IGguaWQgJiYgaC5pZCAhPT0gZmllbGRJZCk7IC8vIEZpbHRlciBvdXQgZmllbGQgaWYgZXhpc3RzLiBQcm90ZWN0IGFnYWluc3QgZHVwbGljYXRpb25cbiAgICAgIGNvbnN0IG5ld1JlcXVpcmVkVmFsaWRhdGlvbiA9IHN0YXRlLnZhbGlkYXRlZEZpZWxkc1tmb3JtSWRdLmZpbHRlcigoZikgPT4gZiAhPT0gZmllbGRJZCk7Ly8gRmlsdGVyIG91dCBmaWVsZCBpZiBleGlzdHMuIFByb3RlY3QgYWdhaW5zdCBkdXBsaWNhdGlvblxuICAgICAgY29uc3QgbmV3VmFsaWRTdGF0ZSA9IHN0YXRlLmhhc0JlZW5WYWxpZGF0ZWRbZm9ybUlkXTtcbiAgICAgIGxldCB7IHJlQ2FwdHVyZUZpZWxkcyB9ID0gbmV3U3RhdGU7XG5cbiAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgIG5ld1JlcXVpcmVkVmFsaWRhdGlvbi5wdXNoKGZpZWxkSWQpOyAvLyBQdXQgaWQgaW50byByZXF1aXJlZCB2YWxpZGF0ZWQgc3RhdGVcbiAgICAgICAgbmV3VmFsaWRTdGF0ZS5wdXNoKGZpZWxkSWQpOyAvLyBQdXQgaWQgYmFjayBpbnRvIGdlbmVyYWwgdmFsaWRhdGlvbiBzdGF0ZVxuICAgICAgICByZUNhcHR1cmVGaWVsZHMgPSBkZWR1cGVBcnJheShbLi4uc3RhdGUucmVDYXB0dXJlRmllbGRzLCB7IGlkOiBmaWVsZElkLCB2YWx1ZSB9XSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgbmV3SGFzRXJyb3IucHVzaCh7XG4gICAgICAgICAgaWQ6IGZpZWxkSWQsXG4gICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYSBjb25uZWN0b3InLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGFjdGl2ZUZpZWxkOiBudWxsLFxuICAgICAgICBoYXNFcnJvcjoge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLmhhc0Vycm9yLFxuICAgICAgICAgIFtmb3JtSWRdOiBuZXdIYXNFcnJvcixcbiAgICAgICAgfSxcbiAgICAgICAgaGFzQmVlblZhbGlkYXRlZDoge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLmhhc0JlZW5WYWxpZGF0ZWQsXG4gICAgICAgICAgW2Zvcm1JZF06IG5ld1ZhbGlkU3RhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIHJlQ2FwdHVyZUZpZWxkcyxcbiAgICAgICAgdmFsaWRhdGVkRmllbGRzOiB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUudmFsaWRhdGVkRmllbGRzLFxuICAgICAgICAgIFtmb3JtSWRdOiBuZXdSZXF1aXJlZFZhbGlkYXRpb24sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgcmVkdWNlciBidXQgbm90IHJlcXVpcmVkIGZvciB0aGUgcmVkdWNlciBiZWxvdzpcbiIsIi8vIEBmbG93XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7XG4gIEFjdGlvbiwgTWF4bWluZEZhaWwsIE1heG1pbmRQcmV2ZW50ZWQsIE1heG1pbmRTdWNjZXNzLCBNaWxlc01heG1pbmRGYWlsLCBNaWxlc01heG1pbmRQcmV2ZW50ZWQsIE1pbGVzTWF4bWluZFN1Y2Nlc3MsXG59IGZyb20gJy4uL2xpYi90eXBlcy9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgTWF4bWluZFN0YXRlIH0gZnJvbSAnLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTdGF0ZTogTWF4bWluZFN0YXRlID0ge1xuICBlcnJvcjogbnVsbCxcbiAgSU5TSUdIVFM6IG51bGwsXG4gIHVybDogbnVsbCxcbiAgdXNlcjogbnVsbCxcbiAgLy8gSURMRSAtIFN0YXJ0aW5nL0RlZmF1bHQgU3RhdGUsIG5vdGVzIHRoYXQgQXZhZm9ybSBoYXMganVzdCBtb3VudGVkIGFuZCB0aGUgY2FsbCBtYXkgbm90IGhhdmUgc3RhcnRlZCB5ZXRcbiAgLy8gSU5fUFJPR1JFU1MgLSBFcXVpdmFsZW50IHRvIHNldHRpbmcgd2luZG93LmF2YS5tYXhtaW5kQVBJUnVubmluZyBpbiB0aGUgd2luZG93LCB0aGlzIG5vdGlmaWVzIHRoZSBjb21wb25lbnQgdGhhdCB3ZSBhcmUgZmV0Y2hpbmcgbWF4bWluZCBkYXRhXG4gIC8vIFNVQ0NFU1MgLSBNYXhtaW5kIEFQSSBjYWxsIGNvbXBsZXRlZCBhbmQgd2UgcmVjZWl2ZWQgYSBzdWNjZXNzZnVsIHJlc3BvbnNlXG4gIC8vIEZBSUxVUkUgLSBNYXhtaW5kIEFQSSBjYWxsIGNvbXBsZXRlZCBhbmQgd2UgcmVjZWl2ZWQgYSBiYWQgcmVzcG9uc2VcbiAgLy8gU1RPUFBFRCAtIE1heG1pbmQgQVBJIGNhbGwgd2FzIHByZXZlbnRlZCAtIHRoaXMgd2lsbCBvbmx5IGhhcHBlbiB3aGVuIGxvY2FsU3RvcmFnZS5hdmxyTWF4bWluZEVuYWJsZWQgaXMgZmFsc2UgLSBVc2VkIGZvciB0ZXN0aW5nXG4gIHN0YXR1czogJ0lETEUnLFxufTtcblxuZXhwb3J0IGNvbnN0IG1heG1pbmRTdWNjZXNzID0gKGFjdGlvbjogTWF4bWluZFN1Y2Nlc3MgfCBNaWxlc01heG1pbmRTdWNjZXNzLCBzdGF0ZTogTWF4bWluZFN0YXRlKTogTWF4bWluZFN0YXRlID0+IHtcbiAgY29uc3QgeyByZXN1bHRzLCB1cmwgfSA9IGFjdGlvbjtcbiAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhdmxyTXNUZXN0aW5nJykgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2F2bHJNc1Rlc3RpbmcnKSA9PT0gJ3RydWUnICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhdmxyR2VvTG9jYWxlJykpIHtcbiAgICByZXN1bHRzLmNvdW50cnkuaXNvX2NvZGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXZsckdlb0xvY2FsZScpIHx8IHJlc3VsdHMuY291bnRyeS5pc29fY29kZTtcbiAgfVxuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgY29uc3Qgc2V0UmVzdWx0cyA9IHsgLi4ucmVzdWx0cywgdXJsIH07XG5cbiAgY29uc3Qgc2V0U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgYmxvY2tlZDogZmFsc2UsXG4gICAgSU5TSUdIVFM6IHNldFJlc3VsdHMsXG4gICAgdXNlcjoge1xuICAgICAgaXA6IHJlc3VsdHMudHJhaXRzLmlwX2FkZHJlc3MsXG4gICAgICBjb3VudHJ5OiByZXN1bHRzLmNvdW50cnksXG4gICAgfSxcbiAgICB1cmwsXG4gICAgc3RhdHVzOiAnU1VDQ0VTUycsXG4gIH07XG5cbiAgd2luZG93LmF2YS5tYXhtaW5kID0ge1xuICAgIC4uLnNldFN0YXRlLFxuICB9O1xuICByZXR1cm4gc2V0U3RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgbWF4bWluZEZhaWwgPSAoYWN0aW9uOiBNYXhtaW5kRmFpbCB8IE1pbGVzTWF4bWluZEZhaWwsIHN0YXRlOiBNYXhtaW5kU3RhdGUpOiBNYXhtaW5kU3RhdGUgPT4ge1xuICBjb25zdCB7IG1lc3NhZ2UsIHVybCB9ID0gYWN0aW9uO1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBibG9ja2VkOiB0cnVlLFxuICAgIGVycm9yOiBtZXNzYWdlLFxuICAgIElOU0lHSFRTOiBudWxsLCAvLyBlbnN1cmUgdG8gZW1wdHkgdGhlIHZhbHVlXG4gICAgdXJsLFxuICAgIHN0YXR1czogJ0ZBSUxFRCcsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbWF4bWluZEZhaWxNaWxlcyA9IChhY3Rpb246IE1heG1pbmRGYWlsIHwgTWlsZXNNYXhtaW5kRmFpbCwgc3RhdGU6IE1heG1pbmRTdGF0ZSk6IE1heG1pbmRTdGF0ZSA9PiB7XG4gIGNvbnN0IHsgbWVzc2FnZSwgdXJsIH0gPSBhY3Rpb247XG4gIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9O1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGJsb2NrZWQ6IHRydWUsXG4gICAgZXJyb3I6IG1lc3NhZ2UsXG4gICAgSU5TSUdIVFM6IG51bGwsIC8vIGVuc3VyZSB0byBlbXB0eSB0aGUgdmFsdWVcbiAgICB1cmwsXG4gICAgc3RhdHVzOiAnRkFJTEVETUlMRVMnLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG1heG1pbmRQcmV2ZW50ZWQgPSAoYWN0aW9uOiBNYXhtaW5kUHJldmVudGVkIHwgTWlsZXNNYXhtaW5kUHJldmVudGVkLCBzdGF0ZTogTWF4bWluZFN0YXRlKTogTWF4bWluZFN0YXRlID0+IHtcbiAgY29uc3QgeyBtYXhtaW5kIH0gPSB3aW5kb3cuYXZhIHx8IHsgbWF4bWluZDogbnVsbCB9O1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgaWYgKCFtYXhtaW5kIHx8IG1heG1pbmQgPT09IG51bGwpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld01heG1pbmQgPSB3aW5kb3cuYXZhLm1heG1pbmQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgLi4ubmV3TWF4bWluZCxcbiAgICAgIH07XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgLi4ubWF4bWluZCxcbiAgfTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc3RhdGU6IE1heG1pbmRTdGF0ZSA9IGRlZmF1bHRTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pOiBNYXhtaW5kU3RhdGUge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnTUFYTUlORF9SVU5OSU5HJzoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YXR1czogJ0lOX1BST0dSRVNTJyxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ01BWE1JTkRfU1RPUFBFRCc6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzdGF0dXM6ICdTVE9QUEVEJyxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ01BWE1JTkRfU1VDQ0VTUyc6IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gbWF4bWluZFN1Y2Nlc3MoYWN0aW9uLCBzdGF0ZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ01BWE1JTkRfRkFJTCc6IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gbWF4bWluZEZhaWwoYWN0aW9uLCBzdGF0ZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ01BWE1JTkRfUFJFVkVOVEVEJzoge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBtYXhtaW5kUHJldmVudGVkKGFjdGlvbiwgc3RhdGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdNSUxFU19NQVhNSU5EX1NVQ0NFU1MnOiB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IG1heG1pbmRTdWNjZXNzKGFjdGlvbiwgc3RhdGUpO1xuICAgICAgd2luZG93LmF2YS5tYXhtaW5kID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnTUlMRVNfTUFYTUlORF9GQUlMJzoge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBtYXhtaW5kRmFpbE1pbGVzKGFjdGlvbiwgc3RhdGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdNSUxFU19NQVhNSU5EX1BSRVZFTlRFRCc6IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gbWF4bWluZFByZXZlbnRlZChhY3Rpb24sIHN0YXRlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgfTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IE1pbGVzU3RhdGUgfSBmcm9tICcuLi9saWIvdHlwZXMvcmVkdWNlci1zdGF0ZXMnO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFN0YXRlOiBNaWxlc1N0YXRlID0ge1xuICBmYWlsOiB7fSxcbiAgc3VjY2Vzczoge30sXG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHN0YXRlOiBNaWxlc1N0YXRlID0gZGVmYXVsdFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IE1pbGVzU3RhdGUge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnQ0xFQVJfRk9STV9TVUJNSVQnOiB7XG4gICAgICBjb25zdCB7IGZvcm1JZCB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLnN0YXRlIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmFpbDoge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLmZhaWwsXG4gICAgICAgICAgW2Zvcm1JZF06IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3M6IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZS5zdWNjZXNzLFxuICAgICAgICAgIFtmb3JtSWRdOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnU0VUX01JTEVTX1NVQk1JU1NJT05fU1RBVFVTJzoge1xuICAgICAgY29uc3Qge1xuICAgICAgICBlcnJvciwgZm9ybUlkLCBwYXlsb2FkLCByZXNwb25zZSwgc3RhdHVzLFxuICAgICAgfSA9IGFjdGlvbjtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGU7XG4gICAgICBsZXQgeyBmYWlsLCBzdWNjZXNzIH0gPSBuZXdTdGF0ZTtcbiAgICAgIGNvbnN0IGpzb25QYXlsb2FkID0ge307XG5cbiAgICAgIGlmIChwYXlsb2FkICYmIE9iamVjdC5rZXlzKHBheWxvYWQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFycmF5LWNhbGxiYWNrLXJldHVyblxuICAgICAgICAoT2JqZWN0LmtleXMocGF5bG9hZCkpLm1hcCgoaykgPT4ge1xuICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IHBheWxvYWRba10udmFsdWU7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdHlwZW9mIG5ld1ZhbHVlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UobmV3VmFsdWUpIDogbmV3VmFsdWU7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICAgICAgfVxuXG4gICAgICAgICAganNvblBheWxvYWRba10gPSB7XG4gICAgICAgICAgICBuYW1lOiBwYXlsb2FkW2tdLm5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vICRGbG93Rml4TWUgVE9ETzogd2h5IGRvZXNuJ3QgZmxvdyBsaWtlIHRoaXNcbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHJlc3BvbnNlIHx8IHsgdmFsdWU6IHt9IH07XG4gICAgICBjb25zdCBuZXdSZXNwb25zZSA9IHtcbiAgICAgICAgLi4ucmVzcG9uc2UsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPyAnc3VjY2VzcycgOiAnZmFpbGVkJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChyZXNwb25zZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgaWYgKGZhaWxbZm9ybUlkXSkgZGVsZXRlIGZhaWxbZm9ybUlkXTsgLy8gcmVtb3ZlIGZyb20gZmFpbGVkIHN0YXRlO1xuICAgICAgICBzdWNjZXNzID0ge1xuICAgICAgICAgIC4uLnN1Y2Nlc3MsXG4gICAgICAgICAgW2Zvcm1JZF06IHtcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgIGpzb246IGpzb25QYXlsb2FkLFxuICAgICAgICAgICAgcmVzcG9uc2U6IG5ld1Jlc3BvbnNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3VjY2Vzc1tmb3JtSWRdKSBkZWxldGUgc3VjY2Vzc1tmb3JtSWRdOyAvLyByZW1vdmUgZnJvbSBzdWNjZXNzIHN0YXRlO1xuICAgICAgICBmYWlsID0ge1xuICAgICAgICAgIC4uLmZhaWwsXG4gICAgICAgICAgW2Zvcm1JZF06IHtcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgIHJlc3BvbnNlOiBuZXdSZXNwb25zZSxcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZhaWwsXG4gICAgICAgIHN1Y2Nlc3MsXG4gICAgICB9O1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBDb25uZWN0b3JzQXJyYXksIENvbm5lY3RvclJlc3VsdHMgfSBmcm9tICcuLi9hcGkvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IFNlYXJjaFN0YXRlIH0gZnJvbSAnLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTdGF0ZTogU2VhcmNoU3RhdGUgPSB7XG4gIGRhdGE6IHt9LFxuICBlbmRwb2ludHM6IFtdLFxuICByZXN1bHRzOiB7fSxcbiAgc2VsZWN0ZWQ6IHt9LFxufTtcblxuLy8gSGVscGVyIHRvIHNvcnQgY29ubmVjdG9ycyBhbHBoYWJldGljYWxseVxuZXhwb3J0IGNvbnN0IGFscGhhU29ydCA9IChjb25uZWN0b3JzOiBDb25uZWN0b3JzQXJyYXksIHNvcnRWYWx1ZTogc3RyaW5nID0gJ2lkJyk6IENvbm5lY3RvcnNBcnJheSA9PiBjb25uZWN0b3JzLnNvcnQoKHByZXYsIG5leHQpID0+IHtcbiAgbGV0IHZhbHVlID0gMDtcbiAgaWYgKHByZXZbc29ydFZhbHVlXSA8IG5leHRbc29ydFZhbHVlXSkgeyB2YWx1ZSA9IC0xOyB9XG4gIGlmIChwcmV2W3NvcnRWYWx1ZV0gPiBuZXh0W3NvcnRWYWx1ZV0pIHsgdmFsdWUgPSAxOyB9XG4gIHJldHVybiB2YWx1ZTtcbn0pO1xuXG4vLyBIZWxwZXIgdG8gY29udmVydCBjb25uZWN0b3JzIGFycmF5IHRvIG9iamVjdFxuZXhwb3J0IGNvbnN0IGNvbnZlcnRPYmplY3RUb0FycmF5ID0gKGNvbm5lY3RvcnM6IENvbm5lY3RvclJlc3VsdHMpID0+IHtcbiAgY29uc3QgbmV3Q29ubmVjdG9ycyA9IFtdO1xuICBPYmplY3Qua2V5cyhjb25uZWN0b3JzKS5tYXAoKGspID0+IG5ld0Nvbm5lY3RvcnMucHVzaChjb25uZWN0b3JzW2tdKSk7IC8vIENvbnZlcnQgdG8gYXJyYXlcbiAgcmV0dXJuIG5ld0Nvbm5lY3RvcnM7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHN0YXRlOiBTZWFyY2hTdGF0ZSA9IGRlZmF1bHRTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pOiBTZWFyY2hTdGF0ZSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdDTE9TRV9QSUNLX0xJU1QnOiB7XG4gICAgICBjb25zdCB7IGZvcm1JZCB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0cyB9ID0gbmV3U3RhdGU7XG4gICAgICBkZWxldGUgcmVzdWx0c1tmb3JtSWRdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHJlc3VsdHMsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdDT05ORUNUT1JfREFUQV9GRVRDSF9TVUNDRVNTJzoge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29ubmVjdG9ycywgZW5kcG9pbnQsXG4gICAgICB9ID0gYWN0aW9uO1xuXG4gICAgICBjb25zdCBuZXdDb25uZWN0b3JzID0gY29udmVydE9iamVjdFRvQXJyYXkoY29ubmVjdG9ycyk7IC8vIENvbnZlcnQgdG8gYXJyYXlcblxuICAgICAgY29uc3QgbmV3RGF0YSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUuZGF0YSxcbiAgICAgICAgW2VuZHBvaW50XTogYWxwaGFTb3J0KG5ld0Nvbm5lY3RvcnMsICduYW1lJyksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBuZXdFbmRwb2ludHMgPSBuZXdTdGF0ZS5lbmRwb2ludHM7XG4gICAgICBpZiAoIW5ld0VuZHBvaW50cy5pbmNsdWRlcyhlbmRwb2ludCkpIHtcbiAgICAgICAgbmV3RW5kcG9pbnRzLnB1c2goZW5kcG9pbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZGF0YTogbmV3RGF0YSxcbiAgICAgICAgZW5kcG9pbnRzOiBuZXdFbmRwb2ludHMsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdISURFX1NFQVJDSF9SRVNVTFRTJzoge1xuICAgICAgY29uc3QgeyBmb3JtSWQsIGZpZWxkSWQgfSA9IGFjdGlvbjtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGU7XG4gICAgICBjb25zdCBuZXdSZXN1bHRzID0gbmV3U3RhdGUucmVzdWx0cztcbiAgICAgIGNvbnN0IGZvcm1SZXN1bHRzID0gbmV3UmVzdWx0c1tmb3JtSWRdO1xuICAgICAgZGVsZXRlIGZvcm1SZXN1bHRzW2ZpZWxkSWRdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IHtcbiAgICAgICAgICAuLi5uZXdSZXN1bHRzLFxuICAgICAgICAgIFtmb3JtSWRdOiB7XG4gICAgICAgICAgICAuLi5mb3JtUmVzdWx0cyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnU0FWRV9TRUFSQ0hfU0VMRUNUSU9OJzoge1xuICAgICAgY29uc3QgeyBmaWVsZElkLCBmb3JtSWQsIGFsdCB9ID0gYWN0aW9uO1xuXG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgY29uc3Qgc2VsZWN0ZWREYXRhID0gbmV3U3RhdGUuc2VsZWN0ZWQ7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IHNlbGVjdGVkRGF0YVtmb3JtSWRdIHx8IHt9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNlbGVjdGVkOiB7XG4gICAgICAgICAgLi4uc2VsZWN0ZWREYXRhLFxuICAgICAgICAgIFtmb3JtSWRdOiB7XG4gICAgICAgICAgICAuLi5mb3JtRGF0YSxcbiAgICAgICAgICAgIFtmaWVsZElkXTogYWx0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdTRUFSQ0hfQ09OTkVDVE9SUyc6IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZW5kcG9pbnQsIGZpZWxkSWQsIGZvcm1JZCxcbiAgICAgIH0gPSBhY3Rpb247XG5cbiAgICAgIGNvbnN0IGNsZWFuVGVybSA9ICh0ZXJtKSA9PiB7XG4gICAgICAgIGxldCBuZXdUZXJtID0gdGVybTtcbiAgICAgICAgbmV3VGVybSA9IG5ld1Rlcm0ucmVwbGFjZSgvWygpXS9naSwgJycpO1xuICAgICAgICBuZXdUZXJtID0gbmV3VGVybS5yZXBsYWNlKC9bXmEtejAtOV0gL2dpLCAnJyk7XG4gICAgICAgIHJldHVybiBuZXdUZXJtO1xuICAgICAgfTtcblxuICAgICAgbGV0IHsgdGVybSB9ID0gYWN0aW9uO1xuICAgICAgdGVybSA9IGNsZWFuVGVybSh0ZXJtKTtcbiAgICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAodGVybS50b0xvd2VyQ2FzZSgpLCAnZ2knKTtcblxuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgICAgIGNvbnN0IG5ld1Jlc3VsdHMgPSBuZXdTdGF0ZS5yZXN1bHRzO1xuICAgICAgY29uc3QgZGF0YVJlc3VsdHMgPSBuZXdTdGF0ZS5kYXRhW2VuZHBvaW50XTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IG5ld1N0YXRlLnNlbGVjdGVkO1xuICAgICAgY29uc3QgZm9ybURhdGEgPSBzZWxlY3RlZERhdGFbZm9ybUlkXSB8fCB7fTtcbiAgICAgIGNvbnN0IHsgW2ZpZWxkSWRdOiByZW1vdmUsIC4uLnJlc3QgfSA9IGZvcm1EYXRhOyAvLyBpZiBjdXJyZW50IHNlYXJjaCBmaWVsZCBleGlzdHMgaW4gc2VsZWN0ZWQgcmVtb3ZlXG4gICAgICBjb25zdCBmb3VuZCA9IFtdO1xuICAgICAgbGV0IHN0YXJ0c1dpdGggPSBbXTtcbiAgICAgIGxldCB1cGRhdGVSZXN1bHRzID0gW107XG5cbiAgICAgIGlmIChkYXRhUmVzdWx0cyAmJiBkYXRhUmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0YXJ0c1dpdGggPSBhbHBoYVNvcnQoZGF0YVJlc3VsdHMuZmlsdGVyKChmKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBuYW1lIH0gPSBmO1xuICAgICAgICAgIGNvbnN0IHRlc3ROYW1lID0gY2xlYW5UZXJtKG5hbWUpO1xuICAgICAgICAgIGlmICh0ZXN0TmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGVybS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgZm91bmQucHVzaChmLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KSwgJ25hbWUnKTtcblxuICAgICAgICB1cGRhdGVSZXN1bHRzID0gZGF0YVJlc3VsdHMuZmlsdGVyKChmKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBuYW1lIH0gPSBmO1xuICAgICAgICAgIGNvbnN0IHRlc3ROYW1lID0gY2xlYW5UZXJtKG5hbWUpO1xuICAgICAgICAgIGlmIChyZWdFeHAudGVzdCh0ZXN0TmFtZSkgJiYgIWZvdW5kLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgICBmb3VuZC5wdXNoKGYubmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHVwZGF0ZVJlc3VsdHMgPSBhbHBoYVNvcnQodXBkYXRlUmVzdWx0cywgJ25hbWUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmluYWxSZXN1bHRzID0gW1xuICAgICAgICAuLi5zdGFydHNXaXRoLFxuICAgICAgICAuLi51cGRhdGVSZXN1bHRzLFxuICAgICAgXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IHtcbiAgICAgICAgICAuLi5uZXdSZXN1bHRzLFxuICAgICAgICAgIFtmb3JtSWRdOiB7XG4gICAgICAgICAgICAuLi5uZXdSZXN1bHRzW2Zvcm1JZF0sXG4gICAgICAgICAgICBbZmllbGRJZF06IGZpbmFsUmVzdWx0cyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3RlZDoge1xuICAgICAgICAgIC4uLnNlbGVjdGVkRGF0YSxcbiAgICAgICAgICBbZm9ybUlkXToge1xuICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IFN5c3RlbVN0YXRlIH0gZnJvbSAnLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTdGF0ZTogU3lzdGVtU3RhdGUgPSB7XG4gIGFwcGxpY2F0aW9uSW5pdDogZmFsc2UsXG4gIGVudlN0YXRzOiB7XG4gICAgQVBJOiBudWxsLFxuICAgIERFTUFOREJBU0VfQVBJOiB7XG4gICAgICBDT01QQU5ZTE9PS1VQOiBudWxsLFxuICAgICAgRU1BSUxMT09LVVA6IG51bGwsXG4gICAgICBJUExPT0tVUDogbnVsbCxcbiAgICAgIEtFWTogbnVsbCxcbiAgICB9LFxuICAgIE1BWE1JTkRfQVBJOiBudWxsLFxuICAgIE1JTEVTX0FQSTogbnVsbCxcbiAgfSxcbiAgaXNBZG9iZVNhdGVsbGl0ZUJsb2NrZWQ6IHRydWUsIC8vIERlZmF1bHQgdG8gYmxvY2tlZCwgdHJ1ZSBtZWFucyBpdCBpcyBibG9ja2VkXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGxvYWRpbmdNZXNzYWdlOiAnJyxcbiAgbG9hZGluZ1JlcXVlc3RzOiAwLFxuICByZXF1ZXN0czogW10sXG4gIHN5c3RlbUVycm9yOiB7fSxcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc3RhdGU6IFN5c3RlbVN0YXRlID0gZGVmYXVsdFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN5c3RlbVN0YXRlIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ0lOSVRfQVBQTElDQVRJT04nOiB7XG4gICAgICAvLyBBbHdheXMgc2V0IHRvIGhlbHAgZ3VhcmQgYWdhaW5zdCBzdGF0ZSBtdXRhdGlvblxuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZTsgLy8gcmVkdW5kYW50IGJ1dCBlbnN1cmVzIG5vIG11dGF0aW9uIGlzIGhhcHBlbmluZy5cbiAgICAgIGNvbnN0IG5ld0FwcGxpY2F0aW9uSW5pdCA9ICFzdGF0ZS5hcHBsaWNhdGlvbkluaXQ7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICBjb25zdCBpc0VudlN0YXRzID0geyAuLi5zdGF0ZS5lbnZTdGF0cywgLi4uYWN0aW9uLmVudlN0YXRzIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgYXBwbGljYXRpb25Jbml0OiBuZXdBcHBsaWNhdGlvbkluaXQsXG4gICAgICAgIGVudlN0YXRzOiBpc0VudlN0YXRzLFxuICAgICAgICBpc0Fkb2JlU2F0ZWxsaXRlQmxvY2tlZDogQm9vbGVhbihhY3Rpb24uYWRvYmVWaXNpdG9ySWQgPT09ICcnKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ1JFQ0VJVkVfU1lTVEVNX0VSUk9SJzoge1xuICAgICAgY29uc3QgeyBpbmZvLCBzdGF0dXNDb2RlIH0gPSBhY3Rpb247XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGluZm8sXG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdTRVRfTE9BRElOR19GSU5JU0gnOiB7XG4gICAgICBjb25zdCBuZXdMb2FkaW5nUmVxdWVzdHMgPSBzdGF0ZS5sb2FkaW5nUmVxdWVzdHMgLSAxO1xuICAgICAgY29uc3QgaXNMb2FkaW5nID0gbmV3TG9hZGluZ1JlcXVlc3RzID4gMDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0xvYWRpbmcsXG4gICAgICAgIGxvYWRpbmdSZXF1ZXN0czogbmV3TG9hZGluZ1JlcXVlc3RzIDwgMCA/IDAgOiBuZXdMb2FkaW5nUmVxdWVzdHMsXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlOiAhaXNMb2FkaW5nID8gJycgOiBzdGF0ZS5sb2FkaW5nTWVzc2FnZSwgLy8gSWYgZG9uZSBsb2FkaW5nLCByZW1vdmUgbWVzc2FnZSwgb3RoZXJ3aXNlIHNob3cgZXhpc3RpbmcgbWVzc2FnZVxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnU0VUX0xPQURJTkdfU1RBUlQnOiB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgY29uc3QgbmV3UmVxdWVzdHMgPSBzdGF0ZS5yZXF1ZXN0cztcbiAgICAgIGlmIChhY3Rpb24ucmVxdWVzdCkgbmV3UmVxdWVzdHMucHVzaChhY3Rpb24ucmVxdWVzdCk7XG4gICAgICBjb25zdCBuZXdMb2FkaW5nUmVxdWVzdHMgPSBzdGF0ZS5sb2FkaW5nUmVxdWVzdHMgKyAxO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgbG9hZGluZ1JlcXVlc3RzOiBuZXdMb2FkaW5nUmVxdWVzdHMsXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlOiBhY3Rpb24ubWVzc2FnZSB8fCBzdGF0ZS5sb2FkaW5nTWVzc2FnZSwgLy8gTGVhdmUgbWVzc2FnaW5nIHRoZSBzYW1lIGlmIG5vdCBwYXNzZWRcbiAgICAgICAgcmVxdWVzdHM6IG5ld1JlcXVlc3RzLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnU0VUX1NZU1RFTV9FUlJPUic6IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZm9ybUlkLCBlcnJvciwgaW5mbywgc3RhdHVzQ29kZSxcbiAgICAgIH0gPSBhY3Rpb247XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHN5c3RlbUVycm9yOiB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUuc3lzdGVtRXJyb3IsXG4gICAgICAgICAgW2Zvcm1JZF06IHtcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgaW5mbyxcbiAgICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7IGNvbWJpbmVSZWR1Y2VycyB9IGZyb20gJ3JlZHV4JztcblxuLy8gJEZsb3dFeHBlY3RlZEVycm9yOiBBbGxvdyAtIHRoaXMgaGFzIGludGVybWl0dGVudCBlcnJvciBhbmQgc2hvdWxkIG5vdC5cbi8vIGltcG9ydCB0eXBlIHsgUmVkdWNlciB9IGZyb20gJ3JlZHV4JztcblxuaW1wb3J0IGF2YXRheCwgeyBkZWZhdWx0U3RhdGUgYXMgYXZhVGF4U3RhdGUgfSBmcm9tICcuL2F2YXRheCc7XG5pbXBvcnQgYnJpdGVWZXJpZnksIHsgZGVmYXVsdFN0YXRlIGFzIGJyaXRlVmVyaWZ5U3RhdGUgfSBmcm9tICcuL2JyaXRlLXZlcmlmeSc7XG5pbXBvcnQgZm9ybXMsIHsgZGVmYXVsdFN0YXRlIGFzIGZvcm1zU3RhdGUgfSBmcm9tICcuL2Zvcm1zJztcbmltcG9ydCBtYXhtaW5kLCB7IGRlZmF1bHRTdGF0ZSBhcyBtYXhtaW5kU3RhdGUgfSBmcm9tICcuL21heG1pbmQnO1xuaW1wb3J0IG1pbGVzLCB7IGRlZmF1bHRTdGF0ZSBhcyBtaWxlc1N0YXRlIH0gZnJvbSAnLi9taWxlcyc7XG5pbXBvcnQgc2VhcmNoLCB7IGRlZmF1bHRTdGF0ZSBhcyBzZWFyY2hTdGF0ZSB9IGZyb20gJy4vc2VhcmNoJztcbmltcG9ydCBzeXN0ZW0sIHsgZGVmYXVsdFN0YXRlIGFzIHN5c3RlbVN0YXRlIH0gZnJvbSAnLi9zeXN0ZW0nO1xuXG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSAnLi4vbGliL3R5cGVzL2FjdGlvbnMnO1xuXG4vLyBUZW1wIHJlc29sdmUgdG8gYSBmbG93IGVycm9yXG50eXBlIFJlZHVjZXI8VCwgVD4gPSB7IFN0YXRlOiBULCBBY3Rpb246IFQgfTtcblxuY29uc3QgcmVkdWNlcjogUmVkdWNlcjxTdGF0ZSwgQWN0aW9uPiA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gIGF2YXRheCxcbiAgYnJpdGVWZXJpZnksXG4gIGZvcm1zLFxuICBtYXhtaW5kLFxuICBtaWxlcyxcbiAgc2VhcmNoLFxuICBzeXN0ZW0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgcmVkdWNlcjtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTdGF0ZTogU3RhdGUgPSB7XG4gIGF2YXRheDogYXZhVGF4U3RhdGUsXG4gIGJyaXRlVmVyaWZ5OiBicml0ZVZlcmlmeVN0YXRlLFxuICBmb3JtczogZm9ybXNTdGF0ZSxcbiAgbWF4bWluZDogbWF4bWluZFN0YXRlLFxuICBtaWxlczogbWlsZXNTdGF0ZSxcbiAgc2VhcmNoOiBzZWFyY2hTdGF0ZSxcbiAgc3lzdGVtOiBzeXN0ZW1TdGF0ZSxcbn07XG4iLCIvLyBAZmxvd1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCBkdXJhdGlvbiBmcm9tICdkYXlqcy9wbHVnaW4vZHVyYXRpb24nO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9hcGkvbG9nZ2VyLWFwaSc7XG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBGb3JtRGVmYXVsdENvbmZpZ3MgfSBmcm9tICcuLi9saWIvdHlwZXMvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBFbG9xdWFMb29rdXBSZXNwb25zZSwgRWxvcXVhQ2FjaGUgfSBmcm9tICcuLi9hcGkvdHlwZXMnO1xuXG5kYXlqcy5leHRlbmQoZHVyYXRpb24pO1xuXG50eXBlIFByb3BzID0ge1xuICBmb3JtSWQ6IHN0cmluZyxcbiAgaGFzVXNlckluZm86IGJvb2xlYW4sXG4gIGNvbmZpZ3M6IEZvcm1EZWZhdWx0Q29uZmlncyxcbiAgb25FbG9xdWFMb29rdXA6IChmb3JtSWQ6IHN0cmluZywgaGFzVXNlckluZm86IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD4sXG4gIG9uU2V0RWxvcXVhTG9va3VwVmFsaWQ6IChmb3JtSWQ6IHN0cmluZywgdmFsdWVzOiBFbG9xdWFMb29rdXBSZXNwb25zZSkgPT4gdm9pZCxcbn1cblxuZXhwb3J0IGNvbnN0IGxvb2t1cFVzZXJEYXRhSW5FbG9xdWEgPSAoe1xuICBjb25maWdzLFxuICBmb3JtSWQsXG4gIGhhc1VzZXJJbmZvLFxuICBvbkVsb3F1YUxvb2t1cCxcbiAgb25TZXRFbG9xdWFMb29rdXBWYWxpZCxcbn06IFByb3BzKTogdm9pZCA9PiB7XG4gIC8vIEFuIGltbWVkaWF0ZSBsb29rdXAgdG8gYmUgcnVuIGFmdGVyIGRlbGF5IGNoZWNrLlxuICBjb25zdCBpbW1lZGlhdGVMb29rdXBVc2VyRGF0YUluRWxvcXVhID0gKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgIGlmICghaGFzVXNlckluZm8gJiYgY29uZmlncyAmJiBjb25maWdzLmF1dG9maWxsRm9ybSAmJiB3aW5kb3cuX3NhdGVsbGl0ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gd2luZG93LmF2YS5lbG9xdWFEYXRhLmRhdGE7XG4gICAgICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLnZhbHVlICYmIHZhbHVlcy52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIG9uU2V0RWxvcXVhTG9va3VwVmFsaWQoZm9ybUlkLCB2YWx1ZXMpOyAvLyBVc2Ugc2F2ZWQgZWxvcXVhIHZhbHVlcyB0byB1cGRhdGUgZm9ybVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uRWxvcXVhTG9va3VwKGZvcm1JZCwgaGFzVXNlckluZm8pOyAvLyBwaW5nIGVsb3F1YSBmb3Igc2F2ZWQgdmFsdWVzXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBvbkVsb3F1YUxvb2t1cChmb3JtSWQsIGhhc1VzZXJJbmZvKTsgLy8gcGluZyBlbG9xdWEgZm9yIHNhdmVkIHZhbHVlc1xuICAgICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgIH0gZWxzZSBpZiAoIWhhc1VzZXJJbmZvICYmIGNvbmZpZ3MgJiYgY29uZmlncy5hdXRvZmlsbEZvcm0gJiYgIXdpbmRvdy5fc2F0ZWxsaXRlKSB7XG4gICAgICAvLyAnYXQtbGlicmFyeS1sb2FkZWQnIGV2ZW50IGZpcmVkIHdoZW4gbGF1bmNoIEpTIGlzIGFzeW5jaHJvbm91c2x5IGxvYWRlZFxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYXQtbGlicmFyeS1sb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgIGltbWVkaWF0ZUxvb2t1cFVzZXJEYXRhSW5FbG9xdWEoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIoe1xuICAgICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgICBtc2dUeXBlOiAnRm9ybUF1dG9GaWxsJyxcbiAgICAgICAgZm9ybUlkOiAnJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1lc3NhZ2U6ICdGb3JtIGF1dG9mb3JtRmlsbCBub3Qgc2V0IGluIGNvbmZpZy4gQXV0b0ZpbGwgZGlkIG5vdCB0cmlnZ2VyJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBpbW1lZGlhdGVMb29rdXBVc2VyRGF0YUluRWxvcXVhKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RWxvcXVhQ2FjaGUgPSAoKTogRWxvcXVhQ2FjaGUgPT4ge1xuICBsZXQgZmllbGRWYWx1ZXMgPSBudWxsO1xuICBsZXQgdmFsdWVzID0gbnVsbDtcbiAgbGV0IHRpbWVTdGFtcCA9IG51bGw7XG5cbiAgdHJ5IHtcbiAgICBsZXQgc2F2ZWRFbG9xdWFEYXRhID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhdmxyRWxvcXVhRGF0YScpO1xuICAgIHNhdmVkRWxvcXVhRGF0YSA9IHR5cGVvZiBzYXZlZEVsb3F1YURhdGEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShzYXZlZEVsb3F1YURhdGEpIDogc2F2ZWRFbG9xdWFEYXRhO1xuICAgIGlmIChzYXZlZEVsb3F1YURhdGEuZmllbGRWYWx1ZXMpIGZpZWxkVmFsdWVzID0gc2F2ZWRFbG9xdWFEYXRhLmZpZWxkVmFsdWVzO1xuICAgIGlmIChzYXZlZEVsb3F1YURhdGEudmFsdWVzKSB2YWx1ZXMgPSBzYXZlZEVsb3F1YURhdGEudmFsdWVzO1xuICAgIGlmIChzYXZlZEVsb3F1YURhdGEudGltZVN0YW1wKSB0aW1lU3RhbXAgPSBzYXZlZEVsb3F1YURhdGEudGltZVN0YW1wO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEbyBub3QgdGhyb3cgZXJyb3Igd2hlbiB3ZSBjYW4ndCByZXRyaWV2ZSBjYWNoZWQgdmFsdWVzLlxuICB9XG5cbiAgcmV0dXJuIHsgZmllbGRWYWx1ZXMsIHZhbHVlcywgdGltZVN0YW1wIH07XG59O1xuXG5leHBvcnQgY29uc3QgaXNFbG9xdWFDYWNoZUV4cGlyZWQgPSAoZWxvcXVhQ2FjaGU6IEVsb3F1YUNhY2hlKTogYm9vbGVhbiA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKGVsb3F1YUNhY2hlLnRpbWVTdGFtcCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBlbmRUaW1lID0gZGF5anMoZGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZGF5anMoZWxvcXVhQ2FjaGUudGltZVN0YW1wKTtcbiAgICAgIGNvbnN0IGVsb3F1YUNhY2hlVGltZXN0YW1wRHVyYXRpb24gPSBkYXlqcy5kdXJhdGlvbihlbmRUaW1lLmRpZmYoc3RhcnRUaW1lKSk7XG4gICAgICByZXR1cm4gKGVsb3F1YUNhY2hlVGltZXN0YW1wRHVyYXRpb24uYXNIb3VycygpID49IDQpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRG8gbm90IHRocm93IGVycm9yIG9uIGZhaWx1cmUgY2hlY2tpbmcgZXhwaXJlZC5cbiAgfVxuXG4gIC8vIERlZmF1bHQgdG8gZXhwaXJlZCB0cnVlLlxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxvb2t1cFVzZXJEYXRhSW5FbG9xdWE7XG4iLCIvLyBAZmxvdyBzdHJpY3RcblxuaW1wb3J0IHR5cGUgeyBKc29uU2NoZW1hIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGVsb3F1YVNjaGVtYTogSnNvblNjaGVtYSA9IHtcbiAgdHlwZTogJ29iamVjdCcsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBmaXJzdG5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBsYXN0bmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIGFjY291bnRuYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgcGhvbmVudW1iZXI6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBpc0N1c3RvbWVyQWN0aXZlOiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICAgIHNmZGNJZDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIGVtYWlsSWQ6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVsb3F1YVNjaGVtYTtcbiIsIi8vIEBmbG93XG4vLyBEb2NzXG4vLyBVc2UgdGhlIGZvbGxvd2luZyBVUkxzIHRvIHJldmlldyBkb2N1bWVudGF0aW9uIGFyb3VuZCBicml0ZSB2ZXJpZnkgc2VydmljZVxuLy8gaHR0cHM6Ly93aWtpLmF2YWxhcmEuY29tL2Rpc3BsYXkvTVQvQnJpdGVWZXJpZnkrLStBUEkrQ2FsbHNcbi8vIGh0dHBzOi8vbWlsZXMubWFya2V0aW5nLmF2YWxhcmEuY29tL3N3YWdnZXIvZG9jL2VtYWlsX3ZlcmlmeVxuaW1wb3J0IHsgZmV0Y2gsIHNjaGVtYVZhbGlkYXRvciB9IGZyb20gJ0BhdmFsYXJhLW10Zy9oZWxwZXJzL2xpYi9zaGFyZWQnO1xuaW1wb3J0IHsgZ2V0QWRvYmVWaXNpdG9ySWQgfSBmcm9tICdAYXZhbGFyYS1tdGcvaGVscGVycy9saWIvdWknO1xuXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL2NvbmZpZyc7XG5cbi8vIEFjdGlvbnNcbmltcG9ydCB7IHNldEVsb3F1YUxvb2t1cFZhbGlkLCBzZXRFbG9xdWFMb29rdXBJbnZhbGlkIH0gZnJvbSAnLi4vbGliL2FjdGlvbnMnO1xuXG4vLyBMb2dnaW5nXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyLWFwaSc7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7IGlzRWxvcXVhQ2FjaGVFeHBpcmVkLCBnZXRFbG9xdWFDYWNoZSB9IGZyb20gJy4uL2hlbHBlcnMvZWxvcXVhJztcblxuLy8gU2NoZW1hXG5pbXBvcnQgZWxvcXVhU2NoZW1hIGZyb20gJy4uL3NjaGVtYS9lbG9xdWEtbG9va3VwJztcblxuLy8gQVBJIFNldHRpbmdzXG5pbXBvcnQgQVBJX1NFVFRJTkdTIGZyb20gJy4uL3NoYXJlZC9hcGktc2V0dGluZ3MnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJy4uL2xpYi90eXBlcy9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgUmVzdWx0IH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgRWxvcXVhTG9va3VwUmVzcG9uc2UgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgZWxvcXVhQVBJID0gY29uZmlnLkVMT1FVQV9BUEk7XG5cbmxldCBlbG9xdWFBcGlSdW5uaW5nID0gZmFsc2U7IC8vIEVuc3VyZSB0aGF0IGl0IGlzIG9ubHkgY2FsbGVkIG9uY2VcblxuLy8gQVBJIHNob3VsZCB0ZWNobmljYWxseSBhbHdheXMgcmV0dXJuIHN1Y2Nlc3MgKDIwMCksIGhvd2V2ZXIsIGVycm9ycyBhcmUgcmVmbGVjdGVkIGluIHRoZSByZXNwb25zZSByZXNwb25zZS52YWx1ZS5zdGF0dXNcbmV4cG9ydCBjb25zdCBlbG9xdWFMb29rdXAgPSBhc3luYyAoZGlzcGF0Y2g6IERpc3BhdGNoLCBmb3JtSWQ6IHN0cmluZywgaGFzVXNlckluZm86IGJvb2xlYW4pID0+IHtcbiAgbGV0IHsgZWxvcXVhRGF0YSB9ID0gd2luZG93LmF2YSB8fCB7XG4gICAgZWxvcXVhRGF0YToge1xuICAgICAgZm9ybXM6IFtdLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBvazogZmFsc2UsXG4gICAgICB2YWx1ZXM6IG51bGwsXG4gICAgfSxcbiAgfTtcbiAgd2luZG93LmF2YS5lbG9xdWFEYXRhID0ge1xuICAgIC4uLmVsb3F1YURhdGEsXG4gIH07XG4gIGlmIChoYXNVc2VySW5mbyB8fCBlbG9xdWFBcGlSdW5uaW5nKSByZXR1cm47IC8vIERvIG5vdGhpbmcgaWYgaXMgbG9nZ2VkIGluIG9yIGFscmVhZHkgcnVubmluZ1xuICBlbG9xdWFBcGlSdW5uaW5nID0gdHJ1ZTsgLy8gU2V0IHJ1bm5pbmcgc3RhdHVzIHRvIHN0b3AgbXVsdGktZm9ybSB0cmlnZ2Vyc1xuXG4gIGxldCB7IGZvcm1zIH0gPSBlbG9xdWFEYXRhIHx8IHsgZm9ybXM6IFtdIH07XG4gIGlmICghZm9ybXMpIHtcbiAgICBmb3JtcyA9IFtmb3JtSWRdO1xuICB9IGVsc2Uge1xuICAgIGlmIChmb3JtcyAmJiBmb3Jtcy5pbmNsdWRlcyhmb3JtSWQpKSB7XG4gICAgICBlbG9xdWFBcGlSdW5uaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47IC8vIFN0b3AgcHJvY2Vzc2luZyBpZiBmb3JtIGlzIGFscmVhZHkgc2V0XG4gICAgfVxuICAgIGZvcm1zLnB1c2goZm9ybUlkKTtcbiAgfVxuXG4gIHdpbmRvdy5hdmEuZWxvcXVhRGF0YS5mb3JtcyA9IGZvcm1zO1xuXG4gIGxldCBhZG9iZUlkID0gZ2V0QWRvYmVWaXNpdG9ySWQoKSB8fCBudWxsO1xuXG4gIHRyeSB7XG4gICAgYWRvYmVJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhdmxyQWRvYmVJZCcpIHx8IGFkb2JlSWQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIGlmICghYWRvYmVJZCB8fCAoYWRvYmVJZCAmJiBhZG9iZUlkID09PSAnJykgfHwgYWRvYmVJZCA9PT0gbnVsbCkge1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdlbG9xdWFMb29rdXAnLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiAnRXJyb3Igbm8gYWRvYmVJZCBmb3VuZCBkdXJpbmcgbG9va3VwJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZWxvcXVhQXBpUnVubmluZyA9IGZhbHNlO1xuICAgIHJldHVybjsgLy8gRG8gbm90IG1ha2UgY2FsbCBpZiBjYW4ndCBmaW5kIGFkb2JlSWRcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBjYWNoZWQgRWxvcXVhIGRhdGFcbiAgY29uc3QgZWxvcXVhQ2FjaGUgPSBnZXRFbG9xdWFDYWNoZSgpO1xuICBjb25zdCB7IHZhbHVlcywgZmllbGRWYWx1ZXMgfSA9IGVsb3F1YUNhY2hlO1xuXG4gIC8vIElmIHRoZXJlIGFyZSB2YWx1ZXMgYW5kIGNhY2hlIGlzbid0IGV4cGlyZWQgdGhlbiBkaXNwYXRjaCBhbmQgcmV0dXJuLlxuICBpZiAodmFsdWVzICYmIE9iamVjdC5rZXlzKHZhbHVlcykubGVuZ3RoID4gMSkge1xuICAgIGlmIChpc0Vsb3F1YUNhY2hlRXhwaXJlZChlbG9xdWFDYWNoZSkgPT09IGZhbHNlKSB7XG4gICAgICB3aW5kb3cuYXZhLmVsb3F1YURhdGEgPSBlbG9xdWFDYWNoZTsgLy8gU2V0IGRhdGEgdG8gd2luZG93XG4gICAgICBkaXNwYXRjaChzZXRFbG9xdWFMb29rdXBWYWxpZChmb3JtSWQsIHZhbHVlcykpO1xuICAgICAgZWxvcXVhQXBpUnVubmluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuOyAvLyBTdG9wIHByb2Nlc3NpbmcgY2FsbFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBpc1RpbWUgPSB3aW5kb3cuYXZhLmNhY2hlVGltZVN0YW1wIHx8IGRhdGUuZ2V0VGltZSgpOyAvLyB3aW5kb3cuYXZhLmNhY2hlVGltZVN0YW1wIGlzIHVzZWQgZm9yIGxvY2FsIHVuaXQgdGVzdGluZyBwdXJwb3Nlc1xuICBjb25zdCByZXF1ZXN0VXJsID0gYCR7ZWxvcXVhQVBJfT9hZG9iZUlkPSR7YWRvYmVJZH0mY2N3dHM9JHtpc1RpbWV9YDtcbiAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICB9O1xuXG4gIGNvbnN0IHJlc3BvbnNlOiBSZXN1bHQ8RWxvcXVhTG9va3VwUmVzcG9uc2U+ID0gYXdhaXQgZmV0Y2gocmVxdWVzdFVybCwge1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgaGVhZGVycyxcbiAgfSwgQVBJX1NFVFRJTkdTLnRpbWVvdXQpLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0KTtcblxuICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmcgKi9cbiAgZWxvcXVhRGF0YSA9IHdpbmRvdy5hdmEuZWxvcXVhRGF0YTtcbiAgd2luZG93LmF2YS5lbG9xdWFEYXRhID0ge1xuICAgIC4uLmVsb3F1YURhdGEsXG4gICAgYWRvYmVJZCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBmaWVsZFZhbHVlcyxcbiAgICBvazogZmFsc2UsXG4gICAgcmVzcG9uc2UsXG4gICAgdmFsdWVzLFxuICB9O1xuXG4gIC8vIFJ1biBzY2hlbWEgdmFsaWRhdGlvblxuICBsb2dnZXIoe1xuICAgIGxldmVsOiAnaW5mbycsXG4gICAgbXNnVHlwZTogJ0Vsb3F1YUFQSVZhbGlkYXRpb24nLFxuICAgIGZvcm1JZCxcbiAgICBkYXRhOiB7XG4gICAgICBtZXNzYWdlOiBgU2NoZW1hIHZhbGlkYXRpb24gZm9yIGVsb3F1YSBhcGkuIERhdGE6ICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpfWAsXG4gICAgfSxcbiAgfSk7XG5cbiAgaWYgKHJlc3BvbnNlICYmICFyZXNwb25zZS52YWx1ZSkge1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdFbG9xdWFBUElSZXNwb25zZVZhbGlkYXRpb24nLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiAnRXJyb3Igd2l0aCBlbG9xdWEgQVBJIHZlcmlmeSByZXNwb25zZSBzY2hlbWEgdmFsaWRhdGlvbicsXG4gICAgICAgIHJlc3BvbnNlOiBKU09OLnN0cmluZ2lmeShyZXNwb25zZSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNjaGVtYVZhbGlkYXRpb25SZXNwb25zZSA9IHNjaGVtYVZhbGlkYXRvcihlbG9xdWFTY2hlbWEsIHJlc3BvbnNlKTtcblxuICAgIGlmIChzY2hlbWFWYWxpZGF0aW9uUmVzcG9uc2UgJiYgIXNjaGVtYVZhbGlkYXRpb25SZXNwb25zZS5vaykge1xuICAgICAgLy8gU2lsZW50bHkgZmFpbCBzY2hlbWEsIGRvIG5vdCBpbnRlcnJ1cHQgdXNlciwgc2VudCB0byBTdW1vIGZvciBsb2dnaW5nXG4gICAgICBsb2dnZXIoe1xuICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgbXNnVHlwZTogJ0Vsb3F1YUFQSVJlc3BvbnNlVmFsaWRhdGlvbicsXG4gICAgICAgIGZvcm1JZCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1lc3NhZ2U6ICdFcnJvciB3aXRoIGVsb3F1YSBBUEkgcmVzcG9uc2Ugc2NoZW1hIHZhbGlkYXRpb24nLFxuICAgICAgICAgIHJlc3BvbnNlOiBKU09OLnN0cmluZ2lmeShzY2hlbWFWYWxpZGF0aW9uUmVzcG9uc2UpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgcmV0dXJuZWQgaW5mb3JtYXRpb24gdG8gYmUgdmFsaWQuIEFueSBvdGhlciBzdGF0dXMgaXMgY29uc2lkZXJlZCBmYWlsZWRcbiAgLy8gRGlzcGF0Y2ggZmFpbHVyZSB0byByZWR1eCByZWR1Y2VyIHJlZHVjZXIvZm9ybXMuanMgaWYgbm8gcmVzcG9uc2UgaXMgZm91bmRcbiAgaWYgKCFyZXNwb25zZS5vayB8fCAocmVzcG9uc2Uub2sgJiYgIXJlc3BvbnNlLnZhbHVlKSkge1xuICAgIGxldCBtZXNzYWdlID0gYEVycm9yIHdpdGggZWxvcXVhIHJlc3BvbnNlLiBSZXNwb25zZTogJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YDtcbiAgICBtZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZSA/IHJlc3BvbnNlLm1lc3NhZ2UgOiBtZXNzYWdlO1xuXG4gICAgbG9nZ2VyKHtcbiAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgbXNnVHlwZTogJ2Vsb3F1YUxvb2t1cCcsXG4gICAgICBmb3JtSWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVycm9yOiAnRXJyb3Igd2l0aCBlbG9xdWEgYXBpIGxvb2t1cCcsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHdpbmRvdy5hdmEuZWxvcXVhRGF0YS5lcnJvciA9IG1lc3NhZ2U7XG4gICAgZGlzcGF0Y2goc2V0RWxvcXVhTG9va3VwSW52YWxpZChmb3JtSWQsIG1lc3NhZ2UpKTtcbiAgICAvLyBSZWxvYWQgZnJvbSBjYWNoZSBpZiBwcmVzZW50XG4gICAgaWYgKHdpbmRvdy5hdmEgJiYgd2luZG93LmF2YS5lbG9xdWFEYXRhICYmIHdpbmRvdy5hdmEuZWxvcXVhRGF0YS52YWx1ZXMgJiYgT2JqZWN0LmtleXMod2luZG93LmF2YS5lbG9xdWFEYXRhLnZhbHVlcykubGVuZ3RoID4gMCkge1xuICAgICAgZGlzcGF0Y2goc2V0RWxvcXVhTG9va3VwVmFsaWQoZm9ybUlkLCB3aW5kb3cuYXZhLmVsb3F1YURhdGEudmFsdWVzKSk7XG4gICAgfVxuICAgIGVsb3F1YUFwaVJ1bm5pbmcgPSBmYWxzZTsgLy8gUmVzZXQgc3RhdHVzXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLnZhbHVlKSB7XG4gICAgY29uc3QgcmVzcG9uc2VKc29uVmFsdWUgPSB0eXBlb2YgcmVzcG9uc2UudmFsdWUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXNwb25zZS52YWx1ZSkgOiByZXNwb25zZS52YWx1ZTtcblxuICAgIC8vIERvdWJsZSBjaGVjayB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlIGluIHRoZSByZXR1cm4uXG4gICAgaWYgKHJlc3BvbnNlSnNvblZhbHVlLm1lc3NhZ2UgJiYgcmVzcG9uc2VKc29uVmFsdWUubWVzc2FnZSAhPT0gJycpIHtcbiAgICAgIHdpbmRvdy5hdmEuZWxvcXVhRGF0YS5vayA9IGZhbHNlO1xuICAgICAgbGV0IG1lc3NhZ2UgPSBgRXJyb3Igd2l0aCBlbG9xdWEgcmVzcG9uc2UuIFJlc3BvbnNlOiAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlKX1gO1xuICAgICAgbWVzc2FnZSA9IHJlc3BvbnNlSnNvblZhbHVlLm1lc3NhZ2UgPyByZXNwb25zZUpzb25WYWx1ZS5tZXNzYWdlIDogbWVzc2FnZTtcbiAgICAgIHdpbmRvdy5hdmEuZWxvcXVhRGF0YS5maWVsZFZhbHVlcyA9IGZpZWxkVmFsdWVzO1xuICAgICAgd2luZG93LmF2YS5lbG9xdWFEYXRhLnZhbHVlcyA9IHZhbHVlcztcbiAgICAgIHdpbmRvdy5hdmEuZWxvcXVhRGF0YS5lcnJvciA9IG1lc3NhZ2U7XG4gICAgICBkaXNwYXRjaChzZXRFbG9xdWFMb29rdXBJbnZhbGlkKGZvcm1JZCwgbWVzc2FnZSkpO1xuICAgICAgLy8gUmVsb2FkIGZyb20gY2FjaGUgaWYgcHJlc2VudFxuICAgICAgaWYgKHdpbmRvdy5hdmEgJiYgd2luZG93LmF2YS5lbG9xdWFEYXRhICYmIHdpbmRvdy5hdmEuZWxvcXVhRGF0YS52YWx1ZXMgJiYgT2JqZWN0LmtleXMod2luZG93LmF2YS5lbG9xdWFEYXRhLnZhbHVlcykubGVuZ3RoID4gMCkge1xuICAgICAgICBkaXNwYXRjaChzZXRFbG9xdWFMb29rdXBWYWxpZChmb3JtSWQsIHdpbmRvdy5hdmEuZWxvcXVhRGF0YS52YWx1ZXMpKTtcbiAgICAgIH1cbiAgICAgIGVsb3F1YUFwaVJ1bm5pbmcgPSBmYWxzZTsgLy8gUmVzZXQgc3RhdHVzXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhdmxyRWxvcXVhRGF0YScsIEpTT04uc3RyaW5naWZ5KHsgb2s6IHRydWUsIGVycm9yOiBudWxsLCB2YWx1ZXM6IHJlc3BvbnNlSnNvblZhbHVlIH0pKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9XG4gICAgd2luZG93LmF2YS5lbG9xdWFEYXRhLnZhbHVlcyA9IHJlc3BvbnNlSnNvblZhbHVlO1xuICAgIHdpbmRvdy5hdmEuZWxvcXVhRGF0YS5vayA9IHRydWU7XG4gICAgZWxvcXVhQXBpUnVubmluZyA9IGZhbHNlOyAvLyBSZXNldCBzdGF0dXNcblxuICAgIC8vIFNhdmUgZGF0YSB0byByZWR1eC4gRm9ybWF0IGluIHJlZHV4IGZ1bmN0aW9uXG4gICAgZGlzcGF0Y2goc2V0RWxvcXVhTG9va3VwVmFsaWQoZm9ybUlkLCByZXNwb25zZUpzb25WYWx1ZSkpO1xuICB9XG5cbiAgZWxvcXVhQXBpUnVubmluZyA9IGZhbHNlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZWxvcXVhTG9va3VwO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB0eXBlIHsgSnNvblNjaGVtYSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydFxuZXhwb3J0IGNvbnN0IG1heG1pbmRJbnNpZ2h0c1NjaGVtYTogSnNvblNjaGVtYSA9IHtcbiAgdHlwZTogJ29iamVjdCcsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBjaXR5OiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgY29uZmlkZW5jZTogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICBnZW9uYW1lX2lkOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgIG5hbWVzOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZW46IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGphOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb250aW5lbnQ6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBjb2RlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIGdlb25hbWVfaWQ6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgbmFtZXM6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBkZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgZW46IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGVzOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBmcjogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgamE6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICdwdC1CUic6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIHJ1OiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAnemgtQ04nOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBsb2NhdGlvbjoge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGFjY3VyYWN5X3JhZGl1czogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICBhdmVyYWdlX2luY29tZTogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICBsYXRpdHVkZTogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICBsb25naXR1ZGU6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgbWV0cm9fY29kZTogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICBwb3B1bGF0aW9uX2RlbnNpdHk6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgdGltZV96b25lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgcG9zdGFsOiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgY29uZmlkZW5jZTogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICBjb2RlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICB9LFxuICAgICAgcmVnaXN0ZXJlZF9jb3VudHJ5OiB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgaXNvX2NvZGU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICBnZW9uYW1lX2lkOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgICAgbmFtZXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBkZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICBlbjogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICBlczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICBmcjogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICBqYTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAncHQtQlInOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgIHJ1OiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICd6aC1DTic6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzdWJkaXZpc2lvbnM6IHtcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb25maWRlbmNlOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgICAgICBnZW9uYW1lX2lkOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgICAgICBpc29fY29kZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgbmFtZXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBkZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgIGVuOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgZXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICBmcjogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgIGphOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgJ3B0LUJSJzogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgIHJ1OiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgJ3poLUNOJzogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRyYWl0czoge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGF1dG9ub21vdXNfc3lzdGVtX251bWJlcjogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICAgIGF1dG9ub21vdXNfc3lzdGVtX29yZ2FuaXphdGlvbjogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgIGlwX2FkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICBpc3A6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICBvcmdhbml6YXRpb246IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICB1c2VyX3R5cGU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB1cmw6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBtYXhtaW5kQ291bnRyeVNjaGVtYTogSnNvblNjaGVtYSA9IHtcbiAgdHlwZTogJ29iamVjdCcsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBjb250aW5lbnQ6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBjb2RlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIGdlb25hbWVfaWQ6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgbmFtZXM6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBkZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgZW46IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGVzOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBmcjogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgamE6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICdwdC1CUic6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIHJ1OiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAnemgtQ04nOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb3VudHJ5OiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgY29uZmlkZW5jZTogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICBpc29fY29kZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICBnZW9uYW1lX2lkOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgIG5hbWVzOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZGU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGVuOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBlczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgZnI6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGphOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAncHQtQlInOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBydTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgJ3poLUNOJzogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVnaXN0ZXJlZF9jb3VudHJ5OiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaXNvX2NvZGU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgZ2VvbmFtZV9pZDogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICBuYW1lczoge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGRlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBlbjogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgZXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGZyOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBqYTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgJ3B0LUJSJzogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgcnU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICd6aC1DTic6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHRyYWl0czoge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGF1dG9ub21vdXNfc3lzdGVtX251bWJlcjogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICBhdXRvbm9tb3VzX3N5c3RlbV9vcmdhbml6YXRpb246IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgaXBfYWRkcmVzczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICBpc3A6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgb3JnYW5pemF0aW9uOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHVzZXJfdHlwZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgSU5TSUdIVFM6IHtcbiAgICBjaXR5OiB7XG4gICAgICBjb25maWRlbmNlOiAyMCxcbiAgICAgIGdlb25hbWVfaWQ6IDU3OTk2MjUsXG4gICAgICBuYW1lczoge30sXG4gICAgfSxcbiAgICBjb250aW5lbnQ6IHtcbiAgICAgIGNvZGU6ICdOQScsXG4gICAgICBnZW9uYW1lX2lkOiA2MjU1MTQ5LFxuICAgICAgbmFtZXM6IHt9LFxuICAgIH0sXG4gICAgY291bnRyeToge1xuICAgICAgY29uZmlkZW5jZTogOTksXG4gICAgICBpc29fY29kZTogJ1VTJyxcbiAgICAgIGdlb25hbWVfaWQ6IDYyNTIwMDEsXG4gICAgICBuYW1lczoge30sXG4gICAgfSxcbiAgICBsb2NhdGlvbjoge1xuICAgICAgYWNjdXJhY3lfcmFkaXVzOiA1MCxcbiAgICAgIGF2ZXJhZ2VfaW5jb21lOiAyNDgwNCxcbiAgICAgIGxhdGl0dWRlOiA0Ny4zNzk4LFxuICAgICAgbG9uZ2l0dWRlOiAtMTIyLjI4OTMsXG4gICAgICBtZXRyb19jb2RlOiA4MTksXG4gICAgICBwb3B1bGF0aW9uX2RlbnNpdHk6IDExMTcsXG4gICAgICB0aW1lX3pvbmU6ICdBbWVyaWNhL0xvc19BbmdlbGVzJyxcbiAgICB9LFxuICAgIHBvc3RhbDoge1xuICAgICAgY29uZmlkZW5jZTogMjAsXG4gICAgICBjb2RlOiAnOTgwMzInLFxuICAgIH0sXG4gICAgcmVnaXN0ZXJlZF9jb3VudHJ5OiB7XG4gICAgICBpc29fY29kZTogJ1VTJyxcbiAgICAgIGdlb25hbWVfaWQ6IDYyNTIwMDEsXG4gICAgICBuYW1lczoge30sXG4gICAgfSxcbiAgICBzdWJkaXZpc2lvbnM6IFt7XG4gICAgICBjb25maWRlbmNlOiA5OSwgaXNvX2NvZGU6ICdXQScsIGdlb25hbWVfaWQ6IDU4MTUxMzUsIG5hbWVzOiB7fSxcbiAgICB9XSxcbiAgICB0cmFpdHM6IHtcbiAgICAgIGF1dG9ub21vdXNfc3lzdGVtX251bWJlcjogNzkyMixcbiAgICAgIGF1dG9ub21vdXNfc3lzdGVtX29yZ2FuaXphdGlvbjogJ0NvbWNhc3QgQ2FibGUgQ29tbXVuaWNhdGlvbnMsIExMQycsXG4gICAgICBpcF9hZGRyZXNzOiAnMjYwMTo2MDE6ODE4MDo3Yjo5Y2MwOjk3Nzc6ZmFhYzo3NTMnLFxuICAgICAgaXNwOiAnQ29tY2FzdCBDYWJsZScsXG4gICAgICBvcmdhbml6YXRpb246ICdDb21jYXN0IENhYmxlJyxcbiAgICAgIHVzZXJfdHlwZTogJ3Jlc2lkZW50aWFsJyxcbiAgICB9LFxuICAgIHVybDogJ2h0dHBzOi8vanMubWF4bWluZC5jb20vZ2VvaXAvdjIuMS9jb3VudHJ5L21lJyxcbiAgfSxcbn07XG4iLCIvLyBAZmxvd1xuXG4vLyBpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuLy8gaW1wb3J0ICd1cmwtc2VhcmNoLXBhcmFtcy1wb2x5ZmlsbCc7XG5cbmltcG9ydCB7IGZldGNoLCBzY2hlbWFWYWxpZGF0b3IgfSBmcm9tICdAYXZhbGFyYS1tdGcvaGVscGVycy9saWIvc2hhcmVkJztcblxuLy8gTG9nZ2luZ1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlci1hcGknO1xuXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL2NvbmZpZyc7XG5cbi8vIE1JTEVTIE1BWE1JTkQgQkFDS1VQXG5cbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGNhcHR1cmVJbnB1dCxcbiAgc2V0SW5wdXRDYXB0dXJlVmFsaWQsXG4gIG1heG1pbmRGYWlsLFxuICBtYXhtaW5kUnVubmluZyxcbiAgbWF4bWluZFN1Y2Nlc3MsXG4gIG1heG1pbmRTdG9wcGVkLFxuICBtYXhtaW5kUHJldmVudGVkLFxufSBmcm9tICcuLi9saWIvYWN0aW9ucyc7XG5cbi8vIFNjaGVtYVxuaW1wb3J0IHsgbWF4bWluZEluc2lnaHRzU2NoZW1hIH0gZnJvbSAnLi4vc2NoZW1hL21heG1pbmQnO1xuXG4vLyBBUEkgU2V0dGluZ3NcbmltcG9ydCBBUElfU0VUVElOR1MgZnJvbSAnLi4vc2hhcmVkL2FwaS1zZXR0aW5ncyc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoIH0gZnJvbSAnLi4vbGliL3R5cGVzL2FjdGlvbnMnO1xuaW1wb3J0IHR5cGUgeyBSZXN1bHQgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBNYXhtaW5kUmVzcG9uc2VGYWlsLCBNYXhtaW5kUmVzcG9uc2VTdWNjZXNzIH0gZnJvbSAnLi4vbGliL3R5cGVzL21heG1pbmQnO1xuXG4vLyBtb2NrXG5pbXBvcnQgTUFYTUlORE1PQ0sgZnJvbSAnLi4vaGVscGVycy9tYXhtaW5kJztcblxuY29uc3QgbWF4bWluZFVybCA9IGNvbmZpZy5NQVhNSU5EX0FQSTtcbndpbmRvdy5hdmEubWF4bWluZEFQSVJ1bm5pbmcgPSAodHlwZW9mIHdpbmRvdy5hdmEubWF4bWluZEFQSVJ1bm5pbmcgIT09ICd1bmRlZmluZWQnKSA/IHdpbmRvdy5hdmEubWF4bWluZEFQSVJ1bm5pbmcgOiBmYWxzZTtcbndpbmRvdy5hdmEubWF4bWluZEhhc1JhbkFGUiA9ICh0eXBlb2Ygd2luZG93LmF2YS5tYXhtaW5kSGFzUmFuQUZSICE9PSAndW5kZWZpbmVkJykgPyB3aW5kb3cuYXZhLm1heG1pbmRIYXNSYW5BRlIgOiBmYWxzZTtcblxuZXhwb3J0IGNvbnN0IG1heG1pbmRBUEkgPSBhc3luYyAoZGlzcGF0Y2g6IERpc3BhdGNoLCBmb3JtSWQ6IHN0cmluZykgPT4ge1xuICBkaXNwYXRjaChtYXhtaW5kUnVubmluZygpKTtcbiAgY29uc3QgeyBtYXhtaW5kSGFzUmFuQUZSIH0gPSB3aW5kb3cuYXZhIHx8IHsgbWF4bWluZEhhc1JhbkFGUjogZmFsc2UgfTtcblxuICAvLyBmb3IgUUEvdGVzdGluZyBwdXJwb3NlcyB0byBlbnN1cmUgbWF4bWluZCBpcyBub3QgdHJpZ2dlcmVkXG4gIGlmICh3aW5kb3cgJiYgd2luZG93LmxvY2FsU3RvcmFnZSAmJiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2F2bHJNYXhtaW5kRW5hYmxlZCcpICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXZsck1heG1pbmRFbmFibGVkJykgPT09ICdmYWxzZScpIHtcbiAgICBkaXNwYXRjaChtYXhtaW5kU3RvcHBlZCgpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAod2luZG93ICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UgJiYgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhdmxyTWF4bWluZFRlc3RNb2NrUmVzdWx0cycpICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXZsck1heG1pbmRUZXN0TW9ja1Jlc3VsdHMnKS50b1N0cmluZygpID09PSAndHJ1ZScpIHtcbiAgICB3aW5kb3cuYXZhLm1heG1pbmQgPSBNQVhNSU5ETU9DSztcbiAgfVxuICBpZiAoKHdpbmRvdyAmJiB3aW5kb3cuYXZhICYmIHdpbmRvdy5hdmEubWF4bWluZCAmJiB3aW5kb3cuYXZhLm1heG1pbmQuSU5TSUdIVFMgJiYgT2JqZWN0LmtleXMod2luZG93LmF2YS5tYXhtaW5kLklOU0lHSFRTKS5sZW5ndGggPiAwKSB8fCBtYXhtaW5kSGFzUmFuQUZSKSB7XG4gICAgbG9nZ2VyKHtcbiAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICBtc2dUeXBlOiAnTWF4bWluZEFwaVByZXZlbnRlZCcsXG4gICAgICBmb3JtSWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdBUEkgY2FsbCBzdG9wcGVkLiBDYWxsIHRvIG1heG1pbmQgc2VydmljZSB3YXMgc3RvcHBlZCBiZWNhdXNlIGl0IHdhcyBmb3VuZCB0byBoYXZlIGJlZW4gYWxyZWFkeSBzZXQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCB7IG1heG1pbmQgfSA9IHdpbmRvdy5hdmE7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlucHV0VGFyZ2V0ID0ge1xuICAgICAgICBpZDogJ2NvdW50cnknLCB0eXBlOiAndGV4dCcsIHZhbHVlOiBtYXhtaW5kLklOU0lHSFRTLmNvdW50cnkuaXNvX2NvZGUsIGlucHV0VGFyZ2V0VHJhY2tBYmFuZG9uOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICBkaXNwYXRjaChjYXB0dXJlSW5wdXQoZGlzcGF0Y2gsIGZvcm1JZCwgaW5wdXRUYXJnZXQpKTtcbiAgICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZVZhbGlkKGZvcm1JZCwgaW5wdXRUYXJnZXQuaWQpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlcih7XG4gICAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICAgIG1zZ1R5cGU6ICdNYXhtaW5kQXBpUHJldmVudGVkRmFpbGVkJyxcbiAgICAgICAgZm9ybUlkLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ0FQSSBjYWxsIHN0b3BwZWQgZHVlIHRvIGV4aXN0aW5nIGNhbGwuIEhvd2V2ZXIsIG5vIGRhdGEgZm91bmQgaW4gd2luZG93Lm1heG1pbmQuIEZhaWxpbmcgb3ZlciB0byBtaWxlcycsXG4gICAgICAgICAgZXJyb3I6IGVycixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBkaXNwYXRjaChtYXhtaW5kUHJldmVudGVkKCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGVuZHBvaW50VXJsID0gYCR7bWF4bWluZFVybH1jb3VudHJ5L21lYDtcblxuICBjb25zdCByZXNwb25zZTogUmVzdWx0PE1heG1pbmRSZXNwb25zZUZhaWwgfCBNYXhtaW5kUmVzcG9uc2VTdWNjZXNzPiA9IGF3YWl0IGZldGNoKGVuZHBvaW50VXJsLCB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgfSwgQVBJX1NFVFRJTkdTLnRpbWVvdXQpLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0KTtcblxuICBpZiAoIXJlc3BvbnNlIHx8IChyZXNwb25zZSAmJiAhcmVzcG9uc2Uub2spKSB7XG4gICAgZGlzcGF0Y2gobWF4bWluZEZhaWwocmVzcG9uc2UubWVzc2FnZSwgZW5kcG9pbnRVcmwpKTtcbiAgICAvLyBsb2cgZmFpbHVyZVxuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdNYXhtaW5kQXBpRmFpbHVyZScsXG4gICAgICBmb3JtSWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdBUEkgY2FsbCBmYWlsZWQgdG8gbWF4bWluZCBzZXJ2aWNlLiBNYXliZSBibG9ja2VkJyxcbiAgICAgICAgcmVzcG9uc2U6IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgd2luZG93LmF2YS5tYXhtaW5kSGFzUmFuID0gdHJ1ZTtcbiAgICB3aW5kb3cuYXZhLm1heG1pbmRIYXNSYW5BRlIgPSB0cnVlO1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBSdW4gU2NoZW1hIFZhbGlkYXRpb25cbiAgbG9nZ2VyKHtcbiAgICBsZXZlbDogJ2luZm8nLFxuICAgIG1zZ1R5cGU6ICdNYXhtaW5kQXBpVmFsaWRhdGlvbicsXG4gICAgZm9ybUlkLFxuICAgIGRhdGE6IHtcbiAgICAgIG1lc3NhZ2U6ICdNQVhNSU5EIHNjaGVtYSB2YWxpZGF0aW9uIC0gYXBpL21heG1pbmQuanMgLSBDQUxMOiBJTlNJR0hUUycsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3Qgc2NoZW1hVmFsaWRhdGlvblJlc3BvbnNlID0gc2NoZW1hVmFsaWRhdG9yKG1heG1pbmRJbnNpZ2h0c1NjaGVtYSwgcmVzcG9uc2UpO1xuXG4gIGlmIChzY2hlbWFWYWxpZGF0aW9uUmVzcG9uc2UgJiYgIXNjaGVtYVZhbGlkYXRpb25SZXNwb25zZS5vaykge1xuICAgIC8vIFNpbGVudGx5IGZhaWwgc2NoZW1hLCBkbyBub3QgaW50ZXJydXB0IHVzZXIsIHNlbnQgdG8gc3VtbyBmb3IgbG9nZ2luZ1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdNYXhtaW5kQXBpVmFsaWRhdGlvbicsXG4gICAgICBmb3JtSWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdNQVhNSU5EIHNjaGVtYSB2YWxpZGF0aW9uIGZhaWx1cmUgLSBhcGkvbWF4bWluZC5qcyAtIENBTEw6IElOU0lHSFRTJyxcbiAgICAgICAgcmVzcG9uc2U6IEpTT04uc3RyaW5naWZ5KHNjaGVtYVZhbGlkYXRpb25SZXNwb25zZSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgd2luZG93LmF2YSA9IHdpbmRvdy5hdmEgfHwge307XG4gIHdpbmRvdy5hdmEubWF4bWluZCA9IHtcbiAgICBJTlNJR0hUUzogcmVzcG9uc2UudmFsdWUsXG4gIH07XG5cbiAgLy8gJEZsb3dGaXhNZTogVE9ETyAtIGZpbmQgb3V0IHdoeSB0aGlzIGlzIGxvb2tpbmcgYXQgZmFpbCB0eXBlIGFuZCBub3QganVzdCBzdWNjZXNzXG4gIGRpc3BhdGNoKG1heG1pbmRTdWNjZXNzKHJlc3BvbnNlLnZhbHVlLCBlbmRwb2ludFVybCkpO1xuICAvLyAkRmxvd0ZpeE1lOiBUT0RPIC0gZmluZCBvdXQgd2h5IHRoaXMgaXMgbG9va2luZyBhdCBmYWlsIHR5cGUgYW5kIG5vdCBqdXN0IHN1Y2Nlc3NcbiAgY29uc3QgaW5wdXRUYXJnZXQgPSB7IGlkOiAnY291bnRyeScsIHR5cGU6ICd0ZXh0JywgdmFsdWU6IHJlc3BvbnNlLnZhbHVlLmNvdW50cnkuaXNvX2NvZGUgfTtcbiAgZGlzcGF0Y2goY2FwdHVyZUlucHV0KGRpc3BhdGNoLCBmb3JtSWQsIGlucHV0VGFyZ2V0KSk7XG4gIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZVZhbGlkKGZvcm1JZCwgaW5wdXRUYXJnZXQuaWQpKTtcblxuICB3aW5kb3cuYXZhLm1heG1pbmRIYXNSYW4gPSB0cnVlO1xuICB3aW5kb3cuYXZhLm1heG1pbmRIYXNSYW5BRlIgPSB0cnVlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbWF4bWluZEFQSTtcbiIsIi8vIEBmbG93XG5cbi8vIGltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG4vLyBpbXBvcnQgJ3VybC1zZWFyY2gtcGFyYW1zLXBvbHlmaWxsJztcblxuaW1wb3J0IHsgZmV0Y2gsIHNjaGVtYVZhbGlkYXRvciB9IGZyb20gJ0BhdmFsYXJhLW10Zy9oZWxwZXJzL2xpYi9zaGFyZWQnO1xuXG4vLyBMb2dnaW5nXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyLWFwaSc7XG5cbmltcG9ydCBjb25maWcgZnJvbSAnLi4vY29uZmlnJztcblxuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgbWlsZXNNYXhtaW5kRmFpbCwgbWlsZXNNYXhtaW5kU3VjY2VzcywgbWlsZXNNYXhtaW5kUHJldmVudGVkLCBjYXB0dXJlSW5wdXQsIHNldElucHV0Q2FwdHVyZVZhbGlkLCBtaWxlc01heG1pbmRSdW5uaW5nXG59IGZyb20gJy4uL2xpYi9hY3Rpb25zJztcblxuLy8gU2NoZW1hXG5pbXBvcnQgeyBtYXhtaW5kSW5zaWdodHNTY2hlbWEgfSBmcm9tICcuLi9zY2hlbWEvbWF4bWluZCc7XG5cbi8vIEFQSSBTZXR0aW5nc1xuaW1wb3J0IEFQSV9TRVRUSU5HUyBmcm9tICcuLi9zaGFyZWQvYXBpLXNldHRpbmdzJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IFJlc3VsdCB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1heG1pbmRSZXNwb25zZUZhaWwsIE1heG1pbmRSZXNwb25zZVN1Y2Nlc3MgfSBmcm9tICcuLi9saWIvdHlwZXMvbWF4bWluZCc7XG5cbi8vIG1vY2tcbmltcG9ydCBNQVhNSU5ETU9DSyBmcm9tICcuLi9oZWxwZXJzL21heG1pbmQnO1xuaW1wb3J0IG1heG1pbmRBUEkgZnJvbSAnLi9tYXhtaW5kJztcblxuY29uc3QgbWF4bWluZFVybCA9IGNvbmZpZy5NSUxFU19NQVhNSU5EX0JBQ0tVUDtcbndpbmRvdy5hdmEubWlsZXNNYXhtaW5kQVBJUnVubmluZyA9ICh0eXBlb2Ygd2luZG93LmF2YS5taWxlc01heG1pbmRBUElSdW5uaW5nICE9PSAndW5kZWZpbmVkJykgPyB3aW5kb3cuYXZhLm1pbGVzTWF4bWluZEFQSVJ1bm5pbmcgOiBmYWxzZTtcbndpbmRvdy5hdmEubWlsZXNNYXhtaW5kSGFzUmFuID0gKHR5cGVvZiB3aW5kb3cuYXZhLm1pbGVzTWF4bWluZEhhc1JhbiAhPT0gJ3VuZGVmaW5lZCcpID8gd2luZG93LmF2YS5taWxlc01heG1pbmRIYXNSYW4gOiBmYWxzZTtcblxuZXhwb3J0IGNvbnN0IG1pbGVzTWF4bWluZEFQSSA9IGFzeW5jIChkaXNwYXRjaDogRGlzcGF0Y2gsIGZvcm1JZDogc3RyaW5nKSA9PiB7XG4gIC8vICRGbG93Rml4TWVcbiAgZGlzcGF0Y2gobWlsZXNNYXhtaW5kUnVubmluZygpKTtcbiAgY29uc3QgeyBtaWxlc01heG1pbmRIYXNSYW4gfSA9IHdpbmRvdy5hdmEgfHwgeyBtaWxlc01heG1pbmRIYXNSYW46IGZhbHNlIH07XG5cbiAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubG9jYWxTdG9yYWdlICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXZsck1heG1pbmRUZXN0TW9ja1Jlc3VsdHMnKSAmJiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2F2bHJNYXhtaW5kVGVzdE1vY2tSZXN1bHRzJykudG9TdHJpbmcoKSA9PT0gJ3RydWUnKSB7XG4gICAgd2luZG93LmF2YS5taWxlc01heG1pbmQgPSBNQVhNSU5ETU9DSztcbiAgfVxuICBpZiAoKHdpbmRvdyAmJiB3aW5kb3cuYXZhICYmIHdpbmRvdy5hdmEubWlsZXNNYXhtaW5kICYmIHdpbmRvdy5hdmEubWlsZXNNYXhtaW5kLklOU0lHSFRTICYmIE9iamVjdC5rZXlzKHdpbmRvdy5hdmEubWlsZXNNYXhtaW5kLklOU0lHSFRTKS5sZW5ndGggPiAwKSB8fCBtaWxlc01heG1pbmRIYXNSYW4pIHtcbiAgICBsb2dnZXIoe1xuICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgIG1zZ1R5cGU6ICdNYXhtaW5kQXBpUHJldmVudGVkJyxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ0FQSSBjYWxsIHN0b3BwZWQuIENhbGwgdG8gbWF4bWluZCBzZXJ2aWNlIHdhcyBzdG9wcGVkIGJlY2F1c2UgaXQgd2FzIGZvdW5kIHRvIGhhdmUgYmVlbiBhbHJlYWR5IHNldCcsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IHsgbWlsZXNNYXhtaW5kIH0gPSB3aW5kb3cuYXZhO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnB1dFRhcmdldCA9IHtcbiAgICAgICAgaWQ6ICdjb3VudHJ5JywgdHlwZTogJ3RleHQnLCB2YWx1ZTogbWlsZXNNYXhtaW5kLklOU0lHSFRTLmNvdW50cnkuaXNvX2NvZGUsIGlucHV0VGFyZ2V0VHJhY2tBYmFuZG9uOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICBkaXNwYXRjaChjYXB0dXJlSW5wdXQoZGlzcGF0Y2gsIGZvcm1JZCwgaW5wdXRUYXJnZXQpKTtcbiAgICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZVZhbGlkKGZvcm1JZCwgaW5wdXRUYXJnZXQuaWQpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgIGxvZ2dlcih7XG4gICAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICAgIG1zZ1R5cGU6ICdNYXhtaW5kQXBpUHJldmVudGVkRmFpbGVkJyxcbiAgICAgICAgZm9ybUlkLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ0FQSSBjYWxsIHN0b3BwZWQgZHVlIHRvIGV4aXN0aW5nIGNhbGwuIEhvd2V2ZXIsIG5vIGRhdGEgZm91bmQgaW4gd2luZG93Lm1heG1pbmQuIEZhaWxpbmcgb3ZlciB0byBtaWxlcycsXG4gICAgICAgICAgZXJyb3I6IGVycixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbWF4bWluZEFQSShkaXNwYXRjaCwgZm9ybUlkKTtcbiAgICB9XG4gICAgZGlzcGF0Y2gobWlsZXNNYXhtaW5kUHJldmVudGVkKCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGVuZHBvaW50VXJsID0gbWF4bWluZFVybDtcblxuICBjb25zdCByZXNwb25zZTogUmVzdWx0PE1heG1pbmRSZXNwb25zZUZhaWwgfCBNYXhtaW5kUmVzcG9uc2VTdWNjZXNzPiA9IGF3YWl0IGZldGNoKGVuZHBvaW50VXJsLCB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgfSwgQVBJX1NFVFRJTkdTLnRpbWVvdXQpLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0KTtcblxuICB3aW5kb3cuYXZhID0gd2luZG93LmF2YSB8fCB7fTtcbiAgbGV0IHsgbWlsZXNNYXhtaW5kIH0gPSB3aW5kb3cuYXZhIHx8IHsgbWlsZXNNYXhtaW5kOiB7fSB9O1xuICB3aW5kb3cuYXZhLm1pbGVzTWF4bWluZCA9IHtcbiAgICAuLi5taWxlc01heG1pbmQsXG4gICAgSU5TSUdIVFM6IHJlc3BvbnNlLFxuICB9O1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBkaXNwYXRjaChtaWxlc01heG1pbmRGYWlsKHJlc3BvbnNlLm1lc3NhZ2UsIGVuZHBvaW50VXJsKSk7XG4gICAgLy8gbG9nIGZhaWx1cmVcbiAgICBsb2dnZXIoe1xuICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICBtc2dUeXBlOiAnTWlsZXNNYXhtaW5kQXBpRmFpbHVyZScsXG4gICAgICBmb3JtSWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdBUEkgY2FsbCBmYWlsZWQgdG8gbWlsZXMgbWF4bWluZCBzZXJ2aWNlLicsXG4gICAgICAgIHJlc3BvbnNlOiBKU09OLnN0cmluZ2lmeShyZXNwb25zZSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHdpbmRvdy5hdmEubWlsZXNNYXhtaW5kSGFzUmFuID0gdHJ1ZTtcbiAgICBtYXhtaW5kQVBJKGRpc3BhdGNoLCBmb3JtSWQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFJ1biBTY2hlbWEgVmFsaWRhdGlvblxuICBsb2dnZXIoe1xuICAgIGxldmVsOiAnaW5mbycsXG4gICAgbXNnVHlwZTogJ01pbGVzTWF4bWluZEFwaVZhbGlkYXRpb24nLFxuICAgIGZvcm1JZCxcbiAgICBkYXRhOiB7XG4gICAgICBtZXNzYWdlOiAnTUlMRVMgTUFYTUlORCBzY2hlbWEgdmFsaWRhdGlvbiAtIGFwaS9taWxlcy1tYXhtaW5kLmpzIC0gQ0FMTDogSU5TSUdIVFMnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHNjaGVtYVZhbGlkYXRpb25SZXNwb25zZSA9IHNjaGVtYVZhbGlkYXRvcihtYXhtaW5kSW5zaWdodHNTY2hlbWEsIHJlc3BvbnNlKTtcblxuICBpZiAoc2NoZW1hVmFsaWRhdGlvblJlc3BvbnNlICYmICFzY2hlbWFWYWxpZGF0aW9uUmVzcG9uc2Uub2spIHtcbiAgICAvLyBTaWxlbnRseSBmYWlsIHNjaGVtYSwgZG8gbm90IGludGVycnVwdCB1c2VyLCBzZW50IHRvIHN1bW8gZm9yIGxvZ2dpbmdcbiAgICBsb2dnZXIoe1xuICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICBtc2dUeXBlOiAnTWF4bWluZEFwaVZhbGlkYXRpb24nLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiAnTUFYTUlORCBzY2hlbWEgdmFsaWRhdGlvbiBmYWlsdXJlIC0gYXBpL21heG1pbmQuanMgLSBDQUxMOiBJTlNJR0hUUycsXG4gICAgICAgIHJlc3BvbnNlOiBKU09OLnN0cmluZ2lmeShzY2hlbWFWYWxpZGF0aW9uUmVzcG9uc2UpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNvcHlpbmcgaW5zaWdodHMgcmVzcG9uc2Ugb2JqZWN0IHRvIHVwZGF0ZSBpc29Db2RlIHByb3BlcnR5IHRvIGlzb19jb2RlXG4gIGNvbnN0IG1vZGlmaWVkSW5zaWdodHNSZXNwb25zZSA9IHtcbiAgICAuLi5yZXNwb25zZS52YWx1ZSxcbiAgICBjb3VudHJ5OiB7XG4gICAgICAuLi5yZXNwb25zZS52YWx1ZSxcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIGlzb19jb2RlOiByZXNwb25zZS52YWx1ZS5jb3VudHJ5Lmlzb0NvZGUsXG4gICAgfSxcbiAgfTtcblxuICB3aW5kb3cuYXZhLm1pbGVzTWF4bWluZCA9IHtcbiAgICAuLi5taWxlc01heG1pbmQsXG4gICAgSU5TSUdIVFM6IG1vZGlmaWVkSW5zaWdodHNSZXNwb25zZSxcbiAgfTtcblxuICBtaWxlc01heG1pbmQgPSB7XG4gICAgLi4ubWlsZXNNYXhtaW5kLFxuICAgIElOU0lHSFRTOiBtb2RpZmllZEluc2lnaHRzUmVzcG9uc2UsXG4gIH07XG5cbiAgLy8gJEZsb3dGaXhNZTogVE9ETyAtIGZpbmQgb3V0IHdoeSB0aGlzIGlzIGxvb2tpbmcgYXQgZmFpbCB0eXBlIGFuZCBub3QganVzdCBzdWNjZXNzXG4gIGlmICghbWlsZXNNYXhtaW5kSGFzUmFuKSBkaXNwYXRjaChtaWxlc01heG1pbmRTdWNjZXNzKG1vZGlmaWVkSW5zaWdodHNSZXNwb25zZSwgZW5kcG9pbnRVcmwpKTtcblxuICB0cnkge1xuICAgIC8vICRGbG93Rml4TWU6IFRPRE8gLSBmaW5kIG91dCB3aHkgdGhpcyBpcyBsb29raW5nIGF0IGZhaWwgdHlwZSBhbmQgbm90IGp1c3Qgc3VjY2Vzc1xuICAgIGNvbnN0IGlucHV0VGFyZ2V0ID0geyBpZDogJ2NvdW50cnknLCB0eXBlOiAndGV4dCcsIHZhbHVlOiBtb2RpZmllZEluc2lnaHRzUmVzcG9uc2UuY291bnRyeS5pc29fY29kZSB9O1xuICAgIGRpc3BhdGNoKGNhcHR1cmVJbnB1dChkaXNwYXRjaCwgZm9ybUlkLCBpbnB1dFRhcmdldCkpO1xuICAgIGRpc3BhdGNoKHNldElucHV0Q2FwdHVyZVZhbGlkKGZvcm1JZCwgaW5wdXRUYXJnZXQuaWQpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICAgIGNvbnNvbGUubG9nKCdFcnJvciBzZXR0aW5nIG1heG1pbmQgY291bnRyeSBmaWVsZCcpO1xuICB9XG4gIHdpbmRvdy5hdmEubWlsZXNNYXhtaW5kSGFzUmFuID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1pbGVzTWF4bWluZEFQSTtcbiIsIi8vIEBmbG93IHN0cmljdFxuXG5pbXBvcnQgdHlwZSB7IEpzb25TY2hlbWEgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnRcbmNvbnN0IGZvcm1UZW1wbGF0ZURhdGFTY2hlbWE6IEpzb25TY2hlbWEgPSB7XG4gIHR5cGU6ICdvYmplY3QnLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgZmllbGRzOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBkaXNwbGF5VGV4dDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICBpZDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIGlkOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgbmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIHJlZGlyZWN0dXJsOiB7IHR5cGU6IFsnc3RyaW5nJywgJ251bGwnXSB9LFxuICAgIHRpdGxlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtVGVtcGxhdGVEYXRhU2NoZW1hO1xuIiwiLy8gQGZsb3dcbi8vIERvY3Ncbi8vIFVzZSB0aGUgZm9sbG93aW5nIFVSTHMgdG8gcmV2aWV3IGRvY3VtZW50YXRpb24gYXJvdW5kIGJyaXRlIHZlcmlmeSBzZXJ2aWNlXG4vLyBodHRwczovL3dpa2kuYXZhbGFyYS5jb20vZGlzcGxheS9NVC9Ccml0ZVZlcmlmeSstK0FQSStDYWxsc1xuLy8gaHR0cHM6Ly9taWxlcy5tYXJrZXRpbmcuYXZhbGFyYS5jb20vc3dhZ2dlci9kb2MvZW1haWxfdmVyaWZ5XG5cbmltcG9ydCB7IGZldGNoLCBzY2hlbWFWYWxpZGF0b3IgfSBmcm9tICdAYXZhbGFyYS1tdGcvaGVscGVycy9saWIvc2hhcmVkJztcblxuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9jb25maWcnO1xuXG4vLyBMb2dnaW5nXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyLWFwaSc7XG5cbi8vIERhdGFcbmltcG9ydCBGT1JNREFUQSBmcm9tICcuLi9jb25zdGFudHMvZm9ybS1kYXRhJztcblxuLy8gQWN0aW9uc1xuaW1wb3J0IHsgaW5pdEZvcm1BcHBsaWNhdGlvbiB9IGZyb20gJy4uL2xpYi9hY3Rpb25zJztcblxuLy8gU2NoZW1hXG5pbXBvcnQgZm9ybVRlbXBsYXRlRGF0YVNjaGVtYSBmcm9tICcuLi9zY2hlbWEvZm9ybS10ZW1wbGF0ZS1kYXRhJztcblxuLy8gQVBJIFNldHRpbmdzXG5pbXBvcnQgQVBJX1NFVFRJTkdTIGZyb20gJy4uL3NoYXJlZC9hcGktc2V0dGluZ3MnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJy4uL2xpYi90eXBlcy9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgUmVzdWx0IH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgRmV0Y2hGb3JtVGVtcGxhdGVEYXRhU3VjY2VzcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBVc2VySW5mbyB9IGZyb20gJy4uL2xpYi90eXBlcy91c2VyJztcblxuY29uc3QgZm9ybURhdGFBUEkgPSBjb25maWcuQVZBRk9STV9URU1QTEFURV9BUEk7XG5cbi8vIEFQSSBzaG91bGQgdGVjaG5pY2FsbHkgYWx3YXlzIHJldHVybiBzdWNjZXNzICgyMDApLCBob3dldmVyLCBlcnJvcnMgYXJlIHJlZmxlY3RlZCBpbiB0aGUgcmVzcG9uc2UgcmVzcG9uc2UudmFsdWUuc3RhdHVzXG5leHBvcnQgY29uc3QgZmV0Y2hGb3JtVGVtcGxhdGVEYXRhID0gYXN5bmMgKFxuICBkaXNwYXRjaDogRGlzcGF0Y2gsXG4gIGZvcm1JZDogc3RyaW5nLFxuICBjb25maWdzOiBzdHJpbmcsXG4gIGlzTW9kYWw6IGJvb2xlYW4sXG4gIHBhcmFtczogc3RyaW5nLFxuICB1cmw6IHN0cmluZyxcbiAgdXNlckluZm86IFVzZXJJbmZvLFxuICBkaXNhYmxlSGlkZUZpZWxkczogYm9vbGVhbixcbikgPT4ge1xuICBjb25zdCB7IGhvc3QgfSA9IHdpbmRvdyAmJiB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhvc3QgPyB3aW5kb3cubG9jYXRpb24gOiB7IGhvc3Q6ICdhdmFsYXJhLmNvbScgfTsgLy8gZGVmYXVsdCB0byBwcm9kdWN0aW9uXG5cbiAgbGV0IGVudiA9ICdwcm9kJzsgLy8gRGVmYXVsdCBlbnYgdG8gcHJvZHVjdGlvblxuICBsZXQgZW5wb2ludEVudiA9ICdwcm9kJztcblxuICBjb25zdCBhdXRob3JFbnZpcm9ubWVudHMgPSBbXG4gICAgJ2xvY2FsaG9zdDo4MDgwJyxcbiAgICAnYXV0aG9yLXA2NTgxNy1lNTY0OTQzLmFkb2JlYWVtY2xvdWQuY29tJyxcbiAgICAnYXV0aG9yLXA2NTgxNy1lNzQxODA5LmFkb2JlYWVtY2xvdWQuY29tJyxcbiAgICAnYXV0aG9yLXA2NTgxNy1lNzQxNzkzLmFkb2JlYWVtY2xvdWQuY29tJyxcbiAgXTtcblxuICBjb25zdCBlbmRQb2ludEVudmlyb25tZW50cyA9IHtcbiAgICBkZXY6IFsnbG9jYWxob3N0OjgwODAnLCAnYWVtLWRldi5hdmxyLm5ldDo0NTAyJywgJ2FlbS1kZXYuYXZsci5uZXQnLCAnYXV0aG9yLXA2NTgxNy1lNTY0OTQzLmFkb2JlYWVtY2xvdWQuY29tJywgJ3B1Ymxpc2gtcDY1ODE3LWU1NjQ5NDMuYWRvYmVhZW1jbG91ZC5jb20nLCAnY2xvdWQtZGV2LmF2bHIubmV0J10sIC8vIERldiBpbnN0YW5jZXNcbiAgICBzdGFnZTogWydhdXRob3ItcDY1ODE3LWU3NDE4MDkuYWRvYmVhZW1jbG91ZC5jb20nLCAncHVibGlzaC1wNjU4MTctZTc0MTgwOS5hZG9iZWFlbWNsb3VkLmNvbScsICdjbG91ZC1zdGFnZS5hdmxyLm5ldCddLCAvLyBTdGFnaW5nIGluc3RhbmNlc1xuICB9O1xuXG4gIC8vIERldGVybWluZXMgaWYgZXJyb3IgbWVzc2FnZSBzaG91bGQgYmUgZXhwb3NlZCBpbiBhdXRob3IgbW9kZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYXJyYXktY2FsbGJhY2stcmV0dXJuXG4gIGlmIChhdXRob3JFbnZpcm9ubWVudHMuaW5jbHVkZXMoaG9zdCkpIGVudiA9ICdhdXRob3InO1xuXG4gIC8vIERldGVybWluZXMgd2hhdCBlbnYgdG8gaGl0IHRoZSBBUEkgd2l0aFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYXJyYXktY2FsbGJhY2stcmV0dXJuXG4gIChPYmplY3Qua2V5cyhlbmRQb2ludEVudmlyb25tZW50cykpLm1hcCgoazogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGVuZFBvaW50RW52aXJvbm1lbnRzW2tdLmluY2x1ZGVzKGhvc3QpKSB7XG4gICAgICBlbnBvaW50RW52ID0gaztcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFB1bGwgdGhlIHRlbXBsYXRlIG91dCBvZiB0aGUgY29uZmlncyBhbmQgY2hlY2sgZm9yIHZhbHVlIGluIFMzLiAgRm9ybUlkIGlzIHRoZSB1dWlkIGZvciB0aGUgZm9ybSBvbiB0aGUgcGFnZSBhbmQgaW4gdGhlIHJlZHV4IGxvZ2dlci4gV2Ugc2hvdWxkIG5vdCBiZSBjaGVja2luZyBTMyBmb3IgdGhlIHBhc3NlZCBmb3JtSWQsIGJ1dCBmb3IgdGhlIHBhc3QgdGVtcGxhdGUgZnJvbSB0aGUgY29uZmlncy50ZW1wbGF0ZVxuICBsZXQgdGVtcGxhdGUgPSAnQkFTSUMnO1xuICBsZXQgY2hlY2tUZW1wbGF0ZSA9IG51bGw7XG4gIHRyeSB7XG4gICAgdGVtcGxhdGUgPSBKU09OLnBhcnNlKGNvbmZpZ3MpLnRlbXBsYXRlLnJlcGxhY2UoL1tcXFdfXSsvZ2ksICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNoZWNrVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgaWYgKCFjaGVja1RlbXBsYXRlKSB7XG4gICAgbG9nZ2VyKHtcbiAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgbXNnVHlwZTogJ2ZldGNoRm9ybVRlbXBsYXRlRGF0YScsXG4gICAgICBmb3JtSWQ6ICdudWxsJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ0Vycm9yIHJldHJpZXZpbmcgdGVtcGxhdGUgZGF0YS4gTm8gdGVtcGxhdGUgc2VudC4gRGVmYXVsdGluZyB0byBCQVNJQycsXG4gICAgICAgIHRlbXBsYXRlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSBGT1JNREFUQS5CQVNJQztcbiAgICBpZiAoZW52ICE9PSAncHJvZCcpIGRhdGEudGVtcGxhdGVFcnJvciA9ICdFcnJvcjogZm9ybUlkIG5vdCBzZXQuIE5vIHRlbXBsYXRlIHRvIHJldHJpZXZlLic7IC8vIE9ubHkgc2hvdyBvbiBsb3dlciBlbnZcbiAgICBkaXNwYXRjaChpbml0Rm9ybUFwcGxpY2F0aW9uKGNvbmZpZ3MsICdCQVNJQycsIGlzTW9kYWwsIHBhcmFtcywgdXJsLCB1c2VySW5mbywgZGlzYWJsZUhpZGVGaWVsZHMsIEZPUk1EQVRBLkJBU0lDKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVxdWVzdFVybCA9IGAke2Zvcm1EYXRhQVBJfS8ke2VucG9pbnRFbnZ9LyR7dGVtcGxhdGUudG9Mb3dlckNhc2UoKX0uanNvbmA7XG5cbiAgY29uc3QgcmVzcG9uc2U6IFJlc3VsdDxGZXRjaEZvcm1UZW1wbGF0ZURhdGFTdWNjZXNzPiA9IGF3YWl0IGZldGNoKHJlcXVlc3RVcmwsIHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICB9LCBBUElfU0VUVElOR1MudGltZW91dCkudGhlbigocmVzdWx0KSA9PiByZXN1bHQpO1xuXG4gIHdpbmRvdy5hdmEgPSB3aW5kb3cuYXZhIHx8IHt9O1xuICBjb25zdCB7IGZvcm1BUEkgfSA9IHdpbmRvdy5hdmEgfHwgeyBicml0ZVZlcmlmeToge30gfTtcbiAgd2luZG93LmF2YS5mb3JtRGF0YUFQSSA9IHtcbiAgICAuLi5mb3JtQVBJLFxuICAgIGVudixcbiAgICBbZm9ybUlkXToge1xuICAgICAgZW5kcG9pbnQ6IHJlcXVlc3RVcmwsXG4gICAgICByZXNwb25zZSxcbiAgICB9LFxuICB9O1xuXG4gIC8vIFJ1biBzY2hlbWEgdmFsaWRhdGlvblxuICBsb2dnZXIoe1xuICAgIGxldmVsOiAnaW5mbycsXG4gICAgbXNnVHlwZTogJ2ZldGNoRm9ybVRlbXBsYXRlRGF0YVNjaGVtYVZhbGlkYXRpb24nLFxuICAgIGZvcm1JZCxcbiAgICBkYXRhOiB7XG4gICAgICBtZXNzYWdlOiBgU2NoZW1hIHZhbGlkYXRpb24gZm9yIEFQSSB0ZW1wbGF0ZSBmZXRjaC4gRGF0YTogJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YCxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBzY2hlbWFWYWxpZGF0aW9uUmVzcG9uc2UgPSBzY2hlbWFWYWxpZGF0b3IoZm9ybVRlbXBsYXRlRGF0YVNjaGVtYSwgcmVzcG9uc2UpO1xuXG4gIGlmIChzY2hlbWFWYWxpZGF0aW9uUmVzcG9uc2UgJiYgIXNjaGVtYVZhbGlkYXRpb25SZXNwb25zZS5vaykge1xuICAgIC8vIFNpbGVudGx5IGZhaWwgc2NoZW1hLCBkbyBub3QgaW50ZXJydXB0IHVzZXIsIHNlbnQgdG8gU3VtbyBmb3IgbG9nZ2luZ1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdmZXRjaEZvcm1UZW1wbGF0ZURhdGFSZXNwb25zZVNjaGVtYVZhbGlkYXRpb24nLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiAnRXJyb3Igd2l0aCBBUEkgdGVtcGxhdGUgZmV0Y2ggcmVzcG9uc2Ugc2NoZW1hIHZhbGlkYXRpb24nLFxuICAgICAgICByZXNwb25zZTogSlNPTi5zdHJpbmdpZnkoc2NoZW1hVmFsaWRhdGlvblJlc3BvbnNlKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSByZXR1cm5lZCBpbmZvcm1hdGlvbiB0byBiZSB2YWxpZC4gQW55IG90aGVyIHN0YXR1cyBpcyBjb25zaWRlcmVkIGZhaWxlZFxuICAvLyBEaXNwYXRjaCBmYWlsdXJlIHRvIHJlZHV4IHJlZHVjZXIgcmVkdWNlci9mb3Jtcy5qcyBpZiBubyByZXNwb25zZSBpcyBmb3VuZFxuICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5vaykge1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdmZXRjaEZvcm1UZW1wbGF0ZURhdGEnLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiBgRXJyb3IgcmV0cmlldmluZyB0ZW1wbGF0ZSBkYXRhLiBUZW1wbGF0ZSBub3QgZm91bmQuICR7dGVtcGxhdGUudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgICByZXNwb25zZTogSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSBGT1JNREFUQS5CQVNJQztcbiAgICBpZiAoZW52ICE9PSAncHJvZCcpIGRhdGEudGVtcGxhdGVFcnJvciA9IGBFcnJvcjogXCIke3RlbXBsYXRlLnRvTG93ZXJDYXNlKCl9XCIgdGVtcGxhdGUgZG9lcyBub3QgZXhpc3QuIERlZmF1bHRpbmcgdG8gJ0JBU0lDJy5gOyAvLyBPbmx5IHNob3cgb24gbG93ZXIgZW52XG4gICAgZGlzcGF0Y2goaW5pdEZvcm1BcHBsaWNhdGlvbihjb25maWdzLCBmb3JtSWQsIGlzTW9kYWwsIHBhcmFtcywgdXJsLCB1c2VySW5mbywgZGlzYWJsZUhpZGVGaWVsZHMsIEZPUk1EQVRBLkJBU0lDKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gcmVzcG9uc2U7XG4gICAgY29uc3QgZGF0YSA9IHZhbHVlO1xuICAgIGRpc3BhdGNoKGluaXRGb3JtQXBwbGljYXRpb24oY29uZmlncywgZm9ybUlkLCBpc01vZGFsLCBwYXJhbXMsIHVybCwgdXNlckluZm8sIGRpc2FibGVIaWRlRmllbGRzLCBkYXRhKSk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZldGNoRm9ybVRlbXBsYXRlRGF0YTtcbiIsIi8vIEBmbG93IHN0cmljdFxuXG5pbXBvcnQgdHlwZSB7IEpzb25TY2hlbWEgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnRcbmV4cG9ydCBjb25zdCBzdWJtaXNzaW9uTGltaXRTY2hlbWE6IEpzb25TY2hlbWEgPSB7XG4gIHR5cGU6ICdvYmplY3QnLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgY2l0eToge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGNvbmZpZGVuY2U6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgZ2VvbmFtZV9pZDogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICBuYW1lczoge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVuOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBqYTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgY29udGluZW50OiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgY29kZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICBnZW9uYW1lX2lkOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgIG5hbWVzOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZGU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGVuOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBlczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgZnI6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGphOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAncHQtQlInOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBydTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgJ3poLUNOJzogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgbG9jYXRpb246IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBhY2N1cmFjeV9yYWRpdXM6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgYXZlcmFnZV9pbmNvbWU6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgbGF0aXR1ZGU6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgbG9uZ2l0dWRlOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgIG1ldHJvX2NvZGU6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgcG9wdWxhdGlvbl9kZW5zaXR5OiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgIHRpbWVfem9uZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHBvc3RhbDoge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGNvbmZpZGVuY2U6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgY29kZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgfSxcbiAgICAgIHJlZ2lzdGVyZWRfY291bnRyeToge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGlzb19jb2RlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgZ2VvbmFtZV9pZDogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICAgIG5hbWVzOiB7XG4gICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgZGU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgZW46IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgZXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgZnI6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgamE6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgJ3B0LUJSJzogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICBydTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAnemgtQ04nOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc3ViZGl2aXNpb25zOiB7XG4gICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgY29uZmlkZW5jZTogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICAgICAgZ2VvbmFtZV9pZDogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICAgICAgaXNvX2NvZGU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIG5hbWVzOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgZGU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICBlbjogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgIGVzOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgZnI6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICBqYTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgICdwdC1CUic6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICBydTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgICd6aC1DTic6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0cmFpdHM6IHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBhdXRvbm9tb3VzX3N5c3RlbV9udW1iZXI6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgICBhdXRvbm9tb3VzX3N5c3RlbV9vcmdhbml6YXRpb246IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICBpcF9hZGRyZXNzOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgaXNwOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgb3JnYW5pemF0aW9uOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgdXNlcl90eXBlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgdXJsOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgbWF4bWluZENvdW50cnlTY2hlbWE6IEpzb25TY2hlbWEgPSB7XG4gIHR5cGU6ICdvYmplY3QnLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgY29udGluZW50OiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgY29kZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICBnZW9uYW1lX2lkOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgIG5hbWVzOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZGU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGVuOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBlczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgZnI6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGphOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAncHQtQlInOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBydTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgJ3poLUNOJzogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgY291bnRyeToge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGNvbmZpZGVuY2U6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgaXNvX2NvZGU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgZ2VvbmFtZV9pZDogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICBuYW1lczoge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGRlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBlbjogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgZXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGZyOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBqYTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgJ3B0LUJSJzogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgcnU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICd6aC1DTic6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHJlZ2lzdGVyZWRfY291bnRyeToge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGlzb19jb2RlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIGdlb25hbWVfaWQ6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgbmFtZXM6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBkZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgZW46IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGVzOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBmcjogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgamE6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICdwdC1CUic6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIHJ1OiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAnemgtQ04nOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB0cmFpdHM6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBhdXRvbm9tb3VzX3N5c3RlbV9udW1iZXI6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgYXV0b25vbW91c19zeXN0ZW1fb3JnYW5pemF0aW9uOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIGlwX2FkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgaXNwOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIG9yZ2FuaXphdGlvbjogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB1c2VyX3R5cGU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn07XG4iLCIvLyBAZmxvd1xuXG4vLyBpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuLy8gaW1wb3J0ICd1cmwtc2VhcmNoLXBhcmFtcy1wb2x5ZmlsbCc7XG5cbmltcG9ydCB7IGZldGNoLCBzY2hlbWFWYWxpZGF0b3IgfSBmcm9tICdAYXZhbGFyYS1tdGcvaGVscGVycy9saWIvc2hhcmVkJztcbmltcG9ydCB7IGNoZWNrSWZJc0RldmVsb3AsIGNoZWNrRm9yRGVidWcgfSBmcm9tICdAYXZhbGFyYS1tdGcvaGVscGVycy9saWIvdWknO1xuXG4vLyBMb2dnaW5nXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyLWFwaSc7XG5cbmltcG9ydCBjb25maWcgZnJvbSAnLi4vY29uZmlnJztcblxuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgc2V0U3VibWlzc2lvbkxpbWl0RXhjZWVlZGVkLFxuICBzdWJtaXNzaW9uTGltaXRBcGlGYWlsZWQsXG59IGZyb20gJy4uL2xpYi9hY3Rpb25zJztcblxuLy8gU2NoZW1hXG5pbXBvcnQgeyBzdWJtaXNzaW9uTGltaXRTY2hlbWEgfSBmcm9tICcuLi9zY2hlbWEvc3VibWlzc2lvbi1saW1pdCc7XG5cbi8vIEFQSSBTZXR0aW5nc1xuaW1wb3J0IEFQSV9TRVRUSU5HUyBmcm9tICcuLi9zaGFyZWQvYXBpLXNldHRpbmdzJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IFJlc3VsdCwgUmVzdWx0RXJyb3IgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBTdWJtaXNzaW9uTGltaXRSZXNwb25zZVN1Y2Nlc3MgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3Qgc3VibWlzc2lvbkxpbWl0VVJMID0gY29uZmlnLk1JTEVTX0FQSTtcblxubGV0IHN1Ym1pc3Npb25MaW1pdFJ1bm5pbmcgPSBbXTtcbmV4cG9ydCBjb25zdCBzdWJtaXNzaW9uTGltaXRBUEkgPSBhc3luYyAoZGlzcGF0Y2g6IERpc3BhdGNoLCBmb3JtSWQ6IHN0cmluZywgc3VibWlzc2lvbmxpbWl0aWQ6IHN0cmluZywgc3VibWlzc2lvbmxpbWl0Q2FwOiBudW1iZXIpID0+IHtcbiAgY29uc3QgZW5kcG9pbnRVcmwgPSBgJHtzdWJtaXNzaW9uTGltaXRVUkx9L2xlYWRzL3N1Ym1pc3Npb24tbGltaXQvJHtzdWJtaXNzaW9ubGltaXRpZH1gO1xuICBpZiAoKHdpbmRvdyAmJiB3aW5kb3cuc3VibWlzc2lvbkxpbWl0ICYmIHdpbmRvdy5zdWJtaXNzaW9uTGltaXRbZm9ybUlkXSkgfHwgc3VibWlzc2lvbkxpbWl0UnVubmluZy5pbmNsdWRlcyhmb3JtSWQpKSB7XG4gICAgaWYgKGNoZWNrRm9yRGVidWcoKSB8fCBjaGVja0lmSXNEZXZlbG9wKCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZyhgU3VibWlzc2lvbiBsaW1pdCBhcGkgZm9yICR7Zm9ybUlkfSBhbHJlYWR5IGNhbGxlZCBvciBpcyBhbHJlYWR5IHJ1bm5pbmcuIFJ1bm5pbmc6ICR7SlNPTi5zdHJpbmdpZnkoc3VibWlzc2lvbkxpbWl0UnVubmluZyl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3VibWlzc2lvbkxpbWl0UnVubmluZy5wdXNoKGZvcm1JZCk7XG4gIHdpbmRvdy5hdmEgPSB3aW5kb3cuYXZhIHx8IHt9O1xuICBjb25zdCB7IHN1Ym1pc3Npb25MaW1pdCB9ID0gd2luZG93LmF2YSB8fCB7IHN1Ym1pc3Npb25MaW1pdDoge30gfTtcbiAgd2luZG93LmF2YS5zdWJtaXNzaW9uTGltaXQgPSB7XG4gICAgLi4uc3VibWlzc2lvbkxpbWl0LFxuICAgIFtmb3JtSWRdOiBudWxsLFxuICB9O1xuXG4gIGNvbnN0IHJlc3BvbnNlOiBSZXN1bHQ8U3VibWlzc2lvbkxpbWl0UmVzcG9uc2VTdWNjZXNzPiB8IFJlc3VsdEVycm9yID0gYXdhaXQgZmV0Y2goZW5kcG9pbnRVcmwsIHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICB9LCBBUElfU0VUVElOR1MudGltZW91dCkudGhlbigocmVzdWx0KSA9PiByZXN1bHQpO1xuXG4gIC8vIEFkZCByZXNwb25zZSB0byB3aW5kb3dcbiAgd2luZG93LmF2YS5zdWJtaXNzaW9uTGltaXQgPSB7XG4gICAgLi4uc3VibWlzc2lvbkxpbWl0LFxuICAgIFtmb3JtSWRdOiB7XG4gICAgICByZXNwb25zZSxcbiAgICAgIHN1Ym1pc3Npb25saW1pdGlkLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gUmVtb3ZlIGZyb20gcnVubmluZ1xuICBzdWJtaXNzaW9uTGltaXRSdW5uaW5nID0gc3VibWlzc2lvbkxpbWl0UnVubmluZy5maWx0ZXIoKGYpID0+IGYgIT09IGZvcm1JZCk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGRpc3BhdGNoKHN1Ym1pc3Npb25MaW1pdEFwaUZhaWxlZChmb3JtSWQsIHN1Ym1pc3Npb25saW1pdGlkLCByZXNwb25zZS5vaywgcmVzcG9uc2UpKTtcbiAgICAvLyBsb2cgZmFpbHVyZVxuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdTdWJtaXNzaW9uTGltaXRBcGlGYWlsdXJlJyxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ0FQSSBjYWxsIGZhaWxlZCB0byBNSUxFUyBzdWJtaXNzaW9uIGxpbWl0IHNlYXJjaCBzZXJ2aWNlLicsXG4gICAgICAgIHJlc3BvbnNlOiBKU09OLnN0cmluZ2lmeShyZXNwb25zZSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5vaykge1xuICAgIC8vIFJ1biBTY2hlbWEgVmFsaWRhdGlvblxuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgbXNnVHlwZTogJ1N1Ym1pc3Npb25MaW1pdEFwaVZhbGlkYXRpb24nLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiAnU3VibWlzc2lvbiBsaW1pdCBzY2hlbWEgdmFsaWRhdGlvbiAtIGFwaS9tYXhtaW5kLmpzIC0gQ0FMTDogSU5TSUdIVFMnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNjaGVtYVZhbGlkYXRpb25SZXNwb25zZSA9IHNjaGVtYVZhbGlkYXRvcihzdWJtaXNzaW9uTGltaXRTY2hlbWEsIHJlc3BvbnNlKTtcblxuICAgIGlmIChzY2hlbWFWYWxpZGF0aW9uUmVzcG9uc2UgJiYgIXNjaGVtYVZhbGlkYXRpb25SZXNwb25zZS5vaykge1xuICAgICAgLy8gU2lsZW50bHkgZmFpbCBzY2hlbWEsIGRvIG5vdCBpbnRlcnJ1cHQgdXNlciwgc2VudCB0byBzdW1vIGZvciBsb2dnaW5nXG4gICAgICBsb2dnZXIoe1xuICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgbXNnVHlwZTogJ1N1Ym1pc3Npb25MaW1pdEFwaVZhbGlkYXRpb24nLFxuICAgICAgICBmb3JtSWQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBtZXNzYWdlOiAnU3VibWlzc2lvbiBsaW1pdCBzY2hlbWEgdmFsaWRhdGlvbiBmYWlsdXJlIC0gYXBpL21heG1pbmQuanMgLSBDQUxMOiBJTlNJR0hUUycsXG4gICAgICAgICAgcmVzcG9uc2U6IEpTT04uc3RyaW5naWZ5KHNjaGVtYVZhbGlkYXRpb25SZXNwb25zZSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHN1Ym1pc3Npb25MaW1pdENvdW50IH0gPSByZXNwb25zZS52YWx1ZSB8fCB7IHN1Ym1pc3Npb25MaW1pdENvdW50OiAxIH07XG4gICAgaWYgKHN1Ym1pc3Npb25MaW1pdENvdW50ID49IHN1Ym1pc3Npb25saW1pdENhcCkgZGlzcGF0Y2goc2V0U3VibWlzc2lvbkxpbWl0RXhjZWVlZGVkKGZvcm1JZCkpO1xuICAgIGlmIChzdWJtaXNzaW9uTGltaXRDb3VudCA9PT0gMCkge1xuICAgICAgbG9nZ2VyKHtcbiAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgIG1zZ1R5cGU6ICdTdWJtaXNzaW9uTGltaXRBcGlGYWlsdXJlJyxcbiAgICAgICAgZm9ybUlkLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ1N1Ym1pc3Npb24gbGltaXQgY291bnQgQVBJIGNhbGwgZmFpbGVkIGFuZCByZXR1cm5lZCAwLiBDaGVjayBNSUxFUyBBUEkgZW5kcG9pbnQnLFxuICAgICAgICAgIHJlc3BvbnNlOiBKU09OLnN0cmluZ2lmeShyZXNwb25zZSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGRpc3BhdGNoKHNldFN1Ym1pc3Npb25MaW1pdEV4Y2VlZWRlZChmb3JtSWQpKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHN1Ym1pc3Npb25MaW1pdEFQSTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBwYWNrYWdlSnNvbiBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nO1xuXG5leHBvcnQgY29uc3Qgc2V0UGFja2FnZVN0YXRzID0gKCkgPT4ge1xuICBjb25zdCB7IHZlcnNpb24gfSA9IHBhY2thZ2VKc29uO1xuICB3aW5kb3cuYXZhLnN0YXRzID0ge1xuICAgIHZlcnNpb24sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZXRQYWNrYWdlU3RhdHM7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHsgaXNKc29uIH0gZnJvbSAnQGF2YWxhcmEtbXRnL2hlbHBlcnMvbGliL3VpJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9hcGkvbG9nZ2VyLWFwaSc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IEZvcm1BdHRyaWJ1dGVzLCBGb3JtVGhlbWVPZmZzZXRBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vbGliL3R5cGVzL2Zvcm1zJztcblxuLy8gSGVscGVyIHRvIHZhbGlkYXRlIGVsZW1lbnRzIHJlcXVpcmVkIHRvIGluaXQgZm9ybSByZW5kZXJcbi8vIEByZXR1cm4geyB2b2lkIH0gKCBubyByZXR1cm4gKVxuLy8gdXNlZCBpbiBlbnRyeS5qc1xuZXhwb3J0IGNvbnN0IGZvcm1Jbml0VmFsaWRhdGlvbiA9IChvblN5c3RlbUVycm9yOiAoaWQ6IHN0cmluZywgZXJyb3I6IHN0cmluZywgaW5mbzogc3RyaW5nLCBzdGF0dXNDb2RlOiBudW1iZXIpID0+IHZvaWQsIGZvcm1JZDogc3RyaW5nLCBjb25maWdzOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IHZvaWQgPT4ge1xuICBpZiAoIWNvbmZpZ3MgfHwgY29uZmlncyA9PT0gbnVsbCB8fCAoY29uZmlncyAhPT0gbnVsbCAmJiAhaXNKc29uKGNvbmZpZ3MpKSkge1xuICAgIGNvbnN0IHJlYWRhYmxlQ29uZmlncyA9IGNvbmZpZ3MgPT09IG51bGwgPyAnbnVsbCcgOiBjb25maWdzO1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdSZWdleEZpZWxkVmFsaWRhdGlvbkVycm9yJyxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ05vbi1leGlzdGFudCBvciBNYWxmb3JtZWQgY29uZmlnJyxcbiAgICAgICAgY29uZmlnczogSlNPTi5zdHJpbmdpZnkocmVhZGFibGVDb25maWdzKSxcbiAgICAgICAgbG9jYXRpb246ICdlbnRyeS5qcyBjb21wb25lbnREaWRNb3VudCgpIGluIGhlbHBlcnMvaW5kZXguanMnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufTtcblxuLy8gSGVscGVyIHRvIGNoZWNrIHRoZSB0aGVtZSBmb3IgaW5saW5lIGZvcm0gc3R5bGVcbi8vIEByZXR1cm4geyBCb29sZWFuIH1cbmV4cG9ydCBjb25zdCBpc0Zvcm1EaXNwbGF5SW5saW5lID0gKGFjdGl2ZURhdGE6IEZvcm1BdHRyaWJ1dGVzIHwgbnVsbCA9IG51bGwpOiBib29sZWFuID0+IHtcbiAgaWYgKGFjdGl2ZURhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEJvb2xlYW4oYWN0aXZlRGF0YS50aGVtZSAmJiBhY3RpdmVEYXRhLnRoZW1lLmxheW91dCAmJiBhY3RpdmVEYXRhLnRoZW1lLmxheW91dCA9PT0gJ2lubGluZScpO1xufTtcblxuLy8gSGVscGVyIHRvIHB1bGwgdGhlIG9mZnNldCB2YWx1ZSBmcm9tIHRoZW1lXG4vLyBAcmV0dXJuIHsgc3RyaW5nIHwgbnVsbCB9XG5leHBvcnQgY29uc3QgZ2V0T2Zmc2V0VmlldyA9IChhY3RpdmVEYXRhOiBGb3JtQXR0cmlidXRlcyk6IEZvcm1UaGVtZU9mZnNldEF0dHJpYnV0ZXMgfCBudWxsID0+IHtcbiAgaWYgKGFjdGl2ZURhdGEgJiYgYWN0aXZlRGF0YSAhPT0gbnVsbCAmJiBhY3RpdmVEYXRhLnRoZW1lICYmIGFjdGl2ZURhdGEudGhlbWUub2Zmc2V0KSB7XG4gICAgcmV0dXJuIGFjdGl2ZURhdGEudGhlbWUub2Zmc2V0O1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrRm9ybU1vZGFsID0gKGVsZW06ID9FbGVtZW50KSA9PiB7XG4gIGlmIChlbGVtIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbS5jbGFzc0xpc3QgJiYgKGVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdtb2RhbC1ib2R5JykgfHwgZWxlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2F2YWZvcm0tbW9kYWwtYm9keScpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChlbGVtLnBhcmVudEVsZW1lbnQgJiYgZWxlbS5wYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBjaGVja0Zvcm1Nb2RhbChlbGVtLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7IC8vIEFzc3VtZXMgdGhhdCBubyBlbGVtZW50IHdhcyBmb3VuZCB3aXRoIGVpdGhlciBjbGFzcyB0eXBlXG4gIH1cbiAgcmV0dXJuIGZhbHNlOyAvLyBBc3N1bWVzIHRoYXQgZWxlbSBpcyBub3QgYW4gSFRNTEVsZW1lbnQgdGhhdCBjYW4gYmUgY2hlY2tlZFxufTtcblxuLy8gSGVscGVyIHRvIGNoZWNrIGlmIGxvY2FsU3RvcmFnZSBhdmxyUHJldmVudFN1Ym1pdCBpcyBzZXRcbmV4cG9ydCBjb25zdCBjaGVja0ZvclN1Ym1pc3Npb25TdXByZXNzaW9uID0gKCk6IGJvb2xlYW4gPT4gQm9vbGVhbih3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2F2bHJQcmV2ZW50U3VibWl0JykgJiYgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhdmxyUHJldmVudFN1Ym1pdCcpID09PSAndHJ1ZScpO1xuXG4vLyBIZWxwZXIgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBpZiBsb2FkZXIgc2hvdWxkIGJlIHNob3duIG9yIG5vdFxuLy8gQHJldHVybiB7IEJvb2wgfVxuZXhwb3J0IGNvbnN0IGdldFNob3dMb2FkZXIgPSAoYWN0aXZlRGF0YTogRm9ybUF0dHJpYnV0ZXMgfCBudWxsID0gbnVsbCk6IGJvb2xlYW4gPT4ge1xuICBpZiAoYWN0aXZlRGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB7IHRoZW1lIH0gPSBhY3RpdmVEYXRhO1xuICByZXR1cm4gdGhlbWUgJiYgdGhlbWUuc2hvd0xvYWRlciA/IHRoZW1lLnNob3dMb2FkZXIgOiBmYWxzZTtcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBzZXQgdGhlIGxvYWRpbmcgc3Bpbm5lciBwb3NpdGlvblxuLy8gQHJldHVybiB7IEVudW0gfVxuZXhwb3J0IGNvbnN0IGdldExvYWRlclBvc2l0aW9uID0gKGFjdGl2ZURhdGE6IEZvcm1BdHRyaWJ1dGVzIHwgbnVsbCA9IG51bGwpOiAnb3ZlcmxheScgfCAnYnV0dG9uJyA9PiB7XG4gIGlmIChhY3RpdmVEYXRhID09PSBudWxsKSByZXR1cm4gJ292ZXJsYXknO1xuICBjb25zdCB7IHRoZW1lIH0gPSBhY3RpdmVEYXRhO1xuICByZXR1cm4gdGhlbWUgJiYgdGhlbWUubG9hZGVyUG9zaXRpb24gPyB0aGVtZS5sb2FkZXJQb3NpdGlvbiA6ICdvdmVybGF5Jztcbn07XG5cbi8vIEhlbHBlciB0byBhZGQgc3R5bGVzIHRvIHRoZSBtYWluIGNvbnRhaW5lclxuLy8gQHJldHVybiBub3RoaW5nXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvUm9vdERpdiA9IChlbDogYW55LCB0ZW1wbGF0ZTogc3RyaW5nLCBpc01vZGFsOiBib29sZWFuID0gZmFsc2UpID0+IHtcbiAgaWYgKCFlbC5zdHlsZSkgcmV0dXJuO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuICBlbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGVtcGxhdGUnLCB0ZW1wbGF0ZSk7XG4gIGVsLnN0eWxlLnBvc2l0aW9uID0gaXNNb2RhbCA/ICdzdGF0aWMnIDogJ3JlbGF0aXZlJztcbiAgZWwuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgZWwuc3R5bGVbJ2ZsZXgtZGlyZWN0aW9uJ10gPSAnY29sdW1uJztcbiAgLyogZXNsaW50LWVuYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xufTtcblxuLy8gSGVscGVyIHRvIGNsZWFyIGZvcm0gY2FwdHVyZWQgdmFsdWVzXG4vLyBAcmV0dXJuIHsgdm9pZCB9XG5leHBvcnQgY29uc3QgcmVnaXN0ZXJIZWxwZXJGdW5jdGlvblRvV2luZG93ID0gKGZ1bmN0aW9uTmFtZTogc3RyaW5nLCBwYXNzZWRGdW5jdGlvbjogRnVuY3Rpb24pID0+IHtcbiAgaWYgKHR5cGVvZiBwYXNzZWRGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJyB8fCAhZnVuY3Rpb25OYW1lKSByZXR1cm47XG4gIHdpbmRvd1tmdW5jdGlvbk5hbWVdID0gcGFzc2VkRnVuY3Rpb247XG59O1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0T1MgPSAoKTogc3RyaW5nID0+IHtcbiAgaWYgKCF3aW5kb3cgfHwgKHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yICYmICF3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkpIHJldHVybiAndW5rbm93bic7XG5cbiAgY29uc3Qgc2VhcmNoU3RyaW5nID0gKGRhdGEpOiBzdHJpbmcgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICAgIGNvbnN0IHsgdXNlckFnZW50IH0gPSB3aW5kb3cubmF2aWdhdG9yO1xuICAgICAgICBpZiAoKHVzZXJBZ2VudCkuaW5kZXhPZihkYXRhW2ldLnN1YlN0cmluZykgIT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGFbaV0uaWRlbnRpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICd1bmtub3duJztcbiAgfTtcblxuICBjb25zdCBvc1ZlcnNpb25zID0gW1xuICAgIHtcbiAgICAgIHN1YlN0cmluZzogJ2lQaG9uZScsXG4gICAgICBpZGVudGl0eTogJ2lPUycsXG4gICAgfSxcbiAgICB7XG4gICAgICBzdWJTdHJpbmc6ICdpUGFkJyxcbiAgICAgIGlkZW50aXR5OiAnaU9TJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHN1YlN0cmluZzogJ2lQb2QnLFxuICAgICAgaWRlbnRpdHk6ICdpT1MnLFxuICAgIH0sXG4gICAge1xuICAgICAgc3ViU3RyaW5nOiAnQW5kcm9pZCcsXG4gICAgICBpZGVudGl0eTogJ0FuZHJvaWQnLFxuICAgIH0sXG4gICAge1xuICAgICAgc3ViU3RyaW5nOiAnV2luJyxcbiAgICAgIGlkZW50aXR5OiAnV2luZG93cycsXG4gICAgfSxcbiAgICB7XG4gICAgICBzdWJTdHJpbmc6ICdNYWMnLFxuICAgICAgaWRlbnRpdHk6ICdtYWNPUycsXG4gICAgfSxcbiAgICB7XG4gICAgICBzdWJTdHJpbmc6ICdMaW51eCcsXG4gICAgICBpZGVudGl0eTogJ0xpbnV4JyxcbiAgICB9LFxuICBdO1xuXG4gIHJldHVybiBzZWFyY2hTdHJpbmcob3NWZXJzaW9ucyk7XG59O1xuIiwiLy8gQGZsb3cgc3RyaWN0LWxvY2FsXG5cbnR5cGUgQ29sb3JzID0ge1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmcsXG59O1xuXG5jb25zdCBDT0xPUlM6IENvbG9ycyA9IHtcbiAgYXZhdGF4Qmx1ZTogJyMwMjdGQUQnLFxuICBibGFjazogJyMxQTFBMUEnLFxuICBibHVlOiAnIzA1OUJEMicsXG4gIGJyaWdodEJsdWU6ICcjMjFCN0Y5JyxcbiAgYnV0dG9uUHJpbWFyeTogJ3JnYigyLCAxMjcsIDE3MyknLFxuICBidXR0b25Ib3ZlcjogJ3JnYigyLCAxMjcsIDE3MywgOTAlKScsXG4gIGRhcmtCbHVlOiAnIzA1ODdCRScsXG4gIGRhcmtHcmVlbjogJyMxQTdBMTgnLFxuICBkYXJrT3JhbmdlOiAnI0U2NTAwMCcsXG4gIGRhcmtlcmtCbHVlOiAnIzUwNjQ3MCcsXG4gIGRhcmtSZWQ6ICcjNzQwYzBjJyxcbiAgZGlzYWJsZWRHcmF5OiAnI0VGRUZFRicsXG4gIGVycm9yUmVkOiAnI0Q5NjA0RicsXG4gIGdyZWVuOiAnIzIyQUUzNicsXG4gIGdyZXkxOiAnIzVGNjA2MicsXG4gIGdyZXkyOiAnIzkxOTE5NScsXG4gIGdyZXkzOiAnI0VBRUFFQScsXG4gIGdyZXk0OiAnI0Y1RjZGQScsXG4gIGdyZXk0YTE6ICcjRDdEN0Q3JyxcbiAgZ3JleTRhMjogJyNDQ0MnLFxuICBncmV5NGEzOiAnI0U3RTdFNycsXG4gIGdyZXk1OiAnIzMzMycsXG4gIGdyZXlkYXJrOiAnIzZmNmY2ZicsXG4gIGlucHV0R3JleTogJyNEREQnLFxuICByZWQ6ICcjQzcwMDAwJyxcbiAgbGlnaHRCbHVlOiAnI0U0RUZGNicsXG4gIGxpZ2h0R3JlZW46ICcjRDlFN0QzJyxcbiAgbGlnaHRSZWQ6ICcjRjRDQ0NDJyxcbiAgbGlnaHRZZWxsb3c6ICcjRkZGQUU2JyxcbiAgb3JhbmdlOiAnI0ZBNjQwMCcsXG4gIG9yYW5nZUhvdmVyOiAnI0U2NTAwMCcsXG4gIHRyYW5zcGFyZW50OiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwKScsXG4gIHRyYW5zcGFyZW50SG92ZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDk4MDM5MjE1Njg2Mjc0NSknLFxuICB0cmFuc3BhcmVudEZvY3VzOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI5ODAzOTIxNTY4NjI3NSknLFxuICB2YWxpZEdyZWVuOiAnIzIyQUUzNicsXG4gIHllbGxvdzogJyNGRURCNEMnLFxuICB3aGl0ZTogJyNGRkYnLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ09MT1JTO1xuIiwiLy8gQGZsb3cgc3RyaWN0LWxvY2FsXG5cbmltcG9ydCBDT0xPUlMgZnJvbSAnLi9jb2xvcnMnO1xuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG5jb25zdCBnZXRQaXhlbCA9IChwaXhlbDogbnVtYmVyKTogc3RyaW5nID0+IGAke3BpeGVsfXB4YDtcblxuY29uc3QgZ2V0SGV4Q29sb3IgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGAjJHt2YWx1ZS5yZXBsYWNlKC9cXFcvLCAnJyl9YDtcbn07XG5cbi8vIEZMT1cgVFlQRVxudHlwZSBGb3JtQ29uc3RhbnRzID0ge1xuICBidXR0b246IHtcbiAgICBhY3RpdmU6IHN0cmluZyxcbiAgICBjb2xvcjogc3RyaW5nLFxuICAgIGRpc2FibGVkOiBzdHJpbmcsXG4gIH0sXG4gIGZvbnQ6IHtcbiAgICBmYW1pbHk6IHtcbiAgICAgIGFwZXRlcnVhOiBBcnJheTxzdHJpbmc+LFxuICAgICAgZGVmYXVsdDogQXJyYXk8c3RyaW5nPixcbiAgICB9LFxuICAgIHNpemU6IHN0cmluZyxcbiAgfSxcbiAgZmllbGQ6IHtcbiAgICBiYWNrZ3JvdW5kOiB7XG4gICAgICBjb2xvcjogc3RyaW5nLFxuICAgIH0sXG4gICAgYm9yZGVyOiB7XG4gICAgICByYWRpdXM6IHN0cmluZyxcbiAgICAgIGNvbG9yOiBzdHJpbmcsXG4gICAgfSxcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogc3RyaW5nLFxuICAgICAgc2l6ZTogc3RyaW5nLFxuICAgIH0sXG4gICAgbWluSGVpZ2h0OiBzdHJpbmcsXG4gICAgcGxhY2VIb2xkZXI6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogc3RyaW5nLFxuICAgICAgZm9udENvbG9yOiBzdHJpbmcsXG4gICAgfSxcbiAgfSxcbn07XG5cbi8vIENPTlNUQU5UXG5leHBvcnQgY29uc3QgRk9STVRIRU1FOiBGb3JtQ29uc3RhbnRzID0ge1xuICBidXR0b246IHtcbiAgICBhY3RpdmU6IENPTE9SUy5vcmFuZ2UsXG4gICAgY29sb3I6IENPTE9SUy53aGl0ZSxcbiAgICBkaXNhYmxlZDogQ09MT1JTLmRpc2FibGVkR3JheSxcbiAgfSxcbiAgZm9udDoge1xuICAgIGZhbWlseToge1xuICAgICAgYXBldGVydWE6IFsnQXBlcnR1cmEnLCAnc291cmNlLXNhbnMtcHJvJywgJ0FyaWFsJywgJ3NhbnMtc2VyaWYnXSxcbiAgICAgIGRlZmF1bHQ6IFsnc291cmNlLXNhbnMtcHJvJywgJ0FyaWFsJywgJ3NhbnMtc2VyaWYnXSxcbiAgICB9LFxuICAgIHNpemU6IGdldFBpeGVsKDE4KSxcbiAgfSxcbiAgZmllbGQ6IHtcbiAgICBiYWNrZ3JvdW5kOiB7XG4gICAgICBjb2xvcjogQ09MT1JTLndoaXRlLFxuICAgIH0sXG4gICAgYm9yZGVyOiB7XG4gICAgICByYWRpdXM6IGdldFBpeGVsKDMpLFxuICAgICAgY29sb3I6IGdldEhleENvbG9yKENPTE9SUy5ncmV5ZGFyayksXG4gICAgfSxcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogQ09MT1JTLmdyZXkyLFxuICAgICAgc2l6ZTogZ2V0UGl4ZWwoMTgpLFxuICAgIH0sXG4gICAgbWluSGVpZ2h0OiBnZXRQaXhlbCg1MCksXG4gICAgcGxhY2VIb2xkZXI6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogQ09MT1JTLnRyYW5zcGFyZW50LFxuICAgICAgZm9udENvbG9yOiBDT0xPUlMuZ3JleWRhcmssXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZPUk1USEVNRTtcbiIsIi8vIEBmbG93XG5cbnR5cGUgQnJlYWtQb2ludHMgPSB7XG4gIHRhYmxldDogbnVtYmVyLFxuICBwaG9uZTogbnVtYmVyLFxufTtcblxuZXhwb3J0IGNvbnN0IGJyZWFrUG9pbnRzOiBCcmVha1BvaW50cyA9IHtcbiAgdGFibGV0OiA4MzAsXG4gIHBob25lOiA1ODAsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBicmVha1BvaW50cztcbiIsIi8vIEBmbG93IHN0cmljdC1sb2NhbFxuXG5jb25zdCBicm93c2VyU3VwcG9ydDogQXJyYXk8c3RyaW5nPiA9IFsnLW1vei0nLCAnLW1zLScsICctby0nLCAnLXdlYmtpdC0nXTtcblxuZXhwb3J0IGNvbnN0IHNldEJyb3dzZXJDb21wYXRpYmlsaXR5ID0gKGFzc2V0OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBjb21wYXRpYmxpdHkgPSBbXTsgLy8gZ2V0IGNyb3NzIGJyb3dzZXIgdmFsdWVzXG4gIGJyb3dzZXJTdXBwb3J0Lm1hcCgoYikgPT4gY29tcGF0aWJsaXR5LnB1c2goYCR7Yn0ke2Fzc2V0fTogJHt2YWx1ZX1gKSk7IC8vIGNyZWF0ZSBjcm9zcyBicm93c2VyIHZhbHVlXG4gIGNvbXBhdGlibGl0eS5wdXNoKGAke2Fzc2V0fTogJHt2YWx1ZX07YCk7IC8vIHB1c2ggc3RhdGljIHZhbHVlXG4gIHJldHVybiBjb21wYXRpYmxpdHkuam9pbignOycpOyAvLyBNYWtlIHN0cmluZ1xufTtcblxuZXhwb3J0IGNvbnN0IHNldEZvbnRGYW1pbHkgPSAoZm9udEZhbWlseTogQXJyYXk8c3RyaW5nPikgPT4gZm9udEZhbWlseS5qb2luKCcsICcpO1xuXG5leHBvcnQgY29uc3Qgc2V0SWNvTW9vbkljb24gPSAoaWNvbjogc3RyaW5nLCBjb2xvcjogc3RyaW5nID0gJyNGNjAnLCBwb3NpdGlvbjogc3RyaW5nID0gJ2JlZm9yZScpID0+IGBcbiAgJjoke3Bvc2l0aW9ufSB7XG4gICAgY29udGVudDogXCIke2ljb259XCI7XG4gICAgY29sb3I6ICR7Y29sb3J9O1xuICAgIGZvbnQtZmFtaWx5OiAnaWNvbW9vbicgIWltcG9ydGFudDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgZm9udC12YXJpYW50OiBub3JtYWw7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgc3BlYWs6IG5vbmU7XG4gIH1cbmA7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgc3R5bGVkLCB7IGNzcyB9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBDT0xPUlMgZnJvbSAnLi4vY29uZmlnL2NvbG9ycyc7XG5pbXBvcnQgVEhFTUUgZnJvbSAnLi4vY29uZmlnL2Zvcm0tdGhlbWUnO1xuaW1wb3J0IEJSRUFLUE9JTlRTIGZyb20gJy4uLy4uL2NvbnN0YW50cy9icmVha3BvaW50cyc7XG5cbmltcG9ydCB7IHNldEJyb3dzZXJDb21wYXRpYmlsaXR5LCBzZXRGb250RmFtaWx5IH0gZnJvbSAnLi4vaGVscGVycyc7XG5cbi8vIEFjY2VwdHMgZm9ybSBkYXRhIHRoZW1lIGF0dHJpYnV0ZXMgdG8gb3B0aW9uIG91dCB0aGUgYmxvdyBlbGVtZW50c1xuLy8gY29udGFpbmVyT2Zmc2V0OiBsZWZ0LCByaWdodFxuLy8gY29udGFpbmVyT2Zmc2V0TWluV2lkdGg6IHN0cmluZyB2YWx1ZS4gRGVzaWduL0RldiBvcHRpb24gZm9yIHB4IG9yICVcbi8vIGNvbnRhaW5lck9mZnNldFdpZHRoOiBzdHJpbmcgdmFsdWUuIERlc2lnbi9EZXYgb3B0aW9uIGZvciBweCBvciAlXG5jb25zdCBJbmxpbmVGb3JtRGlzcGxheSA9IGNzc2BcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICA+ICoge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1yaWdodDogJHsocHJvcHM6IHsgZmllbGRHdXR0ZXI6IG51bWJlciB9KSA9PiAocHJvcHMuZmllbGRHdXR0ZXIgPyBwcm9wcy5maWVsZEd1dHRlciA6ICczMCcpfXB4O1xuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAkeyhwcm9wczogeyBvZmZzZXQ6IHsgcG9zaXRpb246IHN0cmluZyB8IG51bGwsIG1pbldpZHRoOiBzdHJpbmcsIHdpZHRoOiBzdHJpbmcgfSB9KSA9PiAocHJvcHMub2Zmc2V0ICYmIHByb3BzLm9mZnNldC5wb3NpdGlvbiA9PT0gJ3JpZ2h0JyAmJiBgXG4gICAgICAgIG1pbi13aWR0aDogJHtwcm9wcy5vZmZzZXQubWluV2lkdGggfHwgJzE3NXB4J307XG4gICAgICAgIHdpZHRoOiAke3Byb3BzLm9mZnNldC53aWR0aCB8fCAnYXV0byd9O1xuICAgICAgYCl9XG4gICAgfVxuICAgICR7KHByb3BzOiB7IG9mZnNldDogeyBwb3NpdGlvbj86IHN0cmluZywgbWluV2lkdGg/OiBzdHJpbmcsIHdpZHRoPzogc3RyaW5nIH19KSA9PiAocHJvcHMub2Zmc2V0ICYmIHByb3BzLm9mZnNldC5wb3NpdGlvbiA9PT0gJ2xlZnQnICYmIGBcbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtaW4td2lkdGg6ICR7cHJvcHMub2Zmc2V0Lm1pbldpZHRoIHx8ICcxNzVweCd9O1xuICAgICAgICB3aWR0aDogJHtwcm9wcy5vZmZzZXQud2lkdGggfHwgJ2F1dG8nfTtcbiAgICAgIH1cbiAgICBgKX1cbiAgfVxuICBAbWVkaWEgKG1heC13aWR0aDogJHtCUkVBS1BPSU5UUy50YWJsZXR9cHgpIHtcbiAgICAmJiB7XG4gICAgICA+ICoge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAke0JSRUFLUE9JTlRTLnBob25lfXB4KSB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICA+ICoge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAmOmxhc3Qtb2YtdHlwZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IEFwcENvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIG1hcmdpbjogMCBhdXRvO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICAkeyhwcm9wczogeyBsb2FkaW5nVHJhbnNpdGlvbjogYm9vbGVhbiB9KSA9PiAocHJvcHMubG9hZGluZ1RyYW5zaXRpb24gJiYgJ29wYWNpdHk6IC4zNTsnKX1cblxuICAqIHtcbiAgICAke3NldEJyb3dzZXJDb21wYXRpYmlsaXR5KCdib3gtc2l6aW5nJywgJ2JvcmRlci1ib3gnKX1cbiAgICBjb2xvcjogJHtDT0xPUlMuYmxhY2t9O1xuICAgIGZvbnQtZmFtaWx5OiAke3NldEZvbnRGYW1pbHkoVEhFTUUuZm9udC5mYW1pbHkuZGVmYXVsdCl9OyAvKiBBcnJheSBpcyBwYXNzZWQgaW4gKi9cbiAgICBsaW5lLWhlaWdodDogMS4yNXJlbTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBmaWVsZHNldCB7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgZmllbGRzZXQge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IEF2YUZvcm0gPSBzdHlsZWQuZm9ybWBcbiAgbWFyZ2luOiAwIGF1dG8gMTVweDtcbiAgcGFkZGluZy10b3A6IDEwcHg7XG4gICR7KHByb3BzOiB7IGlzSW5saW5lOiBib29sZWFuIH0pID0+IChwcm9wcy5pc0lubGluZSAmJiBJbmxpbmVGb3JtRGlzcGxheSl9XG4gICR7KHByb3BzOiB7IGlzRGlzYWJsZWQ6IHN0cmluZyB9KSA9PiAocHJvcHMuaXNEaXNhYmxlZCA9PT0gJ2Rpc2FibGVkJyAmJiBgXG4gICAgb3BhY2l0eTogLjU7XG4gICAgYWxwaGEtb3BhY2l0eTogNTAlO1xuICAgIHotaW5kZXg6IDA7XG4gIGApfVxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmZvcm0tY29udHJvbCB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgICZbcmVhZG9ubHk9cmVhZG9ubHldIHtcbiAgICAgIGJhY2tncm91bmQ6ICR7Q09MT1JTLndoaXRlfTtcbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBUZW1wbGF0ZUVycm9yTWVzc2FnZSA9IHN0eWxlZC5wYFxuICBjb2xvcjogcmVkO1xuICBjbGVhcjogYm90aDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luLWJvdHRvbTogMS4yNWVtO1xuICBzaXplOiAxLjI1ZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG5gO1xuXG5leHBvcnQgY29uc3QgTGltaXRFcnJvckNvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGNvbG9yOiAke0NPTE9SUy5lcnJvclJlZH07XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICoge1xuICAgIGZvbnQtc2l6ZTogLjkwcmVtO1xuICB9XG5gO1xuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2ljb21vb24uY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9pY29tb29uLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9jbGlja3dyYXAuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9jbGlja3dyYXAuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHN0eWxlZCwgeyBjc3MgfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgQ09MT1JTIGZyb20gJy4vY29uZmlnL2NvbG9ycyc7XG5pbXBvcnQgVEhFTUUgZnJvbSAnLi9jb25maWcvZm9ybS10aGVtZSc7XG5cbi8vIEJyZWFrcG9pbnRzXG5pbXBvcnQgQlJFQUtQT0lOVFMgZnJvbSAnLi4vY29uc3RhbnRzL2JyZWFrcG9pbnRzJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5pbXBvcnQgJy4uL2Nzcy9pY29tb29uLmNzcyc7XG5pbXBvcnQgJy4uL2Nzcy9jbGlja3dyYXAuY3NzJztcblxuaW1wb3J0IHsgc2V0QnJvd3NlckNvbXBhdGliaWxpdHksIHNldEljb01vb25JY29uIH0gZnJvbSAnLi9oZWxwZXJzJztcblxuLy8gQ1NTXG5jb25zdCBkZWZhdWx0SW5wdXRWYWx1ZXMgPSBjc3NgXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICBhcHBlYXJhbmNlOiBub25lO1xuXG4gICR7c2V0QnJvd3NlckNvbXBhdGliaWxpdHkoJ2JveC1zaXppbmcnLCAnYm9yZGVyLWJveCcpfVxuICAke3NldEJyb3dzZXJDb21wYXRpYmlsaXR5KCdib3JkZXItcmFkaXVzJywgVEhFTUUuZmllbGQuYm9yZGVyLnJhZGl1cyl9XG4gIGJhY2tncm91bmQ6ICR7VEhFTUUuZmllbGQuYmFja2dyb3VuZC5jb2xvcn07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7VEhFTUUuZmllbGQuYm9yZGVyLmNvbG9yfTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbiAgb3V0bGluZS1jb2xvcjogdHJhbnNwYXJlbnQ7IC8qIFJFTU9WRSBCUk9XU0VSIERFRkFVTFQgT1VUTElORSAqL1xuICBvdXRsaW5lLXN0eWxlOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICB6LWluZGV4OiAyO1xuXG4gICY6OnBsYWNlaG9sZGVyIHsgLyogSElERSBQTEFDRSBIT0xERVIgKi9cbiAgICBjb2xvcjogJHtDT0xPUlMud2hpdGV9O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHZpc2liaWxpdHk6IG5vbmU7XG4gIH1cbiAgJjo6LW1zLWNsZWFyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGhlaWdodDogMDtcbiAgICB3aWR0aCA6IDA7XG4gIH1cblxuICAmJjo6LXdlYmtpdC1jb250YWN0cy1hdXRvLWZpbGwtYnV0dG9uIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMDtcbiAgfVxuXG4gICYuaW5WYWxpZCB7XG4gICAgYm9yZGVyLWNvbG9yOiAke0NPTE9SUy5lcnJvclJlZH07XG4gIH1cblxuICAmLnZhbGlkIHtcbiAgICBib3JkZXItY29sb3I6ICR7Q09MT1JTLnZhbGlkR3JlZW59O1xuICB9XG5gO1xuXG5jb25zdCBhbmltYXRpb25EZWZhdWx0ID0gY3NzYFxuICAvKiBTZXQgYW5pbWF0aW9uICovXG4gICR7c2V0QnJvd3NlckNvbXBhdGliaWxpdHkoJ3RyYW5zaXRpb24nLCAndG9wIC4ycywgZm9udC1zaXplIC4ycycpfVxuYDtcblxuZXhwb3J0IGNvbnN0IGZvcm1UaXRsZSA9IGNzc2BcbiAgY29sb3I6ICMxQTFBMUE7XG4gIGxpbmUtaGVpZ2h0OiAxLjc1cmVtO1xuICBmb250LWZhbWlseTogXCJBcGVydHVyYVwiLCBzb3VyY2Utc2Fucy1wcm8sIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDEuMjVyZW07XG5gO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEZvcm1UaXRsZSA9IGNzc2BcbiAgJHtmb3JtVGl0bGV9XG4gIG1hcmdpbi1ib3R0b206IDEuMjVyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbmA7XG5cbmV4cG9ydCBjb25zdCBzZWN0aW9uRm9ybVRpdGxlID0gY3NzYFxuICAke2Zvcm1UaXRsZX1cbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuYDtcblxuY29uc3QgcGxhY2VIb2xkZXJTZWNvbmRhcnkgPSBjc3NgXG4gICR7YW5pbWF0aW9uRGVmYXVsdH1cbiAgZm9udC1zaXplOiAxNHB4O1xuICB0b3A6IDBweDtcbiAgLnNwYW4ge1xuICAgIGxpbmUtaGVpZ2h0OiAxOyAvL1Jlc2V0IGxpbmVoaWdodCBmb3IgdGhlIHdoaXRlIGJhY2tncm91bmQgdG8gaG92ZXIgb3ZlciB0aGUgbGluZVxuICAgIGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLndoaXRlfTtcbiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gIH1cbmA7XG4vLyBzZXQgaGVyZSB0byBzaGFyZSBiZXR3ZWVuIGRlZmF1bHQgVGV4dElucHV0IGFuZCBpbnB1dFt0eXBlPSd0ZWwnXVxuLy8gYWxsb3dzIGludGwtcGhvbmUgc2ltaWxhdGlvblxuY29uc3QgdGV4dElucHV0ID0gY3NzYFxuICBmb250LXNpemU6ICR7VEhFTUUuZmllbGQuZm9udC5zaXplfTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIG1pbi1oZWlnaHQ6ICR7VEhFTUUuZmllbGQubWluSGVpZ2h0fTtcbiAgcGFkZGluZzogMTBweCAxNXB4O1xuICB3aWR0aDogMTAwJTtcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgJHtzZXRCcm93c2VyQ29tcGF0aWJpbGl0eSgnYm94LXNoYWRvdycsICcwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgLjEpJyl9XG4gIH1cblxuICAmOmZvY3VzLFxuICAmOmhvdmVyLFxuICAmLmlzU2V0LFxuICAmLnZhbGlkIHtcbiAgICAmICsgLnBsYWNlaG9sZGVyVGV4dCB7XG4gICAgICAke3BsYWNlSG9sZGVyU2Vjb25kYXJ5fVxuICAgIH1cbiAgfVxuYDtcblxuLy8gQ29tcG9uZW50IHN0eWxlc1xuZXhwb3J0IGNvbnN0IERlc2MgPSBzdHlsZWQucGBgO1xuXG5leHBvcnQgY29uc3QgRXJyb3JNZXNzYWdlID0gc3R5bGVkLnBgXG4gIGNvbG9yOiAke0NPTE9SUy5lcnJvclJlZH07XG4gIGZvbnQtc2l6ZTogLjc1cmVtO1xuICBtYXJnaW4tdG9wOiAtMTJweDtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICBwYWRkaW5nLWJvdHRvbTogNXB4O1xuICB3aWR0aDogMTAwJTtcbiAgei1pbmRleDogdW5zZXQ7XG5cbiAgJHsocHJvcHM6IHsgaXNHZHByOiBib29sZWFuLCBpc0NoZWNrYm94OiBib29sZWFuIH0pID0+ICghcHJvcHMuaXNHZHByICYmICFwcm9wcy5pc0NoZWNrYm94ID8gYFxuICAgIGJvdHRvbTogLTE1cHg7XG4gICAgJHtzZXRJY29Nb29uSWNvbignXFxcXGU5MzQnLCBDT0xPUlMuZXJyb3JSZWQsICdhZnRlcicpfVxuXG4gICAgJjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogMTVweDtcbiAgICAgIHRvcDogLTQwcHg7XG4gICAgICB6LWluZGV4OiAzO1xuICAgIH1gIDogYFxuICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgJHtzZXRJY29Nb29uSWNvbignXFxcXGU5MzQnLCBDT0xPUlMuZXJyb3JSZWQsICdiZWZvcmUnKX1cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICB9XG4gICAgYCl9O1xuICAmLnNlbGVjdC1lcnJvci1hbGVydCB7XG4gICAgJjphZnRlciB7XG4gICAgICByaWdodDogNDVweDtcbiAgICB9XG4gIH1cblxuICAmLmVycm9yLWFsZXJ0LWNvbnRhaW5lciB7XG4gICAgbGVmdDogLTEycHg7XG4gICAgbWFyZ2luLXRvcDogLTE2cHhcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBmb250LXNpemU6IC45Mzc1cmVtO1xuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IERpc2FibGVkTWVzc2FnZSA9IHN0eWxlZC5wYFxuICBtYXJnaW4tYm90dG9tOiAxLjI1cmVtO1xuYDtcblxuZXhwb3J0IGNvbnN0IEZpZWxkUm93ID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XG5cbiAgJiYge1xuICAgID4gKiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1hcmdpbi1yaWdodDogJHsocHJvcHM6IHsgZmllbGRHdXR0ZXI6IG51bWJlciB9KSA9PiAocHJvcHMuZmllbGRHdXR0ZXIgPyBwcm9wcy5maWVsZEd1dHRlciA6ICczMCcpfXB4O1xuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6ICR7QlJFQUtQT0lOVFMucGhvbmV9cHgpIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICYmIHtcbiAgICAgICogPiB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBGb3JtSGVhZGVyID0gc3R5bGVkLmRpdmBcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgcGFkZGluZzogMCA1cHg7XG5gO1xuXG5leHBvcnQgY29uc3QgR2RwckZpZWxkID0gc3R5bGVkLmRpdmBcbiAgd2lkdGg6IGF1dG87XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgaW5wdXQge1xuICAgICAgYm9yZGVyLXJhZGl1czogMHB4O1xuICAgICAgYm9yZGVyOiAuNXB4IHNvbGlkICNEREQ7XG4gICAgICBtaW4td2lkdGg6IC43NXJlbTtcbiAgICAgIG1pbi1oZWlnaHQ6IC43NXJlbTtcbiAgICB9XG4gICAgPiAqOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgIG1hcmdpbi10b3A6IDFweDtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxuICBzcGFuIHtcbiAgICBjb2xvcjogJHtDT0xPUlMuZ3JleTJ9O1xuICAgIGZvbnQtc2l6ZTogLjgxMjVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XG4gIH1cbiAgYSB7XG4gICAgY29sb3I6ICR7Q09MT1JTLm9yYW5nZX1cbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IEZpZWxkRGlzY2xhaW1lclRleHQgPSBzdHlsZWQoR2RwckZpZWxkKWBcbiAgICBtYXJnaW4tdG9wOiAwcHg7XG5cbiAgICBzcGFuIHtcbiAgICAgIGNvbG9yOiAke0NPTE9SUy5ncmV5MX07XG4gICAgICBmb250LXNpemU6IDFyZW07XG4gICAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IFRlcm1zU2VjdGlvbiA9IHN0eWxlZC5kaXZgXG4gIHdpZHRoOiBhdXRvO1xuICBtYXJnaW4tdG9wOiAyMHB4O1xuICBwIHtcbiAgICBjb2xvcjogJHtDT0xPUlMuZ3JleTJ9O1xuICAgIGZvbnQtc2l6ZTogLjgxMjVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XG4gIH1cbiAgYSB7XG4gICAgY29sb3I6ICR7Q09MT1JTLm9yYW5nZX1cbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IElucHV0Q29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xuXG4gIC5pbnRsLXRlbC1pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAmLmFjdGl2ZUNvbnRhaW5lciB7XG4gICAgei1pbmRleDogOTk5O1xuICB9XG5cbiAgaW5wdXRbdHlwZT0ndGVsJ10sIC5mbGF0cGlja3ItaW5wdXQge1xuICAgICR7ZGVmYXVsdElucHV0VmFsdWVzfVxuICAgIGZvbnQtc2l6ZTogJHtUSEVNRS5maWVsZC5mb250LnNpemV9O1xuICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgIG1pbi1oZWlnaHQ6ICR7VEhFTUUuZmllbGQubWluSGVpZ2h0fTtcbiAgICBwYWRkaW5nOiAxNXB4O1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgICR7c2V0QnJvd3NlckNvbXBhdGliaWxpdHkoJ2JveC1zaGFkb3cnLCAnMCAwIDRweCByZ2JhKDAsIDAsIDAsIC4xNSknKX1cbiAgICB9XG5cbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIsXG4gICAgJi5pc1NldCxcbiAgICAmLnZhbGlkIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA2cHg7XG4gICAgICBwYWRkaW5nLXRvcDogMjRweDtcblxuICAgICAgJiArIC5wbGFjZWhvbGRlclRleHQge1xuICAgICAgICAke2FuaW1hdGlvbkRlZmF1bHR9XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgdG9wOiAxNnB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6JHtCUkVBS1BPSU5UUy5waG9uZX1weCkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDZweDtcbiAgICAgIHBhZGRpbmctdG9wOiAyNHB4O1xuXG4gICAgICAmICsgLnBsYWNlaG9sZGVyVGV4dCB7XG4gICAgICAgICR7YW5pbWF0aW9uRGVmYXVsdH1cbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICB0b3A6IDE2cHg7XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgRmxhdFBpY2tlckNvbnRhaW5lciA9IHN0eWxlZChJbnB1dENvbnRhaW5lcilgXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgJHtzZXRJY29Nb29uSWNvbignXFxcXGU2MTcnLCBDT0xPUlMuZGFya09yYW5nZSwgJ2JlZm9yZScpfTtcbiAgJjpiZWZvcmUge1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDEwcHg7XG4gICAgdG9wOiAxNXB4O1xuICAgIHotaW5kZXg6IDU7XG4gIH1cblxuICBpbnB1dCB7XG4gICAgYm94LXNoYWRvdzogbm9uZTsgLyogTmVlZGVkIGZvciBGaXJlRm94IGZpeC4gd2VpcmQgaW50ZXJhY3Rpb24qL1xuICB9XG5cbiAgbGFiZWwge1xuICAgICYudmFsaWQsXG4gICAgJi5pblZhbGlkIHtcbiAgICAgICY6YWZ0ZXIge1xuICAgICAgICByaWdodDogNDVweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmluVmFsaWQge1xuICAgICAgKyAqIHtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgcmlnaHQ6IDQ1cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbi8vIFN0eWxlZFxuZXhwb3J0IGNvbnN0IElucHV0QXJyb3cgPSBzdHlsZWQuZGl2YFxuICBjb2xvcjogJHtDT0xPUlMub3JhbmdlfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDE1cHg7XG4gIHotaW5kZXg6IDI7XG5cbiAgJHtzZXRJY29Nb29uSWNvbignXFxcXGU2MWEnLCBDT0xPUlMub3JhbmdlLCAnYmVmb3JlJyl9XG5gO1xuXG5leHBvcnQgY29uc3QgSW5wdXRTZWxlY3QgPSBzdHlsZWQoSW5wdXRDb250YWluZXIpYFxuICB3aWR0aDogYXV0bztcblxuICBzZWxlY3Qge1xuICAgICR7ZGVmYXVsdElucHV0VmFsdWVzfVxuICAgICR7c2V0QnJvd3NlckNvbXBhdGliaWxpdHkoJ2FwcGVhcmFuY2UnLCAnbm9uZScpfVxuICAgIGNvbG9yOiAke0NPTE9SUy5ibGFja307XG4gICAgZm9udC1zaXplOiAke1RIRU1FLmZpZWxkLmZvbnQuc2l6ZX07XG4gICAgaGVpZ2h0OiA1MHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xuICAgIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIG9wdGlvbiB7XG4gICAgICBmb250LXNpemU6ICR7VEhFTUUuZmllbGQuZm9udC5zaXplfTtcbiAgICB9XG5cbiAgICAmICsgLmFyciB7XG4gICAgICB0b3A6IDE2cHg7XG4gICAgfVxuXG4gICAgJi5pblZhbGlkLFxuICAgICYudmFsaWQsXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICR7c2V0QnJvd3NlckNvbXBhdGliaWxpdHkoJ2JveC1zaGFkb3cnLCAnMCAwIDRweCByZ2JhKDAsIDAsIDAsIC4xNSknKX1cblxuICAgICAgJiArIC5hcnIge1xuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgY29sb3I6ICR7Q09MT1JTLm9yYW5nZUhvdmVyfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYgKyAuYXJyICsgLnBsYWNlaG9sZGVyVGV4dCB7XG4gICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICB0b3A6IDBweDtcbiAgICB9XG4gIH1cbiAgc2VsZWN0OjotbXMtZXhwYW5kIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgSW5wdXRNdWx0aVNlbGVjdCA9IHN0eWxlZC5kaXZgXG4gIGxhYmVsIHtcbiAgICBsaW5lLWhlaWdodDogMS4yNXJlbTtcbiAgICBtYXJnaW4tbGVmdDogLTEycHg7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG5cbiAgICAmLnZhbGlkIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgIH1cblxuICAgICAgJi5zZWxlY3QtcGxhY2Vob2xkZXI6YWZ0ZXJcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaXYge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDI1cHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgJHsocHJvcHM6IHsgbWluaGVpZ2h0OiBzdHJpbmcgfSkgPT4gKHByb3BzLm1pbmhlaWdodCAmJiBgbWluLWhlaWdodDogJHtwcm9wcy5taW5oZWlnaHR9cHg7YCl9O1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIC1tb3otd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG5cbiAgICA+IGJ1dHRvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICBjb2xvcjogJHtDT0xPUlMuZ3JleTJ9O1xuICAgICAgZm9udC1zaXplOiAuOXJlbTtcbiAgICAgIHBhZGRpbmc6IDhweDtcbiAgICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgd2lkdGg6IDEwMCU7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogI0ZGRjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke0NPTE9SUy5vcmFuZ2VIb3Zlcn07XG4gICAgICB9XG5cbiAgICAgICYubm90LXNlbGVjdGVkIHtcbiAgICAgICAgJiYge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAmLnNlbGVjdGVkIHtcbiAgICAgICAgY29sb3I6ICR7Q09MT1JTLndoaXRlfTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtDT0xPUlMub3JhbmdlfTtcbiAgICAgICAgb3BhY2l0eTogLjU7XG4gICAgICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7XG4gICAgICAgIC1raHRtbC1vcGFjaXR5OiAwLjU7XG4gICAgICAgIC1tb3otb3BhY2l0eTogLjU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGl2IHtcbiAgICAmICsgcCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyNXB4O1xuICAgICAgJjpub3QoLnNlbGVjdC1lcnJvci1hbGVydCkge1xuICAgICAgICBjb2xvcjogJHtDT0xPUlMuZ3JleTJ9O1xuICAgICAgICBmb250LXNpemU6IC45cmVtO1xuICAgICAgfVxuXG4gICAgICAucmVtb3ZlU2VsZWN0aW9uIHtcbiAgICAgICAgcGFkZGluZzogNXB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAmICsgLnNlbGVjdC1lcnJvci1hbGVydCB7XG4gICAgICBtYXJnaW4tdG9wOiAtMjJweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgICAmOmFmdGVyIHtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMTVweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBQbGFjZUhvbGRlclRleHQgPSBzdHlsZWQubGFiZWxgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAke1RIRU1FLmZpZWxkLmZvbnQuc2l6ZX07XG4gIGxlZnQ6IDA7XG4gIHBhZGRpbmc6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAwOyAvKiBTZXQgdG8gMCBzbyBhbGwgaG92ZXIgc3RhdGUgaXMgb24gZmllbGQgYW5kIG5ldmVyIHRvdWNoZXMgb3ZlcmxhaWQgZWxlbWVudCAqL1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgdG9wOiAkeyhwcm9wczogeyBwb3NpdGlvblRvcDogYm9vbGVhbiB9KSA9PiAocHJvcHMucG9zaXRpb25Ub3AgPyAnMjNweCcgOiAnNTAlJyl9O1xuICB3aWR0aDogMTAwJTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6ICR7KHByb3BzOiB7IGhhc1BpY2tMaXN0OiBib29sZWFufSkgPT4gKHByb3BzLmhhc1BpY2tMaXN0ID8gJzEwJyA6ICcyJyl9O1xuICAke2FuaW1hdGlvbkRlZmF1bHR9XG4gIHNwYW4ge1xuICAgIGNvbG9yOiAke0NPTE9SUy5ncmV5MX07XG4gICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLndoaXRlfTtcbiAgICBwYWRkaW5nOiAwIDJweDtcbiAgfVxuICAmLmluVmFsaWQge1xuICAgIC8vIGFjY291bnQgZm9yIGhlaWdodCBvZiB0aGUgYWRkZWQgZXJyb3IgbWVzc2FnZVxuICAgIHRvcDogJHsocHJvcHM6IHsgcG9zaXRpb25Ub3A6IGJvb2xlYW4gfSkgPT4gKHByb3BzLnBvc2l0aW9uVG9wID8gJzE0cHgnIDogJzQwJScpfVxuICAgICR7KHByb3BzOiB7IGVtYWlsT25seTogYm9vbGVhbiwgZXJyb3JTdGF0ZTogeyBpZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSB8IGZhbHNlIH0pID0+IHtcbiAgICAgIGlmIChwcm9wcy5lcnJvclN0YXRlICYmIHByb3BzLmVtYWlsT25seSkgcmV0dXJuICdtYXJnaW4tdG9wOiAxMHB4OydcbiAgICB9fVxuICB9XG5cbiAgJi5waG9uZSB7XG4gICAgcGFkZGluZy1sZWZ0OiA1MnB4O1xuICB9XG5cbiAgJi52YWxpZCB7XG4gICAgJHtzZXRJY29Nb29uSWNvbignXFxcXGU2MDEnLCBDT0xPUlMudmFsaWRHcmVlbiwgJ2FmdGVyJyl9XG4gICAgJjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogMTVweDtcbiAgICAgIHRvcDogNTBweDtcbiAgICB9XG5cbiAgICAmLnNlbGVjdC1wbGFjZWhvbGRlciB7XG4gICAgICAmOmFmdGVyIHtcbiAgICAgICAgcmlnaHQ6IDQ1cHg7XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgVGV4dElucHV0ID0gc3R5bGVkLmlucHV0YFxuICAke2RlZmF1bHRJbnB1dFZhbHVlc31cbiAgJHt0ZXh0SW5wdXR9XG4gICR7KHByb3BzOiB7IGRpc2FibGVkOiBib29sZWFuIH0pID0+IChwcm9wcy5kaXNhYmxlZCA/ICdvcGFjaXR5OiAuNScgOiAnJyl9O1xuYDtcblxuZXhwb3J0IGNvbnN0IEhpZGRlbklucHV0ID0gc3R5bGVkLmlucHV0YFxuICBkaXNwbGF5OiBub25lO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIGhlaWdodDogMXB4O1xuICB3aWR0aDogMXB4O1xuYDtcblxuZXhwb3J0IGNvbnN0IENoZWNrYm94Q29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgbGFiZWwge1xuICAgICoge1xuICAgICAgY29sb3I6ICR7Q09MT1JTLmdyZXkyfTtcbiAgICAgIGZvbnQtc2l6ZTogLjkzNzVyZW07XG4gICAgfVxuXG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICAgIHdpZHRoOiBhdXRvO1xuXG4gICAgaW5wdXQge1xuICAgICAgYm9yZGVyLXJhZGl1czogMHB4O1xuICAgICAgYm9yZGVyOiAuNXB4IHNvbGlkICNEREQ7XG4gICAgICBtaW4td2lkdGg6IC43NXJlbTtcbiAgICAgIG1pbi1oZWlnaHQ6IC43NXJlbTtcblxuICAgICAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgIG1pbi1oZWlnaHQ6IGF1dG87XG4gICAgICB3aWR0aDogaW5pdGlhbDtcblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICAke3NldEJyb3dzZXJDb21wYXRpYmlsaXR5KCdib3gtc2hhZG93JywgJzAgMCA0cHggcmdiYSgwLCAwLCAwLCAuMTUpJyl9XG4gICAgICB9XG4gICAgfVxuXG4gICAgPiAqIHtcbiAgICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICAgIH1cbiAgICA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICB9XG5cbiAgYSB7XG4gICAgY29sb3I6ICR7Q09MT1JTLm9yYW5nZX07XG5cbiAgICAmOmhvdmVyLFxuICAgICY6dmlzaXRlZCB7XG4gICAgICBjb2xvcjogJHtDT0xPUlMub3JhbmdlfTtcbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBSYWRpb0NvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGxhYmVsIHtcbiAgICAqIHtcbiAgICAgIGNvbG9yOiAke0NPTE9SUy5ibGFja307XG4gICAgICBmb250LXNpemU6ICR7VEhFTUUuZmllbGQuZm9udC5zaXplfTtcbiAgICB9XG5cbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgcGFkZGluZy1ib3R0b206ICR7KHByb3BzOiB7IGhhc0Rlc2NyaXB0aW9uOiBib29sZWFuIH0pID0+IChwcm9wcy5oYXNEZXNjcmlwdGlvbiA/ICc4JyA6ICcyMCcpfXB4O1xuICAgIHdpZHRoOiBhdXRvO1xuXG4gICAgaW5wdXQge1xuICAgICAgYm9yZGVyLXJhZGl1czogMHB4O1xuICAgICAgYm9yZGVyOiAuNXB4IHNvbGlkICNEREQ7XG4gICAgICBtaW4td2lkdGg6IC43NXJlbTtcbiAgICAgIG1pbi1oZWlnaHQ6IC43NXJlbTtcblxuICAgICAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgIG1pbi1oZWlnaHQ6IGF1dG87XG4gICAgICB3aWR0aDogaW5pdGlhbDtcblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICAke3NldEJyb3dzZXJDb21wYXRpYmlsaXR5KCdib3gtc2hhZG93JywgJzAgMCA0cHggcmdiYSgwLCAwLCAwLCAuMTUpJyl9XG4gICAgICB9XG4gICAgfVxuXG4gICAgPiAqIHtcbiAgICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICAgIH1cbiAgICA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICB9XG5cbiAgJHsocHJvcHM6IHsgaGFzRGVzY3JpcHRpb246IGJvb2xlYW4gfSkgPT4gKHByb3BzLmhhc0Rlc2NyaXB0aW9uICYmIGAuZGVzYy1wIHtcbiAgICBjb2xvcjogJHtDT0xPUlMuZ3JleTF9O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcblxuICAgICY6bGFzdC1vZi10eXBlIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICAgIH1cbiAgfWApfVxuXG4gIGEge1xuICAgIGNvbG9yOiAke0NPTE9SUy5vcmFuZ2V9O1xuXG4gICAgJjpob3ZlcixcbiAgICAmOnZpc2l0ZWQge1xuICAgICAgY29sb3I6ICR7Q09MT1JTLm9yYW5nZX07XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgSW50bFRleHRJbnB1dENvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIG1hcmdpbi1ib3R0b206IDI1cHg7XG4gIHotaW5kZXg6IDEwOyAvKiBGb3JjZSBjb250aW5lciBhYm92ZSBhbGwgb3RoZXIgY29udGFpbmVycyAqL1xuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICB6LWluZGV4OiAxMDtcbiAgfVxuXG4gICYmIHtcbiAgICAuZm9ybS1jb250cm9sIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxuICB9XG5cbiAgPiBkaXYge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLmZsYWctY29udGFpbmVyLCAuZmxhZy1kcm9wZG93biB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIG1pbi1oZWlnaHQ6ICR7VEhFTUUuZmllbGQubWluSGVpZ2h0fTtcbiAgICB6LWluZGV4OiAxNTtcblxuICAgIC5jb3VudHJ5LWxpc3Qge1xuICAgICAgbWFyZ2luLXRvcDogM3B4O1xuICAgIH1cbiAgfVxuXG5cbiAgaW5wdXRbdHlwZT0ndGVsJ10ge1xuICAgICR7ZGVmYXVsdElucHV0VmFsdWVzfVxuICAgICR7dGV4dElucHV0fVxuICB9XG5cbiAgLnBsYWNlaG9sZGVyVGV4dCB7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gIH1cblxuICAmOmZvY3VzLFxuICAmOmhvdmVyLFxuICAmLmlzU2V0LFxuICAmLnZhbGlkIHtcbiAgICBpbnB1dFt0eXBlPSd0ZWwnXSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNnB4O1xuICAgICAgcGFkZGluZy10b3A6IDI0cHg7XG4gICAgfVxuXG4gICAgLnBsYWNlaG9sZGVyVGV4dCB7XG4gICAgICAke3BsYWNlSG9sZGVyU2Vjb25kYXJ5fVxuICAgIH1cbiAgfVxuXG4gICYuaW5WYWxpZCB7XG4gICAgaW5wdXRbdHlwZT0ndGVsJ10ge1xuICAgICAgYm9yZGVyLWNvbG9yOiAke0NPTE9SUy5lcnJvclJlZH07XG4gICAgfVxuICB9XG5cbiAgLmludGwtcGhvbmUtcGxhY2Vob2xkZXIge1xuICAgIHotaW5kZXg6IDU7XG4gIH1cblxuICAucmVhY3QtdGVsLWlucHV0IHtcbiAgICB6LWluZGV4OiA1O1xuICAgIG1pbi1oZWlnaHQ6IGZpdC1jb250ZW50O1xuICAgIGhlaWdodDogYXV0bztcblxuICAgIGlucHV0W3R5cGU9dGV4dF0sXG4gICAgaW5wdXRbdHlwZT10ZWxdIHtcbiAgICAgICR7dGV4dElucHV0fVxuICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtUSEVNRS5maWVsZC5ib3JkZXIuY29sb3J9O1xuICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgcGFkZGluZzogMTVweCAxNXB4IDE1cHggNDhweDtcblxuICAgICAgJi5pbnZhbGlkLW51bWJlciB7IC8qIE92ZXIgd3JpdGUgcGFja2FnZSBDU1MgKi9cbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtUSEVNRS5maWVsZC5ib3JkZXIuY29sb3J9O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgICAgICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke1RIRU1FLmZpZWxkLmJvcmRlci5jb2xvcn07XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAuZmxhZy1kcm9wZG93biB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAke1RIRU1FLmZpZWxkLmJvcmRlci5jb2xvcn07XG4gICAgfVxuXG4gICAgJi5pblZhbGlkIHtcbiAgICAgIGlucHV0W3R5cGU9J3RlbCddLFxuICAgICAgLmZsYWctZHJvcGRvd24ge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7Q09MT1JTLmVycm9yUmVkfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnZhbGlkIHtcbiAgICAgIGlucHV0W3R5cGU9J3RlbCddLFxuICAgICAgLmZsYWctZHJvcGRvd24ge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7Q09MT1JTLmdyZWVufTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBUZXh0QXJlYSA9IHN0eWxlZC50ZXh0YXJlYWBcbiAgJHtkZWZhdWx0SW5wdXRWYWx1ZXN9XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgcGFkZGluZzogMTVweDtcbiAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgJHtzZXRCcm93c2VyQ29tcGF0aWJpbGl0eSgnYm94LXNoYWRvdycsICcwIDAgNHB4IHJnYmEoMCwgMCwgMCwgLjE1KScpfVxuICB9XG5cbiAgJjpmb2N1cyxcbiAgJjpob3ZlcixcbiAgJi5pc1NldCxcbiAgJi52YWxpZCB7XG4gICAgcGFkZGluZy1ib3R0b206IDhweDtcbiAgICBwYWRkaW5nLXRvcDogMjVweDtcblxuICAgICYgKyAucGxhY2Vob2xkZXJUZXh0IHtcbiAgICAgICR7YW5pbWF0aW9uRGVmYXVsdH1cbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIHRvcDogMHB4O1xuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IFN1Ym1pdEJ1dHRvbiA9IHN0eWxlZChUZXh0SW5wdXQpYFxuICBmb250LXNpemU6ICR7VEhFTUUuZm9udC5zaXplfTtcbiAgbGluZS1oZWlnaHQ6IDI1cHg7XG4gIHBhZGRpbmc6IDEwcHggMTJweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbmA7XG5cbmV4cG9ydCBjb25zdCBTdWJtaXRCdXR0b25Db250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBjbGVhcjogYm90aDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgJHsocHJvcHM6IHsgcG9zaXRpb246ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0J30pID0+IHByb3BzLnBvc2l0aW9uICYmIGBcbiAgICAkeyhwcm9wcy5wb3NpdGlvbiA9PT0gJ2xlZnQnKSA/ICdqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7JyA6ICcnfVxuICAgICR7KHByb3BzLnBvc2l0aW9uID09PSAncmlnaHQnKSA/ICdqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOycgOiAnJ31cbiAgICAkeyhwcm9wcy5wb3NpdGlvbiA9PT0gJ2NlbnRlcicpID8gJ2p1c3RpZnktY29udGVudDogY2VudGVyOycgOiAnJ31cbiAgICBidXR0b24ge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICBgfVxuYDtcblxuZXhwb3J0IGNvbnN0IFN1Ym1pc3Npb25FcnJvckNvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICR7KHByb3BzOiB7IGlzSW5saW5lOiBib29sZWFuIH0pID0+IHByb3BzLmlzSW5saW5lICYmICdtYXJnaW4tdG9wOiAtMTVweDsnfVxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHAge1xuICAgIGNvbG9yOiAke0NPTE9SUy5yZWR9O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuYDtcbmV4cG9ydCBjb25zdCBUaXRsZSA9IHN0eWxlZC5zcGFuYFxuICAke2RlZmF1bHRGb3JtVGl0bGV9XG5gO1xuXG5leHBvcnQgY29uc3QgU2VjdGlvblRpdGxlID0gc3R5bGVkLmgzYFxuICAke3NlY3Rpb25Gb3JtVGl0bGV9XG5gO1xuXG5leHBvcnQgY29uc3QgRmllbGRzZXQgPSBzdHlsZWQuZGl2YFxuICBib3JkZXI6IG5vbmU7XG4gID4gLnRpdGxlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICB9XG4gID4gLmRlc2Mge1xuICAgIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgfVxuICA+IC5yZXF1aXJlZCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gIH1cbiAgLmRlc2MtYm9sZCB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgfVxuYDtcbiIsIi8vIEBmbG93IHN0cmljdC1sb2NhbFxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgZ2V0TG9jYWxlU3RyaW5nVGV4dCB9IGZyb20gJy4uL2hlbHBlcnMvbGFuZ3VhZ2UnO1xuXG50eXBlIFByb3BzID0ge1xuICBpc0xhbmd1YWdlOiBzdHJpbmcsXG59O1xuXG5jb25zdCBTeXN0ZW1FcnJvck1lc3NhZ2UgPSAoeyBpc0xhbmd1YWdlIH06IFByb3BzKSA9PiB7XG4gIGxldCBtZXNzZWdlID0gJ1NvbWV0aGluZyB3ZW50IHdyb25nLiBXaHkgbm90IGNhbGwgb3VyIHNhbGVzIHRlYW0gZGlyZWN0bHk/JztcbiAgbWVzc2VnZSA9IGdldExvY2FsZVN0cmluZ1RleHQobWVzc2VnZSwgJ2Vycm9yJywgaXNMYW5ndWFnZSk7XG4gIHJldHVybiA8cCBpZD0nYXZhZm9ybS1lcnJvci1tc2cnIGNsYXNzTmFtZT0nYXZhZm9ybS1lcnJvcicgPnttZXNzZWdlfSB7KGlzTGFuZ3VhZ2UgPT09ICdlbicgfHwgaXNMYW5ndWFnZSA9PT0gJ3VzJykgJiYgPGEgaHJlZj0ndGVsOjg3Ny03NTktNjUyMCc+ODc3LTc1OS02NTIwPC9hPn08L3A+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU3lzdGVtRXJyb3JNZXNzYWdlO1xuIiwiLy8gQGZsb3cgc3RyaWN0LWxvY2FsXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IE5vZGUgfSBmcm9tICdyZWFjdCc7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7IHJlY2VpdmVTeXN0ZW1FcnJvciB9IGZyb20gJy4uL2xpYi9hY3Rpb25zJztcblxuLy8gQ29tcG9uZW50XG5pbXBvcnQgU3lzdGVtRXJyb3IgZnJvbSAnLi4vY29tcG9uZW50cy9zeXN0ZW0tZXJyb3ItbWVzc2FnZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBOb2RlLFxuICBpc0xhbmd1YWdlOiBzdHJpbmcsXG59XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBoYXNFcnJvcjogYm9vbGVhbixcbnx9O1xuXG5jbGFzcyBFcnJvckJvdW5kYXJ5IGV4dGVuZHMgQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBzdGF0ZSA9IHsgaGFzRXJyb3I6IGZhbHNlIH07XG5cbiAgY29tcG9uZW50RGlkQ2F0Y2goZXJyb3I6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIGluZm86IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGhhc0Vycm9yOiB0cnVlIH0pO1xuICAgIHJlY2VpdmVTeXN0ZW1FcnJvcih7IC4uLmluZm8sIC4uLmVycm9yIH0sIDUwMCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc0xhbmd1YWdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmICh0aGlzLnN0YXRlLmhhc0Vycm9yKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3lzdGVtRXJyb3IgaXNMYW5ndWFnZT17aXNMYW5ndWFnZX0gLz5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVycm9yQm91bmRhcnk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuZXhwb3J0IGNvbnN0IExvYWRlciA9IHN0eWxlZC5kaXZgXG4gIGJhY2tncm91bmQ6ICR7KHByb3BzOiB7IHNob3dMb2FkZXI6IGJvb2xlYW59KSA9PiAocHJvcHMuc2hvd0xvYWRlciA/ICcjRkZGJyA6ICd0cmFuc3BhcmVudCcpfTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgbGVmdDogMXB4O1xuICBvcGFjaXR5OiAuODU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtNXB4O1xuICB3aWR0aDogMTAwJTtcbiAgei1pbmRleDogMTAwO1xuYDtcblxuZXhwb3J0IGNvbnN0IExvYWRpbmdDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogJHsocHJvcHM6IHsgbG9hZGVyU2l6ZTogc3RyaW5nIH0pID0+IChwcm9wcy5sb2FkZXJTaXplID09PSAnc21hbGwnID8gJzEwJScgOiAnNDUlJyl9O1xuICBsZWZ0OiA0NSU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHotaW5kZXg6IDEwMTtcbmA7XG5cbmV4cG9ydCBjb25zdCBTcGlubmVyID0gc3R5bGVkLmRpdmBcbiAgLmxkcy1yaW5nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaGVpZ2h0OiAxMDAlXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgei1pbmRleDogMTAxO1xuXG4gICAgZGl2IHtcbiAgICAgIGFuaW1hdGlvbjogbGRzLXJpbmcgMS4ycyBjdWJpYy1iZXppZXIoMC41LCAwLCAwLjUsIDEpIGluZmluaXRlO1xuICAgICAgJHsocHJvcHM6IHsgbG9hZGVyU2l6ZTogc3RyaW5nIH0pID0+IHByb3BzLmxvYWRlclNpemUgPT09ICdzbWFsbCcgJiYgJ2JvcmRlcjogMnB4IHNvbGlkICNGNjA7J307XG4gICAgICAkeyhwcm9wczogeyBsb2FkZXJTaXplOiBzdHJpbmcgfSkgPT4gcHJvcHMubG9hZGVyU2l6ZSA9PT0gJ2xnJyAmJiAnYm9yZGVyOiA4cHggc29saWQgI0Y2MDsnfTtcbiAgICAgICR7KHByb3BzOiB7IGxvYWRlclNpemU6IHN0cmluZyB9KSA9PiAhcHJvcHMubG9hZGVyU2l6ZSAmJiAnYm9yZGVyOiA4cHggc29saWQgI0Y2MDsnfTtcbiAgICAgIGJvcmRlci1jb2xvcjogI0Y2MCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGhlaWdodDogJHsocHJvcHM6IHsgc2l6ZTogbnVtYmVyIH0pID0+IHByb3BzLnNpemUgfHwgJzEwMSd9cHg7XG4gICAgICBtYXJnaW46IDhweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHdpZHRoOiAkeyhwcm9wczogeyBzaXplOiBudW1iZXIgfSkgPT4gcHJvcHMuc2l6ZSB8fCAnMTAxJ31weDtcblxuICAgICAgJjpudGgtY2hpbGQoMSkge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0wLjQ1cztcbiAgICAgIH1cbiAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtMC4zcztcbiAgICAgIH1cbiAgICAgICY6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtMC4xNXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGtleWZyYW1lcyBsZHMtcmluZyB7XG4gICAgICAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgfVxuICAgICAgMTAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuZXhwb3J0IGRlZmF1bHQgTG9hZGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgTG9hZGluZ0NvbnRhaW5lciwgU3Bpbm5lciB9IGZyb20gJy4uL3N0eWxlZC9jb21wb25lbnRzL2xvYWRlcic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGxvYWRlclNpemU6ICdzbWFsbCcgfCAnbGcnLFxufVxuXG5jb25zdCBTcGluaW5nQ29udGFpbmVyID0gKHsgbG9hZGVyU2l6ZSB9OiBQcm9wcykgPT4ge1xuICBjb25zdCBpc1NpemUgPSBsb2FkZXJTaXplID09PSAnc21hbGwnID8gJzI1JyA6ICcxMDEnO1xuICByZXR1cm4gKDxMb2FkaW5nQ29udGFpbmVyIGxvYWRlclNpemU9e2xvYWRlclNpemV9IHNpemU9e2lzU2l6ZX0+XG4gICAgPFNwaW5uZXIgbG9hZGVyU2l6ZT17bG9hZGVyU2l6ZX0gc2l6ZT17aXNTaXplfSA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nbGRzLXJpbmcnPlxuICAgICAgICA8ZGl2IC8+XG4gICAgICAgIDxkaXYgLz5cbiAgICAgICAgPGRpdiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9TcGlubmVyPlxuICA8L0xvYWRpbmdDb250YWluZXI+KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNwaW5pbmdDb250YWluZXI7XG4iLCIvLyBAZmxvd1xuLy8gU3RhdGVsZXNzIGNvbXBvbmVudHMgc2hvdWxkIG5vdCBjb250YWluIGFueSBtYXBwaW5nLiBJdCBzaG91bGQgYWxsIGJlIHBhc3NlZC5cbi8vIENvbmRpbnRpb25zIHNob3VsZCBiZSBrZXB0IHRvIGEgbWluaW11bS5cbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IFNwaW5uaW5nQ29udGFpbmVyIGZyb20gJy4vc3Bpbm5lcic7XG5cbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uL3N0eWxlZC9jb21wb25lbnRzL2xvYWRlcic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGxvYWRlclBvc2l0aW9uOiAnYnV0dG9uJyB8ICdvdmVybGF5JyxcbiAgbG9jYXRpb246IHN0cmluZyxcbiAgc2hvd0xvYWRlcjogYm9vbGVhbixcbn07XG5cbmNvbnN0IExvYWRpbmcgPSAoeyBsb2FkZXJQb3NpdGlvbiwgbG9jYXRpb24sIHNob3dMb2FkZXIgfTogUHJvcHMpID0+IHtcbiAgY29uc3QgbG9hZGVyU2l6ZSA9IGxvY2F0aW9uICYmIGxvY2F0aW9uID09PSAnc3VibWl0JyA/ICdzbWFsbCcgOiAnbGcnO1xuICByZXR1cm4gPEZyYWdtZW50PlxuICAgIDxMb2FkZXIgc2hvd0xvYWRlcj17c2hvd0xvYWRlcn0gLz5cbiAgICB7IHNob3dMb2FkZXIgJiYgbG9hZGVyUG9zaXRpb24gPT09ICdvdmVybGF5JyAmJiA8U3Bpbm5pbmdDb250YWluZXIgbG9hZGVyU2l6ZT17bG9hZGVyU2l6ZX0gLz59XG4gIDwvRnJhZ21lbnQ+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTG9hZGluZztcbiIsIi8vIEBmbG93IHN0cmljdC1sb2NhbFxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBTaW5nbGVBdmFGb3JtIH0gZnJvbSAnLi4vbGliL3R5cGVzL2Zvcm1zJztcblxuLy8gU3R5bGVzXG5pbXBvcnQgeyBEZXNjLCBGb3JtSGVhZGVyLCBUaXRsZSB9IGZyb20gJy4uL3N0eWxlZC9mb3JtJztcblxuY29uc3QgRm9ybUhlYWRlckNvbXBvbmVudCA9IChhY3RpdmVEYXRhOiBTaW5nbGVBdmFGb3JtKSA9PiB7XG4gIGNvbnN0IHsgZGVzY3JpcHRpb24sIHRpdGxlIH0gPSBhY3RpdmVEYXRhO1xuICBpZiAoIXRpdGxlICYmICFkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiA8Rm9ybUhlYWRlcj5cbiAgICAgIHt0aXRsZSAmJiA8VGl0bGU+e3RpdGxlfTwvVGl0bGU+fVxuICAgICAge2Rlc2NyaXB0aW9uICYmIDxEZXNjPntkZXNjcmlwdGlvbn08L0Rlc2M+fVxuICAgIDwvRm9ybUhlYWRlcj47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb3JtSGVhZGVyQ29tcG9uZW50O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG4vLyBJbXBvcnQgVHlwZXNcbmltcG9ydCB0eXBlIHsgU3RhdGUgfSBmcm9tICcuLi9saWIvdHlwZXMvcmVkdWNlci1zdGF0ZXMnO1xuaW1wb3J0IHR5cGUgeyBGb3JtRGVmYXVsdENvbmZpZ3MsIFNpbmdsZUF2YUZvcm0gfSBmcm9tICcuLi9saWIvdHlwZXMvZm9ybXMnO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgRm9ybUhlYWRlckNvbXBvbmVudCBmcm9tICcuLi9jb21wb25lbnRzL2Zvcm0taGVhZGVyJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgaXNGaWVsZERpc2FibGVkIH0gZnJvbSAnLi4vaGVscGVycy9mb3Jtcyc7XG5cbi8vIFN0eWxlc1xuaW1wb3J0IHsgTGltaXRFcnJvckNvbnRhaW5lciB9IGZyb20gJy4uL3N0eWxlZC9jb250YWluZXJzL2FwcCc7XG5cbnR5cGUgSGVhZGVyUHJvcHMgPSB7XG4gIGFjdGl2ZUNvbmZpZ3M6IEZvcm1EZWZhdWx0Q29uZmlncyB8IG51bGwsXG4gIGFjdGl2ZURhdGE6IFNpbmdsZUF2YUZvcm0sXG4gIGZvcm1JZDogc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBzdHJpbmcgfCBudWxsLFxuICBzdWJtaXNzaW9ubGltaXQ6IEJvb2xlYW4sXG59O1xuXG5jbGFzcyBGb3JtQ29udGFpbmVyIGV4dGVuZHMgQ29tcG9uZW50PEhlYWRlclByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmVDb25maWdzLCBhY3RpdmVEYXRhLCBzdWJtaXNzaW9ubGltaXQsIGlzRGlzYWJsZWQsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBkZXNjcmlwdGlvbiwgdGl0bGUgfSA9IGFjdGl2ZURhdGE7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEZyYWdtZW50PlxuICAgICAgICA8Rm9ybUhlYWRlckNvbXBvbmVudFxuICAgICAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgICAgICBkZXNjcmlwdGlvbj17ZGVzY3JpcHRpb259XG4gICAgICAgIC8+XG4gICAgICAgIHsoc3VibWlzc2lvbmxpbWl0IHx8IChpc0Rpc2FibGVkICYmIGlzRGlzYWJsZWQgPT09ICdkaXNhYmxlZCcpKSAmJiA8TGltaXRFcnJvckNvbnRhaW5lcj5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3RpdmVDb25maWdzICYmIGFjdGl2ZUNvbmZpZ3Muc3VibWlzc2lvbkxpbWl0RGlzYWJsZWRNZXNzYWdlID8gYWN0aXZlQ29uZmlncy5zdWJtaXNzaW9uTGltaXREaXNhYmxlZE1lc3NhZ2UgOiA8cD5XZSBhcHBvbG9naWVzIGZvciB0aGUgY29uZnVzaW9uIGJ1dCB3ZSBhcmUgbm8gbG9uZ2VyIGFjY2VwdGluZyBzdWJtaXNzaW9ucyBmb3IgdGhpcyBmb3JtLjwvcD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvTGltaXRFcnJvckNvbnRhaW5lcj59XG4gICAgICA8L0ZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHN0YXRlOiBTdGF0ZSwgb3duUHJvcHM6IHsgZm9ybUlkOiBzdHJpbmcgfSkgPT4ge1xuICBjb25zdCBzdWJtaXNzaW9ubGltaXQgPSBzdGF0ZS5mb3Jtcy5zdWJtaXNzaW9ubGltaXQgJiYgc3RhdGUuZm9ybXMuc3VibWlzc2lvbmxpbWl0W293blByb3BzLmZvcm1JZF0gPyBzdGF0ZS5mb3Jtcy5zdWJtaXNzaW9ubGltaXRbb3duUHJvcHMuZm9ybUlkXSA6IGZhbHNlO1xuICBjb25zdCBhY3RpdmVEYXRhID0gc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbb3duUHJvcHMuZm9ybUlkXTtcbiAgY29uc3QgeyBjb25maWdzIH0gPSBhY3RpdmVEYXRhIHx8IHsgY29uZmlnczoge30gfTtcblxuICByZXR1cm4ge1xuICAgIGFjdGl2ZURhdGE6IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW293blByb3BzLmZvcm1JZF0sXG4gICAgYWN0aXZlQ29uZmlnczogc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbb3duUHJvcHMuZm9ybUlkXSA/IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW293blByb3BzLmZvcm1JZF0uY29uZmlncyA6IG51bGwsXG4gICAgc3VibWlzc2lvbmxpbWl0LFxuICAgIGlzRGlzYWJsZWQ6IGlzRmllbGREaXNhYmxlZChzdWJtaXNzaW9ubGltaXQsIGNvbmZpZ3MpLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMpKEZvcm1Db250YWluZXIpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLy8gSGVscGVyc1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9hcGkvbG9nZ2VyLWFwaSc7XG5cbmltcG9ydCB7IGdldExvY2FsZVN0cmluZ1RleHQgfSBmcm9tICcuLi9oZWxwZXJzL2xhbmd1YWdlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgaW5pdFN0YXR1czoge1xuICAgIGZvcm1OYW1lOiBzdHJpbmcgfCBudWxsLFxuICAgIG1lc3NhZ2U6IHN0cmluZyB8IG51bGwsXG4gIH0sXG4gIGZvcm1JZDogc3RyaW5nLFxuICBpc0xhbmd1YWdlOiBzdHJpbmcsXG59O1xuXG5jb25zdCBGb3JtTG9hZEVycm9yID0gKHsgaW5pdFN0YXR1cywgZm9ybUlkLCBpc0xhbmd1YWdlIH06IFByb3BzKSA9PiB7XG4gIGxvZ2dlcih7XG4gICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgbXNnVHlwZTogJ0Zvcm1Mb2FkRXJyb3InLFxuICAgIGZvcm1JZCxcbiAgICBkYXRhOiB7XG4gICAgICBtZXNzYWdlOiAnRm9ybSBmYWlsZWQgdG8gbG9hZCcsXG4gICAgICBlcnJvcjogSlNPTi5zdHJpbmdpZnkoaW5pdFN0YXR1cyksXG4gICAgfSxcbiAgfSk7XG5cbiAgbGV0IG1lc3NhZ2UgPSAnU29tZXRoaW5nIHdlbnQgd3JvbmcuIFdoeSBub3QgY2FsbCBvdXIgc2FsZXMgdGVhbSBkaXJlY3RseT8nO1xuICBtZXNzYWdlID0gZ2V0TG9jYWxlU3RyaW5nVGV4dChtZXNzYWdlLCAnZXJyb3InLCBpc0xhbmd1YWdlKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8cD57bWVzc2FnZX0gPGEgaHJlZj0ndGVsOjg3Ny03NTktNjUyMCc+ODc3LTc1OS02NTIwPC9hPjwvcD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm1Mb2FkRXJyb3I7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBDT0xPUlMgZnJvbSAnLi4vY29uZmlnL2NvbG9ycyc7XG5cbmV4cG9ydCBjb25zdCBUZXJtc09mU2VydmljZUxpbmtDb250YWluZXIgPSBzdHlsZWQuc3BhbmBcbiAgPiAqIHtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke0NPTE9SUy5ncmV5Mn1cbiAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDNweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiA2cHg7XG4gICAgJjpsYXN0LW9mLXR5cGUge1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cblxuICBhIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgY29sb3I6ICR7Q09MT1JTLm9yYW5nZX07XG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyLFxuICAgICY6dmlzaXRlZCB7XG4gICAgICBjb2xvcjogJHtDT0xPUlMub3JhbmdlfTtcbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IFRlcm1zT2ZTZXJ2aWNlTGlua0NvbnRhaW5lcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8vIFN0eWxlc1xuXG5pbXBvcnQgeyBUZXJtc09mU2VydmljZUxpbmtDb250YWluZXIgfSBmcm9tICcuLi8uLi9zdHlsZWQvY29tcG9uZW50cy90ZXJtcy1vZi1zZXJ2aWNlcyc7XG5cbi8vIFR5cGVzXG50eXBlIFByb3BzID0ge1xuICBsaW5rczogQXJyYXk8eyBocmVmOiBzdHJpbmcsIHRleHQ6IHN0cmluZyB9Pixcbn1cblxuZXhwb3J0IGNvbnN0IFRlcm1zT2ZTZXJ2aWNlTGlua3MgPSAoeyBsaW5rcyB9OiBQcm9wcykgPT4ge1xuICBpZiAoIWxpbmtzIHx8IChsaW5rcyAmJiBsaW5rcy5sZW5ndGggPCAxKSkgcmV0dXJuIG51bGw7XG5cbiAgbGV0IGxpbmtCdWlsZCA9ICcnO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGlua0J1aWxkICs9IGA8YSBocmVmPVwiJHtsaW5rc1tpXS5ocmVmfVwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vcmVmZXJyZXIgbm9vcGVuZXJcIj4ke2xpbmtzW2ldLnRleHR9PC9hPmA7XG4gIH1cblxuICByZXR1cm4gPFRlcm1zT2ZTZXJ2aWNlTGlua0NvbnRhaW5lciBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGxpbmtCdWlsZCB9fSAvPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRlcm1zT2ZTZXJ2aWNlTGlua3M7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBDaGVja2JveENvbnRhaW5lciB9IGZyb20gJy4uLy4uL3N0eWxlZC9mb3JtJztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IFRvU0xpbmtzQ29udGFpbmVyIGZyb20gJy4vdGVybXMtb2Ytc2VydmljZS1saW5rcyc7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7XG4gIHNldEFjdGl2ZUNvbnRhaW5lcixcbiAgc2V0RmllbGROYW1lLFxuICBzZXRJbnB1dFZhbGlkYXRpb25DbGFzcyxcbn0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3Jtcyc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoUHJvcHMgYXMgUGFyZW50RGlzcGF0Y2hQcm9wcyB9IGZyb20gJy4uLy4uL2NvbnRhaW5lcnMvZmllbGRzL2NoZWNrYm94JztcbmltcG9ydCB0eXBlIHsgQXZhRm9ybXMsIFNpbmdsZUNhcHR1cmVGaWVsZCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IElucHV0RXZlbnQsIElucHV0VGFyZ2V0IH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzJztcblxudHlwZSBTdGF0ZVByb3BzID0ge1xuICBhY3RpdmVGaWVsZDogc3RyaW5nIHwgbnVsbCxcbiAgZXJyb3JTdGF0ZTogeyBpZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSB8IGZhbHNlLFxuICBmaWVsZHM6IEFycmF5PFNpbmdsZUNhcHR1cmVGaWVsZD4sXG4gIGZpZWxkRGF0YTogQXZhRm9ybXMsXG4gIGhhc0JlZW5WYWxpZGF0ZWQ6IEFycmF5PHN0cmluZz4sXG4gIGlzRGlzYWJsZWQ6IHN0cmluZyxcbiAgaXNSZXF1aXJlZDogYm9vbGVhbixcbiAgaXNDaGVja2VkOiBib29sZWFuLFxuICBpc1NldDogYm9vbGVhbixcbiAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG59O1xuXG50eXBlIFByb3BzID0gUGFyZW50RGlzcGF0Y2hQcm9wcyAmIFN0YXRlUHJvcHMgJiB7XG4gIGN1c3RvbVZhbGlkYXRpb246IFJlZ0V4cCxcbiAgZGlzcGxheVRleHQ/OiBzdHJpbmcsXG4gIGZvcm1JZDogc3RyaW5nLFxuICBoYW5kbGVDaGFuZ2U6ICh0YXJnZXQ6IElucHV0VGFyZ2V0KSA9PiB2b2lkLFxuICBsaW5rcz86IEFycmF5PHsgaHJlZjogc3RyaW5nLCB0ZXh0OiBzdHJpbmcgfT4sXG4gIG5hbWU6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgdmFsdWU/OiBzdHJpbmcgfCBudWxsLFxufVxuXG5leHBvcnQgY29uc3QgQ2hlY2tCb3hDb21wb25lbnQgPSAoe1xuICBhY3RpdmVGaWVsZCxcbiAgZGlzcGxheVRleHQsXG4gIGVycm9yU3RhdGUsXG4gIGZvcm1JZCxcbiAgaGFzQmVlblZhbGlkYXRlZCxcbiAgbGlua3MsXG4gIGhhbmRsZUNoYW5nZSxcbiAgaXNEaXNhYmxlZCxcbiAgaXNSZXF1aXJlZCxcbiAgaWQsXG4gIGlzQ2hlY2tlZCxcbiAgaXNTZXQsXG4gIG5hbWUsXG4gIG9uU2V0QWN0aXZlRmllbGQsXG59OiBQcm9wcykgPT4gPENoZWNrYm94Q29udGFpbmVyIGNsYXNzTmFtZT17YCR7c2V0QWN0aXZlQ29udGFpbmVyKGFjdGl2ZUZpZWxkLCBpZCl9YH0+XG4gIDxsYWJlbD5cbiAgICA8aW5wdXRcbiAgICAgIGNsYXNzTmFtZT17YCR7c2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MoZXJyb3JTdGF0ZSwgaWQsIGlzU2V0LCBoYXNCZWVuVmFsaWRhdGVkKX1gfVxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBpZD17aWR9XG4gICAgICBuYW1lPXtzZXRGaWVsZE5hbWUobmFtZSwgaWQpfVxuICAgICAgb25DaGFuZ2U9eyhlOiBJbnB1dEV2ZW50KSA9PiBoYW5kbGVDaGFuZ2UoZS50YXJnZXQpfVxuICAgICAgb25Gb2N1cz17KGU6IElucHV0RXZlbnQpID0+IG9uU2V0QWN0aXZlRmllbGQoZm9ybUlkLCBlLnRhcmdldC5pZCl9XG4gICAgICB0eXBlPSdjaGVja2JveCdcbiAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZCA/ICdjaGVja2VkJyA6ICcnfS8+XG4gICAgPHNwYW4+e2lzUmVxdWlyZWQgJiYgJyonfSB7ZGlzcGxheVRleHR9IHtsaW5rcyAmJiA8VG9TTGlua3NDb250YWluZXIgbGlua3M9e2xpbmtzfSAvPn1cbiAgICA8L3NwYW4+XG4gIDwvbGFiZWw+XG4gIHtlcnJvclN0YXRlICYmIDxFcnJvck1lc3NhZ2UgY2xhc3NOYW1lPSdlcnJvci1hbGVydC1jb250YWluZXInIGFyaWEtbGl2ZT0nYXNzZXJ0aXZlJyBhbGVydD0ndHJ1ZScgaXNDaGVja2JveCA+e2Vycm9yU3RhdGUubWVzc2FnZX08L0Vycm9yTWVzc2FnZT59XG48L0NoZWNrYm94Q29udGFpbmVyPjtcblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tCb3hDb21wb25lbnQ7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbi8vIEFjdGlvbnNcbmltcG9ydCB7IHNldEFjdGl2ZUZpZWxkLCBjYXB0dXJlSW5wdXQgfSBmcm9tICcuLi8uLi9saWIvYWN0aW9ucyc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCBDaGVja2JveENvbXBvbmVudCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ZpZWxkcy9jaGVja2JveCc7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7XG4gIGNhcHR1cmVEeW5hbWljc1JlcXVpcmVkRmllbGRzLFxuICBjaGVja0lmRmllbGRJc1NldCxcbiAgY2hlY2tJZkhhc0Vycm9yLFxuICBjb250YWluc0dkcHJGaWVsZCxcbiAgdmFsaWRhdGVGaWVsZCxcbn0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3Jtcyc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2FjdGlvbnMnO1xuaW1wb3J0IHR5cGUgeyBTdGF0ZSB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9yZWR1Y2VyLXN0YXRlcyc7XG5pbXBvcnQgdHlwZSB7IEF2YUZvcm1zLCBTZXRKc29uRmllbGQsIFNpbmdsZUNhcHR1cmVGaWVsZCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IElucHV0VGFyZ2V0IH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzJztcblxudHlwZSBTdGF0ZVByb3BzID0ge1xuICBhY3RpdmVGaWVsZDogc3RyaW5nIHwgbnVsbCxcbiAgZHluYW1pY0ZpZWxkczogeyBba2V5OiBzdHJpbmddOiBTZXRKc29uRmllbGQgfSxcbiAgZXJyb3JTdGF0ZTogeyBpZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSB8IGZhbHNlLFxuICBmaWVsZHM6IEFycmF5PFNpbmdsZUNhcHR1cmVGaWVsZD4sXG4gIGZpZWxkRGF0YTogQXZhRm9ybXMsXG4gIGhhc0JlZW5WYWxpZGF0ZWQ6IEFycmF5PHN0cmluZz4sXG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gIGlzQ2hlY2tlZDogYm9vbGVhbixcbiAgaXNTZXQ6IGJvb2xlYW4sXG4gIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxufTtcblxuZXhwb3J0IHR5cGUgRGlzcGF0Y2hQcm9wcyA9IHtcbiAgb25TZXRBY3RpdmVGaWVsZDogKGZvcm1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSA9PiB2b2lkLFxufVxuXG50eXBlIFByb3BzID0gRGlzcGF0Y2hQcm9wcyAmIFN0YXRlUHJvcHMgJiB7XG4gIGN1c3RvbVZhbGlkYXRpb246IFJlZ0V4cCxcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGZpZWxkT2JqZWN0OiBTZXRKc29uRmllbGQsXG4gIGhhc0R5bmFtaWNGaWVsZDogYm9vbGVhbixcbiAgbmFtZTogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBzdHJpbmcsXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsLFxuICBvbkNhcHR1cmVJbnB1dDogKGZvcm1JZDogc3RyaW5nLCBoYXNEeW5hbWljRmllbGQ6IGJvb2xlYW4sIGlucHV0VGFyZ2V0OiBJbnB1dFRhcmdldCwgZHluYW1pY0ZpZWxkczogeyBba2V5OiBzdHJpbmddOiBTZXRKc29uRmllbGQgfSkgPT4gdm9pZCxcbiAgb25WYWxpZGF0ZUZpZWxkOiAoXG4gICAgY3VzdG9tVmFsaWRhdGlvbj86IFJlZ0V4cCxcbiAgICBmb3JtSWQ6IHN0cmluZyxcbiAgICBpc1JlcXVpcmVkOiBib29sZWFuLFxuICAgIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxuICAgIHRhcmdldDogSW5wdXRUYXJnZXQsXG4gICkgPT4gdm9pZCxcbn1cblxuY2xhc3MgQ2hlY2tib3ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHM+IHtcbiAgLy8gaW5jbHVkaW5nIGhlcmUgYXMgd2UgaGF2ZSB0byBkbyB0aGlzIHZhbHVlIGFzc2lnbm1lbnRcbiAgaGFuZGxlQ2hhbmdlID0gKHRhcmdldDogSW5wdXRUYXJnZXQpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjdXN0b21WYWxpZGF0aW9uLFxuICAgICAgZHluYW1pY0ZpZWxkcyxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGhhc0R5bmFtaWNGaWVsZCxcbiAgICAgIGlkLFxuICAgICAgaXNSZXF1aXJlZCxcbiAgICAgIHJlcXVpcmVkRmllbGRzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnByb3BzLmZpZWxkT2JqZWN0ICYmIHRoaXMucHJvcHMuZmllbGRPYmplY3QudmFsdWUgPyB0aGlzLnByb3BzLmZpZWxkT2JqZWN0LnZhbHVlIDogJzEnO1xuICAgIGNvbnN0IHsgY2hlY2tlZCB9ID0gdGFyZ2V0O1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gY2hlY2tlZCA/IHZhbHVlIDogJyc7XG4gICAgdGhpcy5wcm9wcy5vbkNhcHR1cmVJbnB1dChmb3JtSWQsIGhhc0R5bmFtaWNGaWVsZCwge1xuICAgICAgaWQsXG4gICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgY2hlY2tlZCxcbiAgICB9LCBkeW5hbWljRmllbGRzKTtcbiAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgdGhpcy5wcm9wcy5vblZhbGlkYXRlRmllbGQoY3VzdG9tVmFsaWRhdGlvbiwgZm9ybUlkLCBpc1JlcXVpcmVkLCByZXF1aXJlZEZpZWxkcywge1xuICAgICAgICBpZCwgdHlwZTogJ2NoZWNrYm94JywgdmFsdWU6IG5ld1ZhbHVlLCBjaGVja2VkLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmVGaWVsZCxcbiAgICAgIGN1c3RvbVZhbGlkYXRpb24sXG4gICAgICBlcnJvclN0YXRlLFxuICAgICAgZmllbGRzLFxuICAgICAgZmllbGREYXRhLFxuICAgICAgZmllbGRPYmplY3QsXG4gICAgICBmb3JtSWQsXG4gICAgICBoYXNCZWVuVmFsaWRhdGVkLFxuICAgICAgaWQsXG4gICAgICBpc0Rpc2FibGVkLFxuICAgICAgaXNDaGVja2VkLFxuICAgICAgaXNTZXQsXG4gICAgICBuYW1lLFxuICAgICAgb25TZXRBY3RpdmVGaWVsZCxcbiAgICAgIHJlcXVpcmVkRmllbGRzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBmaWVsZE9iamVjdC5yZXF1aXJlZCB8fCBmYWxzZTtcbiAgICByZXR1cm4gPENoZWNrYm94Q29tcG9uZW50XG4gICAgICB7Li4uZmllbGRPYmplY3R9XG4gICAgICBhY3RpdmVGaWVsZD17YWN0aXZlRmllbGR9XG4gICAgICBjdXN0b21WYWxpZGF0aW9uPXtjdXN0b21WYWxpZGF0aW9ufVxuICAgICAgZXJyb3JTdGF0ZT17ZXJyb3JTdGF0ZX1cbiAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgZmllbGREYXRhPXtmaWVsZERhdGF9XG4gICAgICBmb3JtSWQ9e2Zvcm1JZH1cbiAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ9e2hhc0JlZW5WYWxpZGF0ZWR9XG4gICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaXNSZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGlzQ2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgaXNTZXQ9e2lzU2V0fVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIG9uU2V0QWN0aXZlRmllbGQ9e29uU2V0QWN0aXZlRmllbGR9XG4gICAgICBoYW5kbGVDaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgcmVxdWlyZWRGaWVsZHM9e3JlcXVpcmVkRmllbGRzfVxuICAgIC8+O1xuICB9XG59XG5cbmNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IChkaXNwYXRjaDogRGlzcGF0Y2gpID0+ICh7XG4gIG9uU2V0QWN0aXZlRmllbGQ6IChmb3JtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykgPT4ge1xuICAgIGRpc3BhdGNoKHNldEFjdGl2ZUZpZWxkKGZvcm1JZCwgaWQpKTtcbiAgfSxcbiAgb25DYXB0dXJlSW5wdXQ6IChcbiAgICBmb3JtSWQ6IHN0cmluZyxcbiAgICBoYXNEeW5hbWljRmllbGQ6IGJvb2xlYW4sXG4gICAgaW5wdXRUYXJnZXQ6IElucHV0VGFyZ2V0LFxuICAgIGR5bmFtaWNGaWVsZHM6IHsgW2tleTogc3RyaW5nXTogQXJyYXk8U2V0SnNvbkZpZWxkPiB9LFxuICApID0+IHtcbiAgICBkaXNwYXRjaChjYXB0dXJlSW5wdXQoZGlzcGF0Y2gsIGZvcm1JZCwgaW5wdXRUYXJnZXQpKTtcbiAgICBpZiAoaGFzRHluYW1pY0ZpZWxkKSB7XG4gICAgICBjYXB0dXJlRHluYW1pY3NSZXF1aXJlZEZpZWxkcyhkaXNwYXRjaCwgZm9ybUlkLCBpbnB1dFRhcmdldCwgZHluYW1pY0ZpZWxkcyk7XG4gICAgfVxuICB9LFxuICBvblZhbGlkYXRlRmllbGQ6IChcbiAgICBjdXN0b21WYWxpZGF0aW9uPzogUmVnRXhwLFxuICAgIGZvcm1JZDogc3RyaW5nLFxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gICAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG4gICAgdGFyZ2V0OiBJbnB1dFRhcmdldCxcbiAgKSA9PiB2YWxpZGF0ZUZpZWxkKGRpc3BhdGNoLCBjdXN0b21WYWxpZGF0aW9uLCBmb3JtSWQsIGlzUmVxdWlyZWQsIHJlcXVpcmVkRmllbGRzLCB0YXJnZXQpLFxufSk7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IChzdGF0ZTogU3RhdGUsIG93blByb3BzOiB7IGZvcm1JZDogc3RyaW5nLCBpZDogc3RyaW5nIH0pID0+IHtcbiAgY29uc3QgeyBmb3JtSWQsIGlkIH0gPSBvd25Qcm9wcztcbiAgcmV0dXJuIHtcbiAgICBhY3RpdmVGaWVsZDogc3RhdGUuZm9ybXMuYWN0aXZlRmllbGRzW2Zvcm1JZF0sXG4gICAgY29udGFpbnNHZHByQ29udGFpbmVyOiBjb250YWluc0dkcHJGaWVsZChpZCwgc3RhdGUuZm9ybXMuZ2RwckZpZWxkW2Zvcm1JZF0pLFxuICAgIGVycm9yU3RhdGU6IGNoZWNrSWZIYXNFcnJvcihpZCwgc3RhdGUuZm9ybXMuaGFzRXJyb3JbZm9ybUlkXSksXG4gICAgZHluYW1pY0ZpZWxkczogc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXSAmJiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLmR5bmFtaWNGaWVsZHMgJiYgc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXS5keW5hbWljRmllbGRzW293blByb3BzLmlkXSA/IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uZHluYW1pY0ZpZWxkc1tvd25Qcm9wcy5pZF0gOiB7fSxcbiAgICBmaWVsZHM6IHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSxcbiAgICBmaWVsZERhdGE6IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zLFxuICAgIGlzQ2hlY2tlZDogQm9vbGVhbihzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzICYmIHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSAmJiBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0uZmlsdGVyKChmKSA9PiBmLmlkID09PSBpZClbMF0pLFxuICAgIGlzUmVxdWlyZWQ6IHN0YXRlLmZvcm1zLnJlcXVpcmVkRmllbGRzW2Zvcm1JZF0gPyBzdGF0ZS5mb3Jtcy5yZXF1aXJlZEZpZWxkc1tmb3JtSWRdLmluY2x1ZGVzKGlkKSA6IGZhbHNlLFxuICAgIGlzU2V0OiBjaGVja0lmRmllbGRJc1NldChzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0sIGlkKSxcbiAgICByZXF1aXJlZEZpZWxkczogc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMpKENoZWNrYm94KTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBSYWRpb0NvbnRhaW5lciB9IGZyb20gJy4uLy4uL3N0eWxlZC9mb3JtJztcbmltcG9ydCBUZXJtc09mU2VydmljZUxpbmtzIGZyb20gJy4vdGVybXMtb2Ytc2VydmljZS1saW5rcyc7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7XG4gIHNldEFjdGl2ZUNvbnRhaW5lcixcbiAgc2V0RmllbGROYW1lLFxuICBzZXRJbnB1dFZhbGlkYXRpb25DbGFzcyxcbn0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3Jtcyc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoUHJvcHMgYXMgUGFyZW50RGlzcGF0Y2hQcm9wcyB9IGZyb20gJy4uLy4uL2NvbnRhaW5lcnMvZmllbGRzL3Rlcm1zLW9mLXNlcnZpY2UnO1xuaW1wb3J0IHR5cGUgeyBBdmFGb3JtcywgU2luZ2xlQ2FwdHVyZUZpZWxkIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgSW5wdXRFdmVudCwgSW5wdXRUYXJnZXQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMnO1xuXG50eXBlIFN0YXRlUHJvcHMgPSB7XG4gIGFjdGl2ZUZpZWxkOiBzdHJpbmcgfCBudWxsLFxuICBlcnJvclN0YXRlOiB7IGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHwgZmFsc2UsXG4gIGZpZWxkczogQXJyYXk8U2luZ2xlQ2FwdHVyZUZpZWxkPixcbiAgZmllbGREYXRhOiBBdmFGb3JtcyxcbiAgaGFzQmVlblZhbGlkYXRlZDogQXJyYXk8c3RyaW5nPixcbiAgaXNEaXNhYmxlZDogc3RyaW5nLFxuICBpc1JlcXVpcmVkOiBib29sZWFuLFxuICBpc0NoZWNrZWQ6IGJvb2xlYW4sXG4gIGlzU2V0OiBib29sZWFuLFxuICByZXF1aXJlZEZpZWxkczogQXJyYXk8c3RyaW5nPixcbiAgdmFsdWU6IHN0cmluZyB8IG51bGwsIC8vIFJlZHVuZGFudCBGbG93IHJlcXVlc3Rcbn07XG5cbnR5cGUgUHJvcHMgPSBQYXJlbnREaXNwYXRjaFByb3BzICYgU3RhdGVQcm9wcyAmIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsLFxuICBkaXNwbGF5VGV4dDogc3RyaW5nLFxuICBkaXNwbGF5VGV4dENsYXNzOiBBcnJheTxzdHJpbmc+LFxuICBmb3JtSWQ6IHN0cmluZyxcbiAgaGFuZGxlQ2hhbmdlOiAodGFyZ2V0OiBJbnB1dFRhcmdldCwgaGFzRHluYW1pY0ZpZWxkOiBib29sZWFuKSA9PiB2b2lkLFxuICBoYXNEeW5hbWljRmllbGQ6IGJvb2xlYW4sXG4gIGlkOiBzdHJpbmcsXG4gIGlzSW5GaWVsZFNldDogYm9vbGVhbixcbiAgbmFtZTogc3RyaW5nLFxuICB0eXBlOiBzdHJpbmcsXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBSYWRpb0NvbXBvbmVudCA9ICh7XG4gIGFjdGl2ZUZpZWxkLFxuICBkZXNjcmlwdGlvbixcbiAgZGlzcGxheVRleHQsXG4gIGRpc3BsYXlUZXh0Q2xhc3MsXG4gIGVycm9yU3RhdGUsXG4gIGZvcm1JZCxcbiAgaGFuZGxlQ2hhbmdlLFxuICBoYXNCZWVuVmFsaWRhdGVkLFxuICBoYXNEeW5hbWljRmllbGQsXG4gIGlzUmVxdWlyZWQsXG4gIGlkLFxuICBpc0NoZWNrZWQsXG4gIGlzRGlzYWJsZWQsXG4gIGlzSW5GaWVsZFNldCxcbiAgaXNTZXQsXG4gIG5hbWUsXG4gIHR5cGUsXG4gIHZhbHVlLFxuICBvblNldEFjdGl2ZUZpZWxkLFxufTogUHJvcHMpID0+IDxSYWRpb0NvbnRhaW5lciBjbGFzc05hbWU9e2Ake3NldEFjdGl2ZUNvbnRhaW5lcihhY3RpdmVGaWVsZCwgaWQpfWB9IGhhc0Rlc2NyaXB0aW9uPXsoZGVzY3JpcHRpb24gJiYgZGVzY3JpcHRpb24ubGVuZ3RoID4gMCl9PlxuICAgIDxsYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzc05hbWU9e2Ake3NldElucHV0VmFsaWRhdGlvbkNsYXNzKGVycm9yU3RhdGUsIGlkLCBpc1NldCwgaGFzQmVlblZhbGlkYXRlZCl9YH1cbiAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgbmFtZT17c2V0RmllbGROYW1lKG5hbWUsIGlkKX1cbiAgICAgICAgb25DaGFuZ2U9eygpID0+IGhhbmRsZUNoYW5nZSh7IGlkLCB2YWx1ZSwgdHlwZTogJ3JhZGlvJyB9LCBoYXNEeW5hbWljRmllbGQpfVxuICAgICAgICBvbkZvY3VzPXsoZTogSW5wdXRFdmVudCkgPT4gb25TZXRBY3RpdmVGaWVsZChmb3JtSWQsIGUudGFyZ2V0LmlkKX1cbiAgICAgICAgdHlwZT17dHlwZSB8fCAncmFkaW8nfVxuICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWQgPyAnY2hlY2tlZCcgOiAnJ31cbiAgICAgICAgdmFsdWU9e3ZhbHVlfSAvPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtkaXNwbGF5VGV4dENsYXNzID8gZGlzcGxheVRleHRDbGFzcy5qb2luKCcgJykgOiAnJ31gfT57aXNSZXF1aXJlZCAmJiAhaXNJbkZpZWxkU2V0ICYmICcqJ30ge2Rpc3BsYXlUZXh0fTwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICAgIHtkZXNjcmlwdGlvbiAmJiBBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uKSA/IGRlc2NyaXB0aW9uLm1hcCgoZCwgaSkgPT4gPHAga2V5PXtpfSBjbGFzc05hbWU9J2Rlc2MtcCc+e2R9IDwvcD4pIDogPHAgY2xhc3NOYW1lPSdkZXNjLXAnPnsgZGVzY3JpcHRpb24gfSA8L3A+fVxuICA8L1JhZGlvQ29udGFpbmVyPjtcblxuZXhwb3J0IGRlZmF1bHQgUmFkaW9Db21wb25lbnQ7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbi8vIEFjdGlvbnNcbmltcG9ydCB7IHNldEFjdGl2ZUZpZWxkLCBjYXB0dXJlSW5wdXQgfSBmcm9tICcuLi8uLi9saWIvYWN0aW9ucyc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCB7IFJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9maWVsZHMvcmFkaW8nO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQge1xuICBjYXB0dXJlRHluYW1pY3NSZXF1aXJlZEZpZWxkcyxcbiAgY2hlY2tJZkZpZWxkSXNTZXQsXG4gIGNoZWNrSWZIYXNFcnJvcixcbiAgY29udGFpbnNHZHByRmllbGQsXG4gIHZhbGlkYXRlRmllbGQsXG59IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgU3RhdGUgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMvcmVkdWNlci1zdGF0ZXMnO1xuaW1wb3J0IHR5cGUgeyBBdmFGb3JtcywgU2V0SnNvbkZpZWxkLCBTaW5nbGVDYXB0dXJlRmllbGQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBJbnB1dFRhcmdldCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcyc7XG5cbnR5cGUgU3RhdGVQcm9wcyA9IHtcbiAgYWN0aXZlRmllbGQ6IHN0cmluZyB8IG51bGwsXG4gIGR5bmFtaWNGaWVsZHM6IHsgW2tleTogc3RyaW5nXTogQXJyYXk8U2V0SnNvbkZpZWxkPiB9LFxuICBlcnJvclN0YXRlOiB7IGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHwgZmFsc2UsXG4gIGZpZWxkczogQXJyYXk8U2luZ2xlQ2FwdHVyZUZpZWxkPixcbiAgZmllbGREYXRhOiBBdmFGb3JtcyxcbiAgaGFzQmVlblZhbGlkYXRlZDogQXJyYXk8c3RyaW5nPixcbiAgaXNSZXF1aXJlZDogYm9vbGVhbixcbiAgaXNDaGVja2VkOiBib29sZWFuLFxuICBpc1NldDogYm9vbGVhbixcbiAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG59O1xuXG50eXBlIERpc3BhdGNoUHJvcHMgPSB7XG4gIG9uU2V0QWN0aXZlRmllbGQ6IChmb3JtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgb25DYXB0dXJlSW5wdXQ6IChmb3JtSWQ6IHN0cmluZywgaW5wdXRUYXJnZXQ6IElucHV0VGFyZ2V0LCBoYXNEeW5hbWljRmllbGQ6IGJvb2xlYW4sIGR5bmFtaWNGaWVsZHM6IHsgW2tleTogc3RyaW5nXTogQXJyYXk8U2V0SnNvbkZpZWxkPn0pID0+IHZvaWQsXG59XG5cbnR5cGUgUHJvcHMgPSBEaXNwYXRjaFByb3BzICYgU3RhdGVQcm9wcyAmIHtcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGZpZWxkT2JqZWN0OiBTZXRKc29uRmllbGQsXG4gIG5hbWU6IHN0cmluZyxcbiAgaGFzRHluYW1pY0ZpZWxkOiBib29sZWFuLFxuICBpZDogc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBzdHJpbmcsXG4gIGlzSW5GaWVsZFNldD86IGJvb2xlYW4sXG4gIG9uVmFsaWRhdGVGaWVsZDogKFxuICAgIGN1c3RvbVZhbGlkYXRpb246IFJlZ0V4cCB8IG51bGwsXG4gICAgZm9ybUlkOiBzdHJpbmcsXG4gICAgaXNSZXF1aXJlZDogYm9vbGVhbixcbiAgICByZXF1aXJlZEZpZWxkczogQXJyYXk8c3RyaW5nPixcbiAgICB0YXJnZXQ6IElucHV0VGFyZ2V0LFxuICApID0+IHZvaWQsXG59XG5cbmNsYXNzIFJhZGlvIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gIC8vIGluY2x1ZGluZyBoZXJlIGFzIHdlIGhhdmUgdG8gZG8gdGhpcyB2YWx1ZSBhc3NpZ25tZW50XG4gIGhhbmRsZUNoYW5nZSA9ICh0YXJnZXQ6IElucHV0VGFyZ2V0LCBoYXNEeW5hbWljRmllbGQ6IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkeW5hbWljRmllbGRzLFxuICAgICAgZm9ybUlkLFxuICAgICAgaWQsXG4gICAgICBpc1JlcXVpcmVkLFxuICAgICAgcmVxdWlyZWRGaWVsZHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucHJvcHMuZmllbGRPYmplY3QudmFsdWUgfHwgdGFyZ2V0LnZhbHVlIHx8ICcnO1xuXG4gICAgY29uc3QgeyBjaGVja2VkIH0gPSB0YXJnZXQ7XG4gICAgdGhpcy5wcm9wcy5vbkNhcHR1cmVJbnB1dChcbiAgICAgIGZvcm1JZCxcbiAgICAgIHtcbiAgICAgICAgaWQsXG4gICAgICAgIHR5cGU6ICdyYWRpbycsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjaGVja2VkLFxuICAgICAgfSxcbiAgICAgIGhhc0R5bmFtaWNGaWVsZCxcbiAgICAgIGR5bmFtaWNGaWVsZHMsXG4gICAgKTtcbiAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgdGhpcy5wcm9wcy5vblZhbGlkYXRlRmllbGQobnVsbCwgZm9ybUlkLCBpc1JlcXVpcmVkLCByZXF1aXJlZEZpZWxkcywgeyBpZCwgdHlwZTogJ3JhZGlvJywgdmFsdWUgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmVGaWVsZCxcbiAgICAgIGR5bmFtaWNGaWVsZHMsXG4gICAgICBlcnJvclN0YXRlLFxuICAgICAgZmllbGRzLFxuICAgICAgZmllbGREYXRhLFxuICAgICAgZmllbGRPYmplY3QsXG4gICAgICBmb3JtSWQsXG4gICAgICBoYXNCZWVuVmFsaWRhdGVkLFxuICAgICAgaGFzRHluYW1pY0ZpZWxkLFxuICAgICAgaXNSZXF1aXJlZCxcbiAgICAgIGlkLFxuICAgICAgaXNEaXNhYmxlZCxcbiAgICAgIGlzQ2hlY2tlZCxcbiAgICAgIGlzSW5GaWVsZFNldCxcbiAgICAgIGlzU2V0LFxuICAgICAgbmFtZSxcbiAgICAgIG9uU2V0QWN0aXZlRmllbGQsXG4gICAgICByZXF1aXJlZEZpZWxkcyxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGZpZWxkT2JqZWN0O1xuXG4gICAgLy8gJEZsb3dGaXhNZTogSW5nb3JlIGVycm9yLiBGbG93IGlzbid0IHNlZWluZyB0aGUgc3ByZWFkIG9iamVjdCBhcyBpbml0IHZhbHVlcyBiZWluZyBzZXRcbiAgICByZXR1cm4gPFJhZGlvQ29tcG9uZW50XG4gICAgICB7Li4uZmllbGRPYmplY3R9XG4gICAgICBhY3RpdmVGaWVsZD17YWN0aXZlRmllbGR9XG4gICAgICBlcnJvclN0YXRlPXtlcnJvclN0YXRlfVxuICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICBmaWVsZERhdGE9e2ZpZWxkRGF0YX1cbiAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgaGFzQmVlblZhbGlkYXRlZD17aGFzQmVlblZhbGlkYXRlZH1cbiAgICAgIGhhc0R5bmFtaWNGaWVsZD17aGFzRHluYW1pY0ZpZWxkfVxuICAgICAgZHluYW1pY0ZpZWxkcz17ZHluYW1pY0ZpZWxkc31cbiAgICAgIGlzUmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICBpZD17aWR9XG4gICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaXNDaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICBpc0luRmllbGRTZXQ9e2lzSW5GaWVsZFNldCB8fCB0cnVlfVxuICAgICAgaXNTZXQ9e2lzU2V0fVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIG9uU2V0QWN0aXZlRmllbGQ9e29uU2V0QWN0aXZlRmllbGR9XG4gICAgICBoYW5kbGVDaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgcmVxdWlyZWRGaWVsZHM9e3JlcXVpcmVkRmllbGRzfVxuICAgICAgdmFsdWU9e3ZhbHVlIHx8IG51bGx9XG4gICAgLz47XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IChkaXNwYXRjaDogRGlzcGF0Y2gsIG93blByb3BzOiB7IGNhcHR1cmVkVmFsdWU6IHN0cmluZyB9KSA9PiAoe1xuICBvblNldEFjdGl2ZUZpZWxkOiAoZm9ybUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+IHtcbiAgICBkaXNwYXRjaChzZXRBY3RpdmVGaWVsZChmb3JtSWQsIGlkKSk7XG4gIH0sXG4gIG9uQ2FwdHVyZUlucHV0OiAoZm9ybUlkOiBzdHJpbmcsIHRhcmdldDogSW5wdXRUYXJnZXQsIGhhc0R5bmFtaWNGaWVsZDogYm9vbGVhbiA9IGZhbHNlLCBkeW5hbWljRmllbGRzOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PFNldEpzb25GaWVsZD4gfSkgPT4ge1xuICAgIGlmIChvd25Qcm9wcy5jYXB0dXJlZFZhbHVlID09PSB0YXJnZXQudmFsdWUpIHJldHVybjtcbiAgICBkaXNwYXRjaChjYXB0dXJlSW5wdXQoZGlzcGF0Y2gsIGZvcm1JZCwgdGFyZ2V0KSk7XG4gICAgaWYgKGhhc0R5bmFtaWNGaWVsZCkge1xuICAgICAgY2FwdHVyZUR5bmFtaWNzUmVxdWlyZWRGaWVsZHMoZGlzcGF0Y2gsIGZvcm1JZCwgdGFyZ2V0LCBkeW5hbWljRmllbGRzKTtcbiAgICB9XG4gIH0sXG4gIG9uVmFsaWRhdGVGaWVsZDogKFxuICAgIGN1c3RvbVZhbGlkYXRpb24/OiBSZWdFeHAsXG4gICAgZm9ybUlkOiBzdHJpbmcsXG4gICAgaXNSZXF1aXJlZDogYm9vbGVhbixcbiAgICByZXF1aXJlZEZpZWxkczogQXJyYXk8c3RyaW5nPixcbiAgICB0YXJnZXQ6IElucHV0VGFyZ2V0LFxuICApID0+IHZhbGlkYXRlRmllbGQoZGlzcGF0Y2gsIGN1c3RvbVZhbGlkYXRpb24sIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIHRhcmdldCksXG59KTtcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHN0YXRlOiBTdGF0ZSwgb3duUHJvcHM6IHsgZm9ybUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGZpZWxkT2JqZWN0OiBTZXRKc29uRmllbGQsIHBhcmVudElkOiBzdHJpbmcgfSkgPT4ge1xuICBjb25zdCB7IGZvcm1JZCwgaWQsIGZpZWxkT2JqZWN0IH0gPSBvd25Qcm9wcztcbiAgY29uc3QgeyB2YWx1ZSB9ID0gZmllbGRPYmplY3Q7XG4gIGNvbnN0IGlzU2V0VmFsdWUgPSBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzICYmIHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSAmJiBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0uZmlsdGVyKChmKSA9PiBmLmlkID09PSBpZClbMF0gPyBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0uZmlsdGVyKChmKSA9PiBmLmlkID09PSBpZClbMF0gOiBudWxsO1xuXG4gIGxldCBpc0NoZWNrZWQgPSBmYWxzZTtcbiAgaWYgKGlzU2V0VmFsdWUpIHtcbiAgICBpc0NoZWNrZWQgPSBCb29sZWFuKHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHMgJiYgc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkc1tmb3JtSWRdICYmIHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXS5maWx0ZXIoKGYpID0+IGYuaWQgPT09IGlkKVswXSAmJiBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0uZmlsdGVyKChmKSA9PiBmLmlkID09PSBpZClbMF0udmFsdWUgPT09IHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0aXZlRmllbGQ6IHN0YXRlLmZvcm1zLmFjdGl2ZUZpZWxkc1tmb3JtSWRdLFxuICAgIGR5bmFtaWNGaWVsZHM6IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0gJiYgc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXS5keW5hbWljRmllbGRzICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uZHluYW1pY0ZpZWxkc1tvd25Qcm9wcy5wYXJlbnRJZF0gPyBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLmR5bmFtaWNGaWVsZHNbb3duUHJvcHMucGFyZW50SWRdIDoge30sXG4gICAgY29udGFpbnNHZHByQ29udGFpbmVyOiBjb250YWluc0dkcHJGaWVsZChpZCwgc3RhdGUuZm9ybXMuZ2RwckZpZWxkW2Zvcm1JZF0pLFxuICAgIGVycm9yU3RhdGU6IGNoZWNrSWZIYXNFcnJvcihpZCwgc3RhdGUuZm9ybXMuaGFzRXJyb3JbZm9ybUlkXSksXG4gICAgZmllbGRzOiBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0sXG4gICAgZmllbGREYXRhOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3JtcyxcbiAgICBpc0NoZWNrZWQsXG4gICAgaXNSZXF1aXJlZDogc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXSA/IHN0YXRlLmZvcm1zLnJlcXVpcmVkRmllbGRzW2Zvcm1JZF0uaW5jbHVkZXMoaWQpIDogZmFsc2UsXG4gICAgaXNTZXQ6IGNoZWNrSWZGaWVsZElzU2V0KHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSwgaWQpLFxuICAgIHJlcXVpcmVkRmllbGRzOiBzdGF0ZS5mb3Jtcy5yZXF1aXJlZEZpZWxkc1tmb3JtSWRdLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcykoUmFkaW8pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgZ2V0TG9jYWxlU3RyaW5nVGV4dCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvbGFuZ3VhZ2UnO1xuXG4vLyBTdHlsZXNcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgR2RwckZpZWxkIH0gZnJvbSAnLi4vLi4vc3R5bGVkL2Zvcm0nO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBTdGF0ZVByb3BzLCBEaXNwYXRjaFByb3BzIH0gZnJvbSAnLi4vLi4vY29udGFpbmVycy9maWVsZHMvZ2Rwci1lbGlnYWJsZSc7XG5cbnR5cGUgUHJvcHMgPSBTdGF0ZVByb3BzICYgRGlzcGF0Y2hQcm9wcyAmIHtcbiAgZ2RwckNvdW50cnlTZWxlY3RlZDogYm9vbGVhbixcbiAgZm9ybUlkOiBzdHJpbmcsXG59O1xuXG5leHBvcnQgY29uc3QgR2RwckZpZWxkQ29tcG9uZW50ID0gKHtcbiAgZXJyb3JTdGF0ZSxcbiAgZm9ybUlkLFxuICBnZHByQ291bnRyeVNlbGVjdGVkLFxuICBpc0Rpc2FibGVkLFxuICBpc0dkcHJFbGlnYWJsZSxcbiAgb3B0aW5FbGlnaWJsZSxcbiAgbG9jYWxlLFxuICBvbkNhcHR1cmVJbnB1dCxcbiAgb3B0aW5WYWx1ZSxcbiAgc2V0VmFsdWUsXG59OiBQcm9wcykgPT4ge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZ2RwckNvdW50cnlTZWxlY3RlZCAmJiBzZXRWYWx1ZSkge1xuICAgICAgb25DYXB0dXJlSW5wdXQoZm9ybUlkLCB7XG4gICAgICAgIGlkOiAnZ2RwckNvbnNlbnREYXRlJyxcbiAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBjaGVja2VkOiAnJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKCFnZHByQ291bnRyeVNlbGVjdGVkICYmIHNldFZhbHVlKSB7XG4gICAgICAgIG9uQ2FwdHVyZUlucHV0KGZvcm1JZCwge1xuICAgICAgICAgIGlkOiAnZ2RwckNvbnNlbnREYXRlJyxcbiAgICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBjaGVja2VkOiAnJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2dkcHJDb3VudHJ5U2VsZWN0ZWRdKTtcblxuICBjb25zdCBpc0NoZWNrZWQgPSBvcHRpblZhbHVlID09PSAnb24nID8gJ2NoZWNrZWQnIDogJyc7XG5cbiAgaWYgKGlzR2RwckVsaWdhYmxlIHx8IGdkcHJDb3VudHJ5U2VsZWN0ZWQgfHwgb3B0aW5FbGlnaWJsZSkge1xuICAgIHJldHVybiA8R2RwckZpZWxkPlxuICAgICAgeyBlcnJvclN0YXRlICYmIGVycm9yU3RhdGUubWVzc2FnZSAmJiA8RXJyb3JNZXNzYWdlIGlzR2RwciBjbGFzc05hbWU9J2Vycm9yLW1lc3NhZ2UnIGFyaWEtbGl2ZT0nYXNzZXJ0aXZlJyBhbGVydD0ndHJ1ZSc+e2Vycm9yU3RhdGUubWVzc2FnZX08L0Vycm9yTWVzc2FnZT59XG4gICAgICA8bGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9J2NoZWNrYm94J1xuICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgIGlkPSdnZHByQ29uc2VudERhdGUnXG4gICAgICAgICAgbmFtZT0nZ2Rwci1lbGlnYWJsZSdcbiAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgICAgIG9uQ2FwdHVyZUlucHV0KGZvcm1JZCwgZS50YXJnZXQpOyAvLyBDYXB0dXJlIHZhbHVlXG4gICAgICAgICAgfSB9XG4gICAgICAgICAgY2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgICAgIHZhbHVlPXtzZXRWYWx1ZX1cbiAgICAgICAgLz4gPHNwYW4+eyBnZXRMb2NhbGVTdHJpbmdUZXh0KCdJIHdvdWxkIGxpa2UgdG8gcmVjZWl2ZSB0aGUgbGF0ZXN0IGluIHRheCBuZXdzLCBiZXN0IHByYWN0aWNlcywgYW5kIG90aGVyIG1hcmtldGluZyBjb21tdW5pY2F0aW9ucyBmcm9tIEF2YWxhcmEgYW5kIG1heSB1bnN1YnNjcmliZSBhdCBhbnkgdGltZS4nLCAncXVlc3Rpb24nLCBsb2NhbGUpIH0gPGEgaHJlZj0naHR0cHM6Ly9sZWdhbC5hdmFsYXJhLmNvbS8jcHJpdmFjeXBvbGljeScgdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9yZWZlcnJlciBub29wZW5lcic+e2dldExvY2FsZVN0cmluZ1RleHQoJ1ByaXZhY3kgUG9saWN5JywgJ3F1ZXN0aW9uJywgbG9jYWxlKX08L2E+Ljwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9HZHByRmllbGQ+O1xuICB9XG5cbiAgcmV0dXJuIDxHZHByRmllbGQ+XG4gICAgPHNwYW4+eyBnZXRMb2NhbGVTdHJpbmdUZXh0KCdBdmFsYXJhIG1heSBjb250YWN0IG1lIGFib3V0IEF2YWxhcmEgcHJvZHVjdHMgYW5kIG5ld3MuIEkgdW5kZXJzdGFuZCBJIGNhbiBjaGFuZ2UgbXkgcHJlZmVyZW5jZXMgYXQgYW55IHRpbWUgcGVyIEF2YWxhcmHigJlzJywgJ3F1ZXN0aW9uJywgbG9jYWxlKSB9IDxhIGhyZWY9J2h0dHBzOi8vbGVnYWwuYXZhbGFyYS5jb20vI3ByaXZhY3lwb2xpY3knIHRhcmdldD0nX2JsYW5rJyByZWw9J25vcmVmZXJyZXIgbm9vcGVuZXInPntnZXRMb2NhbGVTdHJpbmdUZXh0KCdQcml2YWN5IFBvbGljeScsICdxdWVzdGlvbicsIGxvY2FsZSl9PC9hPi48L3NwYW4+XG4gIDwvR2RwckZpZWxkPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEdkcHJGaWVsZENvbXBvbmVudDtcbiIsIi8vIEBmbG93XG5leHBvcnQgdHlwZSBPc3RQb2lJdGVtID0ge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nLFxuICB9LFxufSB8IHN0cmluZztcblxudHlwZSBUYWJsZXMgPSB7XG4gIG9zdF9wb2k6IE9zdFBvaUl0ZW0sXG4gIHBzb2lfbWVudV92YWx1ZXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmcsXG4gICAgfSxcbiAgfSxcbiAgb3N0X3BvaV9iaWdfZG9tYWluczogQXJyYXk8c3RyaW5nPixcbiAgc29obzogQXJyYXk8c3RyaW5nPixcbiAgZW1lYV9jb3VudHJpZXM6IEFycmF5PHN0cmluZz4sXG4gIGdkcHJfY291bnRyaWVzOiBBcnJheTxzdHJpbmc+LFxuICBub25fZXhwbGljaXRfb3B0aW46IEFycmF5PHN0cmluZz4sXG59XG5cbmNvbnN0IEF2YVRhYmxlczogVGFibGVzID0ge1xuICBvc3RfcG9pOiB7XG4gICAgJ2FsdGVybmF0aXZlbW90b3JmdWVscy5hdmFsYXJhLmNvbSc6IHtcbiAgICAgICdPcHAgU3ViIFR5cGUnOiAnRXhjaXNlJyxcbiAgICAgICdQcm9kdWN0IG9mIEludGVyZXN0JzogJ0F2YVRheCBFeGNpc2UnLFxuICAgIH0sXG4gICAgJ2F2YWxhcmEuY28udWsnOiB7XG4gICAgICAnT3BwIFN1YiBUeXBlJzogJ0VNRUEnLFxuICAgICAgJ1Byb2R1Y3Qgb2YgSW50ZXJlc3QnOiAnTG9naWMnLFxuICAgIH0sXG4gICAgJ2F2YWxhcmEuY29tJzoge1xuICAgICAgJ09wcCBTdWIgVHlwZSc6ICdMb2dpYycsXG4gICAgICAnUHJvZHVjdCBvZiBJbnRlcmVzdCc6ICdMb2dpYycsXG4gICAgfSxcbiAgICAnYXZhbGFyYW1hcmtldGluZ2NlbnRlci5jb20nOiB7XG4gICAgICAnT3BwIFN1YiBUeXBlJzogJ0F2YVRheCcsXG4gICAgICAnUHJvZHVjdCBvZiBJbnRlcmVzdCc6ICdBdmFUYXgnLFxuICAgIH0sXG4gICAgJ2NlcnRjYXB0dXJlLmF2YWxhcmEuY29tJzoge1xuICAgICAgJ09wcCBTdWIgVHlwZSc6ICdDZXJ0Q2FwdHVyZScsXG4gICAgICAnUHJvZHVjdCBvZiBJbnRlcmVzdCc6ICdDZXJ0Q2FwdHVyZScsXG4gICAgfSxcbiAgICAnY2VydGV4cHJlc3MuYXZhbGFyYS5jb20nOiB7XG4gICAgICAnT3BwIFN1YiBUeXBlJzogJ0NlcnRDYXB0dXJlJyxcbiAgICAgICdQcm9kdWN0IG9mIEludGVyZXN0JzogJ0NlcnRFeHByZXNzJyxcbiAgICB9LFxuICAgICdjb21tdW5pY2F0aW9ucy5hdmFsYXJhLmNvbSc6IHtcbiAgICAgICdPcHAgU3ViIFR5cGUnOiAnQ29tbXVuaWNhdGlvbnMnLFxuICAgICAgJ1Byb2R1Y3Qgb2YgSW50ZXJlc3QnOiAnQXZhVGF4IENvbW11bmljYXRpb25zJyxcbiAgICB9LFxuICAgICdjb21tdW5pY2F0aW9uc3RheHJhdGVzLmF2YWxhcmEuY29tJzoge1xuICAgICAgJ09wcCBTdWIgVHlwZSc6ICdDb21tdW5pY2F0aW9ucycsXG4gICAgICAnUHJvZHVjdCBvZiBJbnRlcmVzdCc6ICdBdmFUYXggQ29tbXVuaWNhdGlvbnMnLFxuICAgIH0sXG4gICAgJ2RldmVsb3Blci5hdmFsYXJhLmNvbSc6IHtcbiAgICAgICdPcHAgU3ViIFR5cGUnOiAnQXZhVGF4JyxcbiAgICAgICdQcm9kdWN0IG9mIEludGVyZXN0JzogJ0F2YVRheCcsXG4gICAgfSxcbiAgICAnZXhjaXNlcmF0ZXMuYXZhbGFyYS5jb20nOiB7XG4gICAgICAnT3BwIFN1YiBUeXBlJzogJ0V4Y2lzZScsXG4gICAgICAnUHJvZHVjdCBvZiBJbnRlcmVzdCc6ICdBdmFUYXggRXhjaXNlJyxcbiAgICB9LFxuICAgICdmYXRjYS5hdmFsYXJhLmNvbSc6IHtcbiAgICAgICdPcHAgU3ViIFR5cGUnOiAnRXhjaXNlJyxcbiAgICAgICdQcm9kdWN0IG9mIEludGVyZXN0JzogJ0F2YVRheCBFeGNpc2UnLFxuICAgIH0sXG4gICAgJ2Z1ZWwuYXZhbGFyYS5jb20nOiB7XG4gICAgICAnT3BwIFN1YiBUeXBlJzogJ0V4Y2lzZScsXG4gICAgICAnUHJvZHVjdCBvZiBJbnRlcmVzdCc6ICdBdmFUYXggRXhjaXNlJyxcbiAgICB9LFxuICAgICdmdWVsaW52b2ljaW5nLmF2YWxhcmEuY29tJzoge1xuICAgICAgJ09wcCBTdWIgVHlwZSc6ICdFeGNpc2UnLFxuICAgICAgJ1Byb2R1Y3Qgb2YgSW50ZXJlc3QnOiAnQXZhVGF4IEV4Y2lzZScsXG4gICAgfSxcbiAgICAnaW5mby5hdmFsYXJhLmNvbSc6IHtcbiAgICAgICdPcHAgU3ViIFR5cGUnOiAnTG9naWMnLFxuICAgICAgJ1Byb2R1Y3Qgb2YgSW50ZXJlc3QnOiAnTG9naWMnLFxuICAgIH0sXG4gICAgJ2xhbmRlZGNvc3QuYXZhbGFyYS5jb20nOiB7XG4gICAgICAnT3BwIFN1YiBUeXBlJzogJ0F2YVRheCcsXG4gICAgICAnUHJvZHVjdCBvZiBJbnRlcmVzdCc6ICdBdmFUYXgnLFxuICAgIH0sXG4gICAgJ01vYmlsZWFwcC5hdmFsYXJhLmNvbSc6IHtcbiAgICAgICdPcHAgU3ViIFR5cGUnOiAnQXZhVGF4JyxcbiAgICAgICdQcm9kdWN0IG9mIEludGVyZXN0JzogJ0F2YVRheCcsXG4gICAgfSxcbiAgICAnbXlsb2RnZXRheC5hdmFsYXJhLmNvbSc6IHtcbiAgICAgICdPcHAgU3ViIFR5cGUnOiAnTXlMb2RnZSBUYXgnLFxuICAgICAgJ1Byb2R1Y3Qgb2YgSW50ZXJlc3QnOiAnTXlMb2RnZSBUYXgnLFxuICAgIH0sXG4gICAgJ29mZmVycy5hdmFsYXJhLmNvbSc6IHtcbiAgICAgICdPcHAgU3ViIFR5cGUnOiAnTG9naWMnLFxuICAgICAgJ1Byb2R1Y3Qgb2YgSW50ZXJlc3QnOiAnTG9naWMnLFxuICAgIH0sXG4gICAgJ3BhcnRuZXJzLmF2YWxhcmEuY29tJzoge1xuICAgICAgJ09wcCBTdWIgVHlwZSc6ICdBdmFUYXgnLFxuICAgICAgJ1Byb2R1Y3Qgb2YgSW50ZXJlc3QnOiAnQXZhVGF4JyxcbiAgICB9LFxuICAgICdwdXJlY2hhbm5lbGFwcy5jb20nOiB7XG4gICAgICAnT3BwIFN1YiBUeXBlJzogJ0F2YVRheCcsXG4gICAgICAnUHJvZHVjdCBvZiBJbnRlcmVzdCc6ICdBdmFUYXgnLFxuICAgIH0sXG4gICAgJ3Jld2FyZHMuYXZhbGFyYS5jb20nOiB7XG4gICAgICAnT3BwIFN1YiBUeXBlJzogJ0F2YVRheCcsXG4gICAgICAnUHJvZHVjdCBvZiBJbnRlcmVzdCc6ICdBdmFUYXgnLFxuICAgIH0sXG4gICAgJ3NhbGVzdGF4LmF2YWxhcmEuY29tJzoge1xuICAgICAgJ09wcCBTdWIgVHlwZSc6ICdMb2dpYycsXG4gICAgICAnUHJvZHVjdCBvZiBJbnRlcmVzdCc6ICdMb2dpYycsXG4gICAgfSxcbiAgICAndGF4cmF0ZXMuY29tJzoge1xuICAgICAgJ09wcCBTdWIgVHlwZSc6ICdMb2dpYycsXG4gICAgICAnUHJvZHVjdCBvZiBJbnRlcmVzdCc6ICdMb2dpYycsXG4gICAgfSxcbiAgICAndHJ1c3RmaWxlLmF2YWxhcmEuY29tJzoge1xuICAgICAgJ09wcCBTdWIgVHlwZSc6ICdUcnVzdEZpbGUnLFxuICAgICAgJ1Byb2R1Y3Qgb2YgSW50ZXJlc3QnOiAnVHJ1c3RGaWxlJyxcbiAgICB9LFxuICAgICd0cnVzdGZpbGViaGFyYXQuYXZhbGFyYS5jb20nOiB7XG4gICAgICAnT3BwIFN1YiBUeXBlJzogJ1RydXN0RmlsZSBCaGFyYXQnLFxuICAgICAgJ1Byb2R1Y3Qgb2YgSW50ZXJlc3QnOiAnVHJ1c3RGaWxlIEJoYXJhdCcsXG4gICAgfSxcbiAgICAndmF0bGl2ZS5jb20nOiB7XG4gICAgICAnT3BwIFN1YiBUeXBlJzogJ0VNRUEnLFxuICAgICAgJ1Byb2R1Y3Qgb2YgSW50ZXJlc3QnOiAnTG9naWMnLFxuICAgIH0sXG4gIH0sXG4gIHBzb2lfbWVudV92YWx1ZXM6IHtcbiAgICAnQXZhVGF4IENyb3NzLUJvcmRlcic6IHtcbiAgICAgIHBzb2k6ICdBdmFUYXggQ3Jvc3MtQm9yZGVyJyxcbiAgICAgIG9zdDogJ0F2YVRheCBDcm9zcy1Cb3JkZXInLFxuICAgIH0sXG4gICAgJ1NhbGVzIGFuZCB1c2UgdGF4Jzoge1xuICAgICAgcHNvaTogJ0F2YVRheCcsXG4gICAgICBvc3Q6ICdBdmFUYXgnLFxuICAgIH0sXG4gICAgJ01hbmFnaW5nIGV4ZW1wdGlvbiBjZXJ0aWZpY2F0ZXMnOiB7XG4gICAgICBwc29pOiAnQ2VydENhcHR1cmUnLFxuICAgICAgb3N0OiAnQ2VydENhcHR1cmUnLFxuICAgIH0sXG4gICAgJ0Nyb3NzIGJvcmRlciB0cmFuc2FjdGlvbnMnOiB7XG4gICAgICBwc29pOiAnTGFuZGVkIENvc3QgQ3Jvc3MgQm9yZGVyJyxcbiAgICAgIG9zdDogJ0F2YVRheCcsXG4gICAgfSxcbiAgICAnQ29tbXVuaWNhdGlvbnMgdGF4Jzoge1xuICAgICAgcHNvaTogJ0F2YVRheCBDb21tdW5pY2F0aW9ucycsXG4gICAgICBvc3Q6ICdDb21tdW5pY2F0aW9ucycsXG4gICAgfSxcbiAgICAnRXhjaXNlIHRheCc6IHtcbiAgICAgIHBzb2k6ICdBdmFUYXggRXhjaXNlJyxcbiAgICAgIG9zdDogJ0V4Y2lzZScsXG4gICAgfSxcbiAgICAnTG9kZ2luZyB0YXgnOiB7XG4gICAgICBwc29pOiAnTXlMb2RnZScsXG4gICAgICBvc3Q6ICdNeUxvZGdlVGF4JyxcbiAgICB9LFxuXG4gIH0sXG4gIG9zdF9wb2lfYmlnX2RvbWFpbnM6IFtcbiAgICAnYXZhbGFyYS5jb20nLFxuICAgICd2YXRsaXZlLmNvbScsXG4gICAgJ2F2YWxhcmEuY28udWsnLFxuICAgICdvZmZlcnMuYXZhbGFyYS5jb20nLFxuICAgICdzYWxlc3RheC5hdmFsYXJhLmNvbScsXG4gIF0sXG4gIHNvaG86IFtcbiAgICAnYmlnY29tbWVyY2UnLFxuICAgICdjcy1jYXJ0JyxcbiAgICAnZXBhZ2VzJyxcbiAgICAnb3Blbi1jYXJ0LWVjb20nLFxuICAgICdwaW5uYWNsZS1jYXJ0LWluYycsXG4gICAgJ3BpeGFtaScsXG4gICAgJ3ByZXN0YXNob3AnLFxuICAgICdxdWlja2Jvb2tzLW9ubGluZScsXG4gICAgJ3ZpcnR1ZW1hcnQnLFxuICAgICd3b29jb21tZXJjZScsXG4gICAgJ3gtY2FydCcsXG4gICAgJ3plbi1jYXJ0JyxcbiAgXSxcbiAgbm9uX2V4cGxpY2l0X29wdGluOiBbXG4gICAgJ1VTJyxcbiAgXSxcbiAgZW1lYV9jb3VudHJpZXM6IFtcbiAgICAnQUwnLFxuICAgICdEWicsXG4gICAgJ0FEJyxcbiAgICAnQU8nLFxuICAgICdBVCcsXG4gICAgJ0JIJyxcbiAgICAnQlknLFxuICAgICdCRScsXG4gICAgJ0JKJyxcbiAgICAnQkEnLFxuICAgICdCVycsXG4gICAgJ0JHJyxcbiAgICAnQkYnLFxuICAgICdCSScsXG4gICAgJ0NNJyxcbiAgICAnQ1YnLFxuICAgICdDRicsXG4gICAgJ1REJyxcbiAgICAnS00nLFxuICAgICdIUicsXG4gICAgJ0NZJyxcbiAgICAnQ1onLFxuICAgICdDRycsXG4gICAgJ0RLJyxcbiAgICAnREonLFxuICAgICdFRycsXG4gICAgJ0dRJyxcbiAgICAnRVInLFxuICAgICdFRScsXG4gICAgJ0VUJyxcbiAgICAnRk8nLFxuICAgICdGSScsXG4gICAgJ0ZSJyxcbiAgICAnR0EnLFxuICAgICdHTScsXG4gICAgJ0dFJyxcbiAgICAnREUnLFxuICAgICdHSCcsXG4gICAgJ0dJJyxcbiAgICAnR1InLFxuICAgICdHRycsXG4gICAgJ0dOJyxcbiAgICAnR04nLFxuICAgICdIVScsXG4gICAgJ0lTJyxcbiAgICAnSVInLFxuICAgICdJUScsXG4gICAgJ0lFJyxcbiAgICAnSU0nLFxuICAgICdJTCcsXG4gICAgJ0lUJyxcbiAgICAnQ0knLFxuICAgICdKRScsXG4gICAgJ0pPJyxcbiAgICAnS0UnLFxuICAgICdLVycsXG4gICAgJ0xWJyxcbiAgICAnTEInLFxuICAgICdMUycsXG4gICAgJ0xSJyxcbiAgICAnTFknLFxuICAgICdMSScsXG4gICAgJ0xUJyxcbiAgICAnTFUnLFxuICAgICdNSycsXG4gICAgJ01HJyxcbiAgICAnTVcnLFxuICAgICdNTCcsXG4gICAgJ01UJyxcbiAgICAnTVInLFxuICAgICdNVScsXG4gICAgJ01EJyxcbiAgICAnTUMnLFxuICAgICdNRScsXG4gICAgJ01BJyxcbiAgICAnTVonLFxuICAgICdOQScsXG4gICAgJ05MJyxcbiAgICAnTkUnLFxuICAgICdORycsXG4gICAgJ05PJyxcbiAgICAnT00nLFxuICAgICdQUycsXG4gICAgJ1BMJyxcbiAgICAnUFQnLFxuICAgICdRQScsXG4gICAgJ1JPJyxcbiAgICAnUlcnLFxuICAgICdTTScsXG4gICAgJ1NUJyxcbiAgICAnU0EnLFxuICAgICdTTicsXG4gICAgJ1JTJyxcbiAgICAnU0snLFxuICAgICdTSScsXG4gICAgJ1NPJyxcbiAgICAnWkEnLFxuICAgICdFUycsXG4gICAgJ1NEJyxcbiAgICAnU1onLFxuICAgICdTRScsXG4gICAgJ0NIJyxcbiAgICAnU1knLFxuICAgICdUWicsXG4gICAgJ1RHJyxcbiAgICAnVE4nLFxuICAgICdUUicsXG4gICAgJ1VHJyxcbiAgICAnVUEnLFxuICAgICdBRScsXG4gICAgJ0dCJyxcbiAgICAnVkEnLFxuICAgICdFSCcsXG4gICAgJ1lFJyxcbiAgICAnWk0nLFxuICAgICdaVycsXG4gIF0sXG4gIGdkcHJfY291bnRyaWVzOiBbXG4gICAgJ0FUJyxcbiAgICAnQkUnLFxuICAgICdCRycsXG4gICAgJ0hSJyxcbiAgICAnQ0EnLFxuICAgICdDWScsXG4gICAgJ0NaJyxcbiAgICAnREsnLFxuICAgICdFRScsXG4gICAgJ0ZJJyxcbiAgICAnRlInLFxuICAgICdERScsXG4gICAgJ0dSJyxcbiAgICAnSFUnLFxuICAgICdJRScsXG4gICAgJ0lUJyxcbiAgICAnTFYnLFxuICAgICdMVCcsXG4gICAgJ0xVJyxcbiAgICAnTVQnLFxuICAgICdOTCcsXG4gICAgJ1BMJyxcbiAgICAnUFQnLFxuICAgICdSTycsXG4gICAgJ1NLJyxcbiAgICAnU0knLFxuICAgICdFUycsXG4gICAgJ1NFJyxcbiAgICAnR0InLFxuICAgICdBVScsXG4gICAgJ05aJyxcbiAgICAnU0cnLFxuICBdLFxuXG59O1xuZXhwb3J0IGRlZmF1bHQgQXZhVGFibGVzO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IEFWQVRBQkxFUyBmcm9tICcuLi9jb25zdGFudHMvdGFibGVzL2F2YS10YWJsZXMnO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2FwaS9sb2dnZXItYXBpJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgTWF4bWluZEluc2lnaHRzT2JqZWN0IH0gZnJvbSAnLi4vbGliL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgVXNlckluZm8sIEVudHJ5VXNlckluZm8gfSBmcm9tICcuLi9saWIvdHlwZXMvdXNlcic7XG5cbi8vIGhlbHBlciB0byBmb3JtYXQgdXNlciBpbmZvIGZyb20gbG9nZ2VkSW4gdXNlclxuZXhwb3J0IGNvbnN0IGZvcm1hdFVzZXJJbmZvID0gKHVzZXJJbmZvOiBFbnRyeVVzZXJJbmZvKTogVXNlckluZm8gfCB2b2lkID0+IHtcbiAgaWYgKCF1c2VySW5mbyB8fCBPYmplY3Qua2V5cyh1c2VySW5mbykubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgeyBmaXJzdE5hbWUsIGxhc3ROYW1lIH0gPSB1c2VySW5mbztcbiAgLy8gVGhpcyBzaG91bGQgcmVtb3ZlIGZhaWx1cmVzIGlmIGZpcnN0IG9yIGxhc3QgbmFtZSBpcyBlbXB0eVxuICBpZiAoIWZpcnN0TmFtZSB8fCAhbGFzdE5hbWUpIHtcbiAgICBsb2dnZXIoe1xuICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICBtc2dUeXBlOiAnVXNlckluZm9FcnJvcicsXG4gICAgICBmb3JtSWQ6ICcnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiBgTWlzc2luZyBmaXJzdCBvciBsYXN0IG5hbWUgaW4gdXNlciBpbmZvIGZpcnN0TmFtZTogJHtmaXJzdE5hbWV9IGxhc3ROYW1lOiAke2xhc3ROYW1lfWAsXG4gICAgICAgIC8vIHJlc3BvbnNlOiBKU09OLnN0cmluZ2lmeShyZXNwb25zZVZhbGlkYXRpb24pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBzZXRGdWxsbmFtZSA9IGZpcnN0TmFtZS5jb25jYXQoJyAnLCBsYXN0TmFtZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBlbWFpbDogdXNlckluZm8uZW1haWwsXG4gICAgZmlyc3ROYW1lOiB1c2VySW5mby5maXJzdE5hbWUsXG4gICAgbGFzdE5hbWU6IHVzZXJJbmZvLmxhc3ROYW1lLFxuICAgIGZ1bGxuYW1lOiBzZXRGdWxsbmFtZSwgLy8gdGhlIGZpZWxkIGNhcHR1cmUgdmFsdWUgaXMgZnVsbG5hbWVcbiAgICBjb21wYW55OiB1c2VySW5mby5hY2NvdW50TmFtZSxcbiAgICBwaG9uZTogdXNlckluZm8ucGhvbmVOdW1iZXIucmVwbGFjZSgvRC9nLCAnJyksIC8vIFJlcGxhY2UgZXZlcnl0aGluZyBidXQgZGlnaXQgdmFsdWVzIGJlZm9yZSBwYXNzXG4gIH07XG59O1xuXG4vLyBSZXR1cm4gdXNlcidzIGlwXG4vLyBAcmV0dXJuIHtTdHJpbmd9XG5leHBvcnQgY29uc3QgZ2V0VXNlcklwID0gKCk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCB7IG1heG1pbmQgfSA9IHdpbmRvdy5hdmEgfHwgeyBtYXhtaW5kOiBudWxsIH07XG4gIGlmICghbWF4bWluZCB8fCBtYXhtaW5kID09PSBudWxsKSB7XG4gICAgbG9nZ2VyKHtcbiAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgbXNnVHlwZTogJ1VzZXJGdW5jdGlvblRyaWdnZXJOb3RpY2UnLFxuICAgICAgZm9ybUlkOiAnJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ1wiZ2V0VXNlcklwXCIgbm8gaXAgZm91bmQgaW4gZGF0YS4gTWF4bWluZCBtYXkgbm90IGJlIHNldCBpbiB0aW1lJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBpcEFkZHJlc3MgPSBtYXhtaW5kICE9PSBudWxsID8gbWF4bWluZC51c2VyLmlwIDogbnVsbDtcblxuICBsb2dnZXIoe1xuICAgIGxldmVsOiAnaW5mbycsXG4gICAgbXNnVHlwZTogJ1VzZXJGdW5jdGlvblRyaWdnZXJOb3RpY2UnLFxuICAgIGZvcm1JZDogJycsXG4gICAgZGF0YToge1xuICAgICAgbWVzc2FnZTogJ1wiZ2V0VXNlcklwXCIgZnVuY3Rpb24gdHJpZ2dlcmVkJyxcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIGlwQWRkcmVzcztcbn07XG5cbi8vIENoZWNrcyBpZiBhIHVzZXIgaXMgaW4gYSBnaXZlbiBjb3VudHJ5XG4vLyBAcGFyYW0ge1N0cmluZ30gY291bnRyeSBBbiBJU08gY291bnRyeSBjb2RlXG4vLyBAcmV0dXJuIHsgYm9vbGVhbiB9XG5leHBvcnQgY29uc3QgaXNJbiA9IChjaGVja0NvdW50cnk6IHN0cmluZyB8IG51bGwgPSBudWxsKTogYm9vbGVhbiA9PiB7XG4gIGxvZ2dlcih7XG4gICAgbGV2ZWw6ICdpbmZvJyxcbiAgICBtc2dUeXBlOiAnVXNlckZ1bmN0aW9uVHJpZ2dlck5vdGljZScsXG4gICAgZm9ybUlkOiAnJyxcbiAgICBkYXRhOiB7XG4gICAgICBtZXNzYWdlOiAnXCJpc0luXCIgZnVuY3Rpb24gdHJpZ2dlcmVkJyxcbiAgICB9LFxuICB9KTtcblxuICBpZiAoY2hlY2tDb3VudHJ5ID09PSBudWxsIHx8IGNoZWNrQ291bnRyeSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb3VudHJ5IHBhcmFtZXRlciBpcyByZXF1aXJlZC4nKTtcbiAgfVxuXG4gIGxldCBpc29Db2RlID0gbnVsbDtcbiAgY29uc3QgeyBtYXhtaW5kIH06IHsgbWF4bWluZDogeyBJTlNJR0hUUzogTWF4bWluZEluc2lnaHRzT2JqZWN0IH0gfCBudWxsIH0gPSB3aW5kb3cuYXZhIHx8IHsgbWF4bWluZDogbnVsbCB9O1xuICBpZiAobWF4bWluZCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG1heG1pbmREYXRhID0gbWF4bWluZC5JTlNJR0hUUztcbiAgICBjb25zdCB7IGNvdW50cnkgfSA9IG1heG1pbmREYXRhO1xuICAgIGlzb0NvZGUgPSBjb3VudHJ5Lmlzb19jb2RlIHx8IGlzb0NvZGU7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gbWF4bWluZCBkYXRhIGFzc3VtZSBibG9ja2VkIGFuZCBsb2dcbiAgICBpZiAoaXNvQ29kZSA9PT0gbnVsbCkge1xuICAgICAgbG9nZ2VyKHtcbiAgICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgbXNnVHlwZTogJ1VzZXJGdW5jdGlvblRyaWdnZXJOb3RpY2UnLFxuICAgICAgICBmb3JtSWQ6ICcnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbWVzc2FnZTogYFwiaXNJblwiIGZ1bmN0aW9uIHRyaWdnZXJlZCwgbWF4bWluZCBkYXRhIG5vdCBmb3VuZCAke0pTT04uc3RyaW5naWZ5KG1heG1pbmREYXRhKX1gLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKGlzb0NvZGUgIT09IG51bGwgJiYgY2hlY2tDb3VudHJ5LnRvVXBwZXJDYXNlKCkgPT09IGlzb0NvZGUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIENoZWNrcyBpZiB1c2VyIGlzIGluIGVtZWEgcmVnaW9uXG4vLyBAcmV0dXJuIHsgYm9vbGVhbiB9XG5leHBvcnQgY29uc3QgaXNFbWVhID0gKCk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCB7IG1heG1pbmQgfTogeyBtYXhtaW5kOiB7IElOU0lHSFRTOiBNYXhtaW5kSW5zaWdodHNPYmplY3QgfSB8IG51bGx9ID0gd2luZG93LmF2YSB8fCB7IG1heG1pbmQ6IG51bGwgfTtcbiAgbG9nZ2VyKHtcbiAgICBsZXZlbDogJ2luZm8nLFxuICAgIG1zZ1R5cGU6ICdVc2VyRnVuY3Rpb25UcmlnZ2VyTm90aWNlJyxcbiAgICBmb3JtSWQ6ICcnLFxuICAgIGRhdGE6IHtcbiAgICAgIG1lc3NhZ2U6ICdcImlzRW1lYVwiIGZ1bmN0aW9uIHRyaWdnZXJlZCcsXG4gICAgfSxcbiAgfSk7XG5cbiAgaWYgKG1heG1pbmQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgeyBJTlNJR0hUUyB9ID0gbWF4bWluZDtcbiAgY29uc3QgaXNvQ29kZSA9IElOU0lHSFRTLmNvdW50cnkuaXNvX2NvZGUgfHwgbnVsbDtcbiAgaWYgKGlzb0NvZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIEFWQVRBQkxFUy5lbWVhX2NvdW50cmllcy5pbmNsdWRlcyhpc29Db2RlKTtcbn07XG5cbi8vIENoZWNrcyBpZiB1c2VyIGlzIGluIGluZGlhIHJlZ2lvblxuLy8gQHJldHVybiB7IGJvb2xlYW4gfVxuZXhwb3J0IGNvbnN0IGlzSW5kaWEgPSAoKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHsgbWF4bWluZCB9OiB7IG1heG1pbmQ6IHsgSU5TSUdIVFM6IE1heG1pbmRJbnNpZ2h0c09iamVjdCB9IHwgbnVsbH0gPSB3aW5kb3cuYXZhIHx8IHsgbWF4bWluZDogbnVsbCB9O1xuICBsb2dnZXIoe1xuICAgIGxldmVsOiAnaW5mbycsXG4gICAgbXNnVHlwZTogJ1VzZXJGdW5jdGlvblRyaWdnZXJOb3RpY2UnLFxuICAgIGZvcm1JZDogJycsXG4gICAgZGF0YToge1xuICAgICAgbWVzc2FnZTogJ1wiaXNJbmRpYVwiIGZ1bmN0aW9uIHRyaWdnZXJlZCcsXG4gICAgfSxcbiAgfSk7XG4gIGlmIChtYXhtaW5kID09PSBudWxsIHx8IChtYXhtaW5kICYmICFtYXhtaW5kLklOU0lHSFRTKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHsgSU5TSUdIVFMgfSA9IG1heG1pbmQ7XG5cbiAgY29uc3QgaXNvQ29kZSA9IElOU0lHSFRTLmNvdW50cnkuaXNvX2NvZGUgfHwgbnVsbDtcbiAgaWYgKGlzb0NvZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4oaXNvQ29kZSA9PT0gJ0lOJyk7XG59O1xuXG4vLyBDaGVja3MgaWYgdXNlciBpcyBpbiBicmF6aWwgcmVnaW9uXG4vLyBAcmV0dXJuIHsgYm9vbGVhbiB9XG5leHBvcnQgY29uc3QgaXNCcmF6aWwgPSAoKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHsgbWF4bWluZCB9OiB7IG1heG1pbmQ6IHsgSU5TSUdIVFM6IE1heG1pbmRJbnNpZ2h0c09iamVjdCB9IHwgbnVsbH0gPSB3aW5kb3cuYXZhIHx8IHsgbWF4bWluZDogbnVsbCB9O1xuICBsb2dnZXIoe1xuICAgIGxldmVsOiAnaW5mbycsXG4gICAgbXNnVHlwZTogJ1VzZXJGdW5jdGlvblRyaWdnZXJOb3RpY2UnLFxuICAgIGZvcm1JZDogJycsXG4gICAgZGF0YToge1xuICAgICAgbWVzc2FnZTogJ1wiaXNCcmF6aWxcIiBmdW5jdGlvbiB0cmlnZ2VyZWQnLFxuICAgIH0sXG4gIH0pO1xuICBpZiAobWF4bWluZCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB7IElOU0lHSFRTIH0gPSBtYXhtaW5kO1xuXG4gIGNvbnN0IGlzb0NvZGUgPSBJTlNJR0hUUy5jb3VudHJ5Lmlzb19jb2RlIHx8IG51bGw7XG4gIGlmIChpc29Db2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBCb29sZWFuKGlzb0NvZGUgPT09ICdCUicpO1xufTtcblxuLy8gQ2hlY2tzIGlzIGluIGEgR0RQUiBlbGlnaWJsZSBjb3VudHJ5XG4vLyBAcmV0dXJuIHsgYm9vbGVhbiB9XG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbnR5cGUgSVNPUHJvcHMgPSB7IGlzb19jb2RlOiBzdHJpbmcgfSB8IG51bGw7XG5leHBvcnQgY29uc3QgaXNHZHByRWxpZ2libGUgPSAoaXNvQ29kZTogSVNPUHJvcHMgPSBudWxsKTogYm9vbGVhbiA9PiB7XG4gIGxvZ2dlcih7XG4gICAgbGV2ZWw6ICdpbmZvJyxcbiAgICBtc2dUeXBlOiAnVXNlckZ1bmN0aW9uVHJpZ2dlck5vdGljZScsXG4gICAgZm9ybUlkOiAnJyxcbiAgICBkYXRhOiB7XG4gICAgICBtZXNzYWdlOiAnXCJpc0dkcHJFbGlnaWJsZVwiIGZ1bmN0aW9uIHRyaWdnZXJlZCcsXG4gICAgfSxcbiAgfSk7XG5cbiAgaWYgKCFpc29Db2RlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgeyBpc29fY29kZSB9ID0gaXNvQ29kZTtcblxuICBpZiAoIWlzb19jb2RlKSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIEJvb2xlYW4oQVZBVEFCTEVTLmdkcHJfY291bnRyaWVzLmluY2x1ZGVzKGlzb19jb2RlKSk7XG59O1xuLyogZXNsaW50LWVuYWJsZSBjYW1lbGNhc2UgKi9cblxuLy8gQ2hlY2tzIGlmIHVzZXIgc2hvdWxkIHNlZSBvcHRpblxuLy8gQHJldHVybiB7IGJvb2xlYW4gfVxuLy8gUXVlc3Rpb246IFdoeSBpcyAnQ0EnIGhhcmRjb2RlZD8gU2VlbXMgbGlrZSB0aGlzIHdvdWxkIGF3YXlzIHJldHVyblxuZXhwb3J0IGNvbnN0IGlzT3B0aW5FbGlnaWJsZSA9IChpc29Db2RlOiBJU09Qcm9wcyA9IG51bGwpOiBib29sZWFuID0+IHtcbiAgbG9nZ2VyKHtcbiAgICBsZXZlbDogJ2luZm8nLFxuICAgIG1zZ1R5cGU6ICdVc2VyRnVuY3Rpb25UcmlnZ2VyTm90aWNlJyxcbiAgICBmb3JtSWQ6ICcnLFxuICAgIGRhdGE6IHtcbiAgICAgIG1lc3NhZ2U6ICdcImlzR2RwckVsaWdpYmxlXCIgZnVuY3Rpb24gdHJpZ2dlcmVkJyxcbiAgICB9LFxuICB9KTtcblxuXG4gIGlmICghaXNvQ29kZSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHsgaXNvX2NvZGUgfSA9IGlzb0NvZGU7XG4gIGlmICghaXNvX2NvZGUpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEJvb2xlYW4oaXNJbignQ0EnKSB8fCAhQVZBVEFCTEVTLm5vbl9leHBsaWNpdF9vcHRpbi5pbmNsdWRlcyhpc29fY29kZSkpO1xufTtcbi8qIGVzbGludC1lbmFibGUgY2FtZWxjYXNlICovIiwiLy8gQGZsb3dcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbi8vIENvbXBvbmVudFxuaW1wb3J0IEdkcHJGaWVsZCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ZpZWxkcy9nZHByLWVsaWdpYmxlJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgU3RhdGUgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMvcmVkdWNlci1zdGF0ZXMnO1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgSW5wdXRUYXJnZXQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMnO1xuXG4vLyBBY3Rpb25zXG5pbXBvcnQgeyBjYXB0dXJlSW5wdXQgfSBmcm9tICcuLi8uLi9saWIvYWN0aW9ucyc7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7IGlzR2RwckVsaWdpYmxlLCBpc09wdGluRWxpZ2libGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3VzZXInO1xuXG5leHBvcnQgdHlwZSBTdGF0ZVByb3BzID0ge1xuICBlcnJvclN0YXRlOiBib29sZWFuIHwgeyBpZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSxcbiAgbG9jYWxlOiBzdHJpbmcsXG4gIGlzRGlzYWJsZWQ6IHN0cmluZyxcbiAgaXNHZHByRWxpZ2FibGU6IGJvb2xlYW4sXG4gIG9wdGluRWxpZ2libGU6IGJvb2xlYW4sXG4gIGdkcHJDb3VudHJ5U2VsZWN0ZWQ6IGJvb2xlYW4sXG4gIG9wdGluVmFsdWU6IHN0cmluZyxcbiAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG4gIHNldFZhbHVlOiBzdHJpbmcgfCBudWxsLFxufTtcblxuZXhwb3J0IHR5cGUgRGlzcGF0Y2hQcm9wcyA9IHtcbiAgb25DYXB0dXJlSW5wdXQ6IChmb3JtSWQ6IHN0cmluZywgdGFyZ2V0OiBJbnB1dFRhcmdldCkgPT4gdm9pZCxcbn1cblxudHlwZSBQcm9wcyA9IFN0YXRlUHJvcHMgJiBEaXNwYXRjaFByb3BzICYge1xuICBmb3JtSWQ6IHN0cmluZyxcbn1cblxuY2xhc3MgR2RwckNvbnRhaW5lciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcz4ge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAvLyBDYXB0dXJlIGFzIGZvcm0gZmllbGQgdG8gYmUgc2V0IGludG8gcGF5bG9hZCBsYXRlciBhcyB1c2VyIGVsaWdhYmxlXG4gICAgdGhpcy5wcm9wcy5vbkNhcHR1cmVJbnB1dChcbiAgICAgIHRoaXMucHJvcHMuZm9ybUlkLFxuICAgICAge1xuICAgICAgICBpZDogJ2dkcHJfZWxpZ2libGUnLFxuICAgICAgICB0eXBlOiAnbnVsbCcsXG4gICAgICAgIHZhbHVlOiB0aGlzLnByb3BzLmlzR2RwckVsaWdhYmxlID8gJzEnIDogJzAnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIC8vIENhcHR1cmUgYXMgZm9ybSBmaWVsZCB0byBiZSBzZXQgaW50byBwYXlsb2FkIGxhdGVyIGFzIHVzZXIgZWxpZ2FibGVcbiAgICB0aGlzLnByb3BzLm9uQ2FwdHVyZUlucHV0KFxuICAgICAgdGhpcy5wcm9wcy5mb3JtSWQsXG4gICAgICB7XG4gICAgICAgIGlkOiAnZ2Rwcl9lbGlnaWJsZScsXG4gICAgICAgIHR5cGU6ICdudWxsJyxcbiAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMuaXNHZHByRWxpZ2FibGUgPyAnMScgOiAnMCcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZm9ybUlkLFxuICAgICAgZXJyb3JTdGF0ZSxcbiAgICAgIGdkcHJDb3VudHJ5U2VsZWN0ZWQsXG4gICAgICBpc0Rpc2FibGVkLFxuICAgICAgaXNHZHByRWxpZ2FibGUsXG4gICAgICBvcHRpbkVsaWdpYmxlLFxuICAgICAgbG9jYWxlLFxuICAgICAgb25DYXB0dXJlSW5wdXQsXG4gICAgICBvcHRpblZhbHVlLFxuICAgICAgcmVxdWlyZWRGaWVsZHMsXG4gICAgICBzZXRWYWx1ZSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiA8R2RwckZpZWxkXG4gICAgICBlcnJvclN0YXRlPXtlcnJvclN0YXRlfVxuICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgZ2RwckNvdW50cnlTZWxlY3RlZD17Z2RwckNvdW50cnlTZWxlY3RlZH1cbiAgICAgIGlzR2RwckVsaWdhYmxlPXtpc0dkcHJFbGlnYWJsZX1cbiAgICAgIG9wdGluRWxpZ2libGU9e29wdGluRWxpZ2libGV9XG4gICAgICBsb2NhbGU9e2xvY2FsZX1cbiAgICAgIG9uQ2FwdHVyZUlucHV0PXtvbkNhcHR1cmVJbnB1dH1cbiAgICAgIG9wdGluVmFsdWU9e29wdGluVmFsdWV9XG4gICAgICByZXF1aXJlZEZpZWxkcz17cmVxdWlyZWRGaWVsZHN9XG4gICAgICBzZXRWYWx1ZT17c2V0VmFsdWV9XG4gICAgLz47XG4gIH1cbn1cblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHN0YXRlOiBTdGF0ZSwgb3duUHJvcHM6IHsgZm9ybUlkOiBzdHJpbmcgfSk6IFN0YXRlUHJvcHMgPT4ge1xuICBjb25zdCB7IGZvcm1JZCB9ID0gb3duUHJvcHM7XG4gIGNvbnN0IG1heG1pbmREYXRhRXhpc3RzID0gQm9vbGVhbihzdGF0ZS5tYXhtaW5kICE9PSBudWxsICYmIHN0YXRlLm1heG1pbmQgJiYgc3RhdGUubWF4bWluZC5JTlNJR0hUUyAmJiBCb29sZWFuKE9iamVjdC5rZXlzKHN0YXRlLm1heG1pbmQuSU5TSUdIVFMpLmxlbmd0aCA+IDApKTtcbiAgY29uc3QgY291bnRyeUZpZWxkID0gc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkc1tmb3JtSWRdID8gc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkc1tmb3JtSWRdLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLmlkID09PSAnY291bnRyeScpIDogZmFsc2U7XG4gIHJldHVybiB7XG4gICAgZXJyb3JTdGF0ZTogc3RhdGUuZm9ybXMuaGFzRXJyb3JbZm9ybUlkXSA/IHN0YXRlLmZvcm1zLmhhc0Vycm9yW2Zvcm1JZF0uZmlsdGVyKChmKSA9PiBmLmlkID09PSAnZ2RwckNvbnNlbnREYXRlJylbMF0gOiBmYWxzZSxcbiAgICBnZHByQ291bnRyeVNlbGVjdGVkOiAhbWF4bWluZERhdGFFeGlzdHMgJiYgY291bnRyeUZpZWxkID8gKGNvdW50cnlGaWVsZC5sZW5ndGggPT09IDEgJiYgaXNHZHByRWxpZ2libGUoeyBpc29fY29kZTogY291bnRyeUZpZWxkWzBdLnZhbHVlIH0pKSA6IGZhbHNlLFxuICAgIGlzRGlzYWJsZWQ6IHN0YXRlLmZvcm1zLnN1Ym1pc3Npb25saW1pdCAmJiBzdGF0ZS5mb3Jtcy5zdWJtaXNzaW9ubGltaXRbZm9ybUlkXSA/ICdkaXNhYmxlZCcgOiAnJyxcbiAgICBpc0dkcHJFbGlnYWJsZTogc3RhdGUubWF4bWluZCAmJiBzdGF0ZS5tYXhtaW5kLklOU0lHSFRTICYmIHN0YXRlLm1heG1pbmQuSU5TSUdIVFMuY291bnRyeSAmJiBzdGF0ZS5tYXhtaW5kLklOU0lHSFRTLmNvdW50cnkuaXNvX2NvZGUgPyBpc0dkcHJFbGlnaWJsZShzdGF0ZS5tYXhtaW5kLklOU0lHSFRTLmNvdW50cnkpIDogdHJ1ZSxcbiAgICBvcHRpbkVsaWdpYmxlOiBzdGF0ZS5tYXhtaW5kICYmIHN0YXRlLm1heG1pbmQuSU5TSUdIVFMgJiYgc3RhdGUubWF4bWluZC5JTlNJR0hUUy5jb3VudHJ5ICYmIHN0YXRlLm1heG1pbmQuSU5TSUdIVFMuY291bnRyeS5pc29fY29kZSA/IGlzT3B0aW5FbGlnaWJsZShzdGF0ZS5tYXhtaW5kLklOU0lHSFRTLmNvdW50cnkpIDogdHJ1ZSxcbiAgICBsb2NhbGU6IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0gJiYgc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXS5jb25maWdzICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uY29uZmlncy5sYW5ndWFnZSA/IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uY29uZmlncy5sYW5ndWFnZSA6ICdlbicsXG4gICAgcmVxdWlyZWRGaWVsZHM6IHN0YXRlLmZvcm1zLnJlcXVpcmVkRmllbGRzW2Zvcm1JZF0sXG4gICAgb3B0aW5WYWx1ZTogc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkc1tmb3JtSWRdICYmIHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXS5maWx0ZXIoKGYpID0+IGYuaWQgPT09ICdnZHByQ29uc2VudERhdGUnKVswXSAmJiBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0uZmlsdGVyKChmKSA9PiBmLmlkID09PSAnZ2RwckNvbnNlbnREYXRlJylbMF0udmFsdWUgPyAnb24nIDogJ29mZicsXG4gICAgc2V0VmFsdWU6IHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSA/IHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXS5maWx0ZXIoKGYpID0+IGYuaWQgPT09ICdnZHByQ29uc2VudERhdGUnKVswXSAmJiBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0uZmlsdGVyKChmKSA9PiBmLmlkID09PSAnZ2RwckNvbnNlbnREYXRlJylbMF0udmFsdWUgOiAnJyxcbiAgfTtcbn07XG5cbmNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IChkaXNwYXRjaDogRGlzcGF0Y2gpID0+ICh7XG4gIG9uQ2FwdHVyZUlucHV0OiAoZm9ybUlkOiBzdHJpbmcsIHRhcmdldDogSW5wdXRUYXJnZXQpID0+IGRpc3BhdGNoKGNhcHR1cmVJbnB1dChkaXNwYXRjaCwgZm9ybUlkLCB0YXJnZXQpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShHZHByQ29udGFpbmVyKTtcbiIsIi8vIEBmbG93IHN0cmljdC1sb2NhbFxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vLyBTdHlsZXNcbmltcG9ydCB7IFBsYWNlSG9sZGVyVGV4dCB9IGZyb20gJy4uLy4uL3N0eWxlZC9mb3JtJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgc2V0RGlzcGxheVRleHQsIHNldElucHV0Q2xhc3MsIHNldElucHV0VmFsaWRhdGlvbkNsYXNzIH0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3Jtcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGVycm9yU3RhdGU6IHsgaWQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIH0gfCBmYWxzZSxcbiAgZW1haWxPbmx5OiBib29sZWFuLFxuICBpZDogc3RyaW5nLFxuICBpc1NldDogYm9vbGVhbixcbiAgZGlzcGxheVRleHQ/OiBzdHJpbmcsXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nLFxuICBwb3NpdGlvblRvcD86IGJvb2xlYW4sXG4gIHJlcXVpcmVkOiBib29sZWFuIHwgbnVsbCxcbiAgc2V0Q2xhc3Nlcz86IHN0cmluZyxcbiAgaGFzQmVlblZhbGlkYXRlZDogQXJyYXk8c3RyaW5nPixcbn07XG5cbmNvbnN0IFBsYWNlaG9sZGVyVGV4dCA9ICh7XG4gIGVycm9yU3RhdGUsXG4gIGVtYWlsT25seSxcbiAgaWQsXG4gIGlzU2V0LFxuICBkaXNwbGF5VGV4dCxcbiAgcGxhY2Vob2xkZXIsXG4gIHBvc2l0aW9uVG9wLFxuICByZXF1aXJlZCxcbiAgc2V0Q2xhc3NlcyxcbiAgaGFzQmVlblZhbGlkYXRlZCxcbn06IFByb3BzKSA9PiAoXG4gIDxQbGFjZUhvbGRlclRleHRcbiAgICBodG1sRm9yPXtpZH1cbiAgICBwb3NpdGlvblRvcD17cG9zaXRpb25Ub3AgfHwgZmFsc2V9XG4gICAgZW1haWxPbmx5PXtlbWFpbE9ubHl9XG4gICAgZXJyb3JTdGF0ZT17ZXJyb3JTdGF0ZX1cbiAgICBjbGFzc05hbWU9e2BwbGFjZWhvbGRlclRleHRcbiAgICAgICR7c2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MoZXJyb3JTdGF0ZSwgaWQsIGlzU2V0LCBoYXNCZWVuVmFsaWRhdGVkKX0gJHtzZXRJbnB1dENsYXNzKHNldENsYXNzZXMpfWB9PlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAge3NldERpc3BsYXlUZXh0KGRpc3BsYXlUZXh0LCBwbGFjZWhvbGRlcil9e3JlcXVpcmVkICE9PSBudWxsICYmIHJlcXVpcmVkICYmICcgKid9XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L1BsYWNlSG9sZGVyVGV4dD5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFBsYWNlaG9sZGVyVGV4dDtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9mbGF0cGlja3IuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9mbGF0cGlja3IuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiLy8gQGZsb3cgc3RyaWN0LWxvY2FsXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8vICRGbG93Rml4TWU6IElnbm9yZSB1bnR5cGVkIG1vZHVsZVxuaW1wb3J0IEZsYXRwaWNrciBmcm9tICdyZWFjdC1mbGF0cGlja3InO1xuXG4vLyBDb250YWluZXJzXG5pbXBvcnQgR2RwckZpZWxkIGZyb20gJy4uLy4uL2NvbnRhaW5lcnMvZmllbGRzL2dkcHItZWxpZ2FibGUnO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSAnLi9wbGFjZWhvbGRlcic7XG5cbi8vIFN0eWxlc1xuaW1wb3J0ICcuLi8uLi9jc3MvZmxhdHBpY2tyLmNzcyc7XG5pbXBvcnQgJ2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5taW4uY3NzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgRmxhdFBpY2tlckNvbnRhaW5lciB9IGZyb20gJy4uLy4uL3N0eWxlZC9mb3JtJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHtcbiAgZ2V0Rm9ybWF0dGVkRGF0ZSwgc2V0QWN0aXZlQ29udGFpbmVyLCBzZXRGaWVsZENsYXNzZXMsIHNldEZpZWxkTmFtZSwgc2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MsXG59IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBJbnB1dEV2ZW50IH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgU2V0SnNvbkZpZWxkIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgUHJvcHMgYXMgUGFyZW50UHJvcHMgfSBmcm9tICcuLi8uLi9jb250YWluZXJzL2ZpZWxkcy90ZXh0JztcblxudHlwZSBQcm9wcyA9IFBhcmVudFByb3BzICYgU2V0SnNvbkZpZWxkO1xuXG5leHBvcnQgY29uc3QgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQgPSAoe1xuICBhY3RpdmVGaWVsZCxcbiAgY2xhc3NlcyxcbiAgY29udGFpbnNHZHByQ29udGFpbmVyLFxuICBjdXN0b21WYWxpZGF0aW9uLFxuICBkaXNwbGF5VGV4dCxcbiAgZXJyb3JTdGF0ZSxcbiAgZm9ybUlkLFxuICBpZCxcbiAgbmFtZSxcbiAgcGxhY2Vob2xkZXIsXG4gIG9uQ2FwdHVyZUlucHV0LFxuICBvblNldEFjdGl2ZUZpZWxkLFxuICBvblZhbGlkYXRlRmllbGQsXG4gIGhhc0JlZW5WYWxpZGF0ZWQsXG4gIGlzRGlzYWJsZWQsXG4gIGlzUmVxdWlyZWQsXG4gIGlzU2V0LFxuICByZXF1aXJlZCxcbiAgcmVxdWlyZWRGaWVsZHMsXG4gIHR5cGUsXG4gIHZhbHVlLFxufTogUHJvcHMpID0+ICg8RmxhdFBpY2tlckNvbnRhaW5lciBjbGFzc05hbWU9e2Ake3NldEFjdGl2ZUNvbnRhaW5lcihhY3RpdmVGaWVsZCwgaWQpfWB9IGlkPXtgJHtmb3JtSWR9LWRhdGUtcGlja2VyYH0gPlxuICAgIDxGbGF0cGlja3JcbiAgICAgIGRhdGEtZW5hYmxlLXRpbWVcbiAgICAgIGF1dG9Db21wbGV0ZT0nb2ZmJ1xuICAgICAgY2xhc3NOYW1lPXtgJHtzZXRGaWVsZENsYXNzZXMoY2xhc3Nlcyl9JHtzZXRJbnB1dFZhbGlkYXRpb25DbGFzcyhlcnJvclN0YXRlLCBpZCwgaXNTZXQsIGhhc0JlZW5WYWxpZGF0ZWQpfSBkYXRlLXBpY2tlciBmbGF0cGlja3ItaW5wdXRgfVxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBpZD17aWR9XG4gICAgICBuYW1lPXtzZXRGaWVsZE5hbWUobmFtZSwgaWQpfVxuICAgICAgb25CbHVyPXsoZSkgPT4gb25WYWxpZGF0ZUZpZWxkKGN1c3RvbVZhbGlkYXRpb24sIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIGUudGFyZ2V0KSB9XG4gICAgICBvbkNsb3NlPXsoZGF0ZSkgPT4gb25WYWxpZGF0ZUZpZWxkKGN1c3RvbVZhbGlkYXRpb24sIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWU6IHNldEZpZWxkTmFtZShuYW1lLCBpZCksXG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgdmFsdWU6IGdldEZvcm1hdHRlZERhdGUoZGF0ZVswXSksXG4gICAgICB9KVxuICAgICAgfVxuICAgICAgb25DaGFuZ2U9eyhkYXRlKSA9PiBvbkNhcHR1cmVJbnB1dChmb3JtSWQsIHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWU6IHNldEZpZWxkTmFtZShuYW1lLCBpZCksXG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgdmFsdWU6IGdldEZvcm1hdHRlZERhdGUoZGF0ZVswXSksXG4gICAgICB9KX1cbiAgICAgIG9wdGlvbnM9e3tcbiAgICAgICAgYWxsb3dJbnB1dDogdHJ1ZSxcbiAgICAgICAgZGF0ZUZvcm1hdDogJ1ktbS1kIEg6aScsXG4gICAgICAgIGRpc2FibGVNb2JpbGU6IHRydWUsXG4gICAgICB9fVxuICAgICAgb25Gb2N1cz17KGU6IElucHV0RXZlbnQpID0+IG9uU2V0QWN0aXZlRmllbGQoZm9ybUlkLCBlLnRhcmdldC5pZCl9XG4gICAgICB0eXBlPXt0eXBlIHx8ICd0ZXh0J31cbiAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkICYmICdyZXF1aXJlZCd9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgLz5cbiAgICA8UGxhY2Vob2xkZXJcbiAgICAgIGNvbnRhaW5zR2RwckNvbnRhaW5lcj17Y29udGFpbnNHZHByQ29udGFpbmVyfVxuICAgICAgZXJyb3JTdGF0ZT17ZXJyb3JTdGF0ZX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGlzU2V0PXtpc1NldH1cbiAgICAgIGRpc3BsYXlUZXh0PXtkaXNwbGF5VGV4dH1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIHBvc2l0aW9uVG9wPXtjb250YWluc0dkcHJDb250YWluZXJ9XG4gICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICBoYXNCZWVuVmFsaWRhdGVkPXtoYXNCZWVuVmFsaWRhdGVkfVxuICAgIC8+XG4gICAge2Vycm9yU3RhdGUgJiYgPEVycm9yTWVzc2FnZSBhcmlhLWxpdmU9J2Fzc2VydGl2ZScgYWxlcnQ9J3RydWUnPntlcnJvclN0YXRlLm1lc3NhZ2V9PC9FcnJvck1lc3NhZ2U+fVxuICAgIHsgY29udGFpbnNHZHByQ29udGFpbmVyICYmIDxHZHByRmllbGQgZm9ybUlkPXtmb3JtSWR9IC8+fVxuICA8L0ZsYXRQaWNrZXJDb250YWluZXI+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZVBpY2tlckNvbXBvbmVudDtcbiIsIi8vIEBmbG93IHNjcmljdC1sb2NhbFxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IFBpY2tyQ29tcG9uZW50IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZmllbGRzL2RhdGUnO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQge1xuICBjaGVja0lmRmllbGRJc1NldCxcbiAgY2hlY2tJZkhhc0Vycm9yLFxuICBjb250YWluc0dkcHJGaWVsZCxcbiAgZ2V0RmllbGRWYWx1ZU9iamVjdCxcbn0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3Jtcyc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcbmltcG9ydCB0eXBlIHsgQXZhRm9ybXMsIFNldEpzb25GaWVsZCwgU2luZ2xlQ2FwdHVyZUZpZWxkIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2hQcm9wcyBhcyBQYXJlbnREaXNwYXRjaFByb3BzIH0gZnJvbSAnLi4vZmllbGRzJztcblxuLy8gUHJvcHNcbmV4cG9ydCB0eXBlIFN0YXRlUHJvcHMgPSB7XG4gIGFjdGl2ZUZpZWxkOiBzdHJpbmcgfCBudWxsLFxuICBlcnJvclN0YXRlOiB7IGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHwgZmFsc2UsXG4gIGZpZWxkczogQXJyYXk8U2luZ2xlQ2FwdHVyZUZpZWxkPixcbiAgZmllbGREYXRhOiBBdmFGb3JtcyxcbiAgaGFzQmVlblZhbGlkYXRlZDogQXJyYXk8c3RyaW5nPixcbiAgaXNMYXN0RmllbGQ6IGJvb2xlYW4gfCB7IGlkOiBzdHJpbmcsIHJlcXVpcmVkOiBib29sZWFuIH0sXG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gIGlzU2V0OiBib29sZWFuLFxuICByZXF1aXJlZEZpZWxkczogQXJyYXk8c3RyaW5nPixcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BzID0gUGFyZW50RGlzcGF0Y2hQcm9wcyAmIFN0YXRlUHJvcHMgJiB7XG4gIGNvbnRhaW5zR2RwckNvbnRhaW5lcjogYm9vbGVhbixcbiAgZmllbGRPYmplY3Q/OiBTZXRKc29uRmllbGQsXG4gIGZvcm1JZDogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBzdHJpbmcsXG59O1xuXG5jbGFzcyBEYXRlVGltZVBpY2tlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcz4ge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWN0aXZlRmllbGQsXG4gICAgICBjb250YWluc0dkcHJDb250YWluZXIsXG4gICAgICBlcnJvclN0YXRlLFxuICAgICAgZmllbGRzLFxuICAgICAgZmllbGREYXRhLFxuICAgICAgZmllbGRPYmplY3QsXG4gICAgICBmb3JtSWQsXG4gICAgICBoYXNCZWVuVmFsaWRhdGVkLFxuICAgICAgaWQsXG4gICAgICBpc0Rpc2FibGVkLFxuICAgICAgaXNMYXN0RmllbGQsXG4gICAgICBpc1JlcXVpcmVkLFxuICAgICAgaXNTZXQsXG4gICAgICBvbkNhcHR1cmVJbnB1dCxcbiAgICAgIG9uU2V0QWN0aXZlRmllbGQsXG4gICAgICBvblNldExhc3RGaWVsZCxcbiAgICAgIG9uVmFsaWRhdGVGaWVsZCxcbiAgICAgIHJlcXVpcmVkRmllbGRzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gJEZsb3dGaXhNZTogSW5nb3JlIGVycm9yLiBGbG93IGlzbid0IHNlZWluZyB0aGUgc3ByZWFkIG9iamVjdCBhcyBpbml0IHZhbHVlcyBiZWluZyBzZXRcbiAgICByZXR1cm4gPFBpY2tyQ29tcG9uZW50XG4gICAgICB7Li4uZmllbGRPYmplY3R9IC8vIFNwcmVhZCBmaWVsZCBvYmplY3QgdG8gcGFzcyBhbGwgYnkgZGVmYXVsdCBmb3IgYXZhaWxhYmxlIG9iamVjdCB2YWx1ZXMgc2VlIC9saWIvdHlwZXMvZm9ybXMge1NldEpzb25GaWVsZH1cbiAgICAgIGFjdGl2ZUZpZWxkPXthY3RpdmVGaWVsZH1cbiAgICAgIGNvbnRhaW5zR2RwckNvbnRhaW5lcj17Y29udGFpbnNHZHByQ29udGFpbmVyfVxuICAgICAgZXJyb3JTdGF0ZT17ZXJyb3JTdGF0ZX1cbiAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgZmllbGREYXRhPXtmaWVsZERhdGF9XG4gICAgICBmb3JtSWQ9e2Zvcm1JZH1cbiAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ9e2hhc0JlZW5WYWxpZGF0ZWR9XG4gICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaXNMYXN0RmllbGQ9e2lzTGFzdEZpZWxkfVxuICAgICAgaXNSZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgIGlzU2V0PXtpc1NldH1cbiAgICAgIG9uQ2FwdHVyZUlucHV0PXtvbkNhcHR1cmVJbnB1dH1cbiAgICAgIG9uU2V0QWN0aXZlRmllbGQ9e29uU2V0QWN0aXZlRmllbGR9XG4gICAgICBvblNldExhc3RGaWVsZD17b25TZXRMYXN0RmllbGR9XG4gICAgICBvblZhbGlkYXRlRmllbGQ9e29uVmFsaWRhdGVGaWVsZH1cbiAgICAgIHJlcXVpcmVkRmllbGRzPXtyZXF1aXJlZEZpZWxkc31cbiAgICAgIHZhbHVlPXtnZXRGaWVsZFZhbHVlT2JqZWN0KGZpZWxkcywgaWQpLnZhbHVlfVxuICAgIC8+O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoc3RhdGU6IFN0YXRlLCBvd25Qcm9wczogeyBpZDogc3RyaW5nLCBmb3JtSWQ6IHN0cmluZywgaGFzRXJyb3I6IHsgaWQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIH0gfCBib29sZWFuIH0pID0+IHtcbiAgY29uc3QgeyBmb3JtSWQsIGlkIH0gPSBvd25Qcm9wcztcbiAgcmV0dXJuIHtcbiAgICBhY3RpdmVGaWVsZDogc3RhdGUuZm9ybXMuYWN0aXZlRmllbGRzW2Zvcm1JZF0sXG4gICAgY29udGFpbnNHZHByQ29udGFpbmVyOiBjb250YWluc0dkcHJGaWVsZChpZCwgc3RhdGUuZm9ybXMuZ2RwckZpZWxkW2Zvcm1JZF0pLFxuICAgIGVycm9yU3RhdGU6IGNoZWNrSWZIYXNFcnJvcihpZCwgc3RhdGUuZm9ybXMuaGFzRXJyb3JbZm9ybUlkXSksXG4gICAgZmllbGRzOiBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0sXG4gICAgZmllbGREYXRhOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3JtcyxcbiAgICBpc1JlcXVpcmVkOiBzdGF0ZS5mb3Jtcy5yZXF1aXJlZEZpZWxkc1tmb3JtSWRdID8gc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXS5pbmNsdWRlcyhpZCkgOiBmYWxzZSxcbiAgICBpc1NldDogY2hlY2tJZkZpZWxkSXNTZXQoc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkc1tmb3JtSWRdLCBpZCksXG4gICAgcmVxdWlyZWRGaWVsZHM6IHN0YXRlLmZvcm1zLnJlcXVpcmVkRmllbGRzW2Zvcm1JZF0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcykoRGF0ZVRpbWVQaWNrZXIpO1xuIiwiLy8gQGZsb3cgc3RyaWN0LWxvY2FsXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8vIFN0eWxlc1xuaW1wb3J0IHsgSGlkZGVuSW5wdXQsIElucHV0Q29udGFpbmVyIH0gZnJvbSAnLi4vLi4vc3R5bGVkL2Zvcm0nO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQgeyBzZXRGaWVsZE5hbWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2Zvcm1zJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgSW5wdXRFdmVudCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNldEpzb25GaWVsZCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IFByb3BzIGFzIFBhcmVudFByb3BzIH0gZnJvbSAnLi4vLi4vY29udGFpbmVycy9maWVsZHMvdGV4dCc7XG5cbnR5cGUgUHJvcHMgPSBQYXJlbnRQcm9wcyAmIFNldEpzb25GaWVsZDtcblxuZXhwb3J0IGNvbnN0IElucHV0VGV4dENvbXBvbmVudCA9ICh7XG4gIGZvcm1JZCxcbiAgaWQsXG4gIG5hbWUsXG4gIG9uQ2FwdHVyZUlucHV0LFxuICB2YWx1ZSxcbn06IFByb3BzKSA9PiAoXG4gIDxJbnB1dENvbnRhaW5lclxuICAgIHN0eWxlcz17eyBkaXNwbGF5OiAnbm9uZScsIHZpc2liaWxpdHk6ICdoaWRkZW4nIH19XG4gID5cbiAgICA8SGlkZGVuSW5wdXRcbiAgICAgIGF1dG9Db21wbGV0ZT0nb2ZmJ1xuICAgICAgaWQ9e2lkfVxuICAgICAgbmFtZT17c2V0RmllbGROYW1lKG5hbWUsIGlkKX1cbiAgICAgIG9uQ2hhbmdlPXsoZTogSW5wdXRFdmVudCkgPT4gb25DYXB0dXJlSW5wdXQoZm9ybUlkLCBlLnRhcmdldCl9XG4gICAgICB0eXBlPXsnaGlkZGVuJ31cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJywgdmlzaWJpbGl0eTogJ2hpZGRlbicgfX1cbiAgICAvPlxuICA8L0lucHV0Q29udGFpbmVyPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgSW5wdXRUZXh0Q29tcG9uZW50O1xuIiwiLy8gQGZsb3dcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vY29uZmlnJztcblxuZXhwb3J0IHR5cGUgUGlja0xpc3RWYWx1ZSA9IHtcbiAgZGF0YTogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBlbmRwb2ludDogc3RyaW5nLFxuICBtaWxlczogYm9vbGVhbixcbn07XG5cbnR5cGUgUGlja0xpc3RWYWx1ZXMgPSBBcnJheTxQaWNrTGlzdFZhbHVlPjtcblxuY29uc3QgUGlja0xpc3RGaWVsZHM6IFBpY2tMaXN0VmFsdWVzID0gW1xuICB7XG4gICAgZGF0YTogJ2Nvbm5lY3RvcnMnLFxuICAgIGlkOiAnY29ubmVjdG9yX2lkJyxcbiAgICBlbmRwb2ludDogJy9jb25uZWN0b3JzL3NlYXJjaCcsXG4gICAgbWlsZXM6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBkYXRhOiAnaW5kdXN0cmllcycsXG4gICAgaWQ6ICdpbmR1c3RyeV9pZCcsXG4gICAgZW5kcG9pbnQ6IGNvbmZpZy5CVVNJTkVTU19MSUNFTlNFX0lORFVTVFJJRVNfU1RPUkFHRSxcbiAgICBtaWxlczogZmFsc2UsXG4gIH0sXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBQaWNrTGlzdEZpZWxkcztcbiIsIi8vIEBmbG93IHNjcmljdC1sb2NhbFxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IElucHV0VGV4dCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ZpZWxkcy9oaWRkZW4nO1xuXG4vLyBDb25zdGFudHNcbmltcG9ydCBQaWNrTGlzdEZpZWxkcyBmcm9tICcuLi8uLi9jb25zdGFudHMvcGlja2xpc3QnO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQge1xuICBnZXRGaWVsZFZhbHVlT2JqZWN0LFxufSBmcm9tICcuLi8uLi9oZWxwZXJzL2Zvcm1zJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgU3RhdGUgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMvcmVkdWNlci1zdGF0ZXMnO1xuaW1wb3J0IHR5cGUgeyBQaWNrTGlzdFZhbHVlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3BpY2tsaXN0JztcbmltcG9ydCB0eXBlIHsgQXZhRm9ybXMsIFNldEpzb25GaWVsZCwgU2luZ2xlQ2FwdHVyZUZpZWxkIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2hQcm9wcyBhcyBQYXJlbnREaXNwYXRjaFByb3BzIH0gZnJvbSAnLi4vZmllbGRzJztcbmltcG9ydCB0eXBlIHsgQ29ubmVjdG9yc0FycmF5IH0gZnJvbSAnLi4vLi4vYXBpL3R5cGVzJztcblxuLy8gUHJvcHNcbmV4cG9ydCB0eXBlIFN0YXRlUHJvcHMgPSB7XG4gIGZpZWxkczogQXJyYXk8U2luZ2xlQ2FwdHVyZUZpZWxkPixcbiAgZmllbGREYXRhOiBBdmFGb3Jtcyxcbn07XG5cbmV4cG9ydCB0eXBlIERpc3BhdGNoUHJvcHMgPSB7XG4gIG9uU2VhcmNoPzogKGVuZHBvaW50OiBzdHJpbmcsIGlkOiBzdHJpbmcsIGZvcm1JZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkLFxuICBvblZhbGlkYXRlQ29ubmVjdG9yPzogKGNvbm5lY3RvckRhdGE6IENvbm5lY3RvcnNBcnJheSwgZmllbGRJZDogc3RyaW5nLCBmb3JtSWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gdm9pZCxcbn1cblxuZXhwb3J0IHR5cGUgUHJvcHMgPSBQYXJlbnREaXNwYXRjaFByb3BzICYgRGlzcGF0Y2hQcm9wcyAmIFN0YXRlUHJvcHMgJiB7XG4gIGNvbm5lY3RvckRhdGE/OiBDb25uZWN0b3JzQXJyYXksXG4gIGNvbnRhaW5zR2RwckNvbnRhaW5lcjogYm9vbGVhbixcbiAgZmllbGRPYmplY3Q/OiBTZXRKc29uRmllbGQsXG4gIGZvcm1JZDogc3RyaW5nLFxuICBwaWNrTGlzdD86IFBpY2tMaXN0VmFsdWUsXG4gIGlkOiBzdHJpbmcsXG4gIGlzTGFzdEZpZWxkOiBib29sZWFuIHwgeyBpZDogc3RyaW5nLCByZXF1aXJlZDogYm9vbGVhbiB9LFxuICB2aWJyYW5jeT86IHN0cmluZyB8IG51bGwsXG59O1xuXG5jbGFzcyBUZXh0SW5wdXRDb250YWluZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbm5lY3RvckRhdGEsXG4gICAgICBmaWVsZHMsXG4gICAgICBmaWVsZERhdGEsXG4gICAgICBmaWVsZE9iamVjdCxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGlkLFxuICAgICAgaXNMYXN0RmllbGQsXG4gICAgICBvbkNhcHR1cmVJbnB1dCxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAvLyAkRmxvd0ZpeE1lOiBJbmdvcmUgZXJyb3IuIEZsb3cgaXNuJ3Qgc2VlaW5nIHRoZSBzcHJlYWQgb2JqZWN0IGFzIGluaXQgdmFsdWVzIGJlaW5nIHNldFxuICAgIHJldHVybiA8SW5wdXRUZXh0XG4gICAgICB7Li4uZmllbGRPYmplY3R9IC8vIFNwcmVhZCBmaWVsZCBvYmplY3QgdG8gcGFzcyBhbGwgYnkgZGVmYXVsdCBmb3IgYXZhaWxhYmxlIG9iamVjdCB2YWx1ZXMgc2VlIC9saWIvdHlwZXMvZm9ybXMge1NldEpzb25GaWVsZH1cbiAgICAgIGNvbm5lY3RvckRhdGE9e2Nvbm5lY3RvckRhdGF9XG4gICAgICBmaWVsZHM9e2ZpZWxkc31cbiAgICAgIGZpZWxkRGF0YT17ZmllbGREYXRhfVxuICAgICAgZm9ybUlkPXtmb3JtSWR9XG4gICAgICBwaWNrTGlzdD17UGlja0xpc3RGaWVsZHMuZmlsdGVyKChmKSA9PiBmLmlkID09PSBpZClbMF19XG4gICAgICBpc0xhc3RGaWVsZD17aXNMYXN0RmllbGR9XG4gICAgICBvbkNhcHR1cmVJbnB1dD17b25DYXB0dXJlSW5wdXR9XG4gICAgICB2YWx1ZT17Z2V0RmllbGRWYWx1ZU9iamVjdChmaWVsZHMsIGlkKS52YWx1ZX1cbiAgICAvPjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHN0YXRlOiBTdGF0ZSwgb3duUHJvcHM6IHsgaWQ6IHN0cmluZywgZm9ybUlkOiBzdHJpbmcsIGhhc0Vycm9yOiB7IGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHwgYm9vbGVhbiB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmb3JtSWQsXG4gIH0gPSBvd25Qcm9wcztcbiAgcmV0dXJuIHtcbiAgICBmaWVsZHM6IHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSxcbiAgICBmaWVsZERhdGE6IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMpKFRleHRJbnB1dENvbnRhaW5lcik7XG4iLCIvLyBAZmxvdyBzdHJpY3QtbG9jYWxcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLy8gQ29tcG5lbnRzXG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSAnLi9wbGFjZWhvbGRlcic7XG5cbi8vIFN0eWxlc1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBJbnB1dE11bHRpU2VsZWN0IH0gZnJvbSAnLi4vLi4vc3R5bGVkL2Zvcm0nO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQge1xuICBpc1NlbGVjdGVkLFxuICBzZXRNdWx0aVNlbGVjdFRhcmdldCxcbiAgc2V0QWN0aXZlQ29udGFpbmVyLFxuICBzZXRGaWVsZENsYXNzZXMsXG4gIHNldEZpZWxkTmFtZSxcbiAgc2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MsXG59IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBJbnB1dEV2ZW50LCBJbnB1dFRhcmdldCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNldEpzb25GaWVsZCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoUHJvcHMgfSBmcm9tICcuLi8uLi9jb250YWluZXJzL2ZpZWxkcyc7XG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoUHJvcHMgYXMgUGFyZW50RGlzcGF0Y2hQcm9wcyB9IGZyb20gJy4uLy4uL2NvbnRhaW5lcnMvZmllbGRzL211bHRpLXNlbGVjdCc7XG5cbnR5cGUgUHJvcHMgPSBEaXNwYXRjaFByb3BzICYgU2V0SnNvbkZpZWxkICYgUGFyZW50RGlzcGF0Y2hQcm9wcyAmIHtcbiAgYWN0aXZlRmllbGQ6IHN0cmluZyB8IG51bGwsXG4gIGVycm9yU3RhdGU6IHsgaWQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIH0gfCBmYWxzZSxcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGhhc0JlZW5WYWxpZGF0ZWQ6IEFycmF5PHN0cmluZz4sXG4gIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxuICBpc0Rpc2FibGVkOiBzdHJpbmcsXG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gIGlzU2V0OiBib29sZWFuLFxuICBvbkNhcHR1cmVJbnB1dDogKHRhcmdldDogSW5wdXRUYXJnZXQpID0+IHZvaWQsXG4gIG9uUmVtb3ZlU2VsZWN0ZWQ6IChpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCByZW1vdmU6IHN0cmluZykgPT4gdm9pZCxcbiAgb25WYWxpZGF0ZUZpZWxkOiAoXG4gICAgY3VzdG9tVmFsaWRhdGlvbj86IFJlZ0V4cCxcbiAgICBmb3JtSWQ6IHN0cmluZyxcbiAgICBpc1JlcXVpcmVkOiBib29sZWFuLFxuICAgIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxuICAgIHRhcmdldDogSW5wdXRUYXJnZXQsXG4gICkgPT4gdm9pZCxcblxuICB2YWx1ZTogc3RyaW5nLFxufTtcblxuZXhwb3J0IGNvbnN0IElucHV0TXVsdGlTZWxlY3RDb21wb25lbnQgPSAoe1xuICBhY3RpdmVGaWVsZCxcbiAgY2xhc3NlcyxcbiAgY3VzdG9tVmFsaWRhdGlvbixcbiAgLy8gJEZsb3dGaXhNZTogRmluZCBvdXQgd2h5IGZsb3cgaXMgbG9va2luZyBpbiB0aGUgd3JvbmcgcGxhY2VcbiAgZGVmYXVsdFZhbHVlLFxuICBkaXNwbGF5VGV4dCxcbiAgZXJyb3JTdGF0ZSxcbiAgZm9ybUlkLFxuICBoYXNCZWVuVmFsaWRhdGVkLFxuICBpZCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNSZXF1aXJlZCxcbiAgaXNTZXQsXG4gIG1pbmhlaWdodCxcbiAgbmFtZSxcbiAgb3B0aW9ucyxcbiAgLy8gJEZsb3dGaXhNZTogRmluZCBvdXQgd2h5IGZsb3cgaXMgbG9va2luZyBpbiB0aGUgd3JvbmcgcGxhY2VcbiAgb25DYXB0dXJlSW5wdXQsXG4gIG9uU2V0QWN0aXZlRmllbGQsXG4gIG9uVmFsaWRhdGVGaWVsZCxcbiAgcGxhY2Vob2xkZXIsXG4gIHJlcXVpcmVkRmllbGRzLFxuICAvLyAkRmxvd0ZpeE1lOiBGaW5kIG91dCB3aHkgZmxvdyBjYW4ndCBzZWUgdGhpcyBpbiBwcm9wc1xuICB2YWx1ZSxcbn06IFByb3BzKSA9PiAoXG4gIDxJbnB1dE11bHRpU2VsZWN0IGNsYXNzTmFtZT17YCR7c2V0QWN0aXZlQ29udGFpbmVyKGFjdGl2ZUZpZWxkLCBpZCl9YH1cbiAgICBtaW5oZWlnaHQ9e21pbmhlaWdodCAhPT0gbnVsbCA/IG1pbmhlaWdodCA6ICdhdXRvJ31cbiAgPlxuICAgIDxQbGFjZWhvbGRlclxuICAgICAgY2xhc3NOYW1lPSdzZWxlY3QtcGxhY2Vob2xkZXInXG4gICAgICBlcnJvclN0YXRlPXtlcnJvclN0YXRlfVxuICAgICAgaWQ9e2lkfVxuICAgICAgaXNTZXQ9e2lzU2V0fVxuICAgICAgZGlzcGxheVRleHQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICBzZXRDbGFzc2VzPSdtdWx0aS1zZWxlY3QtcGxhY2Vob2xkZXInXG4gICAgICBoYXNCZWVuVmFsaWRhdGVkPXtoYXNCZWVuVmFsaWRhdGVkfVxuICAgIC8+XG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtgZm9ybS1ncm91cCAke3NldEZpZWxkQ2xhc3NlcyhjbGFzc2VzKX0ke3NldElucHV0VmFsaWRhdGlvbkNsYXNzKGVycm9yU3RhdGUsIGlkLCBpc1NldCwgaGFzQmVlblZhbGlkYXRlZCl9YH1cbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaWQ9e2lkfVxuICAgICAgbmFtZT17c2V0RmllbGROYW1lKG5hbWUsIGlkKX1cbiAgICAgIG9uRm9jdXM9eyhlOiBJbnB1dEV2ZW50KSA9PiBvblNldEFjdGl2ZUZpZWxkKGZvcm1JZCwgZS50YXJnZXQuaWQpfVxuICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWQgJiYgJ3JlcXVpcmVkJ31cbiAgICAgIGRlZmF1bHRWYWx1ZT17dmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnID8gdmFsdWUuc3BsaXQoJywnKSA6IGRlZmF1bHRWYWx1ZS5zcGxpdCgnLCcpfVxuICAgID5cbiAgICAgIHshIW9wdGlvbnMgJiYgb3B0aW9ucy5tYXAoKG8sIGluZGV4KSA9PiA8YnV0dG9uIGtleT17aW5kZXh9IHZhbHVlPXtvLnZhbHVlfSBjbGFzc05hbWU9e2lzU2VsZWN0ZWQodmFsdWUsIG8uZGlzcGxheSkgPyAnc2VsZWN0ZWQnIDogJyd9XG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgICAgbGV0IHNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IFtdO1xuICAgICAgICBpZiAoY29udGFpbmVyKSBzZWxlY3RlZE9wdGlvbnMgPSAoY29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoJ3NlbGVjdGVkJykpIHNlbGVjdGVkLnB1c2goby52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBvbkNhcHR1cmVJbnB1dChmb3JtSWQsIHNldE11bHRpU2VsZWN0VGFyZ2V0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSwgaWQsIHZhbHVlLCBvLnZhbHVlLCBpc1NlbGVjdGVkKHZhbHVlLCBvLmRpc3BsYXkpKSk7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSBvblZhbGlkYXRlRmllbGQoY3VzdG9tVmFsaWRhdGlvbiwgZm9ybUlkLCBpc1JlcXVpcmVkLCByZXF1aXJlZEZpZWxkcywgc2V0TXVsdGlTZWxlY3RUYXJnZXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLCBpZCwgdmFsdWUsIG8udmFsdWUsIGlzU2VsZWN0ZWQodmFsdWUsIG8uZGlzcGxheSkpKTtcbiAgICAgIH1cbiAgICAgIH1cbiAgICAgID57by5kaXNwbGF5fTwvYnV0dG9uPil9XG4gICAgPC9kaXY+XG4gICAgey8qIDxJbnB1dEFycm93IGNsYXNzTmFtZT0nYXJyJyAvPiAqL31cbiAgICB7ZXJyb3JTdGF0ZSAmJiA8RXJyb3JNZXNzYWdlIGNsYXNzTmFtZT0nc2VsZWN0LWVycm9yLWFsZXJ0Jz57ZXJyb3JTdGF0ZS5tZXNzYWdlfTwvRXJyb3JNZXNzYWdlPn1cbiAgPC9JbnB1dE11bHRpU2VsZWN0PlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgSW5wdXRNdWx0aVNlbGVjdENvbXBvbmVudDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7IHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcblxudHlwZSBBbnlGdW5jdGlvbiA9ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuXG5jb25zdCB1c2VEZWJvdW5jZSA9IChmdW5jOiBBbnlGdW5jdGlvbiwgZGVsYXk6IG51bWJlcikgPT4ge1xuICAvLyBkZWNsYXJlIGEgcmVmIHRvIHN0b3JlIHRoZSBjdXJyZW50IGRlYm91bmNlIHRpbWVyXG4gIGNvbnN0IGRlYm91bmNlVGltZXJSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgLy8gRGVib3VuY2VkIEZ1bmN0aW9uXG4gIC8vIFdlJ3JlIHVzaW5nIHVzZUNhbGxiYWNrIGhlcmUgc28gd2UgY2FuIG1lbW9pemUgdGhlIGZ1bmN0aW9uIGlmIGFueSBvZiB0aGUgYXJncyBmb3IgdXNlRGVib3VuY2UgY2hhbmdlc1xuICAvLyBUaGlzIGlzIHVzZWZ1bCBmb3IgcGVyZm9ybWFuY2Ugc28gdGhlIG9yaWdpbmFsIGZ1bmMgaW5zdGFuY2UgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBoYXZpbmcgdG8gcmUtcmVuZGVyIHRoZSBjb21wb25lbnQgaWYgdGhlIHNhbWUgYXJncyBhcmUgcGFzc2VkXG4gIGNvbnN0IGRlYm91bmNlZEZ1bmN0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKC4uLmFyZ3M6IGFueSkgPT4ge1xuICAgICAgLy8gY2xlYXIgdGhlIGV4aXN0aW5nIHRpbWVyXG4gICAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lclJlZi5jdXJyZW50KTtcbiAgICAgIC8vIHNldCBhIG5ldyB0aW1lciB0byBleGVjdXRlIHRoZSBmdW5jdGlvbiBhZnRlciB0aGUgZGVsYXlcbiAgICAgIGRlYm91bmNlVGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmdW5jKC4uLmFyZ3MpO1xuICAgICAgfSwgZGVsYXkpO1xuICAgIH0sXG4gICAgW2Z1bmMsIGRlbGF5XSxcbiAgKTtcblxuICAvLyB1c2VFZmZlY3Qgd2lsbCByZXR1cm4gYSBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgd2lsbCBjbGVhciB0aGUgdGltZW91dCB3aGVuIHRoZSBjb21wb25lbnQgdW5tb3VudHNcbiAgdXNlRWZmZWN0KCgpID0+ICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lclJlZi5jdXJyZW50KTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiBkZWJvdW5jZWRGdW5jdGlvbjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZURlYm91bmNlO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB0eXBlIHsgSnNvblNjaGVtYSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydFxuY29uc3QgY29ubmVjdG9yU2VhcmNoU2NoZW1hOiBKc29uU2NoZW1hID0ge1xuICB0eXBlOiAnb2JqZWN0JyxcbiAga2V5OiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gIHByb3BlcnRpZXM6IHtcbiAgICBuYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgaWQ6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICB2aWJyYW5jeTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdG9yU2VhcmNoU2NoZW1hO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB0eXBlIHsgSnNvblNjaGVtYSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydFxuY29uc3QgdHlwZWFoZWFkU2VhcmNoU2NoZW1hOiBKc29uU2NoZW1hID0ge1xuICB0eXBlOiAnb2JqZWN0JyxcbiAga2V5OiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gIHByb3BlcnRpZXM6IHtcbiAgICBuYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgaWQ6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVhaGVhZFNlYXJjaFNjaGVtYTtcbiIsIi8vIEBmbG93XG4vLyBEb2NzXG5cbmltcG9ydCB7IGZldGNoLCBzY2hlbWFWYWxpZGF0b3IgfSBmcm9tICdAYXZhbGFyYS1tdGcvaGVscGVycy9saWIvc2hhcmVkJztcblxuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9jb25maWcnO1xuXG4vLyBMb2dnaW5nXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyLWFwaSc7XG5cbi8vIEFjdGlvbnNcbmltcG9ydCB7IGNvbm5lY3RvclNlYXJjaEZhaWxlZCwgY29ubmVjdG9yU2VhcmNoU3VjY2Vzcywgc2V0TG9hZGluZ0ZpbmlzaCB9IGZyb20gJy4uL2xpYi9hY3Rpb25zJztcblxuLy8gU2NoZW1hc1xuaW1wb3J0IGNvbm5lY3RvclNlYXJjaFNjaGVtYSBmcm9tICcuLi9zY2hlbWEvY29ubmVjdG9yJztcbmltcG9ydCB0eXBlYWhlYWRTZWFyY2hTY2hlbWEgZnJvbSAnLi4vc2NoZW1hL3R5cGVhaGVhZCc7XG5cbi8vIEFQSSBTZXR0aW5nc1xuaW1wb3J0IEFQSV9TRVRUSU5HUyBmcm9tICcuLi9zaGFyZWQvYXBpLXNldHRpbmdzJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IFJlc3VsdCB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IENvbm5lY3RvclJlc3VsdHMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgTUlMRVNBUEkgPSBjb25maWcuTUlMRVNfQVBJO1xuY29uc3QgQVZBRk9STVRZUEVBSEVBREFQSSA9IGNvbmZpZy5BVkFGT1JNX1RZUEVBSEVBRF9BUEk7XG5cbi8vIEFQSSBzaG91bGQgdGVjaG5pY2FsbHkgYWx3YXlzIHJldHVybiBzdWNjZXNzICgyMDApLCBob3dldmVyLCBlcnJvcnMgYXJlIHJlZmxlY3RlZCBpbiB0aGUgcmVzcG9uc2UgcmVzcG9uc2UudmFsdWUuc3RhdHVzXG5leHBvcnQgY29uc3QgY29ubmVjdG9yU2VhcmNoID0gYXN5bmMgKGRpc3BhdGNoOiBEaXNwYXRjaCwgZW5kcG9pbnQ/OiBzdHJpbmcgfCBudWxsID0gbnVsbCwgbWlsZXNFbmRwb2ludDogYm9vbGVhbiwgZmllbGRJZDogc3RyaW5nLCBmb3JtSWQ6IHN0cmluZywgdmlicmFuY3k/OiBzdHJpbmcgfCBudWxsID0gbnVsbCkgPT4ge1xuICAvLyBTdG9wIGlmIG5vIGVuZHBvaW50IHNlbnRcbiAgaWYgKCFlbmRwb2ludCkge1xuICAgIC8vIExvZyBmYWlsdXJlXG4gICAgbG9nZ2VyKHtcbiAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgbXNnVHlwZTogJ0FwaUNvbm5lY3Rvck5vRW5kcG9pbnQnLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiAnQ09OTkVDVE9SIHVua25vd24gZW5kcG9pbnQgZm91bmQgLSBObyBlbmRwb2ludCBjb25maWd1cmVkJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZGlzcGF0Y2goY29ubmVjdG9yU2VhcmNoRmFpbGVkKGZvcm1JZCwgJ05vIGVucG9pbnQgY29uZmlndXJlZCcsICdudWxsJykpO1xuICAgIGRpc3BhdGNoKHNldExvYWRpbmdGaW5pc2goKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGNvbm5lY3RvckFwaTtcbiAgbGV0IHJlc3BvbnNlOiBSZXN1bHQ8Q29ubmVjdG9yUmVzdWx0cz47XG5cbiAgaWYgKG1pbGVzRW5kcG9pbnQpIHtcbiAgICBjb25uZWN0b3JBcGkgPSB2aWJyYW5jeSAmJiB2aWJyYW5jeSAhPT0gbnVsbCA/IGAke01JTEVTQVBJfSR7ZW5kcG9pbnR9P3ZpYnJhbmN5PSR7dmlicmFuY3l9YCA6IGAke01JTEVTQVBJfSR7ZW5kcG9pbnR9YDtcbiAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKGNvbm5lY3RvckFwaSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgfSwgQVBJX1NFVFRJTkdTLnRpbWVvdXQpLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICBjb25uZWN0b3JBcGkgPSBgJHtBVkFGT1JNVFlQRUFIRUFEQVBJfSR7ZW5kcG9pbnR9YDtcbiAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKGNvbm5lY3RvckFwaSwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICB9LCBBUElfU0VUVElOR1MudGltZW91dCkudGhlbigocmVzdWx0KSA9PiByZXN1bHQpO1xuICB9XG5cbiAgY29uc3Qgc2F2ZUVuZHBvaW50ID0gdmlicmFuY3kgPyBgJHtlbmRwb2ludH06JHt2aWJyYW5jeX1gIDogZW5kcG9pbnQ7XG4gIGNvbnN0IHZhbGlkYXRvclNjaGVtYSA9IG1pbGVzRW5kcG9pbnQgPyBjb25uZWN0b3JTZWFyY2hTY2hlbWEgOiB0eXBlYWhlYWRTZWFyY2hTY2hlbWE7XG5cbiAgbG9nZ2VyKHtcbiAgICBsZXZlbDogJ2luZm8nLFxuICAgIG1zZ1R5cGU6ICdBcGlDb25uZWN0b3JWYWxpZGF0aW9uJyxcbiAgICBmb3JtSWQsXG4gICAgZGF0YToge1xuICAgICAgbWVzc2FnZTogYFNjaGVtYSB2YWxpZGF0aW9uIGZvciBjb25uZWN0b3IuIERhdGE6ICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpfWAsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3Qgc2NoZW1hVmFsaWRhdGlvblJlc3BvbnNlID0gc2NoZW1hVmFsaWRhdG9yKHZhbGlkYXRvclNjaGVtYSwgcmVzcG9uc2UpO1xuXG4gIGlmIChzY2hlbWFWYWxpZGF0aW9uUmVzcG9uc2UgJiYgIXNjaGVtYVZhbGlkYXRpb25SZXNwb25zZS5vaykge1xuICAgIC8vIFNpbGVudGx5IGZhaWwgc2NoZW1hLCBkbyBub3QgaW50ZXJydXB0IHVzZXIsIHNlbnQgdG8gU3VtbyBmb3IgbG9nZ2luZ1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdBcGlDb25uZWN0b3JWYWxpZGF0aW9uJyxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ0Vycm9yIHdpdGggY29ubmVjdG9yIHJlc3BvbnNlIHNjaGVtYSB2YWxpZGF0aW9uJyxcbiAgICAgICAgcmVzcG9uc2U6IEpTT04uc3RyaW5naWZ5KHNjaGVtYVZhbGlkYXRpb25SZXNwb25zZSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgcmV0dXJuZWQgaW5mb3JtYXRpb24gdG8gYmUgdmFsaWQuIEFueSBvdGhlciBzdGF0dXMgaXMgY29uc2lkZXJlZCBmYWlsZWRcbiAgLy8gRGlzcGF0Y2ggZmFpbHVyZSB0byByZWR1eCByZWR1Y2VyIHJlZHVjZXIvZm9ybXMuanNcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgZGlzcGF0Y2goY29ubmVjdG9yU2VhcmNoRmFpbGVkKGZvcm1JZCwgcmVzcG9uc2UubWVzc2FnZSwgc2F2ZUVuZHBvaW50KSk7XG4gICAgZGlzcGF0Y2goc2V0TG9hZGluZ0ZpbmlzaCgpKTtcbiAgICAvLyBMb2cgZmFpbHVyZVxuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdBcGlDb25uZWN0b3JFbmRwb2ludCcsXG4gICAgICBmb3JtSWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdDT05ORUNUT1IgdW5rbm93biBlcnJvciBmb3VuZCAtIGFwaS9jb25uZWN0b3Itc2VhcmNoLmpzJyxcbiAgICAgICAgcmVzcG9uc2U6IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSxcbiAgICAgICAgZW5kcG9pbnQ6IHNhdmVFbmRwb2ludCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gTG9nIGRhdGEgdG8gd2luZG93IGZvciB0ZXN0aW5nXG4gIGNvbnN0IHsgY29ubmVjdG9ycyB9ID0gd2luZG93LmF2YSB8fCB7IGNvbm5lY3RvcnM6IHt9IH07XG4gIGNvbnN0IHR5cGVBaGVhZCA9IGNvbm5lY3RvcnMgJiYgY29ubmVjdG9yc1tmb3JtSWRdID8gY29ubmVjdG9yc1tmb3JtSWRdIDoge307XG4gIHdpbmRvdy5hdmEuY29ubmVjdG9ycyA9IHtcbiAgICAuLi5jb25uZWN0b3JzLFxuICAgIFtmb3JtSWRdOiB7XG4gICAgICAuLi50eXBlQWhlYWQsXG4gICAgICBbZmllbGRJZF06IHJlc3BvbnNlLnZhbHVlLFxuICAgIH0sXG4gIH07XG5cbiAgZGlzcGF0Y2goY29ubmVjdG9yU2VhcmNoU3VjY2Vzcyh7IC4uLnJlc3BvbnNlLnZhbHVlIH0sIHNhdmVFbmRwb2ludCwgZmllbGRJZCwgZm9ybUlkKSk7XG4gIGRpc3BhdGNoKHNldExvYWRpbmdGaW5pc2goKSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0b3JTZWFyY2g7XG4iLCJpbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuLy8gQ09MT1JTXG5pbXBvcnQgVEhFTUUgZnJvbSAnLi4vY29uZmlnL2Zvcm0tdGhlbWUnO1xuaW1wb3J0IENPTE9SUyBmcm9tICcuLi9jb25maWcvY29sb3JzJztcblxuZXhwb3J0IGNvbnN0IFBpY2tMaXN0Q29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgYm90dG9tOiAwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgaGVpZ2h0OiBhdXRvO1xuICBsZWZ0OiAwO1xuICBtYXJnaW4tdG9wOiAtMnB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIHotaW5kZXg6IDU7XG4gIHVsIHtcbiAgICBiYWNrZ3JvdW5kOiAjRkZGO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7VEhFTUUuZmllbGQuYm9yZGVyLmNvbG9yfTtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgYm94LXNoYWRvdzogMXB4IDNweCA1cHggI0NDQztcbiAgICBtYXJnaW46IDA7XG4gICAgbWF4LWhlaWdodDogMjQwcHg7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICBsaSB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuXG4gICAgICAmLm5vLXJlc3VsdHMge1xuICAgICAgICBjb2xvcjogJHtDT0xPUlMuZ3JleTJ9XG4gICAgICAgIGZvbnQtc2l6ZTogLjk1cmVtO1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgKiB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBiYWNrZ3JvdW5kOm5vbmU7XG4gICAgICAgIGJvcmRlcjpub25lO1xuICAgICAgICBjb2xvcjogJHtDT0xPUlMuZ3JleTJ9XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGZvbnQtc2l6ZTogLjk1cmVtO1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5waWNrbGlzdC12YWx1ZS1hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjZGNkY2O1xuICAgICAgICBjb2xvcjogI0Y2MDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuXG4gICAgICAuY2xvc2VQaWNrTGlzdCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLm9yYW5nZX07XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgY29sb3I6ICR7Q09MT1JTLndoaXRlfTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogI0ZGRjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y2RjZGNjtcbiAgICAgICAgKiB7XG4gICAgICAgICAgY29sb3I6ICNGNjA7XG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgICYuY2xvc2VQaWNrTGlzdCB7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgZGVmYXVsdCBQaWNrTGlzdENvbnRhaW5lcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVSZWYsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLy8gU3R5bGVzXG5pbXBvcnQgeyBQaWNrTGlzdENvbnRhaW5lciB9IGZyb20gJy4uL3N0eWxlZC9jb250YWluZXJzL3BpY2tsaXN0JztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgQ29ubmVjdG9yc0FycmF5IH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgUGlja0xpc3RWYWx1ZSB9IGZyb20gJy4uL2NvbnN0YW50cy9waWNrbGlzdCc7XG5pbXBvcnQgdHlwZSB7IElucHV0VGFyZ2V0IH0gZnJvbSAnLi4vbGliL3R5cGVzJztcblxudHlwZSBEaXNwYXRjaFByb3BzID0ge1xuICBvbkNhcHR1cmVJbnB1dDogKHRhcmdldDogSW5wdXRUYXJnZXQpID0+IHZvaWQsXG4gIG9uQ2xvc2VQaWNrbGlzdDogKGZvcm1JZDogc3RyaW5nKSA9PiB2b2lkLFxuICBvbkZvY3VzQ2FwdHVyZTogKHRhcmdldDogSW5wdXRUYXJnZXQpID0+IHZvaWQsXG59O1xuXG50eXBlIFByb3BzID0gRGlzcGF0Y2hQcm9wcyAmIHtcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGZpZWxkSWQ6IHN0cmluZyxcbiAgaGFzRGF0YTogYm9vbGVhbixcbiAgaGlnaGxpZ2h0ZWRJdGVtOiBudW1iZXIsXG4gIHNlbGVjdGVkSXRlbTogYW55LFxuICBpc0FjdGl2ZTogYm9vbGVhbixcbiAgcGlja0xpc3Q/OiBQaWNrTGlzdFZhbHVlLFxuICBwaWNrTGlzdFJlc3VsdHM6IENvbm5lY3RvcnNBcnJheSxcbn07XG5cbmNvbnN0IFBpY2tMaXN0Q29tcG9uZW50ID0gKHtcbiAgZm9ybUlkLFxuICBmaWVsZElkLFxuICBoYXNEYXRhLFxuICBoaWdobGlnaHRlZEl0ZW0sXG4gIHNlbGVjdGVkSXRlbSxcbiAgaXNBY3RpdmUsXG4gIG9uQ2FwdHVyZUlucHV0LFxuICBvbkNsb3NlUGlja2xpc3QsXG4gIG9uRm9jdXNDYXB0dXJlLFxuICAvLyAkRmxvd0ZpeE1lXG4gIHBpY2tMaXN0UmVzdWx0cyxcbn06IFByb3BzKSA9PiB7XG4gIC8vIFJldHVybiBlbXB0eSBpZiBub3QgYWN0aXZlIG9yIGhhcyBubyByZXN1bHRzO1xuICBpZiAoIWlzQWN0aXZlIHx8ICFoYXNEYXRhKSByZXR1cm4gJyc7XG5cbiAgY29uc3QgcmVmcyA9IHBpY2tMaXN0UmVzdWx0cy5yZWR1Y2UoKGFjYywgdmFsdWUpID0+IHtcbiAgICBhY2NbdmFsdWUuaWRdID0gY3JlYXRlUmVmKCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gcGlja0xpc3RSZXN1bHRzW2hpZ2hsaWdodGVkSXRlbV07XG4gICAgaWYgKGtleSAmJiBrZXkuaWQpIHtcbiAgICAgIHJlZnNba2V5LmlkXS5jdXJyZW50LnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICBibG9jazogJ3N0YXJ0JyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2hpZ2hsaWdodGVkSXRlbV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gcGlja0xpc3RSZXN1bHRzW3NlbGVjdGVkSXRlbV07XG4gICAgaWYgKChzZWxlY3RlZEl0ZW0gfHwgc2VsZWN0ZWRJdGVtID09PSAwKSAmJiBrZXkgJiYga2V5LmlkKSB7XG4gICAgICBjb25zdCByZWZUb0xpc3RJdGVtID0gcmVmc1trZXkuaWRdO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRCdXR0b24gPSByZWZUb0xpc3RJdGVtLmN1cnJlbnQuY2hpbGROb2Rlc1swXTtcbiAgICAgIHNlbGVjdGVkQnV0dG9uLmZvY3VzKCk7XG4gICAgICBzZWxlY3RlZEJ1dHRvbi5jbGljaygpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGVkSXRlbV0pO1xuXG4gIHJldHVybiAoPFBpY2tMaXN0Q29udGFpbmVyPlxuICAgIDx1bD5cbiAgICAgIHtwaWNrTGlzdFJlc3VsdHMgJiYgcGlja0xpc3RSZXN1bHRzLmxlbmd0aCA8IDEgJiYgPGxpIGNsYXNzTmFtZT0nbm8tcmVzdWx0cyc+Tm8gUmVzdWx0czwvbGk+fVxuICAgICAge3BpY2tMaXN0UmVzdWx0cyAmJiBwaWNrTGlzdFJlc3VsdHMubGVuZ3RoID4gMCAmJiBwaWNrTGlzdFJlc3VsdHMubWFwKChwLCBrZXkpID0+IDxsaSBrZXk9e2tleX0gcmVmPXtyZWZzW3AuaWRdfT48YnV0dG9uXG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgY2xhc3NOYW1lPXtgcGlja2xpc3QtdmFsdWUgJHtoaWdobGlnaHRlZEl0ZW0gPT09IGtleSAmJiAncGlja2xpc3QtdmFsdWUtYWN0aXZlJ31gfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBvbkNhcHR1cmVJbnB1dCh7XG4gICAgICAgICAgICBhbHQ6IHAuaWQsXG4gICAgICAgICAgICBpZDogZmllbGRJZCxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIHZhbHVlOiBwLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH19XG4gICAgICAgIG9uRm9jdXM9eygpID0+IHtcbiAgICAgICAgICBvbkZvY3VzQ2FwdHVyZSh7XG4gICAgICAgICAgICBhbHQ6IHAuaWQsXG4gICAgICAgICAgICBpZDogZmllbGRJZCxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIHZhbHVlOiBwLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH19ID57cC5uYW1lfTwvYnV0dG9uPjwvbGk+KX1cbiAgICA8L3VsPlxuICAgIDx1bCBjbGFzc05hbWU9J2Nsb3NlUGlja0xpc3QnPlxuICAgICAgPGxpPlxuICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT0nY2xvc2VQaWNrTGlzdCcgb25DbGljaz17KCkgPT4gb25DbG9zZVBpY2tsaXN0KGZvcm1JZCl9PkNsb3NlPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvUGlja0xpc3RDb250YWluZXI+KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBpY2tMaXN0Q29tcG9uZW50O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGNhcHR1cmVJbnB1dCwgY2xvc2VQaWNrTGlzdCwgaGlkZVNlYXJjaFJlc3VsdHMsIHNhdmVTZWFyY2hTZWxlY3Rpb24sXG59IGZyb20gJy4uL2xpYi9hY3Rpb25zJztcblxuLy8gQVBJXG5pbXBvcnQgY29ubmVjdG9yQVBJIGZyb20gJy4uL2FwaS9jb25uZWN0b3JzJztcblxuLy8gQ29tcG9uZW50XG5pbXBvcnQgUGlja0xpc3QgZnJvbSAnLi4vY29tcG9uZW50cy9waWNrbGlzdCc7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7IGdldEZpZWxkVmlicmFuY3ksIHZhbGlkYXRlRmllbGQgfSBmcm9tICcuLi9oZWxwZXJzL2Zvcm1zJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcbmltcG9ydCB0eXBlIHsgQ29ubmVjdG9yc0FycmF5IH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgUGlja0xpc3RWYWx1ZSB9IGZyb20gJy4uL2NvbnN0YW50cy9waWNrbGlzdCc7XG5pbXBvcnQgdHlwZSB7IElucHV0VGFyZ2V0IH0gZnJvbSAnLi4vbGliL3R5cGVzJztcblxudHlwZSBEaXNwYXRjaFByb3BzID0ge1xuICBvbkNhcHR1cmVJbnB1dDogKHRhcmdldDogSW5wdXRUYXJnZXQpID0+IHZvaWQsXG4gIG9uQ2xvc2VQaWNrbGlzdDogKGZvcm1JZDogc3RyaW5nKSA9PiB2b2lkLFxuICBvbkZvY3VzQ2FwdHVyZTogKHRhcmdldDogSW5wdXRUYXJnZXQpID0+IHZvaWQsXG4gIG9uR2V0Q29ubmVjdG9yRGF0YTogKHZpYnJhbmN5OiBzdHJpbmcgfCBudWxsKSA9PiBQcm9taXNlPHZvaWQ+LFxufTtcblxudHlwZSBQcm9wcyA9IERpc3BhdGNoUHJvcHMgJiB7XG4gIGN1c3RvbVZhbGlkYXRpb246IFJlZ0V4cCxcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGZpZWxkSWQ6IHN0cmluZyxcbiAgaGFzRGF0YTogYm9vbGVhbixcbiAgaGlnaGxpZ2h0ZWRJdGVtOiBudW1iZXIsXG4gIHNlbGVjdGVkSXRlbTogYW55LFxuICBpc0FjdGl2ZTogYm9vbGVhbixcbiAgcGlja0xpc3Q/OiBQaWNrTGlzdFZhbHVlLFxuICBwaWNrTGlzdFJlc3VsdHM6IENvbm5lY3RvcnNBcnJheSxcbiAgdmlicmFuY3k6IHN0cmluZyB8IG51bGwsXG59O1xuXG5jbGFzcyBUeXBlQWhlYWRQaWNrTGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcz4ge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGhhc0RhdGEgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFoYXNEYXRhKSB7XG4gICAgICAvLyBwaW5nIE1JTEVTIGNvbm5lY3Rvci9zZWFyY2ggQVBJXG4gICAgICBjb25zdCB7IHBpY2tMaXN0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgbGV0IHsgdmlicmFuY3kgfSA9IHRoaXMucHJvcHM7XG4gICAgICB2aWJyYW5jeSA9IHZpYnJhbmN5IHx8IG51bGw7XG5cbiAgICAgIGlmIChwaWNrTGlzdCAmJiBwaWNrTGlzdC5lbmRwb2ludCkgdGhpcy5wcm9wcy5vbkdldENvbm5lY3RvckRhdGEodmlicmFuY3kpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBmb3JtSWQsXG4gICAgICBmaWVsZElkLFxuICAgICAgaGFzRGF0YSxcbiAgICAgIGhpZ2hsaWdodGVkSXRlbSxcbiAgICAgIHNlbGVjdGVkSXRlbSxcbiAgICAgIGlzQWN0aXZlLFxuICAgICAgb25DYXB0dXJlSW5wdXQsXG4gICAgICBvbkNsb3NlUGlja2xpc3QsXG4gICAgICBvbkZvY3VzQ2FwdHVyZSxcbiAgICAgIHBpY2tMaXN0UmVzdWx0cyxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiA8UGlja0xpc3RcbiAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgZmllbGRJZD17ZmllbGRJZH1cbiAgICAgIGhhc0RhdGE9e2hhc0RhdGF9XG4gICAgICBoaWdobGlnaHRlZEl0ZW09e2hpZ2hsaWdodGVkSXRlbX1cbiAgICAgIHNlbGVjdGVkSXRlbT17c2VsZWN0ZWRJdGVtfVxuICAgICAgaXNBY3RpdmU9e2lzQWN0aXZlfVxuICAgICAgb25DYXB0dXJlSW5wdXQ9e29uQ2FwdHVyZUlucHV0fVxuICAgICAgb25DbG9zZVBpY2tsaXN0PXtvbkNsb3NlUGlja2xpc3R9XG4gICAgICBvbkZvY3VzQ2FwdHVyZT17b25Gb2N1c0NhcHR1cmV9XG4gICAgICBwaWNrTGlzdFJlc3VsdHM9e3BpY2tMaXN0UmVzdWx0c31cbiAgICAvPjtcbiAgfVxufVxuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoc3RhdGU6IFN0YXRlLCBvd25Qcm9wczogeyBmb3JtSWQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nIH0pID0+IHtcbiAgY29uc3QgeyBmb3JtSWQsIGZpZWxkSWQgfSA9IG93blByb3BzO1xuICByZXR1cm4ge1xuICAgIGhhc0RhdGE6IEJvb2xlYW4oc3RhdGUuc2VhcmNoLnJlc3VsdHMgJiYgc3RhdGUuc2VhcmNoLnJlc3VsdHNbZm9ybUlkXSAmJiBzdGF0ZS5zZWFyY2gucmVzdWx0c1tmb3JtSWRdW2ZpZWxkSWRdKSxcbiAgICByZXF1aXJlZEZpZWxkczogc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXSxcbiAgICBwaWNrTGlzdFJlc3VsdHM6IHN0YXRlLnNlYXJjaCAmJiBzdGF0ZS5zZWFyY2gucmVzdWx0cyAmJiBzdGF0ZS5zZWFyY2gucmVzdWx0c1tmb3JtSWRdICYmIHN0YXRlLnNlYXJjaC5yZXN1bHRzW2Zvcm1JZF1bZmllbGRJZF0gPyBzdGF0ZS5zZWFyY2gucmVzdWx0c1tmb3JtSWRdW2ZpZWxkSWRdIDogW10sXG4gICAgdmlicmFuY3k6IGdldEZpZWxkVmlicmFuY3koc3RhdGUuZm9ybXMsIGZvcm1JZCksXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gKGRpc3BhdGNoOiBEaXNwYXRjaCwgb3duUHJvcHM6IHsgY3VzdG9tVmFsaWRhdGlvbjogUmVnRXhwLCBmaWVsZElkOiBzdHJpbmcsIGZvcm1JZDogc3RyaW5nLCBpc1JlcXVpcmVkOiBib29sZWFuLCBwaWNrTGlzdDogc3RyaW5nLCBwaWNrTGlzdD86IFBpY2tMaXN0VmFsdWUsIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+IH0pOiBEaXNwYXRjaFByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIGN1c3RvbVZhbGlkYXRpb24sIGZpZWxkSWQsIGZvcm1JZCwgcGlja0xpc3QsIGlzUmVxdWlyZWQsIHJlcXVpcmVkRmllbGRzLFxuICB9ID0gb3duUHJvcHM7XG4gIGNvbnN0IGNvbm5lY3RvckVuZHBvaW50ID0gcGlja0xpc3QgJiYgcGlja0xpc3QuZW5kcG9pbnQgPyBwaWNrTGlzdC5lbmRwb2ludCA6IG51bGw7XG4gIGNvbnN0IG1pbGVzRW5kcG9pbnQgPSBwaWNrTGlzdCAmJiBwaWNrTGlzdC5taWxlcyA/IHBpY2tMaXN0Lm1pbGVzIDogZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICBvbkNsb3NlUGlja2xpc3Q6ICgpID0+IGRpc3BhdGNoKGNsb3NlUGlja0xpc3QoZm9ybUlkKSksXG4gICAgb25Gb2N1c0NhcHR1cmU6ICh0YXJnZXQ6IElucHV0VGFyZ2V0KSA9PiBkaXNwYXRjaChjYXB0dXJlSW5wdXQoZGlzcGF0Y2gsIGZvcm1JZCwgdGFyZ2V0KSksXG4gICAgb25DYXB0dXJlSW5wdXQ6ICh0YXJnZXQ6IElucHV0VGFyZ2V0KSA9PiB7XG4gICAgICBkaXNwYXRjaChoaWRlU2VhcmNoUmVzdWx0cyhmaWVsZElkLCBmb3JtSWQpKTtcbiAgICAgIGRpc3BhdGNoKGNhcHR1cmVJbnB1dChkaXNwYXRjaCwgZm9ybUlkLCB0YXJnZXQpKTtcbiAgICAgIHZhbGlkYXRlRmllbGQoZGlzcGF0Y2gsIGN1c3RvbVZhbGlkYXRpb24sIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIHRhcmdldCk7XG4gICAgICBpZiAodGFyZ2V0LmFsdCkgZGlzcGF0Y2goc2F2ZVNlYXJjaFNlbGVjdGlvbihmaWVsZElkLCBmb3JtSWQsIHRhcmdldC5hbHQpKTsgLy8gUmVkdW5kYW50IGZsb3cgaWYgY2hlY2tcbiAgICB9LFxuICAgIG9uR2V0Q29ubmVjdG9yRGF0YTogKHZpYnJhbmN5OiBzdHJpbmcgfCBudWxsKSA9PiBjb25uZWN0b3JBUEkoZGlzcGF0Y2gsIGNvbm5lY3RvckVuZHBvaW50LCBtaWxlc0VuZHBvaW50LCBmaWVsZElkLCBmb3JtSWQsIHZpYnJhbmN5KSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMpKFR5cGVBaGVhZFBpY2tMaXN0KTtcbiIsIi8vIEBmbG93IHN0cmljdC1sb2NhbFxuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRGVib3VuY2UgZnJvbSAnLi4vLi4vaG9va3MvdXNlRGVib3VuY2UnO1xuXG4vLyBDb250YWluZXJzXG5pbXBvcnQgR2RwckZpZWxkIGZyb20gJy4uLy4uL2NvbnRhaW5lcnMvZmllbGRzL2dkcHItZWxpZ2FibGUnO1xuaW1wb3J0IFR5cGVBaGVhZFBpY2tMaXN0IGZyb20gJy4uLy4uL2NvbnRhaW5lcnMvcGlja2xpc3QnO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSAnLi9wbGFjZWhvbGRlcic7XG5cbi8vIFN0eWxlc1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBUZXh0SW5wdXQsIElucHV0Q29udGFpbmVyIH0gZnJvbSAnLi4vLi4vc3R5bGVkL2Zvcm0nO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQge1xuICBzZXRBY3RpdmVDb250YWluZXIsXG4gIHNldEFjdGl2ZUlucHV0Q2xhc3MsXG4gIHNldEZpZWxkQ2xhc3NlcyxcbiAgc2V0RmllbGROYW1lLFxuICBzZXRJbnB1dFZhbGlkYXRpb25DbGFzcyxcbn0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3Jtcyc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IElucHV0RXZlbnQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBTZXRKc29uRmllbGQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBQcm9wcyBhcyBQYXJlbnRQcm9wcyB9IGZyb20gJy4uLy4uL2NvbnRhaW5lcnMvZmllbGRzL3RleHQnO1xuXG50eXBlIFByb3BzID0gUGFyZW50UHJvcHMgJiBTZXRKc29uRmllbGQ7XG5cbmV4cG9ydCBjb25zdCBJbnB1dFRleHRDb21wb25lbnQgPSAoe1xuICBhY3RpdmVGaWVsZCxcbiAgY2xhc3NlcyxcbiAgLy8gJEZsb3dGaXhNZSAtIEZpbmQgb3V0IHdoeSBmbG93IGlzIGNvbXBsYWluaW5nIGFib3V0IGxlbmd0aCB3aGVuIHdlJ3JlIGV4cGVjdGluZyBhbiBhcnJheSBoZXJlXG4gIGNvbm5lY3RvckRhdGEsXG4gIGNvbnRhaW5zR2RwckNvbnRhaW5lcixcbiAgY3VzdG9tVmFsaWRhdGlvbixcbiAgZGlzcGxheVRleHQsXG4gIGVycm9yU3RhdGUsXG4gIGZvcm1JZCxcbiAgcGlja0xpc3QsXG4gIGlkLFxuICBuYW1lLFxuICBwbGFjZWhvbGRlcixcbiAgb25DYXB0dXJlSW5wdXQsXG4gIG9uU2VhcmNoLFxuICBvblNldEFjdGl2ZUZpZWxkLFxuICBvblZhbGlkYXRlQ29ubmVjdG9yLFxuICBvblZhbGlkYXRlRmllbGQsXG4gIGhhc0JlZW5WYWxpZGF0ZWQsXG4gIGlzTGFzdEZpZWxkLFxuICBpc0Rpc2FibGVkLFxuICBpc1JlcXVpcmVkLFxuICBpc1NldCxcbiAgcmVxdWlyZWQsXG4gIHJlcXVpcmVkRmllbGRzLFxuICB0eXBlLFxuICB2YWx1ZSxcbiAgLy8gJEZsb3dGaXhNZSAtIFRvRG8gLSBGaW5kIG91dCB3aHkgZmxvdyBpcyBjb21wbGFpbmluZyBhYm91dCBjb25kaXRpb25hbCB2YWx1ZVxuICB2aWJyYW5jeSxcbn06IFByb3BzKSA9PiB7XG4gIGNvbnN0IFtoaWdobGlnaHRlZEl0ZW0sIHNldEhpZ2hsaWdodGVkSXRlbV0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3NlbGVjdGVkSXRlbSwgc2V0U2VsZWN0ZWRJdGVtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IGRlYm91bmNlZE9uVmFsaWRhdGVGaWVsZCA9IHVzZURlYm91bmNlKG9uVmFsaWRhdGVGaWVsZCwgNzAwKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlKSA9PiB7XG4gICAgaWYgKHBpY2tMaXN0KSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSAzOCAmJiBoaWdobGlnaHRlZEl0ZW0gPiAwKSB7XG4gICAgICAgIHNldEhpZ2hsaWdodGVkSXRlbSgocHJldlN0YXRlKSA9PiBwcmV2U3RhdGUgLSAxKTtcbiAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSA0MCAmJiBoaWdobGlnaHRlZEl0ZW0gPCBjb25uZWN0b3JEYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJdGVtKChwcmV2U3RhdGUpID0+IHByZXZTdGF0ZSArIDEpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2V0U2VsZWN0ZWRJdGVtKGhpZ2hsaWdodGVkSXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRIaWdobGlnaHRlZEl0ZW0oMCk7XG4gICAgICAgIHNldFNlbGVjdGVkSXRlbSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxJbnB1dENvbnRhaW5lclxuICAgIGNsYXNzTmFtZT17YCR7c2V0QWN0aXZlQ29udGFpbmVyKGFjdGl2ZUZpZWxkLCBpZCl9YH1cbiAgICBoYXNQaWNrTGlzdD17cGlja0xpc3R9XG4gICAgb25CbHVyPXsoKSA9PiB7XG4gICAgICAvLyBSZWR1bmRhbnQgdHlwb2YgY2hlY2sgZm9yIGZsb3cgcmVxdWlyZW1lbnRzXG4gICAgICBpZiAoaXNSZXF1aXJlZCAmJiBjb25uZWN0b3JEYXRhICYmIGNvbm5lY3RvckRhdGEgIT09IG51bGwgJiYgcGlja0xpc3QgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJycgJiYgb25WYWxpZGF0ZUNvbm5lY3Rvcikge1xuICAgICAgICBvblZhbGlkYXRlQ29ubmVjdG9yKGNvbm5lY3RvckRhdGEsIGlkLCBmb3JtSWQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9fVxuICA+XG4gICAgPFRleHRJbnB1dFxuICAgICAgYXV0b0NvbXBsZXRlPSdvZmYnXG4gICAgICBjbGFzc05hbWU9e2Ake3NldEZpZWxkQ2xhc3NlcyhjbGFzc2VzKX0ke3NldEFjdGl2ZUlucHV0Q2xhc3MoYWN0aXZlRmllbGQsIGlkKX0ke3NldElucHV0VmFsaWRhdGlvbkNsYXNzKGVycm9yU3RhdGUsIGlkLCBpc1NldCwgaGFzQmVlblZhbGlkYXRlZCl9YH1cbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaWQ9e2lkfVxuICAgICAgbmFtZT17c2V0RmllbGROYW1lKG5hbWUsIGlkKX1cbiAgICAgIG9uQmx1cj17KGU6IElucHV0RXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGlkID09PSAnZW1haWwnIHx8IGlkID09PSAncGFydG5lcl9yZXBfZW1haWwnIHx8IGlkID09PSAncmVmX2VtYWlsJykge1xuICAgICAgICAgIGRlYm91bmNlZE9uVmFsaWRhdGVGaWVsZChjdXN0b21WYWxpZGF0aW9uLCBmb3JtSWQsIGlzUmVxdWlyZWQsIHJlcXVpcmVkRmllbGRzLCBlLnRhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb25WYWxpZGF0ZUZpZWxkKGN1c3RvbVZhbGlkYXRpb24sIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIGUudGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIG9uQ2hhbmdlPXsoZTogSW5wdXRFdmVudCkgPT4ge1xuICAgICAgICBpZiAoKGlkID09PSAnY29ubmVjdG9yX2lkJyB8fCBpZCA9PT0gJ2luZHVzdHJ5X2lkJykgJiYgcGlja0xpc3QgJiYgb25TZWFyY2gpIHtcbiAgICAgICAgICAvLyBDaGVjayBmb3IgdmlicmFuY3kgZm9yIGVuZHBvaW50IHVwZGF0ZVxuICAgICAgICAgIGNvbnN0IHNldEVuZHBvaW50ID0gdHlwZW9mIHZpYnJhbmN5ICE9PSAndW5kZWZpbmVkJyAmJiB2aWJyYW5jeSAhPT0gbnVsbCA/IGAke3BpY2tMaXN0LmVuZHBvaW50fToke3ZpYnJhbmN5fWAgOiBwaWNrTGlzdC5lbmRwb2ludDtcbiAgICAgICAgICBvblNlYXJjaChzZXRFbmRwb2ludCwgaWQsIGZvcm1JZCwgZS50YXJnZXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gJ2VtYWlsJyB8fCBpZCA9PT0gJ3BhcnRuZXJfcmVwX2VtYWlsJyB8fCBpZCA9PT0gJ3JlZl9lbWFpbCcpIHtcbiAgICAgICAgICBkZWJvdW5jZWRPblZhbGlkYXRlRmllbGQoY3VzdG9tVmFsaWRhdGlvbiwgZm9ybUlkLCBpc1JlcXVpcmVkLCByZXF1aXJlZEZpZWxkcywgZS50YXJnZXQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTGFzdEZpZWxkICYmIGlzTGFzdEZpZWxkID09PSBpZCAmJiBpc1JlcXVpcmVkICYmIGlkICE9PSAnY29ubmVjdG9yX2lkJyAmJiBpZCAhPT0gJ2luZHVzdHJ5X2lkJykge1xuICAgICAgICAgIG9uVmFsaWRhdGVGaWVsZChjdXN0b21WYWxpZGF0aW9uLCBmb3JtSWQsIGlzUmVxdWlyZWQsIHJlcXVpcmVkRmllbGRzLCBlLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgb25DYXB0dXJlSW5wdXQoZm9ybUlkLCBlLnRhcmdldCk7XG4gICAgICB9fVxuICAgICAgb25Gb2N1cz17KGU6IElucHV0RXZlbnQpID0+IG9uU2V0QWN0aXZlRmllbGQoZm9ybUlkLCBlLnRhcmdldC5pZCl9XG4gICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICB0eXBlPXt0eXBlIHx8ICd0ZXh0J31cbiAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkICYmICdyZXF1aXJlZCd9XG4gICAgICBjdXN0b21WYWxpZGF0aW9uPXtjdXN0b21WYWxpZGF0aW9ufVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgIC8+XG4gICAgPFBsYWNlaG9sZGVyXG4gICAgICBjb250YWluc0dkcHJDb250YWluZXI9e2NvbnRhaW5zR2RwckNvbnRhaW5lcn1cbiAgICAgIGVycm9yU3RhdGU9e2Vycm9yU3RhdGV9XG4gICAgICBpZD17aWR9XG4gICAgICBpc1NldD17aXNTZXR9XG4gICAgICBkaXNwbGF5VGV4dD17ZGlzcGxheVRleHR9XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBlbWFpbE9ubHk9eyhmb3JtSWQgPT09ICdFTUFJTE9OTFlSRUFDVCcgfHwgZm9ybUlkID09PSAnRU1BSUxPTkxZQ09MVU1OJykgPyB0cnVlIDogZmFsc2V9XG4gICAgICBwb3NpdGlvblRvcD17Y29udGFpbnNHZHByQ29udGFpbmVyfVxuICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgaGFzQmVlblZhbGlkYXRlZD17aGFzQmVlblZhbGlkYXRlZH1cbiAgICAvPlxuICAgIHtwaWNrTGlzdCAmJiA8VHlwZUFoZWFkUGlja0xpc3RcbiAgICAgIGN1c3RvbVZhbGlkYXRpb249e2N1c3RvbVZhbGlkYXRpb259XG4gICAgICBmaWVsZElkPXtpZH1cbiAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgaXNBY3RpdmU9ey9bYWN0aXZlXS9nLnRlc3Qoc2V0QWN0aXZlQ29udGFpbmVyKGFjdGl2ZUZpZWxkLCBpZCkpfVxuICAgICAgaXNSZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgIHJlcXVpcmVkRmllbGRzPXtyZXF1aXJlZEZpZWxkc31cbiAgICAgIHBpY2tMaXN0PXtwaWNrTGlzdH1cbiAgICAgIGhpZ2hsaWdodGVkSXRlbT17aGlnaGxpZ2h0ZWRJdGVtfVxuICAgICAgc2VsZWN0ZWRJdGVtPXtzZWxlY3RlZEl0ZW19XG4gICAgLz59XG4gICAge2Vycm9yU3RhdGUgJiYgPEVycm9yTWVzc2FnZSBhcmlhLWxpdmU9J2Fzc2VydGl2ZScgYWxlcnQ9J3RydWUnPntlcnJvclN0YXRlLm1lc3NhZ2V9PC9FcnJvck1lc3NhZ2U+fVxuICAgIHsgY29udGFpbnNHZHByQ29udGFpbmVyICYmIDxHZHByRmllbGQgZm9ybUlkPXtmb3JtSWR9IC8+fVxuICA8L0lucHV0Q29udGFpbmVyPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgSW5wdXRUZXh0Q29tcG9uZW50O1xuIiwiLy8gQGZsb3cgc2NyaWN0LWxvY2FsXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG4vLyBBY3Rpb25zXG5pbXBvcnQgeyBzZWFyY2hEYXRhLCB2YWxpZGF0ZUNvbm5lY3RvciB9IGZyb20gJy4uLy4uL2xpYi9hY3Rpb25zJztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IElucHV0VGV4dCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ZpZWxkcy90ZXh0JztcblxuLy8gQ29uc3RhbnRzXG5pbXBvcnQgUGlja0xpc3RGaWVsZHMgZnJvbSAnLi4vLi4vY29uc3RhbnRzL3BpY2tsaXN0JztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHtcbiAgY2hlY2tJZkZpZWxkSXNTZXQsXG4gIGNoZWNrSWZIYXNFcnJvcixcbiAgY29udGFpbnNHZHByRmllbGQsXG4gIGdldEZpZWxkVmFsdWVPYmplY3QsXG4gIGdldEZpZWxkVmlicmFuY3ksXG59IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgU3RhdGUgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMvcmVkdWNlci1zdGF0ZXMnO1xuaW1wb3J0IHR5cGUgeyBQaWNrTGlzdFZhbHVlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3BpY2tsaXN0JztcbmltcG9ydCB0eXBlIHsgQXZhRm9ybXMsIFNldEpzb25GaWVsZCwgU2luZ2xlQ2FwdHVyZUZpZWxkIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2hQcm9wcyBhcyBQYXJlbnREaXNwYXRjaFByb3BzIH0gZnJvbSAnLi4vZmllbGRzJztcbmltcG9ydCB0eXBlIHsgQ29ubmVjdG9yc0FycmF5IH0gZnJvbSAnLi4vLi4vYXBpL3R5cGVzJztcblxuLy8gUHJvcHNcbmV4cG9ydCB0eXBlIFN0YXRlUHJvcHMgPSB7XG4gIGFjdGl2ZUZpZWxkOiBzdHJpbmcgfCBudWxsLFxuICBlcnJvclN0YXRlOiB7IGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHwgZmFsc2UsXG4gIGZpZWxkczogQXJyYXk8U2luZ2xlQ2FwdHVyZUZpZWxkPixcbiAgZmllbGREYXRhOiBBdmFGb3JtcyxcbiAgaGFzQmVlblZhbGlkYXRlZDogQXJyYXk8c3RyaW5nPixcbiAgaXNSZXF1aXJlZDogYm9vbGVhbixcbiAgaXNTZXQ6IGJvb2xlYW4sXG4gIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxufTtcblxuZXhwb3J0IHR5cGUgRGlzcGF0Y2hQcm9wcyA9IHtcbiAgb25TZWFyY2g/OiAoZW5kcG9pbnQ6IHN0cmluZywgaWQ6IHN0cmluZywgZm9ybUlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQsXG4gIG9uVmFsaWRhdGVDb25uZWN0b3I/OiAoY29ubmVjdG9yRGF0YTogQ29ubmVjdG9yc0FycmF5LCBmaWVsZElkOiBzdHJpbmcsIGZvcm1JZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkLFxufVxuXG5leHBvcnQgdHlwZSBQcm9wcyA9IFBhcmVudERpc3BhdGNoUHJvcHMgJiBEaXNwYXRjaFByb3BzICYgU3RhdGVQcm9wcyAmIHtcbiAgY29ubmVjdG9yRGF0YT86IENvbm5lY3RvcnNBcnJheSxcbiAgY29udGFpbnNHZHByQ29udGFpbmVyOiBib29sZWFuLFxuICBmaWVsZE9iamVjdD86IFNldEpzb25GaWVsZCxcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIHBpY2tMaXN0PzogUGlja0xpc3RWYWx1ZSxcbiAgaWQ6IHN0cmluZyxcbiAgaXNEaXNhYmxlZDogc3RyaW5nLFxuICBpc0xhc3RGaWVsZDogYm9vbGVhbiB8IHsgaWQ6IHN0cmluZywgcmVxdWlyZWQ6IGJvb2xlYW4gfSxcbiAgdmlicmFuY3k/OiBzdHJpbmcgfCBudWxsLFxufTtcblxuY2xhc3MgVGV4dElucHV0Q29udGFpbmVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmVGaWVsZCxcbiAgICAgIGNvbm5lY3RvckRhdGEsXG4gICAgICBjb250YWluc0dkcHJDb250YWluZXIsXG4gICAgICBlcnJvclN0YXRlLFxuICAgICAgZmllbGRzLFxuICAgICAgZmllbGREYXRhLFxuICAgICAgZmllbGRPYmplY3QsXG4gICAgICBmb3JtSWQsXG4gICAgICBoYXNCZWVuVmFsaWRhdGVkLFxuICAgICAgaWQsXG4gICAgICBpc0Rpc2FibGVkLFxuICAgICAgaXNMYXN0RmllbGQsXG4gICAgICBpc1JlcXVpcmVkLFxuICAgICAgaXNTZXQsXG4gICAgICBvbkNhcHR1cmVJbnB1dCxcbiAgICAgIG9uU2VhcmNoLFxuICAgICAgb25TZXRBY3RpdmVGaWVsZCxcbiAgICAgIG9uU2V0TGFzdEZpZWxkLFxuICAgICAgb25WYWxpZGF0ZUNvbm5lY3RvcixcbiAgICAgIG9uVmFsaWRhdGVGaWVsZCxcbiAgICAgIHJlcXVpcmVkRmllbGRzLFxuICAgICAgdmlicmFuY3ksXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgLy8gJEZsb3dGaXhNZTogSW5nb3JlIGVycm9yLiBGbG93IGlzbid0IHNlZWluZyB0aGUgc3ByZWFkIG9iamVjdCBhcyBpbml0IHZhbHVlcyBiZWluZyBzZXRcbiAgICByZXR1cm4gPElucHV0VGV4dFxuICAgICAgey4uLmZpZWxkT2JqZWN0fSAvLyBTcHJlYWQgZmllbGQgb2JqZWN0IHRvIHBhc3MgYWxsIGJ5IGRlZmF1bHQgZm9yIGF2YWlsYWJsZSBvYmplY3QgdmFsdWVzIHNlZSAvbGliL3R5cGVzL2Zvcm1zIHtTZXRKc29uRmllbGR9XG4gICAgICBhY3RpdmVGaWVsZD17YWN0aXZlRmllbGR9XG4gICAgICBjb25uZWN0b3JEYXRhPXtjb25uZWN0b3JEYXRhfVxuICAgICAgY29udGFpbnNHZHByQ29udGFpbmVyPXtjb250YWluc0dkcHJDb250YWluZXJ9XG4gICAgICBlcnJvclN0YXRlPXtlcnJvclN0YXRlfVxuICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICBmaWVsZERhdGE9e2ZpZWxkRGF0YX1cbiAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgaGFzQmVlblZhbGlkYXRlZD17aGFzQmVlblZhbGlkYXRlZH1cbiAgICAgIHBpY2tMaXN0PXtQaWNrTGlzdEZpZWxkcy5maWx0ZXIoKGYpID0+IGYuaWQgPT09IGlkKVswXX1cbiAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBpc1JlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgaXNMYXN0RmllbGQ9e2lzTGFzdEZpZWxkfVxuICAgICAgaXNTZXQ9e2lzU2V0fVxuICAgICAgb25DYXB0dXJlSW5wdXQ9e29uQ2FwdHVyZUlucHV0fVxuICAgICAgb25TZWFyY2g9e29uU2VhcmNofVxuICAgICAgb25TZXRBY3RpdmVGaWVsZD17b25TZXRBY3RpdmVGaWVsZH1cbiAgICAgIG9uU2V0TGFzdEZpZWxkPXtvblNldExhc3RGaWVsZH1cbiAgICAgIG9uVmFsaWRhdGVGaWVsZD17b25WYWxpZGF0ZUZpZWxkfVxuICAgICAgb25WYWxpZGF0ZUNvbm5lY3Rvcj17b25WYWxpZGF0ZUNvbm5lY3Rvcn1cbiAgICAgIHJlcXVpcmVkRmllbGRzPXtyZXF1aXJlZEZpZWxkc31cbiAgICAgIHZhbHVlPXtnZXRGaWVsZFZhbHVlT2JqZWN0KGZpZWxkcywgaWQpLnZhbHVlfVxuICAgICAgdmlicmFuY3k9e3ZpYnJhbmN5fVxuICAgIC8+O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoc3RhdGU6IFN0YXRlLCBvd25Qcm9wczogeyBpZDogc3RyaW5nLCBmb3JtSWQ6IHN0cmluZywgaGFzRXJyb3I6IHsgaWQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIH0gfCBib29sZWFuIH0pID0+IHtcbiAgY29uc3Qge1xuICAgIGZvcm1JZCwgaWQsXG4gIH0gPSBvd25Qcm9wcztcbiAgcmV0dXJuIHtcbiAgICBhY3RpdmVGaWVsZDogc3RhdGUuZm9ybXMuYWN0aXZlRmllbGRzW2Zvcm1JZF0sXG4gICAgY29udGFpbnNHZHByQ29udGFpbmVyOiBjb250YWluc0dkcHJGaWVsZChpZCwgc3RhdGUuZm9ybXMuZ2RwckZpZWxkW2Zvcm1JZF0pLFxuICAgIGNvbm5lY3RvckRhdGE6IHN0YXRlLnNlYXJjaC5yZXN1bHRzICYmIHN0YXRlLnNlYXJjaC5yZXN1bHRzW2Zvcm1JZF0gJiYgc3RhdGUuc2VhcmNoLnJlc3VsdHNbZm9ybUlkXVtpZF0gPyBzdGF0ZS5zZWFyY2gucmVzdWx0c1tmb3JtSWRdW2lkXSA6IFtdLFxuICAgIGVycm9yU3RhdGU6IGNoZWNrSWZIYXNFcnJvcihpZCwgc3RhdGUuZm9ybXMuaGFzRXJyb3JbZm9ybUlkXSksXG4gICAgZmllbGRzOiBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0sXG4gICAgZmllbGREYXRhOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3JtcyxcbiAgICBpc1JlcXVpcmVkOiBzdGF0ZS5mb3Jtcy5yZXF1aXJlZEZpZWxkc1tmb3JtSWRdID8gc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXS5pbmNsdWRlcyhpZCkgOiBmYWxzZSxcbiAgICBpc1NldDogY2hlY2tJZkZpZWxkSXNTZXQoc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkc1tmb3JtSWRdLCBpZCksXG4gICAgcGlja0xpc3Q6IFBpY2tMaXN0RmllbGRzLmZpbHRlcigoZikgPT4gZi5pZCA9PT0gaWQpWzBdLFxuICAgIHJlcXVpcmVkRmllbGRzOiBzdGF0ZS5mb3Jtcy5yZXF1aXJlZEZpZWxkc1tmb3JtSWRdLFxuICAgIHZpYnJhbmN5OiBnZXRGaWVsZFZpYnJhbmN5KHN0YXRlLmZvcm1zLCBmb3JtSWQpLFxuICB9O1xufTtcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gKGRpc3BhdGNoOiBEaXNwYXRjaCk6IERpc3BhdGNoUHJvcHMgPT4gKHtcbiAgb25TZWFyY2g6IChlbmRwb2ludDogc3RyaW5nLCBpZDogc3RyaW5nLCBmb3JtSWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gZGlzcGF0Y2goc2VhcmNoRGF0YShlbmRwb2ludCwgaWQsIGZvcm1JZCwgdmFsdWUpKSxcbiAgb25WYWxpZGF0ZUNvbm5lY3RvcjogKGNvbm5lY3RvckRhdGE6IENvbm5lY3RvcnNBcnJheSwgZmllbGRJZDogc3RyaW5nLCBmb3JtSWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gZGlzcGF0Y2godmFsaWRhdGVDb25uZWN0b3IoY29ubmVjdG9yRGF0YSwgZmllbGRJZCwgZm9ybUlkLCB2YWx1ZSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMpKFRleHRJbnB1dENvbnRhaW5lcik7XG4iLCIvLyBAZmxvdyBzY3JpY3QtbG9jYWxcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCBJbnB1dE11bHRpU2VsZWN0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZmllbGRzL211bHRpLXNlbGVjdCc7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7IGdldEZpZWxkVmFsdWVPYmplY3QgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2Zvcm1zJztcblxuLy8gRnVuY3Rpb25zXG5pbXBvcnQgeyBtYXBTdGF0ZVRvUHJvcHMgYXMgcGFyZW50U3RhdGVQcm9wcyB9IGZyb20gJy4vdGV4dCc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcbmltcG9ydCB0eXBlIHsgSW5wdXRUYXJnZXQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBTdGF0ZVByb3BzIH0gZnJvbSAnLi90ZXh0JztcbmltcG9ydCB0eXBlIHsgU2V0SnNvbkZpZWxkLCBTaW5nbGVDYXB0dXJlRmllbGQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaFByb3BzIGFzIFBhcmVudERpc3BhdGNoUHJvcHMgfSBmcm9tICcuLi9maWVsZHMnO1xuXG4vLyBQcm9wc1xudHlwZSBTZWxlY3RQcm9wcyA9IHtcbiAgZmllbGRzOiBBcnJheTxTaW5nbGVDYXB0dXJlRmllbGQ+LFxuICBmaWVsZE9iamVjdD86IFNldEpzb25GaWVsZCxcbn1cblxuZXhwb3J0IHR5cGUgRGlzcGF0Y2hQcm9wcyA9IHtcbiAgb25DYXB0dXJlSW5wdXQ6ICh0YXJnZXQ6IElucHV0VGFyZ2V0KSA9PiB2b2lkLFxuICBvblJlbW92ZVNlbGVjdGVkOiAoaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZywgcmVtb3ZlOiBzdHJpbmcpID0+IHZvaWQsXG59XG5cbmV4cG9ydCB0eXBlIFByb3BzID0gUGFyZW50RGlzcGF0Y2hQcm9wcyAmIFNlbGVjdFByb3BzICYgU3RhdGVQcm9wcyAmIERpc3BhdGNoUHJvcHMgJiB7XG4gIGZvcm1JZDogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBzdHJpbmcsXG4gIGNhcHR1cmVGaWVsZHM6IEFycmF5PHsgaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9Pixcbn07XG5cbmNsYXNzIE11bHRpU2VsZWN0Q29udGFpbmVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmVGaWVsZCxcbiAgICAgIGNhcHR1cmVGaWVsZHMsXG4gICAgICBlcnJvclN0YXRlLFxuICAgICAgaGFzQmVlblZhbGlkYXRlZCxcbiAgICAgIGlkLFxuICAgICAgaXNEaXNhYmxlZCxcbiAgICAgIGlzUmVxdWlyZWQsXG4gICAgICBpc1NldCxcbiAgICAgIGZpZWxkcyxcbiAgICAgIGZpZWxkRGF0YSxcbiAgICAgIGZpZWxkT2JqZWN0LFxuICAgICAgZm9ybUlkLFxuICAgICAgb25DYXB0dXJlSW5wdXQsXG4gICAgICBvblJlbW92ZVNlbGVjdGVkLFxuICAgICAgb25TZXRBY3RpdmVGaWVsZCxcbiAgICAgIG9uU2V0TGFzdEZpZWxkLFxuICAgICAgb25WYWxpZGF0ZUZpZWxkLFxuICAgICAgcmVxdWlyZWRGaWVsZHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBvcHRpb25zID0gZmllbGRPYmplY3QgJiYgZmllbGRPYmplY3Qub3B0aW9ucyA/IGZpZWxkT2JqZWN0Lm9wdGlvbnMgOiBbXTtcbiAgICBsZXQgY2FwdHVyZWRWYWx1ZSA9IGNhcHR1cmVGaWVsZHMuZmlsdGVyKChmKSA9PiBmLmlkID09PSBpZClbMF07XG4gICAgY2FwdHVyZWRWYWx1ZSA9IGNhcHR1cmVkVmFsdWUgJiYgY2FwdHVyZWRWYWx1ZS52YWx1ZSA/IGNhcHR1cmVkVmFsdWUudmFsdWUgOiBudWxsO1xuICAgIGNvbnN0IHNldFZhbHVlID0gZ2V0RmllbGRWYWx1ZU9iamVjdChmaWVsZHMsIGlkKS52YWx1ZTtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBmaWVsZE9iamVjdCAmJiBmaWVsZE9iamVjdC5kZWZhdWx0VmFsdWUgPyBmaWVsZE9iamVjdC5kZWZhdWx0VmFsdWUgOiBzZXRWYWx1ZTtcblxuICAgIC8vICRGbG93Rml4TWU6IEluZ29yZSBlcnJvci4gRmxvdyBpc24ndCBzZWVpbmcgdGhlIHNwcmVhZCBvYmplY3QgYXMgaW5pdCB2YWx1ZXMgYmVpbmcgc2V0XG4gICAgcmV0dXJuIDxJbnB1dE11bHRpU2VsZWN0XG4gICAgICB7Li4uZmllbGRPYmplY3R9IC8vIFNwcmVhZCBmaWVsZCBvYmplY3QgdG8gcGFzcyBhbGwgYnkgZGVmYXVsdCBmb3IgYXZhaWxhYmxlIG9iamVjdCB2YWx1ZXMgc2VlIC9saWIvdHlwZXMvZm9ybXMge1NldEpzb25GaWVsZH1cbiAgICAgIGFjdGl2ZUZpZWxkPXthY3RpdmVGaWVsZH1cbiAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgZXJyb3JTdGF0ZT17ZXJyb3JTdGF0ZX1cbiAgICAgIGZpZWxkRGF0YT17ZmllbGREYXRhfVxuICAgICAgZm9ybUlkPXtmb3JtSWR9XG4gICAgICBoYXNCZWVuVmFsaWRhdGVkPXtoYXNCZWVuVmFsaWRhdGVkfVxuICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIGlzUmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgb25DYXB0dXJlSW5wdXQ9e29uQ2FwdHVyZUlucHV0fVxuICAgICAgb25SZW1vdmVTZWxlY3RlZD17b25SZW1vdmVTZWxlY3RlZH1cbiAgICAgIG9uU2V0QWN0aXZlRmllbGQ9e29uU2V0QWN0aXZlRmllbGR9XG4gICAgICBvblNldExhc3RGaWVsZD17b25TZXRMYXN0RmllbGR9XG4gICAgICBvblZhbGlkYXRlRmllbGQ9e29uVmFsaWRhdGVGaWVsZH1cbiAgICAgIHJlcXVpcmVkRmllbGRzPXtyZXF1aXJlZEZpZWxkc31cbiAgICAgIGlzU2V0PXtpc1NldH1cbiAgICAgIHZhbHVlPXtjYXB0dXJlZFZhbHVlIHx8IHNldFZhbHVlIHx8IGRlZmF1bHRWYWx1ZX1cbiAgICAvPjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHN0YXRlOiBTdGF0ZSwgb3duUHJvcHM6IHsgaWQ6IHN0cmluZywgZm9ybUlkOiBzdHJpbmcsIGhhc0Vycm9yOiB7IGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHwgYm9vbGVhbiB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmb3JtSWQsXG4gIH0gPSBvd25Qcm9wcztcbiAgY29uc3QgcGFyZW50UHJvcHMgPSBwYXJlbnRTdGF0ZVByb3BzKHN0YXRlLCBvd25Qcm9wcyk7XG4gIHJldHVybiB7XG4gICAgLi4ucGFyZW50UHJvcHMsXG4gICAgY2FwdHVyZUZpZWxkczogc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkcyAmJiBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0sXG4gICAgcmVxdWlyZWRGaWVsZHM6IHN0YXRlLmZvcm1zLnJlcXVpcmVkRmllbGRzW2Zvcm1JZF0sXG4gIH07XG59O1xuXG4vLyBtYXBTdGF0ZVRvUHJvcHMgYW5kIG1hcERpc3BhdGNoIHRvIHByb3BzIGFyZSB0YWtpbmcgZnJvbSB0aGUgdGV4dCBjb250YWluZXIgd2hpbGUgdGhleSBhcmUgc2ltaWxhci5cbi8vIFRoZXNlIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHNwbGl0IG9uY2UgdGhlcmUgaXMgYSByZXF1aXJlbWVudCB0byBkbyBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgc3RhdGUvZGlzcGF0Y2hcbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzKShNdWx0aVNlbGVjdENvbnRhaW5lcik7XG4iLCIvLyBAZmxvdyBzdHJpY3QtbG9jYWxcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLy8gQ29tcG5lbnRzXG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSAnLi9wbGFjZWhvbGRlcic7XG5cbi8vIFN0eWxlc1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBJbnB1dEFycm93LCBJbnB1dFNlbGVjdCB9IGZyb20gJy4uLy4uL3N0eWxlZC9mb3JtJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHtcbiAgc2V0QWN0aXZlQ29udGFpbmVyLFxuICBzZXRGaWVsZENsYXNzZXMsXG4gIHNldEZpZWxkTmFtZSxcbiAgc2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MsXG59IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBJbnB1dEV2ZW50IH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgU2V0SnNvbkZpZWxkIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2hQcm9wcyB9IGZyb20gJy4uLy4uL2NvbnRhaW5lcnMvZmllbGRzJztcblxudHlwZSBQcm9wcyA9IERpc3BhdGNoUHJvcHMgJiBTZXRKc29uRmllbGQgJiB7XG4gIGFjdGl2ZUZpZWxkOiBzdHJpbmcgfCBudWxsLFxuICBlcnJvclN0YXRlOiB7IGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHwgZmFsc2UsXG4gIGZvcm1JZDogc3RyaW5nLFxuICBoYXNCZWVuVmFsaWRhdGVkOiBBcnJheTxzdHJpbmc+LFxuICByZXF1aXJlZEZpZWxkczogQXJyYXk8c3RyaW5nPixcbiAgaXNEaXNhYmxlZDogc3RyaW5nLFxuICBpc1JlcXVpcmVkOiBib29sZWFuLFxuICBpc1NldDogYm9vbGVhbixcbn07XG5cbmV4cG9ydCBjb25zdCBJbnB1dFNlbGVjdENvbXBvbmVudCA9ICh7XG4gIGFjdGl2ZUZpZWxkLFxuICBjbGFzc2VzLFxuICBjdXN0b21WYWxpZGF0aW9uLFxuICBkZWZhdWx0VmFsdWUsXG4gIGRpc3BsYXlUZXh0LFxuICBlcnJvclN0YXRlLFxuICBmb3JtSWQsXG4gIGhhc0JlZW5WYWxpZGF0ZWQsXG4gIGlkLFxuICBpc0Rpc2FibGVkLFxuICBpc1JlcXVpcmVkLFxuICBpc1NldCxcbiAgbmFtZSxcbiAgb3B0aW9ucyxcbiAgb25DYXB0dXJlSW5wdXQsXG4gIG9uU2V0QWN0aXZlRmllbGQsXG4gIG9uVmFsaWRhdGVGaWVsZCxcbiAgcGxhY2Vob2xkZXIsXG4gIHJlcXVpcmVkRmllbGRzLFxuICB2YWx1ZSxcbn06IFByb3BzKSA9PiAoXG4gIDxJbnB1dFNlbGVjdCBjbGFzc05hbWU9e2Ake3NldEFjdGl2ZUNvbnRhaW5lcihhY3RpdmVGaWVsZCwgaWQpfWB9PlxuICAgIDxzZWxlY3RcbiAgICAgIGNsYXNzTmFtZT17YGZvcm0tZ3JvdXAgJHtzZXRGaWVsZENsYXNzZXMoY2xhc3Nlcyl9JHtzZXRJbnB1dFZhbGlkYXRpb25DbGFzcyhlcnJvclN0YXRlLCBpZCwgaXNTZXQsIGhhc0JlZW5WYWxpZGF0ZWQpfWB9XG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIGlkPXtpZH1cbiAgICAgIG5hbWU9e3NldEZpZWxkTmFtZShuYW1lLCBpZCl9XG4gICAgICBvbkJsdXI9eyhlOiBJbnB1dEV2ZW50KSA9PiBvblZhbGlkYXRlRmllbGQoY3VzdG9tVmFsaWRhdGlvbiwgZm9ybUlkLCBpc1JlcXVpcmVkLCByZXF1aXJlZEZpZWxkcywgZS50YXJnZXQpfVxuICAgICAgb25DaGFuZ2U9eyhlOiBJbnB1dEV2ZW50KSA9PiB7XG4gICAgICAgIG9uQ2FwdHVyZUlucHV0KGZvcm1JZCwgZS50YXJnZXQpO1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkgb25WYWxpZGF0ZUZpZWxkKGN1c3RvbVZhbGlkYXRpb24sIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIGUudGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9uRm9jdXM9eyhlOiBJbnB1dEV2ZW50KSA9PiBvblNldEFjdGl2ZUZpZWxkKGZvcm1JZCwgZS50YXJnZXQuaWQpfVxuICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWQgJiYgJ3JlcXVpcmVkJ31cbiAgICAgIGRlZmF1bHRWYWx1ZT17dmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnID8gZGVmYXVsdFZhbHVlIDogdmFsdWV9XG4gICAgICBkYXRhLWN1cnJlbnRseXNlbGVjdGVkPXt2YWx1ZX1cbiAgICA+XG4gICAgICB7ISFvcHRpb25zICYmIChbeyB2YWx1ZTogJycsIGRpc3BsYXk6ICctIFBsZWFzZSBTZWxlY3QgLScgfV0uY29uY2F0KG9wdGlvbnMpKS5tYXAoKG8sIGluZGV4KSA9PiA8b3B0aW9uIGtleT17aW5kZXh9IHZhbHVlPXtvLnZhbHVlfT57by5kaXNwbGF5fTwvb3B0aW9uPil9XG4gICAgPC9zZWxlY3Q+XG4gICAgPElucHV0QXJyb3cgY2xhc3NOYW1lPSdhcnInIC8+XG4gICAgPFBsYWNlaG9sZGVyXG4gICAgICBjbGFzc05hbWU9J3NlbGVjdC1wbGFjZWhvbGRlcidcbiAgICAgIGVycm9yU3RhdGU9e2Vycm9yU3RhdGV9XG4gICAgICBpZD17aWR9XG4gICAgICBpc1NldD17aXNTZXR9XG4gICAgICBkaXNwbGF5VGV4dD17ZGlzcGxheVRleHR9XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICByZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgIHNldENsYXNzZXM9J3NlbGVjdC1wbGFjZWhvbGRlcidcbiAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ9e2hhc0JlZW5WYWxpZGF0ZWR9XG4gICAgLz5cbiAgICB7ZXJyb3JTdGF0ZSAmJiA8RXJyb3JNZXNzYWdlIGNsYXNzTmFtZT0nc2VsZWN0LWVycm9yLWFsZXJ0Jz57ZXJyb3JTdGF0ZS5tZXNzYWdlfTwvRXJyb3JNZXNzYWdlPn1cbiAgPC9JbnB1dFNlbGVjdD5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IElucHV0U2VsZWN0Q29tcG9uZW50O1xuIiwiLy8gQGZsb3cgc2NyaWN0LWxvY2FsXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgSW5wdXRTZWxlY3QgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9maWVsZHMvc2VsZWN0JztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgZ2V0RmllbGRWYWx1ZU9iamVjdCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuXG4vLyBGdW5jdGlvbnNcbmltcG9ydCB7IG1hcFN0YXRlVG9Qcm9wcyB9IGZyb20gJy4vdGV4dCc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IFN0YXRlUHJvcHMgfSBmcm9tICcuL3RleHQnO1xuaW1wb3J0IHR5cGUgeyBTZXRKc29uRmllbGQsIFNpbmdsZUNhcHR1cmVGaWVsZCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoUHJvcHMgYXMgUGFyZW50RGlzcGF0Y2hQcm9wcyB9IGZyb20gJy4uL2ZpZWxkcyc7XG5cbi8vIFByb3BzXG50eXBlIFNlbGVjdFByb3BzID0ge1xuICBmaWVsZHM6IEFycmF5PFNpbmdsZUNhcHR1cmVGaWVsZD4sXG4gIGZpZWxkT2JqZWN0PzogU2V0SnNvbkZpZWxkLFxufVxuXG5leHBvcnQgdHlwZSBQcm9wcyA9IFBhcmVudERpc3BhdGNoUHJvcHMgJiBTZWxlY3RQcm9wcyAmIFN0YXRlUHJvcHMgJiB7XG4gIGZvcm1JZDogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBzdHJpbmcsXG59O1xuXG5jbGFzcyBTZWxlY3RDb250YWluZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFjdGl2ZUZpZWxkLFxuICAgICAgZXJyb3JTdGF0ZSxcbiAgICAgIGhhc0JlZW5WYWxpZGF0ZWQsXG4gICAgICBpZCxcbiAgICAgIGlzRGlzYWJsZWQsXG4gICAgICBpc1JlcXVpcmVkLFxuICAgICAgaXNTZXQsXG4gICAgICBmaWVsZHMsXG4gICAgICBmaWVsZERhdGEsXG4gICAgICBmaWVsZE9iamVjdCxcbiAgICAgIGZvcm1JZCxcbiAgICAgIG9uQ2FwdHVyZUlucHV0LFxuICAgICAgb25TZXRBY3RpdmVGaWVsZCxcbiAgICAgIG9uU2V0TGFzdEZpZWxkLFxuICAgICAgb25WYWxpZGF0ZUZpZWxkLFxuICAgICAgcmVxdWlyZWRGaWVsZHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBvcHRpb25zID0gZmllbGRPYmplY3QgJiYgZmllbGRPYmplY3Qub3B0aW9ucyA/IGZpZWxkT2JqZWN0Lm9wdGlvbnMgOiBbXTtcbiAgICBjb25zdCBzZXRWYWx1ZSA9IGdldEZpZWxkVmFsdWVPYmplY3QoZmllbGRzLCBpZCkudmFsdWU7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZmllbGRPYmplY3QgJiYgZmllbGRPYmplY3QuZGVmYXVsdFZhbHVlID8gZmllbGRPYmplY3QuZGVmYXVsdFZhbHVlIDogc2V0VmFsdWU7XG5cbiAgICAvLyAkRmxvd0ZpeE1lOiBJbmdvcmUgZXJyb3IuIEZsb3cgaXNuJ3Qgc2VlaW5nIHRoZSBzcHJlYWQgb2JqZWN0IGFzIGluaXQgdmFsdWVzIGJlaW5nIHNldFxuICAgIHJldHVybiA8SW5wdXRTZWxlY3RcbiAgICAgIHsuLi5maWVsZE9iamVjdH0gLy8gU3ByZWFkIGZpZWxkIG9iamVjdCB0byBwYXNzIGFsbCBieSBkZWZhdWx0IGZvciBhdmFpbGFibGUgb2JqZWN0IHZhbHVlcyBzZWUgL2xpYi90eXBlcy9mb3JtcyB7U2V0SnNvbkZpZWxkfVxuICAgICAgYWN0aXZlRmllbGQ9e2FjdGl2ZUZpZWxkfVxuICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICBlcnJvclN0YXRlPXtlcnJvclN0YXRlfVxuICAgICAgZmllbGREYXRhPXtmaWVsZERhdGF9XG4gICAgICBmb3JtSWQ9e2Zvcm1JZH1cbiAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ9e2hhc0JlZW5WYWxpZGF0ZWR9XG4gICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaXNSZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBvbkNhcHR1cmVJbnB1dD17b25DYXB0dXJlSW5wdXR9XG4gICAgICBvblNldEFjdGl2ZUZpZWxkPXtvblNldEFjdGl2ZUZpZWxkfVxuICAgICAgb25TZXRMYXN0RmllbGQ9e29uU2V0TGFzdEZpZWxkfVxuICAgICAgb25WYWxpZGF0ZUZpZWxkPXtvblZhbGlkYXRlRmllbGR9XG4gICAgICByZXF1aXJlZEZpZWxkcz17cmVxdWlyZWRGaWVsZHN9XG4gICAgICBpc1NldD17aXNTZXR9XG4gICAgICB2YWx1ZT17c2V0VmFsdWUgfHwgZGVmYXVsdFZhbHVlfVxuICAgIC8+O1xuICB9XG59XG5cbi8vIG1hcFN0YXRlVG9Qcm9wcyBhbmQgbWFwRGlzcGF0Y2ggdG8gcHJvcHMgYXJlIHRha2luZyBmcm9tIHRoZSB0ZXh0IGNvbnRhaW5lciB3aGlsZSB0aGV5IGFyZSBzaW1pbGFyLlxuLy8gVGhlc2UgYXR0cmlidXRlcyBzaG91bGQgYmUgc3BsaXQgb25jZSB0aGVyZSBpcyBhIHJlcXVpcmVtZW50IHRvIGRvIG1vcmUgdGhhbiB0aGUgY3VycmVudCBzdGF0ZS9kaXNwYXRjaFxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMpKFNlbGVjdENvbnRhaW5lcik7XG4iLCIvLyBAZmxvdyBzdHJpY3QtbG9jYWxcblxudHlwZSBDb3VudHJpZXMgPSBBcnJheTx7XG4gIG5hbWU6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyxcbiAgZW1lYT86IGJvb2xlYW4sXG4gIGdkcHI/OiBib29sZWFuLFxufT47XG5cbmNvbnN0IENPVU5UUklFUzogQ291bnRyaWVzID0gW1xuICB7XG4gICAgbmFtZTogJ1VuaXRlZCBTdGF0ZXMnLFxuICAgIHZhbHVlOiAnVVMnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1VuaXRlZCBLaW5nZG9tJyxcbiAgICB2YWx1ZTogJ0dCJyxcbiAgICBlbWVhOiB0cnVlLFxuICAgIGdkcHI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQ2FuYWRhJyxcbiAgICB2YWx1ZTogJ0NBJyxcbiAgICBnZHByOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0luZGlhJyxcbiAgICB2YWx1ZTogJ0lOJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdOZXRoZXJsYW5kcycsXG4gICAgdmFsdWU6ICdOTCcsXG4gICAgZW1lYTogdHJ1ZSxcbiAgICBnZHByOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0F1c3RyYWxpYScsXG4gICAgdmFsdWU6ICdBVScsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTb3V0aCBBZnJpY2EnLFxuICAgIHZhbHVlOiAnWkEnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRnJhbmNlJyxcbiAgICB2YWx1ZTogJ0ZSJyxcbiAgICBlbWVhOiB0cnVlLFxuICAgIGdkcHI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnR2VybWFueScsXG4gICAgdmFsdWU6ICdERScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgICBnZHByOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NpbmdhcG9yZScsXG4gICAgdmFsdWU6ICdTRycsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTd2VkZW4nLFxuICAgIHZhbHVlOiAnU0UnLFxuICAgIGVtZWE6IHRydWUsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdCcmF6aWwnLFxuICAgIHZhbHVlOiAnQlInLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0FmZ2hhbmlzdGFuJyxcbiAgICB2YWx1ZTogJ0FGJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdBbGFuZCBJc2xhbmRzJyxcbiAgICB2YWx1ZTogJ0FYJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdBbGJhbmlhJyxcbiAgICB2YWx1ZTogJ0FMJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0FsZ2VyaWEnLFxuICAgIHZhbHVlOiAnRFonLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQW1lcmljYW4gU2Ftb2EnLFxuICAgIHZhbHVlOiAnQVMnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0FuZG9ycmEnLFxuICAgIHZhbHVlOiAnQUQnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQW5nb2xhJyxcbiAgICB2YWx1ZTogJ0FPJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0FuZ3VpbGxhJyxcbiAgICB2YWx1ZTogJ0FJJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdBbnRhcmN0aWNhJyxcbiAgICB2YWx1ZTogJ0FRJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdBbnRpZ3VhIGFuZCBCYXJidWRhJyxcbiAgICB2YWx1ZTogJ0FHJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdBcmdlbnRpbmEnLFxuICAgIHZhbHVlOiAnQVInLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0FybWVuaWEnLFxuICAgIHZhbHVlOiAnQU0nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0FydWJhJyxcbiAgICB2YWx1ZTogJ0FXJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdBdXN0cmlhJyxcbiAgICB2YWx1ZTogJ0FUJyxcbiAgICBlbWVhOiB0cnVlLFxuICAgIGdkcHI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQXplcmJhaWphbicsXG4gICAgdmFsdWU6ICdBWicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQmFoYW1hcycsXG4gICAgdmFsdWU6ICdCUycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQmFocmFpbicsXG4gICAgdmFsdWU6ICdCSCcsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdCYW5nbGFkZXNoJyxcbiAgICB2YWx1ZTogJ0JEJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdCYXJiYWRvcycsXG4gICAgdmFsdWU6ICdCQicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQmVsYXJ1cycsXG4gICAgdmFsdWU6ICdCWScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdCZWxnaXVtJyxcbiAgICB2YWx1ZTogJ0JFJyxcbiAgICBlbWVhOiB0cnVlLFxuICAgIGdkcHI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQmVsaXplJyxcbiAgICB2YWx1ZTogJ0JaJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdCZW5pbicsXG4gICAgdmFsdWU6ICdCSicsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdCZXJtdWRhJyxcbiAgICB2YWx1ZTogJ0JNJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdCaHV0YW4nLFxuICAgIHZhbHVlOiAnQlQnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0JvbGl2aWEnLFxuICAgIHZhbHVlOiAnQk8nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0Jvc25pYSBhbmQgSGVyemVnb3ZpbmEnLFxuICAgIHZhbHVlOiAnQkEnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQm90c3dhbmEnLFxuICAgIHZhbHVlOiAnQlcnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQm91dmV0IElzbGFuZCcsXG4gICAgdmFsdWU6ICdCVicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQnJpdC9JbmRpYW4gT2NlYW4gVGVyci4nLFxuICAgIHZhbHVlOiAnSU8nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0JydW5laSBEYXJ1c3NhbGFtJyxcbiAgICB2YWx1ZTogJ0JOJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdCdWxnYXJpYScsXG4gICAgdmFsdWU6ICdCRycsXG4gICAgZW1lYTogdHJ1ZSxcbiAgICBnZHByOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0J1cmtpbmEgRmFzbycsXG4gICAgdmFsdWU6ICdCRicsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdCdXJ1bmRpJyxcbiAgICB2YWx1ZTogJ0JJJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0NhbWJvZGlhJyxcbiAgICB2YWx1ZTogJ0tIJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdDYW1lcm9vbicsXG4gICAgdmFsdWU6ICdDTScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdDYXBlIFZlcmRlJyxcbiAgICB2YWx1ZTogJ0NWJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0NheW1hbiBJc2xhbmRzJyxcbiAgICB2YWx1ZTogJ0tZJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMnLFxuICAgIHZhbHVlOiAnQ0YnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQ2hhZCcsXG4gICAgdmFsdWU6ICdURCcsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdDaGlsZScsXG4gICAgdmFsdWU6ICdDTCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQ2hpbmEnLFxuICAgIHZhbHVlOiAnQ04nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0NocmlzdG1hcyBJc2xhbmQnLFxuICAgIHZhbHVlOiAnQ1gnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0NvY29zIChLZWVsaW5nKSBJc2xhbmRzJyxcbiAgICB2YWx1ZTogJ0NDJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdDb2xvbWJpYScsXG4gICAgdmFsdWU6ICdDTycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQ29tb3JvcycsXG4gICAgdmFsdWU6ICdLTScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdDb25nbycsXG4gICAgdmFsdWU6ICdDRycsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdDb25nbywgVGhlIERlbS4gUmVwdWJsaWMgT2YnLFxuICAgIHZhbHVlOiAnQ0QnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0Nvb2sgSXNsYW5kcycsXG4gICAgdmFsdWU6ICdDSycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQ29zdGEgUmljYScsXG4gICAgdmFsdWU6ICdDUicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQ8O0dGUgRFxcJ0l2b3JlJyxcbiAgICB2YWx1ZTogJ0NJJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0Nyb2F0aWEnLFxuICAgIHZhbHVlOiAnSFInLFxuICAgIGVtZWE6IHRydWUsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdDeXBydXMnLFxuICAgIHZhbHVlOiAnQ1knLFxuICAgIGVtZWE6IHRydWUsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdDemVjaCBSZXB1YmxpYycsXG4gICAgdmFsdWU6ICdDWicsXG4gICAgZW1lYTogdHJ1ZSxcbiAgICBnZHByOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0Rlbm1hcmsnLFxuICAgIHZhbHVlOiAnREsnLFxuICAgIGVtZWE6IHRydWUsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdEamlib3V0aScsXG4gICAgdmFsdWU6ICdESicsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdEb21pbmljYScsXG4gICAgdmFsdWU6ICdETScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRG9taW5pY2FuIFJlcHVibGljJyxcbiAgICB2YWx1ZTogJ0RPJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdFY3VhZG9yJyxcbiAgICB2YWx1ZTogJ0VDJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdFZ3lwdCcsXG4gICAgdmFsdWU6ICdFRycsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdFbCBTYWx2YWRvcicsXG4gICAgdmFsdWU6ICdTVicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRXF1YXRvcmlhbCBHdWluZWEnLFxuICAgIHZhbHVlOiAnR1EnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRXJpdHJlYScsXG4gICAgdmFsdWU6ICdFUicsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdFc3RvbmlhJyxcbiAgICB2YWx1ZTogJ0VFJyxcbiAgICBlbWVhOiB0cnVlLFxuICAgIGdkcHI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRXRoaW9waWEnLFxuICAgIHZhbHVlOiAnRVQnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRmFsa2xhbmQgSXNsYW5kcycsXG4gICAgdmFsdWU6ICdGSycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRmFyb2UgSXNsYW5kcycsXG4gICAgdmFsdWU6ICdGTycsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdGaWppJyxcbiAgICB2YWx1ZTogJ0ZKJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdGaW5sYW5kJyxcbiAgICB2YWx1ZTogJ0ZJJyxcbiAgICBlbWVhOiB0cnVlLFxuICAgIGdkcHI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRnJlbmNoIEd1aWFuYScsXG4gICAgdmFsdWU6ICdHRicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRnJlbmNoIFBvbHluZXNpYScsXG4gICAgdmFsdWU6ICdQRicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRnJlbmNoIFNvdXRoZXJuIFRlcnIuJyxcbiAgICB2YWx1ZTogJ1RGJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdHYWJvbicsXG4gICAgdmFsdWU6ICdHQScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdHYW1iaWEnLFxuICAgIHZhbHVlOiAnR00nLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnR2VvcmdpYScsXG4gICAgdmFsdWU6ICdHRScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdHaGFuYScsXG4gICAgdmFsdWU6ICdHSCcsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdHaWJyYWx0YXInLFxuICAgIHZhbHVlOiAnR0knLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnR3JlZWNlJyxcbiAgICB2YWx1ZTogJ0dSJyxcbiAgICBlbWVhOiB0cnVlLFxuICAgIGdkcHI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnR3JlZW5sYW5kJyxcbiAgICB2YWx1ZTogJ0dMJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdHcmVuYWRhJyxcbiAgICB2YWx1ZTogJ0dEJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdHdWFkZWxvdXBlJyxcbiAgICB2YWx1ZTogJ0dQJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdHdWFtJyxcbiAgICB2YWx1ZTogJ0dVJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdHdWF0ZW1hbGEnLFxuICAgIHZhbHVlOiAnR1QnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0d1aW5lYScsXG4gICAgdmFsdWU6ICdHTicsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdHdWluZWEtQmlzc2F1JyxcbiAgICB2YWx1ZTogJ0dXJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdHdXlhbmEnLFxuICAgIHZhbHVlOiAnR1knLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0hhaXRpJyxcbiAgICB2YWx1ZTogJ0hUJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdIZWFyZC9NY0RvbmFsZCBJc2xzLicsXG4gICAgdmFsdWU6ICdITScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnSG9uZHVyYXMnLFxuICAgIHZhbHVlOiAnSE4nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0hvbmcgS29uZycsXG4gICAgdmFsdWU6ICdISycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnSHVuZ2FyeScsXG4gICAgdmFsdWU6ICdIVScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgICBnZHByOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0ljZWxhbmQnLFxuICAgIHZhbHVlOiAnSVMnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnSW5kb25lc2lhJyxcbiAgICB2YWx1ZTogJ0lEJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdJcmFxJyxcbiAgICB2YWx1ZTogJ0lRJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0lyZWxhbmQnLFxuICAgIHZhbHVlOiAnSUUnLFxuICAgIGVtZWE6IHRydWUsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdJc3JhZWwnLFxuICAgIHZhbHVlOiAnSUwnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnSXRhbHknLFxuICAgIHZhbHVlOiAnSVQnLFxuICAgIGVtZWE6IHRydWUsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdKYW1haWNhJyxcbiAgICB2YWx1ZTogJ0pNJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdKYXBhbicsXG4gICAgdmFsdWU6ICdKUCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnSm9yZGFuJyxcbiAgICB2YWx1ZTogJ0pPJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0themFraHN0YW4nLFxuICAgIHZhbHVlOiAnS1onLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0tlbnlhJyxcbiAgICB2YWx1ZTogJ0tFJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0tpcmliYXRpJyxcbiAgICB2YWx1ZTogJ0tJJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdLb3JlYSAoU291dGgpJyxcbiAgICB2YWx1ZTogJ0tSJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdLdXdhaXQnLFxuICAgIHZhbHVlOiAnS1cnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnS3lyZ3l6c3RhbicsXG4gICAgdmFsdWU6ICdLRycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTGFvcycsXG4gICAgdmFsdWU6ICdMQScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTGF0dmlhJyxcbiAgICB2YWx1ZTogJ0xWJyxcbiAgICBlbWVhOiB0cnVlLFxuICAgIGdkcHI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTGViYW5vbicsXG4gICAgdmFsdWU6ICdMQicsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdMZXNvdGhvJyxcbiAgICB2YWx1ZTogJ0xTJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0xpYmVyaWEnLFxuICAgIHZhbHVlOiAnTFInLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTGlieWEnLFxuICAgIHZhbHVlOiAnTFknLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTGllY2h0ZW5zdGVpbicsXG4gICAgdmFsdWU6ICdMSScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdMaXRodWFuaWEnLFxuICAgIHZhbHVlOiAnTFQnLFxuICAgIGVtZWE6IHRydWUsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdMdXhlbWJvdXJnJyxcbiAgICB2YWx1ZTogJ0xVJyxcbiAgICBlbWVhOiB0cnVlLFxuICAgIGdkcHI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTWFjYXUnLFxuICAgIHZhbHVlOiAnTU8nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01hY2Vkb25pYScsXG4gICAgdmFsdWU6ICdNSycsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdNYWRhZ2FzY2FyJyxcbiAgICB2YWx1ZTogJ01HJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01hbGF3aScsXG4gICAgdmFsdWU6ICdNVycsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdNYWxheXNpYScsXG4gICAgdmFsdWU6ICdNWScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTWFsZGl2ZXMnLFxuICAgIHZhbHVlOiAnTVYnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01hbGknLFxuICAgIHZhbHVlOiAnTUwnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTWFsdGEnLFxuICAgIHZhbHVlOiAnTVQnLFxuICAgIGVtZWE6IHRydWUsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdNYXJzaGFsbCBJc2xhbmRzJyxcbiAgICB2YWx1ZTogJ01IJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdNYXJ0aW5pcXVlJyxcbiAgICB2YWx1ZTogJ01RJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdNYXVyaXRhbmlhJyxcbiAgICB2YWx1ZTogJ01SJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01hdXJpdGl1cycsXG4gICAgdmFsdWU6ICdNVScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdNYXlvdHRlJyxcbiAgICB2YWx1ZTogJ1lUJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdNZXhpY28nLFxuICAgIHZhbHVlOiAnTVgnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01pY3JvbmVzaWEnLFxuICAgIHZhbHVlOiAnRk0nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01vbGRvdmEnLFxuICAgIHZhbHVlOiAnTUQnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTW9uYWNvJyxcbiAgICB2YWx1ZTogJ01DJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01vbmdvbGlhJyxcbiAgICB2YWx1ZTogJ01OJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdNb250ZW5lZ3JvJyxcbiAgICB2YWx1ZTogJ01FJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01vbnRzZXJyYXQnLFxuICAgIHZhbHVlOiAnTVMnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01vcm9jY28nLFxuICAgIHZhbHVlOiAnTUEnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTW96YW1iaXF1ZScsXG4gICAgdmFsdWU6ICdNWicsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdNeWFubWFyJyxcbiAgICB2YWx1ZTogJ01NJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdOLiBNYXJpYW5hIElzbHMuJyxcbiAgICB2YWx1ZTogJ01QJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdOYW1pYmlhJyxcbiAgICB2YWx1ZTogJ05BJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ05hdXJ1JyxcbiAgICB2YWx1ZTogJ05SJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdOZXBhbCcsXG4gICAgdmFsdWU6ICdOUCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTmV0aGVybGFuZHMgQW50aWxsZXMnLFxuICAgIHZhbHVlOiAnQU4nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ05ldyBDYWxlZG9uaWEnLFxuICAgIHZhbHVlOiAnTkMnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ05ldyBaZWFsYW5kJyxcbiAgICB2YWx1ZTogJ05aJyxcbiAgICBnZHByOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ05pY2FyYWd1YScsXG4gICAgdmFsdWU6ICdOSScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTmlnZXInLFxuICAgIHZhbHVlOiAnTkUnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTmlnZXJpYScsXG4gICAgdmFsdWU6ICdORycsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdOaXVlJyxcbiAgICB2YWx1ZTogJ05VJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdOb3Jmb2xrIElzbGFuZCcsXG4gICAgdmFsdWU6ICdORicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTm9yd2F5JyxcbiAgICB2YWx1ZTogJ05PJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ09tYW4nLFxuICAgIHZhbHVlOiAnT00nLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnUGFraXN0YW4nLFxuICAgIHZhbHVlOiAnUEsnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1BhbGF1JyxcbiAgICB2YWx1ZTogJ1BXJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdQYWxlc3RpbmlhbiBUZXJyaXRvcnksIE9jY3VwaWUnLFxuICAgIHZhbHVlOiAnUFMnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnUGFuYW1hJyxcbiAgICB2YWx1ZTogJ1BBJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdQYXB1YSBOZXcgR3VpbmVhJyxcbiAgICB2YWx1ZTogJ1BHJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdQYXJhZ3VheScsXG4gICAgdmFsdWU6ICdQWScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnUGVydScsXG4gICAgdmFsdWU6ICdQRScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnUGhpbGlwcGluZXMnLFxuICAgIHZhbHVlOiAnUEgnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1BpdGNhaXJuJyxcbiAgICB2YWx1ZTogJ1BOJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdQb2xhbmQnLFxuICAgIHZhbHVlOiAnUEwnLFxuICAgIGVtZWE6IHRydWUsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdQb3J0dWdhbCcsXG4gICAgdmFsdWU6ICdQVCcsXG4gICAgZW1lYTogdHJ1ZSxcbiAgICBnZHByOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1B1ZXJ0byBSaWNvJyxcbiAgICB2YWx1ZTogJ1BSJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdRYXRhcicsXG4gICAgdmFsdWU6ICdRQScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdSZXVuaW9uJyxcbiAgICB2YWx1ZTogJ1JFJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdSb21hbmlhJyxcbiAgICB2YWx1ZTogJ1JPJyxcbiAgICBlbWVhOiB0cnVlLFxuICAgIGdkcHI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnUnVzc2lhbiBGZWRlcmF0aW9uJyxcbiAgICB2YWx1ZTogJ1JVJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdSd2FuZGEnLFxuICAgIHZhbHVlOiAnUlcnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU2FpbnQgS2l0dHMgYW5kIE5ldmlzJyxcbiAgICB2YWx1ZTogJ0tOJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTYWludCBMdWNpYScsXG4gICAgdmFsdWU6ICdMQycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU2Ftb2EnLFxuICAgIHZhbHVlOiAnV1MnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NhbiBNYXJpbm8nLFxuICAgIHZhbHVlOiAnU00nLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU2FvIFRvbWUvUHJpbmNpcGUnLFxuICAgIHZhbHVlOiAnU1QnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU2F1ZGkgQXJhYmlhJyxcbiAgICB2YWx1ZTogJ1NBJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NlbmVnYWwnLFxuICAgIHZhbHVlOiAnU04nLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU2VyYmlhJyxcbiAgICB2YWx1ZTogJ1JTJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NleWNoZWxsZXMnLFxuICAgIHZhbHVlOiAnU0MnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NpZXJyYSBMZW9uZScsXG4gICAgdmFsdWU6ICdTTCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU2xvdmFrIFJlcHVibGljJyxcbiAgICB2YWx1ZTogJ1NLJyxcbiAgICBlbWVhOiB0cnVlLFxuICAgIGdkcHI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU2xvdmVuaWEnLFxuICAgIHZhbHVlOiAnU0knLFxuICAgIGVtZWE6IHRydWUsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTb2xvbW9uIElzbGFuZHMnLFxuICAgIHZhbHVlOiAnU0InLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NvbWFsaWEnLFxuICAgIHZhbHVlOiAnU08nLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU3BhaW4nLFxuICAgIHZhbHVlOiAnRVMnLFxuICAgIGVtZWE6IHRydWUsXG4gICAgZ2RwcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTcmkgTGFua2EnLFxuICAgIHZhbHVlOiAnTEsnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1N0LiBIZWxlbmEnLFxuICAgIHZhbHVlOiAnU0gnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1N0LiBQaWVycmUgYW5kIE1pcXVlbG9uJyxcbiAgICB2YWx1ZTogJ1BNJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTdC4gVmluY2VudCBhbmQgR3JlbmFkaW5lcycsXG4gICAgdmFsdWU6ICdWQycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU3VkYW4nLFxuICAgIHZhbHVlOiAnU0QnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU3VyaW5hbWUnLFxuICAgIHZhbHVlOiAnU1InLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1N2YWxiYXJkL0phbiBNYXllbiBJc2xzLicsXG4gICAgdmFsdWU6ICdTSicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU3dhemlsYW5kJyxcbiAgICB2YWx1ZTogJ1NaJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1N3aXR6ZXJsYW5kJyxcbiAgICB2YWx1ZTogJ0NIJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1RhaXdhbicsXG4gICAgdmFsdWU6ICdUVycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnVGFqaWtpc3RhbicsXG4gICAgdmFsdWU6ICdUSicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnVGFuemFuaWEnLFxuICAgIHZhbHVlOiAnVFonLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnVGhhaWxhbmQnLFxuICAgIHZhbHVlOiAnVEgnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1RpbW9yLUxlc3RlJyxcbiAgICB2YWx1ZTogJ1RMJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdUb2dvJyxcbiAgICB2YWx1ZTogJ1RHJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1Rva2VsYXUnLFxuICAgIHZhbHVlOiAnVEsnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1RvbmdhJyxcbiAgICB2YWx1ZTogJ1RPJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdUcmluaWRhZCBhbmQgVG9iYWdvJyxcbiAgICB2YWx1ZTogJ1RUJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdUdW5pc2lhJyxcbiAgICB2YWx1ZTogJ1ROJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1R1cmtleScsXG4gICAgdmFsdWU6ICdUUicsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdUdXJrbWVuaXN0YW4nLFxuICAgIHZhbHVlOiAnVE0nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1R1cmtzL0NhaWNvcyBJc2xzLicsXG4gICAgdmFsdWU6ICdUQycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnVHV2YWx1JyxcbiAgICB2YWx1ZTogJ1RWJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdVZ2FuZGEnLFxuICAgIHZhbHVlOiAnVUcnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnVWtyYWluZScsXG4gICAgdmFsdWU6ICdVQScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdVbml0ZWQgQXJhYiBFbWlyYXRlcycsXG4gICAgdmFsdWU6ICdBRScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdVUyBNaW5vciBPdXRseWluZyBJcy4nLFxuICAgIHZhbHVlOiAnVU0nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1VydWd1YXknLFxuICAgIHZhbHVlOiAnVVknLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1V6YmVraXN0YW4nLFxuICAgIHZhbHVlOiAnVVonLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1ZhbnVhdHUnLFxuICAgIHZhbHVlOiAnVlUnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1ZhdGljYW4gQ2l0eScsXG4gICAgdmFsdWU6ICdWQScsXG4gICAgZW1lYTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdWZW5lenVlbGEnLFxuICAgIHZhbHVlOiAnVkUnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1ZpZXQgTmFtJyxcbiAgICB2YWx1ZTogJ1ZOJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdWaXJnaW4gSXNsYW5kcyAoQnJpdGlzaCknLFxuICAgIHZhbHVlOiAnVkcnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1ZpcmdpbiBJc2xhbmRzIChVLlMuKScsXG4gICAgdmFsdWU6ICdWSScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnV2FsbGlzL0Z1dHVuYSBJc2xzLicsXG4gICAgdmFsdWU6ICdXRicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnV2VzdGVybiBTYWhhcmEnLFxuICAgIHZhbHVlOiAnRUgnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnWWVtZW4nLFxuICAgIHZhbHVlOiAnWUUnLFxuICAgIGVtZWE6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnWmFtYmlhJyxcbiAgICB2YWx1ZTogJ1pNJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1ppbWJhYndlJyxcbiAgICB2YWx1ZTogJ1pXJyxcbiAgICBlbWVhOiB0cnVlLFxuICB9XTtcblxuZXhwb3J0IGRlZmF1bHQgQ09VTlRSSUVTO1xuIiwiLy8gQGZsb3cgc3RyaWN0LWxvY2FsXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8vIERhdGFcbmltcG9ydCBDT1VOVFJJRVMgZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvdW50cmllcyc7XG5cbi8vIENvbXBuZW50c1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gJy4vcGxhY2Vob2xkZXInO1xuXG4vLyBTdHlsZXNcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgSW5wdXRBcnJvdywgSW5wdXRTZWxlY3QgfSBmcm9tICcuLi8uLi9zdHlsZWQvZm9ybSc7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7XG4gIHNldEFjdGl2ZUNvbnRhaW5lcixcbiAgc2V0RmllbGRDbGFzc2VzLFxuICBzZXRGaWVsZE5hbWUsXG4gIHNldElucHV0VmFsaWRhdGlvbkNsYXNzLFxufSBmcm9tICcuLi8uLi9oZWxwZXJzL2Zvcm1zJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgSW5wdXRFdmVudCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNldEpzb25GaWVsZCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoUHJvcHMgfSBmcm9tICcuLi8uLi9jb250YWluZXJzL2ZpZWxkcyc7XG5cbnR5cGUgUHJvcHMgPSBEaXNwYXRjaFByb3BzICYgU2V0SnNvbkZpZWxkICYge1xuICBhY3RpdmVGaWVsZDogc3RyaW5nIHwgbnVsbCxcbiAgZXJyb3JTdGF0ZTogeyBpZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSB8IGZhbHNlLFxuICBmb3JtSWQ6IHN0cmluZyxcbiAgaGFzQmVlblZhbGlkYXRlZDogQXJyYXk8c3RyaW5nPixcbiAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gIGlzRGlzYWJsZWQ6IHN0cmluZyxcbiAgaXNTZXQ6IGJvb2xlYW4sXG59O1xuXG5leHBvcnQgY29uc3QgQ291bnRyeVBpY2tMaXN0ID0gKHtcbiAgYWN0aXZlRmllbGQsXG4gIGNsYXNzZXMsXG4gIGN1c3RvbVZhbGlkYXRpb24sXG4gIGRpc3BsYXlUZXh0LFxuICBlcnJvclN0YXRlLFxuICBmb3JtSWQsXG4gIGhhc0JlZW5WYWxpZGF0ZWQsXG4gIGlkLFxuICBpc0Rpc2FibGVkLFxuICBpc1JlcXVpcmVkLFxuICBpc1NldCxcbiAgbmFtZSxcbiAgb25TZXRBY3RpdmVGaWVsZCxcbiAgb25WYWxpZGF0ZUZpZWxkLFxuICBwbGFjZWhvbGRlcixcbiAgcmVxdWlyZWRGaWVsZHMsXG4gIHZhbHVlLFxufTogUHJvcHMpID0+IChcbiAgPElucHV0U2VsZWN0IGNsYXNzTmFtZT17YCR7c2V0QWN0aXZlQ29udGFpbmVyKGFjdGl2ZUZpZWxkLCBpZCl9YH0+XG4gICAgPHNlbGVjdFxuICAgICAgY2xhc3NOYW1lPXtgZm9ybS1ncm91cCAke3NldEZpZWxkQ2xhc3NlcyhjbGFzc2VzKX0ke3NldElucHV0VmFsaWRhdGlvbkNsYXNzKGVycm9yU3RhdGUsIGlkLCBpc1NldCwgaGFzQmVlblZhbGlkYXRlZCl9YH1cbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaWQ9e2lkfVxuICAgICAgbmFtZT17c2V0RmllbGROYW1lKG5hbWUsIGlkKX1cbiAgICAgIG9uQmx1cj17KGU6IElucHV0RXZlbnQpID0+IG9uVmFsaWRhdGVGaWVsZChjdXN0b21WYWxpZGF0aW9uLCBmb3JtSWQsIGlzUmVxdWlyZWQsIHJlcXVpcmVkRmllbGRzLCBlLnRhcmdldCl9IC8vIFJlZHVuZGFudCBidXQgY2F0Y2hlcyBmb3IgdmFsaWRhdGlvbiBpZiB0aGVyZSBpcyBpbnRsIHBob25lIGZpZWxkIG9uIHRoZSBmb3JtXG4gICAgICBvbkNoYW5nZT17KGU6IElucHV0RXZlbnQpID0+IG9uVmFsaWRhdGVGaWVsZChjdXN0b21WYWxpZGF0aW9uLCBmb3JtSWQsIGlzUmVxdWlyZWQsIHJlcXVpcmVkRmllbGRzLCBlLnRhcmdldCl9XG4gICAgICBvbkZvY3VzPXsoZTogSW5wdXRFdmVudCkgPT4gb25TZXRBY3RpdmVGaWVsZChmb3JtSWQsIGUudGFyZ2V0LmlkKX1cbiAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkICYmICdyZXF1aXJlZCd9XG4gICAgICBkZWZhdWx0VmFsdWU9eycnfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgID5cbiAgICAgIDxvcHRpb24gdmFsdWU9Jyc+LSBQbGVhc2Ugc2VsZWN0IC08L29wdGlvbj5cbiAgICAgIHtDT1VOVFJJRVMubWFwKChvLCBpbmRleCkgPT4gPG9wdGlvblxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIHZhbHVlPXtvLnZhbHVlfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7by5uYW1lfVxuICAgICAgICAgICAgPC9vcHRpb24+KVxuICAgICAgfVxuICAgIDwvc2VsZWN0PlxuICAgIDxJbnB1dEFycm93IGNsYXNzTmFtZT0nYXJyJyAvPlxuICAgIDxQbGFjZWhvbGRlclxuICAgICAgY2xhc3NOYW1lPSdzZWxlY3QtcGxhY2Vob2xkZXInXG4gICAgICBlcnJvclN0YXRlPXtlcnJvclN0YXRlfVxuICAgICAgaWQ9e2lkfVxuICAgICAgaXNTZXQ9e2lzU2V0fVxuICAgICAgZGlzcGxheVRleHQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICBzZXRDbGFzc2VzPSdzZWxlY3QtcGxhY2Vob2xkZXInXG4gICAgICBoYXNCZWVuVmFsaWRhdGVkPXtoYXNCZWVuVmFsaWRhdGVkfVxuICAgIC8+XG4gICAge2Vycm9yU3RhdGUgJiYgPEVycm9yTWVzc2FnZSBjbGFzc05hbWU9J3NlbGVjdC1lcnJvci1hbGVydCc+e2Vycm9yU3RhdGUubWVzc2FnZX08L0Vycm9yTWVzc2FnZT59XG4gIDwvSW5wdXRTZWxlY3Q+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBDb3VudHJ5UGlja0xpc3Q7XG4iLCIvLyBAZmxvdyBzY3JpY3QtbG9jYWxcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCBJbnB1dFNlbGVjdCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ZpZWxkcy9jb3VudHJ5JztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHtcbiAgY2hlY2tJZkZpZWxkSXNTZXQsXG4gIGNoZWNrSWZIYXNFcnJvcixcbiAgY29udGFpbnNHZHByRmllbGQsXG4gIGdldEZpZWxkVmFsdWVPYmplY3QsXG59IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBTdGF0ZSB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9yZWR1Y2VyLXN0YXRlcyc7XG5pbXBvcnQgdHlwZSB7IEF2YUZvcm1zLCBTZXRKc29uRmllbGQsIFNpbmdsZUNhcHR1cmVGaWVsZCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoUHJvcHMgYXMgUGFyZW50RGlzcGF0Y2hQcm9wcyB9IGZyb20gJy4uL2ZpZWxkcyc7XG5cbi8vIFByb3BzXG5leHBvcnQgdHlwZSBTdGF0ZVByb3BzID0ge1xuICBhY3RpdmVGaWVsZDogc3RyaW5nIHwgbnVsbCxcbiAgZXJyb3JTdGF0ZTogeyBpZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSB8IGZhbHNlLFxuICBmaWVsZHM6IEFycmF5PFNpbmdsZUNhcHR1cmVGaWVsZD4sXG4gIGZpZWxkRGF0YTogQXZhRm9ybXMsXG4gIGhhc0JlZW5WYWxpZGF0ZWQ6IEFycmF5PHN0cmluZz4sXG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gIGlzU2V0OiBib29sZWFuLFxuICByZXF1aXJlZEZpZWxkczogQXJyYXk8c3RyaW5nPixcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BzID0gUGFyZW50RGlzcGF0Y2hQcm9wcyAmIFN0YXRlUHJvcHMgJiB7XG4gIGNvbnRhaW5zR2RwckNvbnRhaW5lcjogYm9vbGVhbixcbiAgZmllbGRPYmplY3Q/OiBTZXRKc29uRmllbGQsXG4gIGZvcm1JZDogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBzdHJpbmcsXG4gIGlzb0NvZGU6IHN0cmluZyB8IG51bGwsXG59O1xuXG5jbGFzcyBDb3VudHJ5U2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmVGaWVsZCxcbiAgICAgIGVycm9yU3RhdGUsXG4gICAgICBoYXNCZWVuVmFsaWRhdGVkLFxuICAgICAgaWQsXG4gICAgICBpc0Rpc2FibGVkLFxuICAgICAgaXNSZXF1aXJlZCxcbiAgICAgIGlzU2V0LFxuICAgICAgaXNvQ29kZSxcbiAgICAgIGZpZWxkcyxcbiAgICAgIGZpZWxkRGF0YSxcbiAgICAgIGZpZWxkT2JqZWN0LFxuICAgICAgZm9ybUlkLFxuICAgICAgb25DYXB0dXJlSW5wdXQsXG4gICAgICBvblNldEFjdGl2ZUZpZWxkLFxuICAgICAgb25TZXRMYXN0RmllbGQsXG4gICAgICBvblZhbGlkYXRlRmllbGQsXG4gICAgICByZXF1aXJlZEZpZWxkcyxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBmaWVsZE9iamVjdCAmJiBmaWVsZE9iamVjdC5vcHRpb25zID8gZmllbGRPYmplY3Qub3B0aW9ucyA6IFtdO1xuICAgIGNvbnN0IHNldFZhbHVlID0gZ2V0RmllbGRWYWx1ZU9iamVjdChmaWVsZHMsIGlkKS52YWx1ZTtcblxuICAgIGlmICgoIXNldFZhbHVlIHx8IChzZXRWYWx1ZSAmJiBzZXRWYWx1ZSA9PT0gJycpKSAmJiBpc29Db2RlKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgb25DYXB0dXJlSW5wdXQoZm9ybUlkLCB7IGlkLCB2YWx1ZTogaXNvQ29kZSwgdHlwZTogJ3NlbGVjdCcgfSk7XG4gICAgICAgIG9uVmFsaWRhdGVGaWVsZCgvXlthLXogXS9pLCBmb3JtSWQsIGlzUmVxdWlyZWQsIHJlcXVpcmVkRmllbGRzLCB7IGlkLCB2YWx1ZTogaXNvQ29kZSwgdHlwZTogJ3NlbGVjdCcgfSk7XG4gICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIC8vICRGbG93Rml4TWU6IEluZ29yZSBlcnJvci4gRmxvdyBpc24ndCBzZWVpbmcgdGhlIHNwcmVhZCBvYmplY3QgYXMgaW5pdCB2YWx1ZXMgYmVpbmcgc2V0XG4gICAgcmV0dXJuIDxJbnB1dFNlbGVjdFxuICAgICAgey4uLmZpZWxkT2JqZWN0fSAvLyBTcHJlYWQgZmllbGQgb2JqZWN0IHRvIHBhc3MgYWxsIGJ5IGRlZmF1bHQgZm9yIGF2YWlsYWJsZSBvYmplY3QgdmFsdWVzIHNlZSAvbGliL3R5cGVzL2Zvcm1zIHtTZXRKc29uRmllbGR9XG4gICAgICBhY3RpdmVGaWVsZD17YWN0aXZlRmllbGR9XG4gICAgICBlcnJvclN0YXRlPXtlcnJvclN0YXRlfVxuICAgICAgZmllbGREYXRhPXtmaWVsZERhdGF9XG4gICAgICBmb3JtSWQ9e2Zvcm1JZH1cbiAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ9e2hhc0JlZW5WYWxpZGF0ZWR9XG4gICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaXNSZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBvbkNhcHR1cmVJbnB1dD17b25DYXB0dXJlSW5wdXR9XG4gICAgICBvblNldEFjdGl2ZUZpZWxkPXtvblNldEFjdGl2ZUZpZWxkfVxuICAgICAgb25TZXRMYXN0RmllbGQ9e29uU2V0TGFzdEZpZWxkfVxuICAgICAgb25WYWxpZGF0ZUZpZWxkPXtvblZhbGlkYXRlRmllbGR9XG4gICAgICByZXF1aXJlZEZpZWxkcz17cmVxdWlyZWRGaWVsZHN9XG4gICAgICBpc1NldD17aXNTZXR9XG4gICAgICB2YWx1ZT17c2V0VmFsdWV9XG4gICAgLz47XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IChzdGF0ZTogU3RhdGUsIG93blByb3BzOiB7IGlkOiBzdHJpbmcsIGZvcm1JZDogc3RyaW5nLCBoYXNFcnJvcjogeyBpZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSB8IGJvb2xlYW4gfSkgPT4ge1xuICBjb25zdCB7IGZvcm1JZCwgaWQgfSA9IG93blByb3BzO1xuICBjb25zdCBtYXhtaW5kRW5hYmxlZEZsYWcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2F2bHJNYXhtaW5kRW5hYmxlZCcpO1xuICByZXR1cm4ge1xuICAgIGFjdGl2ZUZpZWxkOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGaWVsZHNbZm9ybUlkXSxcbiAgICBjb250YWluc0dkcHJDb250YWluZXI6IGNvbnRhaW5zR2RwckZpZWxkKGlkLCBzdGF0ZS5mb3Jtcy5nZHByRmllbGRbZm9ybUlkXSksXG4gICAgZXJyb3JTdGF0ZTogY2hlY2tJZkhhc0Vycm9yKGlkLCBzdGF0ZS5mb3Jtcy5oYXNFcnJvcltmb3JtSWRdKSxcbiAgICBmaWVsZHM6IHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSxcbiAgICBmaWVsZERhdGE6IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zLFxuICAgIGlzUmVxdWlyZWQ6IHN0YXRlLmZvcm1zLnJlcXVpcmVkRmllbGRzW2Zvcm1JZF0gPyBzdGF0ZS5mb3Jtcy5yZXF1aXJlZEZpZWxkc1tmb3JtSWRdLmluY2x1ZGVzKGlkKSA6IGZhbHNlLFxuICAgIGlzU2V0OiBjaGVja0lmRmllbGRJc1NldChzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0sIGlkKSxcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgaXNvQ29kZTogKCFtYXhtaW5kRW5hYmxlZEZsYWcgfHwgbWF4bWluZEVuYWJsZWRGbGFnID09PSAndHJ1ZScpID8gc3RhdGUubWF4bWluZD8uSU5TSUdIVFM/LmNvdW50cnk/Lmlzb19jb2RlIDogbnVsbCxcbiAgICByZXF1aXJlZEZpZWxkczogc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXSxcbiAgfTtcbn07XG5cbi8vIG1hcFN0YXRlVG9Qcm9wcyBhbmQgbWFwRGlzcGF0Y2ggdG8gcHJvcHMgYXJlIHRha2luZyBmcm9tIHRoZSB0ZXh0IGNvbnRhaW5lciB3aGlsZSB0aGV5IGFyZSBzaW1pbGFyLlxuLy8gVGhlc2UgYXR0cmlidXRlcyBzaG91bGQgYmUgc3BsaXQgb25jZSB0aGVyZSBpcyBhIHJlcXVpcmVtZW50IHRvIGRvIG1vcmUgdGhhbiB0aGUgY3VycmVudCBzdGF0ZS9kaXNwYXRjaFxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMpKENvdW50cnlTZWxlY3QpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gJy4vcGxhY2Vob2xkZXInO1xuXG4vLyBTdHlsZXNcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgVGV4dEFyZWEsIElucHV0Q29udGFpbmVyIH0gZnJvbSAnLi4vLi4vc3R5bGVkL2Zvcm0nO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQge1xuICBzZXRBY3RpdmVDb250YWluZXIsIHNldEZpZWxkQ2xhc3Nlcywgc2V0RmllbGROYW1lLCBzZXRJbnB1dFZhbGlkYXRpb25DbGFzcyxcbn0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3Jtcyc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IElucHV0RXZlbnQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBTZXRKc29uRmllbGQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBTdGF0ZVByb3BzIH0gZnJvbSAnLi4vLi4vY29udGFpbmVycy9maWVsZHMvdGV4dCc7XG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoUHJvcHMgfSBmcm9tICcuLi8uLi9jb250YWluZXJzL2ZpZWxkcyc7XG5cbnR5cGUgUHJvcHMgPSBEaXNwYXRjaFByb3BzICYgU3RhdGVQcm9wcyAmIFNldEpzb25GaWVsZCAmIHtcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGlzRGlzYWJsZWQ6IHN0cmluZyxcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsLFxufTtcblxuZXhwb3J0IGNvbnN0IElucHV0VGV4dENvbXBvbmVudCA9ICh7XG4gIGFjdGl2ZUZpZWxkLFxuICBjbGFzc2VzLFxuICBjdXN0b21WYWxpZGF0aW9uLFxuICBkZXNjcmlwdGlvbixcbiAgZGlzcGxheVRleHQsXG4gIGVycm9yU3RhdGUsXG4gIGZvcm1JZCxcbiAgaWQsXG4gIGlzRGlzYWJsZWQsXG4gIG5hbWUsXG4gIHBsYWNlaG9sZGVyLFxuICBvbkNhcHR1cmVJbnB1dCxcbiAgb25TZXRBY3RpdmVGaWVsZCxcbiAgb25WYWxpZGF0ZUZpZWxkLFxuICBoYXNCZWVuVmFsaWRhdGVkLFxuICBpc1JlcXVpcmVkLFxuICBpc1NldCxcbiAgcmVxdWlyZWQsXG4gIHJlcXVpcmVkRmllbGRzLFxuICB0eXBlLFxuICB2YWx1ZSxcbn06IFByb3BzKSA9PiAoXG4gIDxJbnB1dENvbnRhaW5lciBjbGFzc05hbWU9e2Ake3NldEFjdGl2ZUNvbnRhaW5lcihhY3RpdmVGaWVsZCwgaWQpfWB9PlxuICAgIDxUZXh0QXJlYVxuICAgICAgY2xhc3NOYW1lPXtgJHtzZXRGaWVsZENsYXNzZXMoY2xhc3Nlcyl9JHtzZXRJbnB1dFZhbGlkYXRpb25DbGFzcyhlcnJvclN0YXRlLCBpZCwgaXNTZXQsIGhhc0JlZW5WYWxpZGF0ZWQpfWB9XG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIGRlZmF1bHRWYWx1ZT17dmFsdWV9XG4gICAgICBpZD17aWR9XG4gICAgICBuYW1lPXtzZXRGaWVsZE5hbWUobmFtZSwgaWQpfVxuICAgICAgb25CbHVyPXsoZTogSW5wdXRFdmVudCkgPT4gb25WYWxpZGF0ZUZpZWxkKGN1c3RvbVZhbGlkYXRpb24sIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIGUudGFyZ2V0KX1cbiAgICAgIG9uQ2hhbmdlPXsoZTogSW5wdXRFdmVudCkgPT4gb25DYXB0dXJlSW5wdXQoZm9ybUlkLCBlLnRhcmdldCl9XG4gICAgICBvbkZvY3VzPXsoZTogSW5wdXRFdmVudCkgPT4gb25TZXRBY3RpdmVGaWVsZChmb3JtSWQsIGUudGFyZ2V0LmlkKX1cbiAgICAgIHR5cGU9e3R5cGUgfHwgJ3RleHRhcmVhJ31cbiAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkICYmICdyZXF1aXJlZCd9XG4gICAgICBjdXN0b21WYWxpZGF0aW9uPXtjdXN0b21WYWxpZGF0aW9ufVxuICAgID48L1RleHRBcmVhPlxuICAgIDxQbGFjZWhvbGRlclxuICAgICAgZXJyb3JTdGF0ZT17ZXJyb3JTdGF0ZX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGlzU2V0PXtpc1NldH1cbiAgICAgIGRpc3BsYXlUZXh0PXtkaXNwbGF5VGV4dH1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIHBvc2l0aW9uVG9wPXt0cnVlfVxuICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgaGFzQmVlblZhbGlkYXRlZD17aGFzQmVlblZhbGlkYXRlZH1cbiAgICAvPlxuICAgIHtlcnJvclN0YXRlICYmIDxFcnJvck1lc3NhZ2UgYXJpYS1saXZlPSdhc3NlcnRpdmUnIGFsZXJ0PSd0cnVlJz57ZXJyb3JTdGF0ZS5tZXNzYWdlfTwvRXJyb3JNZXNzYWdlPn1cbiAgICB7ZGVzY3JpcHRpb24gJiYgQXJyYXkuaXNBcnJheShkZXNjcmlwdGlvbikgPyBkZXNjcmlwdGlvbi5tYXAoKGQsIGkpID0+IDxwIGtleT17aX0gY2xhc3NOYW1lPSdkZXNjLXAnPntkfTwvcD4pIDogPHAgY2xhc3NOYW1lPSdkZXNjLXAnPnsgZGVzY3JpcHRpb24gfTwvcD59XG4gIDwvSW5wdXRDb250YWluZXI+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBJbnB1dFRleHRDb21wb25lbnQ7XG4iLCIvLyBAZmxvdyBzY3JpY3QtbG9jYWxcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCBJbnB1dFRleHRhcmVhIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZmllbGRzL3RleHRhcmVhJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgZ2V0RmllbGRWYWx1ZU9iamVjdCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBTdGF0ZVByb3BzIH0gZnJvbSAnLi90ZXh0JztcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2hQcm9wcyB9IGZyb20gJy4uL2ZpZWxkcyc7XG5pbXBvcnQgdHlwZSB7IFNldEpzb25GaWVsZCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5cbmltcG9ydCB7IG1hcFN0YXRlVG9Qcm9wcyBhcyBwYXJlbnRNYXBTdGF0ZVRvUHJvcHMgfSBmcm9tICcuL3RleHQnO1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9IERpc3BhdGNoUHJvcHMgJiBTdGF0ZVByb3BzICYge1xuICBmaWVsZE9iamVjdD86IFNldEpzb25GaWVsZCxcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGlzRGlzYWJsZWQ6IHN0cmluZyxcbn07XG5cbmNsYXNzIFRleHRhcmVhSW5wdXRDb250YWluZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFjdGl2ZUZpZWxkLFxuICAgICAgZXJyb3JTdGF0ZSxcbiAgICAgIGZpZWxkcyxcbiAgICAgIGZpZWxkRGF0YSxcbiAgICAgIGZpZWxkT2JqZWN0LFxuICAgICAgZm9ybUlkLFxuICAgICAgaGFzQmVlblZhbGlkYXRlZCxcbiAgICAgIGlkLFxuICAgICAgaXNEaXNhYmxlZCxcbiAgICAgIGlzUmVxdWlyZWQsXG4gICAgICBpc1NldCxcbiAgICAgIG9uQ2FwdHVyZUlucHV0LFxuICAgICAgb25TZXRBY3RpdmVGaWVsZCxcbiAgICAgIG9uU2V0TGFzdEZpZWxkLFxuICAgICAgb25WYWxpZGF0ZUZpZWxkLFxuICAgICAgcmVxdWlyZWRGaWVsZHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyAkRmxvd0ZpeE1lOiBJbmdvcmUgZXJyb3IuIEZsb3cgaXNuJ3Qgc2VlaW5nIHRoZSBzcHJlYWQgb2JqZWN0IGFzIGluaXQgdmFsdWVzIGJlaW5nIHNldFxuICAgIHJldHVybiA8SW5wdXRUZXh0YXJlYVxuICAgICAgey4uLmZpZWxkT2JqZWN0fSAvLyBTcHJlYWQgZmllbGQgb2JqZWN0IHRvIHBhc3MgYWxsIGJ5IGRlZmF1bHQgZm9yIGF2YWlsYWJsZSBvYmplY3QgdmFsdWVzIHNlZSAvbGliL3R5cGVzL2Zvcm1zIHtTZXRKc29uRmllbGR9XG4gICAgICBhY3RpdmVGaWVsZD17YWN0aXZlRmllbGR9XG4gICAgICBlcnJvclN0YXRlPXtlcnJvclN0YXRlfVxuICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICBmaWVsZERhdGE9e2ZpZWxkRGF0YX1cbiAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgaGFzQmVlblZhbGlkYXRlZD17aGFzQmVlblZhbGlkYXRlZH1cbiAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBpc1JlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgaXNTZXQ9e2lzU2V0fVxuICAgICAgb25DYXB0dXJlSW5wdXQ9e29uQ2FwdHVyZUlucHV0fVxuICAgICAgb25TZXRBY3RpdmVGaWVsZD17b25TZXRBY3RpdmVGaWVsZH1cbiAgICAgIG9uU2V0TGFzdEZpZWxkPXtvblNldExhc3RGaWVsZH1cbiAgICAgIG9uVmFsaWRhdGVGaWVsZD17b25WYWxpZGF0ZUZpZWxkfVxuICAgICAgcmVxdWlyZWRGaWVsZHM9e3JlcXVpcmVkRmllbGRzfVxuICAgICAgdmFsdWU9e2dldEZpZWxkVmFsdWVPYmplY3QoZmllbGRzLCBpZCkudmFsdWV9XG4gICAgLz47XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChwYXJlbnRNYXBTdGF0ZVRvUHJvcHMpKFRleHRhcmVhSW5wdXRDb250YWluZXIpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdFBob25lSW5wdXQgZnJvbSAncmVhY3QtaW50bC1waG9uZTMnO1xuXG4vLyBDU1NcbmltcG9ydCAncmVhY3QtaW50bC1waG9uZTMvZGlzdC9zdHlsZS5jc3MnO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSAnLi9wbGFjZWhvbGRlcic7XG5cbi8vIFN0eWxlc1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBJbnRsVGV4dElucHV0Q29udGFpbmVyIH0gZnJvbSAnLi4vLi4vc3R5bGVkL2Zvcm0nO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQge1xuICBzZXRGaWVsZENsYXNzZXMsXG4gIHNldEZpZWxkTmFtZSxcbiAgc2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MsXG59IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuXG4vLyBUeXBlc1xuLy8gaW1wb3J0IHR5cGUgeyBJbnB1dEV2ZW50IH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgU2V0SnNvbkZpZWxkIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgUHJvcHMgYXMgUGFyZW50UHJvcHMgfSBmcm9tICcuLi8uLi9jb250YWluZXJzL2ZpZWxkcy9pbnRsLXBob25lJztcblxudHlwZSBQcm9wcyA9IFBhcmVudFByb3BzICYgU2V0SnNvbkZpZWxkO1xuXG5leHBvcnQgY29uc3QgSW5wdXRQaG9uZUNvbXBvbmVudCA9ICh7XG4gIGNsYXNzZXMsXG4gIGRpc3BsYXlUZXh0LFxuICBlcnJvclN0YXRlLFxuICBpZCxcbiAgbmFtZSxcbiAgcGxhY2Vob2xkZXIsXG4gIG9uSGFuZGxlQ2hhbmdlLFxuICBvblZhbGlkYXRlSW50bFBob25lLFxuICBoYXNCZWVuVmFsaWRhdGVkLFxuICBpc0RlZmF1bHRDb3VudHJ5LFxuICBpc0Rpc2FibGVkLFxuICBpc1JlcXVpcmVkLFxuICBpc1NldCxcbiAgdHlwZSxcbiAgdmFsdWUsXG59OiBQcm9wcykgPT4gKFxuICA8SW50bFRleHRJbnB1dENvbnRhaW5lclxuICAgIGNsYXNzTmFtZT17YGlzU2V0ICR7c2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MoZXJyb3JTdGF0ZSwgaWQsIGlzU2V0LCBoYXNCZWVuVmFsaWRhdGVkKX1gfVxuICA+XG4gICAgPFJlYWN0UGhvbmVJbnB1dFxuICAgICAgaW5wdXRFeHRyYVByb3BzPXt7XG4gICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lOiBzZXRGaWVsZE5hbWUobmFtZSwgaWQpLFxuICAgICAgICB0eXBlOiB0eXBlIHx8ICd0ZWwnLFxuICAgICAgfX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNvdW50cnk9e2lzRGVmYXVsdENvdW50cnl9XG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIGF1dG9TZWxlY3RDb3VudHJ5PXtmYWxzZX1cbiAgICAgIGF1dG9Gb3JtYXQ9e2ZhbHNlfVxuICAgICAgYXV0b1BsYWNlaG9sZGVyPXtmYWxzZX1cbiAgICAgIGNvdW50cnlDb2RlRWRpdGFibGU9e2ZhbHNlfVxuICAgICAgY29udGFpbmVyQ2xhc3M9e2Bpc1NldCByZWFjdC10ZWwtaW5wdXQgZm9ybS1jb250cm9sICR7c2V0RmllbGRDbGFzc2VzKGNsYXNzZXMpfSR7c2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MoZXJyb3JTdGF0ZSwgaWQsIGlzU2V0LCBoYXNCZWVuVmFsaWRhdGVkKX1gfVxuICAgICAgaW5wdXRDbGFzcz17YGlzU2V0ICR7c2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MoZXJyb3JTdGF0ZSwgaWQsIGlzU2V0LCBoYXNCZWVuVmFsaWRhdGVkKX1gfVxuICAgICAgZGVmYXVsdENvdW50cnk9e2lzRGVmYXVsdENvdW50cnl9XG4gICAgICBkaXNhYmxlQXJlYUNvZGVzPXt0cnVlfVxuICAgICAgZGlzYWJsZUNvdW50cnlDb2RlPXtmYWxzZX1cbiAgICAgIGRpc2FibGVTZWFyY2hJY29uPXt0cnVlfVxuICAgICAgZXhjbHVkZUNvdW50cmllcz17WydjdScsICdpcicsICdrcCcsICdzeSddfVxuICAgICAgZmllbGRJZD17aWR9XG4gICAgICBmaWVsZE5hbWU9e3NldEZpZWxkTmFtZShuYW1lLCBpZCl9XG4gICAgICBmb3JtYXQ9e2ZhbHNlfVxuICAgICAgb25CbHVyPXsoZSkgPT4gb25WYWxpZGF0ZUludGxQaG9uZShlLnRhcmdldCl9XG4gICAgICBvbkNoYW5nZT17b25IYW5kbGVDaGFuZ2V9XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICByZXF1aXJlZD17aXNSZXF1aXJlZCAmJiAncmVxdWlyZWQnfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgIC8+XG4gICAgPFBsYWNlaG9sZGVyXG4gICAgICBzZXRDbGFzc2VzPSdwaG9uZSBpbnRsLXBob25lLXBsYWNlaG9sZGVyJ1xuICAgICAgZXJyb3JTdGF0ZT17ZXJyb3JTdGF0ZX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGlzU2V0PXtpc1NldH1cbiAgICAgIGRpc3BsYXlUZXh0PXtkaXNwbGF5VGV4dH1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgaGFzQmVlblZhbGlkYXRlZD17aGFzQmVlblZhbGlkYXRlZH1cbiAgICAvPlxuICAgIHtlcnJvclN0YXRlICYmIDxFcnJvck1lc3NhZ2UgY2xhc3NOYW1lPSdpbnRsLXBob25lLWVycm9yJyBhcmlhLWxpdmU9J2Fzc2VydGl2ZScgYWxlcnQ9J3RydWUnPntlcnJvclN0YXRlLm1lc3NhZ2V9PC9FcnJvck1lc3NhZ2U+fVxuICA8L0ludGxUZXh0SW5wdXRDb250YWluZXI+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBJbnB1dFBob25lQ29tcG9uZW50O1xuIiwiLy8gQGZsb3cgc2NyaWN0LWxvY2FsXG4vLyBGb3IgbW9yZSB1c2UgYW5kIGluZm9ybWF0aW9uOyByZXZpZXc6IGh0dHBzOi8vcGF0dzA5MjkuZ2l0aHViLmlvL3JlYWN0LWludGwtdGVsLWlucHV0L1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IElucHV0UGhvbmUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9maWVsZHMvaW50bC1waG9uZSc7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7XG4gIGNoZWNrRGVmYXVsdEludGxQaG9uZUNvdW50cnksXG4gIGNoZWNrSWZGaWVsZElzU2V0LFxuICBjaGVja0lmSGFzRXJyb3IsXG4gIGdldEZpZWxkVmFsdWVPYmplY3QsXG4gIHNldFBhcmVudFppbmRleCxcbiAgdmFsaWRhdGVJbnRsUGhvbmVGaWVsZCxcbn0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3Jtcyc7XG5cbi8vIEFjdGlvbnNcbmltcG9ydCB7IGNhcHR1cmVEaWFsQ29kZSwgY2FwdHVyZUludGxQaG9uZSB9IGZyb20gJy4uLy4uL2xpYi9hY3Rpb25zJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICcuLi8uLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcbmltcG9ydCB0eXBlIHsgSW5wdXRUYXJnZXQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMnO1xuaW1wb3J0IHR5cGUge1xuICBBdmFGb3JtcywgSW50bENvdW50cnlEYXRhLCBTZXRKc29uRmllbGQsIFNpbmdsZUNhcHR1cmVGaWVsZCxcbn0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2Zvcm1zJztcblxuLy8gUHJvcHNcbmV4cG9ydCB0eXBlIFN0YXRlUHJvcHMgPSB7XG4gIGRpYWxDb2RlOiBzdHJpbmcsXG4gIGVycm9yU3RhdGU6IHsgaWQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIH0gfCBmYWxzZSxcbiAgZmllbGRzOiBBcnJheTxTaW5nbGVDYXB0dXJlRmllbGQ+LFxuICBmaWVsZERhdGE6IEF2YUZvcm1zLFxuICBoYXNCZWVuVmFsaWRhdGVkOiBBcnJheTxzdHJpbmc+LFxuICBpc0RlZmF1bHRDb3VudHJ5OiBzdHJpbmcsXG4gIGlzRGlzYWJsZWQ6IHN0cmluZyxcbiAgaXNSZXF1aXJlZDogYm9vbGVhbixcbiAgaXNTZXQ6IGJvb2xlYW4sXG4gIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxufTtcblxuZXhwb3J0IHR5cGUgRGlzcGF0Y2hQcm9wcyA9IHtcbiAgb25TZXRBY3RpdmVGaWVsZDogKGlkOiBzdHJpbmcpID0+IHZvaWQsXG59O1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9IERpc3BhdGNoUHJvcHMgJiBTdGF0ZVByb3BzICYge1xuICBjdXN0b21WYWxpZGF0aW9uOiBSZWdFeHAsXG4gIGZpZWxkT2JqZWN0PzogU2V0SnNvbkZpZWxkLFxuICBmb3JtSWQ6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgb25IYW5kbGVDaGFuZ2U6ICh2YWx1ZTogc3RyaW5nLCBkYXRhOiBJbnRsQ291bnRyeURhdGEpID0+IHZvaWQsXG4gIG9uVmFsaWRhdGVJbnRsUGhvbmU6IChldmVudDogSW5wdXRUYXJnZXQpID0+IHZvaWQsXG59O1xuXG50eXBlIEludGxQaG9uZUNvbnRhaW5lclByb3BzID0gUHJvcHMgJiB7XG4gIGlzb0NvZGU6IHN0cmluZyxcbiAgaXNMYXN0RmllbGQ6IGJvb2xlYW4gfCB7IGlkOiBzdHJpbmcsIHJxdWlyZWQ6IGJvb2xlYW4gfSxcbiAgb25DYXB0dXJlRGlhbENvZGU6IChkaWFsQ29kZTogc3RyaW5nKSA9PiB2b2lkLFxuICBvbkNhcHR1cmVJbnRsUGhvbmU6IChkYXRhOiBJbnRsQ291bnRyeURhdGEsIGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQsXG4gIG9uVmFsaWRhdGVJbnRsUGhvbmVGaWVsZDogKGN1c3RvbVZhbGlkYXRpb246IFJlZ0V4cCwgZGlhbENvZGU6IHN0cmluZywgaXNSZXF1aXJlZDogYm9vbGVhbiwgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sIHZhbHVlOiBJbnB1dFRhcmdldCkgPT4gdm9pZCxcbn1cblxuY2xhc3MgUGhvbmVJbnB1dENvbnRhaW5lciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJbnRsUGhvbmVDb250YWluZXJQcm9wcz4ge1xuICBvblZhbGlkYXRlSW50bFBob25lID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGlhbENvZGUsIGN1c3RvbVZhbGlkYXRpb24sIGlzUmVxdWlyZWQsIG9uVmFsaWRhdGVJbnRsUGhvbmVGaWVsZCwgcmVxdWlyZWRGaWVsZHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBvblZhbGlkYXRlSW50bFBob25lRmllbGQoY3VzdG9tVmFsaWRhdGlvbiwgZGlhbENvZGUsIGlzUmVxdWlyZWQsIHJlcXVpcmVkRmllbGRzLCBldmVudCk7XG4gIH07XG5cbiAgb25IYW5kbGVDaGFuZ2UgPSAodmFsdWUsIGRhdGEpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjdXN0b21WYWxpZGF0aW9uLCBpZCwgaXNSZXF1aXJlZCwgb25DYXB0dXJlRGlhbENvZGUsIG9uQ2FwdHVyZUludGxQaG9uZSwgb25WYWxpZGF0ZUludGxQaG9uZUZpZWxkLCByZXF1aXJlZEZpZWxkcyxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGRpYWxDb2RlIH0gPSBkYXRhO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgaWQsXG4gICAgICB0eXBlOiAndGV4dCcsXG4gICAgICB2YWx1ZSxcbiAgICB9O1xuICAgIG9uQ2FwdHVyZURpYWxDb2RlKGRpYWxDb2RlLnJlcGxhY2UoL0QvZywgJycpKTtcbiAgICBvbkNhcHR1cmVJbnRsUGhvbmUoZGF0YSwgdGhpcy5wcm9wcy5pZCwgdmFsdWUpO1xuICAgIG9uVmFsaWRhdGVJbnRsUGhvbmVGaWVsZChjdXN0b21WYWxpZGF0aW9uLCBkaWFsQ29kZSwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIGV2ZW50KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGlhbENvZGUsXG4gICAgICBlcnJvclN0YXRlLFxuICAgICAgZmllbGRzLFxuICAgICAgZmllbGREYXRhLFxuICAgICAgZmllbGRPYmplY3QsXG4gICAgICBmb3JtSWQsXG4gICAgICBoYXNCZWVuVmFsaWRhdGVkLFxuICAgICAgaWQsXG4gICAgICBpc0Rpc2FibGVkLFxuICAgICAgaXNSZXF1aXJlZCxcbiAgICAgIGlzU2V0LFxuICAgICAgaXNvQ29kZSxcbiAgICAgIG9uU2V0QWN0aXZlRmllbGQsXG4gICAgICByZXF1aXJlZEZpZWxkcyxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGlzRGVmYXVsdENvdW50cnkgPSBjaGVja0RlZmF1bHRJbnRsUGhvbmVDb3VudHJ5KGlzb0NvZGUpO1xuXG4gICAgc2V0UGFyZW50WmluZGV4KGZvcm1JZCk7XG5cbiAgICAvLyAkRmxvd0ZpeE1lOiBJbmdvcmUgZXJyb3IuIEZsb3cgaXNuJ3Qgc2VlaW5nIHRoZSBzcHJlYWQgb2JqZWN0IGFzIGluaXQgdmFsdWVzIGJlaW5nIHNldFxuICAgIHJldHVybiA8SW5wdXRQaG9uZVxuICAgICAgey4uLmZpZWxkT2JqZWN0fSAvLyBTcHJlYWQgZmllbGQgb2JqZWN0IHRvIHBhc3MgYWxsIGJ5IGRlZmF1bHQgZm9yIGF2YWlsYWJsZSBvYmplY3QgdmFsdWVzIHNlZSAvbGliL3R5cGVzL2Zvcm1zIHtTZXRKc29uRmllbGR9XG4gICAgICBkaWFsQ29kZT17ZGlhbENvZGV9XG4gICAgICBlcnJvclN0YXRlPXtlcnJvclN0YXRlfVxuICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICBmaWVsZERhdGE9e2ZpZWxkRGF0YX1cbiAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgaGFzQmVlblZhbGlkYXRlZD17aGFzQmVlblZhbGlkYXRlZH1cbiAgICAgIGlzRGVmYXVsdENvdW50cnk9e2lzRGVmYXVsdENvdW50cnl9XG4gICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaXNSZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgIGlzU2V0PXtpc1NldH1cbiAgICAgIG9uSGFuZGxlQ2hhbmdlPXt0aGlzLm9uSGFuZGxlQ2hhbmdlfVxuICAgICAgb25TZXRBY3RpdmVGaWVsZD17b25TZXRBY3RpdmVGaWVsZH1cbiAgICAgIG9uVmFsaWRhdGVJbnRsUGhvbmU9e3RoaXMub25WYWxpZGF0ZUludGxQaG9uZX1cbiAgICAgIHJlcXVpcmVkRmllbGRzPXtyZXF1aXJlZEZpZWxkc31cbiAgICAgIHZhbHVlPXtnZXRGaWVsZFZhbHVlT2JqZWN0KGZpZWxkcywgaWQpLnZhbHVlfVxuICAgIC8+O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoc3RhdGU6IFN0YXRlLCBvd25Qcm9wczogeyBpZDogc3RyaW5nLCBmb3JtSWQ6IHN0cmluZywgaGFzRXJyb3I6IHsgaWQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIH0gfCBib29sZWFuIH0pID0+IHtcbiAgY29uc3QgeyBmb3JtSWQgfSA9IG93blByb3BzO1xuICBjb25zdCBtYXhtaW5kRW5hYmxlZEZsYWcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2F2bHJNYXhtaW5kRW5hYmxlZCcpO1xuICByZXR1cm4ge1xuICAgIGRpYWxDb2RlOiBzdGF0ZS5mb3Jtcy5kaWFsQ29kZVtmb3JtSWRdIHx8ICcxJyxcbiAgICBlcnJvclN0YXRlOiBjaGVja0lmSGFzRXJyb3Iob3duUHJvcHMuaWQsIHN0YXRlLmZvcm1zLmhhc0Vycm9yW2Zvcm1JZF0pLFxuICAgIGZpZWxkczogc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkc1tmb3JtSWRdLFxuICAgIGZpZWxkRGF0YTogc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXMsXG4gICAgaXNSZXF1aXJlZDogc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXSA/IHN0YXRlLmZvcm1zLnJlcXVpcmVkRmllbGRzW2Zvcm1JZF0uaW5jbHVkZXMob3duUHJvcHMuaWQpIDogZmFsc2UsXG4gICAgaXNTZXQ6IGNoZWNrSWZGaWVsZElzU2V0KHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSwgb3duUHJvcHMuaWQpLFxuICAgIC8vICRGbG93Rml4TWUgLSBJZ25vcmUgT3B0aW9uYWwgQ2hhaW5pbmcgV2FybmluZ1xuICAgIGlzb0NvZGU6ICghbWF4bWluZEVuYWJsZWRGbGFnIHx8IG1heG1pbmRFbmFibGVkRmxhZyA9PT0gJ3RydWUnKSA/IHN0YXRlLm1heG1pbmQ/LklOU0lHSFRTPy5jb3VudHJ5Py5pc29fY29kZSA6ICd1cycsXG4gICAgcmVxdWlyZWRGaWVsZHM6IHN0YXRlLmZvcm1zLnJlcXVpcmVkRmllbGRzW2Zvcm1JZF0sXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSAoZGlzcGF0Y2g6IERpc3BhdGNoLCBvd25Qcm9wczogeyBmb3JtSWQ6IHN0cmluZywgaWQ6IHN0cmluZyB9KSA9PiB7XG4gIGNvbnN0IHsgZm9ybUlkIH0gPSBvd25Qcm9wcztcbiAgcmV0dXJuIHtcbiAgICBvbkNhcHR1cmVJbnRsUGhvbmU6IChjb3VudHJ5RGF0YTogSW50bENvdW50cnlEYXRhLCBpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiBkaXNwYXRjaChjYXB0dXJlSW50bFBob25lKGZvcm1JZCwgY291bnRyeURhdGEsIGlkLCB2YWx1ZSkpLFxuICAgIG9uQ2FwdHVyZURpYWxDb2RlOiAoZGlhbENvZGU6IHN0cmluZykgPT4gZGlzcGF0Y2goY2FwdHVyZURpYWxDb2RlKGRpYWxDb2RlLCBmb3JtSWQpKSxcbiAgICBvblZhbGlkYXRlSW50bFBob25lRmllbGQ6IChcbiAgICAgIGN1c3RvbVZhbGlkYXRpb24/OiBSZWdFeHAsXG4gICAgICBkaWFsQ29kZTogc3RyaW5nLFxuICAgICAgaXNSZXF1aXJlZDogYm9vbGVhbixcbiAgICAgIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxuICAgICAgdmFsdWU6IElucHV0VGFyZ2V0LFxuICAgICkgPT4gdmFsaWRhdGVJbnRsUGhvbmVGaWVsZChkaXNwYXRjaCwgY3VzdG9tVmFsaWRhdGlvbiwgZGlhbENvZGUsIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIHZhbHVlKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMpKFBob25lSW5wdXRDb250YWluZXIpO1xuIiwiLy8gQGZsb3dcbnR5cGUgU3RhdGUgPSBBcnJheTx7IG5hbWU6IHN0cmluZywgYWJicjogc3RyaW5nIH0+O1xuXG5leHBvcnQgY29uc3Qgc3RhdGVzOiBTdGF0ZSA9IFtcbiAge1xuICAgIG5hbWU6ICdBbGFiYW1hJyxcbiAgICBhYmJyOiAnQUwnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0FsYXNrYScsXG4gICAgYWJicjogJ0FLJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdBbWVyaWNhbiBTYW1vYScsXG4gICAgYWJicjogJ0FTJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdBcml6b25hJyxcbiAgICBhYmJyOiAnQVonLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0Fya2Fuc2FzJyxcbiAgICBhYmJyOiAnQVInLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0NhbGlmb3JuaWEnLFxuICAgIGFiYnI6ICdDQScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQ29sb3JhZG8nLFxuICAgIGFiYnI6ICdDTycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQ29ubmVjdGljdXQnLFxuICAgIGFiYnI6ICdDVCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRGVsYXdhcmUnLFxuICAgIGFiYnI6ICdERScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRGlzdHJpY3QgT2YgQ29sdW1iaWEnLFxuICAgIGFiYnI6ICdEQycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnRmVkZXJhdGVkIFN0YXRlcyBPZiBNaWNyb25lc2lhJyxcbiAgICBhYmJyOiAnRk0nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0Zsb3JpZGEnLFxuICAgIGFiYnI6ICdGTCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnR2VvcmdpYScsXG4gICAgYWJicjogJ0dBJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdHdWFtJyxcbiAgICBhYmJyOiAnR1UnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0hhd2FpaScsXG4gICAgYWJicjogJ0hJJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdJZGFobycsXG4gICAgYWJicjogJ0lEJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdJbGxpbm9pcycsXG4gICAgYWJicjogJ0lMJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdJbmRpYW5hJyxcbiAgICBhYmJyOiAnSU4nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0lvd2EnLFxuICAgIGFiYnI6ICdJQScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnS2Fuc2FzJyxcbiAgICBhYmJyOiAnS1MnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0tlbnR1Y2t5JyxcbiAgICBhYmJyOiAnS1knLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0xvdWlzaWFuYScsXG4gICAgYWJicjogJ0xBJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdNYWluZScsXG4gICAgYWJicjogJ01FJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdNYXJzaGFsbCBJc2xhbmRzJyxcbiAgICBhYmJyOiAnTUgnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01hcnlsYW5kJyxcbiAgICBhYmJyOiAnTUQnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01hc3NhY2h1c2V0dHMnLFxuICAgIGFiYnI6ICdNQScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTWljaGlnYW4nLFxuICAgIGFiYnI6ICdNSScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTWlubmVzb3RhJyxcbiAgICBhYmJyOiAnTU4nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01pc3Npc3NpcHBpJyxcbiAgICBhYmJyOiAnTVMnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01pc3NvdXJpJyxcbiAgICBhYmJyOiAnTU8nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ01vbnRhbmEnLFxuICAgIGFiYnI6ICdNVCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTmVicmFza2EnLFxuICAgIGFiYnI6ICdORScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTmV2YWRhJyxcbiAgICBhYmJyOiAnTlYnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ05ldyBIYW1wc2hpcmUnLFxuICAgIGFiYnI6ICdOSCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnTmV3IEplcnNleScsXG4gICAgYWJicjogJ05KJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdOZXcgTWV4aWNvJyxcbiAgICBhYmJyOiAnTk0nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ05ldyBZb3JrJyxcbiAgICBhYmJyOiAnTlknLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ05vcnRoIENhcm9saW5hJyxcbiAgICBhYmJyOiAnTkMnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ05vcnRoIERha290YScsXG4gICAgYWJicjogJ05EJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMnLFxuICAgIGFiYnI6ICdNUCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnT2hpbycsXG4gICAgYWJicjogJ09IJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdPa2xhaG9tYScsXG4gICAgYWJicjogJ09LJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdPcmVnb24nLFxuICAgIGFiYnI6ICdPUicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnUGFsYXUnLFxuICAgIGFiYnI6ICdQVycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnUGVubnN5bHZhbmlhJyxcbiAgICBhYmJyOiAnUEEnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1B1ZXJ0byBSaWNvJyxcbiAgICBhYmJyOiAnUFInLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1Job2RlIElzbGFuZCcsXG4gICAgYWJicjogJ1JJJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTb3V0aCBDYXJvbGluYScsXG4gICAgYWJicjogJ1NDJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTb3V0aCBEYWtvdGEnLFxuICAgIGFiYnI6ICdTRCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnVGVubmVzc2VlJyxcbiAgICBhYmJyOiAnVE4nLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1RleGFzJyxcbiAgICBhYmJyOiAnVFgnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1V0YWgnLFxuICAgIGFiYnI6ICdVVCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnVmVybW9udCcsXG4gICAgYWJicjogJ1ZUJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdWaXJnaW4gSXNsYW5kcycsXG4gICAgYWJicjogJ1ZJJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdWaXJnaW5pYScsXG4gICAgYWJicjogJ1ZBJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdXYXNoaW5ndG9uJyxcbiAgICBhYmJyOiAnV0EnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1dlc3QgVmlyZ2luaWEnLFxuICAgIGFiYnI6ICdXVicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnV2lzY29uc2luJyxcbiAgICBhYmJyOiAnV0knLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1d5b21pbmcnLFxuICAgIGFiYnI6ICdXWScsXG4gIH0sXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBzdGF0ZXM7XG4iLCIvLyBAZmxvdyBzdHJpY3QtbG9jYWxcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLy8gRGF0YVxuaW1wb3J0IFNUQVRFUyBmcm9tICcuLi8uLi9jb25zdGFudHMvdXMtc3RhdGVzLXRlcnJpdG9yaWVzJztcblxuLy8gQ29tcG5lbnRzXG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSAnLi9wbGFjZWhvbGRlcic7XG5cbi8vIFN0eWxlc1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBJbnB1dEFycm93LCBJbnB1dFNlbGVjdCB9IGZyb20gJy4uLy4uL3N0eWxlZC9mb3JtJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHtcbiAgc2V0QWN0aXZlQ29udGFpbmVyLFxuICBzZXRGaWVsZENsYXNzZXMsXG4gIHNldEZpZWxkTmFtZSxcbiAgc2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MsXG59IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBJbnB1dEV2ZW50IH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgU2V0SnNvbkZpZWxkIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2hQcm9wcyB9IGZyb20gJy4uLy4uL2NvbnRhaW5lcnMvZmllbGRzJztcblxudHlwZSBQcm9wcyA9IERpc3BhdGNoUHJvcHMgJiBTZXRKc29uRmllbGQgJiB7XG4gIGFjdGl2ZUZpZWxkOiBzdHJpbmcgfCBudWxsLFxuICBlcnJvclN0YXRlOiB7IGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHwgZmFsc2UsXG4gIGZvcm1JZDogc3RyaW5nLFxuICBoYXNCZWVuVmFsaWRhdGVkOiBBcnJheTxzdHJpbmc+LFxuICByZXF1aXJlZEZpZWxkczogQXJyYXk8c3RyaW5nPixcbiAgaXNEaXNhYmxlZDogc3RyaW5nLFxuICBpc1JlcXVpcmVkOiBib29sZWFuLFxuICBpc1NldDogYm9vbGVhbixcbn07XG5cbmNvbnN0IG9wdGlvbnMgPSBbeyBuYW1lOiAnUGxlYXNlIHNlbGVjdCAtJywgYWJicjogJycgfV0uY29uY2F0KFNUQVRFUyk7XG5cbmV4cG9ydCBjb25zdCBTdGF0ZVNlbGVjdExpc3QgPSAoe1xuICBhY3RpdmVGaWVsZCxcbiAgY2xhc3NlcyxcbiAgY3VzdG9tVmFsaWRhdGlvbixcbiAgZGVmYXVsdFZhbHVlLFxuICBkaXNwbGF5VGV4dCxcbiAgZXJyb3JTdGF0ZSxcbiAgZm9ybUlkLFxuICBoYXNCZWVuVmFsaWRhdGVkLFxuICBpZCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNSZXF1aXJlZCxcbiAgaXNTZXQsXG4gIG5hbWUsXG4gIG9uU2V0QWN0aXZlRmllbGQsXG4gIG9uVmFsaWRhdGVGaWVsZCxcbiAgcGxhY2Vob2xkZXIsXG4gIHJlcXVpcmVkRmllbGRzLFxufTogUHJvcHMpID0+IChcbiAgPElucHV0U2VsZWN0IGNsYXNzTmFtZT17YCR7c2V0QWN0aXZlQ29udGFpbmVyKGFjdGl2ZUZpZWxkLCBpZCl9YH0+XG4gICAgPHNlbGVjdFxuICAgICAgY2xhc3NOYW1lPXtgZm9ybS1ncm91cCAke3NldEZpZWxkQ2xhc3NlcyhjbGFzc2VzKX0ke3NldElucHV0VmFsaWRhdGlvbkNsYXNzKGVycm9yU3RhdGUsIGlkLCBpc1NldCwgaGFzQmVlblZhbGlkYXRlZCl9YH1cbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaWQ9e2lkfVxuICAgICAgbmFtZT17c2V0RmllbGROYW1lKG5hbWUsIGlkKX1cbiAgICAgIG9uQ2hhbmdlPXsoZTogSW5wdXRFdmVudCkgPT4gb25WYWxpZGF0ZUZpZWxkKGN1c3RvbVZhbGlkYXRpb24sIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIGUudGFyZ2V0KX1cbiAgICAgIG9uRm9jdXM9eyhlOiBJbnB1dEV2ZW50KSA9PiBvblNldEFjdGl2ZUZpZWxkKGZvcm1JZCwgZS50YXJnZXQuaWQpfVxuICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWQgJiYgJ3JlcXVpcmVkJ31cbiAgICAgIHZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICBkYXRhLWN1cnJlbnRseXNlbGVjdGVkPXtkZWZhdWx0VmFsdWV9XG4gICAgPlxuICAgICAge29wdGlvbnMubWFwKChvLCBpbmRleCkgPT4gPG9wdGlvbiBrZXk9e2luZGV4fSB2YWx1ZT17by5hYmJyfT5cbiAgICAgICAge2Ake28uYWJicn0gLSAke28ubmFtZX1gfVxuICAgICAgPC9vcHRpb24+KVxuICAgICAgfVxuICAgIDwvc2VsZWN0PlxuICAgIDxJbnB1dEFycm93IGNsYXNzTmFtZT0nYXJyJyAvPlxuICAgIDxQbGFjZWhvbGRlclxuICAgICAgY2xhc3NOYW1lPSdzZWxlY3QtcGxhY2Vob2xkZXInXG4gICAgICBlcnJvclN0YXRlPXtlcnJvclN0YXRlfVxuICAgICAgaWQ9e2lkfVxuICAgICAgaXNTZXQ9e2lzU2V0fVxuICAgICAgZGlzcGxheVRleHQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICBzZXRDbGFzc2VzPSdzZWxlY3QtcGxhY2Vob2xkZXInXG4gICAgICBoYXNCZWVuVmFsaWRhdGVkPXtoYXNCZWVuVmFsaWRhdGVkfVxuICAgIC8+XG4gICAge2Vycm9yU3RhdGUgJiYgPEVycm9yTWVzc2FnZSBjbGFzc05hbWU9J3NlbGVjdC1lcnJvci1hbGVydCc+e2Vycm9yU3RhdGUubWVzc2FnZX08L0Vycm9yTWVzc2FnZT59XG4gIDwvSW5wdXRTZWxlY3Q+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBTdGF0ZVNlbGVjdExpc3Q7XG4iLCIvLyBAZmxvdyBzY3JpY3QtbG9jYWxcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCBJbnB1dFNlbGVjdCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ZpZWxkcy9zdGF0ZS1zZWxlY3QnO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQge1xuICBjaGVja0lmRmllbGRJc1NldCxcbiAgY2hlY2tJZkhhc0Vycm9yLFxuICBjb250YWluc0dkcHJGaWVsZCxcbiAgZ2V0RmllbGRWYWx1ZU9iamVjdCxcbn0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3Jtcyc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcbmltcG9ydCB0eXBlIHsgQXZhRm9ybXMsIFNldEpzb25GaWVsZCwgU2luZ2xlQ2FwdHVyZUZpZWxkIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2hQcm9wcyBhcyBQYXJlbnREaXNwYXRjaFByb3BzIH0gZnJvbSAnLi4vZmllbGRzJztcblxuLy8gUHJvcHNcbmV4cG9ydCB0eXBlIFN0YXRlUHJvcHMgPSB7XG4gIGFjdGl2ZUZpZWxkOiBzdHJpbmcgfCBudWxsLFxuICBlcnJvclN0YXRlOiB7IGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHwgZmFsc2UsXG4gIGZpZWxkczogQXJyYXk8U2luZ2xlQ2FwdHVyZUZpZWxkPixcbiAgZmllbGREYXRhOiBBdmFGb3JtcyxcbiAgaGFzQmVlblZhbGlkYXRlZDogQXJyYXk8c3RyaW5nPixcbiAgaXNSZXF1aXJlZDogYm9vbGVhbixcbiAgaXNTZXQ6IGJvb2xlYW4sXG4gIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxufTtcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSBQYXJlbnREaXNwYXRjaFByb3BzICYgU3RhdGVQcm9wcyAmIHtcbiAgY29udGFpbnNHZHByQ29udGFpbmVyOiBib29sZWFuLFxuICBmaWVsZE9iamVjdD86IFNldEpzb25GaWVsZCxcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGlzRGlzYWJsZWQ6IHN0cmluZyxcbn07XG5cbmNsYXNzIFN0YXRlU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmVGaWVsZCxcbiAgICAgIGVycm9yU3RhdGUsXG4gICAgICBoYXNCZWVuVmFsaWRhdGVkLFxuICAgICAgaWQsXG4gICAgICBpc0Rpc2FibGVkLFxuICAgICAgaXNSZXF1aXJlZCxcbiAgICAgIGlzU2V0LFxuICAgICAgZmllbGRzLFxuICAgICAgZmllbGREYXRhLFxuICAgICAgZmllbGRPYmplY3QsXG4gICAgICBmb3JtSWQsXG4gICAgICBvbkNhcHR1cmVJbnB1dCxcbiAgICAgIG9uU2V0QWN0aXZlRmllbGQsXG4gICAgICBvblNldExhc3RGaWVsZCxcbiAgICAgIG9uVmFsaWRhdGVGaWVsZCxcbiAgICAgIHJlcXVpcmVkRmllbGRzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkT2JqZWN0ICYmIGZpZWxkT2JqZWN0Lm9wdGlvbnMgPyBmaWVsZE9iamVjdC5vcHRpb25zIDogW107XG4gICAgY29uc3Qgc2V0VmFsdWUgPSBnZXRGaWVsZFZhbHVlT2JqZWN0KGZpZWxkcywgaWQpLnZhbHVlO1xuICAgIGNvbnN0IHNldERlZmF1bHRWYWx1ZSA9IGZpZWxkT2JqZWN0ICYmIGZpZWxkT2JqZWN0LmRlZmF1bHRWYWx1ZSA/IGZpZWxkT2JqZWN0LmRlZmF1bHRWYWx1ZSA6IHNldFZhbHVlO1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNldFZhbHVlIHx8IHNldERlZmF1bHRWYWx1ZSB8fCAnJztcblxuICAgIC8vICRGbG93Rml4TWU6IEluZ29yZSBlcnJvci4gRmxvdyBpc24ndCBzZWVpbmcgdGhlIHNwcmVhZCBvYmplY3QgYXMgaW5pdCB2YWx1ZXMgYmVpbmcgc2V0XG4gICAgcmV0dXJuIDxJbnB1dFNlbGVjdFxuICAgICAgey4uLmZpZWxkT2JqZWN0fSAvLyBTcHJlYWQgZmllbGQgb2JqZWN0IHRvIHBhc3MgYWxsIGJ5IGRlZmF1bHQgZm9yIGF2YWlsYWJsZSBvYmplY3QgdmFsdWVzIHNlZSAvbGliL3R5cGVzL2Zvcm1zIHtTZXRKc29uRmllbGR9XG4gICAgICBhY3RpdmVGaWVsZD17YWN0aXZlRmllbGR9XG4gICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgIGVycm9yU3RhdGU9e2Vycm9yU3RhdGV9XG4gICAgICBmaWVsZERhdGE9e2ZpZWxkRGF0YX1cbiAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgaGFzQmVlblZhbGlkYXRlZD17aGFzQmVlblZhbGlkYXRlZH1cbiAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBpc1JlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIG9uQ2FwdHVyZUlucHV0PXtvbkNhcHR1cmVJbnB1dH1cbiAgICAgIG9uU2V0QWN0aXZlRmllbGQ9e29uU2V0QWN0aXZlRmllbGR9XG4gICAgICBvblNldExhc3RGaWVsZD17b25TZXRMYXN0RmllbGR9XG4gICAgICBvblZhbGlkYXRlRmllbGQ9e29uVmFsaWRhdGVGaWVsZH1cbiAgICAgIHJlcXVpcmVkRmllbGRzPXtyZXF1aXJlZEZpZWxkc31cbiAgICAgIGlzU2V0PXtpc1NldH1cbiAgICAvPjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHN0YXRlOiBTdGF0ZSwgb3duUHJvcHM6IHsgaWQ6IHN0cmluZywgZm9ybUlkOiBzdHJpbmcsIGhhc0Vycm9yOiB7IGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHwgYm9vbGVhbiB9KSA9PiB7XG4gIGNvbnN0IHsgZm9ybUlkLCBpZCB9ID0gb3duUHJvcHM7XG4gIHJldHVybiB7XG4gICAgYWN0aXZlRmllbGQ6IHN0YXRlLmZvcm1zLmFjdGl2ZUZpZWxkc1tmb3JtSWRdLFxuICAgIGNvbnRhaW5zR2RwckNvbnRhaW5lcjogY29udGFpbnNHZHByRmllbGQoaWQsIHN0YXRlLmZvcm1zLmdkcHJGaWVsZFtmb3JtSWRdKSxcbiAgICBlcnJvclN0YXRlOiBjaGVja0lmSGFzRXJyb3IoaWQsIHN0YXRlLmZvcm1zLmhhc0Vycm9yW2Zvcm1JZF0pLFxuICAgIGZpZWxkczogc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkc1tmb3JtSWRdLFxuICAgIGZpZWxkRGF0YTogc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXMsXG4gICAgaXNSZXF1aXJlZDogc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXSA/IHN0YXRlLmZvcm1zLnJlcXVpcmVkRmllbGRzW2Zvcm1JZF0uaW5jbHVkZXMoaWQpIDogZmFsc2UsXG4gICAgaXNTZXQ6IGNoZWNrSWZGaWVsZElzU2V0KHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSwgaWQpLFxuICAgIHJlcXVpcmVkRmllbGRzOiBzdGF0ZS5mb3Jtcy5yZXF1aXJlZEZpZWxkc1tmb3JtSWRdLFxuICB9O1xufTtcblxuLy8gbWFwU3RhdGVUb1Byb3BzIGFuZCBtYXBEaXNwYXRjaCB0byBwcm9wcyBhcmUgdGFraW5nIGZyb20gdGhlIHRleHQgY29udGFpbmVyIHdoaWxlIHRoZXkgYXJlIHNpbWlsYXIuXG4vLyBUaGVzZSBhdHRyaWJ1dGVzIHNob3VsZCBiZSBzcGxpdCBvbmNlIHRoZXJlIGlzIGEgcmVxdWlyZW1lbnQgdG8gZG8gbW9yZSB0aGFuIHRoZSBjdXJyZW50IHN0YXRlL2Rpc3BhdGNoXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcykoU3RhdGVTZWxlY3QpO1xuIiwiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgQ2hlY2tib3hDb250YWluZXIgfSBmcm9tICcuLi8uLi9zdHlsZWQvZm9ybSc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCBUb1NMaW5rc0NvbnRhaW5lciBmcm9tICcuL3Rlcm1zLW9mLXNlcnZpY2UtbGlua3MnO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQge1xuICBzZXRBY3RpdmVDb250YWluZXIsXG4gIHNldEZpZWxkTmFtZSxcbiAgc2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MsXG59IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaFByb3BzIGFzIFBhcmVudERpc3BhdGNoUHJvcHMgfSBmcm9tICcuLi8uLi9jb250YWluZXJzL2ZpZWxkcy90ZXJtcy1vZi1zZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgQXZhRm9ybXMsIFNpbmdsZUNhcHR1cmVGaWVsZCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IElucHV0RXZlbnQsIElucHV0VGFyZ2V0IH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzJztcblxudHlwZSBTdGF0ZVByb3BzID0ge1xuICBhY3RpdmVGaWVsZDogc3RyaW5nIHwgbnVsbCxcbiAgZXJyb3JTdGF0ZTogeyBpZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSB8IGZhbHNlLFxuICBmaWVsZHM6IEFycmF5PFNpbmdsZUNhcHR1cmVGaWVsZD4sXG4gIGZpZWxkRGF0YTogQXZhRm9ybXMsXG4gIGhhc0JlZW5WYWxpZGF0ZWQ6IEFycmF5PHN0cmluZz4sXG4gIGlzRGlzYWJsZWQ6IHN0cmluZyxcbiAgaXNSZXF1aXJlZDogYm9vbGVhbixcbiAgaXNTZXQ6IGJvb2xlYW4sXG4gIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxufTtcblxudHlwZSBQcm9wcyA9IFBhcmVudERpc3BhdGNoUHJvcHMgJiBTdGF0ZVByb3BzICYge1xuICBjdXN0b21WYWxpZGF0aW9uOiBSZWdFeHAsXG4gIGRpc3BsYXlUZXh0OiBzdHJpbmcsXG4gIGZvcm1JZDogc3RyaW5nLFxuICBoYW5kbGVDaGFuZ2U6ICh0YXJnZXQ6IElucHV0VGFyZ2V0KSA9PiB2b2lkLFxuICBsaW5rcz86IEFycmF5PHsgaHJlZjogc3RyaW5nLCB0ZXh0OiBzdHJpbmcgfT4sXG4gIG5hbWU6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyB8IG51bGwsXG59XG5cbmV4cG9ydCBjb25zdCBUZXJtc09mU2VydmljZUNvbXBvbmVudCA9ICh7XG4gIGFjdGl2ZUZpZWxkLFxuICBkaXNwbGF5VGV4dCxcbiAgZXJyb3JTdGF0ZSxcbiAgZm9ybUlkLFxuICBoYXNCZWVuVmFsaWRhdGVkLFxuICBsaW5rcyxcbiAgaGFuZGxlQ2hhbmdlLFxuICBpc0Rpc2FibGVkLFxuICBpc1JlcXVpcmVkLFxuICBpZCxcbiAgaXNTZXQsXG4gIG5hbWUsXG4gIG9uU2V0QWN0aXZlRmllbGQsXG59OiBQcm9wcykgPT4gPENoZWNrYm94Q29udGFpbmVyIGNsYXNzTmFtZT17YCR7c2V0QWN0aXZlQ29udGFpbmVyKGFjdGl2ZUZpZWxkLCBpZCl9YH0+XG4gIDxsYWJlbD5cbiAgICA8aW5wdXRcbiAgICAgIGNsYXNzTmFtZT17YCR7c2V0SW5wdXRWYWxpZGF0aW9uQ2xhc3MoZXJyb3JTdGF0ZSwgaWQsIGlzU2V0LCBoYXNCZWVuVmFsaWRhdGVkKX1gfVxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBpZD17aWR9XG4gICAgICBuYW1lPXtzZXRGaWVsZE5hbWUobmFtZSwgaWQpfVxuICAgICAgb25DaGFuZ2U9eyhlOiBJbnB1dEV2ZW50KSA9PiBoYW5kbGVDaGFuZ2UoZS50YXJnZXQpfVxuICAgICAgb25Gb2N1cz17KGU6IElucHV0RXZlbnQpID0+IG9uU2V0QWN0aXZlRmllbGQoZm9ybUlkLCBlLnRhcmdldC5pZCl9XG4gICAgICB0eXBlPSdjaGVja2JveCdcbiAgICAgIGNoZWNrZWQ9e2lzU2V0ID8gJ2NoZWNrZWQnIDogJyd9Lz5cbiAgICA8c3Bhbj57aXNSZXF1aXJlZCAmJiAnKid9IHtkaXNwbGF5VGV4dH0ge2xpbmtzICYmIDxUb1NMaW5rc0NvbnRhaW5lciBsaW5rcz17bGlua3N9IC8+fVxuICAgIDwvc3Bhbj5cbiAgPC9sYWJlbD5cbiAge2Vycm9yU3RhdGUgJiYgPEVycm9yTWVzc2FnZSBjbGFzc05hbWU9J2Vycm9yLWFsZXJ0LWNvbnRhaW5lcicgYXJpYS1saXZlPSdhc3NlcnRpdmUnIGFsZXJ0PSd0cnVlJyBpc0NoZWNrYm94ID57ZXJyb3JTdGF0ZS5tZXNzYWdlfTwvRXJyb3JNZXNzYWdlPn1cbjwvQ2hlY2tib3hDb250YWluZXI+O1xuXG5leHBvcnQgZGVmYXVsdCBUZXJtc09mU2VydmljZUNvbXBvbmVudDtcbiIsIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuLy8gQWN0aW9uc1xuaW1wb3J0IHsgc2V0QWN0aXZlRmllbGQsIGNhcHR1cmVJbnB1dCB9IGZyb20gJy4uLy4uL2xpYi9hY3Rpb25zJztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IFRPU0NvbXBvbmVudCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ZpZWxkcy90ZXJtcy1vZi1zZXJ2aWNlJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHtcbiAgY2hlY2tJZkZpZWxkSXNTZXQsXG4gIGNoZWNrSWZIYXNFcnJvcixcbiAgY29udGFpbnNHZHByRmllbGQsXG4gIHZhbGlkYXRlRmllbGQsXG59IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgU3RhdGUgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMvcmVkdWNlci1zdGF0ZXMnO1xuaW1wb3J0IHR5cGUgeyBBdmFGb3JtcywgU2V0SnNvbkZpZWxkLCBTaW5nbGVDYXB0dXJlRmllbGQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBJbnB1dFRhcmdldCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcyc7XG5cbnR5cGUgU3RhdGVQcm9wcyA9IHtcbiAgYWN0aXZlRmllbGQ6IHN0cmluZyB8IG51bGwsXG4gIGVycm9yU3RhdGU6IHsgaWQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIH0gfCBmYWxzZSxcbiAgZmllbGRzOiBBcnJheTxTaW5nbGVDYXB0dXJlRmllbGQ+LFxuICBmaWVsZERhdGE6IEF2YUZvcm1zLFxuICBoYXNCZWVuVmFsaWRhdGVkOiBBcnJheTxzdHJpbmc+LFxuICBpc1JlcXVpcmVkOiBib29sZWFuLFxuICBpc0NoZWNrZWQ6IGJvb2xlYW4sXG4gIGlzU2V0OiBib29sZWFuLFxuICByZXF1aXJlZEZpZWxkczogQXJyYXk8c3RyaW5nPixcbiAgb25DYXB0dXJlSW5wdXQ6IChmb3JtSWQ6IHN0cmluZywgaW5wdXRUYXJnZXQ6IElucHV0VGFyZ2V0KSA9PiB2b2lkLCAvLyByZWR1bmRhbnQgZmxvdyBuZWVkXG4gIG9uVmFsaWRhdGVGaWVsZDogKFxuICAgIGN1c3RvbVZhbGlkYXRpb24/OiBSZWdFeHAsXG4gICAgZm9ybUlkOiBzdHJpbmcsXG4gICAgaXNSZXF1aXJlZDogYm9vbGVhbixcbiAgICByZXF1aXJlZEZpZWxkczogQXJyYXk8c3RyaW5nPixcbiAgICB0YXJnZXQ6IElucHV0VGFyZ2V0LFxuICApID0+IHZvaWQsIC8vIHJlZHVuZGFudCBmbG93IG5lZWRcbn07XG5cbmV4cG9ydCB0eXBlIERpc3BhdGNoUHJvcHMgPSB7XG4gIG9uU2V0QWN0aXZlRmllbGQ6IChmb3JtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgb25DYXB0dXJlSW5wdXQ6IChmb3JtSWQ6IHN0cmluZywgaW5wdXRUYXJnZXQ6IElucHV0VGFyZ2V0KSA9PiB2b2lkLFxuICBvblZhbGlkYXRlRmllbGQ6IChcbiAgICBjdXN0b21WYWxpZGF0aW9uPzogUmVnRXhwLFxuICAgIGZvcm1JZDogc3RyaW5nLFxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gICAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG4gICAgdGFyZ2V0OiBJbnB1dFRhcmdldCxcbiAgKSA9PiB2b2lkLFxufVxuXG50eXBlIFByb3BzID0gRGlzcGF0Y2hQcm9wcyAmIFN0YXRlUHJvcHMgJiB7XG4gIGN1c3RvbVZhbGlkYXRpb246IFJlZ0V4cCxcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGZpZWxkT2JqZWN0PzogU2V0SnNvbkZpZWxkLFxuICBpZDogc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyB8IG51bGwsXG4gIG9uQ2FwdHVyZUlucHV0OiAoZm9ybUlkOiBzdHJpbmcsIGlucHV0VGFyZ2V0OiBJbnB1dFRhcmdldCkgPT4gdm9pZCwgLy8gcmVkdW5kYW50IGZsb3cgbmVlZFxufVxuXG5jbGFzcyBUZXJtc09mU2VydmljZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcz4ge1xuICBoYW5kbGVDaGFuZ2UgPSAodGFyZ2V0OiBJbnB1dFRhcmdldCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1c3RvbVZhbGlkYXRpb24sXG4gICAgICBmb3JtSWQsXG4gICAgICBpZCxcbiAgICAgIGlzUmVxdWlyZWQsXG4gICAgICBvbkNhcHR1cmVJbnB1dCxcbiAgICAgIG9uVmFsaWRhdGVGaWVsZCxcbiAgICAgIHJlcXVpcmVkRmllbGRzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9wcy5maWVsZE9iamVjdCAmJiB0aGlzLnByb3BzLmZpZWxkT2JqZWN0LnZhbHVlID8gdGhpcy5wcm9wcy5maWVsZE9iamVjdC52YWx1ZSA6ICcxJztcbiAgICBvbkNhcHR1cmVJbnB1dChmb3JtSWQsIHtcbiAgICAgIGlkLFxuICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgIHZhbHVlLFxuICAgICAgY2hlY2tlZDogdGFyZ2V0LmNoZWNrZWQsXG4gICAgfSk7XG4gICAgb25WYWxpZGF0ZUZpZWxkKGN1c3RvbVZhbGlkYXRpb24sIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIHtcbiAgICAgIGNoZWNrZWQ6IHRhcmdldC5jaGVja2VkLFxuICAgICAgaWQsXG4gICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFjdGl2ZUZpZWxkLFxuICAgICAgY3VzdG9tVmFsaWRhdGlvbixcbiAgICAgIGVycm9yU3RhdGUsXG4gICAgICBmaWVsZHMsXG4gICAgICBmaWVsZERhdGEsXG4gICAgICBmaWVsZE9iamVjdCxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGhhc0JlZW5WYWxpZGF0ZWQsXG4gICAgICBpc1JlcXVpcmVkLFxuICAgICAgaWQsXG4gICAgICBpc0Rpc2FibGVkLFxuICAgICAgaXNTZXQsXG4gICAgICBuYW1lLFxuICAgICAgb25TZXRBY3RpdmVGaWVsZCxcbiAgICAgIHJlcXVpcmVkRmllbGRzLFxuICAgICAgb25DYXB0dXJlSW5wdXQsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyAkRmxvd0ZpeE1lOiBJbmdvcmUgZXJyb3IuIEZsb3cgaXNuJ3Qgc2VlaW5nIHRoZSBzcHJlYWQgb2JqZWN0IGFzIGluaXQgdmFsdWVzIGJlaW5nIHNldFxuICAgIHJldHVybiA8VE9TQ29tcG9uZW50XG4gICAgICB7Li4uZmllbGRPYmplY3R9XG4gICAgICBhY3RpdmVGaWVsZD17YWN0aXZlRmllbGR9XG4gICAgICBjdXN0b21WYWxpZGF0aW9uPXtjdXN0b21WYWxpZGF0aW9ufVxuICAgICAgZXJyb3JTdGF0ZT17ZXJyb3JTdGF0ZX1cbiAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgZmllbGREYXRhPXtmaWVsZERhdGF9XG4gICAgICBmb3JtSWQ9e2Zvcm1JZH1cbiAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ9e2hhc0JlZW5WYWxpZGF0ZWR9XG4gICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaXNSZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGlzU2V0PXtpc1NldH1cbiAgICAgIG5hbWU9e25hbWV9XG4gICAgICBvblNldEFjdGl2ZUZpZWxkPXtvblNldEFjdGl2ZUZpZWxkfVxuICAgICAgaGFuZGxlQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgIHJlcXVpcmVkRmllbGRzPXtyZXF1aXJlZEZpZWxkc31cbiAgICAgIG9uQ2FwdHVyZUlucHV0PXtvbkNhcHR1cmVJbnB1dH1cbiAgICAvPjtcbiAgfVxufVxuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSAoZGlzcGF0Y2g6IERpc3BhdGNoKSA9PiAoe1xuICBvblNldEFjdGl2ZUZpZWxkOiAoZm9ybUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+IHtcbiAgICBkaXNwYXRjaChzZXRBY3RpdmVGaWVsZChmb3JtSWQsIGlkKSk7XG4gIH0sXG4gIG9uQ2FwdHVyZUlucHV0OiAoXG4gICAgZm9ybUlkOiBzdHJpbmcsXG4gICAgaW5wdXRUYXJnZXQ6IElucHV0VGFyZ2V0LFxuICApID0+IGRpc3BhdGNoKGNhcHR1cmVJbnB1dChkaXNwYXRjaCwgZm9ybUlkLCBpbnB1dFRhcmdldCkpLFxuICBvblZhbGlkYXRlRmllbGQ6IChcbiAgICBjdXN0b21WYWxpZGF0aW9uPzogUmVnRXhwLFxuICAgIGZvcm1JZDogc3RyaW5nLFxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gICAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG4gICAgdGFyZ2V0OiBJbnB1dFRhcmdldCxcbiAgKSA9PiB2YWxpZGF0ZUZpZWxkKGRpc3BhdGNoLCBjdXN0b21WYWxpZGF0aW9uLCBmb3JtSWQsIGlzUmVxdWlyZWQsIHJlcXVpcmVkRmllbGRzLCB0YXJnZXQpLFxufSk7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IChzdGF0ZTogU3RhdGUsIG93blByb3BzOiB7IGZvcm1JZDogc3RyaW5nLCBpZDogc3RyaW5nIH0pID0+IHtcbiAgY29uc3QgeyBmb3JtSWQsIGlkIH0gPSBvd25Qcm9wcztcbiAgcmV0dXJuIHtcbiAgICBhY3RpdmVGaWVsZDogc3RhdGUuZm9ybXMuYWN0aXZlRmllbGRzW2Zvcm1JZF0sXG4gICAgY29udGFpbnNHZHByQ29udGFpbmVyOiBjb250YWluc0dkcHJGaWVsZChpZCwgc3RhdGUuZm9ybXMuZ2RwckZpZWxkW2Zvcm1JZF0pLFxuICAgIGVycm9yU3RhdGU6IGNoZWNrSWZIYXNFcnJvcihpZCwgc3RhdGUuZm9ybXMuaGFzRXJyb3JbZm9ybUlkXSksXG4gICAgZmllbGRzOiBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0sXG4gICAgZmllbGREYXRhOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3JtcyxcbiAgICBpc1JlcXVpcmVkOiBzdGF0ZS5mb3Jtcy5yZXF1aXJlZEZpZWxkc1tmb3JtSWRdID8gc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXS5pbmNsdWRlcyhpZCkgOiBmYWxzZSxcbiAgICBpc1NldDogY2hlY2tJZkZpZWxkSXNTZXQoc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkc1tmb3JtSWRdLCBpZCksXG4gICAgcmVxdWlyZWRGaWVsZHM6IHN0YXRlLmZvcm1zLnJlcXVpcmVkRmllbGRzW2Zvcm1JZF0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShUZXJtc09mU2VydmljZSk7XG4iLCIvLyBAZmxvdyBzdHJpY3QtbG9jYWxcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG4vLyAkRmxvd0ZpeE1lXG5pbXBvcnQgeyBQU0NsaWNrV3JhcCB9IGZyb20gJ0BwYWN0c2FmZS9wYWN0c2FmZS1yZWFjdC1zZGsnO1xuaW1wb3J0IHsgc2V0QWN0aXZlQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3Jtcyc7XG5pbXBvcnQgeyBDaGVja2JveENvbnRhaW5lciwgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vc3R5bGVkL2Zvcm0nO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBJbnB1dFRhcmdldCB9IGZyb20gJy4uLy4uL2xpYi90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGFjdGl2ZUZpZWxkOiBzdHJpbmcgfCBudWxsLFxuICBlcnJvclN0YXRlOiB7IGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHwgZmFsc2UsXG4gIGFjY2Vzc0lkOiBzdHJpbmcsXG4gIGdyb3VwS2V5OiBzdHJpbmcsXG4gIGNsaWNrV3JhcFN0eWxlOiBzdHJpbmcsXG4gIHNlbmRDb25maXJtYXRpb25FbWFpbDogYm9vbGVhbixcbiAgc2lnbmVySWRTZWxlY3Rvcjogc3RyaW5nLFxuICBoYW5kbGVDaGFuZ2U6ICh0YXJnZXQ6IElucHV0VGFyZ2V0KSA9PiB2b2lkLFxuICBpZDogc3RyaW5nLFxufTtcblxuZXhwb3J0IGNvbnN0IENsaWNrd3JhcENvbXBvbmVudCA9ICh7XG4gIGFjdGl2ZUZpZWxkLFxuICBlcnJvclN0YXRlLFxuICBhY2Nlc3NJZCxcbiAgZ3JvdXBLZXksXG4gIGNsaWNrV3JhcFN0eWxlLFxuICBzZW5kQ29uZmlybWF0aW9uRW1haWwsXG4gIHNpZ25lcklkU2VsZWN0b3IsXG4gIGhhbmRsZUNoYW5nZSxcbiAgaWQsXG59OiBQcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxDaGVja2JveENvbnRhaW5lclxuICAgICAgaWQ9XCJjbGlja3dyYXAtY29udGFpbmVyXCJcbiAgICAgIGNsYXNzTmFtZT17YCR7c2V0QWN0aXZlQ29udGFpbmVyKGFjdGl2ZUZpZWxkLCBpZCl9YH1cbiAgICA+XG4gICAgICA8UFNDbGlja1dyYXBcbiAgICAgICAgYWNjZXNzSWQ9e2FjY2Vzc0lkfVxuICAgICAgICBncm91cEtleT17Z3JvdXBLZXl9XG4gICAgICAgIGNvbnRhaW5lcklkPXtcImNsaWNrd3JhcC1jb250YWluZXJcIn1cbiAgICAgICAgY29uZmlybWF0aW9uRW1haWxcbiAgICAgICAgc2lnbmVySWRTZWxlY3Rvcj17c2lnbmVySWRTZWxlY3Rvcn1cbiAgICAgICAgdGVzdE1vZGU9e3Byb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbid9XG4gICAgICAgIG9uQ2hlY2tlZD17KGVsKSA9PiBoYW5kbGVDaGFuZ2UoZWwpfVxuICAgICAgICBvblVuY2hlY2tlZD17KGVsKSA9PiBoYW5kbGVDaGFuZ2UoZWwpfVxuICAgICAgLz5cbiAgICAgIHtlcnJvclN0YXRlICYmIDxFcnJvck1lc3NhZ2UgY2xhc3NOYW1lPSdlcnJvci1hbGVydC1jb250YWluZXInIGFyaWEtbGl2ZT0nYXNzZXJ0aXZlJyBhbGVydD0ndHJ1ZScgaXNDaGVja2JveCA+e2Vycm9yU3RhdGUubWVzc2FnZX08L0Vycm9yTWVzc2FnZT59XG4gICAgPC9DaGVja2JveENvbnRhaW5lcj5cbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENsaWNrd3JhcENvbXBvbmVudDtcbiIsIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IENsaWNrd3JhcENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZmllbGRzL2NsaWNrd3JhcCc7XG5cbi8vIEFjdGlvbnNcbmltcG9ydCB7IGNhcHR1cmVJbnB1dCB9IGZyb20gJy4uLy4uL2xpYi9hY3Rpb25zJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHtcbiAgY2hlY2tJZkZpZWxkSXNTZXQsXG4gIGNoZWNrSWZIYXNFcnJvcixcbiAgdmFsaWRhdGVGaWVsZCxcbn0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3Jtcyc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2FjdGlvbnMnO1xuaW1wb3J0IHR5cGUgeyBTdGF0ZSB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9yZWR1Y2VyLXN0YXRlcyc7XG5pbXBvcnQgdHlwZSB7IFNldEpzb25GaWVsZCwgU2luZ2xlQ2FwdHVyZUZpZWxkIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgSW5wdXRUYXJnZXQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMnO1xuXG50eXBlIFN0YXRlUHJvcHMgPSB7XG4gIGFjdGl2ZUZpZWxkOiBzdHJpbmcgfCBudWxsLFxuICBjb25uZWN0ZWRGaWVsZFZhbHVlOiBzdHJpbmcgfCBudWxsLFxuICBlcnJvclN0YXRlOiB7IGlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHwgZmFsc2UsXG4gIGZpZWxkczogQXJyYXk8U2luZ2xlQ2FwdHVyZUZpZWxkPixcbiAgaGFzQmVlblZhbGlkYXRlZDogQXJyYXk8c3RyaW5nPixcbiAgaXNSZXF1aXJlZDogYm9vbGVhbixcbiAgaXNDaGVja2VkOiBib29sZWFuLFxuICBpc1NldDogYm9vbGVhbixcbiAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG4gIG9uQ2FwdHVyZUlucHV0OiAoZm9ybUlkOiBzdHJpbmcsIGlucHV0VGFyZ2V0OiBJbnB1dFRhcmdldCkgPT4gdm9pZCwgLy8gcmVkdW5kYW50IGZsb3cgbmVlZFxuICBvblZhbGlkYXRlRmllbGQ6IChcbiAgICBjdXN0b21WYWxpZGF0aW9uPzogUmVnRXhwLFxuICAgIGZvcm1JZDogc3RyaW5nLFxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gICAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG4gICAgdGFyZ2V0OiBJbnB1dFRhcmdldCxcbiAgKSA9PiB2b2lkLCAvLyByZWR1bmRhbnQgZmxvdyBuZWVkXG4gIHNob3dGaWVsZDogYm9vbGVhbixcbn07XG5cbmV4cG9ydCB0eXBlIERpc3BhdGNoUHJvcHMgPSB7XG4gIG9uQ2FwdHVyZUlucHV0OiAoZm9ybUlkOiBzdHJpbmcsIGlucHV0VGFyZ2V0OiBJbnB1dFRhcmdldCkgPT4gdm9pZCxcbiAgb25WYWxpZGF0ZUZpZWxkOiAoXG4gICAgY3VzdG9tVmFsaWRhdGlvbj86IFJlZ0V4cCxcbiAgICBmb3JtSWQ6IHN0cmluZyxcbiAgICBpc1JlcXVpcmVkOiBib29sZWFuLFxuICAgIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxuICAgIHRhcmdldDogSW5wdXRUYXJnZXQsXG4gICkgPT4gdm9pZCxcbn1cblxudHlwZSBQcm9wcyA9IERpc3BhdGNoUHJvcHMgJiBTdGF0ZVByb3BzICYge1xuICBjdXN0b21WYWxpZGF0aW9uOiBSZWdFeHAsXG4gIGZvcm1JZDogc3RyaW5nLFxuICBmaWVsZE9iamVjdDogU2V0SnNvbkZpZWxkLFxuICBpZDogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsLFxuICBvbkNhcHR1cmVJbnB1dDogKGZvcm1JZDogc3RyaW5nLCBpbnB1dFRhcmdldDogSW5wdXRUYXJnZXQpID0+IHZvaWQsIC8vIHJlZHVuZGFudCBmbG93IG5lZWRcbn07XG5cbmNsYXNzIENsaWNrd3JhcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcz4ge1xuICBoYW5kbGVDaGFuZ2UgPSAodGFyZ2V0OiBJbnB1dFRhcmdldCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1c3RvbVZhbGlkYXRpb24sXG4gICAgICBmb3JtSWQsXG4gICAgICBpZCxcbiAgICAgIGlzUmVxdWlyZWQsXG4gICAgICBvbkNhcHR1cmVJbnB1dCxcbiAgICAgIG9uVmFsaWRhdGVGaWVsZCxcbiAgICAgIHJlcXVpcmVkRmllbGRzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9wcy5maWVsZE9iamVjdCAmJiB0aGlzLnByb3BzLmZpZWxkT2JqZWN0LnZhbHVlID8gdGhpcy5wcm9wcy5maWVsZE9iamVjdC52YWx1ZSA6ICcxJztcbiAgICBvbkNhcHR1cmVJbnB1dChmb3JtSWQsIHtcbiAgICAgIGlkLFxuICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgIHZhbHVlLFxuICAgICAgY2hlY2tlZDogdGFyZ2V0LmNoZWNrZWQsXG4gICAgfSk7XG4gICAgb25WYWxpZGF0ZUZpZWxkKGN1c3RvbVZhbGlkYXRpb24sIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIHtcbiAgICAgIGNoZWNrZWQ6IHRhcmdldC5jaGVja2VkLFxuICAgICAgaWQsXG4gICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFjdGl2ZUZpZWxkLFxuICAgICAgY29ubmVjdGVkRmllbGRWYWx1ZSxcbiAgICAgIGVycm9yU3RhdGUsXG4gICAgICBmaWVsZE9iamVjdCxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGlkLFxuICAgICAgc2hvd0ZpZWxkLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgYmxvY2tUZXJtc0FncmVlbWVudEZpZWxkVmFsdWVzID0gWydEU1AnXTtcblxuICAgIGlmICghZmllbGRPYmplY3QuY2xpY2tXcmFwQ29uZmlnIHx8IChjb25uZWN0ZWRGaWVsZFZhbHVlICYmIGJsb2NrVGVybXNBZ3JlZW1lbnRGaWVsZFZhbHVlcy5pbmNsdWRlcyhjb25uZWN0ZWRGaWVsZFZhbHVlKSkgfHwgIXNob3dGaWVsZCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCB7XG4gICAgICBhY2Nlc3NJZCwgZ3JvdXBLZXksIGNsaWNrV3JhcFN0eWxlLCBzZW5kQ29uZmlybWF0aW9uRW1haWwsIHNpZ25lcklkU2VsZWN0b3IsXG4gICAgfSA9IGZpZWxkT2JqZWN0LmNsaWNrV3JhcENvbmZpZztcblxuICAgIHJldHVybiA8Q2xpY2t3cmFwQ29tcG9uZW50XG4gICAgICBhY2Nlc3NJZD17YWNjZXNzSWR9XG4gICAgICBncm91cEtleT17Z3JvdXBLZXl9XG4gICAgICBjbGlja1dyYXBTdHlsZT17Y2xpY2tXcmFwU3R5bGV9XG4gICAgICBzZW5kQ29uZmlybWF0aW9uRW1haWw9e3NlbmRDb25maXJtYXRpb25FbWFpbH1cbiAgICAgIHNpZ25lcklkU2VsZWN0b3I9e3NpZ25lcklkU2VsZWN0b3J9XG4gICAgICBhY3RpdmVGaWVsZD17YWN0aXZlRmllbGR9XG4gICAgICBmb3JtSWQ9e2Zvcm1JZH1cbiAgICAgIGhhbmRsZUNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICBlcnJvclN0YXRlPXtlcnJvclN0YXRlfVxuICAgICAgaWQ9e2lkfVxuICAgIC8+O1xuICB9XG59XG5cbmNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IChkaXNwYXRjaDogRGlzcGF0Y2gpID0+ICh7XG4gIG9uQ2FwdHVyZUlucHV0OiAoXG4gICAgZm9ybUlkOiBzdHJpbmcsXG4gICAgaW5wdXRUYXJnZXQ6IElucHV0VGFyZ2V0LFxuICApID0+IGRpc3BhdGNoKGNhcHR1cmVJbnB1dChkaXNwYXRjaCwgZm9ybUlkLCBpbnB1dFRhcmdldCkpLFxuICBvblZhbGlkYXRlRmllbGQ6IChcbiAgICBjdXN0b21WYWxpZGF0aW9uPzogUmVnRXhwLFxuICAgIGZvcm1JZDogc3RyaW5nLFxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gICAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG4gICAgdGFyZ2V0OiBJbnB1dFRhcmdldCxcbiAgKSA9PiB2YWxpZGF0ZUZpZWxkKGRpc3BhdGNoLCBjdXN0b21WYWxpZGF0aW9uLCBmb3JtSWQsIGlzUmVxdWlyZWQsIHJlcXVpcmVkRmllbGRzLCB0YXJnZXQpLFxufSk7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IChzdGF0ZTogU3RhdGUsXG4gIG93blByb3BzOiB7IFxuICAgIGZvcm1JZDogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZmllbGRPYmplY3Q6IHtcbiAgICAgIGNvbm5lY3RlZEZpZWxkPzogc3RyaW5nLFxuICAgICAgY2xpY2tXcmFwQ29uZmlnPzoge1xuICAgICAgICBhY2Nlc3NJZDogc3RyaW5nLFxuICAgICAgICBjbGlja1dyYXBTdHlsZTogc3RyaW5nLFxuICAgICAgICBzZW5kQ29uZmlybWF0aW9uRW1haWw6IGJvb2xlYW4sXG4gICAgICAgIGdyb3VwS2V5OiBzdHJpbmcsXG4gICAgICAgIHNpZ25lcklkU2VsZWN0b3I6IHN0cmluZyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSkgPT4ge1xuICBjb25zdCB7IGZvcm1JZCwgaWQsIGZpZWxkT2JqZWN0IH0gPSBvd25Qcm9wcztcbiAgY29uc3QgZmllbGRzID0gc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkc1tmb3JtSWRdO1xuICByZXR1cm4ge1xuICAgIGFjdGl2ZUZpZWxkOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGaWVsZHNbZm9ybUlkXSxcbiAgICBjb25uZWN0ZWRGaWVsZFZhbHVlOiAoZmllbGRPYmplY3QuY29ubmVjdGVkRmllbGQgJiYgY2hlY2tJZkZpZWxkSXNTZXQoZmllbGRzLCBmaWVsZE9iamVjdC5jb25uZWN0ZWRGaWVsZCkpID8gZmllbGRzLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLmlkID09PSBmaWVsZE9iamVjdC5jb25uZWN0ZWRGaWVsZClbMF0udmFsdWUgOiBudWxsLFxuICAgIGVycm9yU3RhdGU6IGNoZWNrSWZIYXNFcnJvcihpZCwgc3RhdGUuZm9ybXMuaGFzRXJyb3JbZm9ybUlkXSksXG4gICAgZmllbGRzLFxuICAgIGlzUmVxdWlyZWQ6IHN0YXRlLmZvcm1zLnJlcXVpcmVkRmllbGRzW2Zvcm1JZF0gPyBzdGF0ZS5mb3Jtcy5yZXF1aXJlZEZpZWxkc1tmb3JtSWRdLmluY2x1ZGVzKGlkKSA6IGZhbHNlLFxuICAgIGlzU2V0OiBjaGVja0lmRmllbGRJc1NldChmaWVsZHMsIGlkKSxcbiAgICByZXF1aXJlZEZpZWxkczogc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXSxcbiAgICBzaG93RmllbGQ6IGZpZWxkT2JqZWN0LmNvbm5lY3RlZEZpZWxkID8gY2hlY2tJZkZpZWxkSXNTZXQoZmllbGRzLCBmaWVsZE9iamVjdC5jb25uZWN0ZWRGaWVsZCkgOiB0cnVlLFxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShDbGlja3dyYXApO1xuIiwiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuXG4vLyBDb250YWluZXJzXG5pbXBvcnQgQ2hlY2tCb3ggZnJvbSAnLi9maWVsZHMvY2hlY2tib3gnO1xuaW1wb3J0IFJhZGlvIGZyb20gJy4vZmllbGRzL3JhZGlvJztcbmltcG9ydCBEYXRlVGltZVBpY2tlciBmcm9tICcuL2ZpZWxkcy9kYXRlJztcbmltcG9ydCBIaWRkZW5JbnB1dCBmcm9tICcuL2ZpZWxkcy9oaWRkZW4nO1xuaW1wb3J0IElucHV0TXVsdGlTZWxlY3QgZnJvbSAnLi9maWVsZHMvbXVsdGktc2VsZWN0JztcbmltcG9ydCBJbnB1dFNlbGVjdCBmcm9tICcuL2ZpZWxkcy9zZWxlY3QnO1xuaW1wb3J0IElucHV0U2VsZWN0Q291bnRyeSBmcm9tICcuL2ZpZWxkcy9jb3VudHJ5JztcbmltcG9ydCBJbnB1dFRleHQgZnJvbSAnLi9maWVsZHMvdGV4dCc7XG5pbXBvcnQgSW5wdXRUZXh0YXJlYSBmcm9tICcuL2ZpZWxkcy90ZXh0YXJlYSc7XG5pbXBvcnQgSW5wdXRJbnRsUGhvbmUgZnJvbSAnLi9maWVsZHMvaW50bC1waG9uZSc7XG5pbXBvcnQgU3RhdGVTZWxlY3QgZnJvbSAnLi9maWVsZHMvc3RhdGUtc2VsZWN0JztcbmltcG9ydCBUb3NJbnB1dCBmcm9tICcuL2ZpZWxkcy90ZXJtcy1vZi1zZXJ2aWNlJztcbmltcG9ydCBDbGlja3dyYXBJbnB1dCBmcm9tICcuL2ZpZWxkcy9jbGlja3dyYXAtdGVybXMnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBTZXRKc29uRmllbGQgfSBmcm9tICcuLi9saWIvdHlwZXMvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFByb3BzIH0gZnJvbSAnLi9maWVsZHMnO1xuXG50eXBlIFByb3BzID0ge1xuICBkeW5hbWljRm9ybUZpZWxkOiBhbnksXG4gIGZvcm1JZDogc3RyaW5nLFxuICBmaWVsZDogU2V0SnNvbkZpZWxkLFxuICBpc0Rpc2FibGVkOiBzdHJpbmcsXG4gIGluZGV4OiBudW1iZXIgfCBzdHJpbmcsXG4gIGlzSW5GaWVsZFNldDogYm9vbGVhbixcbiAgaGFzRHluYW1pY0ZpZWxkOiBib29sZWFuLFxuICBwcm9wczogRmllbGRQcm9wcyxcbn1cblxuY29uc3Qgc2V0RmllbGRDb250YWluZXIgPSAoe1xuICBkeW5hbWljRm9ybUZpZWxkLCBmaWVsZCwgaW5kZXgsIGlzRGlzYWJsZWQsIGZvcm1JZCwgcHJvcHMsIGlzSW5GaWVsZFNldCA9IHRydWUsIGhhc0R5bmFtaWNGaWVsZCxcbn06IFByb3BzKTogRWxlbWVudDwqPiA9PiB7XG4gIC8vIGlmIChmaWVsZC50eXBlID09PSAnaGlkZGVuJykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHtcbiAgICBoYXNCZWVuVmFsaWRhdGVkLCBpc0xhc3RGaWVsZCwgcGFyZW50SWQsIG9uQ2FwdHVyZUlucHV0LCBvblNldEFjdGl2ZUZpZWxkLCBvblZhbGlkYXRlRmllbGQsXG4gIH0gPSBwcm9wcztcbiAgbGV0IEZpZWxkQ29tcG5lbnQgPSBudWxsO1xuICBjb25zdCBEeW5hbWljRmllbGQgPSBkeW5hbWljRm9ybUZpZWxkO1xuXG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgIHN3aXRjaCAoZmllbGQuaWQpIHtcbiAgICAgICAgY2FzZSAndGVybXNfb2Zfc2VydmljZSc6XG4gICAgICAgICAgRmllbGRDb21wbmVudCA9IDxUb3NJbnB1dFxuICAgICAgICAgICAgZmllbGRPYmplY3Q9e2ZpZWxkfVxuICAgICAgICAgICAgZm9ybUlkPXtmb3JtSWR9XG4gICAgICAgICAgICBoYXNCZWVuVmFsaWRhdGVkPXtoYXNCZWVuVmFsaWRhdGVkfVxuICAgICAgICAgICAgaGFzRHluYW1pY0ZpZWxkPXtoYXNEeW5hbWljRmllbGR9XG4gICAgICAgICAgICBpZD17ZmllbGQuaWR9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgaXNMYXN0RmllbGQ9e2lzTGFzdEZpZWxkfVxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIG9uQ2FwdHVyZUlucHV0PXtvbkNhcHR1cmVJbnB1dH1cbiAgICAgICAgICAgIG9uU2V0QWN0aXZlRmllbGQ9e29uU2V0QWN0aXZlRmllbGR9XG4gICAgICAgICAgICBvblZhbGlkYXRlRmllbGQ9e29uVmFsaWRhdGVGaWVsZH1cbiAgICAgICAgICAvPjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY2xpY2t3cmFwX3Rlcm1zX2FjY2VwdGFuY2UnOlxuICAgICAgICAgIEZpZWxkQ29tcG5lbnQgPSA8Q2xpY2t3cmFwSW5wdXRcbiAgICAgICAgICAgICAgZmllbGRPYmplY3Q9e2ZpZWxkfVxuICAgICAgICAgICAgICBmb3JtSWQ9e2Zvcm1JZH1cbiAgICAgICAgICAgICAgaGFzQmVlblZhbGlkYXRlZD17aGFzQmVlblZhbGlkYXRlZH1cbiAgICAgICAgICAgICAgaWQ9e2ZpZWxkLmlkfVxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICBvbkNhcHR1cmVJbnB1dD17b25DYXB0dXJlSW5wdXR9XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVGaWVsZD17b25WYWxpZGF0ZUZpZWxkfVxuICAgICAgICAgICAgLz47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgRmllbGRDb21wbmVudCA9IDxDaGVja0JveFxuICAgICAgICAgICAgZmllbGRPYmplY3Q9e2ZpZWxkfVxuICAgICAgICAgICAgZm9ybUlkPXtmb3JtSWR9XG4gICAgICAgICAgICBoYXNCZWVuVmFsaWRhdGVkPXtoYXNCZWVuVmFsaWRhdGVkfVxuICAgICAgICAgICAgaGFzRHluYW1pY0ZpZWxkPXtoYXNEeW5hbWljRmllbGR9XG4gICAgICAgICAgICBpZD17ZmllbGQuaWR9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgaXNSZXF1aXJlZD17ZmllbGQucmVxdWlyZWR9XG4gICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgb25DYXB0dXJlSW5wdXQ9e29uQ2FwdHVyZUlucHV0fVxuICAgICAgICAgICAgb25TZXRBY3RpdmVGaWVsZD17b25TZXRBY3RpdmVGaWVsZH1cbiAgICAgICAgICAgIG9uVmFsaWRhdGVGaWVsZD17b25WYWxpZGF0ZUZpZWxkfVxuICAgICAgICAgIC8+O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmFkaW8nOlxuICAgICAgRmllbGRDb21wbmVudCA9IDxSYWRpb1xuICAgICAgICBmaWVsZE9iamVjdD17ZmllbGR9XG4gICAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgICBoYXNCZWVuVmFsaWRhdGVkPXtoYXNCZWVuVmFsaWRhdGVkfVxuICAgICAgICBoYXNEeW5hbWljRmllbGQ9e2hhc0R5bmFtaWNGaWVsZH1cbiAgICAgICAgaWQ9e2ZpZWxkLmlkfVxuICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICBpc0luRmllbGRTZXQ9e2lzSW5GaWVsZFNldCB8fCBmYWxzZX0gLy8gZGVmYXVsdCBzaG91bGQgYmUgdHJ1ZS4gUmFkaW9zIHNob3VsZCBiZSBncm91cGVkIGFuZCB3aXRoaW4gYSBmaWVsZCBzZXRcbiAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgb25DYXB0dXJlSW5wdXQ9e29uQ2FwdHVyZUlucHV0fVxuICAgICAgICBvblNldEFjdGl2ZUZpZWxkPXtvblNldEFjdGl2ZUZpZWxkfVxuICAgICAgICBvblZhbGlkYXRlRmllbGQ9e29uVmFsaWRhdGVGaWVsZH1cbiAgICAgICAgcGFyZW50SWQ9e3BhcmVudElkfVxuICAgICAgLz47XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgc3dpdGNoIChmaWVsZC5pZCkge1xuICAgICAgICBjYXNlICdjb3VudHJ5JzpcbiAgICAgICAgICBGaWVsZENvbXBuZW50ID0gPElucHV0U2VsZWN0Q291bnRyeVxuICAgICAgICAgICAgICBmaWVsZE9iamVjdD17ZmllbGR9XG4gICAgICAgICAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgICAgICAgICBoYXNCZWVuVmFsaWRhdGVkPXtoYXNCZWVuVmFsaWRhdGVkfVxuICAgICAgICAgICAgICBpZD17ZmllbGQuaWR9XG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIG9uQ2FwdHVyZUlucHV0PXtvbkNhcHR1cmVJbnB1dH1cbiAgICAgICAgICAgICAgb25TZXRBY3RpdmVGaWVsZD17b25TZXRBY3RpdmVGaWVsZH1cbiAgICAgICAgICAgICAgb25WYWxpZGF0ZUZpZWxkPXtvblZhbGlkYXRlRmllbGR9XG4gICAgICAgICAgICAvPjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY291bnRyeV9vZl9lc3RhYmxpc2htZW50JzpcbiAgICAgICAgICBGaWVsZENvbXBuZW50ID0gPElucHV0U2VsZWN0Q291bnRyeVxuICAgICAgICAgICAgICBmaWVsZE9iamVjdD17ZmllbGR9XG4gICAgICAgICAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgICAgICAgICBoYXNCZWVuVmFsaWRhdGVkPXtoYXNCZWVuVmFsaWRhdGVkfVxuICAgICAgICAgICAgICBpZD17ZmllbGQuaWR9XG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIG9uQ2FwdHVyZUlucHV0PXtvbkNhcHR1cmVJbnB1dH1cbiAgICAgICAgICAgICAgb25TZXRBY3RpdmVGaWVsZD17b25TZXRBY3RpdmVGaWVsZH1cbiAgICAgICAgICAgICAgb25WYWxpZGF0ZUZpZWxkPXtvblZhbGlkYXRlRmllbGR9XG4gICAgICAgICAgICAvPjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmlkKSB7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBGaWVsZENvbXBuZW50ID0gPElucHV0U2VsZWN0XG4gICAgICAgICAgICAgICAgZmllbGRPYmplY3Q9e2ZpZWxkfVxuICAgICAgICAgICAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgICAgICAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ9e2hhc0JlZW5WYWxpZGF0ZWR9XG4gICAgICAgICAgICAgICAgaWQ9e2ZpZWxkLmlkfVxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBvbkNhcHR1cmVJbnB1dD17b25DYXB0dXJlSW5wdXR9XG4gICAgICAgICAgICAgICAgb25TZXRBY3RpdmVGaWVsZD17b25TZXRBY3RpdmVGaWVsZH1cbiAgICAgICAgICAgICAgICBvblZhbGlkYXRlRmllbGQ9e29uVmFsaWRhdGVGaWVsZH1cbiAgICAgICAgICAgICAgLz47XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ211bHRpLXNlbGVjdCc6IHtcbiAgICAgIHN3aXRjaCAoZmllbGQuaWQpIHtcbiAgICAgICAgZGVmYXVsdDogRmllbGRDb21wbmVudCA9IDxJbnB1dE11bHRpU2VsZWN0XG4gICAgICAgICAgICBmaWVsZE9iamVjdD17ZmllbGR9XG4gICAgICAgICAgICBmb3JtSWQ9e2Zvcm1JZH1cbiAgICAgICAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ9e2hhc0JlZW5WYWxpZGF0ZWR9XG4gICAgICAgICAgICBpZD17ZmllbGQuaWR9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIG9uQ2FwdHVyZUlucHV0PXtvbkNhcHR1cmVJbnB1dH1cbiAgICAgICAgICAgIG9uU2V0QWN0aXZlRmllbGQ9e29uU2V0QWN0aXZlRmllbGR9XG4gICAgICAgICAgICBvblZhbGlkYXRlRmllbGQ9e29uVmFsaWRhdGVGaWVsZH1cbiAgICAgICAgICAvPjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICdzZWxlY3Qtc3RhdGUnOlxuICAgICAgRmllbGRDb21wbmVudCA9IDxTdGF0ZVNlbGVjdFxuICAgICAgICBmaWVsZE9iamVjdD17ZmllbGR9XG4gICAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgICBoYXNCZWVuVmFsaWRhdGVkPXtoYXNCZWVuVmFsaWRhdGVkfVxuICAgICAgICBpZD17ZmllbGQuaWR9XG4gICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgIG9uQ2FwdHVyZUlucHV0PXtvbkNhcHR1cmVJbnB1dH1cbiAgICAgICAgb25TZXRBY3RpdmVGaWVsZD17b25TZXRBY3RpdmVGaWVsZH1cbiAgICAgICAgb25WYWxpZGF0ZUZpZWxkPXtvblZhbGlkYXRlRmllbGR9XG4gICAgICAvPjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIEZpZWxkQ29tcG5lbnQgPSA8SW5wdXRUZXh0YXJlYVxuICAgICAgICBmaWVsZE9iamVjdD17ZmllbGR9XG4gICAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgICBpZD17ZmllbGQuaWR9XG4gICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgIGlzTGFzdEZpZWxkPXtpc0xhc3RGaWVsZH1cbiAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgb25DYXB0dXJlSW5wdXQ9e29uQ2FwdHVyZUlucHV0fVxuICAgICAgICBvblNldEFjdGl2ZUZpZWxkPXtvblNldEFjdGl2ZUZpZWxkfVxuICAgICAgICBvblZhbGlkYXRlRmllbGQ9e29uVmFsaWRhdGVGaWVsZH1cbiAgICAgICAgaGFzQmVlblZhbGlkYXRlZD17aGFzQmVlblZhbGlkYXRlZH1cbiAgICAgIC8+O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN3aXRjaCAoZmllbGQuaWQpIHtcbiAgICAgICAgY2FzZSAnYXBwb2ludG1lbnRfZGF0ZXRpbWUnOlxuICAgICAgICAgIEZpZWxkQ29tcG5lbnQgPSA8RGF0ZVRpbWVQaWNrZXJcbiAgICAgICAgICAgIGZpZWxkT2JqZWN0PXtmaWVsZH1cbiAgICAgICAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgICAgICAgaGFzQmVlblZhbGlkYXRlZD17aGFzQmVlblZhbGlkYXRlZH1cbiAgICAgICAgICAgIGlkPXtmaWVsZC5pZH1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICBpc0xhc3RGaWVsZD17aXNMYXN0RmllbGR9XG4gICAgICAgICAgICBpc1JlcXVpcmVkPXtmaWVsZC5yZXF1aXJlZH1cbiAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICBvbkNhcHR1cmVJbnB1dD17b25DYXB0dXJlSW5wdXR9XG4gICAgICAgICAgICBvblNldEFjdGl2ZUZpZWxkPXtvblNldEFjdGl2ZUZpZWxkfVxuICAgICAgICAgICAgb25WYWxpZGF0ZUZpZWxkPXtvblZhbGlkYXRlRmllbGR9XG4gICAgICAgICAgLz47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bob25lJzpcbiAgICAgICAgICBGaWVsZENvbXBuZW50ID0gPElucHV0SW50bFBob25lXG4gICAgICAgICAgICBmaWVsZE9iamVjdD17ZmllbGR9XG4gICAgICAgICAgICBmb3JtSWQ9e2Zvcm1JZH1cbiAgICAgICAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ9e2hhc0JlZW5WYWxpZGF0ZWR9XG4gICAgICAgICAgICBpZD17ZmllbGQuaWR9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgaXNMYXN0RmllbGQ9e2lzTGFzdEZpZWxkfVxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIG9uQ2FwdHVyZUlucHV0PXtvbkNhcHR1cmVJbnB1dH1cbiAgICAgICAgICAgIG9uU2V0QWN0aXZlRmllbGQ9e29uU2V0QWN0aXZlRmllbGR9XG4gICAgICAgICAgLz47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdoaWRkZW4nOlxuICAgICAgICAgICAgICBGaWVsZENvbXBuZW50ID0gPEhpZGRlbklucHV0XG4gICAgICAgICAgICAgICAgZmllbGRPYmplY3Q9e2ZpZWxkfVxuICAgICAgICAgICAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgICAgICAgICAgIGlkPXtmaWVsZC5pZH1cbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgIGlzTGFzdEZpZWxkPXtpc0xhc3RGaWVsZH1cbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgIG9uQ2FwdHVyZUlucHV0PXtvbkNhcHR1cmVJbnB1dH1cbiAgICAgICAgICAgICAgICBvblNldEFjdGl2ZUZpZWxkPXtvblNldEFjdGl2ZUZpZWxkfVxuICAgICAgICAgICAgICAgIG9uVmFsaWRhdGVGaWVsZD17b25WYWxpZGF0ZUZpZWxkfVxuICAgICAgICAgICAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ9e2hhc0JlZW5WYWxpZGF0ZWR9XG4gICAgICAgICAgICAgIC8+O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIEZpZWxkQ29tcG5lbnQgPSA8SW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgZmllbGRPYmplY3Q9e2ZpZWxkfVxuICAgICAgICAgICAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgICAgICAgICAgIGlkPXtmaWVsZC5pZH1cbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgIGlzTGFzdEZpZWxkPXtpc0xhc3RGaWVsZH1cbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgIG9uQ2FwdHVyZUlucHV0PXtvbkNhcHR1cmVJbnB1dH1cbiAgICAgICAgICAgICAgICBvblNldEFjdGl2ZUZpZWxkPXtvblNldEFjdGl2ZUZpZWxkfVxuICAgICAgICAgICAgICAgIG9uVmFsaWRhdGVGaWVsZD17b25WYWxpZGF0ZUZpZWxkfVxuICAgICAgICAgICAgICAgIGhhc0JlZW5WYWxpZGF0ZWQ9e2hhc0JlZW5WYWxpZGF0ZWR9XG4gICAgICAgICAgICAgIC8+O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiA8RnJhZ21lbnQga2V5PXtgJHtpbmRleH0tJHtmaWVsZC5pZH1gfSA+e1xuICAgIEZpZWxkQ29tcG5lbnRcbiAgfXtcbiAgICBoYXNEeW5hbWljRmllbGQgJiYgZHluYW1pY0Zvcm1GaWVsZCAmJiA8RHluYW1pY0ZpZWxkIHBhcmVudElkPXtmaWVsZC5pZH0gZm9ybUlkPXtmb3JtSWR9IC8+XG4gIH1cbiAgPC9GcmFnbWVudD47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZXRGaWVsZENvbnRhaW5lcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBzZXRGaWVsZHMgZnJvbSAnLi4vY29udGFpbmVycy9zZXRGaWVsZHMnO1xuaW1wb3J0IHsgR2RwckZpZWxkIH0gZnJvbSAnLi4vc3R5bGVkL2Zvcm0nO1xuaW1wb3J0IHsgZ2V0TG9jYWxlU3RyaW5nVGV4dCB9IGZyb20gJy4uL2hlbHBlcnMvbGFuZ3VhZ2UnO1xuXG4vLyBTdHlsZXNcbmltcG9ydCB7IEZpZWxkUm93LCBGaWVsZHNldCwgRmllbGREaXNjbGFpbWVyVGV4dCB9IGZyb20gJy4uL3N0eWxlZC9mb3JtJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgSnNvbkZpZWxkcyB9IGZyb20gJy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5cbi8vIFVzZSBnZXRGaWVsZHMgdG8gYWxsb3cgY2hlY2sgZm9yIGFycmF5IHR5cGUgdG8gaXRlcmF0ZS5cbmV4cG9ydCBjb25zdCBnZXRGaWVsZHMgPSAoZHluYW1pY0Zvcm1GaWVsZDogYW55LCBmaWVsZHNBcnJheTogSnNvbkZpZWxkcywgZm9ybUlkOiBzdHJpbmcsIGhhc0R5bmFtaWNGaWVsZDogYm9vbGVhbiwgaXNEaXNhYmxlZDogc3RyaW5nLCBwcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgbG9jYWxlOiBzdHJpbmcpOiBBcnJheTxFbGVtZW50PCo+PiB8IEVsZW1lbnQ8Kj4gfCBudWxsID0+IHtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGRzQXJyYXkpKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gZmllbGRzQXJyYXkubWFwKChmLCBpKSA9PiB7XG4gICAgaWYgKGYudHlwZSA9PT0gJ2ZpZWxkc2V0Jykge1xuICAgICAgY29uc3Qge1xuICAgICAgICBkZXNjcmlwdGlvbiwgZmllbGRTZXQsIHJlcXVpcmVkLCB0aXRsZSwgdGl0bGVUYWcsIGZpZWxkRGlzY2xhaW1lcixcbiAgICAgIH0gPSBmO1xuXG4gICAgICBjb25zdCBGaWVsZERpc2NsYWltZXIgPSAoeyBmaWVsZERpc2NsYWltZXIgfSkgPT4ge1xuICAgICAgICBpZiAoZm9ybUlkICE9PSAnUEFSVE5FUlNJR05VUE5FVycpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIWZpZWxkRGlzY2xhaW1lcikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgeyBtZXNzYWdlLCBoeXBlcmxpbmsgfSA9IGZpZWxkRGlzY2xhaW1lcjtcblxuICAgICAgICBpZiAoIW1lc3NhZ2UpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHJlbmRlck1lc3NhZ2VXaXRoTGluayA9IChtZXNzYWdlLCBoeXBlcmxpbmspID0+IHtcbiAgICAgICAgICBpZiAoaHlwZXJsaW5rICYmIGh5cGVybGluay51cmwgJiYgaHlwZXJsaW5rLnRleHRUb0xpbmspIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdXJsLCB0ZXh0VG9MaW5rIH0gPSBoeXBlcmxpbms7XG4gICAgICBcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gbWVzc2FnZS5zcGxpdCh0ZXh0VG9MaW5rKTtcbiAgICAgICAgICAgIC8vIElmIG5vIHRleHRUb0xpbmsgZm91bmQsIHJldHVybiBtZXNzYWdlIGFzIGlzXG4gICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAxKSByZXR1cm4gZ2V0TG9jYWxlU3RyaW5nVGV4dChtZXNzYWdlLCBsb2NhbGUpO1xuICAgICAgXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICB7Z2V0TG9jYWxlU3RyaW5nVGV4dChwYXJ0c1swXSwgbG9jYWxlKX17LyogUGFydCBiZWZvcmUgbGluayAqL31cbiAgICAgICAgICAgICAgICA8YSBocmVmPXt1cmx9IHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5cbiAgICAgICAgICAgICAgICAgIHtnZXRMb2NhbGVTdHJpbmdUZXh0KHRleHRUb0xpbmssIGxvY2FsZSl9XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIHtnZXRMb2NhbGVTdHJpbmdUZXh0KHBhcnRzLnNsaWNlKDEpLmpvaW4oJycpLCBsb2NhbGUpfXsvKiBQYXJ0IGFmdGVyIGxpbmsgKi99XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIElmIG5vIGh5cGVybGluaywganVzdCByZXR1cm4gdGhlIG1lc3NhZ2VcbiAgICAgICAgICByZXR1cm4gZ2V0TG9jYWxlU3RyaW5nVGV4dChtZXNzYWdlLCBsb2NhbGUpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIDxGaWVsZERpc2NsYWltZXJUZXh0PntyZW5kZXJNZXNzYWdlV2l0aExpbmsobWVzc2FnZSwgaHlwZXJsaW5rKX08L0ZpZWxkRGlzY2xhaW1lclRleHQ+O1xuICAgICAgfTtcblxuICAgICAgLy8gQ2FuIG5vdCBtb3ZlIHRvIG93biBjb21wb25lbnQuIERvaW5nIHNvIHdpbGwgZW5kIHVwIGJ1aWxkaW5nIGEgbGlmZSBjeWNsZSBkZXBlbmRlbmN5LlxuICAgICAgLy8gVGhpcyBpcyB0aGUgb3B0aW1hbCBwbGFjZSBhdCB0aGlzIHRpbWUuXG4gICAgICBjb25zdCBFbGVtZW50VGFnID0gdGl0bGVUYWcgfHwgbnVsbDtcbiAgICAgIHJldHVybiA8UmVhY3QuRnJhZ21lbnQga2V5PXtpfT5cbiAgICAgICAgPEZpZWxkc2V0IGtleT17aX0+XG4gICAgICAgIHt0aXRsZSAmJiAhRWxlbWVudFRhZyAmJiA8aDMgY2xhc3NOYW1lPSd0aXRsZSc+e3RpdGxlfSB7cmVxdWlyZWQgJiYgPHNwYW4gY2xhc3NOYW1lPSdyZXF1aXJlZCc+Kjwvc3Bhbj59PC9oMz59XG4gICAgICAgIHt0aXRsZSAmJiBFbGVtZW50VGFnICYmIDxFbGVtZW50VGFnIGNsYXNzTmFtZT0nZWxlbWVudFRhZyc+e3RpdGxlfTwvRWxlbWVudFRhZz59XG4gICAgICAgICAge2Rlc2NyaXB0aW9uICYmIDxwIGNsYXNzTmFtZT0nZGVzYyc+e2Rlc2NyaXB0aW9ufTwvcD59XG4gICAgICAgICAgPGZpZWxkc2V0IGtleT17aX0gaWQ9e2YuaWR9PlxuICAgICAgICAgICAge2ZpZWxkU2V0Lm1hcCgoZnMsIGluZGV4KSA9PiBzZXRGaWVsZHMoe1xuICAgICAgICAgICAgICAgIGR5bmFtaWNGb3JtRmllbGQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZmllbGQ6IHtcbiAgICAgICAgICAgICAgICAgIC4uLmZzLFxuICAgICAgICAgICAgICAgICAgaWQ6IGYuaWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbmRleDogcGFyc2VJbnQoYCR7aX0ke2luZGV4fWAsIDEwKSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICAgICAgICAgIGZvcm1JZCxcbiAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICBpc0luRmllbGRTZXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFzRHluYW1pY0ZpZWxkOiBmLmhhc0R5bmFtaWNGaWVsZCB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgfSkpfVxuICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDwvRmllbGRzZXQ+XG4gICAgICAgIDxGaWVsZERpc2NsYWltZXIgZmllbGREaXNjbGFpbWVyPXtmaWVsZERpc2NsYWltZXJ9IC8+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PjtcbiAgICB9XG5cbiAgICAvLyBJZiBjb2x1bW4gaXMgc2V0IGFuZCBpcyB0cnVlIGl0ZXJhdGUgYmFjayB0aHJvdWdoIHRoZSBmb3VuZCBmaWVsZHNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmKSkge1xuICAgICAgcmV0dXJuIDxGaWVsZFJvdyBrZXk9e2l9IGNsYXNzTmFtZT0nY29sdW1uLXZpZXcnPlxuICAgICAgICB7IGdldEZpZWxkcyhkeW5hbWljRm9ybUZpZWxkLCBbLi4uZl0sIGZvcm1JZCwgaGFzRHluYW1pY0ZpZWxkLCBpc0Rpc2FibGVkLCBwcm9wcywgbG9jYWxlKSB9XG4gICAgICA8L0ZpZWxkUm93PjtcbiAgICB9XG5cbiAgICAvLyBTZXQgZmllbGRcbiAgICByZXR1cm4gc2V0RmllbGRzKHtcbiAgICAgIGR5bmFtaWNGb3JtRmllbGQsXG4gICAgICBmaWVsZDogZixcbiAgICAgIGlzRGlzYWJsZWQsXG4gICAgICBpbmRleDogaSxcbiAgICAgIGZvcm1JZCxcbiAgICAgIHByb3BzLFxuICAgICAgaXNJbkZpZWxkU2V0OiBmYWxzZSxcbiAgICAgIGhhc0R5bmFtaWNGaWVsZCxcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBnZXRGaWVsZHM7XG5cbi8vIEBmbG93XG5cbi8vIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG4vLyBpbXBvcnQgdHlwZSB7IEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5cbi8vIGltcG9ydCBzZXRGaWVsZHMgZnJvbSAnLi4vY29udGFpbmVycy9zZXRGaWVsZHMnO1xuLy8gaW1wb3J0IHsgR2RwckZpZWxkIH0gZnJvbSAnLi4vc3R5bGVkL2Zvcm0nO1xuLy8gaW1wb3J0IHsgZ2V0TG9jYWxlU3RyaW5nVGV4dCB9IGZyb20gJy4uL2hlbHBlcnMvbGFuZ3VhZ2UnO1xuXG4vLyAvLyBTdHlsZXNcbi8vIGltcG9ydCB7IEZpZWxkUm93LCBGaWVsZHNldCwgRmllbGREaXNjbGFpbWVyVGV4dCB9IGZyb20gJy4uL3N0eWxlZC9mb3JtJztcblxuLy8gLy8gVHlwZXNcbi8vIGltcG9ydCB0eXBlIHsgSnNvbkZpZWxkcyB9IGZyb20gJy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5cbi8vIC8vIFVzZSBnZXRGaWVsZHMgdG8gYWxsb3cgY2hlY2sgZm9yIGFycmF5IHR5cGUgdG8gaXRlcmF0ZS5cbi8vIGV4cG9ydCBjb25zdCBnZXRGaWVsZHMgPSAoZHluYW1pY0Zvcm1GaWVsZDogYW55LCBmaWVsZHNBcnJheTogSnNvbkZpZWxkcywgZm9ybUlkOiBzdHJpbmcsIGhhc0R5bmFtaWNGaWVsZDogYm9vbGVhbiwgaXNEaXNhYmxlZDogc3RyaW5nLCBwcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgbG9jYWxlOiBzdHJpbmcpOiBBcnJheTxFbGVtZW50PCo+PiB8IEVsZW1lbnQ8Kj4gfCBudWxsID0+IHtcblxuLy8gICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGRzQXJyYXkpKSByZXR1cm4gbnVsbDtcblxuLy8gICByZXR1cm4gZmllbGRzQXJyYXkubWFwKChmLCBpKSA9PiB7XG4vLyAgICAgaWYgKGYudHlwZSA9PT0gJ2ZpZWxkc2V0Jykge1xuLy8gICAgICAgY29uc3Qge1xuLy8gICAgICAgICBkZXNjcmlwdGlvbiwgZmllbGRTZXQsIHJlcXVpcmVkLCB0aXRsZSwgdGl0bGVUYWcsIGZpZWxkRGlzY2xhaW1lcixcbi8vICAgICAgIH0gPSBmO1xuXG4vLyAgICAgICBjb25zdCBGaWVsZERpc2NsYWltZXIgPSAoeyBmaWVsZERpc2NsYWltZXIgfSkgPT4ge1xuLy8gICAgICAgICBpZiAoZm9ybUlkICE9PSAnUEFSVE5FUlNJR05VUE5FVycpIHJldHVybiBudWxsO1xuLy8gICAgICAgICBpZiAoIWZpZWxkRGlzY2xhaW1lcikgcmV0dXJuIG51bGw7XG5cbi8vICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCBoeXBlcmxpbmsgfSA9IGZpZWxkRGlzY2xhaW1lcjtcblxuLy8gICAgICAgICBpZiAoIW1lc3NhZ2UpIHJldHVybiBudWxsO1xuXG4vLyAgICAgICAgIGNvbnN0IHJlbmRlck1lc3NhZ2VXaXRoTGluayA9IChtZXNzYWdlLCBoeXBlcmxpbmspID0+IHtcbi8vICAgICAgICAgICBpZiAoaHlwZXJsaW5rICYmIGh5cGVybGluay51cmwgJiYgaHlwZXJsaW5rLnRleHRUb0xpbmspIHtcbi8vICAgICAgICAgICAgIGNvbnN0IHsgdXJsLCB0ZXh0VG9MaW5rIH0gPSBoeXBlcmxpbms7XG4gICAgICBcbi8vICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gbWVzc2FnZS5zcGxpdCh0ZXh0VG9MaW5rKTtcbi8vICAgICAgICAgICAgIC8vIElmIG5vIHRleHRUb0xpbmsgZm91bmQsIHJldHVybiBtZXNzYWdlIGFzIGlzXG4vLyAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAxKSByZXR1cm4gZ2V0TG9jYWxlU3RyaW5nVGV4dChtZXNzYWdlLCBsb2NhbGUpO1xuICAgICAgXG4vLyAgICAgICAgICAgICByZXR1cm4gKFxuLy8gICAgICAgICAgICAgICA8c3Bhbj5cbi8vICAgICAgICAgICAgICAgICB7Z2V0TG9jYWxlU3RyaW5nVGV4dChwYXJ0c1swXSwgbG9jYWxlKX17LyogUGFydCBiZWZvcmUgbGluayAqL31cbi8vICAgICAgICAgICAgICAgICA8YSBocmVmPXt1cmx9IHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5cbi8vICAgICAgICAgICAgICAgICAgIHtnZXRMb2NhbGVTdHJpbmdUZXh0KHRleHRUb0xpbmssIGxvY2FsZSl9XG4vLyAgICAgICAgICAgICAgICAgPC9hPlxuLy8gICAgICAgICAgICAgICAgIHtnZXRMb2NhbGVTdHJpbmdUZXh0KHBhcnRzLnNsaWNlKDEpLmpvaW4oJycpLCBsb2NhbGUpfXsvKiBQYXJ0IGFmdGVyIGxpbmsgKi99XG4vLyAgICAgICAgICAgICAgIDwvc3Bhbj5cbi8vICAgICAgICAgICAgICk7XG4vLyAgICAgICAgICAgfVxuLy8gICAgICAgICAgIC8vIElmIG5vIGh5cGVybGluaywganVzdCByZXR1cm4gdGhlIG1lc3NhZ2Vcbi8vICAgICAgICAgICByZXR1cm4gZ2V0TG9jYWxlU3RyaW5nVGV4dChtZXNzYWdlLCBsb2NhbGUpO1xuLy8gICAgICAgICB9O1xuICAgICAgICBcbi8vICAgICAgICAgcmV0dXJuIDxGaWVsZERpc2NsYWltZXJUZXh0PntyZW5kZXJNZXNzYWdlV2l0aExpbmsobWVzc2FnZSwgaHlwZXJsaW5rKX08L0ZpZWxkRGlzY2xhaW1lclRleHQ+O1xuLy8gICAgICAgfTtcblxuLy8gICAgICAgLy8gQ2FuIG5vdCBtb3ZlIHRvIG93biBjb21wb25lbnQuIERvaW5nIHNvIHdpbGwgZW5kIHVwIGJ1aWxkaW5nIGEgbGlmZSBjeWNsZSBkZXBlbmRlbmN5LlxuLy8gICAgICAgLy8gVGhpcyBpcyB0aGUgb3B0aW1hbCBwbGFjZSBhdCB0aGlzIHRpbWUuXG4vLyAgICAgICBjb25zdCBFbGVtZW50VGFnID0gdGl0bGVUYWcgfHwgbnVsbDtcbi8vICAgICAgIHJldHVybiA8UmVhY3QuRnJhZ21lbnQga2V5PXtpfT5cbi8vICAgICAgICAgPEZpZWxkc2V0IGtleT17aX0+XG4vLyAgICAgICAgIHt0aXRsZSAmJiAhRWxlbWVudFRhZyAmJiA8aDMgY2xhc3NOYW1lPSd0aXRsZSc+e3RpdGxlfSB7cmVxdWlyZWQgJiYgPHNwYW4gY2xhc3NOYW1lPSdyZXF1aXJlZCc+Kjwvc3Bhbj59PC9oMz59XG4vLyAgICAgICAgIHt0aXRsZSAmJiBFbGVtZW50VGFnICYmIDxFbGVtZW50VGFnIGNsYXNzTmFtZT0nZWxlbWVudFRhZyc+e3RpdGxlfTwvRWxlbWVudFRhZz59XG4vLyAgICAgICAgICAge2Rlc2NyaXB0aW9uICYmIDxwIGNsYXNzTmFtZT0nZGVzYyc+e2Rlc2NyaXB0aW9ufTwvcD59XG4vLyAgICAgICAgICAgPGZpZWxkc2V0IGtleT17aX0gaWQ9e2YuaWR9PlxuLy8gICAgICAgICAgICAge2ZpZWxkU2V0Lm1hcCgoZnMsIGluZGV4KSA9PiBzZXRGaWVsZHMoe1xuLy8gICAgICAgICAgICAgICAgIGR5bmFtaWNGb3JtRmllbGQ6IG51bGwsXG4vLyAgICAgICAgICAgICAgICAgZmllbGQ6IHtcbi8vICAgICAgICAgICAgICAgICAgIC4uLmZzLFxuLy8gICAgICAgICAgICAgICAgICAgaWQ6IGYuaWQsXG4vLyAgICAgICAgICAgICAgICAgfSxcbi8vICAgICAgICAgICAgICAgICBpbmRleDogcGFyc2VJbnQoYCR7aX0ke2luZGV4fWAsIDEwKSxcbi8vICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkLFxuLy8gICAgICAgICAgICAgICAgIGZvcm1JZCxcbi8vICAgICAgICAgICAgICAgICBwcm9wcyxcbi8vICAgICAgICAgICAgICAgICBpc0luRmllbGRTZXQ6IHRydWUsXG4vLyAgICAgICAgICAgICAgICAgaGFzRHluYW1pY0ZpZWxkOiBmLmhhc0R5bmFtaWNGaWVsZCB8fCBmYWxzZSxcbi8vICAgICAgICAgICAgICAgfSkpfVxuLy8gICAgICAgICAgIDwvZmllbGRzZXQ+XG4vLyAgICAgICAgIDwvRmllbGRzZXQ+XG4vLyAgICAgICAgIDxGaWVsZERpc2NsYWltZXIgZmllbGREaXNjbGFpbWVyPXtmaWVsZERpc2NsYWltZXJ9IC8+XG4vLyAgICAgICA8L1JlYWN0LkZyYWdtZW50Pjtcbi8vICAgICB9XG5cbi8vICAgICAvLyBJZiBjb2x1bW4gaXMgc2V0IGFuZCBpcyB0cnVlIGl0ZXJhdGUgYmFjayB0aHJvdWdoIHRoZSBmb3VuZCBmaWVsZHNcbi8vICAgICBpZiAoQXJyYXkuaXNBcnJheShmKSkge1xuLy8gICAgICAgcmV0dXJuIDxGaWVsZFJvdyBrZXk9e2l9IGNsYXNzTmFtZT0nY29sdW1uLXZpZXcnPlxuLy8gICAgICAgICB7IGdldEZpZWxkcyhkeW5hbWljRm9ybUZpZWxkLCBbLi4uZl0sIGZvcm1JZCwgaGFzRHluYW1pY0ZpZWxkLCBpc0Rpc2FibGVkLCBwcm9wcywgbG9jYWxlKSB9XG4vLyAgICAgICA8L0ZpZWxkUm93Pjtcbi8vICAgICB9XG5cbi8vICAgICAvLyBTZXQgZmllbGRcbi8vICAgICByZXR1cm4gc2V0RmllbGRzKHtcbi8vICAgICAgIGR5bmFtaWNGb3JtRmllbGQsXG4vLyAgICAgICBmaWVsZDogZixcbi8vICAgICAgIGlzRGlzYWJsZWQsXG4vLyAgICAgICBpbmRleDogaSxcbi8vICAgICAgIGZvcm1JZCxcbi8vICAgICAgIHByb3BzLFxuLy8gICAgICAgaXNJbkZpZWxkU2V0OiBmYWxzZSxcbi8vICAgICAgIGhhc0R5bmFtaWNGaWVsZCxcbi8vICAgICB9KTtcbi8vICAgfSk7XG4vLyB9O1xuXG4vLyBleHBvcnQgZGVmYXVsdCBnZXRGaWVsZHM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuLy8gQ29udGFpbmVyc1xuaW1wb3J0IHsgZ2V0RmllbGRzIH0gZnJvbSAnLi4vLi4vaGVscGVycy9nZXQtZmllbGRzJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgdmFsaWRhdGVGaWVsZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0UmVxdWlyZWRGaWVsZHMgfSBmcm9tICcuLi8uLi9yZWR1Y2Vycy9mb3Jtcyc7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2FjdGlvbnMnO1xuaW1wb3J0IHR5cGUgeyBGb3JtQ2FwdHVyZUZpZWxkLCBTdGF0ZSB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9yZWR1Y2VyLXN0YXRlcyc7XG5pbXBvcnQgdHlwZSB7IEZvcm1BdHRyaWJ1dGVzLCBKc29uRmllbGRzIH0gZnJvbSAnLi4vLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgSW5wdXRUYXJnZXQgfSBmcm9tICcuLi8uLi9saWIvdHlwZXMnO1xuXG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBjYXB0dXJlSW5wdXQsIHNldEFjdGl2ZUZpZWxkLCBzZXRMYXN0RmllbGRWYWxpZGF0aW9uLCB0cmFja0Zvcm1BYmFuZG9uU3RhdHVzLCB1cGRhdGVEeW5hbWljUmVxdWlyZWRGaWVsZCxcbn0gZnJvbSAnLi4vLi4vbGliL2FjdGlvbnMnO1xuXG4vLyBMb2NhbCBUeXBlc1xuZXhwb3J0IHR5cGUgU3RhdGVQcm9wcyA9IHtcbiAgYWN0aXZlRmllbGQ6IHN0cmluZyB8IG51bGwsXG4gIGFjdGl2ZUZvcm1zOiBGb3JtQXR0cmlidXRlcyxcbiAgY2FwdHVyZUZpZWxkczogQXJyYXk8Rm9ybUNhcHR1cmVGaWVsZD4sXG4gIGR5bmFtaWNGb3JtRmllbGQ6IGFueSxcbiAgZHluYW1pY0ZpZWxkczogeyBba2V5OiBzdHJpbmddOiBKc29uRmllbGRzIH0sXG4gIGhhc0JlZW5WYWxpZGF0ZWQ6IEFycmF5PHN0cmluZz4sXG4gIGlzRGlzYWJsZWQ6IHN0cmluZyxcbiAgaXNMYXN0RmllbGQ6IGJvb2xlYW4gfCB7IGlkOiBzdHJpbmcsIHJxdWlyZWQ6IGJvb2xlYW4gfSxcbiAgaXNMb2FkaW5nOiBib29sZWFuLFxuICBpc0J1dHRvbkRpc2FibGVkOiBib29sZWFuLFxuICBsb2NhbGU6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyxcbn1cblxudHlwZSBEaXNwYXRjaFByb3BzID0ge1xuICBvbkNhcHR1cmVJbnB1dDogKGZvcm1JZDogc3RyaW5nLCB0YXJnZXQ6IElucHV0VGFyZ2V0KSA9PiB2b2lkLFxuICBvblNldEFjdGl2ZUZpZWxkOiAoZm9ybUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+IHZvaWQsXG4gIG9uU2V0TGFzdEZpZWxkOiAoZm9ybUlkOiBzdHJpbmcsIGZpZWxkczogSnNvbkZpZWxkcykgPT4gdm9pZCxcbiAgb25UcmFja0FiYW5kb25TdGF0dXM6IChmb3JtSWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgb25VcGRhdGVEeW5hbWljUmVxdWlyZWRGaWVsZDogKGZvcm1JZDogc3RyaW5nLCBhZGQ6IEFycmF5PHN0cmluZz4sIHJlbW92ZTogQXJyYXk8c3RyaW5nPikgPT4gdm9pZCxcbiAgb25WYWxpZGF0ZUZpZWxkOiAoXG4gICAgY3VzdG9tVmFsaWRhdGlvbj86IFJlZ0V4cCxcbiAgICBmb3JtSWQ6IHN0cmluZyxcbiAgICBpc1JlcXVpcmVkOiBib29sZWFuLFxuICAgIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxuICAgIHRhcmdldDogSW5wdXRUYXJnZXQsXG4gICkgPT4gdm9pZCxcbn1cblxudHlwZSBEeW5hbWljRmllbGRQcm9wcyA9IFN0YXRlUHJvcHMgJiBEaXNwYXRjaFByb3BzICYge1xuICBmb3JtSWQ6IHN0cmluZyxcbiAgcGFyZW50SWQ6IHN0cmluZywgLy8gUGFyZW50IElEXG59O1xuXG5jbGFzcyBEeW5hbWljRmllbGQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8RHluYW1pY0ZpZWxkUHJvcHM+IHtcbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIGNvbnN0IHsgcHJvcHMgfSA9IHRoaXM7XG4gICAgY29uc3Qge1xuICAgICAgY2FwdHVyZUZpZWxkcywgZHluYW1pY0ZpZWxkcywgZm9ybUlkLCBwYXJlbnRJZCxcbiAgICB9ID0gcHJvcHM7XG4gICAgbGV0IHZhbHVlID0gY2FwdHVyZUZpZWxkcy5maWx0ZXIoKGYpID0+IGYuaWQgPT09IHBhcmVudElkKVswXTtcbiAgICB2YWx1ZSA9IHZhbHVlID8gdmFsdWUudmFsdWUgOiBudWxsO1xuICAgIGNvbnN0IGZpZWxkcyA9IHZhbHVlICYmIGR5bmFtaWNGaWVsZHMgJiYgZHluYW1pY0ZpZWxkc1t2YWx1ZV0gPyBkeW5hbWljRmllbGRzW3ZhbHVlXSA6IFtdO1xuICAgIGlmIChmaWVsZHMubGVuZ3RoID4gMCkgdGhpcy5wcm9wcy5vblVwZGF0ZUR5bmFtaWNSZXF1aXJlZEZpZWxkKGZvcm1JZCwgZ2V0UmVxdWlyZWRGaWVsZHMoZmllbGRzKSwgW10pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgcHJvcHMgfSA9IHRoaXM7XG4gICAgY29uc3Qge1xuICAgICAgLy8gJEZsb3dGaXhNZSAtIFRPRE86IEZpbmQgb3V0IHdoeSBmbG93IGNhbid0IHNlZSBwYXJlbnRWYWx1ZSBpbiBwcm9wIHNldHVwXG4gICAgICBkeW5hbWljRm9ybUZpZWxkLCBjYXB0dXJlRmllbGRzLCBkeW5hbWljRmllbGRzLCBoYXNEeW5hbWljRmllbGQsIGlzRGlzYWJsZWQsIGZvcm1JZCwgcGFyZW50SWQsIGxvY2FsZSxcbiAgICB9ID0gcHJvcHM7XG4gICAgbGV0IHZhbHVlID0gY2FwdHVyZUZpZWxkcy5maWx0ZXIoKGYpID0+IGYuaWQgPT09IHBhcmVudElkKVswXTtcbiAgICB2YWx1ZSA9IHZhbHVlID8gdmFsdWUudmFsdWUgOiBudWxsO1xuICAgIGNvbnN0IGZpZWxkcyA9IHZhbHVlICYmIGR5bmFtaWNGaWVsZHMgJiYgZHluYW1pY0ZpZWxkc1t2YWx1ZV0gPyBkeW5hbWljRmllbGRzW3ZhbHVlXSA6IFtdO1xuXG4gICAgaWYgKChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA8IDEpIHx8ICF0aGlzLnByb3BzLmZvcm1JZCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0RmllbGRzKGR5bmFtaWNGb3JtRmllbGQsIGZpZWxkcywgZm9ybUlkLCBoYXNEeW5hbWljRmllbGQsIGlzRGlzYWJsZWQsIHByb3BzLCBsb2NhbGUpO1xuXG4gICAgcmV0dXJuIDxkaXYgaWQ9e2BkeW5hbWljLWNvbXBvbmVudC0ke3BhcmVudElkfWB9PnsgY29tcG9uZW50cyB9PC9kaXY+O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSAoZGlzcGF0Y2g6IERpc3BhdGNoKSA9PiAoe1xuICBvblVwZGF0ZUR5bmFtaWNSZXF1aXJlZEZpZWxkOiAoZm9ybUlkOiBzdHJpbmcsIGFkZDogQXJyYXk8c3RyaW5nPiwgcmVtb3ZlOiBBcnJheTxzdHJpbmc+KSA9PiBkaXNwYXRjaCh1cGRhdGVEeW5hbWljUmVxdWlyZWRGaWVsZChmb3JtSWQsIGFkZCwgcmVtb3ZlKSksXG4gIG9uQ2FwdHVyZUlucHV0OiAoZm9ybUlkOiBzdHJpbmcsIHRhcmdldDogSW5wdXRUYXJnZXQpID0+IGRpc3BhdGNoKGNhcHR1cmVJbnB1dChkaXNwYXRjaCwgZm9ybUlkLCB0YXJnZXQpKSxcbiAgb25TZXRBY3RpdmVGaWVsZDogKGZvcm1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSA9PiB7XG4gICAgZGlzcGF0Y2goc2V0QWN0aXZlRmllbGQoZm9ybUlkLCBpZCkpO1xuICAgIGRpc3BhdGNoKHRyYWNrRm9ybUFiYW5kb25TdGF0dXMoZm9ybUlkLCBpZCkpO1xuICB9LFxuICBvblNldExhc3RGaWVsZDogKGZvcm1JZDogc3RyaW5nLCBmaWVsZHM6IEpzb25GaWVsZHMpID0+IGRpc3BhdGNoKHNldExhc3RGaWVsZFZhbGlkYXRpb24oZm9ybUlkLCBmaWVsZHMpKSxcbiAgb25WYWxpZGF0ZUZpZWxkOiAoXG4gICAgY3VzdG9tVmFsaWRhdGlvbj86IFJlZ0V4cCxcbiAgICBmb3JtSWQ6IHN0cmluZyxcbiAgICBpc1JlcXVpcmVkOiBib29sZWFuLFxuICAgIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxuICAgIHRhcmdldDogSW5wdXRUYXJnZXQsXG4gICkgPT4ge1xuICAgIHZhbGlkYXRlRmllbGQoZGlzcGF0Y2gsIGN1c3RvbVZhbGlkYXRpb24sIGZvcm1JZCwgaXNSZXF1aXJlZCwgcmVxdWlyZWRGaWVsZHMsIHRhcmdldCk7XG4gIH0sXG59KTtcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHN0YXRlOiBTdGF0ZSwgb3duUHJvcHM6IHsgZm9ybUlkOiBzdHJpbmcsIHBhcmVudElkOiBzdHJpbmcgfSkgPT4ge1xuICBjb25zdCB7IGZvcm1JZCwgcGFyZW50SWQgfSA9IG93blByb3BzO1xuXG4gIHJldHVybiB7XG4gICAgYWN0aXZlRm9ybXM6IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zLFxuICAgIGNhcHR1cmVGaWVsZHM6IHN0YXRlLmZvcm1zLmNhcHR1cmVGaWVsZHNbZm9ybUlkXSB8fCBbXSxcbiAgICBkeW5hbWljRmllbGRzOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3JtcyAmJiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uZHluYW1pY0ZpZWxkcyA/IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uZHluYW1pY0ZpZWxkc1twYXJlbnRJZF0gOiBbXSxcbiAgICBoYXNCZWVuVmFsaWRhdGVkOiBzdGF0ZS5mb3Jtcy5oYXNCZWVuVmFsaWRhdGVkW2Zvcm1JZF0sXG4gICAgaXNEaXNhYmxlZDogc3RhdGUuZm9ybXMuc3VibWlzc2lvbmxpbWl0ICYmIHN0YXRlLmZvcm1zLnN1Ym1pc3Npb25saW1pdFtmb3JtSWRdID8gJ2Rpc2FibGVkJyA6ICcnLFxuICAgIGlzTGFzdEZpZWxkOiBzdGF0ZS5mb3Jtcy5sYXN0RmllbGRbZm9ybUlkXSB8fCBmYWxzZSxcbiAgICBpc0xvYWRpbmc6IHN0YXRlLnN5c3RlbS5pc0xvYWRpbmcsXG4gICAgbG9jYWxlOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3JtcyAmJiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uY29uZmlncyAmJiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLmNvbmZpZ3MubGFuZ3VhZ2UgPyBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLmNvbmZpZ3MubGFuZ3VhZ2UgOiAnZW4nLFxuICAgIHJlcXVpcmVkRmllbGRzOiBzdGF0ZS5mb3Jtcy5yZXF1aXJlZEZpZWxkc1tmb3JtSWRdLFxuICAgIHNldEZpZWxkczogc3RhdGUuZm9ybXMuc2V0RmllbGRzW2Zvcm1JZF0sXG4gICAgdmFsaWRhdGVkRmllbGRzOiBzdGF0ZS5mb3Jtcy52YWxpZGF0ZWRGaWVsZHNbZm9ybUlkXSxcbiAgICBpc0J1dHRvbkRpc2FibGVkOiBCb29sZWFuKHN0YXRlLmZvcm1zLnZhbGlkYXRlZEZpZWxkcy5sZW5ndGggPT09IHN0YXRlLmZvcm1zLnJlcXVpcmVkRmllbGRzLmxlbmd0aCksXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShEeW5hbWljRmllbGQpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuLy8gQ29udGFpbmVyc1xuaW1wb3J0IHNldEZpZWxkcyBmcm9tICcuL3NldEZpZWxkcyc7XG5pbXBvcnQgRHluYW1pY0ZpZWxkIGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQnO1xuXG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBjYXB0dXJlSW5wdXQsIHNldEFjdGl2ZUZpZWxkLCBzZXRMYXN0RmllbGRWYWxpZGF0aW9uLCB0cmFja0Zvcm1BYmFuZG9uU3RhdHVzLFxufSBmcm9tICcuLi9saWIvYWN0aW9ucyc7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7IGlzRmllbGREaXNhYmxlZCwgdmFsaWRhdGVGaWVsZCB9IGZyb20gJy4uL2hlbHBlcnMvZm9ybXMnO1xuaW1wb3J0IHsgZGV0ZWN0T1MgfSBmcm9tICcuLi9oZWxwZXJzJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IEZvcm1DYXB0dXJlRmllbGQsIFN0YXRlIH0gZnJvbSAnLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcbmltcG9ydCB0eXBlIHsgRm9ybUF0dHJpYnV0ZXMsIEpzb25GaWVsZHMgfSBmcm9tICcuLi9saWIvdHlwZXMvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBJbnB1dFRhcmdldCB9IGZyb20gJy4uL2xpYi90eXBlcyc7XG5cbi8vIFN0eWxlc1xuaW1wb3J0IHsgRmllbGRSb3csIEZpZWxkc2V0LCBTZWN0aW9uVGl0bGUgfSBmcm9tICcuLi9zdHlsZWQvZm9ybSc7XG5cbi8vIExvY2FsIFR5cGVzXG5leHBvcnQgdHlwZSBTdGF0ZVByb3BzID0ge1xuICBhY3RpdmVGaWVsZDogc3RyaW5nIHwgbnVsbCxcbiAgYWN0aXZlRm9ybXM6IEZvcm1BdHRyaWJ1dGVzLFxuICBjYXB0dXJlRmllbGRzOiBBcnJheTxGb3JtQ2FwdHVyZUZpZWxkPixcbiAgaGFzQmVlblZhbGlkYXRlZDogQXJyYXk8c3RyaW5nPixcbiAgaXNEaXNhYmxlZDogc3RyaW5nLFxuICBpc0xhc3RGaWVsZDogYm9vbGVhbiB8IHsgaWQ6IHN0cmluZywgcnF1aXJlZDogYm9vbGVhbiB9LFxuICBpc0xvYWRpbmc6IGJvb2xlYW4sXG4gIGlzQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4sXG59XG5cbmV4cG9ydCB0eXBlIERpc3BhdGNoUHJvcHMgPSB7XG4gIG9uQ2FwdHVyZUlucHV0OiAoZm9ybUlkOiBzdHJpbmcsIHRhcmdldDogSW5wdXRUYXJnZXQpID0+IHZvaWQsXG4gIG9uU2V0QWN0aXZlRmllbGQ6IChmb3JtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgb25TZXRMYXN0RmllbGQ6IChmb3JtSWQ6IHN0cmluZywgZmllbGRzOiBKc29uRmllbGRzKSA9PiB2b2lkLFxuICBvblRyYWNrQWJhbmRvblN0YXR1czogKGZvcm1JZDogc3RyaW5nKSA9PiB2b2lkLFxuICBvblZhbGlkYXRlRmllbGQ6IChcbiAgICBjdXN0b21WYWxpZGF0aW9uPzogUmVnRXhwLFxuICAgIGZvcm1JZDogc3RyaW5nLFxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gICAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG4gICAgdGFyZ2V0OiBJbnB1dFRhcmdldCxcbiAgKSA9PiB2b2lkLFxufVxuXG5leHBvcnQgdHlwZSBGaWVsZFByb3BzID0gRGlzcGF0Y2hQcm9wcyAmIFN0YXRlUHJvcHMgJiB7XG4gIGZvcm1JZDogc3RyaW5nLFxuICBoYXNEeW5hbWljRmllbGQ6IGJvb2xlYW4sXG4gIHBhcmVudElkOiBzdHJpbmcsXG59O1xuXG5jbGFzcyBTZXRGb3JtRmllbGRzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PEZpZWxkUHJvcHM+IHtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBmb3JtSWQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKHRoaXMucHJvcHMuYWN0aXZlRm9ybXNbZm9ybUlkXSkge1xuICAgICAgY29uc3QgeyBmaWVsZHMgfSA9IHRoaXMucHJvcHMuYWN0aXZlRm9ybXNbZm9ybUlkXTtcbiAgICAgIGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHRoaXMucHJvcHMub25TZXRMYXN0RmllbGQoZm9ybUlkLCBmaWVsZHMpO1xuICAgIH1cbiAgICBpZiAod2luZG93ICYmIHdpbmRvdy5hdmEgJiYgIXdpbmRvdy5hdmEub3MpIHtcbiAgICAgIGNvbnN0IG9zVmFsdWUgPSBkZXRlY3RPUygpO1xuICAgICAgd2luZG93LmF2YSA9IHdpbmRvdy5hdmEgfHwge307XG4gICAgICB3aW5kb3cuYXZhLm9zID0gb3NWYWx1ZTtcblxuICAgICAgdGhpcy5wcm9wcy5vbkNhcHR1cmVJbnB1dChcbiAgICAgICAgdGhpcy5wcm9wcy5mb3JtSWQsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0NfT3BlcmF0aW5nX1N5c3RlbTEnLFxuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nLFxuICAgICAgICAgIHZhbHVlOiBvc1ZhbHVlLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAod2luZG93ICYmIHdpbmRvdy5hdmEgJiYgd2luZG93LmF2YS5vcykge1xuICAgICAgdGhpcy5wcm9wcy5vbkNhcHR1cmVJbnB1dChcbiAgICAgICAgdGhpcy5wcm9wcy5mb3JtSWQsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0NfT3BlcmF0aW5nX1N5c3RlbTEnLFxuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nLFxuICAgICAgICAgIHZhbHVlOiB3aW5kb3cuYXZhLm9zLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWN0aXZlRm9ybXMsIGZvcm1JZCwgaXNEaXNhYmxlZCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFVzZSBpdGVyYXRlRmllbGRzIHRvIGFsbG93IGNoZWNrIGZvciBhcnJheSB0eXBlIHRvIGl0ZXJhdGUuXG4gICAgLy8gQWNjZXB0cyBBcnJheTx7QE9iamVjdH0+IG9yIEFycmF5PEFycmF5PHtAT2JqZWN0fT4+XG4gICAgY29uc3QgaXRlcmF0ZUZpZWxkcyA9IChmaWVsZHM6IEpzb25GaWVsZHMpID0+IGZpZWxkcy5maWx0ZXIoKGZsZCkgPT4gISghZmxkKSkubWFwKChmLCBpKSA9PiB7XG4gICAgICAvLyBJZiBjb2x1bW4gaXMgc2V0IGFuZCBpcyB0cnVlIGl0ZXJhdGUgYmFjayB0aHJvdWdoIHRoZSBmaWVsZHNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGYpKSB7XG4gICAgICAgIHJldHVybiA8RmllbGRSb3cga2V5PXtpfSBjbGFzc05hbWU9J2NvbHVtbi12aWV3Jz5cbiAgICAgICAgICB7IGl0ZXJhdGVGaWVsZHMoWy4uLmZdKSB9XG4gICAgICAgIDwvRmllbGRSb3c+O1xuICAgICAgfVxuICAgICAgLy8gU2V0IGZpZWxkc2V0IC0gc2hvdWxkIGJlIHVzZWQgZm9yIGFsbCByYWRpbyBidXR0b25zXG4gICAgICBpZiAoZi50eXBlID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbiwgZmllbGRTZXQsIHJlcXVpcmVkLCB0aXRsZSwgdGl0bGVUYWcsXG4gICAgICAgIH0gPSBmO1xuXG4gICAgICAgIC8vIENhbiBub3QgbW92ZSB0byBvd24gY29tcG9uZW50LiBEb2luZyBzbyB3aWxsIGVuZCB1cCBidWlsZGluZyBhIGxpZmUgY3ljbGUgZGVwZW5kZW5jeS5cbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgb3B0aW1hbCBwbGFjZSBhdCB0aGlzIHRpbWUuXG4gICAgICAgIGlmIChmaWVsZFNldCkge1xuICAgICAgICAgIGNvbnN0IEVsZW1lbnRUYWcgPSB0aXRsZVRhZyB8fCBudWxsO1xuICAgICAgICAgIHJldHVybiA8RnJhZ21lbnQga2V5PXtpfT5cbiAgICAgICAgICAgIDxGaWVsZHNldCBrZXk9e2l9PlxuICAgICAgICAgICAge3RpdGxlICYmICFFbGVtZW50VGFnICYmIDxoMyBjbGFzc05hbWU9J3RpdGxlJz57dGl0bGV9IHtyZXF1aXJlZCAmJiA8c3BhbiBjbGFzc05hbWU9J3JlcXVpcmVkJz4qPC9zcGFuPn08L2gzPn1cbiAgICAgICAgICAgIHt0aXRsZSAmJiBFbGVtZW50VGFnICYmIDxFbGVtZW50VGFnIGNsYXNzTmFtZT0nZWxlbWVudFRhZyc+e3RpdGxlfTwvRWxlbWVudFRhZz59XG4gICAgICAgICAgICAgIHtkZXNjcmlwdGlvbiAmJiA8cCBjbGFzc05hbWU9J2Rlc2MnPntkZXNjcmlwdGlvbn08L3A+fVxuICAgICAgICAgICAgICA8ZmllbGRzZXQga2V5PXtpfSBpZD17Zi5pZH0+XG4gICAgICAgICAgICAgICAge2ZpZWxkU2V0Lm1hcCgoZnMsIGluZGV4KSA9PiBzZXRGaWVsZHMoe1xuICAgICAgICAgICAgICAgICAgZHluYW1pY0Zvcm1GaWVsZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmZzLFxuICAgICAgICAgICAgICAgICAgICBpZDogZi5pZCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBpbmRleDogcGFyc2VJbnQoYCR7aX0ke2luZGV4fWAsIDEwKSxcbiAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICBmb3JtSWQsXG4gICAgICAgICAgICAgICAgICBwcm9wczogeyAuLi50aGlzLnByb3BzLCBwYXJlbnRJZDogZi5pZCB9LFxuICAgICAgICAgICAgICAgICAgaXNJbkZpZWxkU2V0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgaGFzRHluYW1pY0ZpZWxkOiBmLmhhc0R5bmFtaWNGaWVsZCB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KSl9XG4gICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICAgIHsgZi5oYXNEeW5hbWljRmllbGQgJiYgPER5bmFtaWNGaWVsZFxuICAgICAgICAgICAgICAgIGZvcm1JZD17Zm9ybUlkfVxuICAgICAgICAgICAgICAgIHBhcmVudElkPXtmLmlkfVxuICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ9e2YucmVxdWlyZWR9XG4gICAgICAgICAgICAgIC8+IH1cbiAgICAgICAgICAgIDwvRmllbGRzZXQ+XG4gICAgICAgICAgPC9GcmFnbWVudD47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBmaWVsZFxuICAgICAgcmV0dXJuIHNldEZpZWxkcyh7XG4gICAgICAgIGR5bmFtaWNGb3JtRmllbGQ6IER5bmFtaWNGaWVsZCxcbiAgICAgICAgZmllbGQ6IGYsXG4gICAgICAgIGluZGV4OiBpLFxuICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICBmb3JtSWQsXG4gICAgICAgIHByb3BzOiB7IC4uLnRoaXMucHJvcHMsIHBhcmVudElkOiBmLmlkIH0sXG4gICAgICAgIGlzSW5GaWVsZFNldDogZmFsc2UsXG4gICAgICAgIGhhc0R5bmFtaWNGaWVsZDogZi5oYXNEeW5hbWljRmllbGQgfHwgZmFsc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5wcm9wcy5mb3JtSWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHsgZmllbGRzLCBzZWN0aW9ucyB9ID0gYWN0aXZlRm9ybXNbZm9ybUlkXTtcblxuICAgIGlmIChzZWN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHNlY3Rpb25zKSAmJiBzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWVsZHNSZW5kZXJlZCA9IFtdO1xuICAgICAgY29uc3QgZGlzcGxheVNlY3Rpb25zID0gc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkc1RvUmVuZGVyID0gc2VjdGlvbi5maWVsZHMubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpZWxkRm91bmQgPSBmaWVsZHMuZmluZCgoZikgPT4gZi5pZCA9PT0gZmllbGQpO1xuICAgICAgICAgIHJldHVybiBmaWVsZEZvdW5kO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc3ViRmllbGRzID0gaXRlcmF0ZUZpZWxkcyhmaWVsZHNUb1JlbmRlcik7XG4gICAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiBmaWVsZHNSZW5kZXJlZC5wdXNoKGZpZWxkKSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8ZGl2IGtleT17c2VjdGlvbi5pZH0+XG4gICAgICAgICAgICA8U2VjdGlvblRpdGxlPntzZWN0aW9uLnRpdGxlfTwvU2VjdGlvblRpdGxlPlxuICAgICAgICAgICAge3N1YkZpZWxkc31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZW1haW5pbmdGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKChmaWVsZCkgPT4gIWZpZWxkc1JlbmRlcmVkLmluY2x1ZGVzKGZpZWxkLmlkKSk7XG4gICAgICBjb25zdCByZW5kZXJSZW1haW5pbmdGaWVsZHMgPSBpdGVyYXRlRmllbGRzKHJlbWFpbmluZ0ZpZWxkcyk7XG5cbiAgICAgIHJldHVybiA8RnJhZ21lbnQ+XG4gICAgICAgIHtyZW5kZXJSZW1haW5pbmdGaWVsZHN9XG4gICAgICAgIHtkaXNwbGF5U2VjdGlvbnN9XG4gICAgICA8L0ZyYWdtZW50PjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnRzID0gaXRlcmF0ZUZpZWxkcyhmaWVsZHMpO1xuXG4gICAgcmV0dXJuIDxGcmFnbWVudD57IGNvbXBvbmVudHMgfTwvRnJhZ21lbnQ+O1xuICB9XG59XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IChzdGF0ZTogU3RhdGUsIG93blByb3BzOiB7IGZvcm1JZDogc3RyaW5nLCBpZDogc3RyaW5nIH0pID0+IHtcbiAgY29uc3QgeyBmb3JtSWQgfSA9IG93blByb3BzO1xuICBjb25zdCB7IGNvbmZpZ3MgfSA9IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0gPyBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdIDogeyBjb25maWdzOiB7fSB9O1xuICByZXR1cm4ge1xuICAgIGFjdGl2ZUZvcm1zOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3JtcyxcbiAgICBjYXB0dXJlRmllbGRzOiBzdGF0ZS5mb3Jtcy5jYXB0dXJlRmllbGRzW2Zvcm1JZF0gfHwgW10sXG4gICAgaGFzQmVlblZhbGlkYXRlZDogc3RhdGUuZm9ybXMuaGFzQmVlblZhbGlkYXRlZFtmb3JtSWRdLFxuICAgIGlzRGlzYWJsZWQ6IGlzRmllbGREaXNhYmxlZChzdGF0ZS5mb3Jtcy5zdWJtaXNzaW9ubGltaXRbZm9ybUlkXSwgY29uZmlncyksXG4gICAgaXNMYXN0RmllbGQ6IHN0YXRlLmZvcm1zLmxhc3RGaWVsZFtmb3JtSWRdIHx8IGZhbHNlLFxuICAgIGlzTG9hZGluZzogc3RhdGUuc3lzdGVtLmlzTG9hZGluZyxcbiAgICByZXF1aXJlZEZpZWxkczogc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXSxcbiAgICBzZXRGaWVsZHM6IHN0YXRlLmZvcm1zLnNldEZpZWxkc1tmb3JtSWRdLFxuICAgIHZhbGlkYXRlZEZpZWxkczogc3RhdGUuZm9ybXMudmFsaWRhdGVkRmllbGRzW2Zvcm1JZF0sXG4gICAgaXNCdXR0b25EaXNhYmxlZDogQm9vbGVhbihzdGF0ZS5mb3Jtcy52YWxpZGF0ZWRGaWVsZHMubGVuZ3RoID09PSBzdGF0ZS5mb3Jtcy5yZXF1aXJlZEZpZWxkcy5sZW5ndGgpLFxuICB9O1xufTtcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gKGRpc3BhdGNoOiBEaXNwYXRjaCkgPT4gKHtcbiAgb25DYXB0dXJlSW5wdXQ6IChmb3JtSWQ6IHN0cmluZywgdGFyZ2V0OiBJbnB1dFRhcmdldCkgPT4gZGlzcGF0Y2goY2FwdHVyZUlucHV0KGRpc3BhdGNoLCBmb3JtSWQsIHRhcmdldCkpLFxuICBvblNldEFjdGl2ZUZpZWxkOiAoZm9ybUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+IHtcbiAgICBkaXNwYXRjaChzZXRBY3RpdmVGaWVsZChmb3JtSWQsIGlkKSk7XG4gICAgZGlzcGF0Y2godHJhY2tGb3JtQWJhbmRvblN0YXR1cyhmb3JtSWQsIGlkKSk7XG4gIH0sXG4gIG9uU2V0TGFzdEZpZWxkOiAoZm9ybUlkOiBzdHJpbmcsIGZpZWxkczogSnNvbkZpZWxkcykgPT4gZGlzcGF0Y2goc2V0TGFzdEZpZWxkVmFsaWRhdGlvbihmb3JtSWQsIGZpZWxkcykpLFxuICBvblZhbGlkYXRlRmllbGQ6IChcbiAgICBjdXN0b21WYWxpZGF0aW9uPzogUmVnRXhwLFxuICAgIGZvcm1JZDogc3RyaW5nLFxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4gICAgcmVxdWlyZWRGaWVsZHM6IEFycmF5PHN0cmluZz4sXG4gICAgdGFyZ2V0OiBJbnB1dFRhcmdldCxcbiAgKSA9PiB2YWxpZGF0ZUZpZWxkKGRpc3BhdGNoLCBjdXN0b21WYWxpZGF0aW9uLCBmb3JtSWQsIGlzUmVxdWlyZWQsIHJlcXVpcmVkRmllbGRzLCB0YXJnZXQpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IChSZWFjdDogYW55KS5tZW1vKGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMpKFNldEZvcm1GaWVsZHMpKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFRIRU1FIGZyb20gJy4vY29uZmlnL2Zvcm0tdGhlbWUnO1xuXG5leHBvcnQgY29uc3QgQnV0dG9uID0gc3R5bGVkLmJ1dHRvbmBcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgdHJhbnNpdGlvbjogYWxsIC4ycyBlYXNlLWluLW91dDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDE1cHggMCByZ2JhKDAsMCwwLDAuMTUpO1xuICBmb250LXdlaWdodDogNjAwO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICR7VEhFTUUuYnV0dG9uLmFjdGl2ZX07XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgICBib3gtc2hhZG93OiAwIDEzcHggMThweCAwIHJnYmEoMCwwLDAsMC4xOCk7XG4gIH1cblxuICAmOmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogJHtUSEVNRS5idXR0b24uYWN0aXZlfTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICAgIGJveC1zaGFkb3c6IDAgMTBweCAxNXB4IDAgcmdiYSgwLDAsMCwwLjE1KTtcbiAgfVxuXG4gICYuZGlzYWJsZWQsXG4gIFtkaXNhYmxlZD10cnVlXSB7XG4gICAgYmFja2dyb3VuZDogJHtUSEVNRS5idXR0b24uYWN0aXZlfTtcbiAgICBib3JkZXI6ICR7VEhFTUUuYnV0dG9uLmFjdGl2ZX07XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZCAhaW1wb3J0YW50O1xuICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7XG4gICAgb3BhY2l0eTogMC41O1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG5cbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZDogJHtUSEVNRS5idXR0b24uYWN0aXZlfTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgYm94LXNoYWRvdzogMCAxMHB4IDE1cHggMCByZ2JhKDAsMCwwLDAuMTUpO1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgQnV0dG9uUHJpbWFyeSA9IHN0eWxlZChCdXR0b24pYFxuICBiYWNrZ3JvdW5kOiAke1RIRU1FLmJ1dHRvbi5hY3RpdmV9O1xuICBjb2xvcjogJHtUSEVNRS5idXR0b24uY29sb3J9O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNXB4O1xuICAkeyhwcm9wczogeyBpc0lubGluZTogYm9vbGVhbiB9KSA9PiAocHJvcHMuaXNJbmxpbmUgJiYgJ3BhZGRpbmc6IDEycHggMTVweDsnKX1cbiAgJjpob3ZlciB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgTW9kYWxCdXR0b24gPSBzdHlsZWQoQnV0dG9uUHJpbWFyeSlgXG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIG1pbi13aWR0aDogMTUwcHg7XG4gIHdpZHRoOiBhdXRvO1xuYDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IElzR2RwckVsaWdhYmxlIGZyb20gJy4uL2NvbnRhaW5lcnMvZmllbGRzL2dkcHItZWxpZ2FibGUnO1xuaW1wb3J0IFNwaW5pbmdDb250YWluZXIgZnJvbSAnLi9zcGlubmVyJztcblxuLy8gU3R5bGVzXG5pbXBvcnQgeyBTdWJtaXRCdXR0b25Db250YWluZXIgfSBmcm9tICcuLi9zdHlsZWQvZm9ybSc7XG5pbXBvcnQgeyBCdXR0b25QcmltYXJ5IH0gZnJvbSAnLi4vc3R5bGVkL2J1dHRvbnMnO1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzIGFzIFBhcmVudFByb3BzIH0gZnJvbSAnLi4vY29udGFpbmVycy9zdWJtaXQnO1xuaW1wb3J0IHR5cGUgeyBCcml0ZVZlcmlmeVN0YXRlIH0gZnJvbSAnLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcblxudHlwZSBQcm9wcyA9IFBhcmVudFByb3BzICYge1xuICBjbGFzc2VzPzogQXJyYXk8c3RyaW5nPixcbiAgZGlzcGxheVRleHQ6IHN0cmluZyxcbiAgaXNJbmxpbmU6IGJvb2xlYW4sXG4gIGlzTG9hZGluZzogYm9vbGVhbixcbiAgaXNSYXRlTG9va3VwRm9ybTogYm9vbGVhbixcbiAgbG9hZGVyUG9zaXRpb246ICdidXR0b24nIHwgJ292ZXJsYXknLFxuICBwb3NpdGlvbj86ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0JyxcbiAgc2hvd0xvYWRlcjogYm9vbGVhbixcbn1cblxuZXhwb3J0IGNvbnN0IGdldEJ1dHRvbkRpc3BsYXlUZXh0ID0gKGRpc3BsYXlUZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbCwgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2UsIGxvYWRlclBvc2l0aW9uOiAnYnV0dG9uJyB8ICdvdmVybGF5JyA9ICdvdmVybGF5Jywgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XG4gIGlmIChzaG93TG9hZGVyICYmIGxvYWRlclBvc2l0aW9uID09PSAnYnV0dG9uJykge1xuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiA8U3BpbmluZ0NvbnRhaW5lciBsb2FkZXJTaXplPXsnc21hbGwnfSAvPjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGxheVRleHQgPT09IG51bGwgPyAnU3VibWl0JyA6IGRpc3BsYXlUZXh0O1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEJyaXRlVmVyaWZ5U3RhdHVzRmllbGQgPSAoXG4gIGZpZWxkczogQXJyYXk8e2lkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmd9PixcbiAgYnJpdGVWZXJpZnlTdGF0ZTogQnJpdGVWZXJpZnlTdGF0ZSxcbik6IEFycmF5PHtpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nfT4gPT4ge1xuICBjb25zdCBuZXdGaWVsZHMgPSBmaWVsZHM7XG4gIGNvbnN0IGVtYWlsRmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSAnZW1haWwnKTtcbiAgY29uc3Qgc3VibWl0dGVkRW1haWwgPSBlbWFpbEZpZWxkICYmIGVtYWlsRmllbGQudmFsdWU7XG4gIGNvbnN0IHsgc3VjY2VzcywgdW5rbm93biB9ID0gYnJpdGVWZXJpZnlTdGF0ZTtcbiAgaWYgKHN1Ym1pdHRlZEVtYWlsKSB7XG4gICAgaWYgKHN1Y2Nlc3MgJiYgc3VjY2Vzcy5kYXRhICYmIHN1Y2Nlc3MuZGF0YS5hZGRyZXNzID09PSBzdWJtaXR0ZWRFbWFpbCkge1xuICAgICAgbmV3RmllbGRzLnB1c2goeyBpZDogJ2JyaXRlVmVyaWZ5U3RhdHVzJywgdmFsdWU6IHN1Y2Nlc3MuZGF0YS5zdGF0dXMgfSk7XG4gICAgfSBlbHNlIGlmICh1bmtub3duICYmIHVua25vd24uZGF0YSAmJiB1bmtub3duLmRhdGEuYWRkcmVzcyA9PT0gc3VibWl0dGVkRW1haWwpIHtcbiAgICAgIG5ld0ZpZWxkcy5wdXNoKHsgaWQ6ICdicml0ZVZlcmlmeVN0YXR1cycsIHZhbHVlOiB1bmtub3duLmRhdGEuc3RhdHVzIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3RmllbGRzO1xufTtcblxuY29uc3QgU3VibWl0Q29tcG9uZW50ID0gKHtcbiAgYWRkcmVzcyxcbiAgYWN0aXZlRGF0YSxcbiAgYnJpdGVWZXJpZnksXG4gIGNsYXNzZXMsXG4gIGNvbnRhaW5zR2RwckNvbnRhaW5lcixcbiAgZGlhbENvZGUsXG4gIGRpc3BsYXlUZXh0LFxuICBmb3JtQ29uZmlncyxcbiAgZmllbGRzLFxuICBmb3JtSWQsXG4gIGlzQnV0dG9uRGlzYWJsZWQsXG4gIGlzSW5saW5lLFxuICBpc0xvYWRpbmcsXG4gIGlzUmF0ZUxvb2t1cEZvcm0sXG4gIGxvYWRlclBvc2l0aW9uLFxuICBvblN1Ym1pdEZvclJhdGUsXG4gIG9uU3VibWl0Rm9ybSxcbiAgb25WYWxpZGF0ZUFsbEZpZWxkcyxcbiAgcG9zaXRpb24sXG4gIHJlcXVpcmVkRmllbGRzLFxuICBzZWFyY2gsXG4gIHNob3dMb2FkZXIsXG59OiBQcm9wcykgPT4gPEZyYWdtZW50PlxuICB7IGNvbnRhaW5zR2RwckNvbnRhaW5lciAmJiA8SXNHZHByRWxpZ2FibGUgZm9ybUlkPXtmb3JtSWR9IC8+IH1cbiAgPFN1Ym1pdEJ1dHRvbkNvbnRhaW5lciBjbGFzc05hbWU9e2NsYXNzZXN9IGlzSW5saW5lPXtpc0lubGluZX0gcG9zaXRpb249e3Bvc2l0aW9ufT5cbiAgICA8QnV0dG9uUHJpbWFyeVxuICAgICAgY2xhc3NOYW1lPXtgYXZhZm9ybVN1Ym1pdCBidG4tcHJpbWFyeSR7aXNCdXR0b25EaXNhYmxlZCA/ICcgZGlzYWJsZWQnIDogJyd9YH1cbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGlzQnV0dG9uRGlzYWJsZWQpIG9uVmFsaWRhdGVBbGxGaWVsZHMoZGlhbENvZGUsIGZvcm1JZCwgZmllbGRzLCByZXF1aXJlZEZpZWxkcywgYWN0aXZlRGF0YSk7XG4gICAgICAgIGlmICghaXNCdXR0b25EaXNhYmxlZCkge1xuICAgICAgICAgIGNvbnN0IG5ld0ZpZWxkcyA9IGFkZEJyaXRlVmVyaWZ5U3RhdHVzRmllbGQoZmllbGRzLCBicml0ZVZlcmlmeSk7XG4gICAgICAgICAgaWYgKGlzUmF0ZUxvb2t1cEZvcm0pIHtcbiAgICAgICAgICAgIG9uU3VibWl0Rm9yUmF0ZShhZGRyZXNzLCBuZXdGaWVsZHMsIGZvcm1Db25maWdzLCBmb3JtSWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvblN1Ym1pdEZvcm0oZm9ybUlkLCBmb3JtQ29uZmlncywgbmV3RmllbGRzLCBzZWFyY2gpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25LZXlQcmVzcz17KGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoaXNCdXR0b25EaXNhYmxlZCkgb25WYWxpZGF0ZUFsbEZpZWxkcyhkaWFsQ29kZSwgZm9ybUlkLCBmaWVsZHMsIHJlcXVpcmVkRmllbGRzLCBhY3RpdmVEYXRhKTtcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDEzICYmICFpc0J1dHRvbkRpc2FibGVkKSB7XG4gICAgICAgICAgY29uc3QgbmV3RmllbGRzID0gYWRkQnJpdGVWZXJpZnlTdGF0dXNGaWVsZChmaWVsZHMsIGJyaXRlVmVyaWZ5KTtcbiAgICAgICAgICBpZiAoaXNSYXRlTG9va3VwRm9ybSkge1xuICAgICAgICAgICAgb25TdWJtaXRGb3JSYXRlKGFkZHJlc3MsIG5ld0ZpZWxkcywgZm9ybUNvbmZpZ3MsIGZvcm1JZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG9uU3VibWl0Rm9ybShmb3JtSWQsIGZvcm1Db25maWdzLCBuZXdGaWVsZHMsIHNlYXJjaCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBpc0lubGluZT17aXNJbmxpbmV9PlxuICAgICAgICB7Z2V0QnV0dG9uRGlzcGxheVRleHQoZGlzcGxheVRleHQsIGlzTG9hZGluZywgbG9hZGVyUG9zaXRpb24sIHNob3dMb2FkZXIpfVxuICAgIDwvQnV0dG9uUHJpbWFyeT5cbiAgPC9TdWJtaXRCdXR0b25Db250YWluZXI+XG48L0ZyYWdtZW50PjtcblxuZXhwb3J0IGRlZmF1bHQgU3VibWl0Q29tcG9uZW50O1xuIiwiLy8gQGZsb3dcbi8vIERvY3Ncbi8vIFVzZSB0aGUgZm9sbG93aW5nIFVSTHMgdG8gcmV2aWV3IGRvY3VtZW50YXRpb24gYXJvdW5kIGJyaXRlIHZlcmlmeSBzZXJ2aWNlXG4vLyBodHRwczovL3dpa2kuYXZhbGFyYS5jb20vZGlzcGxheS9NVC9Ccml0ZVZlcmlmeSstK0FQSStDYWxsc1xuLy8gaHR0cHM6Ly9taWxlcy5tYXJrZXRpbmcuYXZhbGFyYS5jb20vc3dhZ2dlci9kb2MvZW1haWxfdmVyaWZ5XG5cbmltcG9ydCB7IGZldGNoIH0gZnJvbSAnQGF2YWxhcmEtbXRnL2hlbHBlcnMvbGliL3NoYXJlZCc7XG5cbmltcG9ydCBjb25maWcgZnJvbSAnLi4vY29uZmlnJztcblxuLy8gQWN0aW9uc1xuaW1wb3J0IHsgY2FwdHVyZU1sdEF2YVRheFJlc3BvbnNlLCBzZXRNbHRSYXRlUmVzcG9uc2UgfSBmcm9tICcuLi9saWIvYWN0aW9ucyc7XG5cbi8vIExvZ2dpbmdcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXItYXBpJztcblxuLy8gQVBJIFNldHRpbmdzXG5pbXBvcnQgQVBJX1NFVFRJTkdTIGZyb20gJy4uL3NoYXJlZC9hcGktc2V0dGluZ3MnO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJy4uL2xpYi90eXBlcy9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgUmVzdWx0IH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTUxUQXZhZm9ybUFkZHJlc3NPYmplY3QgfSBmcm9tICcuLi9saWIvdHlwZXMvcmVkdWNlci1zdGF0ZXMnO1xuaW1wb3J0IHR5cGUgeyBBdmFUYXhNbHRSZXNwb25zZVN1Y2Nlc3MgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgeyBBVkFUQVhfQVBJIH0gPSBjb25maWc7XG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSBNaWxlc1N1Ym1pc3Npb25WYWx1ZXMgPSB7XG4gIGRpc3BhdGNoOiBEaXNwYXRjaCxcbiAgYWRkcmVzczogTUxUQXZhZm9ybUFkZHJlc3NPYmplY3QsXG4gIGZvcm1JZDogc3RyaW5nLFxuICBoYXNBZEJsb2NrZXI6IGJvb2xlYW4sXG4gIGlzQWRvYmVTYXRlbGxpdGVCbG9ja2VkOiBib29sZWFuLFxuICByZWRpcmVjdDogc3RyaW5nIHwgbnVsbCxcbn1cblxuZXhwb3J0IGNvbnN0IGF2YVRheFJhdGVMb29rdXAgPSBhc3luYyAoZGlzcGF0Y2g6IERpc3BhdGNoLCBmb3JtSWQ6IHN0cmluZywgYWRkcmVzczogTUxUQXZhZm9ybUFkZHJlc3NPYmplY3QpID0+IHtcbiAgbGV0IHJlcXVlc3RVcmwgPSBgJHtBVkFUQVhfQVBJfWA7XG4gIGNvbnN0IHsgYWRkcmVzczEsIGNpdHksIHN0YXRlIH0gPSBhZGRyZXNzO1xuICByZXF1ZXN0VXJsID0gYCR7cmVxdWVzdFVybH0/bGluZUFkZHJlc3MxPSR7ZW5jb2RlVVJJKGFkZHJlc3MxKX0mY2l0eT0ke2VuY29kZVVSSShjaXR5KX0mcmVnaW9uPSR7ZW5jb2RlVVJJKHN0YXRlKX0mY2FsY3R5cGU9bWx0YDtcblxuICBjb25zdCByZXNwb25zZTogUmVzdWx0PEF2YVRheE1sdFJlc3BvbnNlU3VjY2Vzcz4gPSBhd2FpdCBmZXRjaChyZXF1ZXN0VXJsLCB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgfSwgQVBJX1NFVFRJTkdTLnRpbWVvdXQpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IHJlc3VsdDtcbiAgICBpZiAocmVzLnZhbHVlKSB7XG4gICAgICByZXMudmFsdWUgPSB0eXBlb2YgcmVzLnZhbHVlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzLnZhbHVlKSA6IHJlcy52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSk7XG5cbiAgY29uc3QgeyBtbHRSYXRlTG9va3VwIH0gPSB3aW5kb3cuYXZhIHx8IHsgbWx0UmF0ZUxvb2t1cDoge30gfTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgZmFpbGVkUmVzcG9uc2UgPSB7XG4gICAgICBvazogZmFsc2UsXG4gICAgICB2YWx1ZToge1xuICAgICAgICByYXRlOiBudWxsLFxuICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgIGxpbmVBZGRyZXNzMTogYWRkcmVzczEsXG4gICAgICAgICAgICBjaXR5LFxuICAgICAgICAgICAgcmVnaW9uOiBzdGF0ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gTG9nIEFQSSBlcnJvclxuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdBdmFUYXhBUElGYWlsdXJlJyxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ0F2YXRheCBBUEkgRmFpbHVyZScsXG4gICAgICAgIHJlc3BvbnNlOiBKU09OLnN0cmluZ2lmeShyZXNwb25zZSksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgd2luZG93LmF2YS5tbHRSYXRlTG9va3VwID0ge1xuICAgICAgLi4ubWx0UmF0ZUxvb2t1cCxcbiAgICAgIFtmb3JtSWRdOiB7XG4gICAgICAgIHJlc3BvbnNlOiBmYWlsZWRSZXNwb25zZSxcbiAgICAgICAgdXNlcklucHV0OiBhZGRyZXNzLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGF3YWl0IGRpc3BhdGNoKGNhcHR1cmVNbHRBdmFUYXhSZXNwb25zZShmb3JtSWQsIGZhaWxlZFJlc3BvbnNlLnZhbHVlKSk7XG4gICAgYXdhaXQgZGlzcGF0Y2goc2V0TWx0UmF0ZVJlc3BvbnNlKGZvcm1JZCwgZmFpbGVkUmVzcG9uc2UudmFsdWUpKTtcbiAgICByZXR1cm4gZmFpbGVkUmVzcG9uc2U7XG4gIH1cblxuICAvLyBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgZXJyb3IgbWVzc2FnZSBpbiB0aGUgcmVzcG9uc2Ugb2JqZWN0XG4gIGlmIChyZXNwb25zZS5vayAmJiByZXNwb25zZS52YWx1ZSAmJiByZXNwb25zZS52YWx1ZS5lcnJvcikge1xuICAgIC8vIFNldCBkZWZhdWx0IG1lc3NhZ2UgLSByZWR1bmRhbnQgZm9yIGZsb3cgbmVlZHNcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSByZXNwb25zZS52YWx1ZS5lcnJvciB8fCAnSW52YWxpZCByYXRlIGZvdW5kIC0gZGVmYXVsdCc7IC8vIE5vIHRoZSBkZWZhdWx0LiBUaGlzIGluZGljYXRlcyBlcnJvciB3YXMgZm91bmQgYnV0IG5vIHZhbHVlIHdhcyBmb3VuZC5cblxuICAgIC8vIExvZyBBUEkgcmVzcG9uc2UgZXJyb3IgbWVzc2FnZVxuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdBdmFUYXhBUElSYXRlRmFpbHVyZScsXG4gICAgICBmb3JtSWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6IGBBdmFUYXggYXBpIHJhdGUgZmFpbHVyZS4gUmVzcG9uc2UgcmF0ZSBpbnZhbGlkLiBNZXNzYWdlOiAke2Vycm9yTWVzc2FnZX0uYCxcbiAgICAgICAgcmVzcG9uc2U6IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICB3aW5kb3cuYXZhLm1sdFJhdGVMb29rdXAgPSB7XG4gICAgLi4ubWx0UmF0ZUxvb2t1cCxcbiAgICBbZm9ybUlkXToge1xuICAgICAgcmVzcG9uc2UsXG4gICAgICB1c2VySW5wdXQ6IGFkZHJlc3MsXG4gICAgfSxcbiAgfTtcblxuICBhd2FpdCBkaXNwYXRjaChjYXB0dXJlTWx0QXZhVGF4UmVzcG9uc2UoZm9ybUlkLCByZXNwb25zZS52YWx1ZSkpO1xuICBhd2FpdCBkaXNwYXRjaChzZXRNbHRSYXRlUmVzcG9uc2UoZm9ybUlkLCByZXNwb25zZS52YWx1ZSkpO1xuXG4gIC8vIFJldHVybiByZXNwb25zZVxuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBhdmFUYXhSYXRlTG9va3VwO1xuIiwiLy8gQGZsb3dcblxuLy8gQWN0aW9uc1xuaW1wb3J0IHsgc2V0TG9hZGluZ0ZpbmlzaCB9IGZyb20gJy4uL2xpYi9hY3Rpb25zJztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IE1MVEF2YWZvcm1BZGRyZXNzT2JqZWN0IH0gZnJvbSAnLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcbmltcG9ydCB0eXBlIHsgRm9ybURlZmF1bHRDb25maWdzIH0gZnJvbSAnLi4vbGliL3R5cGVzL2Zvcm1zJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgYXZhVGF4UmF0ZUxvb2t1cCB9IGZyb20gJy4uL2FwaS9hdmF0YXgtcmF0ZS1sb29rdXAnO1xuXG4vLyBMb2dnaW5nXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2FwaS9sb2dnZXItYXBpJztcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGZvcm1hdCBhZGRyZXNzIHZhbGlkYXRpb24gb2JqZWN0IGZyb20gc3RhdGVcbi8vIEByZXR1cm4geyBPYmplY3QgfVxuZXhwb3J0IGNvbnN0IHNldFZhbGlkYXRpb25BZGRyZXNzID0gKGZpZWxkczogQXJyYXk8eyBpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0+KTogTUxUQXZhZm9ybUFkZHJlc3NPYmplY3QgfCBudWxsID0+IHtcbiAgY29uc3QgYWRkcmVzcyA9IHtcbiAgICBhZGRyZXNzMTogZmllbGRzLmZpbHRlcigoZikgPT4gZi5pZCA9PT0gJ2FkZHJlc3MxJylbMF0gJiYgKGZpZWxkcy5maWx0ZXIoKGYpID0+IGYuaWQgPT09ICdhZGRyZXNzMScpWzBdKS52YWx1ZSA/IChmaWVsZHMuZmlsdGVyKChmKSA9PiBmLmlkID09PSAnYWRkcmVzczEnKVswXSkudmFsdWUgOiAnJyxcbiAgICBjaXR5OiBmaWVsZHMuZmlsdGVyKChmKSA9PiBmLmlkID09PSAnY2l0eScpWzBdICYmIChmaWVsZHMuZmlsdGVyKChmKSA9PiBmLmlkID09PSAnY2l0eScpWzBdKS52YWx1ZSA/IChmaWVsZHMuZmlsdGVyKChmKSA9PiBmLmlkID09PSAnY2l0eScpWzBdKS52YWx1ZSA6ICcnLFxuICAgIHN0YXRlOiBmaWVsZHMuZmlsdGVyKChmKSA9PiBmLmlkID09PSAnc3RhdGUnKVswXSAmJiAoZmllbGRzLmZpbHRlcigoZikgPT4gZi5pZCA9PT0gJ3N0YXRlJylbMF0pLnZhbHVlID8gKGZpZWxkcy5maWx0ZXIoKGYpID0+IGYuaWQgPT09ICdzdGF0ZScpWzBdKS52YWx1ZSA6ICcnLFxuICB9O1xuXG4gIGxldCBjb21wbGV0ZUFkZHJlc3MgPSB0cnVlO1xuICBpZiAoYWRkcmVzcy5hZGRyZXNzMSA9PT0gJycgfHwgYWRkcmVzcy5jaXR5ID09PSAnJyB8fCBhZGRyZXNzLnN0YXRlID09PSAnJykgY29tcGxldGVBZGRyZXNzID0gZmFsc2U7XG4gIHJldHVybiAhY29tcGxldGVBZGRyZXNzID8gbnVsbCA6IGFkZHJlc3M7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gdHJpZ2dlciByYXRlIGNvbXBvbmVudCByZW5kZXIgaW4gQUVNXG4vLyBAcmV0dXJuIHsgdm9pZCB9XG5cbmV4cG9ydCBjb25zdCB0cmlnZ2VyTUxUUmVuZGVyRnVuY3Rpb24gPSAoZm9ybUlkOiBzdHJpbmcsIGNhbGxiYWNrOiBzdHJpbmcgfCBGdW5jdGlvbiB8IG51bGwpOiB2b2lkID0+IHtcbiAgaWYgKHdpbmRvdy5tbHRSYXRlUmVzcG9uc2UgJiYgdHlwZW9mIHdpbmRvdy5tbHRSYXRlUmVzcG9uc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCB7IGF2YSB9ID0gd2luZG93O1xuICAgIGlmIChhdmEubWx0UmF0ZUxvb2t1cCAmJiBhdmEubWx0UmF0ZUxvb2t1cFtmb3JtSWRdKSB7XG4gICAgICBjb25zdCB7IG1sdFJhdGVMb29rdXAgfSA9IGF2YTtcbiAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IG1sdFJhdGVMb29rdXBbZm9ybUlkXTtcbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHJlc3BvbnNlO1xuICAgICAgY29uc3QgeyBhZGRyZXNzLCByYXRlIH0gPSB2YWx1ZTtcblxuICAgICAgY29uc3Qgc3VjY2Vzc0NhbGxiYWNrID0gY2FsbGJhY2sgfHwgJ21sdFJhdGVSZXNwb25zZSc7XG4gICAgICB0cnkge1xuICAgICAgICB3aW5kb3dbc3VjY2Vzc0NhbGxiYWNrXSh7XG4gICAgICAgICAgZm9ybUlkLFxuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3MgfHwge30sXG4gICAgICAgICAgcmF0ZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyKHtcbiAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICBtc2dUeXBlOiAnQXZhVGF4RmFpbHVyZScsXG4gICAgICAgICAgZm9ybUlkLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdBdmFUYXggdW5rb3duIGVycm9yIGZvdW5kIC0gaGVscGVycy9hdmF0YXguanMgLSBDYWxsYmFjayBvciBjYWxsYmFjayBkYXRhIG5vdCBmb3VuZCcsXG4gICAgICAgICAgICByZXNwb25zZTogSlNPTi5zdHJpbmdpZnkoZXJyKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nZ2VyKHtcbiAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgbXNnVHlwZTogJ0F2YVRheEZhaWx1cmUnLFxuICAgICAgZm9ybUlkLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiAnTUxUIEFFTSB0cmlnZ2VyIGZvdW5kIC0gaGVscGVycy9hdmF0YXguanMgLSBDYWxsYmFjayBub3QgZm91bmQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufTtcblxuY29uc3QgREVDSU1BTF9MSU1JVCA9IDI7XG5mdW5jdGlvbiBjb252ZXJ0QW5kTGltaXREZWNpbWFsKGlucHV0U3RyaW5nKSB7XG4gIGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQoaW5wdXRTdHJpbmcpO1xuXG4gIGlmIChOdW1iZXIuaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIHRvRml4ZWQgbWV0aG9kIHJvdW5kcyB1cCBpZiAzcmQgZGVjaW1hbCBpcyBlcXVhbCBvciBncmVhdGVyIDVcbiAgY29uc3QgbGltaXRlZE51bWJlclN0cmluZyA9IG51bWJlci50b0ZpeGVkKERFQ0lNQUxfTElNSVQpO1xuICByZXR1cm4gbGltaXRlZE51bWJlclN0cmluZztcbn1cblxuLy8gSGVscGVyIHRvIHRyaWdnZXIgbmVjY2Vzc2FyeSBmdW5jdGlvbnMgcHJpb3IgdG8gTUlMRVMgc3VibWlzc2lvblxuLy8gQHJldHVybiB7IHZvaWQgfVxuZXhwb3J0IGNvbnN0IHN1Ym1pdFJhdGVMb29rdXAgPSBhc3luYyAoXG4gIGRpc3BhdGNoOiBEaXNwYXRjaCxcbiAgYWRkcmVzczogTUxUQXZhZm9ybUFkZHJlc3NPYmplY3QsXG4gIGZpZWxkczogQXJyYXk8eyBpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0+LFxuICBmb3JtQ29uZmlnczogRm9ybURlZmF1bHRDb25maWdzLFxuICBmb3JtSWQ6IHN0cmluZyxcbikgPT4ge1xuICAvLyBEdWUgdG8gbW9yZSBhY3Rpb25zIG5lZWRpbmcgdG8gYmUgdGFraW5nIHNlY29uZGFyeSBzdWJtaXQgYWN0aW9uIGNyZWF0ZWQgaW4gb3JkZXIgdG8gaGFuZGxlIGFkZGl0aW9uYWwgQVBJIGNhbGxzIGJlZm9yZSBNSUxFUyBzdWJtaXNzaW9uXG5cbiAgLy8gU2VuZCBhZGRyZXNzIHRvIEF2YVRheCBBUEkgdG8gdmFsaWRhdGUgYWRkcmVzc1xuICBjb25zdCB7IGF2YXRheCB9ID0gd2luZG93LmF2YSB8fCB7IGF2YXRheDoge30gfTtcbiAgd2luZG93LmF2YS5hdmF0YXggPSB7XG4gICAgLi4uYXZhdGF4LFxuICAgIHN1Ym1pdHRlZFJhdGVGb3JtOiBmb3JtSWQsXG4gIH07XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhdmFUYXhSYXRlTG9va3VwKGRpc3BhdGNoLCBmb3JtSWQsIGFkZHJlc3MpO1xuXG4gIHdpbmRvdy5hdmEubWx0UmF0ZUxvb2t1cCA9IHtcbiAgICBbZm9ybUlkXToge1xuICAgICAgcmVzcG9uc2UsXG4gICAgfSxcbiAgfTtcblxuICAvLyBSYXRlIGxvb2sgdXAgY29tcGxldGUsIHN1Ym1pdCBpbmZvcm1hdGlvbiB0byBtaWxlc1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICBpZiAocmVzcG9uc2UudmFsdWUuYWRkcmVzcyAmJiByZXNwb25zZS52YWx1ZS5hZGRyZXNzLnZhbGlkICYmIHJlc3BvbnNlLnZhbHVlLmFkZHJlc3MudmFsaWQgPT09IHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCB7IHJhdGUgfSA9IHJlc3BvbnNlLnZhbHVlO1xuICAgICAgICByYXRlID0gcmF0ZSA9PT0gbnVsbCA/ICcnIDogcmF0ZS50b1N0cmluZygpO1xuICAgICAgICBsZXQgbmV3RmllbGRzID0gZmllbGRzO1xuICAgICAgICBuZXdGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKChmKSA9PiBmLmlkICE9PSAnQ19UYXhSYXRlJyk7XG4gICAgICAgIG5ld0ZpZWxkcy5wdXNoKHsgaWQ6ICdDX1RheFJhdGUnLCB2YWx1ZTogY29udmVydEFuZExpbWl0RGVjaW1hbChyYXRlKSB9KTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VWYWx1ZSA9IHJlc3BvbnNlLnZhbHVlIHx8ICdudWxsJztcbiAgICAgICAgbmV3RmllbGRzID0gYXdhaXQgbmV3RmllbGRzLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmlkKSB7XG4gICAgICAgICAgICBjYXNlICdhdmFUYXhNTFRSZXNwb25zZSc6XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IGZpZWxkLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShyZXNwb25zZVZhbHVlKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHdpbmRvdy5hdmEudHJpZ2dlcihuZXdGaWVsZHMsIGZvcm1JZCwgZm9ybUNvbmZpZ3MpO1xuICAgICAgICBkaXNwYXRjaChzZXRMb2FkaW5nRmluaXNoKCkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlcih7XG4gICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgbXNnVHlwZTogJ1N1Ym1pc3Npb25FcnJvcicsXG4gICAgICAgICAgZm9ybUlkLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdTdWJtaXNzaW9uIGVycm9yIGZvdW5kLiBQb3NzaWJsZSB3aW5kb3cuYXZhLnRyaWdnZXIgbm90IGF2YWlsYWJsZS4gRGF0YSBkaWQgbm90IHN1Ym1pdCB0byBNSUxFUyBlbmRwb2ludCcsXG4gICAgICAgICAgICBsb2NhdGlvbjogJ3NyYy9jb250YWluZXJzL3N1Ym1pdCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB7IGNhbGxiYWNrIH0gPSBmb3JtQ29uZmlncztcbiAgICAgIGNhbGxiYWNrID0gIWNhbGxiYWNrIHx8IGNhbGxiYWNrID09PSAnJyA/ICdtbHRSYXRlUmVzcG9uc2UnIDogY2FsbGJhY2s7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgdHJpZ2dlck1MVFJlbmRlckZ1bmN0aW9uKGZvcm1JZCwgY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyKHtcbiAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICBtc2dUeXBlOiAnQXZhVGF4UmF0ZUxvb2t1cENhbGxiYWNrRXJyb3InLFxuICAgICAgICAgIGZvcm1JZCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IHRyaWdnZXIgYXZhVGF4Q2FsbGJhY2suIFdhcyBlaXRoZXIgbm90IHBhc3NlZCBvciBub3QgZm91bmQnLFxuICAgICAgICAgICAgbG9jYXRpb246ICdzcmMvaGVscGVycy9hdmF0YXgnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZGlzcGF0Y2goc2V0TG9hZGluZ0ZpbmlzaCgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgbG9nZ2VyKHtcbiAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgbXNnVHlwZTogJ0F2YVRheEFwaVJlc3BvbnNlRmFpbHVyZScsXG4gICAgICBmb3JtSWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdBdmFUYXggdW5rb3duIGVycm9yIGZvdW5kIHdpdGggQVBJIHJlc3BvbnNlIC0gaGVscGVycy9hdmF0YXguanMnLFxuICAgICAgICByZXNwb25zZTogSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBkaXNwYXRjaChzZXRMb2FkaW5nRmluaXNoKCkpO1xuICB9XG59O1xuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgRm9ybURlZmF1bHRDb25maWdzIH0gZnJvbSAnLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vYXBpL2xvZ2dlci1hcGknO1xuXG4vLyBIZWxwZXIgdG8gdHJpZ2dlciBjYWxsYmFjayBmdW5jdGlvbnMgaW5jYXNlIG9mIG5vIHN1Ym1pc3Npb24gdG8gbWlsZXNcbi8vIEByZXR1cm4geyB2b2lkIH1cbmV4cG9ydCBjb25zdCBieXBhc3NTdWJtaXRUb0NhbGxiYWNrcyA9IChcbiAgbmV3RmllbGRzOiBBcnJheTx7IGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT4sXG4gIGZvcm1Db25maWdzOiBGb3JtRGVmYXVsdENvbmZpZ3MsXG4gIGZvcm1JZDogc3RyaW5nLFxuKSA9PiB7XG4gIGNvbnN0IHN1Y2Nlc3NDYWxsYmFjayA9IGZvcm1Db25maWdzLmNhbGxiYWNrID8gZm9ybUNvbmZpZ3MuY2FsbGJhY2sgOiBudWxsO1xuXG4gIC8vIENoZWNrIGZvciBzdWNjZXNzIGNhbGxiYWNrXG4gIGlmIChzdWNjZXNzQ2FsbGJhY2sgJiYgc3VjY2Vzc0NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgbG9nZ2VyKHtcbiAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICBtc2dUeXBlOiAnQnlwYXNzTWlsZXNTdWJtaXNzaW9uJyxcbiAgICAgIGZvcm1JZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ0J5cGFzc2luZyBtaWxlcyBzdWJtaXNpc29uIC0gRXhlY3V0aW5nIENhbGxiYWNrJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBzdWNjZXNzQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHN1Y2Nlc3NDYWxsYmFjayhuZXdGaWVsZHMpOyAvLyBJZiBmdW5jdGlvbiBpcyBwYXNzZWQgaW4sIHRyaWdnZXIgaXRcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gQXNzdW1lcyB0aGUgY2FsbGJhY2sgcHJlc2lkZW5jZSwgc3RvcCBwcm9jZXNzaW5nXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc3VjY2Vzc0NhbGxiYWNrID09PSAnc3RyaW5nJyAmJiB3aW5kb3dbc3VjY2Vzc0NhbGxiYWNrXSAmJiB0eXBlb2Ygd2luZG93W3N1Y2Nlc3NDYWxsYmFja10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdpbmRvd1tzdWNjZXNzQ2FsbGJhY2tdKG5ld0ZpZWxkcyk7IC8vIGlmIHN0cmluZyBpcyBwYXNzZWQgaXQsIGFzc3VtZSB0aGUgZnVuY3Rpb24gaXMgYWxyZWFkeSByZWdpc3RlcmVkIHRvIHRoZSB3aW5kb3csIHRyaWdnZXIgZnJvbSB0aGUgd2luZG93LlxuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBc3N1bWVzIHRoZSBjYWxsYmFjayBwcmVzaWRlbmNlLCBzdG9wIHByb2Nlc3NpbmdcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBTdG9wIHByb2Nlc3NpbmcgaWYgY2FsbGJhY2sgaXMgcHJlc2VudFxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYnlwYXNzU3VibWl0VG9DYWxsYmFja3M7XG4iLCIvLyBAZmxvd1xuXG4vLyBMb2dnaW5nXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2FwaS9sb2dnZXItYXBpJztcblxuY29uc3QgdHJpZ2dlclRhdGFyaVRyYWNrRXZlbnQgPSAoZm9ybUlkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHRhdGFyaSB9ID0gd2luZG93O1xuICAgIGlmICh0YXRhcmkgJiYgdGF0YXJpICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBkZXRhaWxzID0ge1xuICAgICAgICBwYWdlUGF0aDogd2luZG93ICYmIHdpbmRvdy5sb2NhdGlvbiA/IHdpbmRvdy5sb2NhdGlvbi5ocmVmIDogJycsXG4gICAgICAgIHRhdGFyaVNlc3Npb25JZDogdGF0YXJpLnNlc3Npb25JZCxcbiAgICAgIH07XG4gICAgICB0YXRhcmkudHJhY2soJ3RhdGFyaUNvbnZlcnNpb25zJywgZGV0YWlscyk7XG4gICAgICAvLyBsb2dnZXIgc3VjY2Vzc1xuICAgICAgbG9nZ2VyKHtcbiAgICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgbXNnVHlwZTogJ3RhdGFyaVBpeGVsJyxcbiAgICAgICAgZm9ybUlkLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ3RhdGFyaSB0cmFjayBldmVudCBzdWNlc3NmdWxsIHN1Ym1pc3Npb24nLFxuICAgICAgICAgIGRldGFpbHMsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbG9nZ2VyIHRhdGFyaSBub3QgbG9hZGVkLlxuICAgICAgbG9nZ2VyKHtcbiAgICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgbXNnVHlwZTogJ3RhdGFyaVBpeGVsJyxcbiAgICAgICAgZm9ybUlkLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ3RhdGFyaSBub3QgbG9hZGVkIG9uIHBhZ2UuJyxcbiAgICAgICAgICBwYWdlUGF0aDogd2luZG93ICYmIHdpbmRvdy5sb2NhdGlvbiA/IHdpbmRvdy5sb2NhdGlvbi5ocmVmIDogJycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gbG9nZ2VyIGVycm9yIGZvciB0cmFja2luZyBmYWlsaW5nLlxuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICd0YXRhcmlQaXhlbCcsXG4gICAgICBmb3JtSWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdlcnJvciB3aGlsZSB0cmlnZ2VyaW5nIHRhdGFydGkgdHJhY2sgZXZlbnQuJyxcbiAgICAgICAgcGFnZVBhdGg6IHdpbmRvdyAmJiB3aW5kb3cubG9jYXRpb24gPyB3aW5kb3cubG9jYXRpb24uaHJlZiA6ICcnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbn07XG5leHBvcnQgZGVmYXVsdCB0cmlnZ2VyVGF0YXJpVHJhY2tFdmVudDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgU3VibWl0IGZyb20gJy4uL2NvbXBvbmVudHMvc3VibWl0JztcblxuLy8gVHlwZXNcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IEJyaXRlVmVyaWZ5U3RhdGUsIE1MVEF2YWZvcm1BZGRyZXNzT2JqZWN0LCBTdGF0ZSB9IGZyb20gJy4uL2xpYi90eXBlcy9yZWR1Y2VyLXN0YXRlcyc7XG5pbXBvcnQgdHlwZSB7IEZvcm1BdHRyaWJ1dGVzLCBGb3JtRGVmYXVsdENvbmZpZ3MsIENhcHR1cmVkRmllbGRzIH0gZnJvbSAnLi4vbGliL3R5cGVzL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgTWF4bWluZEluc2lnaHRzT2JqZWN0IH0gZnJvbSAnLi4vbGliL3R5cGVzJztcblxuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgc2V0TG9hZGluZ0ZpbmlzaCwgc2V0TG9hZGluZ1N0YXJ0LCBzZXRNaWxlc1N1Ym1pc3Npb25TdGF0dXMsIHNldFN1Ym1pc3Npb25MaW1pdEV4Y2VlZWRlZCxcbn0gZnJvbSAnLi4vbGliL2FjdGlvbnMnO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQgeyBkaXNhYmxlQ2hpbGlwaXBlckJ1dHRvbiwgZW5hYmxlQ2hpbGlwaXBlckJ1dHRvbiwgaXNDb25uZWN0ZWRUb0NoaWxpcGlwZXIgfSBmcm9tICcuLi9oZWxwZXJzL2NoaWxpcGlwZXInO1xuaW1wb3J0IHtcbiAgaXNTdWJtaXREaXNhYmxlZCwgcmVtb3ZlRnJvbVdpbmRvd0FiYW5kb25lZCwgc2V0U2VhcmNoRmllbGRWYWx1ZSwgdmFsaWRhdGVBbGxGaWVsZHMsIHNldEZpZWxkT3ZlcndyaXRlQ29uZmlncyxcbn0gZnJvbSAnLi4vaGVscGVycy9mb3Jtcyc7XG5pbXBvcnQgeyBzdWJtaXRSYXRlTG9va3VwLCBzZXRWYWxpZGF0aW9uQWRkcmVzcyB9IGZyb20gJy4uL2hlbHBlcnMvYXZhdGF4JztcbmltcG9ydCB7IGJ5cGFzc1N1Ym1pdFRvQ2FsbGJhY2tzIH0gZnJvbSAnLi4vaGVscGVycy9ieXBhc3Mtc3VibWl0JztcbmltcG9ydCB7IGdldExvY2FsZVN0cmluZ1RleHQgfSBmcm9tICcuLi9oZWxwZXJzL2xhbmd1YWdlJztcbmltcG9ydCB7IGdldExvYWRlclBvc2l0aW9uLCBnZXRTaG93TG9hZGVyLCBpc0Zvcm1EaXNwbGF5SW5saW5lIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgdHJpZ2dlclRhdGFyaVRyYWNrRXZlbnQgZnJvbSAnLi4vaGVscGVycy90YXRhcmknO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9hcGkvbG9nZ2VyLWFwaSc7XG5cbnR5cGUgU3RhdGVQcm9wcyA9IHtcbiAgYWRkcmVzczogTUxUQXZhZm9ybUFkZHJlc3NPYmplY3QsXG4gIGFjdGl2ZURhdGE6IEZvcm1BdHRyaWJ1dGVzLFxuICBicml0ZVZlcmlmeTogQnJpdGVWZXJpZnlTdGF0ZSxcbiAgY29udGFpbnNHZHByQ29udGFpbmVyOiBib29sZWFuLFxuICBkaWFsQ29kZTogc3RyaW5nLFxuICBlbG9xdWFQYXlsb2FkOiB7IFtrZXk6IHN0cmluZ106IHtcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgfVxuICB9LFxuICBmaWVsZHM6IEFycmF5PHsgaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PixcbiAgZm9ybUNvbmZpZ3M6IEZvcm1EZWZhdWx0Q29uZmlncyxcbiAgaXNCdXR0b25EaXNhYmxlZDogYm9vbGVhbixcbiAgaXNMb2FkaW5nOiBib29sZWFuLFxuICBtYXhtaW5kRGF0YTogeyBJTlNJR0hUUzogTWF4bWluZEluc2lnaHRzT2JqZWN0IH0sXG4gIE1JTEVTX0FQSTogc3RyaW5nIHwgbnVsbCxcbiAgcmVkaXJlY3Q6IHN0cmluZyB8IG51bGwsXG4gIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxuICBzZWFyY2g6IHsgW2tleTogc3RyaW5nXToge1xuICAgIFtrZXk6IHN0cmluZ106IFN0cmluZyxcbiAgICB9XG4gIH0sXG59O1xuXG50eXBlIERpc3BhdGNoUHJvcHMgPSB7XG4gIG9uU3VibWl0Rm9yUmF0ZTogKFxuICAgIGFkZHJlc3M6IE1MVEF2YWZvcm1BZGRyZXNzT2JqZWN0LFxuICAgIGZpZWxkczogQXJyYXk8eyBpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0+LFxuICAgIGZvcm1Db25maWdzOiBGb3JtRGVmYXVsdENvbmZpZ3MsXG4gICAgZm9ybUlkOiBzdHJpbmcsXG4gICkgPT4gdm9pZCxcbiAgb25TdWJtaXRGb3JtOiAoXG4gICAgZm9ybUlkOiBzdHJpbmcsXG4gICAgZm9ybUNvbmZpZ3M6IEZvcm1EZWZhdWx0Q29uZmlncyxcbiAgICBmaWVsZHM6IEFycmF5PHsgaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PixcbiAgICBzZWFyY2g6IHsgW2tleTogc3RyaW5nXToge1xuICAgICAgW2tleTogc3RyaW5nXTogU3RyaW5nLFxuICAgICAgfVxuICAgIH0sXG4gICkgPT4gdm9pZCxcbiAgb25WYWxpZGF0ZUFsbEZpZWxkczogKFxuICAgIGRpYWxDb2RlOiBzdHJpbmcsXG4gICAgZm9ybUlkOiBzdHJpbmcsXG4gICAgZmllbGRzOiBDYXB0dXJlZEZpZWxkcyxcbiAgICByZXF1aXJlZEZpZWxkczogQXJyYXk8c3RyaW5nPixcbiAgICBhY3RpdmVEYXRhOiBGb3JtQXR0cmlidXRlcyxcbiAgICApID0+IHZvaWQsXG59O1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9IERpc3BhdGNoUHJvcHMgJiBTdGF0ZVByb3BzICYge1xuICBmb3JtSWQ6IHN0cmluZyxcbn07XG5cbmNsYXNzIFN1Ym1pdENvbnRhaW5lciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcz4ge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGFjdGl2ZURhdGEsXG4gICAgICBicml0ZVZlcmlmeSxcbiAgICAgIGNvbnRhaW5zR2RwckNvbnRhaW5lcixcbiAgICAgIGRpYWxDb2RlLFxuICAgICAgZWxvcXVhUGF5bG9hZCxcbiAgICAgIGZvcm1Db25maWdzLFxuICAgICAgZm9ybUlkLFxuICAgICAgZmllbGRzLFxuICAgICAgaXNCdXR0b25EaXNhYmxlZCxcbiAgICAgIGlzTG9hZGluZyxcbiAgICAgIG1heG1pbmREYXRhLFxuICAgICAgTUlMRVNfQVBJLFxuICAgICAgb25TdWJtaXRGb3JSYXRlLFxuICAgICAgb25TdWJtaXRGb3JtLFxuICAgICAgb25WYWxpZGF0ZUFsbEZpZWxkcyxcbiAgICAgIHJlZGlyZWN0LFxuICAgICAgcmVxdWlyZWRGaWVsZHMsXG4gICAgICBzZWFyY2gsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBidXR0b25MYWJlbCA9IGZvcm1Db25maWdzLmJ1dHRvbl9sYWJlbDtcbiAgICBjb25zdCB7IHJhdGVMb29rdXBGb3JtIH0gPSBmb3JtQ29uZmlncztcbiAgICBjb25zdCB7IHN1Ym1pdCB9ID0gYWN0aXZlRGF0YTtcbiAgICBjb25zdCB7IGNsYXNzZXMsIHBvc2l0aW9uIH0gPSBzdWJtaXQ7XG4gICAgbGV0IGRpc3BsYXlUZXh0ID0gYnV0dG9uTGFiZWwgfHwgc3VibWl0LmRpc3BsYXlUZXh0IHx8ICdTdWJtaXQnO1xuICAgIGNvbnN0IGxhbmd1YWdlID0gYWN0aXZlRGF0YS5jb25maWdzID8gYWN0aXZlRGF0YS5jb25maWdzLmxhbmd1YWdlIDogbnVsbDtcbiAgICBkaXNwbGF5VGV4dCA9IGdldExvY2FsZVN0cmluZ1RleHQoZGlzcGxheVRleHQsICdmaWVsZCcsIGxhbmd1YWdlIHx8ICdlbicpO1xuXG4gICAgLy8gZW5hYmxlL2Rpc2FibGUgY2hpbGlwaXBlciBidXR0b24gaWYgY29ubmVjdGVkXG4gICAgaWYgKGlzQ29ubmVjdGVkVG9DaGlsaXBpcGVyKGZvcm1JZCkpIHtcbiAgICAgIGlmICghaXNCdXR0b25EaXNhYmxlZCkge1xuICAgICAgICBlbmFibGVDaGlsaXBpcGVyQnV0dG9uKGZvcm1JZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNhYmxlQ2hpbGlwaXBlckJ1dHRvbihmb3JtSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiA8U3VibWl0XG4gICAgICBhZGRyZXNzPXthZGRyZXNzfVxuICAgICAgYWN0aXZlRGF0YT17YWN0aXZlRGF0YX1cbiAgICAgIGJyaXRlVmVyaWZ5PXticml0ZVZlcmlmeX1cbiAgICAgIGNvbnRhaW5zR2RwckNvbnRhaW5lcj17Y29udGFpbnNHZHByQ29udGFpbmVyfVxuICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgIGRpYWxDb2RlPXtkaWFsQ29kZX1cbiAgICAgIGRpc3BsYXlUZXh0PXtkaXNwbGF5VGV4dH1cbiAgICAgIGVsb3F1YVBheWxvYWQ9e2Vsb3F1YVBheWxvYWR9XG4gICAgICBmb3JtQ29uZmlncz17Zm9ybUNvbmZpZ3N9XG4gICAgICBmb3JtSWQ9e2Zvcm1JZH1cbiAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgaXNCdXR0b25EaXNhYmxlZD17aXNCdXR0b25EaXNhYmxlZH1cbiAgICAgIGlzUmF0ZUxvb2t1cEZvcm09e3JhdGVMb29rdXBGb3JtIHx8IGZhbHNlfVxuICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICBpc0lubGluZT17aXNGb3JtRGlzcGxheUlubGluZShhY3RpdmVEYXRhKX1cbiAgICAgIGxvYWRlclBvc2l0aW9uPXtnZXRMb2FkZXJQb3NpdGlvbihhY3RpdmVEYXRhKX1cbiAgICAgIG1heG1pbmREYXRhPXttYXhtaW5kRGF0YX1cbiAgICAgIE1JTEVTX0FQST17TUlMRVNfQVBJfVxuICAgICAgb25TdWJtaXRGb3JSYXRlPXtvblN1Ym1pdEZvclJhdGV9XG4gICAgICBvblN1Ym1pdEZvcm09e29uU3VibWl0Rm9ybX1cbiAgICAgIG9uVmFsaWRhdGVBbGxGaWVsZHM9e29uVmFsaWRhdGVBbGxGaWVsZHN9XG4gICAgICBwb3NpdGlvbj17cG9zaXRpb259XG4gICAgICByZWRpcmVjdD17cmVkaXJlY3R9XG4gICAgICByZXF1aXJlZEZpZWxkcz17cmVxdWlyZWRGaWVsZHN9XG4gICAgICBzZWFyY2g9e3NlYXJjaH1cbiAgICAgIHNob3dMb2FkZXI9e2dldFNob3dMb2FkZXIoYWN0aXZlRGF0YSl9XG4gICAgLz47XG4gIH1cbn1cblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHN0YXRlOiBTdGF0ZSwgb3duUHJvcHM6IHsgZm9ybUlkOiBzdHJpbmcgfSkgPT4ge1xuICBjb25zdCB7IGZvcm1JZCB9ID0gb3duUHJvcHM7XG4gIHJldHVybiB7XG4gICAgYWRkcmVzczogc2V0VmFsaWRhdGlvbkFkZHJlc3Moc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkc1tmb3JtSWRdIHx8IFtdKSxcbiAgICBhY3RpdmVEYXRhOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLFxuICAgIGJyaXRlVmVyaWZ5OiBzdGF0ZS5icml0ZVZlcmlmeSB8fCBudWxsLFxuICAgIGNhbGxiYWNrOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLmNvbmZpZ3MgJiYgc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXS5jb25maWdzLmNhbGxiYWNrID8gc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXS5jb25maWdzLmNhbGxiYWNrIDogbnVsbCxcbiAgICBjb250YWluc0dkcHJDb250YWluZXI6IEJvb2xlYW4oc3RhdGUuZm9ybXMuZ2RwckZpZWxkICYmIHN0YXRlLmZvcm1zLmdkcHJGaWVsZFtmb3JtSWRdICYmIHN0YXRlLmZvcm1zLmdkcHJGaWVsZFtmb3JtSWRdID09PSAnc3VibWl0JyksXG4gICAgZGlhbENvZGU6IHN0YXRlLmZvcm1zLmRpYWxDb2RlICYmIHN0YXRlLmZvcm1zLmRpYWxDb2RlW2Zvcm1JZF0gPyBzdGF0ZS5mb3Jtcy5kaWFsQ29kZVtmb3JtSWRdIDogJysxJyxcbiAgICBmb3JtQ29uZmlnczogc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXS5jb25maWdzLFxuICAgIGZpZWxkczogc3RhdGUuZm9ybXMuY2FwdHVyZUZpZWxkc1tmb3JtSWRdLFxuICAgIHJlcXVpcmVkRmllbGRzOiBzdGF0ZS5mb3Jtcy5yZXF1aXJlZEZpZWxkc1tmb3JtSWRdLFxuICAgIGlzQWRvYmVTYXRlbGxpdGVCbG9ja2VkOiBzdGF0ZS5zeXN0ZW0uaXNBZG9iZVNhdGVsbGl0ZUJsb2NrZWQsXG4gICAgaXNCdXR0b25EaXNhYmxlZDogc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXSAmJiBzdGF0ZS5mb3Jtcy52YWxpZGF0ZWRGaWVsZHNbZm9ybUlkXSA/IGlzU3VibWl0RGlzYWJsZWQoc3RhdGUuZm9ybXMucmVxdWlyZWRGaWVsZHNbZm9ybUlkXSwgc3RhdGUuZm9ybXMudmFsaWRhdGVkRmllbGRzW2Zvcm1JZF0pIDogdHJ1ZSxcbiAgICBpc0xvYWRpbmc6IHN0YXRlLnN5c3RlbS5pc0xvYWRpbmcsXG4gICAgTUlMRVNfQVBJOiBzdGF0ZS5zeXN0ZW0uZW52U3RhdHMgIT09IG51bGwgPyBzdGF0ZS5zeXN0ZW0uZW52U3RhdHMuTUlMRVNfQVBJIDogbnVsbCxcbiAgICByZWRpcmVjdDogc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXSAmJiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLnRoYW5reW91ID8gc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXS50aGFua3lvdS5yZWRpcmVjdCA6IG51bGwsXG4gICAgc3VibWl0RmFpbGVkOiAoc3RhdGUubWlsZXMuZmFpbCAhPT0gbnVsbCksXG4gICAgc2VhcmNoOiBzdGF0ZS5zZWFyY2guc2VsZWN0ZWQsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gKGRpc3BhdGNoOiBEaXNwYXRjaCkgPT4gKHtcbiAgb25TdWJtaXRGb3JSYXRlOiAoXG4gICAgYWRkcmVzczogTUxUQXZhZm9ybUFkZHJlc3NPYmplY3QsXG4gICAgZmllbGRzOiBBcnJheTx7IGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT4sXG4gICAgZm9ybUNvbmZpZ3M6IEZvcm1EZWZhdWx0Q29uZmlncyxcbiAgICBmb3JtSWQ6IHN0cmluZyxcbiAgKSA9PiB7XG4gICAgZGlzcGF0Y2goc2V0TG9hZGluZ1N0YXJ0KG51bGwsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKSk7XG5cbiAgICBzdWJtaXRSYXRlTG9va3VwKFxuICAgICAgZGlzcGF0Y2gsXG4gICAgICBhZGRyZXNzLFxuICAgICAgZmllbGRzLFxuICAgICAgZm9ybUNvbmZpZ3MsXG4gICAgICBmb3JtSWQsXG4gICAgKTtcbiAgfSxcbiAgb25TdWJtaXRGb3JtOiBhc3luYyAoXG4gICAgZm9ybUlkOiBzdHJpbmcsXG4gICAgZm9ybUNvbmZpZ3M6IEZvcm1EZWZhdWx0Q29uZmlncyxcbiAgICBmaWVsZHM6IEFycmF5PHsgaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PixcbiAgICBzZWFyY2g6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nLFxuICAgICAgfSxcbiAgICB9LFxuICApID0+IHtcbiAgICB0cmlnZ2VyVGF0YXJpVHJhY2tFdmVudChmb3JtSWQpO1xuICAgIGlmICghd2luZG93LmF2YSB8fCAod2luZG93LmF2YSAmJiAhd2luZG93LmF2YS50cmlnZ2VyKSB8fCAod2luZG93LmF2YSAmJiB3aW5kb3cuYXZhLnRyaWdnZXIgJiYgdHlwZW9mIHdpbmRvdy5hdmEudHJpZ2dlciAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIGxvZ2dlcih7XG4gICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICBtc2dUeXBlOiAnU3VibWlzc2lvbkVycm9yJyxcbiAgICAgICAgZm9ybUlkLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ0Vycm9yIGR1cmluZyBNSUxFUyBzdWJtaXNzaW9uIHByb2Nlc3MuJyxcbiAgICAgICAgICBsb2NhdGlvbjogJ3NyYy9jb250YWluZXJzL3N1Ym1pdCcsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW1vdmVGcm9tV2luZG93QWJhbmRvbmVkKGZvcm1JZCk7XG5cbiAgICAvLyBDb21iaW5lIHRoZSB0d28gdmFsdWUgY29sbGVjdGlvbnMgdG8gb25lXG4gICAgbGV0IG5ld0ZpZWxkcyA9IGZpZWxkcztcbiAgICBuZXdGaWVsZHMgPSBzZXRTZWFyY2hGaWVsZFZhbHVlKHNlYXJjaCwgZm9ybUlkLCBmaWVsZHMpO1xuXG4gICAgZGlzcGF0Y2goc2V0TG9hZGluZ1N0YXJ0KG51bGwsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKSk7XG4gICAgaWYgKGZvcm1Db25maWdzLm5vU3VibWlzc2lvbikge1xuICAgICAgLy8gZG8gbm90IHN1Ym1pdCBidXQgY2FsbCB3aW5kb3cgY2FsbGJhY2tzIHdpdGggdGhlIGV4cGVjdGVkIGZpZWxkIHNldFxuICAgICAgYnlwYXNzU3VibWl0VG9DYWxsYmFja3MoXG4gICAgICAgIG5ld0ZpZWxkcyxcbiAgICAgICAgZm9ybUNvbmZpZ3MsXG4gICAgICAgIGZvcm1JZCxcbiAgICAgICk7XG4gICAgICBkaXNwYXRjaChzZXRMb2FkaW5nRmluaXNoKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXIgc3VibWlzc2lvblxuICAgIGxldCBuZXdDb25maWcgPSBmb3JtQ29uZmlncztcbiAgICBuZXdDb25maWcgPSBzZXRGaWVsZE92ZXJ3cml0ZUNvbmZpZ3MobmV3Q29uZmlnLCBuZXdGaWVsZHMpO1xuICAgIGlmIChmb3JtSWQgPT09ICdQQVJUTkVSU0lHTlVQTkVXJyAmJiBuZXdGaWVsZHMuZmlsdGVyKChmaWVsZCkgPT4gZmllbGQuaWQgPT09ICdvcHBfc3VidHlwZScpWzBdLnZhbHVlICE9PSAnRFNQJyAmJiAhbmV3RmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gJ2NsaWNrd3JhcF90ZXJtc19hY2NlcHRhbmNlJyAmJiBmaWVsZC52YWx1ZSA9PT0gJzEnKSkge1xuICAgICAgY29uc3QgbWFya2V0aW5nRmVlZGJhY2tOb3RlcyA9IG5ld0ZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09ICdtYXJrZXRpbmdfZmVlZGJhY2tfbm90ZXMnKTtcbiAgICAgIGlmICghbWFya2V0aW5nRmVlZGJhY2tOb3Rlcykge1xuICAgICAgICBuZXdGaWVsZHMgPSBuZXdGaWVsZHMuY29uY2F0KHsgaWQ6ICdtYXJrZXRpbmdfZmVlZGJhY2tfbm90ZXMnLCB2YWx1ZTogJ1Byb3NwZWN0IGRvZXMgbm90IGFncmVlIHRvIHRlcm1zIGFuZC9vciBoYXMgcXVlc3Rpb25zIGFib3V0IHRoZSB0ZXJtcy4nIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3RmllbGRzID0gbmV3RmllbGRzLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICBpZiAoZmllbGQuaWQgPT09ICdtYXJrZXRpbmdfZmVlZGJhY2tfbm90ZXMnKSByZXR1cm4geyBpZDogZmllbGQuaWQsIHZhbHVlOiBgJHtmaWVsZC52YWx1ZX1cXG5bTk9URV0gUHJvc3BlY3QgZG9lcyBub3QgYWdyZWUgdG8gdGVybXMgYW5kL29yIGhhcyBxdWVzdGlvbnMgYWJvdXQgdGhlIHRlcm1zLmAgfVxuICAgICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgTUlMRVNSZXNwb25zZSA9IGF3YWl0IHdpbmRvdy5hdmEudHJpZ2dlcihuZXdGaWVsZHMsIGZvcm1JZCwgbmV3Q29uZmlnLCBzZWFyY2gpO1xuICAgIGRpc3BhdGNoKHNldE1pbGVzU3VibWlzc2lvblN0YXR1cyhNSUxFU1Jlc3BvbnNlLmVycm9yLCBmb3JtSWQsIE1JTEVTUmVzcG9uc2UuY2xlYW5QYXlsb2FkLCBNSUxFU1Jlc3BvbnNlLnJlc3BvbnNlLCBNSUxFU1Jlc3BvbnNlLnN1Y2Nlc3MpKTtcbiAgICBkaXNwYXRjaChzZXRMb2FkaW5nRmluaXNoKCkpO1xuICAgIGlmIChNSUxFU1Jlc3BvbnNlLnJlc3BvbnNlLnZhbHVlICYmIE1JTEVTUmVzcG9uc2UucmVzcG9uc2UudmFsdWUuc3VibWlzc2lvbmxpbWl0Y291bnQgPj0gZm9ybUNvbmZpZ3Muc3VibWlzc2lvbkxpbWl0Q2FwKSB7XG4gICAgICBkaXNwYXRjaChzZXRTdWJtaXNzaW9uTGltaXRFeGNlZWVkZWQoZm9ybUlkKSk7XG4gICAgICAvLyBSZW1vdmUgaW5pdGlhbCBjYWxsIGZyb20gd2luZG93IHRvIGVuc3VyZSB0aGUgY291bnQgaXMgY29ycmVjdCBvbiByZWxvYWRcbiAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93LnN1Ym1pc3Npb25MaW1pdCAmJiB3aW5kb3cuc3VibWlzc2lvbkxpbWl0W2Zvcm1JZF0pIGRlbGV0ZSB3aW5kb3cuc3VibWlzc2lvbkxpbWl0W2Zvcm1JZF07XG4gICAgfVxuICB9LFxuICBvblZhbGlkYXRlQWxsRmllbGRzOiAoXG4gICAgZGlhbENvZGU6IHN0cmluZyxcbiAgICBmb3JtSWQ6IHN0cmluZyxcbiAgICBmaWVsZHM6IENhcHR1cmVkRmllbGRzLFxuICAgIHJlcXVpcmVkRmllbGRzOiBBcnJheTxzdHJpbmc+LFxuICAgIGFjdGl2ZURhdGE6IEZvcm1BdHRyaWJ1dGVzLFxuICApID0+IHtcbiAgICB2YWxpZGF0ZUFsbEZpZWxkcyhkaXNwYXRjaCwgZGlhbENvZGUsIGZvcm1JZCwgZmllbGRzLCByZXF1aXJlZEZpZWxkcywgYWN0aXZlRGF0YSk7XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcykoU3VibWl0Q29udGFpbmVyKTtcbiIsIi8vIEBmbG93IHN0cmljdC1sb2NhbFxuXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGxpbms6IHtcbiAgICB0eXBlOiBzdHJpbmcsIC8vIHNob3cgYnV0dG9uIG9yIHRleHQgd2l0aCBsaW5rXG4gICAgaHJlZjogc3RyaW5nIHwgbnVsbCxcbiAgICBkaXNwbGF5VGV4dDogc3RyaW5nLFxuICB9LFxufVxuY29uc3QgVGhhbmt5b3VMaW5rID0gKHsgbGluayB9OiBQcm9wcykgPT4ge1xuICBpZiAobGluay5ocmVmID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIDxGcmFnbWVudD5cbiAgICA8YSBocmVmPXtsaW5rLmhyZWZ9PlxuICAgICAge2xpbmsudHlwZSA9PT0gJ2J1dHRvbicgPyA8YnV0dG9uPntsaW5rLmRpc3BsYXlUZXh0fTwvYnV0dG9uPiA6IGxpbmsuZGlzcGxheVRleHQgfVxuICAgIDwvYT5cbiAgPC9GcmFnbWVudD47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaGFua3lvdUxpbms7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IENPTE9SUyBmcm9tICcuLi9jb25maWcvY29sb3JzJztcbmltcG9ydCBUSEVNRSBmcm9tICcuLi9jb25maWcvZm9ybS10aGVtZSc7XG5cbmltcG9ydCB7IHNldEZvbnRGYW1pbHkgfSBmcm9tICcuLi9oZWxwZXJzJztcblxuZXhwb3J0IGNvbnN0IFRoYW5reW91Q29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgZm9udC1mYW1pbHk6ICR7c2V0Rm9udEZhbWlseShUSEVNRS5mb250LmZhbWlseS5kZWZhdWx0KX07IC8qIEFycmF5IGlzIHBhc3NlZCBpbiAqL1xuICBmb250LXdlaWdodDogNTAwO1xuICBsaW5lLWhlaWdodDogMXJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbmA7XG5cbmV4cG9ydCBjb25zdCBUaGFua3lvdVRpdGxlID0gc3R5bGVkLmgzYFxuICBjb2xvcjogJHtDT0xPUlMuYmxhY2t9O1xuICBmb250LWZhbWlseTogXCJBcGVydHVyYVwiLHNvdXJjZS1zYW5zLXBybyxBcmlhbCxzYW5zLXNlcmlmLFxuICBmb250LXNpemU6IDEuNjI1ZW07XG4gIG1hcmdpbjogMDtcbmA7XG5cbmV4cG9ydCBjb25zdCBUaGFua3lvdVN1YlRpdGxlID0gc3R5bGVkLnBgXG4gIGNvbG9yOiAke0NPTE9SUy5ibGFja307XG4gIGZvbnQtZmFtaWx5OiBcIkFwZXJ0dXJhXCIsc291cmNlLXNhbnMtcHJvLEFyaWFsLHNhbnMtc2VyaWYsXG4gIGZvbnQtc2l6ZTogMS4wNjI1ZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjM3NWVtO1xuYDtcbiIsIi8vIEBmbG93IHN0cmljdC1sb2NhbFxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgVGhhbmt5b3VMaW5rIGZyb20gJy4vdGhhbmt5b3UtbGluayc7XG5cbmltcG9ydCB7IFRoYW5reW91Q29udGFpbmVyLCBUaGFua3lvdVRpdGxlLCBUaGFua3lvdVN1YlRpdGxlIH0gZnJvbSAnLi4vc3R5bGVkL2NvbXBvbmVudHMvdGhhbmt5b3UnO1xuXG50eXBlIFByb3BzID0ge1xuICBsaW5rPzoge1xuICAgIHR5cGU6IHN0cmluZywgLy8gc2hvdyBidXR0b24gb3IgdGV4dCB3aXRoIGxpbmtcbiAgICBocmVmOiBzdHJpbmcgfCBudWxsLFxuICAgIGRpc3BsYXlUZXh0OiBzdHJpbmcsXG4gIH0gfCBudWxsLFxuICBtZXNzYWdlPzogQXJyYXk8c3RyaW5nPiB8IHN0cmluZyB8IG51bGwsXG4gIHRpdGxlPzogc3RyaW5nIHwgbnVsbCxcbiAgc3ViVGl0bGU/OiBzdHJpbmcgfCBudWxsLFxufTtcblxuY29uc3QgVGhhbmt5b3VNZXNzYWdlID0gKHtcbiAgbWVzc2FnZSwgbGluaywgdGl0bGUsIHN1YlRpdGxlLFxufTogUHJvcHMpID0+IChcbiAgPFRoYW5reW91Q29udGFpbmVyIGNsYXNzTmFtZT0ndGhhbmt5b3UtbWVzc2FnZSc+XG4gICAgeyB0aXRsZSAhPT0gbnVsbCAmJiA8VGhhbmt5b3VUaXRsZT57IHRpdGxlIH08L1RoYW5reW91VGl0bGU+fVxuICAgIHsgc3ViVGl0bGUgIT09IG51bGwgJiYgPFRoYW5reW91U3ViVGl0bGU+eyBzdWJUaXRsZSB9PC9UaGFua3lvdVN1YlRpdGxlPn1cbiAgICB7IChtZXNzYWdlICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobWVzc2FnZSkpICYmIG1lc3NhZ2UubWFwKChtLCBpKSA9PiA8cCBrZXk9e2l9PnttfTwvcD4pfVxuICAgIHsgbWVzc2FnZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShtZXNzYWdlKSAmJiA8cD57bWVzc2FnZX08L3A+IH1cbiAgICB7bGluayAmJiBsaW5rICE9PSBudWxsICYmIDxUaGFua3lvdUxpbmsgbGluaz17bGlua30gLz59XG4gIDwvVGhhbmt5b3VDb250YWluZXI+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBUaGFua3lvdU1lc3NhZ2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBnZXRMb2NhbGVTdHJpbmdUZXh0IH0gZnJvbSAnLi4vaGVscGVycy9sYW5ndWFnZSc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCBUb1NMaW5rc0NvbnRhaW5lciBmcm9tICcuL2ZpZWxkcy90ZXJtcy1vZi1zZXJ2aWNlLWxpbmtzJztcbmltcG9ydCB7IFRlcm1zU2VjdGlvbiB9IGZyb20gJy4uL3N0eWxlZC9mb3JtJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdGVybXM6IHtcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgbGlua3M6IEFycmF5PHsgdGV4dDogc3RyaW5nLCBocmVmOiBzdHJpbmd9PixcbiAgfSxcbiAgaXNMYW5ndWFnZTogc3RyaW5nLFxufTtcblxuY29uc3QgVGVybXNUZXh0ID0gKHsgdGVybXMsIGlzTGFuZ3VhZ2UgfTogUHJvcHMpID0+IHtcbiAgY29uc3QgeyBsaW5rcywgdGV4dCB9ID0gdGVybXM7XG4gIGNvbnN0IG1lc3NhZ2UgPSBnZXRMb2NhbGVTdHJpbmdUZXh0KHRleHQsICd0ZXJtcycsIGlzTGFuZ3VhZ2UpO1xuXG4gIHJldHVybiAoXG4gICAgPFRlcm1zU2VjdGlvbj5cbiAgICAgIDxwPiB7bWVzc2FnZX0ge2xpbmtzICYmIDxUb1NMaW5rc0NvbnRhaW5lciBsaW5rcz17bGlua3N9IC8+fSA8L3A+XG4gICAgPC9UZXJtc1NlY3Rpb24+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUZXJtc1RleHQ7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG4vLyBTdHlsZXNcbmltcG9ydCB7IEFwcENvbnRhaW5lciwgQXZhRm9ybSwgVGVtcGxhdGVFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9zdHlsZWQvY29udGFpbmVycy9hcHAnO1xuaW1wb3J0IHsgU3VibWlzc2lvbkVycm9yQ29udGFpbmVyIH0gZnJvbSAnLi4vc3R5bGVkL2Zvcm0nO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBGb3JtQXR0cmlidXRlcyB9IGZyb20gJy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoIH0gZnJvbSAnLi4vbGliL3R5cGVzL2FjdGlvbnMnO1xuaW1wb3J0IHR5cGUgeyBNaWxlc0ZhaWxlZFN0YXRlLCBNaWxlc1N1Y2Nlc3NTdGF0ZSwgU3RhdGUgfSBmcm9tICcuLi9saWIvdHlwZXMvcmVkdWNlci1zdGF0ZXMnO1xuaW1wb3J0IHR5cGUgeyBVc2VySW5mbyB9IGZyb20gJy4uL2xpYi90eXBlcy91c2VyJztcblxuLy8gQWN0aW9uc1xuaW1wb3J0IHsgc2V0QWN0aXZlRm9ybSB9IGZyb20gJy4uL2xpYi9hY3Rpb25zJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgaXNDb25uZWN0ZWRUb0NoaWxpcGlwZXIgfSBmcm9tICcuLi9oZWxwZXJzL2NoaWxpcGlwZXInO1xuaW1wb3J0IHsgZm9ybWF0Rm9ybVRlbXBsYXRlTmFtZSwgaXNGaWVsZERpc2FibGVkIH0gZnJvbSAnLi4vaGVscGVycy9mb3Jtcyc7XG5pbXBvcnQge1xuICBnZXRMb2FkZXJQb3NpdGlvbixcbiAgZ2V0T2Zmc2V0VmlldyxcbiAgZ2V0U2hvd0xvYWRlcixcbiAgaXNGb3JtRGlzcGxheUlubGluZSxcbn0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBhdmFmb3JtRW5nYWdlbWVudEFuYWx5dGljc0NhbGwsIGdldFBhcmFtRnJvbUF2YVRhZyB9IGZyb20gJy4uL2hlbHBlcnMvYW5hbHl0aWNzJztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSAnLi9lcnJvci1ib3VuZGFyeSc7XG5pbXBvcnQgTG9hZGVyIGZyb20gJy4uL2NvbXBvbmVudHMvbG9hZGVyJztcbmltcG9ydCBGb3JtSGVhZGVyIGZyb20gJy4vZm9ybS1oZWFkZXInO1xuaW1wb3J0IEZvcm1Mb2FkaW5nRXJyb3IgZnJvbSAnLi4vY29tcG9uZW50cy9mb3JtLWxvYWQtZXJyb3InO1xuaW1wb3J0IEZpZWxkcyBmcm9tICcuL2ZpZWxkcyc7XG5pbXBvcnQgU3VibWl0QnV0dG9uQ29udGFpbmVyIGZyb20gJy4vc3VibWl0JztcbmltcG9ydCBTeXN0ZW1TdWJtaXNzaW9uRXJyb3IgZnJvbSAnLi4vY29tcG9uZW50cy9zeXN0ZW0tZXJyb3ItbWVzc2FnZSc7XG5pbXBvcnQgVGhhbmt5b3UgZnJvbSAnLi4vY29tcG9uZW50cy90aGFua3lvdSc7XG5pbXBvcnQgVGVybXMgZnJvbSAnLi4vY29tcG9uZW50cy90ZXJtcyc7XG5cbi8vIExvY2FsIFR5cGVzXG50eXBlIFN0YXRlUHJvcHMgPSB7XG4gIGFjdGl2ZURhdGE6IEZvcm1BdHRyaWJ1dGVzLFxuICBhY3RpdmVGb3JtOiBzdHJpbmcsXG4gIGhhc1N5c3RlbUVycm9yOiBib29sZWFuLFxuICBpbml0U3RhdHVzOiB7IG1lc3NhZ2U6IHN0cmluZyB8IG51bGwsIGZvcm1OYW1lOiBzdHJpbmcgfCBudWxsIH0gfCBudWxsLFxuICBpbml0U3VjY2VzczogYm9vbGVhbixcbiAgaXNEaXNhYmxlZDogc3RyaW5nLFxuICBpc0xvYWRpbmc6IGJvb2xlYW4sXG4gIHN1Ym1pdEZhaWxlZDogTWlsZXNGYWlsZWRTdGF0ZSxcbiAgc3VibWl0U3VjY2VzczogTWlsZXNTdWNjZXNzU3RhdGUsXG59XG5cbnR5cGUgRGlzcGF0Y2hQcm9wcyA9IHtcbiAgb25TZXRBY3RpdmVGb3JtOiAoZm9ybUlkOiBzdHJpbmcpID0+IHZvaWQsXG59XG5cbnR5cGUgRW50cnlQcm9wcyA9IERpc3BhdGNoUHJvcHMgJiBTdGF0ZVByb3BzICYge1xuICBhY3RpdmVEYXRhOiBGb3JtQXR0cmlidXRlcywgLy8gRmxvdyBuZWVkc1xuICBmb3JtSWQ6IHN0cmluZyxcbiAgaXNNb2RhbDogYm9vbGVhbixcbiAgaGFzVGVybXM6IGJvb2xlYW4sXG4gIGxhbmd1YWdlOiBzdHJpbmcsXG4gIHVzZXJJbmZvOiBVc2VySW5mbyxcbiAgZGlzYWJsZUhpZGVGaWVsZHM6IGJvb2xlYW4sXG4gIHN1Ym1pdEZhaWxlZDogTWlsZXNGYWlsZWRTdGF0ZSwgLy8gRmxvdyBuZWVkc1xuICBzdWJtaXRTdWNjZXNzOiBNaWxlc1N1Y2Nlc3NTdGF0ZSwgLy8gRmxvdyBuZWVkc1xufTtcblxudHlwZSBMb2NhbFN0YXRlID0ge1xuICBpbml0aWFsRm9ybVRyaWdnZXI6IHN0cmluZyxcbn07XG5cbmNsYXNzIEVudHJ5IGV4dGVuZHMgQ29tcG9uZW50PEVudHJ5UHJvcHMsIExvY2FsU3RhdGU+IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaW5pdGlhbEZvcm1UcmlnZ2VyOiAnZGlzZW5nYWdlZCcsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMuaW5pdFN0YXR1cyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsOyAvLyBTdG9wIHByb2Nlc3NpbmcgaXMgaW5pdFN0YXR1cyBoYXMgbm90IGJlZW4gc2V0XG4gICAgY29uc3Qge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgYWN0aXZlRGF0YSxcbiAgICAgIGFjdGl2ZUZvcm0sXG4gICAgICBpbml0U3RhdHVzLFxuICAgICAgaW5pdFN1Y2Nlc3MsXG4gICAgICBpc0Rpc2FibGVkLFxuICAgICAgaXNMb2FkaW5nLFxuICAgICAgaXNNb2RhbCxcbiAgICAgIGhhc1Rlcm1zLFxuICAgICAgbGFuZ3VhZ2UsXG4gICAgICBvblNldEFjdGl2ZUZvcm0sXG4gICAgICBzdWJtaXRGYWlsZWQsXG4gICAgICBzdWJtaXRTdWNjZXNzLFxuICAgICAgdXNlckluZm8sXG4gICAgICBkaXNhYmxlSGlkZUZpZWxkcyxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGZvcm1JZCA9IGZvcm1hdEZvcm1UZW1wbGF0ZU5hbWUodGhpcy5wcm9wcy5mb3JtSWQpO1xuICAgIC8vIGNvbnN0IGZvcm1UZW1wbGF0ZSA9IGZvcm1hdEZvcm1UZW1wbGF0ZU5hbWUoZm9ybUlkKTtcblxuICAgIGNvbnN0IGlzSW5saW5lID0gaXNGb3JtRGlzcGxheUlubGluZShhY3RpdmVEYXRhKTtcbiAgICBjb25zdCBvZmZzZXRWaWV3ID0gZ2V0T2Zmc2V0VmlldyhhY3RpdmVEYXRhKTtcbiAgICBjb25zdCBpc0FjdGl2ZUZvcm0gPSBhY3RpdmVGb3JtID09PSBmb3JtSWQ7XG4gICAgY29uc3QgYWN0aXZlQ2xhc3MgPSBpc0FjdGl2ZUZvcm0gPyAnIGFjdGl2ZScgOiAnJztcbiAgICBjb25zdCB7IGNvbmZpZ3MgfSA9IGFjdGl2ZURhdGE7XG5cbiAgICBpZiAoc3VibWl0U3VjY2VzcyAmJiBjb25maWdzKSB7XG4gICAgICBpZiAoY29uZmlncy5zdWJtaXNzaW9uTGltaXRJZCAmJiBzdWJtaXRTdWNjZXNzLnJlc3BvbnNlICYmIHN1Ym1pdFN1Y2Nlc3MucmVzcG9uc2UudmFsdWUgJiYgc3VibWl0U3VjY2Vzcy5yZXNwb25zZS52YWx1ZS5zdWJtaXNzaW9ubGltaXRjb3VudCA8PSBjb25maWdzLnN1Ym1pc3Npb25MaW1pdENhcCAmJiBjb25maWdzLnN1Ym1pc3Npb25MaW1pdFRoYW5rWW91TWVzc2FnZSkgcmV0dXJuICg8cCBjbGFzc05hbWU9J3N1Ym1pc3Npb25saW1pdC10aGFua3lvdSc+e2NvbmZpZ3Muc3VibWlzc2lvbkxpbWl0VGhhbmtZb3VNZXNzYWdlfTwvcD4pO1xuXG4gICAgICBpZiAoIWNvbmZpZ3Muc3VibWlzc2lvbkxpbWl0SWQgJiYgYWN0aXZlRGF0YS50aGFua3lvdSAmJiAoKGFjdGl2ZURhdGEudGhhbmt5b3UudGl0bGUgJiYgYWN0aXZlRGF0YS50aGFua3lvdS50aXRsZSAhPT0gbnVsbCkgfHwgKGFjdGl2ZURhdGEudGhhbmt5b3UubWVzc2FnZSAmJiBhY3RpdmVEYXRhLnRoYW5reW91Lm1lc3NhZ2UgIT09IG51bGwpKSAmJiAoIWFjdGl2ZURhdGEudGhhbmt5b3UucmVkaXJlY3QgfHwgKGFjdGl2ZURhdGEucmVkaXJlY3QgIT09IG51bGwgJiYgYWN0aXZlRGF0YS5yZWRpcmVjdCAhPT0gJy5odG1sJykpICYmICFpc0Nvbm5lY3RlZFRvQ2hpbGlwaXBlcihmb3JtSWQpKSByZXR1cm4gPFRoYW5reW91IHsgLi4uYWN0aXZlRGF0YS50aGFua3lvdX0gLz47XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxFcnJvckJvdW5kYXJ5IGlzTGFuZ3VhZ2U9e2xhbmd1YWdlfT5cbiAgICAgICAgezxGcmFnbWVudD5cbiAgICAgICAgICB7aXNMb2FkaW5nICYmIGlzQWN0aXZlRm9ybSAmJiA8TG9hZGVyIGxvY2F0aW9uPXsnZGVmYXVsdCd9XG4gICAgICAgICAgICBzaG93TG9hZGVyPXtnZXRTaG93TG9hZGVyKGFjdGl2ZURhdGEpfVxuICAgICAgICAgICAgbG9hZGVyUG9zaXRpb249e2dldExvYWRlclBvc2l0aW9uKGFjdGl2ZURhdGEpfVxuICAgICAgICAgIC8+fVxuICAgICAgICAgIHthY3RpdmVEYXRhICYmIGFjdGl2ZURhdGEudGVtcGxhdGVFcnJvciAmJiA8VGVtcGxhdGVFcnJvck1lc3NhZ2U+e2FjdGl2ZURhdGEudGVtcGxhdGVFcnJvcn08L1RlbXBsYXRlRXJyb3JNZXNzYWdlPn1cbiAgICAgICAgICA8QXBwQ29udGFpbmVyIGtleT17Zm9ybUlkfSBkYXRhLWF2YWZvcm0tcm9vdD17Zm9ybUlkfSBsb2FkaW5nVHJhbnNpdGlvbj17KGFjdGl2ZUZvcm0gPT09IGZvcm1JZCAmJiBpc0xvYWRpbmcgJiYgIWdldFNob3dMb2FkZXIoYWN0aXZlRGF0YSkpfT5cbiAgICAgICAgICB7aXNEaXNhYmxlZCAmJiBpc0Rpc2FibGVkID09PSAnZGlzYWJsZWQnICYmIDxGcmFnbWVudD5cbiAgICAgICAgICAgIDxMb2FkZXIgbG9jYXRpb249eydkZWZhdWx0J31cbiAgICAgICAgICAgICAgc2hvd0xvYWRlcj17Z2V0U2hvd0xvYWRlcihhY3RpdmVEYXRhKX1cbiAgICAgICAgICAgICAgbG9hZGVyUG9zaXRpb249e2dldExvYWRlclBvc2l0aW9uKGFjdGl2ZURhdGEpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0ZyYWdtZW50Pn1cbiAgICAgICAgICAgIHtpbml0U3VjY2VzcyA/IDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgeyFpc01vZGFsICYmIDxGb3JtSGVhZGVyIGZvcm1JZD17Zm9ybUlkfSAvPn1cbiAgICAgICAgICAgICAgPEF2YUZvcm1cbiAgICAgICAgICAgICAgICBuYW1lPXtmb3JtSWR9XG4gICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPSdvZmYnXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtmb3JtSWR9IGF2YWZvcm0tZm9ybSR7YWN0aXZlQ2xhc3N9YH1cbiAgICAgICAgICAgICAgICBmb3JtSWQ9e2Zvcm1JZH1cbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgIGlzSW5saW5lPXtpc0lubGluZX1cbiAgICAgICAgICAgICAgICBrZXk9e2Zvcm1JZH1cbiAgICAgICAgICAgICAgICBsb2FkZXJQb3NpdGlvbj17Z2V0TG9hZGVyUG9zaXRpb24oYWN0aXZlRGF0YSl9XG4gICAgICAgICAgICAgICAgb2Zmc2V0PXtvZmZzZXRWaWV3fVxuICAgICAgICAgICAgICAgIG9uRm9jdXM9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmFjdGl2ZUZvcm0gIT09IGZvcm1JZCkge1xuICAgICAgICAgICAgICAgICAgICBvblNldEFjdGl2ZUZvcm0oZm9ybUlkKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgZm9ybSBpcyBpbiBhIHN0YXRlIG9mICdkaXNlbmdhZ2VkJy9oYXMgbm90IGJlZW4gdHJpZ2dlcmVkIGZvciB0aGUgZmlyc3QgdGltZSwgY29tcHV0ZSBhcmdzIGFuZCBmaXJlIGF2YWZvcm0gaW5pdGlhbCBpbnRlcmFjdGlvbiBhbmFseXRpY3MgY2FsbFxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbEZvcm1UcmlnZ2VyID09PSAnZGlzZW5nYWdlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgREVGQVVMVF9DQU1QQUlHTl9JRCA9ICc3MDEwYjAwMDAwMUV3akxBQVMnO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZVZhcjE1ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlVmFyMTE1ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVWYXI4MCA9IHRoaXMucHJvcHMuaXNNb2RhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cgJiYgd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmID8gd2luZG93LmxvY2F0aW9uLmhyZWYgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGVhblVybCA9IHVybCAhPT0gbnVsbCA/IHVybC5zcGxpdCgnPycpWzBdIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IHdpbmRvdy5VUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FtcGFpZ25JZCA9IGdldFBhcmFtRnJvbUF2YVRhZygnY2FtcGFpZ25JRCcpIHx8IHBhcmFtcy5nZXQoJ0NhbXBhaWduSUQnKSB8fCBwYXJhbXMuZ2V0KCdjYW1wYWlnbklEJykgfHwgcGFyYW1zLmdldCgnY2FtcGFpZ25pZCcpIHx8IGNvbmZpZ3MuY2FtcGFpZ25faWQgfHwgREVGQVVMVF9DQU1QQUlHTl9JRDtcbiAgICAgICAgICAgICAgICAgICAgICBlVmFyMTUgPSBjb25maWdzLmNvbnRhY3RfbWV0aG9kID8gY29uZmlncy5jb250YWN0X21ldGhvZCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgIGVWYXIxNSA9IGNvbmZpZ3Mub2ZmZXIgPyBgJHtlVmFyMTV9PiR7Y29uZmlncy5vZmZlcn1gIDogYCR7ZVZhcjE1fT5gO1xuICAgICAgICAgICAgICAgICAgICAgIGVWYXIxNSA9IGNvbmZpZ3MucG9pID8gYCR7ZVZhcjE1fT4ke2NvbmZpZ3MucG9pfWAgOiBgJHtlVmFyMTV9PmA7XG4gICAgICAgICAgICAgICAgICAgICAgZVZhcjE1ID0gY2FtcGFpZ25JZCA/IGAke2VWYXIxNX0+JHtjYW1wYWlnbklkfWAgOiBgJHtlVmFyMTV9PmA7XG4gICAgICAgICAgICAgICAgICAgICAgZVZhcjE1ID0gY2xlYW5VcmwgPyBgJHtlVmFyMTV9PiR7Y2xlYW5Vcmx9YCA6IGAke2VWYXIxNX0+YDtcbiAgICAgICAgICAgICAgICAgICAgICBlVmFyMTE1ID0gY29uZmlncy5wb2kgPyBjb25maWdzLnBvaSA6ICdudWxsJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhdmFmb3JtRW5nYWdlbWVudEFuYWx5dGljc0NhbGwodGhpcy5wcm9wcy5mb3JtSWQsIGVWYXIxNSwgZVZhcjExNSwgZVZhcjgwKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGluaXRpYWxGb3JtVHJpZ2dlciB0byBlbmdhZ2VkLCB0aGlzIGxvZ2ljIHdvbid0IGJlIGNhbGxlZCBhZ2FpbiBkdXJpbmcgdGhlIGNvbXBvbmVudCBsaWZlY3ljbGUgdW5sZXNzIHRoZSBjb21wb25lbnQgdW5tb3VudHMsIHRoZW4gcmVtb3VudHNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsRm9ybVRyaWdnZXI6ICdlbmdhZ2VkJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsgKCF1c2VySW5mbyB8fCBkaXNhYmxlSGlkZUZpZWxkcykgJiYgPEZpZWxkcyBmb3JtSWQ9e2Zvcm1JZH0gLz4gfVxuICAgICAgICAgICAgICAgIHsgc3VibWl0RmFpbGVkICYmIChhY3RpdmVGb3JtICE9PSBudWxsICYmIGFjdGl2ZUZvcm0gPT09IGZvcm1JZCkgJiYgIWlzSW5saW5lICYmIDxTdWJtaXNzaW9uRXJyb3JDb250YWluZXIgY2xhc3NOYW1lPSdzdWJtaXQtZXJyb3ItY29udGFpbmVyJz5cbiAgICAgICAgICAgICAgICAgIDxTeXN0ZW1TdWJtaXNzaW9uRXJyb3IgaXNMYW5ndWFnZT17bGFuZ3VhZ2V9IC8+XG4gICAgICAgICAgICAgICAgICA8L1N1Ym1pc3Npb25FcnJvckNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPFN1Ym1pdEJ1dHRvbkNvbnRhaW5lciBmb3JtSWQ9e2Zvcm1JZH0gLz5cbiAgICAgICAgICAgICAgPC9BdmFGb3JtPlxuICAgICAgICAgICAgICB7IHN1Ym1pdEZhaWxlZCAmJiBpc0lubGluZSAmJiAoYWN0aXZlRm9ybSAhPT0gbnVsbCAmJiBhY3RpdmVGb3JtID09PSBmb3JtSWQpICYmIDxTdWJtaXNzaW9uRXJyb3JDb250YWluZXJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPSdzdWJtaXQtZXJyb3ItY29udGFpbmVyJ1xuICAgICAgICAgICAgICBpc0lubGluZT17aXNJbmxpbmV9ID5cbiAgICAgICAgICAgICAgICAgIDxTeXN0ZW1TdWJtaXNzaW9uRXJyb3IgaXNMYW5ndWFnZT17bGFuZ3VhZ2V9IC8+XG4gICAgICAgICAgICAgICAgPC9TdWJtaXNzaW9uRXJyb3JDb250YWluZXI+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgeyBoYXNUZXJtcyAmJiA8VGVybXMgdGVybXM9e2FjdGl2ZURhdGEudGVybXN9IGlzTGFuZ3VhZ2U9e2xhbmd1YWdlfT48L1Rlcm1zPiB9XG4gICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICAgIDogPEZyYWdtZW50Pntpbml0U3RhdHVzICE9PSBudWxsICYmIDxGb3JtTG9hZGluZ0Vycm9yIGluaXRTdGF0dXM9e2luaXRTdGF0dXN9IGZvcm1JZD17Zm9ybUlkfSBpc0xhbmd1YWdlPXtsYW5ndWFnZX0gLz59PC9GcmFnbWVudD59XG4gICAgICAgICAgPC9BcHBDb250YWluZXI+XG4gICAgICAgIDwvRnJhZ21lbnQ+fVxuICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHN0YXRlOiBTdGF0ZSwgb3duUHJvcHM6IHsgZm9ybUlkOiBzdHJpbmcgfSkgPT4ge1xuICBsZXQgeyBmb3JtSWQgfSA9IG93blByb3BzO1xuICBmb3JtSWQgPSBmb3JtYXRGb3JtVGVtcGxhdGVOYW1lKGZvcm1JZCk7XG4gIGNvbnN0IHsgY29uZmlncyB9ID0gc3RhdGUuZm9ybXMgJiYgc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXMgJiYgc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXSA/IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0gOiB7IGNvbmZpZ3M6IHt9IH07XG4gIHJldHVybiB7XG4gICAgYWN0aXZlRGF0YTogc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXSxcbiAgICBhY3RpdmVGb3JtOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3JtLFxuICAgIGhhc1N5c3RlbUVycm9yOiAoc3RhdGUuc3lzdGVtLnN5c3RlbUVycm9yW2Zvcm1JZF0gJiYgc3RhdGUuc3lzdGVtLnN5c3RlbUVycm9yW2Zvcm1JZF0gIT09IG51bGwpLFxuICAgIGhhc1Rlcm1zOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0udGVybXMsXG4gICAgaXNEaXNhYmxlZDogaXNGaWVsZERpc2FibGVkKHN0YXRlLmZvcm1zLnN1Ym1pc3Npb25saW1pdFtmb3JtSWRdLCBjb25maWdzKSxcbiAgICBpbml0U3VjY2Vzczogc3RhdGUuZm9ybXMuaW5pdFtmb3JtSWRdLFxuICAgIGluaXRTdGF0dXM6IHN0YXRlLmZvcm1zLmluaXRTdGF0dXNbZm9ybUlkXSxcbiAgICBpc0xvYWRpbmc6IHN0YXRlLnN5c3RlbS5pc0xvYWRpbmcsXG4gICAgaXNNb2RhbDogc3RhdGUuZm9ybXMubW9kYWxGb3Jtcy5pbmNsdWRlcyhmb3JtSWQpIHx8IEJvb2xlYW4oc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXSAmJiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLmNvbmZpZ3MgJiYgc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXS5jb25maWdzLnRoZW1lICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uY29uZmlncy50aGVtZS5sYXlvdXQgPT09ICdtb2RhbCcpLFxuICAgIGxhbmd1YWdlOiBzdGF0ZS5mb3JtcyAmJiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3JtcyAmJiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uY29uZmlncyAmJiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLmNvbmZpZ3MubGFuZ3VhZ2UgPyBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLmNvbmZpZ3MubGFuZ3VhZ2UgOiAndXMnLFxuICAgIHN1Ym1pdEZhaWxlZDogc3RhdGUubWlsZXMuZmFpbCAmJiBzdGF0ZS5taWxlcy5mYWlsW2Zvcm1JZF0gPyBzdGF0ZS5taWxlcy5mYWlsW2Zvcm1JZF0gOiBudWxsLFxuICAgIHN1Ym1pdFN1Y2Nlc3M6IHN0YXRlLm1pbGVzLnN1Y2Nlc3MgJiYgc3RhdGUubWlsZXMuc3VjY2Vzc1tmb3JtSWRdID8gc3RhdGUubWlsZXMuc3VjY2Vzc1tmb3JtSWRdIDogbnVsbCxcbiAgfTtcbn07XG5cbmNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IChkaXNwYXRjaDogRGlzcGF0Y2gpOiBEaXNwYXRjaFByb3BzID0+ICh7XG4gIG9uU2V0QWN0aXZlRm9ybTogKGZvcm1JZDogc3RyaW5nKSA9PiBkaXNwYXRjaChzZXRBY3RpdmVGb3JtKGZvcm1JZCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMpKEVudHJ5KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IEJSRUFLUE9JTlQgZnJvbSAnLi4vY29uc3RhbnRzL2JyZWFrcG9pbnRzJztcblxuZXhwb3J0IGNvbnN0IE1vZGFsQ29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgYmFja2dyb3VuZDogI0ZGRjtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6ICR7KHByb3BzOiB7IHRvZ2dsZTogYm9vbGVhbn0pID0+IChwcm9wcy50b2dnbGUgPyAnZmxleCcgOiAnbm9uZScpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgdG9wOiAkeyhwcm9wczogeyBwb3NpdGlvblRvcDogbnVtYmVyfSkgPT4gKHByb3BzLnBvc2l0aW9uVG9wID8gcHJvcHMucG9zaXRpb25Ub3AgOiAnMzAnKX1weDtcbiAgbWF4LXdpZHRoOiA2MDBweDtcbiAgbWFyZ2luLXRvcDogMzBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTAlO1xuICBsZWZ0OiA1MCU7XG4gIG1pbi13aWR0aDogMzMwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgd2lkdGg6IDEwMCU7XG4gIHotaW5kZXg6IDkwMTtcblxuICA+ICoge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgcGFkZGluZzogMzBweDtcbiAgICB9XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAke0JSRUFLUE9JTlQucGhvbmV9cHgpIHtcbiAgICBtYXgtd2lkdGg6IDM2MHB4O1xuICAgID4gKjpsYXN0LWNoaWxkIHtcbiAgICAgIHBhZGRpbmc6IDE1cHggMTVweCAzMHB4O1xuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IE1vZGFsSGVhZGVyID0gc3R5bGVkLmRpdmBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogI0YxRjFGMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcblxuICAqIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICA+ICoge1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxuXG4gIGJ1dHRvbiB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY29sb3I6ICNGNjA7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMDtcbiAgICBwYWRkaW5nOiAxOHB4IDE1cHggMjJweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBUaXRsZUNvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIHBhZGRpbmc6IDE1cHg7XG5gO1xuXG5leHBvcnQgY29uc3QgRGVzY3JpcHRpb24gPSBzdHlsZWQucGBgO1xuXG5leHBvcnQgY29uc3QgSGVhZGVyVGl0bGUgPSBzdHlsZWQuaDNgYDtcblxuZXhwb3J0IGNvbnN0IE5vQ2xpY2sgPSBzdHlsZWQuZGl2YFxuICBiYWNrZ3JvdW5kOiAjMDAwO1xuICBkaXNwbGF5OiAkeyhwcm9wczogeyB0b2dnbGU6IGJvb2xlYW59KSA9PiAocHJvcHMudG9nZ2xlID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBvcGFjaXR5OiAuODtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTgwJSk7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAxJTtcbiAgaGVpZ2h0OiAxMDElO1xuICB6LWluZGV4OiA5MDA7XG5gO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLy8gU3R5bGVzXG5pbXBvcnQgeyBIZWFkZXJUaXRsZSwgTW9kYWxIZWFkZXIsIFRpdGxlQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vc3R5bGVkL21vZGFsJztcblxuLy8gdHlwZXNcbmltcG9ydCB0eXBlIHsgTW9kYWxIZWFkZXJQcm9wcyB9IGZyb20gJy4uLy4uL2NvbnRhaW5lcnMvbW9kYWwvaGVhZGVyJztcblxuZXhwb3J0IGNvbnN0IE1vZGFsSGVhZGVyQ29tcG9uZW50cyA9ICh7IGFjdGl2ZURhdGEsIG9uVG9nZ2xlTW9kYWwsIGhhc0JlZW5TdWJtaXR0ZWQgfTogTW9kYWxIZWFkZXJQcm9wcykgPT4ge1xuICBpZiAoIWFjdGl2ZURhdGEpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHsgdGl0bGUgfSA9IGFjdGl2ZURhdGE7XG5cbiAgcmV0dXJuIDxNb2RhbEhlYWRlcj5cbiAgICA8VGl0bGVDb250YWluZXI+XG4gICAgICB7dGl0bGUgJiYgPEhlYWRlclRpdGxlPnt0aXRsZX08L0hlYWRlclRpdGxlPn1cbiAgICA8L1RpdGxlQ29udGFpbmVyPlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIGRhdGEtZGlzbWlzcz0nbW9kYWwnIG9uQ2xpY2s9eygpID0+IG9uVG9nZ2xlTW9kYWwoaGFzQmVlblN1Ym1pdHRlZCl9Png8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9Nb2RhbEhlYWRlcj47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2RhbEhlYWRlckNvbXBvbmVudHM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgTW9kYWxIZWFkZXJDb21wb25lbnQgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2RhbC9oZWFkZXInO1xuXG4vLyBUeXBlc1xuaW1wb3J0IHR5cGUgeyBTdGF0ZSB9IGZyb20gJy4uLy4uL2xpYi90eXBlcy9yZWR1Y2VyLXN0YXRlcyc7XG5pbXBvcnQgdHlwZSB7IFNpbmdsZUF2YUZvcm0gfSBmcm9tICcuLi8uLi9saWIvdHlwZXMvZm9ybXMnO1xuXG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoUHJvcHMsIFN0YXRlUHJvcHMgfSBmcm9tICcuLi9mb3JtLW1vZGFsJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcbmltcG9ydCB7IG1hcFN0YXRlVG9Qcm9wcyBhcyBwYXJlbnRNYXBTdGF0ZSwgbWFwRGlzcGF0Y2hUb1Byb3BzIGFzIHBhcmVudERpc3BhdGNoIH0gZnJvbSAnLi4vZm9ybS1tb2RhbCc7XG5cbmV4cG9ydCB0eXBlIE1vZGFsSGVhZGVyUHJvcHMgPSBTdGF0ZVByb3BzICYgRGlzcGF0Y2hQcm9wcyAmIHtcbiAgYWN0aXZlRGF0YTogU2luZ2xlQXZhRm9ybSxcbn07XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IChzdGF0ZTogU3RhdGUsIG93blByb3BzOiB7IGZvcm1JZDogc3RyaW5nIH0pID0+IHtcbiAgY29uc3QgeyBmb3JtSWQgfSA9IG93blByb3BzO1xuICByZXR1cm4ge1xuICAgIC4uLnBhcmVudE1hcFN0YXRlKHN0YXRlLCBvd25Qcm9wcyksXG4gICAgYWN0aXZlRGF0YTogc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBwYXJlbnREaXNwYXRjaCkoTW9kYWxIZWFkZXJDb21wb25lbnQpO1xuIiwiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG4vLyBJbXBvcnQgVHlwZXNcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICcuLi9saWIvdHlwZXMvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcbmltcG9ydCB0eXBlIHsgVXNlckluZm8gfSBmcm9tICcuLi9saWIvdHlwZXMvdXNlcic7XG5cbi8vIEFjdGlvbnNcbmltcG9ydCB7IGNsZWFyRm9ybVN1Ym1pdCwgLyogcmVzZXRGb3JtLCAqL3RvZ2dsZU1vZGFsIH0gZnJvbSAnLi4vbGliL2FjdGlvbnMnO1xuXG4vLyBDb250YWluZXJzXG5pbXBvcnQgRW50cnkgZnJvbSAnLi9lbnRyeSc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWN5Y2xlXG5pbXBvcnQgTW9kYWxIZWFkZXJDb250YWluZXIgZnJvbSAnLi9tb2RhbC9oZWFkZXInO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tICcuL2Vycm9yLWJvdW5kYXJ5JztcblxuLy8gU3R5bGVzXG5pbXBvcnQgeyBNb2RhbEJ1dHRvbiB9IGZyb20gJy4uL3N0eWxlZC9idXR0b25zJztcbmltcG9ydCB7IE1vZGFsQ29udGFpbmVyLCBOb0NsaWNrIH0gZnJvbSAnLi4vc3R5bGVkL21vZGFsJztcblxuLy8gTG9jYWwgVHlwZXNcbmV4cG9ydCB0eXBlIFN0YXRlUHJvcHMgPSB7XG4gIHRvZ2dsZTogYm9vbGVhbixcbiAgaGFzQmVlblN1Ym1pdHRlZDogYm9vbGVhbixcbn07XG5cbmV4cG9ydCB0eXBlIERpc3BhdGNoUHJvcHMgPSB7XG4gIG9uVG9nZ2xlTW9kYWw6IChoYXNCZWVuU3VibWl0dGVkOiBib29sZWFuKSA9PiB2b2lkLFxufVxuXG50eXBlIE1vZGFsUHJvcHMgPSBEaXNwYXRjaFByb3BzICYgU3RhdGVQcm9wcyAmIHtcbiAgZGlzYWJsZUhpZGVGaWVsZHM6IGJvb2xlYW4sXG4gIGFjdGl2ZURhdGE6IGFueSxcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGxhbmd1YWdlOiBzdHJpbmcsXG4gIHVzZXJJbmZvOiBVc2VySW5mbyxcbn07XG5cbmNsYXNzIE1vZGFsIGV4dGVuZHMgQ29tcG9uZW50PE1vZGFsUHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFjdGl2ZURhdGEsIGRpc2FibGVIaWRlRmllbGRzLCBmb3JtSWQsIG9uVG9nZ2xlTW9kYWwsIGhhc0JlZW5TdWJtaXR0ZWQsIGxhbmd1YWdlLCB0b2dnbGUsIHVzZXJJbmZvLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmICghYWN0aXZlRGF0YSB8fCAhZm9ybUlkKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHsgc3VibWl0IH0gPSBhY3RpdmVEYXRhO1xuICAgIGNvbnN0IGRpc3BsYXlUZXh0ID0gKGFjdGl2ZURhdGEuY29uZmlncyAmJiBhY3RpdmVEYXRhLmNvbmZpZ3MuYnV0dG9uX2xhYmVsKSB8fCBzdWJtaXQuZGlzcGxheVRleHQgfHwgJ0dldCBTdGFydGVkJztcblxuICAgIHJldHVybiAoXG4gICAgICA8RXJyb3JCb3VuZGFyeSBpc0xhbmd1YWdlPXtsYW5ndWFnZX0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPE1vZGFsQnV0dG9uIG9uQ2xpY2s9eygpID0+IG9uVG9nZ2xlTW9kYWwoaGFzQmVlblN1Ym1pdHRlZCl9ID57ZGlzcGxheVRleHR9PC9Nb2RhbEJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxOb0NsaWNrIGNsYXNzTmFtZT0nYmFja2dyb3VuZC1jb250YWluZXInIHRvZ2dsZT17dG9nZ2xlfSBvbkNsaWNrPXsoKSA9PiBvblRvZ2dsZU1vZGFsKGhhc0JlZW5TdWJtaXR0ZWQpfSAvPlxuICAgICAgICA8TW9kYWxDb250YWluZXIgdG9nZ2xlPXt0b2dnbGV9IGNsYXNzTmFtZT0nYXZhZm9ybS1tb2RhbC1jb250YWluZXIgYXZhZm9ybS1tb2RhbCcgcG9zaXRpb25Ub3A9e3dpbmRvdy5wYWdlWU9mZnNldCArIDMwfT5cbiAgICAgICAgICA8TW9kYWxIZWFkZXJDb250YWluZXIgZm9ybUlkPXtmb3JtSWR9IG9uVG9nZ2xlTW9kYWw9e29uVG9nZ2xlTW9kYWx9IGhhc0JlZW5TdWJtaXR0ZWQ9e2hhc0JlZW5TdWJtaXR0ZWR9IC8+XG4gICAgICAgICAgPEVudHJ5IGZvcm1JZD17Zm9ybUlkfSB1c2VySW5mbz17dXNlckluZm99IGRpc2FibGVIaWRlRmllbGRzPXtkaXNhYmxlSGlkZUZpZWxkc30gLz5cbiAgICAgICAgPC9Nb2RhbENvbnRhaW5lcj5cbiAgICAgIDwvRXJyb3JCb3VuZGFyeT5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoc3RhdGU6IFN0YXRlLCBvd25Qcm9wczogeyBmb3JtSWQ6IHN0cmluZyB9KSA9PiB7XG4gIGNvbnN0IHsgZm9ybUlkIH0gPSBvd25Qcm9wcztcbiAgcmV0dXJuIHtcbiAgICBhY3RpdmVEYXRhOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLFxuICAgIHRvZ2dsZTogQm9vbGVhbihzdGF0ZS5mb3Jtcy5zaG93TW9kYWxbZm9ybUlkXSksXG4gICAgaGFzQmVlblN1Ym1pdHRlZDogQm9vbGVhbihzdGF0ZS5taWxlcy5zdWNjZXNzW2Zvcm1JZF0gJiYgc3RhdGUubWlsZXMuc3VjY2Vzc1tmb3JtSWRdLnJlc3BvbnNlICYmIHN0YXRlLm1pbGVzLnN1Y2Nlc3NbZm9ybUlkXS5yZXNwb25zZS50cmFuc2FjdGlvbmlkLmxlbmd0aCksXG4gICAgbGFuZ3VhZ2U6IHN0YXRlLmZvcm1zICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0gJiYgc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXS5jb25maWdzICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uY29uZmlncy5sYW5ndWFnZSA/IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uY29uZmlncy5sYW5ndWFnZSA6ICd1cycsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gKGRpc3BhdGNoOiBEaXNwYXRjaCwgb3duUHJvcHM6IHsgZm9ybUlkOiBzdHJpbmcgfSk6IERpc3BhdGNoUHJvcHMgPT4ge1xuICBjb25zdCB7IGZvcm1JZCB9ID0gb3duUHJvcHM7XG4gIHJldHVybiB7XG4gICAgb25Ub2dnbGVNb2RhbDogKGhhc0JlZW5TdWJtaXR0ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmIChoYXNCZWVuU3VibWl0dGVkKSB7XG4gICAgICAgIC8vIGRpc3BhdGNoKHJlc2V0Rm9ybShmb3JtSWQpKTtcbiAgICAgICAgZGlzcGF0Y2goY2xlYXJGb3JtU3VibWl0KGZvcm1JZCkpO1xuICAgICAgfVxuICAgICAgZGlzcGF0Y2godG9nZ2xlTW9kYWwoZm9ybUlkKSk7XG4gICAgfSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMpKE1vZGFsKTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGdldEFkb2JlVmlzaXRvcklkLCBkYXRhTGF5ZXJUcmlnZ2VyLCBpc0pzb24gfSBmcm9tICdAYXZhbGFyYS1tdGcvaGVscGVycy9saWIvdWknO1xuXG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGRSZXF1aXJlZEZpZWxkLFxuICBjbGVhckNhcHR1cmVkVmFsdWVzLFxuICBpbml0QXBwbGljYXRpb24sXG4gIGluaXRGb3JtQXBwbGljYXRpb24sXG4gIHNldFN5c3RlbUVycm9yLFxuICB0cmFja0FzTW9kYWxGb3JtLFxuICBzZXRFbG9xdWFMb29rdXBWYWxpZCxcbn0gZnJvbSAnLi4vbGliL2FjdGlvbnMnO1xuXG4vLyBEYXRhXG5pbXBvcnQgRk9STURBVEEgZnJvbSAnLi4vY29uc3RhbnRzL2Zvcm0tZGF0YSc7XG5cbi8vIEFQSVxuaW1wb3J0IHsgZWxvcXVhTG9va3VwIH0gZnJvbSAnLi4vYXBpL2Vsb3F1YS1hcGknO1xuaW1wb3J0IHsgbWlsZXNNYXhtaW5kQVBJIH0gZnJvbSAnLi4vYXBpL21pbGVzLW1heG1pbmQnO1xuaW1wb3J0IHsgZmV0Y2hGb3JtVGVtcGxhdGVEYXRhIH0gZnJvbSAnLi4vYXBpL2ZldGNoLWZvcm0tZGF0YSc7XG5pbXBvcnQgeyBzdWJtaXNzaW9uTGltaXRBUEkgfSBmcm9tICcuLi9hcGkvc3VibWlzc2lvbi1saW1pdC1hcGknO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQgeyBzZXRQYWNrYWdlU3RhdHMgfSBmcm9tICcuLi9oZWxwZXJzL2FwcC1zdGF0cyc7XG5pbXBvcnQge1xuICBmb3JtYXRGb3JtVGVtcGxhdGVOYW1lLFxuICBsb2FkQXNzb2NpYXRlZFNjcmlwdHMsXG4gIGNhcHR1cmVVc2VySW5mbyxcbn0gZnJvbSAnLi4vaGVscGVycy9mb3Jtcyc7XG5pbXBvcnQge1xuICBjaGVja0Zvcm1Nb2RhbCxcbiAgZm9ybUluaXRWYWxpZGF0aW9uLFxuICByZWdpc3RlckhlbHBlckZ1bmN0aW9uVG9XaW5kb3csXG4gIHNldEF0dHJpYnV0ZXNUb1Jvb3REaXYsXG59IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9hcGkvbG9nZ2VyLWFwaSc7XG5pbXBvcnQgeyBsb29rdXBVc2VyRGF0YUluRWxvcXVhIH0gZnJvbSAnLi4vaGVscGVycy9lbG9xdWEnO1xuXG4vLyBJbXBvcnQgVHlwZXNcbmltcG9ydCB0eXBlIHsgRm9ybURlZmF1bHRDb25maWdzLCBGb3JtQXR0cmlidXRlcywgSnNvbkZpZWxkcyB9IGZyb20gJy4uL2xpYi90eXBlcy9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IFVzZXJJbmZvIH0gZnJvbSAnLi4vbGliL3R5cGVzL3VzZXInO1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJy4uL2xpYi90eXBlcy9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgU3RhdGUsIE1pbGVzU3VjY2Vzc1N0YXRlIH0gZnJvbSAnLi4vbGliL3R5cGVzL3JlZHVjZXItc3RhdGVzJztcbmltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgRWxvcXVhTG9va3VwUmVzcG9uc2UgfSBmcm9tICcuLi9hcGkvdHlwZXMnO1xuXG4vLyBDb25maWdcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vY29uZmlnJztcblxuLy8gQ29udGFpbmVyc1xuaW1wb3J0IEVudHJ5IGZyb20gJy4vZW50cnknO1xuaW1wb3J0IE1vZGFsIGZyb20gJy4vZm9ybS1tb2RhbCc7XG5pbXBvcnQgU3lzdGVtRXJyb3IgZnJvbSAnLi4vY29tcG9uZW50cy9zeXN0ZW0tZXJyb3ItbWVzc2FnZSc7XG4vLyBpbXBvcnQgU3BpbmluZ0NvbnRhaW5lciBmcm9tICcuLi9jb21wb25lbnRzL3NwaW5uZXInO1xuXG5jb25zdCBGT1JNREFUQUtFWVMgPSBPYmplY3Qua2V5cyhGT1JNREFUQSk7XG5cbmV4cG9ydCB0eXBlIE9uSW5pdEZvcm1BcHAgPSAoY29uZmlnOiBzdHJpbmcsIGZvcm1JZDogc3RyaW5nLCBpc01vZGFsOiBib29sZWFuLCBwYXJhbXM6IHN0cmluZywgdXJsOiBzdHJpbmcsIHVzZXJJbmZvOiBVc2VySW5mbywgZGlzYWJsZUhpZGVGaWVsZHM6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbnR5cGUgU3RhdGVQcm9wcyA9IHtcbiAgYWN0aXZlQ29uZmlnczogRm9ybURlZmF1bHRDb25maWdzIHwgbnVsbCxcbiAgYWN0aXZlRGF0YTogRm9ybUF0dHJpYnV0ZXMsXG4gIGFjdGl2ZUZvcm06IHN0cmluZyxcbiAgaGFzU3lzdGVtRXJyb3I6IGJvb2xlYW4sXG4gIGluaXRTdGF0dXM6IHsgbWVzc2FnZTogc3RyaW5nIHwgbnVsbCwgZm9ybU5hbWU6IHN0cmluZyB8IG51bGwgfSB8IG51bGwsXG4gIGluaXRTdWNjZXNzOiBib29sZWFuLFxuICBpc01heG1pbmRDb3VudHJ5U2V0OiBib29sZWFuLFxuICBpc01heG1pbmRJbnNpZ2h0c1NldDogYm9vbGVhbixcbiAgaXNNYXhtaW5kVXNlclNldDogYm9vbGVhbixcbiAgbGFuZ3VhZ2U6IHN0cmluZyxcbiAgbWF4bWluZFN0YXR1czogc3RyaW5nLFxufVxuXG50eXBlIERpc3BhdGNoUHJvcHMgPSB7XG4gIG9uQWRkUmVxdWlyZWRGaWVsZDogKGZvcm1GaWVsZHM6IEpzb25GaWVsZHMsIGZvcm1JZDogc3RyaW5nLCBuZXdGaWVsZDogc3RyaW5nKSA9PiB2b2lkLFxuICBvbkNsZWFyQ2FwdHVyZWRWYWx1ZXM6IChmb3JtSWQ6IHN0cmluZywgZmllbGRzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkLFxuICBvbkVsb3F1YUxvb2t1cDogKGZvcm1JZDogc3RyaW5nLCBoYXNVc2VySW5mbzogYm9vbGVhbikgPT4gUHJvbWlzZTx2b2lkPixcbiAgb25Jbml0QXBwOiAoZW52U3RhdHM6IENvbmZpZywgYWRvYmVWaXNpdG9ySWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgb25Jbml0Rm9ybUFwcDogT25Jbml0Rm9ybUFwcCxcbiAgb25Jbml0Rm9ybUFwcFdpdGhBcGk6IChmb3JtSWQ6IHN0cmluZywgY29uZmlnczogc3RyaW5nLCBpc01vZGFsOiBib29sZWFuLCBwYXJhbXM6IHN0cmluZywgdXJsOiBzdHJpbmcsIHVzZXJJbmZvOiBVc2VySW5mbywgZGlzYWJsZUhpZGVGaWVsZHM6IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD4sXG4gIG9uU2V0RWxvcXVhTG9va3VwVmFsaWQ6IChmb3JtSWQ6IHN0cmluZywgdmFsdWVzOiBFbG9xdWFMb29rdXBSZXNwb25zZSkgPT4gdm9pZCxcbiAgb25TZXRNaWxlc01heG1pbmQ6IChmb3JtSWQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPixcbiAgb25TeXN0ZW1FcnJvcjogKGZvcm1JZDogc3RyaW5nLCBlcnJvcjogc3RyaW5nLCBpbmZvOiBzdHJpbmcsIHN0YXR1c0NvZGU6IG51bWJlcikgPT4gdm9pZCxcbiAgb25DYXB0dXJlVXNlckluZm86IChmb3JtRmllbGRzOiBKc29uRmllbGRzLCB1c2VySW5mbzogVXNlckluZm8sIGZvcm1JZDogc3RyaW5nKSA9PiB2b2lkLFxuICBvblRyYWNrQXNNb2RhbEZvcm06IChmb3JtSWQ6IHN0cmluZykgPT4gdm9pZCxcbn1cblxudHlwZSBBcHBQcm9wcyA9IERpc3BhdGNoUHJvcHMgJiBTdGF0ZVByb3BzICYge1xuICBhY3RpdmVEYXRhOiBGb3JtQXR0cmlidXRlcyxcbiAgZm9ybUlkOiBzdHJpbmcsXG4gIGlzTWF4bWluZEluc2lnaHRzU2V0OiBib29sZWFuLFxuICBpc01vZGFsOiBib29sZWFuLFxuICB1c2VySW5mbzogVXNlckluZm8sXG4gIGRpc2FibGVIaWRlRmllbGRzOiBib29sZWFuLFxuICBzdWJtaXRTdWNjZXNzOiBNaWxlc1N1Y2Nlc3NTdGF0ZSxcbiAgb25HZXRTdWJtaXNzaW9uTGltaXRDb3VudDogKGZvcm1JZDogc3RyaW5nLCBzdWJtaXNzaW9ubGltaXRpZDogc3RyaW5nLCBzdWJtaXNzaW9ubGltaXRDYXA6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPixcbn07XG5cbmNsYXNzIEFwcCBleHRlbmRzIENvbXBvbmVudDxBcHBQcm9wcz4ge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICByZWdpc3RlckhlbHBlckZ1bmN0aW9uVG9XaW5kb3coJ2NsZWFyRm9ybVZhbHVlcycsIHRoaXMucHJvcHMub25DbGVhckNhcHR1cmVkVmFsdWVzKTtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmVDb25maWdzLFxuICAgICAgZm9ybUlkLFxuICAgICAgdXNlckluZm8sXG4gICAgICBkaXNhYmxlSGlkZUZpZWxkcyxcbiAgICAgIGlzTWF4bWluZEluc2lnaHRzU2V0LFxuICAgICAgb25FbG9xdWFMb29rdXAsXG4gICAgICBvblNldEVsb3F1YUxvb2t1cFZhbGlkLFxuICAgICAgb25TZXRNaWxlc01heG1pbmQsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgc2V0UGFja2FnZVN0YXRzKCk7XG5cbiAgICBpZiAoIXRoaXMucHJvcHMuaGFzU3lzdGVtRXJyb3IpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmZvcm1JZCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBJdCBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuIERvdWJsZSBjaGVjayB0aGlzIHNlY29uZGFyeSBjaGVja1xuICAgICAgICBsb2dnZXIoe1xuICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgIG1zZ1R5cGU6ICdGb3JtTG9hZEVycm9yJyxcbiAgICAgICAgICBmb3JtSWQ6ICcnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGVycm9yOiAnZW50cnkuanMgc3lzdGVtIGZhaWx1cmUnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ05vIGZvcm0gaWQgZm91bmQgYXQgZW50cnkuanMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb3BzLm9uU3lzdGVtRXJyb3IoZm9ybUlkLCAnRXJyb3Igb24gZW50cnkgaW5pdCcsICdObyBmb3JtIGlkIGZvdW5kIGF0IGVudHJ5LmpzLiBDYW4gbm90IGxvYWQgZm9ybScsIDUwMCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtSWQpOyAvLyBGaW5kIHRoZSBlbGVtZW50IG9uIHRoZSBwYWdlXG4gICAgICBjb25zdCB7IGhyZWYsIHNlYXJjaCB9ID0gd2luZG93LmxvY2F0aW9uO1xuXG4gICAgICBsZXQgZm9ybUNvbmZpZyA9IGVsICYmIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jb25maWdzJyk7IC8vIEdldCBmb3JtQ29uZmlnIGZyb20gZGF0YS1jb25maWcgb2ZmIGVsZW1lbnQgd2l0aCBpZCBhdmFmb3JtLXJvb3RcbiAgICAgIC8vIENoZWNrIGlmIGlzIGJhc2U2NCBlbmNvZGVkXG4gICAgICB0cnkge1xuICAgICAgICBmb3JtQ29uZmlnID0gZm9ybUNvbmZpZyAmJiBmb3JtQ29uZmlnICE9PSBudWxsID8gYXRvYihmb3JtQ29uZmlnKSA6IGZvcm1Db25maWc7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICAvLyBBc3N1bWVzIHRoaXMgaXMgZGVmYXVsdCBBRU0gc2V0IHN0YXRlXG4gICAgICB9XG5cbiAgICAgIGZvcm1Jbml0VmFsaWRhdGlvbih0aGlzLnByb3BzLm9uU3lzdGVtRXJyb3IsIGZvcm1JZCwgZm9ybUNvbmZpZyk7IC8vIFZhbGlkYXRlIGRhdGEtIGVsZW1lbnRzIGZvdW5kIG9uIGRpdlxuICAgICAgaWYgKGVsICYmIGZvcm1Db25maWcgJiYgZm9ybUNvbmZpZyAhPT0gbnVsbCAmJiBpc0pzb24oZm9ybUNvbmZpZykpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIG9uSW5pdEFwcCxcbiAgICAgICAgICBvbkluaXRGb3JtQXBwLFxuICAgICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBjb25zdCBoYXNVc2VySW5mbyA9IEJvb2xlYW4odGhpcy5wcm9wcy51c2VySW5mbyAhPT0gbnVsbCAmJiB0aGlzLnByb3BzLnVzZXJJbmZvICYmIHRoaXMucHJvcHMudXNlckluZm8uZW1haWwgIT09ICcnKTsgLy8gQ2hlY2sgaWYgaXMgbG9nZ2VkIGluXG4gICAgICAgIC8vIFRyeSB0byBydW4gRWxvdXFhIGxvb2sgZWFybHlcbiAgICAgICAgaWYgKCFoYXNVc2VySW5mbyAmJiBhY3RpdmVDb25maWdzICYmIGFjdGl2ZUNvbmZpZ3MuYXV0b2ZpbGxGb3JtICYmICEoL3BhcnRuZXIvZ2kpLnRlc3QoZm9ybUlkKSkge1xuICAgICAgICAgIGxvb2t1cFVzZXJEYXRhSW5FbG9xdWEoe1xuICAgICAgICAgICAgZm9ybUlkLCBoYXNVc2VySW5mbywgY29uZmlnczogYWN0aXZlQ29uZmlncywgb25FbG9xdWFMb29rdXAsIG9uU2V0RWxvcXVhTG9va3VwVmFsaWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRBdHRyaWJ1dGVzVG9Sb290RGl2KGVsLCBmb3JtSWQsIHRoaXMucHJvcHMuaXNNb2RhbCk7XG4gICAgICAgIG9uSW5pdEFwcChjb25maWcsIGdldEFkb2JlVmlzaXRvcklkKCkpOyAvLyBTYXZlIGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uIHRvIHN0YXRlIChzdGF0ZS5zeXN0ZW0gcmVkdWNlcilcbiAgICAgICAgLy8gSWYgdGhpcyBub3QgYW4gZXhpc3RpbmcgZm9ybSBmcm9tIGZvcm0tZGF0YSBKU09OLCB0aGVuIGhpdCB0aGUgYXBpIGFuZCBsb29rIGZvciBpdCBpbiB0aGUgUzMgYnVja2V0LlxuICAgICAgICAvLyBGaWxlIG5hbWUgd2lsbCBiZSBhbHBoYW51bWVyaWMgYWxsIGxvd2VyY2FzZSBvbmx5LiBIeXBoZW5zIGFuZCBvdGhlciBub24tYWxwaGFudW1lcmljZSBhcmUgc3RyaXBwZWQgb3V0LlxuICAgICAgICBsZXQgdGVtcGxhdGUgPSAnQkFTSUMnOyAvLyBQbHVjayBmb3JtIHRlbXBsYXRhdGUgZnJvbSBqc29uIE9iamVjdCBhbmQgdmVyaWZ5L3Bhc3NcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0ZW1wbGF0ZSA9IEpTT04ucGFyc2UoZm9ybUNvbmZpZykudGVtcGxhdGU7XG4gICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC9bXFxXX10rL2dpLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgICAgIGlmICghRk9STURBVEFLRVlTLmluY2x1ZGVzKGZvcm1JZCkgJiYgIUZPUk1EQVRBS0VZUy5pbmNsdWRlcyh0ZW1wbGF0ZSkgJiYgIUZPUk1EQVRBS0VZUy5pbmNsdWRlcyh0ZW1wbGF0ZS50b1VwcGVyQ2FzZSgpKSkgdGhpcy5wcm9wcy5vbkluaXRGb3JtQXBwV2l0aEFwaShmb3JtSWQsIGZvcm1Db25maWcsIHRoaXMucHJvcHMuaXNNb2RhbCwgc2VhcmNoLCBocmVmLCB1c2VySW5mbywgZGlzYWJsZUhpZGVGaWVsZHMpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBvbkluaXRGb3JtQXBwKGZvcm1Db25maWcsIGZvcm1JZCwgdGhpcy5wcm9wcy5pc01vZGFsLCBzZWFyY2gsIGhyZWYsIHVzZXJJbmZvLCBkaXNhYmxlSGlkZUZpZWxkcyk7IC8vIFNhdmUgZm9ybSBpbmZvcm1hdGlvbiB0byBzdGF0ZSAoc3RhdGUuZm9ybXMgcmVkdWNlcilcbiAgICAgICAgfVxuICAgICAgICAvLyBSdW4gbWF4bWluZCB0byBnZXQgSU5TSUdIVFMgZGF0YVxuICAgICAgICBpZiAoIWlzTWF4bWluZEluc2lnaHRzU2V0KSBvblNldE1pbGVzTWF4bWluZCh0aGlzLnByb3BzLmZvcm1JZCk7IC8vIEluaXRpYWwgZnVsbCBwaW5nIGZvciB1c2VyIGRhdGFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlcih7XG4gICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgbXNnVHlwZTogJ0Zvcm1Mb2FkRXJyb3InLFxuICAgICAgICAgIGZvcm1JZDogJycsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgZXJyb3I6ICdlbnRyeS5qcyBzeXN0ZW0gZmFpbHVyZScsXG4gICAgICAgICAgICBtZXNzYWdlOiAnRWxlbWVudCBvciBmb3JtSWQgbm90IGZvdW5kIEZORiAtIGZvcm0gd2lsbCBub3QgcmVuZGVyJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWN0aXZlQ29uZmlncyxcbiAgICAgIC8vICRGbG93Rml4TWU6IFRPRE8gLSBuZWVkIHRvIHVwZGF0ZSB0eXBlcyBoZXJlXG4gICAgICBhY3RpdmVEYXRhLFxuICAgICAgZm9ybUlkLFxuICAgICAgdXNlckluZm8sXG4gICAgICBkaXNhYmxlSGlkZUZpZWxkcyxcbiAgICAgIGlzTWF4bWluZFVzZXJTZXQsXG4gICAgICBtYXhtaW5kU3RhdHVzLFxuICAgICAgb25BZGRSZXF1aXJlZEZpZWxkLFxuICAgICAgb25FbG9xdWFMb29rdXAsXG4gICAgICAvLyAkRmxvd0ZpeE1lOiBUT0RPIC0gZmluZCBvdXQgd2h5IEZsb3cgbmVlZHMgb25HZXRTdWJtaXNzaW9uTGltaXRDb3VudCBpbiBhbGwgMyBsb2NhdGlvbnNcbiAgICAgIG9uR2V0U3VibWlzc2lvbkxpbWl0Q291bnQsXG4gICAgICBvblNldEVsb3F1YUxvb2t1cFZhbGlkLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gVHJpZ2dlciBkYXRhbGF5ZXIgdHJhY2tpbmdcbiAgICBpZiAoYWN0aXZlQ29uZmlncykge1xuICAgICAgLy8gc2V0IGNvbmZpZ3MgdG8gd2luZG93IGZvciBsYXRlciBwdWxsIGZyb20gZm9yIGFiYW5kb24gdHJhY2tpbmdcbiAgICAgIHdpbmRvdy5hdmEuc3RhdGljRm9ybUNvbmZpZ3MgPSB7XG4gICAgICAgIC4uLndpbmRvdy5hdmEuc3RhdGljRm9ybUNvbmZpZ3MsXG4gICAgICAgIFtmb3JtSWRdOiBhY3RpdmVDb25maWdzLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHJpZ2dlclJlc3BvbnNlID0gZGF0YUxheWVyVHJpZ2dlcihcbiAgICAgICAgZm9ybUlkLFxuICAgICAgICAnZm9ybV9zdGFydCcsXG4gICAgICApO1xuICAgICAgaWYgKCF0cmlnZ2VyUmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAvLyBpZiBkYXRhIGxheWVyIHRyaWdnZXIgZmFpbGVkLCByZXR1cm4gcmVzdWx0aW5nIGVycm9ycyBhbmQgbG9nIHRvIHN1bW9cbiAgICAgICAgbG9nZ2VyKHtcbiAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICBtc2dUeXBlOiAnQUZSIC0gRGF0YUxheWVyVHJpZ2dlckVycm9yJyxcbiAgICAgICAgICBmb3JtSWQsXG4gICAgICAgICAgZGF0YTogdHJpZ2dlclJlc3BvbnNlLmVycm9ycywgLy8gYXJyYXkgb2YgZXJyb3JzIHB1c2hlZCBmcm9tIHRoZSBoZWxwZXJcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFjdGl2ZUNvbmZpZ3MgJiYgYWN0aXZlQ29uZmlncy5zdWJtaXNzaW9uTGltaXRJZCkge1xuICAgICAgLy8gVE9ETzogY2FsbCBBUEkgZm9yIGxpbWl0IGNvdW50XG4gICAgICBjb25zdCB7IHN1Ym1pc3Npb25MaW1pdElkLCBzdWJtaXNzaW9uTGltaXRDYXAgfSA9IGFjdGl2ZUNvbmZpZ3M7XG4gICAgICBvbkdldFN1Ym1pc3Npb25MaW1pdENvdW50KGZvcm1JZCwgc3VibWlzc2lvbkxpbWl0SWQsIHN1Ym1pc3Npb25MaW1pdENhcCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzVXNlckluZm8gPSBCb29sZWFuKHRoaXMucHJvcHMudXNlckluZm8gIT09IG51bGwgJiYgdGhpcy5wcm9wcy51c2VySW5mbyAmJiB0aGlzLnByb3BzLnVzZXJJbmZvLmVtYWlsICE9PSAnJyk7IC8vIENoZWNrIGlmIGlzIGxvZ2dlZCBpblxuICAgIC8vIENhdGNoIHJ1biBlbG9xdWEgbG9vayB1cCBpZiByZXJlbmRlciBhbmQgaGFzbid0IHJ1bi5cblxuICAgIGlmICghaGFzVXNlckluZm8gJiYgYWN0aXZlQ29uZmlncyAmJiBhY3RpdmVDb25maWdzLmF1dG9maWxsRm9ybSkge1xuICAgICAgbG9va3VwVXNlckRhdGFJbkVsb3F1YSh7XG4gICAgICAgIGZvcm1JZCwgaGFzVXNlckluZm8sIGNvbmZpZ3M6IGFjdGl2ZUNvbmZpZ3MsIG9uRWxvcXVhTG9va3VwLCBvblNldEVsb3F1YUxvb2t1cFZhbGlkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHVzZXJJbmZvICE9PSBwcmV2UHJvcHMudXNlckluZm8pIHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnYXZhQXV0b1NhdmUnKTsgLy8gaW5jbHVkZWQgaGVyZSBmb3IgdGVzdGluZ1xuICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtSWQpO1xuICAgICAgbGV0IGZvcm1Db25maWcgPSBlbCAmJiBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29uZmlncycpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9ybUNvbmZpZyA9IGZvcm1Db25maWcgJiYgZm9ybUNvbmZpZyAhPT0gbnVsbCA/IGF0b2IoZm9ybUNvbmZpZykgOiBmb3JtQ29uZmlnO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgLy8gQXNzdW1lcyB2YWx1ZSBpcyBub3QgZW5jb2RlZFxuICAgICAgfVxuICAgICAgY29uc3QgeyBocmVmLCBzZWFyY2ggfSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgIGlmIChlbCAmJiBmb3JtQ29uZmlnICYmIGZvcm1Db25maWcgIT09IG51bGwgJiYgaXNKc29uKGZvcm1Db25maWcpKSB7IC8vIGZvciBmbG93XG4gICAgICAgIC8vIEVuc3VyZSBiYXNlNjQgZGVjb2RlIGhhcyBiZWVuIHNlbnQgdGhyb3VnaFxuICAgICAgICB0aGlzLnByb3BzLm9uSW5pdEZvcm1BcHAoZm9ybUNvbmZpZywgZm9ybUlkLCB0aGlzLnByb3BzLmlzTW9kYWwsIHNlYXJjaCwgaHJlZiwgdXNlckluZm8sIGRpc2FibGVIaWRlRmllbGRzKTsgLy8gU2F2ZSBmb3JtIGluZm9ybWF0aW9uIHRvIHN0YXRlIChzdGF0ZS5mb3JtcyByZWR1Y2VyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS10ZW1wbGF0ZT1cIiR7dGhpcy5wcm9wcy5mb3JtSWR9XCJdYCk7XG4gICAgaWYgKGVsZW0gJiYgY2hlY2tGb3JtTW9kYWwoZWxlbSkpIHtcbiAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdkYXRhLWFjdGl2ZS1tb2RhbCcsIChjaGVja0Zvcm1Nb2RhbChlbGVtKSkudG9TdHJpbmcoKSk7XG4gICAgICB0aGlzLnByb3BzLm9uVHJhY2tBc01vZGFsRm9ybSh0aGlzLnByb3BzLmZvcm1JZCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBib29sZWFuIGlmIHRoZSBhY3RpdmVEYXRhIGluIG91ciBmb3JtIGhhcyBhIGZpZWxkIHdpdGggYW4gaWQgb2YgXCJjb3VudHJ5XCIuXG4gICAgLy8gV2UnbGwgdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3VyIGNvbXBvbmVudCBuZWVkcyB0byByZS1yZW5kZXIgd2l0aCBhIGNvdW50cnkgZmllbGQgYWRkZWRcbiAgICBjb25zdCBjb3VudHJ5RmllbGRBZGRlZCA9IGFjdGl2ZURhdGEgJiYgYWN0aXZlRGF0YS5maWVsZHMgJiYgYWN0aXZlRGF0YS5maWVsZHMuc29tZSgoZmllbGQpID0+IGZpZWxkLmlkID09PSAnY291bnRyeScpO1xuXG4gICAgLy8gSWYgTWF4bWluZCB3YXMgc3VjY2Vzc2Z1bCwgbm8gdXNlciBkYXRhIHdhcyByZXR1cm5lZCwgYW5kIHRoZSBjb3VudHJ5IGZpZWxkIHdhc24ndCBhZGRlZCwgZGlzcGF0Y2ggYW4gYWN0aW9uIGFuZCBhZGQgY291bnRyeSB0byBhY3RpdmVEYXRhIG9uIGZvcm1cbiAgICAvLyBJZiBtYXhtaW5kIGZhaWxlZCBvciB3YXMgc3RvcHBlZCAoZm9yIHRlc3RpbmcpLCBhbmQgdGhlIGNvdW50cnkgZmllbGQgd2Fzbid0IGFkZGVkLCBkaXNwYXRjaCBhbmQgYWRkIGNvdW50cnkgZmllbGRcbiAgICBpZiAoKG1heG1pbmRTdGF0dXMgPT09ICdTVUNDRVNTJyB8fCBtYXhtaW5kU3RhdHVzID09PSAnRkFJTEVETUlMRVMnIHx8IG1heG1pbmRTdGF0dXMgPT09ICdTVE9QUEVEJykgJiYgIWlzTWF4bWluZFVzZXJTZXQgJiYgIWNvdW50cnlGaWVsZEFkZGVkKSB7XG4gICAgICBjb25zdCBuZXdBY3RpdmVEYXRhRmllbGRzID0gYWN0aXZlRGF0YS5maWVsZHMuY29uY2F0KHtcbiAgICAgICAgZGlzcGxheVRleHQ6ICdDb3VudHJ5JyxcbiAgICAgICAgaWQ6ICdjb3VudHJ5JyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdDb3VudHJ5JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgfSk7XG4gICAgICBvbkFkZFJlcXVpcmVkRmllbGQobmV3QWN0aXZlRGF0YUZpZWxkcywgZm9ybUlkLCAnY291bnRyeScpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmVEYXRhLFxuICAgICAgaGFzU3lzdGVtRXJyb3IsXG4gICAgICBpc01vZGFsLFxuICAgICAgbGFuZ3VhZ2UsXG4gICAgICB1c2VySW5mbyxcbiAgICAgIG9uQ2FwdHVyZVVzZXJJbmZvLFxuICAgICAgZGlzYWJsZUhpZGVGaWVsZHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBmb3JtSWQgPSB0aGlzLnByb3BzLmZvcm1JZCB8fCBudWxsO1xuXG4gICAgY29uc3QgQ29udGFpbmVyID0gaXNNb2RhbCA/IE1vZGFsIDogRW50cnk7IC8vIFN3aXRjaCByZW5kZXIgY29udGFpbmVyIGJhc2VkIG9uIHRoZW1lOiB7IGxheW91dDogLi4uIH07XG5cbiAgICBpZiAoIWFjdGl2ZURhdGEgfHwgIWZvcm1JZCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoYWN0aXZlRGF0YS5jb25maWdzICYmIGFjdGl2ZURhdGEuY29uZmlncy5jaGlsaXBpcGVyUm91dGVyICE9PSBudWxsICYmIGFjdGl2ZURhdGEuY29uZmlncy5jaGlsaXBpcGVyUm91dGVyICE9PSAnJykge1xuICAgICAgbGV0IHsgc2NyaXB0cyB9ID0gYWN0aXZlRGF0YTtcbiAgICAgIGNvbnN0IHsgZmllbGRzIH0gPSBhY3RpdmVEYXRhO1xuICAgICAgc2NyaXB0cyA9IHNjcmlwdHMgfHwgW107XG4gICAgICBjb25zdCBoYXNQaG9uZUZpZWxkID0gKGZpZWxkcy5maWx0ZXIoKGYpID0+IGYgJiYgZi5pZCAmJiBmLmlkID09PSAncGhvbmUnKSkubGVuZ3RoID4gMDtcbiAgICAgIGlmIChoYXNQaG9uZUZpZWxkICYmIHNjcmlwdHMgJiYgc2NyaXB0cy5pbmRleE9mKCdodHRwczovL2pzLmNoaWxpcGlwZXIuY29tL21hcmtldGluZy5qcycpID09PSAtMSkge1xuICAgICAgICBzY3JpcHRzLnB1c2goJ2h0dHBzOi8vanMuY2hpbGlwaXBlci5jb20vbWFya2V0aW5nLmpzJyk7XG4gICAgICB9XG4gICAgICBhY3RpdmVEYXRhLnNjcmlwdHMgPSBzY3JpcHRzO1xuICAgIH1cblxuICAgIGlmIChhY3RpdmVEYXRhICYmIGFjdGl2ZURhdGEuc2NyaXB0cyAmJiBhY3RpdmVEYXRhLnNjcmlwdHMubGVuZ3RoID4gMCkge1xuICAgICAgbG9hZEFzc29jaWF0ZWRTY3JpcHRzKGFjdGl2ZURhdGEuc2NyaXB0cyk7XG4gICAgfVxuXG4gICAgaWYgKHVzZXJJbmZvKSB7XG4gICAgICAvLyBjYXB0dXJlIGluZm9ybWF0aW9uIGZyb20gdXNlckluZm8sIGJ5cGFzc2VzIHJlZ3VsYXIgaW5wdXQgdmFsaWRhdGlvblxuICAgICAgb25DYXB0dXJlVXNlckluZm8oYWN0aXZlRGF0YS5maWVsZHMsIHVzZXJJbmZvLCBmb3JtSWQpO1xuICAgIH1cblxuICAgIGlmIChoYXNTeXN0ZW1FcnJvcikgcmV0dXJuICg8U3lzdGVtRXJyb3IgaXNMYW5ndWFnZT17bGFuZ3VhZ2V9IC8+KTtcblxuICAgIHJldHVybiA8Q29udGFpbmVyIGZvcm1JZD17Zm9ybUlkfSB1c2VySW5mbz17dXNlckluZm99IGRpc2FibGVIaWRlRmllbGRzPXtkaXNhYmxlSGlkZUZpZWxkc30vPjtcbiAgfVxufVxuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoc3RhdGU6IFN0YXRlLCBvd25Qcm9wczogeyBmb3JtSWQ6IHN0cmluZyB9KSA9PiB7XG4gIGxldCB7IGZvcm1JZCB9ID0gb3duUHJvcHM7XG4gIGZvcm1JZCA9IGZvcm1hdEZvcm1UZW1wbGF0ZU5hbWUoZm9ybUlkKTtcbiAgcmV0dXJuIHtcbiAgICBhY3RpdmVEYXRhOiBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLFxuICAgIGFjdGl2ZUNvbmZpZ3M6IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0gPyBzdGF0ZS5mb3Jtcy5hY3RpdmVGb3Jtc1tmb3JtSWRdLmNvbmZpZ3MgOiBudWxsLFxuICAgIGhhc1N5c3RlbUVycm9yOiAoc3RhdGUuc3lzdGVtLnN5c3RlbUVycm9yW2Zvcm1JZF0gJiYgc3RhdGUuc3lzdGVtLnN5c3RlbUVycm9yW2Zvcm1JZF0gIT09IG51bGwpLFxuICAgIGlzTWF4bWluZEluc2lnaHRzU2V0OiBzdGF0ZS5tYXhtaW5kICE9PSBudWxsICYmIHN0YXRlLm1heG1pbmQgJiYgc3RhdGUubWF4bWluZC5JTlNJR0hUUyA/IEJvb2xlYW4oT2JqZWN0LmtleXMoc3RhdGUubWF4bWluZC5JTlNJR0hUUykubGVuZ3RoID4gMCkgOiBmYWxzZSxcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgaXNNYXhtaW5kVXNlclNldDogc3RhdGUubWF4bWluZCAhPT0gbnVsbCAmJiBzdGF0ZS5tYXhtaW5kICYmIHN0YXRlLm1heG1pbmQudXNlciA/IEJvb2xlYW4oT2JqZWN0LmtleXMoc3RhdGUubWF4bWluZC51c2VyKS5sZW5ndGggPiAwKSA6IGZhbHNlLFxuICAgIC8vICRGbG93Rml4TWU6IFRPLURPOiByZXZpc2l0IHRoaXMgYWZ0ZXIgaW5pdGlhbCB0ZXN0aW5nXG4gICAgbGFuZ3VhZ2U6IHN0YXRlLmZvcm1zICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0gJiYgc3RhdGUuZm9ybXMuYWN0aXZlRm9ybXNbZm9ybUlkXS5jb25maWdzICYmIHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uY29uZmlncy5sYW5ndWFnZSA/IHN0YXRlLmZvcm1zLmFjdGl2ZUZvcm1zW2Zvcm1JZF0uY29uZmlncy5sYW5ndWFnZSA6ICd1cycsXG4gICAgbWF4bWluZFN0YXR1czogc3RhdGUubWF4bWluZC5zdGF0dXMsXG4gICAgc3VibWl0RmFpbGVkOiBzdGF0ZS5taWxlcyAmJiBzdGF0ZS5taWxlcy5mYWlsICYmIHN0YXRlLm1pbGVzLmZhaWxbZm9ybUlkXSA/IHN0YXRlLm1pbGVzLmZhaWxbZm9ybUlkXSA6IG51bGwsXG4gICAgc3VibWl0U3VjY2Vzczogc3RhdGUubWlsZXMgJiYgc3RhdGUubWlsZXMuc3VjY2VzcyAmJiBzdGF0ZS5taWxlcy5zdWNjZXNzW2Zvcm1JZF0gPyBzdGF0ZS5taWxlcy5zdWNjZXNzW2Zvcm1JZF0gOiBudWxsLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IChkaXNwYXRjaDogRGlzcGF0Y2gpOiBEaXNwYXRjaFByb3BzID0+ICh7XG4gIG9uQWRkUmVxdWlyZWRGaWVsZDogKG5ld0Zvcm1GaWVsZHM6IEpzb25GaWVsZHMsIGZvcm1JZDogc3RyaW5nLCBuZXdGaWVsZDogc3RyaW5nKSA9PiBkaXNwYXRjaChhZGRSZXF1aXJlZEZpZWxkKG5ld0Zvcm1GaWVsZHMsIGZvcm1JZCwgbmV3RmllbGQpKSxcbiAgb25DYXB0dXJlVXNlckluZm86IChmb3JtRmllbGRzOiBKc29uRmllbGRzLCB1c2VySW5mbzogVXNlckluZm8sIGZvcm1JZDogc3RyaW5nKSA9PiBjYXB0dXJlVXNlckluZm8oZGlzcGF0Y2gsIGZvcm1GaWVsZHMsIHVzZXJJbmZvLCBmb3JtSWQpLFxuICBvbkNsZWFyQ2FwdHVyZWRWYWx1ZXM6IChmb3JtSWQ6IHN0cmluZywgZmllbGRzOiBBcnJheTxzdHJpbmc+KSA9PiBkaXNwYXRjaChjbGVhckNhcHR1cmVkVmFsdWVzKGZvcm1JZCwgZmllbGRzKSksXG4gIG9uRWxvcXVhTG9va3VwOiAoZm9ybUlkOiBzdHJpbmcsIGhhc1VzZXJJbmZvOiBib29sZWFuKSA9PiBlbG9xdWFMb29rdXAoZGlzcGF0Y2gsIGZvcm1JZCwgaGFzVXNlckluZm8pLFxuICBvbkdldFN1Ym1pc3Npb25MaW1pdENvdW50OiAoZm9ybUlkOiBzdHJpbmcsIHN1Ym1pc3Npb25saW1pdGlkOiBzdHJpbmcsIHN1Ym1pc3Npb25saW1pdENhcDogbnVtYmVyKSA9PiBzdWJtaXNzaW9uTGltaXRBUEkoZGlzcGF0Y2gsIGZvcm1JZCwgc3VibWlzc2lvbmxpbWl0aWQsIHN1Ym1pc3Npb25saW1pdENhcCksXG4gIG9uSW5pdEFwcDogKGVudlN0YXRzOiBDb25maWcsIGFkb2JlVmlzaXRvcklkOiBzdHJpbmcpID0+IGRpc3BhdGNoKGluaXRBcHBsaWNhdGlvbihlbnZTdGF0cywgYWRvYmVWaXNpdG9ySWQpKSxcbiAgb25Jbml0Rm9ybUFwcDogKGNvbmZpZ3M6IHN0cmluZywgZm9ybUlkOiBzdHJpbmcsIGlzTW9kYWw6IGJvb2xlYW4sIHBhcmFtczogc3RyaW5nLCB1cmw6IHN0cmluZywgdXNlckluZm86IFVzZXJJbmZvLCBkaXNhYmxlSGlkZUZpZWxkczogYm9vbGVhbikgPT4gZGlzcGF0Y2goaW5pdEZvcm1BcHBsaWNhdGlvbihjb25maWdzLCBmb3JtSWQsIGlzTW9kYWwsIHBhcmFtcywgdXJsLCB1c2VySW5mbywgZGlzYWJsZUhpZGVGaWVsZHMpKSxcbiAgb25Jbml0Rm9ybUFwcFdpdGhBcGk6IChmb3JtSWQ6IHN0cmluZywgY29uZmlnczogc3RyaW5nLCBpc01vZGFsOiBib29sZWFuLCBwYXJhbXM6IHN0cmluZywgdXJsOiBzdHJpbmcsIHVzZXJJbmZvOiBVc2VySW5mbywgZGlzYWJsZUhpZGVGaWVsZHM6IGJvb2xlYW4pID0+IGZldGNoRm9ybVRlbXBsYXRlRGF0YShkaXNwYXRjaCwgZm9ybUlkLCBjb25maWdzLCBpc01vZGFsLCBwYXJhbXMsIHVybCwgdXNlckluZm8sIGRpc2FibGVIaWRlRmllbGRzKSxcbiAgb25TZXRNaWxlc01heG1pbmQ6IChmb3JtSWQ6IHN0cmluZykgPT4gbWlsZXNNYXhtaW5kQVBJKGRpc3BhdGNoLCBmb3JtSWQpLFxuICBvblNldEVsb3F1YUxvb2t1cFZhbGlkOiAoZm9ybUlkOiBzdHJpbmcsIHZhbHVlczogRWxvcXVhTG9va3VwUmVzcG9uc2UpID0+IGRpc3BhdGNoKHNldEVsb3F1YUxvb2t1cFZhbGlkKGZvcm1JZCwgdmFsdWVzKSksXG4gIG9uU3lzdGVtRXJyb3I6IChmb3JtSWQ6IHN0cmluZywgZXJyb3I6IHN0cmluZywgaW5mbzogc3RyaW5nLCBzdGF0dXNDb2RlOiBudW1iZXIpID0+IGRpc3BhdGNoKHNldFN5c3RlbUVycm9yKGZvcm1JZCwgZXJyb3IsIGluZm8sIHN0YXR1c0NvZGUpKSxcbiAgb25UcmFja0FzTW9kYWxGb3JtOiAoZm9ybUlkOiBzdHJpbmcpID0+IGRpc3BhdGNoKHRyYWNrQXNNb2RhbEZvcm0oZm9ybUlkKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcykoQXBwKTtcbiIsIi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvZmlyc3QgKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgYXBwbHlNaWRkbGV3YXJlLCBjcmVhdGVTdG9yZSB9IGZyb20gJ3JlZHV4JztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ3JlZHV4LWxvZ2dlcic7XG5pbXBvcnQge1xuICB0cmFja0FiYW5kb25lZEZvcm1zLCBkYXRhTGF5ZXJUcmlnZ2VyLCBpc0pzb24sIGNoZWNrSWZJc0RldmVsb3AsIGNoZWNrRm9yRGVidWcsXG59IGZyb20gJ0BhdmFsYXJhLW10Zy9oZWxwZXJzL2xpYi91aSc7XG5pbXBvcnQgdGh1bmsgZnJvbSAncmVkdXgtdGh1bmsnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2FwaS9sb2dnZXItYXBpJztcblxuaW1wb3J0IHJlZHVjZXIgZnJvbSAnLi9yZWR1Y2Vycyc7XG5cbi8vIENvbmZpZ3NcbmltcG9ydCBTWVNURU1DT05GSUdTIGZyb20gJy4vY29uZmlnJztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IEFwcCBmcm9tICcuL2NvbnRhaW5lcnMvYXBwJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgZm9ybWF0Rm9ybVRlbXBsYXRlTmFtZSB9IGZyb20gJy4vaGVscGVycy9mb3Jtcyc7XG5pbXBvcnQgeyBmb3JtYXRVc2VySW5mbyB9IGZyb20gJy4vaGVscGVycy91c2VyJztcblxuLy8gU3R5bGVzXG5pbXBvcnQgeyBkZWZhdWx0Rm9ybVRpdGxlIH0gZnJvbSAnLi9zdHlsZWQvZm9ybSc7XG5cbmNvbnN0IG1pZGRsZXdhcmUgPSBbdGh1bmtdO1xuXG53aW5kb3cuYXZhID0gd2luZG93LmF2YSB8fCB7fTtcbndpbmRvdy5hdmEudXNlciA9IHtcbiAgaXNMb2dnZWRJbjogZmFsc2UsXG59O1xuXG5pZiAoY2hlY2tJZklzRGV2ZWxvcCgpIHx8IGNoZWNrRm9yRGVidWcoKSkgbWlkZGxld2FyZS5wdXNoKGNyZWF0ZUxvZ2dlcigpKTtcblxuY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZShyZWR1Y2VyLCBhcHBseU1pZGRsZXdhcmUoLi4ubWlkZGxld2FyZSkpO1xuY29uc3QgY29tcGxldGVkRm9ybXMgPSB3aW5kb3cuYXZhQ29tcGxldGVkRm9ybXMgfHwgW107XG5cbi8qIGVzbGludC1kaXNhYmxlIGNvbnNpc3RlbnQtcmV0dXJuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xud2luZG93Lm9uYmVmb3JldW5sb2FkID0gZnVuY3Rpb24gKCkge1xuICB0cmFja0FiYW5kb25lZEZvcm1zKHdpbmRvdy5hdmEuYWJhbmRvbmVkRm9ybXMpO1xuICBpZiAod2luZG93LmF2YSAmJiB3aW5kb3cuYXZhLmFiYW5kb25lZEZvcm1zKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFycmF5LWNhbGxiYWNrLXJldHVyblxuICAgIHdpbmRvdy5hdmEuYWJhbmRvbmVkRm9ybXMubWFwKChmb3JtSWQ6IHN0cmluZykgPT4ge1xuICAgICAgZGF0YUxheWVyVHJpZ2dlcihmb3JtSWQsICdmb3JtX2FiYW5kb24nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXZsclRlc3RpbmcnKSkgeyAvLyBTZXR0aW5nIGF2bHJUZXN0aW5nIHdpbGwgJ3BhdXNlJyB0aGUgdW5sb2FkaW5nIGFsbG93aW5nIHRoZSBjb25zb2xlIHRvIGJlIHJlYWQuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh3aW5kb3cuYXZhLmFiYW5kb25lZEZvcm1zKSk7XG4gICAgcmV0dXJuICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gbGVhdmU/JztcbiAgfVxufTtcbi8qIGVzbGludC1lbmFibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cblxuZnVuY3Rpb24gaW5pdEF2YWZvcm0oaWQgPSAnYXZhZm9ybS1yb290JywgZm9ybVRlbXBsYXRlID0gbnVsbCwgaXNNb2RhbCA9IGZhbHNlLCBkaXNhYmxlSGlkZUZpZWxkcyA9IGZhbHNlLCB1c2VySW5mbyA9IG51bGwpIHtcbiAgaWYgKGZvcm1UZW1wbGF0ZSA9PT0gbnVsbCkgcmV0dXJuO1xuICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSkge1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdGb3JtUmVuZGVyRXJyb3InLFxuICAgICAgZm9ybUlkOiBpZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogYCR7Zm9ybVRlbXBsYXRlfSAtIHNyYy9pbmRleC5qcyBzeXN0ZW0gZmFpbHVyZWAsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBSZWFjdERPTS5yZW5kZXIoXG4gICAgPFByb3ZpZGVyIHN0b3JlPXtzdG9yZX0+XG4gICAgICA8QXBwIGZvcm1JZD17aWR9IGZvcm1UZW1wbGF0ZT17Zm9ybVRlbXBsYXRlfSBpc01vZGFsPXtpc01vZGFsfSBkaXNhYmxlSGlkZUZpZWxkcz17ZGlzYWJsZUhpZGVGaWVsZHN9IHVzZXJJbmZvPXt1c2VySW5mb30gLz5cbiAgICA8L1Byb3ZpZGVyPixcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCksXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNldEZvcm1zKHVzZXJJbmZvcm1hdGlvbiwgZXJyb3JOb3RpZmljYXRpb24gPSBmYWxzZSkge1xuICAvLyBGb3JtIHRpdGxlIHN0eWxpbmcuXG4gIC8vIEZvcm0gdGl0bGUgaXMgb3V0c2lkZSB0aGUgYXBwbGljYXRpb24gc28gdGhpcyBuZWVkcyB0byBhcHBlbmQgdG8gdGhlIGhlYWRcbiAgLy8gVE9ETzogdXBkYXRlIEFFTSB0byBwYXNzIGluIGZvcm0gdGl0bGUgZm9yIGFwcGxpY2F0aW9uIGNvbnRyb2wvc3R5bGluZyBhbmQgcmVtb3ZlIHRoaXMgZnVudGlvbi9mZWF0dXJlXG4gICAgY29uc3QgaXNIZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICBpZiAoaXNIZWFkKSB7XG4gICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlLmlkID0gJ2F2YUZvcm1SZWFjdFN0eWxlc0FwcGVuZCc7XG4gICAgc3R5bGUuaW5uZXJIVE1MID0gYC5hdmFmb3JtLWpzIC5mb3JtLXRpdGxlIHsgJHtkZWZhdWx0Rm9ybVRpdGxlfX1gO1xuICAgIGlzSGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cbiAgY29uc3QgZGVtb0l0ZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXZhZm9ybS1kZW1vLWFsZXJ0Jyk7XG4gIGlmIChkZW1vSXRlbXMubGVuZ3RoID4gMCkge1xuICAgIGZvciAobGV0IGQgPSAwOyBkIDwgZGVtb0l0ZW1zLmxlbmd0aDsgZCsrKSB7XG4gICAgICBkZW1vSXRlbXNbZF0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gIH1cblxuICBjb25zdCBmb3JtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F2YWZvcm0tcm9vdCcpO1xuICBpZiAoZm9ybXMubGVuZ3RoIDwgMSAmJiBlcnJvck5vdGlmaWNhdGlvbikge1xuICAgIGxvZ2dlcih7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIG1zZ1R5cGU6ICdGb3JtUmVuZGVyRXJyb3InLFxuICAgICAgZm9ybUlkOiAnJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogJ05vIGVsZW1lbnRzIGJ5IGNsYXNzTmFtZSBcImF2YWZvcm0tcm9vdFwiJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgdXNlckluZm8gPSBmb3JtYXRVc2VySW5mbyh1c2VySW5mb3JtYXRpb24pO1xuICBpZiAodXNlckluZm8gJiYgdXNlckluZm8gIT09IG51bGwgJiYgdXNlckluZm8uZW1haWwgJiYgdXNlckluZm8uZW1haWwgIT09ICcnKSB7XG4gICAgd2luZG93LmF2YS51c2VyID0ge1xuICAgICAgaXNMb2dnZWRJbjogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHVzZXJJbmZvKSB7XG4gICAgY29tcGxldGVkRm9ybXMubGVuZ3RoID0gMDtcbiAgICBjb25zdCByZW1vdmVBdmFmb3JtQ29tcGxldGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1hdmFmb3JtLWNvbXBsZXRlPVwidHJ1ZVwiXScpO1xuICAgIGlmIChyZW1vdmVBdmFmb3JtQ29tcGxldGUgJiYgcmVtb3ZlQXZhZm9ybUNvbXBsZXRlICE9IG51bGwpIHJlbW92ZUF2YWZvcm1Db21wbGV0ZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtYXZhZm9ybS1jb21wbGV0ZScpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnYXZhQXV0b1NhdmUnKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBpc1NldCA9IGZvcm1zW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21wbGV0ZScpO1xuICAgIC8vIGRhdGEtY29uZmlncyB0aWVzIHRvIGZpbmFsSnNvbk9iamVjdCBpbiByZWFjdCBIZWxwZXJzXG4gICAgbGV0IGNvbmZpZ3MgPSBmb3Jtc1tpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29uZmlncycpIHx8ICd7fSc7XG5cbiAgICB0cnkge1xuICAgICAgY29uZmlncyA9IGF0b2IoY29uZmlncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgICAgLy8gQXNzdW1lcyBpdCBpcyBub3QgZGVjb2RlZCBhbmQgaXMgQUVNIGRlZmF1bHQgSlNPTlxuICAgIH1cbiAgICBjb25maWdzID0gaXNKc29uKGNvbmZpZ3MpID8gSlNPTi5wYXJzZShjb25maWdzKSA6IG51bGw7XG4gICAgaWYgKGNvbmZpZ3MgPT09IG51bGwpIHtcbiAgICAgIGxvZ2dlcih7XG4gICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICBtc2dUeXBlOiAnRm9ybVJlbmRlckVycm9yJyxcbiAgICAgICAgZm9ybUlkOiAnJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1lc3NhZ2U6ICdObyBjb25maWcgZm91bmQgb24gZWxlbWVudC4nLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm47IC8vIElmIG5vIGNvbmZpZ3MgYXJlIGZvdW5kLCBzdG9wIHByb2Nlc3NpbmdcbiAgICB9XG5cbiAgICBsZXQgaXNNb2RhbEZvcm0gPSBmYWxzZTtcbiAgICBsZXQgaWQgPSBmb3Jtc1tpXS5nZXRBdHRyaWJ1dGUoJ2lkJyk7IC8vIEdldCB0aGUgZGl2IElEXG4gICAgaWYgKCFpZCkgeyAvLyBJZiBkaXYgSUQgaXMgbm90IHNldCwgdXNlIHRoZSBjb25maWcgdGVtcGxhdGVcbiAgICAgIGlkID0gY29uZmlncy50ZW1wbGF0ZTtcbiAgICAgIGlkID0gZm9ybWF0Rm9ybVRlbXBsYXRlTmFtZShpZCk7XG4gICAgICBpc01vZGFsRm9ybSA9IGNvbmZpZ3MudGhlbWUgJiYgY29uZmlncy50aGVtZS5sYXlvdXQgJiYgY29uZmlncy50aGVtZS5sYXlvdXQgPT09ICdtb2RhbCc7XG4gICAgICBpZiAoY29tcGxldGVkRm9ybXMuaW5jbHVkZXMoaWQpKSB7XG4gICAgICAgIGlkID0gZm9ybWF0Rm9ybVRlbXBsYXRlTmFtZShgJHtpZH0tJHtpfS0ke2NvbXBsZXRlZEZvcm1zLmxlbmd0aH1gKTtcbiAgICAgIH0gLy8gSWYgaXMgYWxyZWFkeSBzZXQsIHN0b3AgcHJvY2Vzc2luZ1xuICAgICAgZm9ybXNbaV0uc2V0QXR0cmlidXRlKCdpZCcsIGlkKTsgLy8gc2V0IHRoZSBkaXYgSURcbiAgICAgIGZvcm1zW2ldLnNldEF0dHJpYnV0ZSgnZGF0YS10ZW1wbGF0ZScsIGNvbmZpZ3MudGVtcGxhdGUpOyAvLyBzZXQgcmVkdW5kYW50IGRhdGEtZm9ybXRlbXBsYXRlXG4gICAgICBmb3Jtc1tpXS5zZXRBdHRyaWJ1dGUoJ2RhdGEtYXZhZm9ybS1jb21wbGV0ZScsICd0cnVlJyk7IC8vIHNldCByZWR1bmRhbnQgZGF0YS1mb3JtdGVtcGxhdGVcblxuICAgICAgLy8gUnVuIGZvcm0gcHJvY2Vzc1xuICAgICAgd2luZG93LmF2YUNvbXBsZXRlZEZvcm1zID0gY29tcGxldGVkRm9ybXM7XG4gICAgfVxuICAgIGNvbXBsZXRlZEZvcm1zLnB1c2goaWQpO1xuICAgIGlmICghaXNTZXQgJiYgaWQpIGluaXRBdmFmb3JtKGlkLCBjb25maWdzLnRlbXBsYXRlLCBpc01vZGFsRm9ybSwgY29uZmlncy5zaG93Rm9ybSwgdXNlckluZm8pO1xuICB9XG5cbn1cblxuLyogSWYgcmVhY3QgaGl0cyB0aGlzIG9uIGluaXRpYWwgcmVuZGVyIHRoZW4gd2UgcmVxdWVzdCBhIHJlZmlyZSBvZiBhdXRoIGNvbXBsZXRlXG4gIHdlIG9ubHkgcmVxdWlyZSB0aGlzIG9uIGluaXRpYWwgcmVuZGVyLCBpZiB0aGUgc2V0IGZvcm1zIGZuIGlzIGF2YWlsYWJsZSBvbiB3aW5kb3dcbiAgd2UgdXNlIHRoYXQgaW5zdGVhZFxuKi9cbmZ1bmN0aW9uIHNldFdpbmRvd0Zvcm1zKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcXVlc3RBdXRoID0gbmV3IEN1c3RvbUV2ZW50KCdhdXRoOnJlcXVlc3RlZCcpO1xuICAgIHdpbmRvdy5zZXRGb3JtcyA9ICh1c2VySW5mbykgPT4gc2V0Rm9ybXModXNlckluZm8sIHRydWUpO1xuICAgIHNldEZvcm1zKG51bGwpO1xuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KHJlcXVlc3RBdXRoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignYW4gZXJyb3Igb2NjdXJyZWQgaW4gc2V0IHdpbmRvdyBmb3JtcycsIGVycik7XG4gIH1cbn1cblxuc2V0V2luZG93Rm9ybXMoKTtcblxuY29uc3QgcmVhZHlTdGF0ZUNhbGxiYWNrID0gKCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG4gIGxldCBoYXNTdWJtaXNzaW9uU2NyaXB0ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmICgoc2NyaXB0c1tpXS5zcmMpLmluZGV4T2YoJy9yZWFjdC9taWNyby1zZXJ2aWNlLycpICE9PSAtMSkgaGFzU3VibWlzc2lvblNjcmlwdCA9IHRydWU7XG4gIH1cbiAgaWYgKCFoYXNTdWJtaXNzaW9uU2NyaXB0KSB7XG4gICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgc2NyaXB0LnNyYyA9IFNZU1RFTUNPTkZJR1MuU1VCTUlTU0lPTl9TRVJWSUNFUztcbiAgICBzY3JpcHQuaWQgPSAncm1zLXN1Ym1pc3Npb24tc2VydmljZSc7XG4gICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm1zLXN1Ym1pc3Npb24tc2VydmljZScpKSBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignYW4gZXJyb3Igb2NjdXJyZWQgaW4gcmVhZHlTdGF0ZUNhbGxiYWNrJywgZXJyKTtcbiAgfVxufTtcblxuLy8gJEZsb3dGaXhNZTogQWxsb3dcbmlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnIHx8IChkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAnbG9hZGluZycgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwpKSByZWFkeVN0YXRlQ2FsbGJhY2soKTtcbmVsc2UgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIHJlYWR5U3RhdGVDYWxsYmFjayk7XG4iXSwibmFtZXMiOlsiZGV2IiwiQVBJIiwiQVZBRk9STV9URU1QTEFURV9BUEkiLCJBVkFGT1JNX1RZUEVBSEVBRF9BUEkiLCJBVkFUQVhfQVBJIiwiQlVTSU5FU1NfTElDRU5TRV9JTkRVU1RSSUVTX1NUT1JBR0UiLCJDT05ORUNUMFJfQVBJIiwiRUxPUVVBX0FQSSIsIk1BWE1JTkRfQVBJIiwiTUlMRVNfQVBJIiwiTUFSS0VUSU5HX0FQSSIsIk1JTEVTX01BWE1JTkRfQkFDS1VQIiwiU1VNT19BUEkiLCJTVUJNSVNTSU9OX1NFUlZJQ0VTIiwicHJvZCIsInN0YWdlIiwiY2hlY2tJZklzRGV2ZWxvcCIsImVudiIsIk5PREVfRU5WIiwicHJvY2VzcyIsIkFWQV9FTlYiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJpbmRleE9mIiwiY29uZmlnIiwiYXZhIiwicmVhY3QiLCJhcGlTZXR0aW5ncyIsInRpbWVvdXQiLCJ2NCIsInV1aWR2NCIsImZldGNoIiwiY2hlY2tGb3JEZWJ1ZyIsImNoZWNrSWZJc1Rlc3RpbmciLCJnZXRBZG9iZVZpc2l0b3JJZCIsImdldEJyb3dzZXJJbmZvIiwiQVBJX1NFVFRJTkdTIiwiYnJvd3NlckluZm8iLCJzZXNzaW9uSWQiLCJjYWxsVG9TdW1vTG9nZ2VyIiwiZXZlbnQiLCJzdW1vRW5kcG9pbnQiLCJ1cmwiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsInN1bW9QYXJhbSIsInNyY0NhdGVnb3J5IiwidGVzdGluZyIsIm1ldGhvZCIsInRoZW4iLCJyZXN1bHQiLCJyZXNwb25zZSIsIm9rIiwiY29uc29sZSIsImxvZyIsImxvZ2dpbmdGaWx0ZXIiLCJsZXZlbCIsImRlZmF1bHRTdGF0ZSIsImFkZHJlc3NWYWxpZGF0aW9uIiwicmF0ZSIsInN0YXRlIiwiYWN0aW9uIiwidHlwZSIsImZvcm1JZCIsImFkZHJlc3MiLCJuZXdTdGF0ZSIsIm5ld0FkZHJlc3NDYXB0dXJlIiwiY2FwdHVyZUFkZHJlc3MiLCJjb25jYXQiLCJmYWlsIiwic3VjY2VzcyIsInVua25vd24iLCJkYXRhIiwiZW1haWwiLCJzdGF0dXMiLCJmb3JtQ29uZmlncyIsImF0dHJpYnV0aW9uX2VuZ2luZSIsImFkZGl0aW9uYWwiLCJhZGRpdGlvbmFsX3JlcXVpcmVkIiwiYWRkaXRpb25hbF9xdWVyeSIsImF1dG9Gb2N1cyIsImF2YWZvcm1fdGVtcGxhdGUiLCJidXR0b25fbGFiZWwiLCJicmF6aWwiLCJjYWxsYmFjayIsImNhbXBhaWduX2lkIiwiY2FtcGFpZ25fbmFtZSIsImNvbXBhbnlfcHJvZmlsZSIsImNvbm5lY3Rvcl9pZCIsImNvbm5lY3Rvcl9uYW1lIiwiY29ubmVjdG9yX3NlYXJjaCIsImNvbnRhY3RfbWV0aG9kIiwiY29udGFpbmVyIiwiY291bnRyaWVzIiwiY291bnRyaWVzX3JlcXVpcmVkIiwiY291bnRyeV9sYWJlbCIsImNvdW50cnlfb2ZfaW50ZXJlc3QiLCJjdXN0b20wIiwiY3VzdG9tMF9lbG9xdWEiLCJjdXN0b20wX21lcmdlIiwiY3VzdG9tMF9yZXF1aXJlZCIsImN1c3RvbTBfdmFsaWRhdGUiLCJjdXN0b21fdmFsaWRhdG9ycyIsImRhdGFfbG9jYWwiLCJkZWJ1ZyIsImRpc2FibGVfZmFkZSIsImVjb21tZXJjZSIsImVtYWlsX3ZhbGlkYXRpb24iLCJlbWVhIiwiZW1wbG95ZWVfc2l6ZSIsImVuZ2xpc2giLCJldmVudF9pZGVudGlmaWVyIiwiZm9ybV9uYW1lIiwiZm9ybSIsImdvYWxfdHlwZSIsImluZGlhIiwiaW5kdXN0cnlfaWQiLCJpbmxpbmVfZmllbGRzIiwiaXAiLCJsYW5ndWFnZSIsImxlYWRfc3RhdHVzIiwibHNtciIsImxzbyIsIm1hc2tfc2Vuc2l0aXZlX2ZpZWxkcyIsIm5haWNzIiwibm9TdWJtaXNzaW9uIiwib2ZmZXIiLCJvcHBfc3VidHlwZSIsIm9wcF90eXBlIiwib3B0aW4iLCJvcHRpbl9jaGVja2VkIiwib3N0X3BvaSIsInBhcnRuZXJzb3VyY2UiLCJwYXJ0bmVyX3JvbGUiLCJwb2kiLCJwb2lfbWVudSIsInBvaV9tZW51X2RlZmF1bHQiLCJwb2lfbWVudV9sYWJlbCIsInBvaV9tZW51X3ZhbHVlcyIsInByb2dyZXNzaXZlX2NoYWluIiwicHJvZ3Jlc3NpdmVfcHJvZmlsaW5nIiwicmF0ZUxvb2t1cEZvcm0iLCJyZWRpcmVjdHVybCIsInJlZmVycmVyIiwic29obyIsInRlbXBsYXRlIiwidGhlbWUiLCJxcyIsInF1ZXJ5X3N0cmluZyIsIkZPUk1DT05GSUdTIiwiQVZBRk9STVMiLCJBVkFGT1JNRU1BSUwiLCJjbGFzc2VzIiwiZGVzY3JpcHRpb24iLCJmaWVsZHMiLCJkaXNwbGF5VGV4dCIsImlkIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm5hbWUiLCJzdWJtaXQiLCJ0aGFua3lvdSIsIm1lc3NhZ2UiLCJkaXNwbGF5TmFtZSIsImxheW91dCIsInNob3dMb2FkZXIiLCJ0aXRsZSIsIkFWQUZPUk1FTUFJTEhJRERFTiIsInZhbHVlIiwiQVZBRk9STURFTU8iLCJBVkFGT1JNTEFOR1VBR0UiLCJBVkFGT1JNVEVTVCIsIm9wdGlvbnMiLCJkaXNwbGF5IiwiQVZBRk9STUNPTFVNTiIsIkJBU0lDIiwiQkFTSUNXSVRISU5EVVNUUllURVNUIiwiQkFTSUNTVUJNSVNTSU9OTElNSVRURVNUIiwiY29uZmlncyIsInN1Ym1pc3Npb25MaW1pdENhcCIsInN1Ym1pc3Npb25MaW1pdElkIiwic3VibWlzc2lvbkxpbWl0VGhhbmt5b3VNZXNzYWdlIiwic3VibWlzc2lvbkxpbWl0RGlzYWJsZWRNZXNzYWdlIiwic3VibWlzc2lvbkVuZERhdGUiLCJCQVNJQ1dJVEhCVVNJTkVTUyIsIkJBU0lDV0lUSFdFQlNJVEUiLCJCQVNJQ1dJVEhXRUJTSVRFUkVRVUlSRUQiLCJmaWVsZHNPdmVyd3JpdGUiLCJmaWVsZHNSZXBsaWNhdGUiLCJCQVNJQ01PREFMIiwiQkFTSUNXSVRIQ09NTUVOVFMiLCJCQVNJQ1dJVEhUT1MiLCJmaWVsZHNBcHBlbmQiLCJsaW5rcyIsInRleHQiLCJCQVNJQ1BMQUlOIiwiQ0hBVCIsIkNIQVRTSU1QTEUiLCJmaWVsZHNSZW1vdmUiLCJDSElMSVBJUEVSIiwiY2hpbGlwaXBlciIsInJvdXRlciIsInNjcmlwdHMiLCJERUZBVUxUIiwiRU1BSUxPTkxZUkVBQ1QiLCJjb250YWluc0dkcHIiLCJvZmZzZXQiLCJwb3NpdGlvbiIsIkVNQUlMT05MWUNPTFVNTiIsIkVWRU5UUyIsIklOSVRURVNUIiwiSU5URVJOQUxQQVJUTkVSUkVGRVJSQUwiLCJNVERUT09MIiwiTUxUUkFURUxPT0tVUCIsIk1MVFJBVEVMT09LVVBXSVRIUEhPTkUiLCJNTFRDT05UQUNUVVMiLCJQQVJUTkVSIiwiUEFSVE5FUkFDUCIsIlBBUlRORVJCSEFSQVQiLCJQQVJUTkVSREVNTyIsIlBBUlRORVJEU1AiLCJQQVJUTkVSTVNQIiwiUEFSVE5FUlJFRkVSUkFMIiwiUEFSVE5FUlJFRkVSUkFMU0lNUExFIiwiUEFSVE5FUlJFRkVSUkFMQUNUSVZFIiwidmlicmFuY3kiLCJQQVJUTkVSUkVGRVJSQUxFTUVSR0lORyIsIlBBUlRORVJSRUZFUlJBTEVTVEFCTElTSEVEIiwiUEFSVE5FUlJFRkVSUkFMTEFVTkNIIiwiUEFSVE5FUlNFTEVDVCIsImZpZWxkU2V0IiwiZGlzcGxheVRleHRDbGFzcyIsIlBBUlRORVJTRUxFQ1RURVNUIiwiaGFzRHluYW1pY0ZpZWxkIiwiZHluYW1pY0ZpZWxkcyIsIkFDUCIsIk1TUCIsIlBBUlRORVJTRUxFQ1RURVNUQ0hFQ0tCT1giLCJwYXJ0bmVyX2NvbW1pc3Npb25fYWdyZWVtZW50IiwieWVzIiwiUVVFU1RJT05TV0lUSE9VVENPTVBBTlkiLCJWQVRFQkFZVEVTVCIsIm1pbmhlaWdodCIsIlZBVExJVkUiLCJWQVRMSVZFV0lUSENPTU1FTlRTIiwiVkFUTElWRUNPTlRBQ1RVUyIsIlZBVExJVkVDT05UQUNUVVNSRUdJU1RSQVRJT04iLCJJTkRVU1RSWV9GSUVMRCIsImVsb3F1YVBheWxvYWQiLCJhZGRpdGlvbmFsX2luZm9ybWF0aW9uIiwiYWRvYmVfdmlzaXRvcl9pZCIsImFwcG9pbnRtZW50X2RhdGV0aW1lIiwiYjJiIiwiYjJjIiwiY2l0eSIsImNvbWNfaG91cnNfc3BlbnQiLCJjb21jX3RheGFibGVfcmV2ZW51ZSIsImNvbWNfbGFib3JfY29zdHMiLCJjb21jX2Jhc2VfdGF4X2xpYWJpbGl0eSIsImNvbWNfaW50ZXJlc3RfcGVuYWx0eSIsImNvbWNfcG90ZW50aWFsX3RheF9saWFiaWxpdHkiLCJjb21jX3RvdGFsX2Nvc3QiLCJjb21wYW55IiwiY29tcGFueV9hZGRyZXNzIiwiY29tcGFueV9jaXR5IiwiY29tcGFueV9jb3VudHJ5IiwiY29tcGFueV9wb3N0YWxjb2RlIiwiY29tcGFueV9zdGF0ZSIsImNvbnRlbnRfaWQiLCJjb252ZXJzaW9uRGF0ZSIsImNvbnZlcnNpb25fcGFnZSIsImNvdW50cnkiLCJjb3VudHJ5X2ludGVyZXN0IiwiY3JlYXRlX2FpX2FjY291bnQiLCJjdXN0b21fcm91dGluZyIsImRhdGUiLCJkYXRldGltZSIsImRvd25sb2FkX2xpbmsiLCJlY29tbWVyY2Vfc29sdXRpb24iLCJlZl9pZCIsImVscV9ndWlkIiwiZWxxX3NpdGVfaWQiLCJlbXBsb3llZV9iYW5kIiwiZXJwIiwiZXZlbnRfaWRlbnRpZmllcjIiLCJmaXJzdF9uYW1lIiwiZm9yYmVzIiwiZm9ydHVuZSIsImdkcHJfY29uc2VudF9kYXRlIiwiZ2Rwcl9lbGlnaWJsZSIsImdvb2dsZV9jbGlja19pZCIsImluZHVzdHJ5IiwiaXBfYWRkcmVzcyIsImpvYl9mdW5jdGlvbiIsImpvYl90aXRsZSIsImxhc3RfbmFtZSIsImxzbzEiLCJtYXJrZXRpbmdfZmVlZGJhY2tfbm90ZXMiLCJtYXhtaW5kX2R1bXAiLCJteWxvZGdldGF4X3NvdXJjZSIsIm15bG9kZ2V0YXhfY2hhbm5lbCIsIm9wdF9pbiIsIm9yaWdpbmFsX2VmX2lkIiwicGFnZSIsInBhcnRuZXJfcmVwX2VtYWlsIiwicGhvbmUiLCJwb3MiLCJyZWZlcnJpbmdfdXJsIiwicmVnaXN0cmF0aW9uc19yZXR1cm5zIiwicmV2ZW51ZSIsInJldmVudWVfYmFuZCIsInJvdXRlX3RvIiwic3ViX2luZHVzdHJ5Iiwic2ljX2NvZGUiLCJ0aW1lIiwidWNpZCIsInVzZXJfYWdlbnQiLCJ2YXRfbnVtYmVyIiwidmF0X3F1ZXN0aW9uIiwid2Vic2l0ZSIsIndlYl9wcm9wZXJ0eSIsInppcCIsInppcF9jb2RlIiwiemlwX21heG1pbmQiLCJsb2dnZXIiLCJhcHBlbmRDbGFzc1RvSGVhZGVyIiwiY2xhc3Nlc1NldCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJhZGRTdHlsZXMiLCJjcmVhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhcHBlbmRDaGlsZCIsImNsb3NlQWZ0ZXJSb3V0ZWQiLCJlbGVtIiwicXVlcnlTZWxlY3RvciIsImNsaWNrIiwiZGlzYWJsZUNoaWxpcGlwZXJCdXR0b24iLCJlbGUiLCJwYXJlbnRFbGVtZW50IiwiY29ubmVjdGVkQ2hpbGlwaXBlckVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJjbGFzc0xpc3QiLCJhZGQiLCJlbmFibGVDaGlsaXBpcGVyQnV0dG9uIiwicmVtb3ZlQXR0cmlidXRlIiwicmVtb3ZlIiwiZ2V0QWN0aXZlQ2hpbGlwaXBlckF0dHJpYnV0ZSIsImF0dHJpYnV0ZSIsImRhdGFBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJ0ZXN0IiwiaXNBY3RpdmVDaGlsaXBpcGVyRm9ybSIsImNhcHR1cmVGaWVsZHMiLCJmaWx0ZXIiLCJmIiwibGVuZ3RoIiwiQm9vbGVhbiIsImNoaWxpcGlwZXJSb3V0ZXIiLCJjb250YWlucyIsImlzQ29ubmVjdGVkVG9DaGlsaXBpcGVyIiwicGFyZW50SWQiLCJmYWlsdXJlUmVkaXJlY3QiLCJyZWRpcmVjdCIsImFzc2lnbiIsIm1zZ1R5cGUiLCJjaGlsaVBpcGVyIiwiZXJyb3IiLCJsYXVuY2hDaGlsaXBpcGVyIiwicGF5bG9hZCIsIkNoaWxpUGlwZXIiLCJFbWFpbCIsIkZpcnN0TmFtZSIsIkxhc3ROYW1lIiwiQ29tcGFueSIsIlBob25lIiwiTWFya2V0aW5nRmVlZGJhY2tOb3RlcyIsInRpdGxlU3R5bGUiLCJjbG9zZU9uT3V0c2lkZSIsIm1vYmlsZVJlZGlyZWN0TGluayIsIm9uUm91dGVkIiwibGVhZCIsImVyciIsInVwZGF0ZUNoaWxpcGlwZXJCdXR0b24iLCJ1cGRhdGVDbGFzcyIsInNldE1sdFJhdGVSZXNwb25zZSIsImNhcHR1cmVNbHRBdmFUYXhSZXNwb25zZSIsImluaXRBcHBsaWNhdGlvbiIsImVudlN0YXRzIiwiYWRvYmVWaXNpdG9ySWQiLCJpbml0Rm9ybUFwcGxpY2F0aW9uIiwiaXNNb2RhbCIsInBhcmFtcyIsInVzZXJJbmZvIiwiZGlzYWJsZUhpZGVGaWVsZHMiLCJpbml0Rm9ybUFwcGxpY2F0aW9uRmFpbGVkIiwiYWRkUmVxdWlyZWRGaWVsZCIsIm5ld0Zvcm1GaWVsZHMiLCJuZXdGaWVsZCIsImNhcHR1cmVJbnB1dCIsImRpc3BhdGNoIiwiaW5wdXRUYXJnZXQiLCJpbnB1dFRhcmdldFRyYWNrQWJhbmRvbiIsImNhcHR1cmVJbnRsUGhvbmUiLCJjb3VudHJ5RGF0YSIsImNhcHR1cmVEaWFsQ29kZSIsImRpYWxDb2RlIiwicmVtb3ZlQWJhbmRvbiIsInNldEFjdGl2ZUZpZWxkIiwic2V0QWN0aXZlRm9ybSIsInNldElucHV0Q2FwdHVyZUludmFsaWQiLCJzZXRJbnB1dENhcHR1cmVWYWxpZCIsInZhbGlkYXRlQ29ubmVjdG9yIiwiY29ubmVjdG9ycyIsImZpZWxkSWQiLCJ2YWxpZGF0ZUludGxQaG9uZSIsIm51bWJlciIsInNldEVsb3F1YUxvb2t1cFZhbGlkIiwidmFsdWVzIiwic2V0RWxvcXVhTG9va3VwSW52YWxpZCIsInJlY2VpdmVTeXN0ZW1FcnJvciIsImluZm8iLCJzdGF0dXNDb2RlIiwic2V0TGFzdEZpZWxkVmFsaWRhdGlvbiIsInNldExvYWRpbmdTdGFydCIsInJlcXVlc3QiLCJzZXRMb2FkaW5nRmluaXNoIiwiY2xlYXJGb3JtU3VibWl0IiwiY2xlYXJDYXB0dXJlZFZhbHVlcyIsInVwZGF0ZUR5bmFtaWNSZXF1aXJlZEZpZWxkIiwidHJhY2tGb3JtQWJhbmRvblN0YXR1cyIsImNsb3NlUGlja0xpc3QiLCJjb25uZWN0b3JTZWFyY2hGYWlsZWQiLCJlbmRwb2ludCIsImNvbm5lY3RvclNlYXJjaFN1Y2Nlc3MiLCJzZWFyY2hEYXRhIiwidGVybSIsImhpZGVTZWFyY2hSZXN1bHRzIiwic2F2ZVNlYXJjaFNlbGVjdGlvbiIsImFsdCIsIm1heG1pbmRSdW5uaW5nIiwibWF4bWluZFN0b3BwZWQiLCJtYXhtaW5kU3VjY2VzcyIsInJlc3VsdHMiLCJtYXhtaW5kRmFpbCIsIm1heG1pbmRQcmV2ZW50ZWQiLCJtaWxlc01heG1pbmRSdW5uaW5nIiwibWlsZXNNYXhtaW5kU3RvcHBlZCIsIm1pbGVzTWF4bWluZFN1Y2Nlc3MiLCJtaWxlc01heG1pbmRGYWlsIiwibWlsZXNNYXhtaW5kUHJldmVudGVkIiwiYnJpdGVWZXJpZnlSZXNwb25zZSIsImVtYWlsVmVyaWZ5RmFpbGVkIiwiaW5wdXRJZCIsImVtYWlsVmVyaWZ5U3VjY2VzcyIsInNldE1pbGVzU3VibWlzc2lvblN0YXR1cyIsInN1Ym1pc3Npb25MaW1pdEFwaUZhaWxlZCIsInN1Ym1pc3Npb25saW1pdGlkIiwic2V0U3VibWlzc2lvbkxpbWl0RXhjZWVlZGVkIiwic2V0U3lzdGVtRXJyb3IiLCJyZXNldEZvcm0iLCJ0b2dnbGVNb2RhbCIsInRyYWNrQXNNb2RhbEZvcm0iLCJiaXJnaHRWZXJpZnlTY2hlbWEiLCJwcm9wZXJ0aWVzIiwiYWNjb3VudCIsImNvbm5lY3RlZCIsImRpc3Bvc2FibGUiLCJkb21haW4iLCJkdXJhdGlvbiIsImVycm9yX2NvZGUiLCJyb2xlX2FkZHJlc3MiLCJzY2hlbWFWYWxpZGF0b3IiLCJicml0ZVZlcmlmeVNjaGVtYSIsIm1hcmtldGluZ0FQSSIsImJyaXRlVmVyaWZ5RW1haWxBZGRyZXNzVmFsaWRhdGlvbiIsInVzZXJFbWFpbCIsImVuY29kZVVSSUNvbXBvbmVudCIsInRyaW0iLCJyZXF1ZXN0VXJsIiwiaGVhZGVycyIsImJyaXRlVmVyaWZ5Iiwic2NoZW1hVmFsaWRhdGlvblJlc3BvbnNlIiwiaG9zdCIsImlzU3RhdHVzIiwiZXJyb3JNZXNzYWdlcyIsIkFERFJFU1MiLCJBRERSRVNTMSIsIkNPVU5UUlkiLCJDSVRZIiwiRklSU1ROQU1FIiwiTEFTVE5BTUUiLCJQSE9ORSIsIlBPU1RBTENPREUiLCJTVEFURSIsIlRFTEVQSE9ORSIsIlZBVE5VTUJFUiIsIlpJUCIsIlpJUENPREUiLCJhZGRyZXNzQ2hlY2siLCJhbHBoYUNoZWNrIiwiYWxwaGFDaGVja1dpdGhTcGFjZSIsImFscGhhTmFtZUNoZWNrIiwiYWxwaGFOdW1lcmljQ2hlY2siLCJhbHBoYVVwcGVyQ2hlY2siLCJjaXR5Q2hlY2siLCJjb21wYW55Q2hlY2siLCJlbWFpbENoZWNrIiwibGVuZ3RoQ2hlY2sxIiwibnVtZXJpY0NoZWNrIiwibm9OdW1iZXJzQ2hlY2siLCJvbmVBbHBoYU9uZU51bWVyaWNSZXF1aXJlZCIsInBob25lQ2hlY2siLCJwb3N0YWxDaGVjayIsIlN0YXRlUHJvdmljZUNoZWNrIiwieHNzUHJldmVudCIsIndlYnNpdGVWYWxpZGF0aW9uIiwiZW1vamlWYWxpZGF0aW9uIiwiUkVHRVhQIiwiQVBQT0lOVE1FTlREQVRFVElNRSIsIkNPTVBBTlkiLCJDV0VCU0lURSIsIkVNQUlMIiwiRU1PSkkiLCJOQU1FIiwiUFJPVklOQ0UiLCJSRUdJT04iLCJYU1NDSEVDSyIsImRheWpzIiwiRVJST1JNRVNTQUdFUyIsIlJFR0VYUF9WQUxJREFUSU9OIiwiY2FwdHVyZVVzZXJJbmZvIiwiZm9yRWFjaCIsIkFycmF5IiwiaXNBcnJheSIsImNhcHR1cmVEeW5hbWljc1JlcXVpcmVkRmllbGRzIiwidGFyZ2V0IiwiYWxsVmFsdWVzIiwiT2JqZWN0Iiwia2V5cyIsInNldFVwZGF0ZUZpZWxkRHluYW1pY3NBcnJheXMiLCJmaWVsZHNBcnJheSIsImFkZFJlcXVpcmVkIiwiaSIsImNoaWxkSWQiLCJwdXNoIiwiayIsImNsZWFuRmllbGRWYWx1ZSIsInN0cmlwU3BhY2VzRnJvbUZpZWxkIiwiaW5jbHVkZXMiLCJjaGVja0lmRmllbGRJc1NldCIsImNoZWNrSWZIYXNFcnJvciIsImNvbnRhaW5zR2RwckZpZWxkIiwiZ2RwckZpZWxkIiwiZm9ybWF0Rm9ybVRlbXBsYXRlTmFtZSIsImZvcm1OYW1lIiwicmVwbGFjZSIsInRvVXBwZXJDYXNlIiwiZ2V0RmllbGRWYWx1ZU9iamVjdCIsImdldEZvcm1hdHRlZERhdGUiLCJzZWxlY3RlZERhdGUiLCJEYXRlIiwieWVhciIsImdldEZ1bGxZZWFyIiwiaG91cnMiLCJnZXRIb3VycyIsIm1pbnV0ZXMiLCJnZXRNaW51dGVzIiwidG9TdHJpbmciLCJtb250aCIsImdldE1vbnRoIiwiZGF5IiwiZ2V0RGF0ZSIsImNoZWNrRGVmYXVsdEludGxQaG9uZUNvdW50cnkiLCJpc29Db2RlIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInRlc3RMb2NhbGUiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsInRvTG93ZXJDYXNlIiwiZ2V0RmllbGRJZHMiLCJmaWVsZElkcyIsImlzU3VibWl0RGlzYWJsZWQiLCJyZXF1aXJlZEZpZWxkcyIsInZhbGlkYXRlZEZpZWxkcyIsInNvbWUiLCJyIiwibG9hZEFzc29jaWF0ZWRTY3JpcHRzIiwicGFnZUhlYWQiLCJuZXdQYWdlSGVhZCIsInNjcmlwdCIsImFzeW5jIiwic3JjIiwiZ2V0SWQiLCJzcGxpdCIsInNldERpc3BsYXlUZXh0Iiwic2V0RmllbGROYW1lIiwic2V0RmllbGRPdmVyd3JpdGVDb25maWdzIiwibmV3Q29uZmlnIiwib3ZlcndyaXRlVmFsdWVzIiwib3ZlcndyaXRlIiwia2V5c1RvT3ZlcndyaXRlIiwia2V5IiwiZmllbGRWYWx1ZSIsImZpZWxkIiwibWFwIiwic2V0QWN0aXZlQ29udGFpbmVyIiwiYWN0aXZlRmllbGQiLCJzZXRDbGFzcyIsImpvaW4iLCJzZXRBY3RpdmVJbnB1dENsYXNzIiwic2V0RmllbGRDbGFzc2VzIiwibmV3Q2xhc3NlcyIsInNldElucHV0Q2xhc3MiLCJzZXRJbnB1dFZhbGlkYXRpb25DbGFzcyIsImVycm9yU3RhdGUiLCJpc1NldCIsImhhc0JlZW5WYWxpZGF0ZWQiLCJzZXRQYXJlbnRaaW5kZXgiLCJlbCIsInN0eWxlIiwiekluZGV4Iiwic2V0RXJyb3JNZXNzYWdlIiwic2V0U2VhcmNoRmllbGRWYWx1ZSIsInNlYXJjaCIsIm5ld0ZpZWxkcyIsIm5ld0luZHVzdHJ5IiwibmV3SXRlbSIsIm5ld0luZHVzdHJ5RmllbGRzIiwib2JqIiwiZmluZCIsIm8iLCJyZW1vdmVGcm9tV2luZG93QWJhbmRvbmVkIiwiYWJhbmRvbmVkRm9ybXMiLCJyZW1haW5pbmdGb3JtcyIsImUiLCJnZXRFbG9xdWFHVUlEIiwiR2V0RWxxQ3VzdG9tZXJHVUlEIiwiZ2V0UmVnRXhwUGF0dGVybiIsImlzU2VsZWN0ZWQiLCJjYXB0dXJlVmFsdWUiLCJzZXRNdWx0aVNlbGVjdFRhcmdldCIsInBhcmVudCIsInBhcmVudFZhbHVlIiwiaGFzQmVlblNlbGVjdGVkIiwic2VsZWN0ZWRPcHRpb25zIiwiZ2V0RmllbGRWaWJyYW5jeSIsImZvcm1zU3RhdGUiLCJhY3RpdmVGb3JtcyIsInZhbGlkYXRlRmllbGQiLCJjdXN0b21WYWxpZGF0aW9uIiwiaXNSZXF1aXJlZCIsImNsZWFuVGFyZ2V0IiwiaWdub3JlSW5wdXRWYWxpZGF0aW9uIiwiaWdub3JlRmllbGRCeUlkIiwiY2hlY2tlZCIsInN0YXJ0c1dpdGgiLCJwYXR0ZXJuIiwiY2hlY2tQaG9uZVZhbHVlIiwibmV3VmFsdWUiLCJjbGVhbkRpYWxDb2RlIiwiY2hlY2tWYWx1ZSIsInNwbGljZSIsInZhbGlkYXRlSW50bFBob25lRmllbGQiLCJuZXdUYXJnZXQiLCJtaW5MZW5ndGgiLCJ2YWxpZGF0ZUFsbEZpZWxkcyIsImFjdGl2ZURhdGEiLCJtYXBGaWVsZHNUb1ZhbGlkYXRvcnMiLCJhY3RpdmVEYXRhRmllbGRzIiwidGFyZ2V0RmllbGQiLCJ2YWxpZGF0ZUFkZGl0aW9uYWxGaWVsZHMiLCJhY2NlcHRlZFZhbHVlcyIsInZhbGlkRmllbGRzIiwiaXNGaWVsZERpc2FibGVkIiwibGltaXQiLCJzdWJtaXNzaW9uTGltaXRFbmREYXRlIiwic3VibWlzc2lvbkxpbWl0U3RhcnREYXRlIiwibm93IiwiZm9ybWF0Iiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsImZpZWxkc0J5TG9jYWwiLCJBZGRyZXNzIiwiZGUiLCJmciIsInByIiwiaXQiLCJlcyIsInBsIiwicHQiLCJDb21tZW50cyIsIkNpdHkiLCJDb3VudHJ5IiwiTWlzcyIsIk1yIiwiTXJzIiwiTXMiLCJOYW1lIiwiTm8iLCJRdWVzdGlvbnMiLCJTZWxlY3QiLCJTdWJtaXQiLCJTdGF0ZSIsIlRpdGxlIiwiV2Vic2l0ZSIsIlllcyIsIlppcCIsInF1ZXN0aW9uQnlMb2NhbGUiLCJlcnJvckJ5TG9jYWxlIiwiRklFTERTIiwiUVVFU1RJT05TIiwiRVJST1JNRVNTQUdFIiwidHJhbnNsYXRpb25CeUxvY2FsZSIsIkF1c3RyaWEiLCJCZWxnaXVtIiwiQnVsZ2FyaWEiLCJDcm9hdGlhIiwiQ3lwcnVzIiwiRGVubWFyayIsIkVzdG9uaWEiLCJGaW5sYW5kIiwiRnJhbmNlIiwiR2VybWFueSIsIkdyZWVjZSIsIkh1bmdhcnkiLCJJcmVsYW5kIiwiSXRhbHkiLCJMYXR2aWEiLCJMaXRodWFuaWEiLCJMdXhlbWJvdXJnIiwiTWFsdGEiLCJOZXRoZXJsYW5kcyIsIlBvbGFuZCIsIlBvcnR1Z2FsIiwiUm9tYW5pYSIsIlNsb3Zha2lhIiwiU2xvdmVuaWEiLCJTcGFpbiIsIlN3ZWRlbiIsInF1ZXN0aW9ucyIsIkxBTkdVQUdFIiwiZ2V0TG9jYWxlU3RyaW5nVGV4dCIsImxvY2FsZSIsInRyYWNrRmllbGRzIiwidHJpZ2dlckF1dG9GaWxsVHJhY2tpbmciLCJzX2dpIiwiX3NhdGVsbGl0ZSIsInMiLCJjbGVhclZhcnMiLCJsaW5rVHJhY2tWYXJzIiwibGlua1RyYWNrRXZlbnRzIiwiZXZlbnRzIiwiY3VycmVudFVSTCIsInByb3A1MSIsInBhZ2VVUkwiLCJ0bCIsInRyaWdnZXJSYXRlTG9va3VwVHJhY2tpbmciLCJpc1NhdGVsbGl0ZUJsb2NrZWQiLCJtbHRSYXRlTG9va3VwIiwiaXNWYWxpZCIsInZhbGlkIiwiaGFzUmF0ZSIsInRyYWNraW5nTmFtZSIsImFuYWx5dGljcyIsImVWYXJzIiwicHJvcHMiLCJhdmFmb3JtRW5nYWdlbWVudEFuYWx5dGljc0NhbGwiLCJlVmFyMTUiLCJlVmFyMTE1IiwiaXNNb2RhbEZvcm0iLCJwYXRobmFtZSIsImMiLCJwcm9wMzAiLCJwcm9wMzEiLCJwcm9wMzIiLCJjbGVhblByb3AzMiIsImN1cnJlbnRVcmwiLCJlVmFyODAiLCJoaWVyMSIsIlVSTCIsInBhdGhOYW1lQXJyYXkiLCJwYWdlRmlsZU5hbWUiLCJlbGVtZW50Iiwic3RvcmVkRGF0YSIsImdldFBhcmFtRnJvbUF2YVRhZyIsInBhcmFtIiwiQXZhVGFnIiwiYXZhVGFnRGF0YSIsImdldENvbWJpbmVkRGF0YSIsIm5vcm1hbGl6ZVBhcmFtIiwiaXNKc29uIiwiRk9STURBVEEiLCJFTE9RVUFQQVlMT0FEIiwiYWN0aXZlRm9ybSIsImFjdGl2ZUZpZWxkcyIsImF1dG9GaWxsRGF0YSIsImZvcm1zIiwiZmllbGRWYWx1ZXMiLCJjaGlsaXBpcGVyQ29ubmVjdGVkIiwiY2xlYW5QYXlsb2FkIiwiaGFzRXJyb3IiLCJpbml0IiwiaW5pdFN0YXR1cyIsImxhc3RGaWVsZCIsIm1vZGFsRm9ybXMiLCJyZUNhcHR1cmVGaWVsZHMiLCJzZXRGaWVsZHMiLCJzZWxlY3RlZENvbXBhbnkiLCJzaG93TW9kYWwiLCJzdWJtaXNzaW9ubGltaXQiLCJhZGRTdWJtaXNzaW9uTGltaXREYXRhVG9DYXB0dXJlIiwic3VibWlzc2lvbkZpZWxkIiwiYXV0b1NhdmVEYXRhIiwiY3VycmVudFNhdmUiLCJwYXJzZSIsImF1dG9TYXZlIiwiZGVkdXBlQXJyYXkiLCJzZXRJdGVtIiwiY2hlY2tGb3JWaXNpYmxlQ291bnRyeSIsImFycmF5IiwicmVkdWNlIiwiYWNjIiwiY3VycmVudCIsIml0ZW0iLCJmaWx0ZXJPdXRBcnJheUJ5SWQiLCJmaWx0ZXJBcnJheSIsImZpbHRlck91dEVycm9yQnlJZCIsImdldEdkcHJGaWVsZCIsImdkcHJGaWVsZHMiLCJnZXRMYXN0RmllbGRJZCIsImdldFJlcXVpcmVkRmllbGRzIiwiYXJlUmVxdWlyZWQiLCJnZXRIaWRkZW5GaWVsZHMiLCJhcmVIaWRkZW4iLCJnZXRSZXF1aXJlZEZpZWxkc0Zyb21TdG9yYWdlIiwic3RvcmVkIiwicmVtb3ZlRmllbGRzRnJvbU9iamVjdEFycmF5IiwiZ2V0RWxvcXVhS2V5IiwicmVtb3ZlRnJvbUVsb3F1YURhdGEiLCJlbG9xdWFEYXRhIiwic2F2ZVRvRWxvcXVhRGF0YSIsInYiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwidGltZVN0YW1wIiwiZ2V0VGltZSIsIm5ld0Vsb3F1YURhdGEiLCJzZXRGaWVsZE92ZXJ3cml0ZSIsInNldEV2ZW50T3B0aW9ucyIsImV2ZW50QXJyYXkiLCJuZXdFdmVudEFycmF5IiwiZXZlbnRMYWJlbCIsImV2ZW50SWRlbnRpZmllcjEiLCJldmVudElkZW50aWZpZXIyIiwiZXZlbnREYXRlVGltZSIsInNldEZpZWxkc0Zyb21TdG9yYWdlIiwic2V0SGlkZGVuUGFydG5lclNvdXJjZSIsInBhcnRuZXJRU1ZhbHVlIiwiVVJMU2VhcmNoUGFyYW1zIiwiZ2V0IiwicGFydG5lclZhbHVlIiwicGFydG5lclJlcFZhbHVlIiwidHJhbnNsYXRlRGlzcGxheVRleHQiLCJsb2NhbGVUZXh0Iiwic2V0RXZlbnRzIiwiV0VCRk9STV9UMSIsIklORFVTVFJZIiwiaGFzSW5kdXN0cnlGaWVsZCIsImhhc0ZvdW5kSW5kdXN0cnkiLCJldmVyeSIsImdldE1vZGFsRGF0YSIsImN1cnJlbnRGb3JtIiwiYXV0b1NhdmVEYXRhQ29udGVudCIsIm5ld0hhc0JlZW5WYWxpZGF0ZWQiLCJuZXdWYWxpZGF0ZWRGaWVsZHMiLCJuZXdDYXB0dXJlRmllbGRzIiwidGVzdEhhc0JlZW5WYWxpZGF0ZWQiLCJhIiwidGVzdFZhbGlkYXRlZEZpZWxkcyIsIm5ld0FjdGl2ZUZvcm0iLCJtb2RhbEhhc0JlZW5WYWxpZGF0ZWQiLCJtb2RhbFZhbGlkYXRlZEZpZWxkcyIsInNldENoaWxpcGlwZXJTdGF0ZSIsIm5ld0RpYWxDb2RlIiwidG9JU09TdHJpbmciLCJuZXdTZXRGaWVsZHMiLCJuZXdSZXF1aXJlZFZhbGlkYXRpb24iLCJuZXdFcnJvclN0YXRlIiwibmV3VmFsaWRTdGF0ZSIsImhhc1Zpc2libGVDb3VudHJ5RmllbGQiLCJjb3VudHJ5Q29kZSIsInVzZXJTZWxlY3RlZElzb0NvZGUiLCJzZXJ2ZXJNZXNzYWdlIiwicmVkaXJlY3RVcmwiLCJmb3JtVGVtcGxhdGUiLCJmb3JtRGF0YSIsInBhcnRuZXJfc291cmNlIiwibmV3R2RwckZpZWxkIiwiZm9ybUVsZW1lbnQiLCJkYXRhR2F0ZUNCIiwic2F2ZUZvcm1JZCIsImFiYW5kb24iLCJhZG9iZURhdGFMYXllciIsInByZXZpb3VzX3BhZ2VfcG9pIiwiYmFzZUhyZWYiLCJpc0xvZ2dlZEluIiwiYWxsb3dlZEZpZWxkIiwiZXhjbHVkZUZvcm1zIiwiY2FwdHVyZWRWYWx1ZXMiLCJuZXdWYWx1ZXMiLCJ0ZXN0Rm9ybU5hbWUiLCJmdWxsTmFtZSIsIm5ld0xhc3RGaWVsZCIsImlzTGFzdEZpZWxkIiwiaXNMYW5ndWFnZSIsImgiLCJzYXZlZERhdGEiLCJuZXdIYXNFcnJvciIsImdldFZhbHVlIiwibmV3TW9kYWxGb3JtcyIsIm1vZGFscyIsIm5ld0FiYW5kb25Gb3JtcyIsIm5ld1JlcXVpcmVkRmllbGRzIiwiSU5TSUdIVFMiLCJ1c2VyIiwiaXNvX2NvZGUiLCJzZXRSZXN1bHRzIiwic2V0U3RhdGUiLCJibG9ja2VkIiwidHJhaXRzIiwibWF4bWluZCIsIm1heG1pbmRGYWlsTWlsZXMiLCJzZXRUaW1lb3V0IiwibmV3TWF4bWluZCIsImpzb25QYXlsb2FkIiwibmV3UmVzcG9uc2UiLCJqc29uIiwiZW5kcG9pbnRzIiwic2VsZWN0ZWQiLCJhbHBoYVNvcnQiLCJzb3J0VmFsdWUiLCJzb3J0IiwicHJldiIsIm5leHQiLCJjb252ZXJ0T2JqZWN0VG9BcnJheSIsIm5ld0Nvbm5lY3RvcnMiLCJuZXdEYXRhIiwibmV3RW5kcG9pbnRzIiwibmV3UmVzdWx0cyIsImZvcm1SZXN1bHRzIiwic2VsZWN0ZWREYXRhIiwiY2xlYW5UZXJtIiwibmV3VGVybSIsInJlZ0V4cCIsIlJlZ0V4cCIsImRhdGFSZXN1bHRzIiwicmVzdCIsImZvdW5kIiwidXBkYXRlUmVzdWx0cyIsInRlc3ROYW1lIiwiZmluYWxSZXN1bHRzIiwiYXBwbGljYXRpb25Jbml0IiwiREVNQU5EQkFTRV9BUEkiLCJDT01QQU5ZTE9PS1VQIiwiRU1BSUxMT09LVVAiLCJJUExPT0tVUCIsIktFWSIsImlzQWRvYmVTYXRlbGxpdGVCbG9ja2VkIiwiaXNMb2FkaW5nIiwibG9hZGluZ01lc3NhZ2UiLCJsb2FkaW5nUmVxdWVzdHMiLCJyZXF1ZXN0cyIsInN5c3RlbUVycm9yIiwibmV3QXBwbGljYXRpb25Jbml0IiwiaXNFbnZTdGF0cyIsIm5ld0xvYWRpbmdSZXF1ZXN0cyIsIm5ld1JlcXVlc3RzIiwiY29tYmluZVJlZHVjZXJzIiwiYXZhdGF4IiwiYXZhVGF4U3RhdGUiLCJicml0ZVZlcmlmeVN0YXRlIiwibWF4bWluZFN0YXRlIiwibWlsZXMiLCJtaWxlc1N0YXRlIiwic2VhcmNoU3RhdGUiLCJzeXN0ZW0iLCJzeXN0ZW1TdGF0ZSIsInJlZHVjZXIiLCJleHRlbmQiLCJsb29rdXBVc2VyRGF0YUluRWxvcXVhIiwiaGFzVXNlckluZm8iLCJvbkVsb3F1YUxvb2t1cCIsIm9uU2V0RWxvcXVhTG9va3VwVmFsaWQiLCJpbW1lZGlhdGVMb29rdXBVc2VyRGF0YUluRWxvcXVhIiwiYXV0b2ZpbGxGb3JtIiwiYWRkRXZlbnRMaXN0ZW5lciIsImdldEVsb3F1YUNhY2hlIiwic2F2ZWRFbG9xdWFEYXRhIiwiaXNFbG9xdWFDYWNoZUV4cGlyZWQiLCJlbG9xdWFDYWNoZSIsImVuZFRpbWUiLCJzdGFydFRpbWUiLCJlbG9xdWFDYWNoZVRpbWVzdGFtcER1cmF0aW9uIiwiZGlmZiIsImFzSG91cnMiLCJlbG9xdWFTY2hlbWEiLCJhY2NvdW50bmFtZSIsInBob25lbnVtYmVyIiwiaXNDdXN0b21lckFjdGl2ZSIsInNmZGNJZCIsImVtYWlsSWQiLCJlbG9xdWFBUEkiLCJlbG9xdWFBcGlSdW5uaW5nIiwiZWxvcXVhTG9va3VwIiwiYWRvYmVJZCIsImlzVGltZSIsImNhY2hlVGltZVN0YW1wIiwicmVzcG9uc2VKc29uVmFsdWUiLCJtYXhtaW5kSW5zaWdodHNTY2hlbWEiLCJjb25maWRlbmNlIiwiZ2VvbmFtZV9pZCIsIm5hbWVzIiwiZW4iLCJqYSIsImNvbnRpbmVudCIsImNvZGUiLCJydSIsImFjY3VyYWN5X3JhZGl1cyIsImF2ZXJhZ2VfaW5jb21lIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJtZXRyb19jb2RlIiwicG9wdWxhdGlvbl9kZW5zaXR5IiwidGltZV96b25lIiwicG9zdGFsIiwicmVnaXN0ZXJlZF9jb3VudHJ5Iiwic3ViZGl2aXNpb25zIiwiaXRlbXMiLCJhdXRvbm9tb3VzX3N5c3RlbV9udW1iZXIiLCJhdXRvbm9tb3VzX3N5c3RlbV9vcmdhbml6YXRpb24iLCJpc3AiLCJvcmdhbml6YXRpb24iLCJ1c2VyX3R5cGUiLCJtYXhtaW5kQ291bnRyeVNjaGVtYSIsIk1BWE1JTkRNT0NLIiwibWF4bWluZFVybCIsIm1heG1pbmRBUElSdW5uaW5nIiwibWF4bWluZEhhc1JhbkFGUiIsIm1heG1pbmRBUEkiLCJlbmRwb2ludFVybCIsIm1heG1pbmRIYXNSYW4iLCJtaWxlc01heG1pbmRBUElSdW5uaW5nIiwibWlsZXNNYXhtaW5kSGFzUmFuIiwibWlsZXNNYXhtaW5kQVBJIiwibWlsZXNNYXhtaW5kIiwibW9kaWZpZWRJbnNpZ2h0c1Jlc3BvbnNlIiwiZm9ybVRlbXBsYXRlRGF0YVNjaGVtYSIsImZvcm1EYXRhQVBJIiwiZmV0Y2hGb3JtVGVtcGxhdGVEYXRhIiwiZW5wb2ludEVudiIsImF1dGhvckVudmlyb25tZW50cyIsImVuZFBvaW50RW52aXJvbm1lbnRzIiwiY2hlY2tUZW1wbGF0ZSIsInRlbXBsYXRlRXJyb3IiLCJmb3JtQVBJIiwic3VibWlzc2lvbkxpbWl0U2NoZW1hIiwic3VibWlzc2lvbkxpbWl0VVJMIiwic3VibWlzc2lvbkxpbWl0UnVubmluZyIsInN1Ym1pc3Npb25MaW1pdEFQSSIsInN1Ym1pc3Npb25saW1pdENhcCIsInN1Ym1pc3Npb25MaW1pdCIsInN1Ym1pc3Npb25MaW1pdENvdW50IiwicGFja2FnZUpzb24iLCJzZXRQYWNrYWdlU3RhdHMiLCJ2ZXJzaW9uIiwic3RhdHMiLCJmb3JtSW5pdFZhbGlkYXRpb24iLCJvblN5c3RlbUVycm9yIiwicmVhZGFibGVDb25maWdzIiwiaXNGb3JtRGlzcGxheUlubGluZSIsImdldE9mZnNldFZpZXciLCJjaGVja0Zvcm1Nb2RhbCIsIkhUTUxFbGVtZW50IiwiY2hlY2tGb3JTdWJtaXNzaW9uU3VwcmVzc2lvbiIsImdldFNob3dMb2FkZXIiLCJnZXRMb2FkZXJQb3NpdGlvbiIsImxvYWRlclBvc2l0aW9uIiwic2V0QXR0cmlidXRlc1RvUm9vdERpdiIsInJlZ2lzdGVySGVscGVyRnVuY3Rpb25Ub1dpbmRvdyIsImZ1bmN0aW9uTmFtZSIsInBhc3NlZEZ1bmN0aW9uIiwiZGV0ZWN0T1MiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJzZWFyY2hTdHJpbmciLCJzdWJTdHJpbmciLCJpZGVudGl0eSIsIm9zVmVyc2lvbnMiLCJDT0xPUlMiLCJhdmF0YXhCbHVlIiwiYmxhY2siLCJibHVlIiwiYnJpZ2h0Qmx1ZSIsImJ1dHRvblByaW1hcnkiLCJidXR0b25Ib3ZlciIsImRhcmtCbHVlIiwiZGFya0dyZWVuIiwiZGFya09yYW5nZSIsImRhcmtlcmtCbHVlIiwiZGFya1JlZCIsImRpc2FibGVkR3JheSIsImVycm9yUmVkIiwiZ3JlZW4iLCJncmV5MSIsImdyZXkyIiwiZ3JleTMiLCJncmV5NCIsImdyZXk0YTEiLCJncmV5NGEyIiwiZ3JleTRhMyIsImdyZXk1IiwiZ3JleWRhcmsiLCJpbnB1dEdyZXkiLCJyZWQiLCJsaWdodEJsdWUiLCJsaWdodEdyZWVuIiwibGlnaHRSZWQiLCJsaWdodFllbGxvdyIsIm9yYW5nZSIsIm9yYW5nZUhvdmVyIiwidHJhbnNwYXJlbnQiLCJ0cmFuc3BhcmVudEhvdmVyIiwidHJhbnNwYXJlbnRGb2N1cyIsInZhbGlkR3JlZW4iLCJ5ZWxsb3ciLCJ3aGl0ZSIsImdldFBpeGVsIiwicGl4ZWwiLCJnZXRIZXhDb2xvciIsIkZPUk1USEVNRSIsImJ1dHRvbiIsImFjdGl2ZSIsImNvbG9yIiwiZGlzYWJsZWQiLCJmb250IiwiZmFtaWx5IiwiYXBldGVydWEiLCJzaXplIiwiYmFja2dyb3VuZCIsImJvcmRlciIsInJhZGl1cyIsIm1pbkhlaWdodCIsInBsYWNlSG9sZGVyIiwiYmFja2dyb3VuZENvbG9yIiwiZm9udENvbG9yIiwiYnJlYWtQb2ludHMiLCJ0YWJsZXQiLCJicm93c2VyU3VwcG9ydCIsInNldEJyb3dzZXJDb21wYXRpYmlsaXR5IiwiYXNzZXQiLCJjb21wYXRpYmxpdHkiLCJiIiwic2V0Rm9udEZhbWlseSIsImZvbnRGYW1pbHkiLCJzZXRJY29Nb29uSWNvbiIsImljb24iLCJzdHlsZWQiLCJjc3MiLCJUSEVNRSIsIkJSRUFLUE9JTlRTIiwiSW5saW5lRm9ybURpc3BsYXkiLCJmaWVsZEd1dHRlciIsIm1pbldpZHRoIiwid2lkdGgiLCJBcHBDb250YWluZXIiLCJkaXYiLCJsb2FkaW5nVHJhbnNpdGlvbiIsIkF2YUZvcm0iLCJpc0lubGluZSIsImlzRGlzYWJsZWQiLCJUZW1wbGF0ZUVycm9yTWVzc2FnZSIsInAiLCJMaW1pdEVycm9yQ29udGFpbmVyIiwiZGVmYXVsdElucHV0VmFsdWVzIiwiYW5pbWF0aW9uRGVmYXVsdCIsImZvcm1UaXRsZSIsImRlZmF1bHRGb3JtVGl0bGUiLCJzZWN0aW9uRm9ybVRpdGxlIiwicGxhY2VIb2xkZXJTZWNvbmRhcnkiLCJ0ZXh0SW5wdXQiLCJEZXNjIiwiRXJyb3JNZXNzYWdlIiwiaXNHZHByIiwiaXNDaGVja2JveCIsIkRpc2FibGVkTWVzc2FnZSIsIkZpZWxkUm93IiwiRm9ybUhlYWRlciIsIkdkcHJGaWVsZCIsIkZpZWxkRGlzY2xhaW1lclRleHQiLCJUZXJtc1NlY3Rpb24iLCJJbnB1dENvbnRhaW5lciIsIkZsYXRQaWNrZXJDb250YWluZXIiLCJJbnB1dEFycm93IiwiSW5wdXRTZWxlY3QiLCJJbnB1dE11bHRpU2VsZWN0IiwiUGxhY2VIb2xkZXJUZXh0IiwibGFiZWwiLCJwb3NpdGlvblRvcCIsImhhc1BpY2tMaXN0IiwiZW1haWxPbmx5IiwiVGV4dElucHV0IiwiaW5wdXQiLCJIaWRkZW5JbnB1dCIsIkNoZWNrYm94Q29udGFpbmVyIiwiUmFkaW9Db250YWluZXIiLCJoYXNEZXNjcmlwdGlvbiIsIkludGxUZXh0SW5wdXRDb250YWluZXIiLCJUZXh0QXJlYSIsInRleHRhcmVhIiwiU3VibWl0QnV0dG9uIiwiU3VibWl0QnV0dG9uQ29udGFpbmVyIiwiU3VibWlzc2lvbkVycm9yQ29udGFpbmVyIiwic3BhbiIsIlNlY3Rpb25UaXRsZSIsImgzIiwiRmllbGRzZXQiLCJSZWFjdCIsIlN5c3RlbUVycm9yTWVzc2FnZSIsIm1lc3NlZ2UiLCJDb21wb25lbnQiLCJTeXN0ZW1FcnJvciIsIkVycm9yQm91bmRhcnkiLCJjaGlsZHJlbiIsIkxvYWRlciIsIkxvYWRpbmdDb250YWluZXIiLCJsb2FkZXJTaXplIiwiU3Bpbm5lciIsIlNwaW5pbmdDb250YWluZXIiLCJpc1NpemUiLCJGcmFnbWVudCIsIlNwaW5uaW5nQ29udGFpbmVyIiwiTG9hZGluZyIsIkZvcm1IZWFkZXJDb21wb25lbnQiLCJjb25uZWN0IiwiRm9ybUNvbnRhaW5lciIsImFjdGl2ZUNvbmZpZ3MiLCJtYXBTdGF0ZVRvUHJvcHMiLCJvd25Qcm9wcyIsIkZvcm1Mb2FkRXJyb3IiLCJUZXJtc09mU2VydmljZUxpbmtDb250YWluZXIiLCJUZXJtc09mU2VydmljZUxpbmtzIiwibGlua0J1aWxkIiwiX19odG1sIiwiVG9TTGlua3NDb250YWluZXIiLCJDaGVja0JveENvbXBvbmVudCIsImhhbmRsZUNoYW5nZSIsImlzQ2hlY2tlZCIsIm9uU2V0QWN0aXZlRmllbGQiLCJDaGVja2JveENvbXBvbmVudCIsIkNoZWNrYm94IiwiZmllbGRPYmplY3QiLCJvbkNhcHR1cmVJbnB1dCIsIm9uVmFsaWRhdGVGaWVsZCIsImZpZWxkRGF0YSIsIm1hcERpc3BhdGNoVG9Qcm9wcyIsImNvbnRhaW5zR2RwckNvbnRhaW5lciIsIlJhZGlvQ29tcG9uZW50IiwiaXNJbkZpZWxkU2V0IiwiZCIsIlJhZGlvIiwiY2FwdHVyZWRWYWx1ZSIsImlzU2V0VmFsdWUiLCJ1c2VFZmZlY3QiLCJHZHByRmllbGRDb21wb25lbnQiLCJnZHByQ291bnRyeVNlbGVjdGVkIiwiaXNHZHByRWxpZ2FibGUiLCJvcHRpbkVsaWdpYmxlIiwib3B0aW5WYWx1ZSIsInNldFZhbHVlIiwiQXZhVGFibGVzIiwicHNvaV9tZW51X3ZhbHVlcyIsInBzb2kiLCJvc3QiLCJvc3RfcG9pX2JpZ19kb21haW5zIiwibm9uX2V4cGxpY2l0X29wdGluIiwiZW1lYV9jb3VudHJpZXMiLCJnZHByX2NvdW50cmllcyIsIkFWQVRBQkxFUyIsImZvcm1hdFVzZXJJbmZvIiwic2V0RnVsbG5hbWUiLCJmdWxsbmFtZSIsImFjY291bnROYW1lIiwicGhvbmVOdW1iZXIiLCJnZXRVc2VySXAiLCJpcEFkZHJlc3MiLCJpc0luIiwiY2hlY2tDb3VudHJ5IiwiVHlwZUVycm9yIiwibWF4bWluZERhdGEiLCJpc0VtZWEiLCJpc0luZGlhIiwiaXNCcmF6aWwiLCJpc0dkcHJFbGlnaWJsZSIsImlzT3B0aW5FbGlnaWJsZSIsIkdkcHJDb250YWluZXIiLCJtYXhtaW5kRGF0YUV4aXN0cyIsImNvdW50cnlGaWVsZCIsIlBsYWNlaG9sZGVyVGV4dCIsInNldENsYXNzZXMiLCJGbGF0cGlja3IiLCJQbGFjZWhvbGRlciIsIkRhdGVUaW1lUGlja2VyQ29tcG9uZW50IiwiYWxsb3dJbnB1dCIsImRhdGVGb3JtYXQiLCJkaXNhYmxlTW9iaWxlIiwiUGlja3JDb21wb25lbnQiLCJEYXRlVGltZVBpY2tlciIsIm9uU2V0TGFzdEZpZWxkIiwiSW5wdXRUZXh0Q29tcG9uZW50IiwidmlzaWJpbGl0eSIsIlBpY2tMaXN0RmllbGRzIiwiSW5wdXRUZXh0IiwiVGV4dElucHV0Q29udGFpbmVyIiwiY29ubmVjdG9yRGF0YSIsIklucHV0TXVsdGlTZWxlY3RDb21wb25lbnQiLCJkZWZhdWx0VmFsdWUiLCJpbmRleCIsInByZXZlbnREZWZhdWx0IiwidXNlUmVmIiwidXNlQ2FsbGJhY2siLCJ1c2VEZWJvdW5jZSIsImZ1bmMiLCJkZWxheSIsImRlYm91bmNlVGltZXJSZWYiLCJkZWJvdW5jZWRGdW5jdGlvbiIsImFyZ3MiLCJjbGVhclRpbWVvdXQiLCJjb25uZWN0b3JTZWFyY2hTY2hlbWEiLCJ0eXBlYWhlYWRTZWFyY2hTY2hlbWEiLCJNSUxFU0FQSSIsIkFWQUZPUk1UWVBFQUhFQURBUEkiLCJjb25uZWN0b3JTZWFyY2giLCJtaWxlc0VuZHBvaW50IiwiY29ubmVjdG9yQXBpIiwic2F2ZUVuZHBvaW50IiwidmFsaWRhdG9yU2NoZW1hIiwidHlwZUFoZWFkIiwiUGlja0xpc3RDb250YWluZXIiLCJjcmVhdGVSZWYiLCJQaWNrTGlzdENvbXBvbmVudCIsImhhc0RhdGEiLCJoaWdobGlnaHRlZEl0ZW0iLCJzZWxlY3RlZEl0ZW0iLCJpc0FjdGl2ZSIsIm9uQ2xvc2VQaWNrbGlzdCIsIm9uRm9jdXNDYXB0dXJlIiwicGlja0xpc3RSZXN1bHRzIiwicmVmcyIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJibG9jayIsInJlZlRvTGlzdEl0ZW0iLCJzZWxlY3RlZEJ1dHRvbiIsImNoaWxkTm9kZXMiLCJmb2N1cyIsImNvbm5lY3RvckFQSSIsIlBpY2tMaXN0IiwiVHlwZUFoZWFkUGlja0xpc3QiLCJwaWNrTGlzdCIsIm9uR2V0Q29ubmVjdG9yRGF0YSIsImNvbm5lY3RvckVuZHBvaW50IiwidXNlU3RhdGUiLCJvblNlYXJjaCIsIm9uVmFsaWRhdGVDb25uZWN0b3IiLCJzZXRIaWdobGlnaHRlZEl0ZW0iLCJzZXRTZWxlY3RlZEl0ZW0iLCJkZWJvdW5jZWRPblZhbGlkYXRlRmllbGQiLCJoYW5kbGVLZXlEb3duIiwia2V5Q29kZSIsInByZXZTdGF0ZSIsInNldEVuZHBvaW50IiwicGFyZW50U3RhdGVQcm9wcyIsIk11bHRpU2VsZWN0Q29udGFpbmVyIiwib25SZW1vdmVTZWxlY3RlZCIsInBhcmVudFByb3BzIiwiSW5wdXRTZWxlY3RDb21wb25lbnQiLCJTZWxlY3RDb250YWluZXIiLCJDT1VOVFJJRVMiLCJnZHByIiwiQ291bnRyeVBpY2tMaXN0IiwiQ291bnRyeVNlbGVjdCIsIm1heG1pbmRFbmFibGVkRmxhZyIsIklucHV0VGV4dGFyZWEiLCJwYXJlbnRNYXBTdGF0ZVRvUHJvcHMiLCJUZXh0YXJlYUlucHV0Q29udGFpbmVyIiwiUmVhY3RQaG9uZUlucHV0IiwiSW5wdXRQaG9uZUNvbXBvbmVudCIsIm9uSGFuZGxlQ2hhbmdlIiwib25WYWxpZGF0ZUludGxQaG9uZSIsImlzRGVmYXVsdENvdW50cnkiLCJJbnB1dFBob25lIiwiUGhvbmVJbnB1dENvbnRhaW5lciIsIm9uVmFsaWRhdGVJbnRsUGhvbmVGaWVsZCIsIm9uQ2FwdHVyZURpYWxDb2RlIiwib25DYXB0dXJlSW50bFBob25lIiwic3RhdGVzIiwiYWJiciIsIlNUQVRFUyIsIlN0YXRlU2VsZWN0TGlzdCIsIlN0YXRlU2VsZWN0Iiwic2V0RGVmYXVsdFZhbHVlIiwiVGVybXNPZlNlcnZpY2VDb21wb25lbnQiLCJUT1NDb21wb25lbnQiLCJUZXJtc09mU2VydmljZSIsIlBTQ2xpY2tXcmFwIiwiQ2xpY2t3cmFwQ29tcG9uZW50IiwiYWNjZXNzSWQiLCJncm91cEtleSIsImNsaWNrV3JhcFN0eWxlIiwic2VuZENvbmZpcm1hdGlvbkVtYWlsIiwic2lnbmVySWRTZWxlY3RvciIsIkNsaWNrd3JhcCIsImNvbm5lY3RlZEZpZWxkVmFsdWUiLCJzaG93RmllbGQiLCJibG9ja1Rlcm1zQWdyZWVtZW50RmllbGRWYWx1ZXMiLCJjbGlja1dyYXBDb25maWciLCJjb25uZWN0ZWRGaWVsZCIsIkNoZWNrQm94IiwiSW5wdXRTZWxlY3RDb3VudHJ5IiwiSW5wdXRJbnRsUGhvbmUiLCJUb3NJbnB1dCIsIkNsaWNrd3JhcElucHV0Iiwic2V0RmllbGRDb250YWluZXIiLCJkeW5hbWljRm9ybUZpZWxkIiwiRmllbGRDb21wbmVudCIsIkR5bmFtaWNGaWVsZCIsImdldEZpZWxkcyIsInRpdGxlVGFnIiwiZmllbGREaXNjbGFpbWVyIiwiRmllbGREaXNjbGFpbWVyIiwiaHlwZXJsaW5rIiwicmVuZGVyTWVzc2FnZVdpdGhMaW5rIiwidGV4dFRvTGluayIsInBhcnRzIiwic2xpY2UiLCJFbGVtZW50VGFnIiwiZnMiLCJwYXJzZUludCIsIm9uVXBkYXRlRHluYW1pY1JlcXVpcmVkRmllbGQiLCJjb21wb25lbnRzIiwiaXNCdXR0b25EaXNhYmxlZCIsIlNldEZvcm1GaWVsZHMiLCJvcyIsIm9zVmFsdWUiLCJpdGVyYXRlRmllbGRzIiwiZmxkIiwic2VjdGlvbnMiLCJmaWVsZHNSZW5kZXJlZCIsImRpc3BsYXlTZWN0aW9ucyIsInNlY3Rpb24iLCJmaWVsZHNUb1JlbmRlciIsImZpZWxkRm91bmQiLCJzdWJGaWVsZHMiLCJyZW1haW5pbmdGaWVsZHMiLCJyZW5kZXJSZW1haW5pbmdGaWVsZHMiLCJtZW1vIiwiQnV0dG9uIiwiQnV0dG9uUHJpbWFyeSIsIk1vZGFsQnV0dG9uIiwiSXNHZHByRWxpZ2FibGUiLCJnZXRCdXR0b25EaXNwbGF5VGV4dCIsImFkZEJyaXRlVmVyaWZ5U3RhdHVzRmllbGQiLCJlbWFpbEZpZWxkIiwic3VibWl0dGVkRW1haWwiLCJTdWJtaXRDb21wb25lbnQiLCJpc1JhdGVMb29rdXBGb3JtIiwib25TdWJtaXRGb3JSYXRlIiwib25TdWJtaXRGb3JtIiwib25WYWxpZGF0ZUFsbEZpZWxkcyIsIndoaWNoIiwiYXZhVGF4UmF0ZUxvb2t1cCIsImFkZHJlc3MxIiwiZW5jb2RlVVJJIiwicmVzIiwiZmFpbGVkUmVzcG9uc2UiLCJsaW5lQWRkcmVzczEiLCJyZWdpb24iLCJ1c2VySW5wdXQiLCJlcnJvck1lc3NhZ2UiLCJzZXRWYWxpZGF0aW9uQWRkcmVzcyIsImNvbXBsZXRlQWRkcmVzcyIsInRyaWdnZXJNTFRSZW5kZXJGdW5jdGlvbiIsIm1sdFJhdGVSZXNwb25zZSIsInN1Y2Nlc3NDYWxsYmFjayIsIkRFQ0lNQUxfTElNSVQiLCJjb252ZXJ0QW5kTGltaXREZWNpbWFsIiwiaW5wdXRTdHJpbmciLCJwYXJzZUZsb2F0IiwiTnVtYmVyIiwiaXNOYU4iLCJsaW1pdGVkTnVtYmVyU3RyaW5nIiwidG9GaXhlZCIsInN1Ym1pdFJhdGVMb29rdXAiLCJzdWJtaXR0ZWRSYXRlRm9ybSIsInJlc3BvbnNlVmFsdWUiLCJ0cmlnZ2VyIiwiYnlwYXNzU3VibWl0VG9DYWxsYmFja3MiLCJ0cmlnZ2VyVGF0YXJpVHJhY2tFdmVudCIsInRhdGFyaSIsImRldGFpbHMiLCJwYWdlUGF0aCIsInRhdGFyaVNlc3Npb25JZCIsInRyYWNrIiwiU3VibWl0Q29udGFpbmVyIiwiYnV0dG9uTGFiZWwiLCJzdWJtaXRGYWlsZWQiLCJtYXJrZXRpbmdGZWVkYmFja05vdGVzIiwiTUlMRVNSZXNwb25zZSIsInN1Ym1pc3Npb25saW1pdGNvdW50IiwiVGhhbmt5b3VMaW5rIiwibGluayIsIlRoYW5reW91Q29udGFpbmVyIiwiVGhhbmt5b3VUaXRsZSIsIlRoYW5reW91U3ViVGl0bGUiLCJUaGFua3lvdU1lc3NhZ2UiLCJzdWJUaXRsZSIsIm0iLCJUZXJtc1RleHQiLCJ0ZXJtcyIsIkZvcm1Mb2FkaW5nRXJyb3IiLCJGaWVsZHMiLCJTeXN0ZW1TdWJtaXNzaW9uRXJyb3IiLCJUaGFua3lvdSIsIlRlcm1zIiwiRW50cnkiLCJpbml0aWFsRm9ybVRyaWdnZXIiLCJpbml0U3VjY2VzcyIsImhhc1Rlcm1zIiwib25TZXRBY3RpdmVGb3JtIiwic3VibWl0U3VjY2VzcyIsIm9mZnNldFZpZXciLCJpc0FjdGl2ZUZvcm0iLCJhY3RpdmVDbGFzcyIsInN1Ym1pc3Npb25MaW1pdFRoYW5rWW91TWVzc2FnZSIsIkRFRkFVTFRfQ0FNUEFJR05fSUQiLCJjbGVhblVybCIsImNhbXBhaWduSWQiLCJoYXNTeXN0ZW1FcnJvciIsIkJSRUFLUE9JTlQiLCJNb2RhbENvbnRhaW5lciIsInRvZ2dsZSIsIk1vZGFsSGVhZGVyIiwiVGl0bGVDb250YWluZXIiLCJEZXNjcmlwdGlvbiIsIkhlYWRlclRpdGxlIiwiTm9DbGljayIsIk1vZGFsSGVhZGVyQ29tcG9uZW50cyIsIm9uVG9nZ2xlTW9kYWwiLCJoYXNCZWVuU3VibWl0dGVkIiwiTW9kYWxIZWFkZXJDb21wb25lbnQiLCJwYXJlbnRNYXBTdGF0ZSIsInBhcmVudERpc3BhdGNoIiwiTW9kYWxIZWFkZXJDb250YWluZXIiLCJNb2RhbCIsInBhZ2VZT2Zmc2V0IiwidHJhbnNhY3Rpb25pZCIsImRhdGFMYXllclRyaWdnZXIiLCJGT1JNREFUQUtFWVMiLCJBcHAiLCJvbkNsZWFyQ2FwdHVyZWRWYWx1ZXMiLCJpc01heG1pbmRJbnNpZ2h0c1NldCIsIm9uU2V0TWlsZXNNYXhtaW5kIiwiZm9ybUNvbmZpZyIsImF0b2IiLCJvbkluaXRBcHAiLCJvbkluaXRGb3JtQXBwIiwib25Jbml0Rm9ybUFwcFdpdGhBcGkiLCJwcmV2UHJvcHMiLCJpc01heG1pbmRVc2VyU2V0IiwibWF4bWluZFN0YXR1cyIsIm9uQWRkUmVxdWlyZWRGaWVsZCIsIm9uR2V0U3VibWlzc2lvbkxpbWl0Q291bnQiLCJzdGF0aWNGb3JtQ29uZmlncyIsInRyaWdnZXJSZXNwb25zZSIsImVycm9ycyIsInJlbW92ZUl0ZW0iLCJvblRyYWNrQXNNb2RhbEZvcm0iLCJjb3VudHJ5RmllbGRBZGRlZCIsIm5ld0FjdGl2ZURhdGFGaWVsZHMiLCJvbkNhcHR1cmVVc2VySW5mbyIsIkNvbnRhaW5lciIsImhhc1Bob25lRmllbGQiLCJmb3JtRmllbGRzIiwiUmVhY3RET00iLCJQcm92aWRlciIsImFwcGx5TWlkZGxld2FyZSIsImNyZWF0ZVN0b3JlIiwiY3JlYXRlTG9nZ2VyIiwidHJhY2tBYmFuZG9uZWRGb3JtcyIsInRodW5rIiwiU1lTVEVNQ09ORklHUyIsIm1pZGRsZXdhcmUiLCJzdG9yZSIsImNvbXBsZXRlZEZvcm1zIiwiYXZhQ29tcGxldGVkRm9ybXMiLCJvbmJlZm9yZXVubG9hZCIsImluaXRBdmFmb3JtIiwicmVuZGVyIiwic2V0Rm9ybXMiLCJ1c2VySW5mb3JtYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsImlzSGVhZCIsImhlYWQiLCJkZW1vSXRlbXMiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwicmVtb3ZlQXZhZm9ybUNvbXBsZXRlIiwic2hvd0Zvcm0iLCJzZXRXaW5kb3dGb3JtcyIsInJlcXVlc3RBdXRoIiwiQ3VzdG9tRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwicmVhZHlTdGF0ZUNhbGxiYWNrIiwiaGFzU3VibWlzc2lvblNjcmlwdCIsInJlYWR5U3RhdGUiLCJkb2N1bWVudEVsZW1lbnQiLCJkb1Njcm9sbCJdLCJzb3VyY2VSb290IjoiIn0= //# sourceURL=webpack-internal:///9649