UNPKG

merchi_product_form

Version:
458 lines (456 loc) 53 kB
var _excluded = ["json"]; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } import { Merchi } from 'merchi_sdk_ts'; import { formatCurrency } from '../utils/currency'; import { ProductType } from '../utils/types'; var pngOptionNotFound = require('../images/product-not-found.png'); function renderSingleCostIndication(cost, currencyCode, costTypeString) { var currencyOptions = { currency: currencyCode, showCodeIfNoSymbol: false }; var costString = ''; if (cost) { costString = formatCurrency(parseFloat(cost), currencyOptions); costString = ' + ' + costString + ' ' + costTypeString; } return costString; } var costDetail = function costDetail(onceOffCost, unitCost, currencyCode) { var onceOffCostDescription = renderSingleCostIndication(parseFloat(onceOffCost), currencyCode, 'once off'); var unitCostDescription = renderSingleCostIndication(parseFloat(unitCost), currencyCode, 'per unit'); return onceOffCostDescription + unitCostDescription; }; export function variationFieldCostDetail(variationField) { var variationCost = variationField.variationCost, variationUnitCost = variationField.variationUnitCost, currency = variationField.currency; return costDetail(variationCost, variationUnitCost, currency); } export function variationCostDetail(variation) { var onceOffCost = variation.onceOffCost, unitCost = variation.unitCost, currency = variation.currency; return costDetail(onceOffCost, unitCost, currency); } export function variationFieldOptionCostDetail(option) { var currency = option.currency, onceOffCost = option.onceOffCost, unitCost = option.unitCost; return costDetail(onceOffCost, unitCost, currency); } export function splitSelectedOptions(value) { if (Array.isArray(value)) { return value; } if (typeof value === 'string' && value) { return value.split(','); } return []; } export var supplierSellerEditableProductTypes = [ProductType.SUPPLIER_MOD, ProductType.CLONED_SUPPLIER_MOD]; export function optionImageUrl(option) { var image = pngOptionNotFound ? pngOptionNotFound["default"] || pngOptionNotFound : ''; var imageNotFound = image ? image.src || image : ''; return option.linkedFile ? option.linkedFile ? option.linkedFile.viewUrl : imageNotFound : imageNotFound; } export function allowedFileTypes(variationField) { var fileTypeMapping = { allowFileJpeg: '.jpeg', allowFileGif: '.gif', allowFilePdf: '.pdf', allowFilePng: '.png', allowFileAi: '.ai' }; var allowedTypes = Object.keys(fileTypeMapping).filter(function (attributeName) { return variationField[attributeName]; }).map(function (attributeName) { return fileTypeMapping[attributeName]; }); return allowedTypes.join(','); } var merchi = new Merchi(); export function buildEmptyVariationGroup(product) { var productEnt = new merchi.Product(); productEnt.fromJson(_objectSpread({}, product), { makeDirty: false }); var newGroup = new productEnt.buildEmptyVariationGroup(); newGroup.groupCost = 0; newGroup.quantity = 0; return newGroup.toJson(); } export function isProductSupplierMOD(product) { var productType = product && product.productType; return product && [String(ProductType.SUPPLIER_MOD), String(ProductType.SUPPLIER_RESELL_MOD)].includes(String(productType)); } export function isProductTypeFileDownload(productType) { return parseInt(productType, 10) === ProductType.SELLER_FILE_DOWNLOAD; } export function isProductFileDownload(product) { var productType = product.productType; return isProductTypeFileDownload(productType); } export function isProductLeadForm(product) { var productType = product && product.productType; return parseInt(productType, 10) === ProductType.LEAD_FORM; } export var isoCountries = { AF: 'Afghanistan', AX: 'Aland Islands', AL: 'Albania', DZ: 'Algeria', AS: 'American Samoa', AD: 'Andorra', AO: 'Angola', AI: 'Anguilla', AQ: 'Antarctica', AG: 'Antigua And Barbuda', AR: 'Argentina', AM: 'Armenia', AW: 'Aruba', AU: 'Australia', AT: 'Austria', AZ: 'Azerbaijan', BS: 'Bahamas', BH: 'Bahrain', BD: 'Bangladesh', BB: 'Barbados', BY: 'Belarus', BE: 'Belgium', BZ: 'Belize', BJ: 'Benin', BM: 'Bermuda', BT: 'Bhutan', BO: 'Bolivia', BA: 'Bosnia And Herzegovina', BW: 'Botswana', BV: 'Bouvet Island', BR: 'Brazil', IO: 'British Indian Ocean Territory', BN: 'Brunei Darussalam', BG: 'Bulgaria', BF: 'Burkina Faso', BI: 'Burundi', KH: 'Cambodia', CM: 'Cameroon', CA: 'Canada', CV: 'Cape Verde', KY: 'Cayman Islands', CF: 'Central African Republic', TD: 'Chad', CL: 'Chile', CN: 'China', CX: 'Christmas Island', CC: 'Cocos (Keeling) Islands', CO: 'Colombia', KM: 'Comoros', CG: 'Congo', CD: 'Congo, Democratic Republic', CK: 'Cook Islands', CR: 'Costa Rica', CI: "Cote D'Ivoire", HR: 'Croatia', CU: 'Cuba', CY: 'Cyprus', CZ: 'Czech Republic', DK: 'Denmark', DJ: 'Djibouti', DM: 'Dominica', DO: 'Dominican Republic', EC: 'Ecuador', EG: 'Egypt', SV: 'El Salvador', GQ: 'Equatorial Guinea', ER: 'Eritrea', EE: 'Estonia', ET: 'Ethiopia', FK: 'Falkland Islands (Malvinas)', FO: 'Faroe Islands', FJ: 'Fiji', FI: 'Finland', FR: 'France', GF: 'French Guiana', PF: 'French Polynesia', TF: 'French Southern Territories', GA: 'Gabon', GM: 'Gambia', GE: 'Georgia', DE: 'Germany', GH: 'Ghana', GI: 'Gibraltar', GR: 'Greece', GL: 'Greenland', GD: 'Grenada', GP: 'Guadeloupe', GU: 'Guam', GT: 'Guatemala', GG: 'Guernsey', GN: 'Guinea', GW: 'Guinea-Bissau', GY: 'Guyana', HT: 'Haiti', HM: 'Heard Island & Mcdonald Islands', VA: 'Holy See (Vatican City State)', HN: 'Honduras', HK: 'Hong Kong', HU: 'Hungary', IS: 'Iceland', IN: 'India', ID: 'Indonesia', IR: 'Iran, Islamic Republic Of', IQ: 'Iraq', IE: 'Ireland', IM: 'Isle Of Man', IL: 'Israel', IT: 'Italy', JM: 'Jamaica', JP: 'Japan', JE: 'Jersey', JO: 'Jordan', KZ: 'Kazakhstan', KE: 'Kenya', KI: 'Kiribati', KR: 'Korea', KW: 'Kuwait', KG: 'Kyrgyzstan', LA: "Lao People's Democratic Republic", LV: 'Latvia', LB: 'Lebanon', LS: 'Lesotho', LR: 'Liberia', LY: 'Libyan Arab Jamahiriya', LI: 'Liechtenstein', LT: 'Lithuania', LU: 'Luxembourg', MO: 'Macao', MK: 'Macedonia', MG: 'Madagascar', MW: 'Malawi', MY: 'Malaysia', MV: 'Maldives', ML: 'Mali', MT: 'Malta', MH: 'Marshall Islands', MQ: 'Martinique', MR: 'Mauritania', MU: 'Mauritius', YT: 'Mayotte', MX: 'Mexico', FM: 'Micronesia, Federated States Of', MD: 'Moldova', MC: 'Monaco', MN: 'Mongolia', ME: 'Montenegro', MS: 'Montserrat', MA: 'Morocco', MZ: 'Mozambique', MM: 'Myanmar', NA: 'Namibia', NR: 'Nauru', NP: 'Nepal', NL: 'Netherlands', AN: 'Netherlands Antilles', NC: 'New Caledonia', NZ: 'New Zealand', NI: 'Nicaragua', NE: 'Niger', NG: 'Nigeria', NU: 'Niue', NF: 'Norfolk Island', MP: 'Northern Mariana Islands', NO: 'Norway', OM: 'Oman', PK: 'Pakistan', PW: 'Palau', PS: 'Palestinian Territory, Occupied', PA: 'Panama', PG: 'Papua New Guinea', PY: 'Paraguay', PE: 'Peru', PH: 'Philippines', PN: 'Pitcairn', PL: 'Poland', PT: 'Portugal', PR: 'Puerto Rico', QA: 'Qatar', RE: 'Reunion', RO: 'Romania', RU: 'Russian Federation', RW: 'Rwanda', BL: 'Saint Barthelemy', SH: 'Saint Helena', KN: 'Saint Kitts And Nevis', LC: 'Saint Lucia', MF: 'Saint Martin', PM: 'Saint Pierre And Miquelon', VC: 'Saint Vincent And Grenadines', WS: 'Samoa', SM: 'San Marino', ST: 'Sao Tome And Principe', SA: 'Saudi Arabia', SN: 'Senegal', RS: 'Serbia', SC: 'Seychelles', SL: 'Sierra Leone', SG: 'Singapore', SK: 'Slovakia', SI: 'Slovenia', SB: 'Solomon Islands', SO: 'Somalia', ZA: 'South Africa', GS: 'South Georgia And Sandwich Isl.', ES: 'Spain', LK: 'Sri Lanka', SD: 'Sudan', SR: 'Suriname', SJ: 'Svalbard And Jan Mayen', SZ: 'Swaziland', SE: 'Sweden', CH: 'Switzerland', SY: 'Syrian Arab Republic', TW: 'Taiwan', TJ: 'Tajikistan', TZ: 'Tanzania', TH: 'Thailand', TL: 'Timor-Leste', TG: 'Togo', TK: 'Tokelau', TO: 'Tonga', TT: 'Trinidad And Tobago', TN: 'Tunisia', TR: 'Turkey', TM: 'Turkmenistan', TC: 'Turks And Caicos Islands', TV: 'Tuvalu', UG: 'Uganda', UA: 'Ukraine', AE: 'United Arab Emirates', GB: 'United Kingdom', US: 'United States', UM: 'United States Outlying Islands', UY: 'Uruguay', UZ: 'Uzbekistan', VU: 'Vanuatu', VE: 'Venezuela', VN: 'Viet Nam', VG: 'Virgin Islands, British', VI: 'Virgin Islands, U.S.', WF: 'Wallis And Futuna', EH: 'Western Sahara', YE: 'Yemen', ZM: 'Zambia', ZW: 'Zimbabwe' }; export function getCountryName(countryCode) { if (isoCountries.hasOwnProperty(countryCode)) { return isoCountries[countryCode]; } else { return countryCode; } } export function cleanTagIds(raw) { return raw.map(function (id) { return id.trim(); }) // Trim each ID entry to remove whitespace .filter(function (id) { return /^\d+$/.test(id); }) // Use a regular expression to ensure the ID is entirely numeric. .map(function (id) { return Number(id); }); // Convert the remaining, valid ID entries into numbers } export function getMerchiSourceJobTags() { if (typeof localStorage !== 'undefined' && localStorage !== null) { var merchiSource = localStorage.getItem('merchi_source'); if (merchiSource) { var ids = cleanTagIds(merchiSource.split(',')); return ids.map(function (id) { return { id: id }; }); } // If "merchi_source" is not found in localStorage, return an empty array. return []; } return []; } export function sortByPosition(options) { return options.map(function (obj) { var position = typeof obj.position === 'string' ? parseInt(obj.position, 10) : obj.position; return _objectSpread(_objectSpread({}, obj), {}, { position: typeof position === 'number' ? position : 0 }); }).sort(function (a, b) { var aPosition = typeof a.position === 'number' ? a.position : 0; var bPosition = typeof b.position === 'number' ? b.position : 0; return aPosition - bPosition; }); } export function cleanFormVariationJson(variation) { var variationJson = null; var rawJson = variation === null || variation === void 0 ? void 0 : variation.json; if (typeof rawJson === 'string' && rawJson && rawJson !== 'undefined') { try { variationJson = JSON.parse(rawJson); } catch (_unused) { variationJson = null; } } if (!variationJson) { var _ref = variation || {}, json = _ref.json, rest = _objectWithoutProperties(_ref, _excluded); variationJson = rest; } var cleanVariation = _objectSpread(_objectSpread({}, variationJson), {}, { value: variation.value, variationFiles: variation.variationFiles || [] }); if (cleanVariation.id) { delete cleanVariation.id; } if (cleanVariation.variationArrayFieldId) { delete cleanVariation.variationArrayFieldId; } return cleanVariation; } export function cleanJobVariationsAndGroups(jobJson) { var variations = jobJson.variations, variationsGroups = jobJson.variationsGroups; var hasGroups = Boolean(variationsGroups && variationsGroups.length); var hasVariations = Boolean(variations && variations.length); // Loop over individual variations and check if the variation is a json string, if it is convert it to an object if (hasVariations) { for (var i = 0; i < variations.length; i++) { variations[i] = cleanFormVariationJson(variations[i]); } jobJson.variations = variations; } if (hasGroups) { for (var _i = 0; _i < variationsGroups.length; _i++) { // Set default quantity if not present var group = variationsGroups[_i]; if (!group.quantity) { group.quantity = 0; } // Handle variations within the group - convert JSON strings to objects if (group.variations && Array.isArray(group.variations)) { for (var j = 0; j < group.variations.length; j++) { group.variations[j] = cleanFormVariationJson(group.variations[j]); } } } jobJson.variationsGroups = variationsGroups; } return jobJson; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXJjaGkiLCJmb3JtYXRDdXJyZW5jeSIsIlByb2R1Y3RUeXBlIiwicG5nT3B0aW9uTm90Rm91bmQiLCJyZXF1aXJlIiwicmVuZGVyU2luZ2xlQ29zdEluZGljYXRpb24iLCJjb3N0IiwiY3VycmVuY3lDb2RlIiwiY29zdFR5cGVTdHJpbmciLCJjdXJyZW5jeU9wdGlvbnMiLCJjdXJyZW5jeSIsInNob3dDb2RlSWZOb1N5bWJvbCIsImNvc3RTdHJpbmciLCJwYXJzZUZsb2F0IiwiY29zdERldGFpbCIsIm9uY2VPZmZDb3N0IiwidW5pdENvc3QiLCJvbmNlT2ZmQ29zdERlc2NyaXB0aW9uIiwidW5pdENvc3REZXNjcmlwdGlvbiIsInZhcmlhdGlvbkZpZWxkQ29zdERldGFpbCIsInZhcmlhdGlvbkZpZWxkIiwidmFyaWF0aW9uQ29zdCIsInZhcmlhdGlvblVuaXRDb3N0IiwidmFyaWF0aW9uQ29zdERldGFpbCIsInZhcmlhdGlvbiIsInZhcmlhdGlvbkZpZWxkT3B0aW9uQ29zdERldGFpbCIsIm9wdGlvbiIsInNwbGl0U2VsZWN0ZWRPcHRpb25zIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJzcGxpdCIsInN1cHBsaWVyU2VsbGVyRWRpdGFibGVQcm9kdWN0VHlwZXMiLCJTVVBQTElFUl9NT0QiLCJDTE9ORURfU1VQUExJRVJfTU9EIiwib3B0aW9uSW1hZ2VVcmwiLCJpbWFnZSIsImltYWdlTm90Rm91bmQiLCJzcmMiLCJsaW5rZWRGaWxlIiwidmlld1VybCIsImFsbG93ZWRGaWxlVHlwZXMiLCJmaWxlVHlwZU1hcHBpbmciLCJhbGxvd0ZpbGVKcGVnIiwiYWxsb3dGaWxlR2lmIiwiYWxsb3dGaWxlUGRmIiwiYWxsb3dGaWxlUG5nIiwiYWxsb3dGaWxlQWkiLCJhbGxvd2VkVHlwZXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiYXR0cmlidXRlTmFtZSIsIm1hcCIsImpvaW4iLCJtZXJjaGkiLCJidWlsZEVtcHR5VmFyaWF0aW9uR3JvdXAiLCJwcm9kdWN0IiwicHJvZHVjdEVudCIsIlByb2R1Y3QiLCJmcm9tSnNvbiIsIl9vYmplY3RTcHJlYWQiLCJtYWtlRGlydHkiLCJuZXdHcm91cCIsImdyb3VwQ29zdCIsInF1YW50aXR5IiwidG9Kc29uIiwiaXNQcm9kdWN0U3VwcGxpZXJNT0QiLCJwcm9kdWN0VHlwZSIsIlN0cmluZyIsIlNVUFBMSUVSX1JFU0VMTF9NT0QiLCJpbmNsdWRlcyIsImlzUHJvZHVjdFR5cGVGaWxlRG93bmxvYWQiLCJwYXJzZUludCIsIlNFTExFUl9GSUxFX0RPV05MT0FEIiwiaXNQcm9kdWN0RmlsZURvd25sb2FkIiwiaXNQcm9kdWN0TGVhZEZvcm0iLCJMRUFEX0ZPUk0iLCJpc29Db3VudHJpZXMiLCJBRiIsIkFYIiwiQUwiLCJEWiIsIkFTIiwiQUQiLCJBTyIsIkFJIiwiQVEiLCJBRyIsIkFSIiwiQU0iLCJBVyIsIkFVIiwiQVQiLCJBWiIsIkJTIiwiQkgiLCJCRCIsIkJCIiwiQlkiLCJCRSIsIkJaIiwiQkoiLCJCTSIsIkJUIiwiQk8iLCJCQSIsIkJXIiwiQlYiLCJCUiIsIklPIiwiQk4iLCJCRyIsIkJGIiwiQkkiLCJLSCIsIkNNIiwiQ0EiLCJDViIsIktZIiwiQ0YiLCJURCIsIkNMIiwiQ04iLCJDWCIsIkNDIiwiQ08iLCJLTSIsIkNHIiwiQ0QiLCJDSyIsIkNSIiwiQ0kiLCJIUiIsIkNVIiwiQ1kiLCJDWiIsIkRLIiwiREoiLCJETSIsIkRPIiwiRUMiLCJFRyIsIlNWIiwiR1EiLCJFUiIsIkVFIiwiRVQiLCJGSyIsIkZPIiwiRkoiLCJGSSIsIkZSIiwiR0YiLCJQRiIsIlRGIiwiR0EiLCJHTSIsIkdFIiwiREUiLCJHSCIsIkdJIiwiR1IiLCJHTCIsIkdEIiwiR1AiLCJHVSIsIkdUIiwiR0ciLCJHTiIsIkdXIiwiR1kiLCJIVCIsIkhNIiwiVkEiLCJITiIsIkhLIiwiSFUiLCJJUyIsIklOIiwiSUQiLCJJUiIsIklRIiwiSUUiLCJJTSIsIklMIiwiSVQiLCJKTSIsIkpQIiwiSkUiLCJKTyIsIktaIiwiS0UiLCJLSSIsIktSIiwiS1ciLCJLRyIsIkxBIiwiTFYiLCJMQiIsIkxTIiwiTFIiLCJMWSIsIkxJIiwiTFQiLCJMVSIsIk1PIiwiTUsiLCJNRyIsIk1XIiwiTVkiLCJNViIsIk1MIiwiTVQiLCJNSCIsIk1RIiwiTVIiLCJNVSIsIllUIiwiTVgiLCJGTSIsIk1EIiwiTUMiLCJNTiIsIk1FIiwiTVMiLCJNQSIsIk1aIiwiTU0iLCJOQSIsIk5SIiwiTlAiLCJOTCIsIkFOIiwiTkMiLCJOWiIsIk5JIiwiTkUiLCJORyIsIk5VIiwiTkYiLCJNUCIsIk5PIiwiT00iLCJQSyIsIlBXIiwiUFMiLCJQQSIsIlBHIiwiUFkiLCJQRSIsIlBIIiwiUE4iLCJQTCIsIlBUIiwiUFIiLCJRQSIsIlJFIiwiUk8iLCJSVSIsIlJXIiwiQkwiLCJTSCIsIktOIiwiTEMiLCJNRiIsIlBNIiwiVkMiLCJXUyIsIlNNIiwiU1QiLCJTQSIsIlNOIiwiUlMiLCJTQyIsIlNMIiwiU0ciLCJTSyIsIlNJIiwiU0IiLCJTTyIsIlpBIiwiR1MiLCJFUyIsIkxLIiwiU0QiLCJTUiIsIlNKIiwiU1oiLCJTRSIsIkNIIiwiU1kiLCJUVyIsIlRKIiwiVFoiLCJUSCIsIlRMIiwiVEciLCJUSyIsIlRPIiwiVFQiLCJUTiIsIlRSIiwiVE0iLCJUQyIsIlRWIiwiVUciLCJVQSIsIkFFIiwiR0IiLCJVUyIsIlVNIiwiVVkiLCJVWiIsIlZVIiwiVkUiLCJWTiIsIlZHIiwiVkkiLCJXRiIsIkVIIiwiWUUiLCJaTSIsIlpXIiwiZ2V0Q291bnRyeU5hbWUiLCJjb3VudHJ5Q29kZSIsImhhc093blByb3BlcnR5IiwiY2xlYW5UYWdJZHMiLCJyYXciLCJpZCIsInRyaW0iLCJ0ZXN0IiwiTnVtYmVyIiwiZ2V0TWVyY2hpU291cmNlSm9iVGFncyIsImxvY2FsU3RvcmFnZSIsIm1lcmNoaVNvdXJjZSIsImdldEl0ZW0iLCJpZHMiLCJzb3J0QnlQb3NpdGlvbiIsIm9wdGlvbnMiLCJvYmoiLCJwb3NpdGlvbiIsInNvcnQiLCJhIiwiYiIsImFQb3NpdGlvbiIsImJQb3NpdGlvbiIsImNsZWFuRm9ybVZhcmlhdGlvbkpzb24iLCJ2YXJpYXRpb25Kc29uIiwicmF3SnNvbiIsImpzb24iLCJKU09OIiwicGFyc2UiLCJfdW51c2VkIiwiX3JlZiIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJjbGVhblZhcmlhdGlvbiIsInZhcmlhdGlvbkZpbGVzIiwidmFyaWF0aW9uQXJyYXlGaWVsZElkIiwiY2xlYW5Kb2JWYXJpYXRpb25zQW5kR3JvdXBzIiwiam9iSnNvbiIsInZhcmlhdGlvbnMiLCJ2YXJpYXRpb25zR3JvdXBzIiwiaGFzR3JvdXBzIiwiQm9vbGVhbiIsImxlbmd0aCIsImhhc1ZhcmlhdGlvbnMiLCJpIiwiZ3JvdXAiLCJqIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVyY2hpIH0gZnJvbSAnbWVyY2hpX3Nka190cyc7XHJcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5IH0gZnJvbSAnLi4vdXRpbHMvY3VycmVuY3knO1xyXG5pbXBvcnQgeyBQcm9kdWN0VHlwZSB9IGZyb20gJy4uL3V0aWxzL3R5cGVzJztcclxuY29uc3QgcG5nT3B0aW9uTm90Rm91bmQgPSByZXF1aXJlKCcuLi9pbWFnZXMvcHJvZHVjdC1ub3QtZm91bmQucG5nJyk7XHJcblxyXG5mdW5jdGlvbiByZW5kZXJTaW5nbGVDb3N0SW5kaWNhdGlvbihcclxuICBjb3N0OiBhbnksXHJcbiAgY3VycmVuY3lDb2RlOiBhbnksXHJcbiAgY29zdFR5cGVTdHJpbmc6IHN0cmluZ1xyXG4pIHtcclxuICBsZXQgY3VycmVuY3lPcHRpb25zID0geyBjdXJyZW5jeTogY3VycmVuY3lDb2RlLCBzaG93Q29kZUlmTm9TeW1ib2w6IGZhbHNlIH07XHJcbiAgbGV0IGNvc3RTdHJpbmcgPSAnJztcclxuXHJcbiAgaWYgKGNvc3QpIHtcclxuICAgIGNvc3RTdHJpbmcgPSBmb3JtYXRDdXJyZW5jeShwYXJzZUZsb2F0KGNvc3QpLCBjdXJyZW5jeU9wdGlvbnMpO1xyXG4gICAgY29zdFN0cmluZyA9ICcgKyAnICsgY29zdFN0cmluZyArICcgJyArIGNvc3RUeXBlU3RyaW5nO1xyXG4gIH1cclxuICByZXR1cm4gY29zdFN0cmluZztcclxufVxyXG5cclxuY29uc3QgY29zdERldGFpbCA9IChvbmNlT2ZmQ29zdDogYW55LCB1bml0Q29zdDogYW55LCBjdXJyZW5jeUNvZGU6IHN0cmluZykgPT4ge1xyXG4gIGNvbnN0IG9uY2VPZmZDb3N0RGVzY3JpcHRpb24gPSByZW5kZXJTaW5nbGVDb3N0SW5kaWNhdGlvbihcclxuICAgIHBhcnNlRmxvYXQob25jZU9mZkNvc3QpLFxyXG4gICAgY3VycmVuY3lDb2RlLFxyXG4gICAgJ29uY2Ugb2ZmJ1xyXG4gICk7XHJcbiAgY29uc3QgdW5pdENvc3REZXNjcmlwdGlvbiA9IHJlbmRlclNpbmdsZUNvc3RJbmRpY2F0aW9uKFxyXG4gICAgcGFyc2VGbG9hdCh1bml0Q29zdCksXHJcbiAgICBjdXJyZW5jeUNvZGUsXHJcbiAgICAncGVyIHVuaXQnXHJcbiAgKTtcclxuICByZXR1cm4gb25jZU9mZkNvc3REZXNjcmlwdGlvbiArIHVuaXRDb3N0RGVzY3JpcHRpb247XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmFyaWF0aW9uRmllbGRDb3N0RGV0YWlsKHZhcmlhdGlvbkZpZWxkOiBhbnkpIHtcclxuICBjb25zdCB7IHZhcmlhdGlvbkNvc3QsIHZhcmlhdGlvblVuaXRDb3N0LCBjdXJyZW5jeSB9ID0gdmFyaWF0aW9uRmllbGQ7XHJcbiAgcmV0dXJuIGNvc3REZXRhaWwodmFyaWF0aW9uQ29zdCEsIHZhcmlhdGlvblVuaXRDb3N0ISwgY3VycmVuY3khKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhdGlvbkNvc3REZXRhaWwodmFyaWF0aW9uOiBhbnkpIHtcclxuICBjb25zdCB7IG9uY2VPZmZDb3N0LCB1bml0Q29zdCwgY3VycmVuY3kgfSA9IHZhcmlhdGlvbjtcclxuICByZXR1cm4gY29zdERldGFpbChvbmNlT2ZmQ29zdCEsIHVuaXRDb3N0ISwgY3VycmVuY3khKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhdGlvbkZpZWxkT3B0aW9uQ29zdERldGFpbChvcHRpb246IGFueSkge1xyXG4gIGNvbnN0IHsgY3VycmVuY3ksIG9uY2VPZmZDb3N0LCB1bml0Q29zdCB9ID0gb3B0aW9uO1xyXG4gIHJldHVybiBjb3N0RGV0YWlsKG9uY2VPZmZDb3N0ISwgdW5pdENvc3QhLCBjdXJyZW5jeSEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRTZWxlY3RlZE9wdGlvbnModmFsdWU6IGFueSkge1xyXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJyk7XHJcbiAgfVxyXG4gIHJldHVybiBbXTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHN1cHBsaWVyU2VsbGVyRWRpdGFibGVQcm9kdWN0VHlwZXM6IEFycmF5PG51bWJlcj4gPSBbXHJcbiAgUHJvZHVjdFR5cGUuU1VQUExJRVJfTU9ELFxyXG4gIFByb2R1Y3RUeXBlLkNMT05FRF9TVVBQTElFUl9NT0QsXHJcbl07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb3B0aW9uSW1hZ2VVcmwob3B0aW9uOiBhbnkpIHtcclxuICBjb25zdCBpbWFnZSA9IHBuZ09wdGlvbk5vdEZvdW5kID8gKHBuZ09wdGlvbk5vdEZvdW5kLmRlZmF1bHQgfHwgcG5nT3B0aW9uTm90Rm91bmQpIDogJyc7XHJcbiAgY29uc3QgaW1hZ2VOb3RGb3VuZCA9IGltYWdlID8gKGltYWdlLnNyYyB8fCBpbWFnZSkgOiAnJztcclxuICByZXR1cm4gb3B0aW9uLmxpbmtlZEZpbGVcclxuICAgID8gb3B0aW9uLmxpbmtlZEZpbGVcclxuICAgICAgPyBvcHRpb24ubGlua2VkRmlsZS52aWV3VXJsXHJcbiAgICAgIDogaW1hZ2VOb3RGb3VuZFxyXG4gICAgOiBpbWFnZU5vdEZvdW5kO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dlZEZpbGVUeXBlcyh2YXJpYXRpb25GaWVsZDogYW55KTogc3RyaW5nIHtcclxuICBjb25zdCBmaWxlVHlwZU1hcHBpbmc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgICBhbGxvd0ZpbGVKcGVnOiAnLmpwZWcnLFxyXG4gICAgYWxsb3dGaWxlR2lmOiAnLmdpZicsXHJcbiAgICBhbGxvd0ZpbGVQZGY6ICcucGRmJyxcclxuICAgIGFsbG93RmlsZVBuZzogJy5wbmcnLFxyXG4gICAgYWxsb3dGaWxlQWk6ICcuYWknLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGFsbG93ZWRUeXBlczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhmaWxlVHlwZU1hcHBpbmcpXHJcbiAgICAuZmlsdGVyKChhdHRyaWJ1dGVOYW1lKSA9PiB2YXJpYXRpb25GaWVsZFthdHRyaWJ1dGVOYW1lXSlcclxuICAgIC5tYXAoKGF0dHJpYnV0ZU5hbWUpID0+IGZpbGVUeXBlTWFwcGluZ1thdHRyaWJ1dGVOYW1lXSk7XHJcblxyXG4gIHJldHVybiBhbGxvd2VkVHlwZXMuam9pbignLCcpO1xyXG59XHJcblxyXG5jb25zdCBtZXJjaGkgPSBuZXcgTWVyY2hpKCk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFbXB0eVZhcmlhdGlvbkdyb3VwKHByb2R1Y3Q6IGFueSkge1xyXG4gIGNvbnN0IHByb2R1Y3RFbnQgPSBuZXcgbWVyY2hpLlByb2R1Y3QoKTtcclxuICBwcm9kdWN0RW50LmZyb21Kc29uKHsuLi5wcm9kdWN0fSwgeyBtYWtlRGlydHk6IGZhbHNlfSk7XHJcbiAgY29uc3QgbmV3R3JvdXAgPSBuZXcgcHJvZHVjdEVudC5idWlsZEVtcHR5VmFyaWF0aW9uR3JvdXAoKTtcclxuICBuZXdHcm91cC5ncm91cENvc3QgPSAwO1xyXG4gIG5ld0dyb3VwLnF1YW50aXR5ID0gMDtcclxuICByZXR1cm4gbmV3R3JvdXAudG9Kc29uKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2R1Y3RTdXBwbGllck1PRChwcm9kdWN0OiBhbnkpIHtcclxuICBjb25zdCBwcm9kdWN0VHlwZSA9IHByb2R1Y3QgJiYgcHJvZHVjdC5wcm9kdWN0VHlwZTtcclxuICByZXR1cm4gKFxyXG4gICAgcHJvZHVjdCAmJlxyXG4gICAgW1xyXG4gICAgICBTdHJpbmcoUHJvZHVjdFR5cGUuU1VQUExJRVJfTU9EKSxcclxuICAgICAgU3RyaW5nKFByb2R1Y3RUeXBlLlNVUFBMSUVSX1JFU0VMTF9NT0QpLFxyXG4gICAgXS5pbmNsdWRlcyhTdHJpbmcocHJvZHVjdFR5cGUpKVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2R1Y3RUeXBlRmlsZURvd25sb2FkKHByb2R1Y3RUeXBlOiBhbnkpIHtcclxuICByZXR1cm4gcGFyc2VJbnQocHJvZHVjdFR5cGUsIDEwKSA9PT0gUHJvZHVjdFR5cGUuU0VMTEVSX0ZJTEVfRE9XTkxPQUQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2R1Y3RGaWxlRG93bmxvYWQocHJvZHVjdDogYW55KSB7XHJcbiAgY29uc3QgeyBwcm9kdWN0VHlwZSB9ID0gcHJvZHVjdDtcclxuICByZXR1cm4gaXNQcm9kdWN0VHlwZUZpbGVEb3dubG9hZChwcm9kdWN0VHlwZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2R1Y3RMZWFkRm9ybShwcm9kdWN0OiBhbnkpIHtcclxuICBjb25zdCBwcm9kdWN0VHlwZSA9IHByb2R1Y3QgJiYgcHJvZHVjdC5wcm9kdWN0VHlwZTtcclxuICByZXR1cm4gcGFyc2VJbnQocHJvZHVjdFR5cGUsIDEwKSA9PT0gUHJvZHVjdFR5cGUuTEVBRF9GT1JNO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNvQ291bnRyaWVzOiBhbnkgPSB7XHJcbiAgQUY6ICdBZmdoYW5pc3RhbicsXHJcbiAgQVg6ICdBbGFuZCBJc2xhbmRzJyxcclxuICBBTDogJ0FsYmFuaWEnLFxyXG4gIERaOiAnQWxnZXJpYScsXHJcbiAgQVM6ICdBbWVyaWNhbiBTYW1vYScsXHJcbiAgQUQ6ICdBbmRvcnJhJyxcclxuICBBTzogJ0FuZ29sYScsXHJcbiAgQUk6ICdBbmd1aWxsYScsXHJcbiAgQVE6ICdBbnRhcmN0aWNhJyxcclxuICBBRzogJ0FudGlndWEgQW5kIEJhcmJ1ZGEnLFxyXG4gIEFSOiAnQXJnZW50aW5hJyxcclxuICBBTTogJ0FybWVuaWEnLFxyXG4gIEFXOiAnQXJ1YmEnLFxyXG4gIEFVOiAnQXVzdHJhbGlhJyxcclxuICBBVDogJ0F1c3RyaWEnLFxyXG4gIEFaOiAnQXplcmJhaWphbicsXHJcbiAgQlM6ICdCYWhhbWFzJyxcclxuICBCSDogJ0JhaHJhaW4nLFxyXG4gIEJEOiAnQmFuZ2xhZGVzaCcsXHJcbiAgQkI6ICdCYXJiYWRvcycsXHJcbiAgQlk6ICdCZWxhcnVzJyxcclxuICBCRTogJ0JlbGdpdW0nLFxyXG4gIEJaOiAnQmVsaXplJyxcclxuICBCSjogJ0JlbmluJyxcclxuICBCTTogJ0Jlcm11ZGEnLFxyXG4gIEJUOiAnQmh1dGFuJyxcclxuICBCTzogJ0JvbGl2aWEnLFxyXG4gIEJBOiAnQm9zbmlhIEFuZCBIZXJ6ZWdvdmluYScsXHJcbiAgQlc6ICdCb3Rzd2FuYScsXHJcbiAgQlY6ICdCb3V2ZXQgSXNsYW5kJyxcclxuICBCUjogJ0JyYXppbCcsXHJcbiAgSU86ICdCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnknLFxyXG4gIEJOOiAnQnJ1bmVpIERhcnVzc2FsYW0nLFxyXG4gIEJHOiAnQnVsZ2FyaWEnLFxyXG4gIEJGOiAnQnVya2luYSBGYXNvJyxcclxuICBCSTogJ0J1cnVuZGknLFxyXG4gIEtIOiAnQ2FtYm9kaWEnLFxyXG4gIENNOiAnQ2FtZXJvb24nLFxyXG4gIENBOiAnQ2FuYWRhJyxcclxuICBDVjogJ0NhcGUgVmVyZGUnLFxyXG4gIEtZOiAnQ2F5bWFuIElzbGFuZHMnLFxyXG4gIENGOiAnQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljJyxcclxuICBURDogJ0NoYWQnLFxyXG4gIENMOiAnQ2hpbGUnLFxyXG4gIENOOiAnQ2hpbmEnLFxyXG4gIENYOiAnQ2hyaXN0bWFzIElzbGFuZCcsXHJcbiAgQ0M6ICdDb2NvcyAoS2VlbGluZykgSXNsYW5kcycsXHJcbiAgQ086ICdDb2xvbWJpYScsXHJcbiAgS006ICdDb21vcm9zJyxcclxuICBDRzogJ0NvbmdvJyxcclxuICBDRDogJ0NvbmdvLCBEZW1vY3JhdGljIFJlcHVibGljJyxcclxuICBDSzogJ0Nvb2sgSXNsYW5kcycsXHJcbiAgQ1I6ICdDb3N0YSBSaWNhJyxcclxuICBDSTogXCJDb3RlIEQnSXZvaXJlXCIsXHJcbiAgSFI6ICdDcm9hdGlhJyxcclxuICBDVTogJ0N1YmEnLFxyXG4gIENZOiAnQ3lwcnVzJyxcclxuICBDWjogJ0N6ZWNoIFJlcHVibGljJyxcclxuICBESzogJ0Rlbm1hcmsnLFxyXG4gIERKOiAnRGppYm91dGknLFxyXG4gIERNOiAnRG9taW5pY2EnLFxyXG4gIERPOiAnRG9taW5pY2FuIFJlcHVibGljJyxcclxuICBFQzogJ0VjdWFkb3InLFxyXG4gIEVHOiAnRWd5cHQnLFxyXG4gIFNWOiAnRWwgU2FsdmFkb3InLFxyXG4gIEdROiAnRXF1YXRvcmlhbCBHdWluZWEnLFxyXG4gIEVSOiAnRXJpdHJlYScsXHJcbiAgRUU6ICdFc3RvbmlhJyxcclxuICBFVDogJ0V0aGlvcGlhJyxcclxuICBGSzogJ0ZhbGtsYW5kIElzbGFuZHMgKE1hbHZpbmFzKScsXHJcbiAgRk86ICdGYXJvZSBJc2xhbmRzJyxcclxuICBGSjogJ0ZpamknLFxyXG4gIEZJOiAnRmlubGFuZCcsXHJcbiAgRlI6ICdGcmFuY2UnLFxyXG4gIEdGOiAnRnJlbmNoIEd1aWFuYScsXHJcbiAgUEY6ICdGcmVuY2ggUG9seW5lc2lhJyxcclxuICBURjogJ0ZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcycsXHJcbiAgR0E6ICdHYWJvbicsXHJcbiAgR006ICdHYW1iaWEnLFxyXG4gIEdFOiAnR2VvcmdpYScsXHJcbiAgREU6ICdHZXJtYW55JyxcclxuICBHSDogJ0doYW5hJyxcclxuICBHSTogJ0dpYnJhbHRhcicsXHJcbiAgR1I6ICdHcmVlY2UnLFxyXG4gIEdMOiAnR3JlZW5sYW5kJyxcclxuICBHRDogJ0dyZW5hZGEnLFxyXG4gIEdQOiAnR3VhZGVsb3VwZScsXHJcbiAgR1U6ICdHdWFtJyxcclxuICBHVDogJ0d1YXRlbWFsYScsXHJcbiAgR0c6ICdHdWVybnNleScsXHJcbiAgR046ICdHdWluZWEnLFxyXG4gIEdXOiAnR3VpbmVhLUJpc3NhdScsXHJcbiAgR1k6ICdHdXlhbmEnLFxyXG4gIEhUOiAnSGFpdGknLFxyXG4gIEhNOiAnSGVhcmQgSXNsYW5kICYgTWNkb25hbGQgSXNsYW5kcycsXHJcbiAgVkE6ICdIb2x5IFNlZSAoVmF0aWNhbiBDaXR5IFN0YXRlKScsXHJcbiAgSE46ICdIb25kdXJhcycsXHJcbiAgSEs6ICdIb25nIEtvbmcnLFxyXG4gIEhVOiAnSHVuZ2FyeScsXHJcbiAgSVM6ICdJY2VsYW5kJyxcclxuICBJTjogJ0luZGlhJyxcclxuICBJRDogJ0luZG9uZXNpYScsXHJcbiAgSVI6ICdJcmFuLCBJc2xhbWljIFJlcHVibGljIE9mJyxcclxuICBJUTogJ0lyYXEnLFxyXG4gIElFOiAnSXJlbGFuZCcsXHJcbiAgSU06ICdJc2xlIE9mIE1hbicsXHJcbiAgSUw6ICdJc3JhZWwnLFxyXG4gIElUOiAnSXRhbHknLFxyXG4gIEpNOiAnSmFtYWljYScsXHJcbiAgSlA6ICdKYXBhbicsXHJcbiAgSkU6ICdKZXJzZXknLFxyXG4gIEpPOiAnSm9yZGFuJyxcclxuICBLWjogJ0themFraHN0YW4nLFxyXG4gIEtFOiAnS2VueWEnLFxyXG4gIEtJOiAnS2lyaWJhdGknLFxyXG4gIEtSOiAnS29yZWEnLFxyXG4gIEtXOiAnS3V3YWl0JyxcclxuICBLRzogJ0t5cmd5enN0YW4nLFxyXG4gIExBOiBcIkxhbyBQZW9wbGUncyBEZW1vY3JhdGljIFJlcHVibGljXCIsXHJcbiAgTFY6ICdMYXR2aWEnLFxyXG4gIExCOiAnTGViYW5vbicsXHJcbiAgTFM6ICdMZXNvdGhvJyxcclxuICBMUjogJ0xpYmVyaWEnLFxyXG4gIExZOiAnTGlieWFuIEFyYWIgSmFtYWhpcml5YScsXHJcbiAgTEk6ICdMaWVjaHRlbnN0ZWluJyxcclxuICBMVDogJ0xpdGh1YW5pYScsXHJcbiAgTFU6ICdMdXhlbWJvdXJnJyxcclxuICBNTzogJ01hY2FvJyxcclxuICBNSzogJ01hY2Vkb25pYScsXHJcbiAgTUc6ICdNYWRhZ2FzY2FyJyxcclxuICBNVzogJ01hbGF3aScsXHJcbiAgTVk6ICdNYWxheXNpYScsXHJcbiAgTVY6ICdNYWxkaXZlcycsXHJcbiAgTUw6ICdNYWxpJyxcclxuICBNVDogJ01hbHRhJyxcclxuICBNSDogJ01hcnNoYWxsIElzbGFuZHMnLFxyXG4gIE1ROiAnTWFydGluaXF1ZScsXHJcbiAgTVI6ICdNYXVyaXRhbmlhJyxcclxuICBNVTogJ01hdXJpdGl1cycsXHJcbiAgWVQ6ICdNYXlvdHRlJyxcclxuICBNWDogJ01leGljbycsXHJcbiAgRk06ICdNaWNyb25lc2lhLCBGZWRlcmF0ZWQgU3RhdGVzIE9mJyxcclxuICBNRDogJ01vbGRvdmEnLFxyXG4gIE1DOiAnTW9uYWNvJyxcclxuICBNTjogJ01vbmdvbGlhJyxcclxuICBNRTogJ01vbnRlbmVncm8nLFxyXG4gIE1TOiAnTW9udHNlcnJhdCcsXHJcbiAgTUE6ICdNb3JvY2NvJyxcclxuICBNWjogJ01vemFtYmlxdWUnLFxyXG4gIE1NOiAnTXlhbm1hcicsXHJcbiAgTkE6ICdOYW1pYmlhJyxcclxuICBOUjogJ05hdXJ1JyxcclxuICBOUDogJ05lcGFsJyxcclxuICBOTDogJ05ldGhlcmxhbmRzJyxcclxuICBBTjogJ05ldGhlcmxhbmRzIEFudGlsbGVzJyxcclxuICBOQzogJ05ldyBDYWxlZG9uaWEnLFxyXG4gIE5aOiAnTmV3IFplYWxhbmQnLFxyXG4gIE5JOiAnTmljYXJhZ3VhJyxcclxuICBORTogJ05pZ2VyJyxcclxuICBORzogJ05pZ2VyaWEnLFxyXG4gIE5VOiAnTml1ZScsXHJcbiAgTkY6ICdOb3Jmb2xrIElzbGFuZCcsXHJcbiAgTVA6ICdOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMnLFxyXG4gIE5POiAnTm9yd2F5JyxcclxuICBPTTogJ09tYW4nLFxyXG4gIFBLOiAnUGFraXN0YW4nLFxyXG4gIFBXOiAnUGFsYXUnLFxyXG4gIFBTOiAnUGFsZXN0aW5pYW4gVGVycml0b3J5LCBPY2N1cGllZCcsXHJcbiAgUEE6ICdQYW5hbWEnLFxyXG4gIFBHOiAnUGFwdWEgTmV3IEd1aW5lYScsXHJcbiAgUFk6ICdQYXJhZ3VheScsXHJcbiAgUEU6ICdQZXJ1JyxcclxuICBQSDogJ1BoaWxpcHBpbmVzJyxcclxuICBQTjogJ1BpdGNhaXJuJyxcclxuICBQTDogJ1BvbGFuZCcsXHJcbiAgUFQ6ICdQb3J0dWdhbCcsXHJcbiAgUFI6ICdQdWVydG8gUmljbycsXHJcbiAgUUE6ICdRYXRhcicsXHJcbiAgUkU6ICdSZXVuaW9uJyxcclxuICBSTzogJ1JvbWFuaWEnLFxyXG4gIFJVOiAnUnVzc2lhbiBGZWRlcmF0aW9uJyxcclxuICBSVzogJ1J3YW5kYScsXHJcbiAgQkw6ICdTYWludCBCYXJ0aGVsZW15JyxcclxuICBTSDogJ1NhaW50IEhlbGVuYScsXHJcbiAgS046ICdTYWludCBLaXR0cyBBbmQgTmV2aXMnLFxyXG4gIExDOiAnU2FpbnQgTHVjaWEnLFxyXG4gIE1GOiAnU2FpbnQgTWFydGluJyxcclxuICBQTTogJ1NhaW50IFBpZXJyZSBBbmQgTWlxdWVsb24nLFxyXG4gIFZDOiAnU2FpbnQgVmluY2VudCBBbmQgR3JlbmFkaW5lcycsXHJcbiAgV1M6ICdTYW1vYScsXHJcbiAgU006ICdTYW4gTWFyaW5vJyxcclxuICBTVDogJ1NhbyBUb21lIEFuZCBQcmluY2lwZScsXHJcbiAgU0E6ICdTYXVkaSBBcmFiaWEnLFxyXG4gIFNOOiAnU2VuZWdhbCcsXHJcbiAgUlM6ICdTZXJiaWEnLFxyXG4gIFNDOiAnU2V5Y2hlbGxlcycsXHJcbiAgU0w6ICdTaWVycmEgTGVvbmUnLFxyXG4gIFNHOiAnU2luZ2Fwb3JlJyxcclxuICBTSzogJ1Nsb3Zha2lhJyxcclxuICBTSTogJ1Nsb3ZlbmlhJyxcclxuICBTQjogJ1NvbG9tb24gSXNsYW5kcycsXHJcbiAgU086ICdTb21hbGlhJyxcclxuICBaQTogJ1NvdXRoIEFmcmljYScsXHJcbiAgR1M6ICdTb3V0aCBHZW9yZ2lhIEFuZCBTYW5kd2ljaCBJc2wuJyxcclxuICBFUzogJ1NwYWluJyxcclxuICBMSzogJ1NyaSBMYW5rYScsXHJcbiAgU0Q6ICdTdWRhbicsXHJcbiAgU1I6ICdTdXJpbmFtZScsXHJcbiAgU0o6ICdTdmFsYmFyZCBBbmQgSmFuIE1heWVuJyxcclxuICBTWjogJ1N3YXppbGFuZCcsXHJcbiAgU0U6ICdTd2VkZW4nLFxyXG4gIENIOiAnU3dpdHplcmxhbmQnLFxyXG4gIFNZOiAnU3lyaWFuIEFyYWIgUmVwdWJsaWMnLFxyXG4gIFRXOiAnVGFpd2FuJyxcclxuICBUSjogJ1RhamlraXN0YW4nLFxyXG4gIFRaOiAnVGFuemFuaWEnLFxyXG4gIFRIOiAnVGhhaWxhbmQnLFxyXG4gIFRMOiAnVGltb3ItTGVzdGUnLFxyXG4gIFRHOiAnVG9nbycsXHJcbiAgVEs6ICdUb2tlbGF1JyxcclxuICBUTzogJ1RvbmdhJyxcclxuICBUVDogJ1RyaW5pZGFkIEFuZCBUb2JhZ28nLFxyXG4gIFROOiAnVHVuaXNpYScsXHJcbiAgVFI6ICdUdXJrZXknLFxyXG4gIFRNOiAnVHVya21lbmlzdGFuJyxcclxuICBUQzogJ1R1cmtzIEFuZCBDYWljb3MgSXNsYW5kcycsXHJcbiAgVFY6ICdUdXZhbHUnLFxyXG4gIFVHOiAnVWdhbmRhJyxcclxuICBVQTogJ1VrcmFpbmUnLFxyXG4gIEFFOiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMnLFxyXG4gIEdCOiAnVW5pdGVkIEtpbmdkb20nLFxyXG4gIFVTOiAnVW5pdGVkIFN0YXRlcycsXHJcbiAgVU06ICdVbml0ZWQgU3RhdGVzIE91dGx5aW5nIElzbGFuZHMnLFxyXG4gIFVZOiAnVXJ1Z3VheScsXHJcbiAgVVo6ICdVemJla2lzdGFuJyxcclxuICBWVTogJ1ZhbnVhdHUnLFxyXG4gIFZFOiAnVmVuZXp1ZWxhJyxcclxuICBWTjogJ1ZpZXQgTmFtJyxcclxuICBWRzogJ1ZpcmdpbiBJc2xhbmRzLCBCcml0aXNoJyxcclxuICBWSTogJ1ZpcmdpbiBJc2xhbmRzLCBVLlMuJyxcclxuICBXRjogJ1dhbGxpcyBBbmQgRnV0dW5hJyxcclxuICBFSDogJ1dlc3Rlcm4gU2FoYXJhJyxcclxuICBZRTogJ1llbWVuJyxcclxuICBaTTogJ1phbWJpYScsXHJcbiAgWlc6ICdaaW1iYWJ3ZScsXHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q291bnRyeU5hbWUoY291bnRyeUNvZGU6IGFueSkge1xyXG4gIGlmIChpc29Db3VudHJpZXMuaGFzT3duUHJvcGVydHkoY291bnRyeUNvZGUpKSB7XHJcbiAgICByZXR1cm4gaXNvQ291bnRyaWVzW2NvdW50cnlDb2RlXTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGNvdW50cnlDb2RlO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuVGFnSWRzKHJhdzogYW55W10pIHtcclxuICByZXR1cm4gcmF3Lm1hcChpZCA9PiBpZC50cmltKCkpICAgICAgICAgICAgLy8gVHJpbSBlYWNoIElEIGVudHJ5IHRvIHJlbW92ZSB3aGl0ZXNwYWNlXHJcbiAgICAuZmlsdGVyKGlkID0+IC9eXFxkKyQvLnRlc3QoaWQpKSAgLy8gVXNlIGEgcmVndWxhciBleHByZXNzaW9uIHRvIGVuc3VyZSB0aGUgSUQgaXMgZW50aXJlbHkgbnVtZXJpYy5cclxuICAgIC5tYXAoaWQgPT4gTnVtYmVyKGlkKSk7ICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHJlbWFpbmluZywgdmFsaWQgSUQgZW50cmllcyBpbnRvIG51bWJlcnNcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lcmNoaVNvdXJjZUpvYlRhZ3MoKTogYW55W10ge1xyXG4gIGlmICh0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiBsb2NhbFN0b3JhZ2UgIT09IG51bGwpIHtcclxuICAgIGNvbnN0IG1lcmNoaVNvdXJjZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZXJjaGlfc291cmNlJyk7XHJcblxyXG4gICAgaWYgKG1lcmNoaVNvdXJjZSkge1xyXG4gICAgICBjb25zdCBpZHMgPSBjbGVhblRhZ0lkcyhtZXJjaGlTb3VyY2Uuc3BsaXQoJywnKSk7XHJcbiAgICAgIHJldHVybiBpZHMubWFwKChpZDogbnVtYmVyKSA9PiAoeyBpZCB9KSk7XHJcbiAgICB9XHJcbiAgICAvLyBJZiBcIm1lcmNoaV9zb3VyY2VcIiBpcyBub3QgZm91bmQgaW4gbG9jYWxTdG9yYWdlLCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuXHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG4gIHJldHVybiBbXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeVBvc2l0aW9uKG9wdGlvbnM6IGFueVtdKTogYW55W10ge1xyXG4gIHJldHVybiBvcHRpb25zLm1hcCgob2JqOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHBvc2l0aW9uID0gdHlwZW9mIG9iai5wb3NpdGlvbiA9PT0gJ3N0cmluZydcclxuICAgICAgPyBwYXJzZUludChvYmoucG9zaXRpb24sIDEwKVxyXG4gICAgICA6IG9iai5wb3NpdGlvbjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLm9iaixcclxuICAgICAgcG9zaXRpb246IHR5cGVvZiBwb3NpdGlvbiA9PT0gJ251bWJlcicgPyBwb3NpdGlvbiA6IDAsXHJcbiAgICB9O1xyXG4gIH0pLnNvcnQoKGEsIGIpID0+IHtcclxuICAgIGNvbnN0IGFQb3NpdGlvbiA9IHR5cGVvZiBhLnBvc2l0aW9uID09PSAnbnVtYmVyJyA/IGEucG9zaXRpb24gOiAwO1xyXG4gICAgY29uc3QgYlBvc2l0aW9uID0gdHlwZW9mIGIucG9zaXRpb24gPT09ICdudW1iZXInID8gYi5wb3NpdGlvbiA6IDA7XHJcbiAgICByZXR1cm4gYVBvc2l0aW9uIC0gYlBvc2l0aW9uO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5Gb3JtVmFyaWF0aW9uSnNvbih2YXJpYXRpb246IGFueSkge1xyXG4gIGxldCB2YXJpYXRpb25Kc29uOiBhbnkgPSBudWxsO1xyXG4gIGNvbnN0IHJhd0pzb24gPSB2YXJpYXRpb24/Lmpzb247XHJcbiAgaWYgKHR5cGVvZiByYXdKc29uID09PSAnc3RyaW5nJyAmJiByYXdKc29uICYmIHJhd0pzb24gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXJpYXRpb25Kc29uID0gSlNPTi5wYXJzZShyYXdKc29uKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICB2YXJpYXRpb25Kc29uID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKCF2YXJpYXRpb25Kc29uKSB7XHJcbiAgICBjb25zdCB7IGpzb24sIC4uLnJlc3QgfSA9IHZhcmlhdGlvbiB8fCB7fTtcclxuICAgIHZhcmlhdGlvbkpzb24gPSByZXN0O1xyXG4gIH1cclxuICBjb25zdCBjbGVhblZhcmlhdGlvbiA9IHtcclxuICAgIC4uLnZhcmlhdGlvbkpzb24sXHJcbiAgICB2YWx1ZTogdmFyaWF0aW9uLnZhbHVlLFxyXG4gICAgdmFyaWF0aW9uRmlsZXM6IHZhcmlhdGlvbi52YXJpYXRpb25GaWxlcyB8fCBbXSxcclxuICB9O1xyXG4gIGlmIChjbGVhblZhcmlhdGlvbi5pZCkge1xyXG4gICAgZGVsZXRlIGNsZWFuVmFyaWF0aW9uLmlkO1xyXG4gIH1cclxuICBpZiAoY2xlYW5WYXJpYXRpb24udmFyaWF0aW9uQXJyYXlGaWVsZElkKSB7XHJcbiAgICBkZWxldGUgY2xlYW5WYXJpYXRpb24udmFyaWF0aW9uQXJyYXlGaWVsZElkO1xyXG4gIH1cclxuICByZXR1cm4gY2xlYW5WYXJpYXRpb247XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkpvYlZhcmlhdGlvbnNBbmRHcm91cHMoam9iSnNvbjogYW55KSB7XHJcbiAgY29uc3QgeyB2YXJpYXRpb25zLCB2YXJpYXRpb25zR3JvdXBzIH0gPSBqb2JKc29uO1xyXG4gIGNvbnN0IGhhc0dyb3VwcyA9IEJvb2xlYW4odmFyaWF0aW9uc0dyb3VwcyAmJiB2YXJpYXRpb25zR3JvdXBzLmxlbmd0aCk7XHJcbiAgY29uc3QgaGFzVmFyaWF0aW9ucyA9IEJvb2xlYW4odmFyaWF0aW9ucyAmJiB2YXJpYXRpb25zLmxlbmd0aCk7XHJcbiAgXHJcbiAgLy8gTG9vcCBvdmVyIGluZGl2aWR1YWwgdmFyaWF0aW9ucyBhbmQgY2hlY2sgaWYgdGhlIHZhcmlhdGlvbiBpcyBhIGpzb24gc3RyaW5nLCBpZiBpdCBpcyBjb252ZXJ0IGl0IHRvIGFuIG9iamVjdFxyXG4gIGlmIChoYXNWYXJpYXRpb25zKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhcmlhdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyaWF0aW9uc1tpXSA9IGNsZWFuRm9ybVZhcmlhdGlvbkpzb24odmFyaWF0aW9uc1tpXSk7XHJcbiAgICB9XHJcbiAgICBqb2JKc29uLnZhcmlhdGlvbnMgPSB2YXJpYXRpb25zO1xyXG4gIH1cclxuICBcclxuICBpZiAoaGFzR3JvdXBzKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhcmlhdGlvbnNHcm91cHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gU2V0IGRlZmF1bHQgcXVhbnRpdHkgaWYgbm90IHByZXNlbnRcclxuICAgICAgY29uc3QgZ3JvdXAgPSB2YXJpYXRpb25zR3JvdXBzW2ldO1xyXG4gICAgICBpZiAoIWdyb3VwLnF1YW50aXR5KSB7XHJcbiAgICAgICAgZ3JvdXAucXVhbnRpdHkgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBIYW5kbGUgdmFyaWF0aW9ucyB3aXRoaW4gdGhlIGdyb3VwIC0gY29udmVydCBKU09OIHN0cmluZ3MgdG8gb2JqZWN0c1xyXG4gICAgICBpZiAoZ3JvdXAudmFyaWF0aW9ucyAmJiBBcnJheS5pc0FycmF5KGdyb3VwLnZhcmlhdGlvbnMpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBncm91cC52YXJpYXRpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBncm91cC52YXJpYXRpb25zW2pdID0gY2xlYW5Gb3JtVmFyaWF0aW9uSnNvbihncm91cC52YXJpYXRpb25zW2pdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGpvYkpzb24udmFyaWF0aW9uc0dyb3VwcyA9IHZhcmlhdGlvbnNHcm91cHM7XHJcbiAgfVxyXG4gIFxyXG4gIHJldHVybiBqb2JKc29uO1xyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsU0FBU0EsTUFBTSxRQUFRLGVBQWU7QUFDdEMsU0FBU0MsY0FBYyxRQUFRLG1CQUFtQjtBQUNsRCxTQUFTQyxXQUFXLFFBQVEsZ0JBQWdCO0FBQzVDLElBQU1DLGlCQUFpQixHQUFHQyxPQUFPLENBQUMsaUNBQWlDLENBQUM7QUFFcEUsU0FBU0MsMEJBQTBCQSxDQUNqQ0MsSUFBUyxFQUNUQyxZQUFpQixFQUNqQkMsY0FBc0IsRUFDdEI7RUFDQSxJQUFJQyxlQUFlLEdBQUc7SUFBRUMsUUFBUSxFQUFFSCxZQUFZO0lBQUVJLGtCQUFrQixFQUFFO0VBQU0sQ0FBQztFQUMzRSxJQUFJQyxVQUFVLEdBQUcsRUFBRTtFQUVuQixJQUFJTixJQUFJLEVBQUU7SUFDUk0sVUFBVSxHQUFHWCxjQUFjLENBQUNZLFVBQVUsQ0FBQ1AsSUFBSSxDQUFDLEVBQUVHLGVBQWUsQ0FBQztJQUM5REcsVUFBVSxHQUFHLEtBQUssR0FBR0EsVUFBVSxHQUFHLEdBQUcsR0FBR0osY0FBYztFQUN4RDtFQUNBLE9BQU9JLFVBQVU7QUFDbkI7QUFF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