@pendo/agent 2.274.0 → 2.275.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3002,6 +3002,7 @@ var ConfigReader = (function () {
3002
3002
  */
3003
3003
  addOption('observeShadowRoots', [SNIPPET_SRC, PENDO_CONFIG_SRC], false);
3004
3004
  addOption('pendoCore', [PENDO_CONFIG_SRC], true);
3005
+ addOption('pendoGlobalKey', [PENDO_CONFIG_SRC]);
3005
3006
  /**
3006
3007
  * By default, if there are multiple frames on the page that have the Agent installed, they will communicate
3007
3008
  * using `window.postMessage`. If set to `true` the Agent will instead use the browser's Broadcast Channel
@@ -3514,6 +3515,8 @@ var ConfigReader = (function () {
3514
3515
  addOption('forceParentDesigner', [SNIPPET_SRC]); // Only works in non-prod environments for automated testing
3515
3516
  // Embedded Guides
3516
3517
  addOption('enableAllEmbeddedGuideEvents', [PENDO_CONFIG_SRC], false);
3518
+ // Form Validation
3519
+ addOption('formValidation', [PENDO_CONFIG_SRC], false);
3517
3520
  }
3518
3521
  initializeOptions();
3519
3522
  var sourceGetters = {};
@@ -3888,8 +3891,8 @@ var SERVER = '';
3888
3891
  var ASSET_HOST = '';
3889
3892
  var ASSET_PATH = '';
3890
3893
  var DESIGNER_ENV = '';
3891
- var VERSION = '2.274.0_';
3892
- var PACKAGE_VERSION = '2.274.0';
3894
+ var VERSION = '2.275.0_';
3895
+ var PACKAGE_VERSION = '2.275.0';
3893
3896
  var LOADER = 'xhr';
3894
3897
  /* eslint-enable agent-eslint-rules/no-gulp-env-references */
3895
3898
  /**
@@ -13492,6 +13495,9 @@ var isWalkthrough = function (guide) {
13492
13495
  guide.isMultiStep &&
13493
13496
  !(guide.attributes && guide.attributes.type === 'group');
13494
13497
  };
13498
+ var isForm = function (guide) {
13499
+ return !!(_.get(guide, 'attributes.form'));
13500
+ };
13495
13501
  function isPreviewing() {
13496
13502
  /* global selmo */
13497
13503
  return (typeof selmo !== 'undefined' && !!selmo.isPreviewing);
@@ -13700,10 +13706,10 @@ var PublicEvents = (function () {
13700
13706
  return events;
13701
13707
  })();
13702
13708
 
13703
- function postLoadGuideJs(url, payload, callback) {
13704
- return ajax.postJSON(url.replace(/\/guides\.js\//, '/guides.json/'), payload)
13709
+ function postLoadGuideJs(url, payload, pendo, callback) {
13710
+ return pendo.ajax.postJSON(url.replace(/\/guides\.js\//, '/guides.json/'), payload)
13705
13711
  .then(function (response) {
13706
- pendo$1.guidesPayload(response.data);
13712
+ pendo.guidesPayload(response.data);
13707
13713
  callback();
13708
13714
  });
13709
13715
  }
@@ -13716,10 +13722,10 @@ var XHRGuideLoader = {
13716
13722
  * @param {Function} done called with no arguments
13717
13723
  * @returns {ayepromise.Promise<undefined>}
13718
13724
  */
13719
- 'load': function (url, done) {
13720
- return ajax.get(url)
13725
+ 'load': function (url, pendo, done) {
13726
+ return pendo.ajax.get(url)
13721
13727
  .then(function (response) {
13722
- pendo$1.guidesPayload(response.data);
13728
+ pendo.guidesPayload(response.data);
13723
13729
  done();
13724
13730
  });
13725
13731
  },
@@ -21354,7 +21360,7 @@ function setPreviewState(state) {
21354
21360
  function createPreviewBar() {
21355
21361
  var frame = document.createElement('iframe');
21356
21362
  frame.id = pendoPreview$1;
21357
- var previewModeStartingHeight = '70px';
21363
+ var previewModeStartingHeight = '70px !important';
21358
21364
  setStyles(frame, {
21359
21365
  'border': 'none',
21360
21366
  'display': 'block !important',
@@ -21365,7 +21371,7 @@ function createPreviewBar() {
21365
21371
  'right': 0,
21366
21372
  'top': 0,
21367
21373
  'visibility': 'visible !important',
21368
- 'width': '100%',
21374
+ 'width': '100% !important',
21369
21375
  'z-index': 400000
21370
21376
  });
21371
21377
  frame.onload = function () {
@@ -21856,7 +21862,7 @@ function previewGuideRequest(config, id) {
21856
21862
  }
21857
21863
  return guide;
21858
21864
  }).then(function (guide) {
21859
- if (guide.attributes && guide.attributes.isWatermark) {
21865
+ if (guide && guide.attributes && guide.attributes.isWatermark) {
21860
21866
  guidesArray.push(guide);
21861
21867
  }
21862
21868
  // set pendo.guides at the very end to avoid mutation
@@ -22199,6 +22205,9 @@ var DesignerV2 = (function () {
22199
22205
  if (options.selectionOnly) {
22200
22206
  scriptTagAttributes['selection-only'] = true;
22201
22207
  }
22208
+ if (ConfigReader.get('pendoGlobalKey')) {
22209
+ scriptTagAttributes['data-pendo-global-key'] = ConfigReader.get('pendoGlobalKey');
22210
+ }
22202
22211
  var designerAgentPluginsLoader = ConfigReader.get('designerAgentPluginsLoader');
22203
22212
  var forceNativeDesignerInDoubleAgentScenarios = window.__pendoExtensions && options.forceNativeDesigner;
22204
22213
  var nativeAgentOnly = !window.__pendoExtensions && !_.isFunction(designerAgentPluginsLoader);
@@ -24660,10 +24669,10 @@ var loadGuideJs = function (apiKey, params) {
24660
24669
  delete queryString.jzb;
24661
24670
  url = buildBaseDataUrl('guide.json', apiKey, queryString);
24662
24671
  var payload = _.extend({ 'events': jzb }, jwtOptions);
24663
- loadingPromise = guideLoaderImpl.post(url, payload, _.noop);
24672
+ loadingPromise = guideLoaderImpl.post(url, payload, pendo$1, _.noop);
24664
24673
  }
24665
24674
  else {
24666
- loadingPromise = guideLoaderImpl.load(url, _.noop);
24675
+ loadingPromise = guideLoaderImpl.load(url, pendo$1, _.noop);
24667
24676
  }
24668
24677
  return q.all([
24669
24678
  // eslint-disable-next-line dot-notation
@@ -25020,6 +25029,8 @@ function hasLegacyGuides(guides, pendo) {
25020
25029
  if (pendo && pendo.designer)
25021
25030
  return true;
25022
25031
  return _.any(guides, function (guide) {
25032
+ if (isForm(guide))
25033
+ return false;
25023
25034
  return _.any(guide.steps, function (step) {
25024
25035
  return !(step.domUrl || step.domJsonpUrl || step.domJson);
25025
25036
  });
@@ -26716,12 +26727,17 @@ var initialize = makeSafe(function (options) {
26716
26727
  function announceFrameToDesignerPlugin() {
26717
26728
  if (!window.parent || !window.parent.postMessage || typeof window.parent.postMessage != 'function')
26718
26729
  return;
26730
+ var targetOrigin = SingletonMessageHandler.targetOrigin();
26731
+ if (!targetOrigin) {
26732
+ log.warn('Unable to announce frame to designer plugin, targetOrigin is not set. Check if broadcastChannel is enabled and cross origin frames are allowed.');
26733
+ return;
26734
+ }
26719
26735
  window.parent.postMessage({
26720
26736
  'type': 'announce-frame-initialized',
26721
26737
  'destination': 'pendo-designer-agent',
26722
26738
  'source': 'pendo-designer-agent',
26723
26739
  'localStorageRouter': true
26724
- }, SingletonMessageHandler.targetOrigin());
26740
+ }, targetOrigin);
26725
26741
  }
26726
26742
  function isCallQueueEmpty(callQueue) {
26727
26743
  return (!_.isArray(callQueue) || _.isEmpty(callQueue));
@@ -30557,7 +30573,6 @@ var CloneDetection = /** @class */ (function () {
30557
30573
  this.name = 'CloneDetection';
30558
30574
  }
30559
30575
  CloneDetection.prototype.initialize = function () {
30560
- var _this = this;
30561
30576
  if (!_.isFunction(window.BroadcastChannel))
30562
30577
  return;
30563
30578
  /**
@@ -30573,32 +30588,39 @@ var CloneDetection = /** @class */ (function () {
30573
30588
  this.tabId = EventTracer.getTabId();
30574
30589
  this.id = randomString(16);
30575
30590
  this.channel = new BroadcastChannel("pendo-clone-detection-".concat(pendo$1.apiKey));
30576
- this.channel.onmessage = function (msg) {
30577
- var type = _.get(msg, 'data.type');
30578
- var tabId = _.get(msg, 'data.tabId');
30579
- var id = _.get(msg, 'data.id');
30580
- if (tabId !== _this.tabId)
30581
- return;
30582
- switch (type) {
30583
- case 'pendo-clone-test':
30584
- if (id === _this.id)
30585
- return;
30586
- if (_this.isClonedSession(id)) {
30587
- _this.sendMessage('pendo-change-tab-id', {
30588
- tabId: tabId,
30589
- id: id
30590
- });
30591
- }
30592
- break;
30593
- case 'pendo-change-tab-id':
30594
- if (id !== _this.id)
30595
- return;
30596
- _this.clearClonedStorage();
30597
- break;
30598
- }
30599
- };
30591
+ this.channel.addEventListener('message', _.bind(this.onmessage, this));
30600
30592
  this.detectClonedSession(this.id);
30601
- return this.teardown;
30593
+ return _.bind(this.teardown, this);
30594
+ };
30595
+ CloneDetection.prototype.teardown = function () {
30596
+ this.stopCloneDetectionTimer();
30597
+ this.channel.removeEventListener('message', this.onmessage);
30598
+ this.channel.close();
30599
+ this.channel = null;
30600
+ };
30601
+ CloneDetection.prototype.onmessage = function (msg) {
30602
+ var type = _.get(msg, 'data.type');
30603
+ var tabId = _.get(msg, 'data.tabId');
30604
+ var id = _.get(msg, 'data.id');
30605
+ if (tabId !== this.tabId)
30606
+ return;
30607
+ switch (type) {
30608
+ case 'pendo-clone-test':
30609
+ if (id === this.id)
30610
+ return;
30611
+ if (this.isClonedSession(id)) {
30612
+ this.sendMessage('pendo-change-tab-id', {
30613
+ tabId: tabId,
30614
+ id: id
30615
+ });
30616
+ }
30617
+ break;
30618
+ case 'pendo-change-tab-id':
30619
+ if (id !== this.id)
30620
+ return;
30621
+ this.clearClonedStorage();
30622
+ break;
30623
+ }
30602
30624
  };
30603
30625
  CloneDetection.prototype.detectClonedSession = function (cd) {
30604
30626
  var cdToStore = pendoSessionStorage.getItem(SESSION_CLONE_DETECTION) || '';
@@ -31411,7 +31433,8 @@ var FramesModule = (function () {
31411
31433
  'isFollower': function (state) {
31412
31434
  return !!state.leaderId && state.leaderId !== state.frameId;
31413
31435
  },
31414
- 'isTop': function (state) {
31436
+ 'isTop': function (state, getters) {
31437
+ var window = getters.window();
31415
31438
  return state.topId === state.frameId || window == window.top;
31416
31439
  },
31417
31440
  'frameVisibility': function (state) {
@@ -31529,6 +31552,9 @@ var FramesModule = (function () {
31529
31552
  },
31530
31553
  'getMyFrame': function (state) {
31531
31554
  return state.frames[state.frameId];
31555
+ },
31556
+ 'window': function () {
31557
+ return window;
31532
31558
  }
31533
31559
  };
31534
31560
  return {
@@ -32927,6 +32953,9 @@ var DesignerConnect = (function () {
32927
32953
  pluginAPI.Events.appUnloaded.off(unloadListener);
32928
32954
  unloadListener = undefined;
32929
32955
  }
32956
+ if (tempLaunchToken) {
32957
+ tempLaunchToken = undefined;
32958
+ }
32930
32959
  }
32931
32960
  function onConnectMessage(data, msg) {
32932
32961
  if (globalPendo.isSendingEvents()) {
@@ -35080,7 +35109,7 @@ var P1GuidePlugin = (function () {
35080
35109
  // Adds pendo credits to the guide unless disabled
35081
35110
  function Credits() {
35082
35111
  var step = this;
35083
- if (!step.hideCredits && !step.domJson && !step.domJsonpUrl) {
35112
+ if (!step.hideCredits && !step.domJson && !step.domJsonpUrl && !isForm(step.guide)) {
35084
35113
  step.after('render', function () {
35085
35114
  _addCredits(step.guideElement[0]);
35086
35115
  });
@@ -35128,7 +35157,7 @@ var Branding = (function () {
35128
35157
  link.href = 'https://www.pendo.io/pendo-free/nps?utm_source=pendo_app&utm_medium=branded-nps&utm_campaign=free-branded-nps';
35129
35158
  link.target = '_blank';
35130
35159
  var img = document.createElement('img');
35131
- img.setAttribute('src', getAssetHost() + '/img/nps-branding.png');
35160
+ img.setAttribute('src', pluginApi.getAssetUrl('img/nps-branding.png'));
35132
35161
  link.appendChild(img);
35133
35162
  link.style.display = 'inline-block';
35134
35163
  var div = document.createElement('div');
@@ -36900,7 +36929,10 @@ var WebAnalytics = /** @class */ (function () {
36900
36929
  var referrerValue = calculateReferrerValue({ referrer: referrer, currentHost: currentHost });
36901
36930
  // Check if this is a self-referral.
36902
36931
  if (referrerValue !== 'self') {
36903
- var query = this.api.util.parseUrl(url).query;
36932
+ var parsedUrl = this.api.util.parseUrl(url);
36933
+ if (!parsedUrl)
36934
+ return {};
36935
+ var query = parsedUrl.query;
36904
36936
  // It is not a self referral, therefore we should calculate the channel and track the visit
36905
36937
  var source = query.utm_source;
36906
36938
  var medium = query.utm_medium;
@@ -36985,6 +37017,524 @@ var WebAnalytics = /** @class */ (function () {
36985
37017
  }());
36986
37018
  var WebAnalytics$1 = new WebAnalytics();
36987
37019
 
37020
+ var buildFormStepBehaviors = function () {
37021
+ if (!this.attributes) {
37022
+ log.info('buildFormStepBehaviors called with invalid context');
37023
+ return {};
37024
+ }
37025
+ var step = this;
37026
+ var originalShow = step.show;
37027
+ var originalHide = step.hide;
37028
+ // Override the show method to respect validation state
37029
+ var show = function (reason) {
37030
+ if (step.attributes.validationHidden) {
37031
+ return false;
37032
+ }
37033
+ return originalShow.call(step, reason);
37034
+ };
37035
+ // Override the hide method to track validation state
37036
+ var hide = function (options) {
37037
+ if (options && options.validationHidden) {
37038
+ step.attributes.validationHidden = true;
37039
+ }
37040
+ return originalHide.call(step, options);
37041
+ };
37042
+ return { show: show, hide: hide };
37043
+ };
37044
+
37045
+ var domJsonBase = {
37046
+ 'children': [],
37047
+ 'props': {
37048
+ 'class': '_pendo-step-container',
37049
+ 'data-layout': 'tooltipBlank',
37050
+ 'id': 'pendo-base'
37051
+ },
37052
+ 'type': 'div'
37053
+ };
37054
+ var domJsonCss = {
37055
+ 'css': [],
37056
+ 'props': {
37057
+ 'scoped': 'scoped',
37058
+ 'type': 'text/css'
37059
+ },
37060
+ 'type': 'style'
37061
+ };
37062
+ var layoutContainer = {
37063
+ 'children': [],
37064
+ 'props': {
37065
+ 'class': '_pendo-step-container-size',
37066
+ 'data-relative-alignment': true,
37067
+ 'data-vertical-alignment': 'Relative to Element',
37068
+ 'id': 'pendo-g-validation-tooltip-container',
37069
+ 'style': {
37070
+ 'display': 'block',
37071
+ 'width': '300px',
37072
+ 'z-index': 300000
37073
+ }
37074
+ },
37075
+ 'type': 'div'
37076
+ };
37077
+ var guideStepContainer = {
37078
+ 'children': [],
37079
+ 'props': {
37080
+ 'class': '_pendo-step-container-styles',
37081
+ 'id': 'pendo-guide-container',
37082
+ 'role': 'dialog',
37083
+ 'data-caret-enabled': true,
37084
+ 'data-caret-height': '15px',
37085
+ 'data-caret-width': '15px',
37086
+ 'style': {
37087
+ 'background-color': 'rgba(255, 255, 255, 1)',
37088
+ 'border': '1px solid #BBBBBB',
37089
+ 'border-radius': '5px',
37090
+ 'padding': '8px 12px',
37091
+ 'box-shadow': '0px 0px 10px 0px rgba(190, 190, 190, 0.5)'
37092
+ },
37093
+ 'tabindex': -1
37094
+ },
37095
+ 'type': 'div'
37096
+ };
37097
+ var textContainer = {
37098
+ 'children': [],
37099
+ 'props': {
37100
+ 'class': '_pendo-text-paragraph',
37101
+ 'style': {}
37102
+ },
37103
+ 'type': 'div'
37104
+ };
37105
+ function createRuleBlock(id, text) {
37106
+ var textChild = createTextBlock(id, text);
37107
+ return {
37108
+ 'props': {
37109
+ 'id': "rule-".concat(id),
37110
+ 'class': 'text-row',
37111
+ 'style': { 'display': 'flex', 'align-items': 'center' }
37112
+ },
37113
+ 'children': [textChild],
37114
+ 'type': 'div'
37115
+ };
37116
+ }
37117
+ function createTextBlock(id, content) {
37118
+ return {
37119
+ 'content': content,
37120
+ 'props': {
37121
+ 'id': "text-".concat(id),
37122
+ 'class': '_pendo-text-plain',
37123
+ 'style': { 'color': 'gray', 'margin': 0 }
37124
+ },
37125
+ 'type': 'p'
37126
+ };
37127
+ }
37128
+ function createIcon(svgString) {
37129
+ var parser = new DOMParser();
37130
+ var svgDoc = parser.parseFromString(svgString, 'image/svg+xml');
37131
+ var svgElement = svgDoc.documentElement;
37132
+ // Create a wrapper div with a margin right of 5px
37133
+ var wrapperDiv = document.createElement('div');
37134
+ wrapperDiv.style.marginRight = '5px';
37135
+ wrapperDiv.appendChild(svgElement);
37136
+ return wrapperDiv;
37137
+ }
37138
+ var defaultIcon = "\n<svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"10\" height=\"10\" fill=\"none\"\n stroke=\"gray\" stroke-linecap=\"round\" stroke-linejoin=\"round\" \n stroke-width=\"2\" viewBox=\"0 0 10 10\">\n <line x1=\"2\" y1=\"5\" x2=\"8\" y2=\"5\"/>\n</svg>\n";
37139
+ var validIcon = "\n<svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" \n fill=\"none\" stroke=\"green\" stroke-width=\"2\" \n stroke-linecap=\"round\" stroke-linejoin=\"round\" \n class=\"feather feather-check\">\n <polyline points=\"2 5 4 7 8 2\"></polyline>\n</svg>\n";
37140
+ var invalidIcon = "\n<svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" \n fill=\"none\" stroke=\"red\" stroke-width=\"2\" \n stroke-linecap=\"round\" stroke-linejoin=\"round\" \n class=\"feather feather-x\">\n <line x1=\"2\" y1=\"2\" x2=\"8\" y2=\"8\"/>\n <line x1=\"8\" y1=\"2\" x2=\"2\" y2=\"8\"/>\n</svg>\n";
37141
+
37142
+ var regexPatterns = {
37143
+ 'emailRegex': /^(([^<>()[\]\\.,;:\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,}))$/,
37144
+ 'phoneRegex': /^(\+\d{1,2}\s?)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/,
37145
+ 'urlRegex': /^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/
37146
+ };
37147
+ var dateFormats = {
37148
+ 'MM-DD-YYYY': /^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])-(19|20)\d\d$/,
37149
+ 'DD-MM-YYYY': /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-(19|20)\d\d$/,
37150
+ 'MM/DD/YYYY': /^(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])\/(19|20)\d\d$/,
37151
+ 'DD/MM/YYYY': /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/(19|20)\d\d$/,
37152
+ 'YYYY-MM-DD': /^(19|20)\d\d-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
37153
+ };
37154
+ var validators = {
37155
+ 'email': function (value) {
37156
+ return regexPatterns.emailRegex.test(value);
37157
+ },
37158
+ 'phone': function (value) {
37159
+ return regexPatterns.phoneRegex.test(value);
37160
+ },
37161
+ 'date': function (value, options) {
37162
+ if (options === void 0) { options = {}; }
37163
+ var regex = dateFormats[options.format] || dateFormats['MM/DD/YYYY'];
37164
+ return regex.test(value);
37165
+ },
37166
+ 'url': function (value) {
37167
+ return regexPatterns.urlRegex.test(value);
37168
+ },
37169
+ 'number': function (value, options) {
37170
+ if (options === void 0) { options = {}; }
37171
+ if (value === '')
37172
+ return false;
37173
+ var min = options.min, max = options.max, allowDecimal = options.allowDecimal;
37174
+ var hasMin = hasValue(min);
37175
+ var hasMax = hasValue(max);
37176
+ if (hasMin)
37177
+ min = Number(min);
37178
+ if (hasMax)
37179
+ max = Number(max);
37180
+ var num = Number(value);
37181
+ if (isNaN(num))
37182
+ return false;
37183
+ if (hasMin && num < min)
37184
+ return false;
37185
+ if (hasMax && num > max)
37186
+ return false;
37187
+ if (!allowDecimal && num % 1 !== 0)
37188
+ return false; // eslint-disable-line
37189
+ return true;
37190
+ },
37191
+ 'characterLength': function (value, options) {
37192
+ if (options === void 0) { options = {}; }
37193
+ var min = options.min, max = options.max;
37194
+ var hasMin = hasValue(min);
37195
+ var hasMax = hasValue(max);
37196
+ if (hasMin)
37197
+ min = Number(min);
37198
+ if (hasMax)
37199
+ max = Number(max);
37200
+ if (hasMin && value.length < min)
37201
+ return false;
37202
+ if (hasMax && value.length > max)
37203
+ return false; // eslint-disable-line
37204
+ return true;
37205
+ }
37206
+ };
37207
+ function hasValue(value) {
37208
+ return value !== undefined && value !== null && value !== '';
37209
+ }
37210
+
37211
+ var FormValidation = (function () {
37212
+ var globalPendo;
37213
+ var pluginApi;
37214
+ var validationGuides = [];
37215
+ var debouncedValidate;
37216
+ var activeStep;
37217
+ var activeField;
37218
+ var activeFieldIsValid = null;
37219
+ var designerModeCheckInterval;
37220
+ return {
37221
+ 'name': 'FormValidation',
37222
+ validationGuides: validationGuides,
37223
+ debouncedValidate: debouncedValidate,
37224
+ initialize: initialize,
37225
+ teardown: teardown,
37226
+ appendValidationStyles: appendValidationStyles,
37227
+ getActiveStep: getActiveStep,
37228
+ setActiveStep: setActiveStep,
37229
+ setActiveField: setActiveField,
37230
+ getActiveField: getActiveField,
37231
+ getActiveFieldIsValid: getActiveFieldIsValid,
37232
+ setActiveFieldIsValid: setActiveFieldIsValid,
37233
+ getValidationGuides: getValidationGuides,
37234
+ setValidationGuides: setValidationGuides,
37235
+ initializeFormValidation: initializeFormValidation,
37236
+ clearAllValidationGuides: clearAllValidationGuides,
37237
+ extractValidationGuides: extractValidationGuides,
37238
+ applyFormBehaviors: applyFormBehaviors,
37239
+ checkValidationFieldVisibility: checkValidationFieldVisibility,
37240
+ hideValidationTooltip: hideValidationTooltip,
37241
+ focusField: focusField,
37242
+ blurField: blurField,
37243
+ findFieldByElement: findFieldByElement,
37244
+ validateInput: validateInput,
37245
+ validateField: validateField,
37246
+ getRuleText: getRuleText,
37247
+ setValidationStyle: setValidationStyle
37248
+ };
37249
+ function initialize(pendo, PluginAPI) {
37250
+ var hasFormValidation = PluginAPI.ConfigReader.get('formValidation');
37251
+ if (!hasFormValidation) {
37252
+ return;
37253
+ }
37254
+ globalPendo = pendo;
37255
+ pluginApi = PluginAPI;
37256
+ debouncedValidate = _.debounce(validateInput, 100);
37257
+ pluginApi.Events.on('deliverablesLoaded', clearAllValidationGuides);
37258
+ pluginApi.Events.on('guideLoopStopped', hideValidationTooltip);
37259
+ pluginApi.Events.on('guideListChanged', initializeFormValidation);
37260
+ pluginApi.GuideLoop.addUpdatePhase(checkValidationFieldVisibility);
37261
+ pluginApi.guides.addProcessor(extractValidationGuides);
37262
+ var isInDesignerMode = !!(globalPendo === null || globalPendo === void 0 ? void 0 : globalPendo.designer);
37263
+ // Set up an interval to check for designer mode
37264
+ designerModeCheckInterval = setInterval(function () {
37265
+ if (isInDesignerMode) {
37266
+ teardown();
37267
+ clearInterval(designerModeCheckInterval);
37268
+ designerModeCheckInterval = null;
37269
+ return;
37270
+ }
37271
+ }, 1000);
37272
+ pendo.attachEvent(document, 'focusin', focusField);
37273
+ pendo.attachEvent(document, 'focusout', blurField);
37274
+ pendo.attachEvent(document, 'input', debouncedValidate);
37275
+ }
37276
+ function teardown() {
37277
+ if (designerModeCheckInterval) {
37278
+ clearInterval(designerModeCheckInterval);
37279
+ designerModeCheckInterval = null;
37280
+ }
37281
+ pluginApi.Events.off('deliverablesLoaded', clearAllValidationGuides);
37282
+ pluginApi.Events.off('guideLoopStopped', hideValidationTooltip);
37283
+ pluginApi.Events.off('guideListChanged', initializeFormValidation);
37284
+ pluginApi.GuideLoop.removeUpdatePhase(checkValidationFieldVisibility);
37285
+ pluginApi.guides.removeProcessor(extractValidationGuides);
37286
+ globalPendo.detachEvent(document, 'focusin', focusField);
37287
+ globalPendo.detachEvent(document, 'focusout', blurField);
37288
+ globalPendo.detachEvent(document, 'input', debouncedValidate);
37289
+ debouncedValidate.cancel();
37290
+ validationGuides = [];
37291
+ activeStep = null;
37292
+ activeField = null;
37293
+ activeFieldIsValid = null;
37294
+ }
37295
+ function clearAllValidationGuides() {
37296
+ pluginApi.guides.removeDisplayableGuides('validationGuides');
37297
+ validationGuides = [];
37298
+ }
37299
+ function hideValidationTooltip() {
37300
+ globalPendo.detachEvent(document, 'focusin', focusField);
37301
+ if (activeField) {
37302
+ activeField = null;
37303
+ activeFieldIsValid = null;
37304
+ }
37305
+ if (activeStep) {
37306
+ activeStep.hide({ 'validationHidden': true });
37307
+ activeStep = null;
37308
+ }
37309
+ }
37310
+ function initializeFormValidation() {
37311
+ appendValidationStyles();
37312
+ pluginApi.guides.registerDisplayableGuides('validationGuides', validationGuides);
37313
+ applyFormBehaviors();
37314
+ }
37315
+ function applyFormBehaviors() {
37316
+ _.map(validationGuides, function (guide) {
37317
+ _.map(guide.steps, function (step) {
37318
+ var stepBehaviors = buildFormStepBehaviors.call(step);
37319
+ Object.assign(step, stepBehaviors);
37320
+ });
37321
+ });
37322
+ }
37323
+ function checkValidationFieldVisibility() {
37324
+ var _a;
37325
+ // If there is an active field/step, check if the associated element still exists
37326
+ if (activeField) {
37327
+ var element = globalPendo.Sizzle(activeStep.elementPathRule)[0];
37328
+ // If element doesn't exist, dismiss the validation
37329
+ if (!element || !globalPendo.isElementVisible(element)) {
37330
+ activeField = null;
37331
+ activeFieldIsValid = null;
37332
+ activeStep.hide({ 'validationHidden': true });
37333
+ activeStep = null;
37334
+ }
37335
+ }
37336
+ // If focusin event listener was detached when guide loop stopped, attach it again
37337
+ var docData = DomData$1.get(document);
37338
+ var bubbleFocusEvents = ((_a = docData.bubbleEvents) === null || _a === void 0 ? void 0 : _a.focusin) || [];
37339
+ var isFocusFieldAttached = bubbleFocusEvents.some(function (e) { return e.handler === focusField; });
37340
+ if (!isFocusFieldAttached) {
37341
+ globalPendo.attachEvent(document, 'focusin', focusField);
37342
+ }
37343
+ }
37344
+ function extractValidationGuides(guide) {
37345
+ if (guide.launchMethod === 'form') {
37346
+ if (!_.some(validationGuides, function (_a) {
37347
+ var id = _a.id;
37348
+ return id === guide.id;
37349
+ })) {
37350
+ validationGuides.push(guide);
37351
+ }
37352
+ }
37353
+ return true;
37354
+ }
37355
+ function appendValidationStyles() {
37356
+ var style = document.createElement('style');
37357
+ style.innerHTML = "\n input[data-pendo-field-valid=\"false\"] {\n border-color: red !important;\n outline-color: red !important;\n }\n ";
37358
+ document.head.appendChild(style);
37359
+ }
37360
+ function focusField(event) {
37361
+ var _a, _b;
37362
+ var target = event.target;
37363
+ if (target.tagName === 'INPUT') {
37364
+ var matchingField = findFieldByElement(target);
37365
+ if (matchingField && activeStep) {
37366
+ activeStep.attributes.validationHidden = false;
37367
+ // if there is no domJson on the step,
37368
+ // this is the first time the user is focusing on the field
37369
+ // so add the text and icon
37370
+ if (!activeStep.domJson) {
37371
+ appendDomJson();
37372
+ }
37373
+ activeStep.show('api');
37374
+ var ruleElement = document.getElementById("rule-".concat((_a = activeField === null || activeField === void 0 ? void 0 : activeField.rules[0]) === null || _a === void 0 ? void 0 : _a.id));
37375
+ if (ruleElement && ((_b = activeField === null || activeField === void 0 ? void 0 : activeField.rules[0]) === null || _b === void 0 ? void 0 : _b.type)) {
37376
+ // add the icon for the rule
37377
+ var icon = activeField.isValid === null ? createIcon(defaultIcon)
37378
+ : activeFieldIsValid ? createIcon(validIcon)
37379
+ : createIcon(invalidIcon);
37380
+ ruleElement.insertBefore(icon, ruleElement.firstChild);
37381
+ }
37382
+ if (matchingField.value !== '') {
37383
+ validateField(target);
37384
+ }
37385
+ }
37386
+ }
37387
+ }
37388
+ function blurField(event) {
37389
+ var target = event.target;
37390
+ if (activeField && activeStep) {
37391
+ var targetMatchesActiveField = globalPendo.Sizzle.matchesSelector(target, activeStep === null || activeStep === void 0 ? void 0 : activeStep.elementPathRule);
37392
+ if (targetMatchesActiveField) {
37393
+ setValidationStyle(target, activeFieldIsValid);
37394
+ }
37395
+ activeStep.hide({ 'validationHidden': true });
37396
+ if (activeField.isValid === null && activeFieldIsValid === false) {
37397
+ var ruleTextBlock = getRuleText();
37398
+ ruleTextBlock.props.style.color = 'red';
37399
+ }
37400
+ activeField.isValid = activeFieldIsValid;
37401
+ activeField = null;
37402
+ activeStep = null;
37403
+ activeFieldIsValid = null;
37404
+ }
37405
+ }
37406
+ function findFieldByElement(element) {
37407
+ var _a;
37408
+ if (activeStep) {
37409
+ activeStep.hide({ 'validationHidden': true });
37410
+ }
37411
+ activeStep = null;
37412
+ activeField = null;
37413
+ activeFieldIsValid = null;
37414
+ // loop through fields to find a field that matches the event target
37415
+ // to determine if there is a validation for that target
37416
+ for (var _i = 0, validationGuides_1 = validationGuides; _i < validationGuides_1.length; _i++) {
37417
+ var guide = validationGuides_1[_i];
37418
+ var matchingStep = _.find(guide.steps, function (step) {
37419
+ return globalPendo.Sizzle.matchesSelector(element, step.elementPathRule);
37420
+ });
37421
+ if (matchingStep) {
37422
+ activeStep = matchingStep;
37423
+ activeField = (_a = matchingStep.attributes) === null || _a === void 0 ? void 0 : _a.field;
37424
+ activeFieldIsValid = activeField.isValid;
37425
+ return activeField;
37426
+ }
37427
+ }
37428
+ return null;
37429
+ }
37430
+ function appendDomJson() {
37431
+ var rule = activeField.rules[0];
37432
+ // Create text blocks
37433
+ var helperContent = createTextBlock("context-".concat(activeField.id), activeField.context);
37434
+ var ruleContent = (rule === null || rule === void 0 ? void 0 : rule.type) ? createRuleBlock(rule.id, rule.ruleText) : null;
37435
+ // Filter out null values and check if we have any content
37436
+ var textBlocks = [helperContent, ruleContent].filter(Boolean);
37437
+ if (textBlocks.length === 0) {
37438
+ return;
37439
+ }
37440
+ // compile the basic json building blocks
37441
+ var stepBase = deepCopy(domJsonBase);
37442
+ var stepCss = deepCopy(domJsonCss);
37443
+ var stepLayoutContainer = deepCopy(layoutContainer);
37444
+ var stepContainer = deepCopy(guideStepContainer);
37445
+ var stepTextContainer = deepCopy(textContainer);
37446
+ stepBase.children.push(stepCss, stepLayoutContainer);
37447
+ stepLayoutContainer.children.push(stepContainer);
37448
+ stepContainer.children.push(stepTextContainer);
37449
+ stepTextContainer.children = textBlocks;
37450
+ activeStep.domJson = stepBase;
37451
+ }
37452
+ function validateInput(event) {
37453
+ var target = event.target;
37454
+ // check if the user is typing in current active field
37455
+ var targetMatchesActiveField = globalPendo.Sizzle.matchesSelector(target, activeStep === null || activeStep === void 0 ? void 0 : activeStep.elementPathRule);
37456
+ if (targetMatchesActiveField) {
37457
+ validateField(target);
37458
+ }
37459
+ else {
37460
+ // if not, find the field that matches the event target
37461
+ var matchingField = findFieldByElement(target);
37462
+ if (matchingField) {
37463
+ activeFieldIsValid = matchingField.isValid;
37464
+ validateField(target);
37465
+ }
37466
+ }
37467
+ }
37468
+ function validateField(target) {
37469
+ var rule = activeField === null || activeField === void 0 ? void 0 : activeField.rules[0];
37470
+ if (!rule) {
37471
+ return;
37472
+ }
37473
+ var validator = validators[rule.type];
37474
+ if (!validator) {
37475
+ return;
37476
+ }
37477
+ var isValid = validator(target.value, rule.options);
37478
+ activeFieldIsValid = !!isValid;
37479
+ var ruleTextBlock = getRuleText();
37480
+ // don't show invalid if the user hasn't finished typing
37481
+ var newIcon;
37482
+ if (activeField.isValid === null) {
37483
+ ruleTextBlock.props.style.color = isValid ? 'green' : 'gray';
37484
+ newIcon = isValid ? createIcon(validIcon) : createIcon(defaultIcon);
37485
+ }
37486
+ else {
37487
+ ruleTextBlock.props.style.color = isValid ? 'green' : 'red';
37488
+ newIcon = isValid ? createIcon(validIcon) : createIcon(invalidIcon);
37489
+ setValidationStyle(target, isValid);
37490
+ }
37491
+ activeStep.hide({ 'stepHidden': true });
37492
+ activeStep.show('api');
37493
+ var ruleElement = document.getElementById("rule-".concat(activeField.rules[0].id));
37494
+ if (ruleElement) {
37495
+ ruleElement.insertBefore(newIcon, ruleElement.firstChild);
37496
+ }
37497
+ }
37498
+ function getRuleText() {
37499
+ var ruleId = activeField.rules[0].id;
37500
+ var ruleTextId = "text-".concat(ruleId);
37501
+ var ruleTextBlock = findBlockById(ruleTextId, activeStep.domJson);
37502
+ return ruleTextBlock;
37503
+ }
37504
+ function setValidationStyle(target, isValid) {
37505
+ if (isValid === false) {
37506
+ target.setAttribute('data-pendo-field-valid', false);
37507
+ }
37508
+ else {
37509
+ target.removeAttribute('data-pendo-field-valid');
37510
+ }
37511
+ }
37512
+ function getActiveStep() {
37513
+ return activeStep;
37514
+ }
37515
+ function setActiveStep(step) {
37516
+ activeStep = step;
37517
+ }
37518
+ function getActiveField() {
37519
+ return activeField;
37520
+ }
37521
+ function setActiveField(field) {
37522
+ activeField = field;
37523
+ }
37524
+ function getActiveFieldIsValid() {
37525
+ return activeFieldIsValid;
37526
+ }
37527
+ function setActiveFieldIsValid(isValid) {
37528
+ activeFieldIsValid = isValid;
37529
+ }
37530
+ function getValidationGuides() {
37531
+ return validationGuides;
37532
+ }
37533
+ function setValidationGuides(guides) {
37534
+ validationGuides = guides;
37535
+ }
37536
+ })();
37537
+
36988
37538
  function registerBuiltInPlugins() {
36989
37539
  registerPlugin(IFrameMonitor);
36990
37540
  registerPlugin(DOMActivation);
@@ -37001,6 +37551,7 @@ function registerBuiltInPlugins() {
37001
37551
  registerPlugin(SessionManager$1);
37002
37552
  registerPlugin(SegmentFlags$1);
37003
37553
  registerPlugin(WebAnalytics$1);
37554
+ registerPlugin(FormValidation);
37004
37555
  }
37005
37556
 
37006
37557
  /*
@@ -43579,6 +44130,7 @@ var Feedback = (function () {
43579
44130
  var iframeContainer = globalPendo.dom(document.createElement('iframe'));
43580
44131
  iframeContainer.css(iframeContainerStyles);
43581
44132
  iframeContainer.attr('id', elemIds.feedbackIframe);
44133
+ iframeContainer.attr('title', 'Feedback');
43582
44134
  iframeContainer.attr('src', getWidgetInitialSource());
43583
44135
  return iframeContainer;
43584
44136
  }
@@ -48124,8 +48676,8 @@ function initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector) {
48124
48676
  };
48125
48677
  }
48126
48678
  const encodedJs = "KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBvZmZzY3JlZW4uY29udmVydFRvQmxvYihkYXRhVVJMT3B0aW9ucyk7CiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpOwogICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOwogICAgICB0cmFuc3BhcmVudEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICByZXR1cm4gYmFzZTY0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogIH0KICBjb25zdCB3b3JrZXIgPSBzZWxmOwogIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zIH0gPSBlLmRhdGE7CiAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBkYXRhVVJMT3B0aW9ucwogICAgICApOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgICBiaXRtYXAuY2xvc2UoKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgdHlwZSA9IGJsb2IudHlwZTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIGlmICghbGFzdEJsb2JNYXAuaGFzKGlkKSAmJiBhd2FpdCB0cmFuc3BhcmVudEJhc2U2NCA9PT0gYmFzZTY0KSB7CiAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsKICAgICAgfQogICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KSByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7CiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgaWQsCiAgICAgICAgdHlwZSwKICAgICAgICBiYXNlNjQsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0pOwogICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsKICAgIH0KICB9Owp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1iaXRtYXAtZGF0YS11cmwtd29ya2VyLUlKcEM3Z19iLmpzLm1hcAo=";
48127
- const decodeBase64 = (base64) => Uint8Array.from(atob(base64), (c2) => c2.charCodeAt(0));
48128
- const blob = typeof window !== "undefined" && window.Blob && new Blob([decodeBase64(encodedJs)], { type: "text/javascript;charset=utf-8" });
48679
+ const decodeBase64$1 = (base64) => Uint8Array.from(atob(base64), (c2) => c2.charCodeAt(0));
48680
+ const blob = typeof window !== "undefined" && window.Blob && new Blob([decodeBase64$1(encodedJs)], { type: "text/javascript;charset=utf-8" });
48129
48681
  function WorkerWrapper(options) {
48130
48682
  let objURL;
48131
48683
  try {
@@ -49466,16 +50018,18 @@ SessionRecorder.prototype.initialize = function (pendo, PluginAPI) {
49466
50018
  // but ONLY for replay being enabled - all other values should be taken from the backend
49467
50019
  if (pendo._.isBoolean(snippetOverrideValue)) {
49468
50020
  isSessionReplayEnabled = snippetOverrideValue;
50021
+ if (!isSessionReplayEnabled) {
50022
+ this.api.log.info('Session Replay disabled via the snippet config');
50023
+ }
49469
50024
  }
49470
50025
  else {
49471
50026
  isSessionReplayEnabled = this.config.enabled;
49472
50027
  }
49473
50028
  if (!isSessionReplayEnabled) {
49474
- this.logStopReason('RECORDING_DISABLED');
49475
50029
  return;
49476
50030
  }
49477
50031
  if (configReader.get('excludeNonGuideAnalytics')) {
49478
- this.logStopReason('ANALYTICS_DISABLED');
50032
+ this.api.log.info('Session Replay is disabled because excludeNonGuideAnalytics is enabled');
49479
50033
  return;
49480
50034
  }
49481
50035
  var sessionIdKey = this.sessionIdKey = "".concat(SESSION_RECORDING_ID, ".").concat(pendo.apiKey);
@@ -50130,265 +50684,38 @@ function errorLogger(recorder) {
50130
50684
  return recorder;
50131
50685
  }
50132
50686
 
50133
- function funcToSource(fn, sourcemapArg) {
50134
- var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;
50135
- var regex = /(['"])__worker_loader_strict__(['"])/g;
50136
- var lines = [];
50137
-
50138
- // instead of extracting the function source code, just return the function as if it's being evaluated
50139
- // by the caller.
50140
- var source = fn.toString();
50141
- source = source.replace(regex, '$1use strict$2');
50142
- lines.push('(' + source + ')()');
50143
- if (sourcemap) {
50144
- lines.push('\/\/# sourceMappingURL=' + sourcemap + '\n');
50687
+ function decodeBase64(base64, enableUnicode) {
50688
+ var binaryString = atob(base64);
50689
+ if (enableUnicode) {
50690
+ var binaryView = new Uint8Array(binaryString.length);
50691
+ for (var i = 0, n = binaryString.length; i < n; ++i) {
50692
+ binaryView[i] = binaryString.charCodeAt(i);
50693
+ }
50694
+ const decoder = new TextDecoder("utf-16le");
50695
+ return decoder.decode(new Uint16Array(binaryView.buffer));
50145
50696
  }
50146
- return lines;
50697
+ return binaryString;
50147
50698
  }
50148
50699
 
50149
- function createURL(fn, sourcemapArg) {
50150
- var lines = funcToSource(fn, sourcemapArg);
50151
- var blob = new Blob(lines, { type: 'application/javascript' });
50700
+ function createURL(base64, sourcemapArg, enableUnicodeArg) {
50701
+ var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;
50702
+ var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;
50703
+ var source = decodeBase64(base64, enableUnicode);
50704
+ var start = source.indexOf('\n', 10) + 1;
50705
+ var body = source.substring(start) + (sourcemap ? '\/\/# sourceMappingURL=' + sourcemap : '');
50706
+ var blob = new Blob([body], { type: 'application/javascript' });
50152
50707
  return URL.createObjectURL(blob);
50153
50708
  }
50154
50709
 
50155
- function createInlineWorkerFactory(fn, sourcemapArg) {
50710
+ function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
50156
50711
  var url;
50157
50712
  return function WorkerFactory(options) {
50158
- url = url || createURL(fn, sourcemapArg);
50713
+ url = url || createURL(base64, sourcemapArg, enableUnicodeArg);
50159
50714
  return new Worker(url, options);
50160
50715
  };
50161
50716
  }
50162
50717
 
50163
- var WorkerFactory = /*#__PURE__*/createInlineWorkerFactory(/* rollup-plugin-web-worker-loader */function () {
50164
- ((function (exports) {
50165
- '__worker_loader_strict__';
50166
-
50167
- var b64 = (function() {
50168
-
50169
- var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'.split('');
50170
-
50171
- return {
50172
- 'uint8ToBase64': uint8ToBase64
50173
- };
50174
-
50175
- function uint8ToBase64(uint8) {
50176
- var i,
50177
- extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
50178
- output = '',
50179
- temp, length;
50180
-
50181
- function tripletToBase64(num) {
50182
- return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
50183
- }
50184
-
50185
- // go through the array every three bytes, we'll deal with trailing stuff later
50186
- for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
50187
- temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);
50188
- output += tripletToBase64(temp);
50189
- }
50190
-
50191
- // pad the end with zeros, but make sure to not forget the extra bytes
50192
- //eslint-disable-next-line default-case
50193
- switch (extraBytes) {
50194
- case 1:
50195
- temp = uint8[uint8.length - 1];
50196
- output += lookup[temp >> 2];
50197
- output += lookup[(temp << 4) & 0x3F];
50198
- break;
50199
- case 2:
50200
- temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]);
50201
- output += lookup[temp >> 10];
50202
- output += lookup[(temp >> 4) & 0x3F];
50203
- output += lookup[(temp << 2) & 0x3F];
50204
- break;
50205
- }
50206
-
50207
- return output;
50208
- }
50209
- })();
50210
-
50211
- function getDefaultExportFromCjs (x) {
50212
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
50213
- }
50214
-
50215
- var deflate_min = {exports: {}};
50216
-
50217
- /*
50218
- * @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License
50219
- */
50220
-
50221
- (function (module) {
50222
- (function() {var n=void 0,w=!0,aa=this;function ba(f,d){var c=f.split("."),e=aa;!(c[0]in e)&&e.execScript&&e.execScript("var "+c[0]);for(var b;c.length&&(b=c.shift());)!c.length&&d!==n?e[b]=d:e=e[b]?e[b]:e[b]={};}var C="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array;function K(f,d){this.index="number"===typeof d?d:0;this.e=0;this.buffer=f instanceof(C?Uint8Array:Array)?f:new (C?Uint8Array:Array)(32768);if(2*this.buffer.length<=this.index)throw Error("invalid index");this.buffer.length<=this.index&&ca(this);}function ca(f){var d=f.buffer,c,e=d.length,b=new (C?Uint8Array:Array)(e<<1);if(C)b.set(d);else for(c=0;c<e;++c)b[c]=d[c];return f.buffer=b}
50223
- K.prototype.b=function(f,d,c){var e=this.buffer,b=this.index,a=this.e,g=e[b],m;c&&1<d&&(f=8<d?(L[f&255]<<24|L[f>>>8&255]<<16|L[f>>>16&255]<<8|L[f>>>24&255])>>32-d:L[f]>>8-d);if(8>d+a)g=g<<d|f,a+=d;else for(m=0;m<d;++m)g=g<<1|f>>d-m-1&1,8===++a&&(a=0,e[b++]=L[g],g=0,b===e.length&&(e=ca(this)));e[b]=g;this.buffer=e;this.e=a;this.index=b;};K.prototype.finish=function(){var f=this.buffer,d=this.index,c;0<this.e&&(f[d]<<=8-this.e,f[d]=L[f[d]],d++);C?c=f.subarray(0,d):(f.length=d,c=f);return c};
50224
- var da=new (C?Uint8Array:Array)(256),M;for(M=0;256>M;++M){for(var N=M,S=N,ea=7,N=N>>>1;N;N>>>=1)S<<=1,S|=N&1,--ea;da[M]=(S<<ea&255)>>>0;}var L=da;function ia(f){this.buffer=new (C?Uint16Array:Array)(2*f);this.length=0;}ia.prototype.getParent=function(f){return 2*((f-2)/4|0)};ia.prototype.push=function(f,d){var c,e,b=this.buffer,a;c=this.length;b[this.length++]=d;for(b[this.length++]=f;0<c;)if(e=this.getParent(c),b[c]>b[e])a=b[c],b[c]=b[e],b[e]=a,a=b[c+1],b[c+1]=b[e+1],b[e+1]=a,c=e;else break;return this.length};
50225
- ia.prototype.pop=function(){var f,d,c=this.buffer,e,b,a;d=c[0];f=c[1];this.length-=2;c[0]=c[this.length];c[1]=c[this.length+1];for(a=0;;){b=2*a+2;if(b>=this.length)break;b+2<this.length&&c[b+2]>c[b]&&(b+=2);if(c[b]>c[a])e=c[a],c[a]=c[b],c[b]=e,e=c[a+1],c[a+1]=c[b+1],c[b+1]=e;else break;a=b;}return {index:f,value:d,length:this.length}};function ka(f,d){this.d=la;this.i=0;this.input=C&&f instanceof Array?new Uint8Array(f):f;this.c=0;d&&(d.lazy&&(this.i=d.lazy),"number"===typeof d.compressionType&&(this.d=d.compressionType),d.outputBuffer&&(this.a=C&&d.outputBuffer instanceof Array?new Uint8Array(d.outputBuffer):d.outputBuffer),"number"===typeof d.outputIndex&&(this.c=d.outputIndex));this.a||(this.a=new (C?Uint8Array:Array)(32768));}var la=2,na={NONE:0,h:1,g:la,n:3},T=[],U;
50226
- for(U=0;288>U;U++)switch(w){case 143>=U:T.push([U+48,8]);break;case 255>=U:T.push([U-144+400,9]);break;case 279>=U:T.push([U-256+0,7]);break;case 287>=U:T.push([U-280+192,8]);break;default:throw "invalid literal: "+U;}
50227
- ka.prototype.f=function(){var f,d,c,e,b=this.input;switch(this.d){case 0:c=0;for(e=b.length;c<e;){d=C?b.subarray(c,c+65535):b.slice(c,c+65535);c+=d.length;var a=d,g=c===e,m=n,k=n,p=n,t=n,u=n,l=this.a,h=this.c;if(C){for(l=new Uint8Array(this.a.buffer);l.length<=h+a.length+5;)l=new Uint8Array(l.length<<1);l.set(this.a);}m=g?1:0;l[h++]=m|0;k=a.length;p=~k+65536&65535;l[h++]=k&255;l[h++]=k>>>8&255;l[h++]=p&255;l[h++]=p>>>8&255;if(C)l.set(a,h),h+=a.length,l=l.subarray(0,h);else {t=0;for(u=a.length;t<u;++t)l[h++]=
50228
- a[t];l.length=h;}this.c=h;this.a=l;}break;case 1:var q=new K(C?new Uint8Array(this.a.buffer):this.a,this.c);q.b(1,1,w);q.b(1,2,w);var s=oa(this,b),x,fa,z;x=0;for(fa=s.length;x<fa;x++)if(z=s[x],K.prototype.b.apply(q,T[z]),256<z)q.b(s[++x],s[++x],w),q.b(s[++x],5),q.b(s[++x],s[++x],w);else if(256===z)break;this.a=q.finish();this.c=this.a.length;break;case la:var B=new K(C?new Uint8Array(this.a.buffer):this.a,this.c),ta,J,O,P,Q,La=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],X,ua,Y,va,ga,ja=Array(19),
50229
- wa,R,ha,y,xa;ta=la;B.b(1,1,w);B.b(ta,2,w);J=oa(this,b);X=pa(this.m,15);ua=qa(X);Y=pa(this.l,7);va=qa(Y);for(O=286;257<O&&0===X[O-1];O--);for(P=30;1<P&&0===Y[P-1];P--);var ya=O,za=P,F=new (C?Uint32Array:Array)(ya+za),r,G,v,Z,E=new (C?Uint32Array:Array)(316),D,A,H=new (C?Uint8Array:Array)(19);for(r=G=0;r<ya;r++)F[G++]=X[r];for(r=0;r<za;r++)F[G++]=Y[r];if(!C){r=0;for(Z=H.length;r<Z;++r)H[r]=0;}r=D=0;for(Z=F.length;r<Z;r+=G){for(G=1;r+G<Z&&F[r+G]===F[r];++G);v=G;if(0===F[r])if(3>v)for(;0<v--;)E[D++]=0,
50230
- H[0]++;else for(;0<v;)A=138>v?v:138,A>v-3&&A<v&&(A=v-3),10>=A?(E[D++]=17,E[D++]=A-3,H[17]++):(E[D++]=18,E[D++]=A-11,H[18]++),v-=A;else if(E[D++]=F[r],H[F[r]]++,v--,3>v)for(;0<v--;)E[D++]=F[r],H[F[r]]++;else for(;0<v;)A=6>v?v:6,A>v-3&&A<v&&(A=v-3),E[D++]=16,E[D++]=A-3,H[16]++,v-=A;}f=C?E.subarray(0,D):E.slice(0,D);ga=pa(H,7);for(y=0;19>y;y++)ja[y]=ga[La[y]];for(Q=19;4<Q&&0===ja[Q-1];Q--);wa=qa(ga);B.b(O-257,5,w);B.b(P-1,5,w);B.b(Q-4,4,w);for(y=0;y<Q;y++)B.b(ja[y],3,w);y=0;for(xa=f.length;y<xa;y++)if(R=
50231
- f[y],B.b(wa[R],ga[R],w),16<=R){y++;switch(R){case 16:ha=2;break;case 17:ha=3;break;case 18:ha=7;break;default:throw "invalid code: "+R;}B.b(f[y],ha,w);}var Aa=[ua,X],Ba=[va,Y],I,Ca,$,ma,Da,Ea,Fa,Ga;Da=Aa[0];Ea=Aa[1];Fa=Ba[0];Ga=Ba[1];I=0;for(Ca=J.length;I<Ca;++I)if($=J[I],B.b(Da[$],Ea[$],w),256<$)B.b(J[++I],J[++I],w),ma=J[++I],B.b(Fa[ma],Ga[ma],w),B.b(J[++I],J[++I],w);else if(256===$)break;this.a=B.finish();this.c=this.a.length;break;default:throw "invalid compression type";}return this.a};
50232
- function ra(f,d){this.length=f;this.k=d;}
50233
- var sa=function(){function f(b){switch(w){case 3===b:return [257,b-3,0];case 4===b:return [258,b-4,0];case 5===b:return [259,b-5,0];case 6===b:return [260,b-6,0];case 7===b:return [261,b-7,0];case 8===b:return [262,b-8,0];case 9===b:return [263,b-9,0];case 10===b:return [264,b-10,0];case 12>=b:return [265,b-11,1];case 14>=b:return [266,b-13,1];case 16>=b:return [267,b-15,1];case 18>=b:return [268,b-17,1];case 22>=b:return [269,b-19,2];case 26>=b:return [270,b-23,2];case 30>=b:return [271,b-27,2];case 34>=b:return [272,
50234
- b-31,2];case 42>=b:return [273,b-35,3];case 50>=b:return [274,b-43,3];case 58>=b:return [275,b-51,3];case 66>=b:return [276,b-59,3];case 82>=b:return [277,b-67,4];case 98>=b:return [278,b-83,4];case 114>=b:return [279,b-99,4];case 130>=b:return [280,b-115,4];case 162>=b:return [281,b-131,5];case 194>=b:return [282,b-163,5];case 226>=b:return [283,b-195,5];case 257>=b:return [284,b-227,5];case 258===b:return [285,b-258,0];default:throw "invalid length: "+b;}}var d=[],c,e;for(c=3;258>=c;c++)e=f(c),d[c]=e[2]<<24|
50235
- e[1]<<16|e[0];return d}(),Ha=C?new Uint32Array(sa):sa;
50236
- function oa(f,d){function c(b,c){var a=b.k,d=[],e=0,f;f=Ha[b.length];d[e++]=f&65535;d[e++]=f>>16&255;d[e++]=f>>24;var g;switch(w){case 1===a:g=[0,a-1,0];break;case 2===a:g=[1,a-2,0];break;case 3===a:g=[2,a-3,0];break;case 4===a:g=[3,a-4,0];break;case 6>=a:g=[4,a-5,1];break;case 8>=a:g=[5,a-7,1];break;case 12>=a:g=[6,a-9,2];break;case 16>=a:g=[7,a-13,2];break;case 24>=a:g=[8,a-17,3];break;case 32>=a:g=[9,a-25,3];break;case 48>=a:g=[10,a-33,4];break;case 64>=a:g=[11,a-49,4];break;case 96>=a:g=[12,a-
50237
- 65,5];break;case 128>=a:g=[13,a-97,5];break;case 192>=a:g=[14,a-129,6];break;case 256>=a:g=[15,a-193,6];break;case 384>=a:g=[16,a-257,7];break;case 512>=a:g=[17,a-385,7];break;case 768>=a:g=[18,a-513,8];break;case 1024>=a:g=[19,a-769,8];break;case 1536>=a:g=[20,a-1025,9];break;case 2048>=a:g=[21,a-1537,9];break;case 3072>=a:g=[22,a-2049,10];break;case 4096>=a:g=[23,a-3073,10];break;case 6144>=a:g=[24,a-4097,11];break;case 8192>=a:g=[25,a-6145,11];break;case 12288>=a:g=[26,a-8193,12];break;case 16384>=
50238
- a:g=[27,a-12289,12];break;case 24576>=a:g=[28,a-16385,13];break;case 32768>=a:g=[29,a-24577,13];break;default:throw "invalid distance";}f=g;d[e++]=f[0];d[e++]=f[1];d[e++]=f[2];var k,m;k=0;for(m=d.length;k<m;++k)l[h++]=d[k];s[d[0]]++;x[d[3]]++;q=b.length+c-1;u=null;}var e,b,a,g,m,k={},p,t,u,l=C?new Uint16Array(2*d.length):[],h=0,q=0,s=new (C?Uint32Array:Array)(286),x=new (C?Uint32Array:Array)(30),fa=f.i,z;if(!C){for(a=0;285>=a;)s[a++]=0;for(a=0;29>=a;)x[a++]=0;}s[256]=1;e=0;for(b=d.length;e<b;++e){a=
50239
- m=0;for(g=3;a<g&&e+a!==b;++a)m=m<<8|d[e+a];k[m]===n&&(k[m]=[]);p=k[m];if(!(0<q--)){for(;0<p.length&&32768<e-p[0];)p.shift();if(e+3>=b){u&&c(u,-1);a=0;for(g=b-e;a<g;++a)z=d[e+a],l[h++]=z,++s[z];break}0<p.length?(t=Ia(d,e,p),u?u.length<t.length?(z=d[e-1],l[h++]=z,++s[z],c(t,0)):c(u,-1):t.length<fa?u=t:c(t,0)):u?c(u,-1):(z=d[e],l[h++]=z,++s[z]);}p.push(e);}l[h++]=256;s[256]++;f.m=s;f.l=x;return C?l.subarray(0,h):l}
50240
- function Ia(f,d,c){var e,b,a=0,g,m,k,p,t=f.length;m=0;p=c.length;a:for(;m<p;m++){e=c[p-m-1];g=3;if(3<a){for(k=a;3<k;k--)if(f[e+k-1]!==f[d+k-1])continue a;g=a;}for(;258>g&&d+g<t&&f[e+g]===f[d+g];)++g;g>a&&(b=e,a=g);if(258===g)break}return new ra(a,d-b)}
50241
- function pa(f,d){var c=f.length,e=new ia(572),b=new (C?Uint8Array:Array)(c),a,g,m,k,p;if(!C)for(k=0;k<c;k++)b[k]=0;for(k=0;k<c;++k)0<f[k]&&e.push(k,f[k]);a=Array(e.length/2);g=new (C?Uint32Array:Array)(e.length/2);if(1===a.length)return b[e.pop().index]=1,b;k=0;for(p=e.length/2;k<p;++k)a[k]=e.pop(),g[k]=a[k].value;m=Ja(g,g.length,d);k=0;for(p=a.length;k<p;++k)b[a[k].index]=m[k];return b}
50242
- function Ja(f,d,c){function e(a){var b=k[a][p[a]];b===d?(e(a+1),e(a+1)):--g[b];++p[a];}var b=new (C?Uint16Array:Array)(c),a=new (C?Uint8Array:Array)(c),g=new (C?Uint8Array:Array)(d),m=Array(c),k=Array(c),p=Array(c),t=(1<<c)-d,u=1<<c-1,l,h,q,s,x;b[c-1]=d;for(h=0;h<c;++h)t<u?a[h]=0:(a[h]=1,t-=u),t<<=1,b[c-2-h]=(b[c-1-h]/2|0)+d;b[0]=a[0];m[0]=Array(b[0]);k[0]=Array(b[0]);for(h=1;h<c;++h)b[h]>2*b[h-1]+a[h]&&(b[h]=2*b[h-1]+a[h]),m[h]=Array(b[h]),k[h]=Array(b[h]);for(l=0;l<d;++l)g[l]=c;for(q=0;q<b[c-1];++q)m[c-
50243
- 1][q]=f[q],k[c-1][q]=q;for(l=0;l<c;++l)p[l]=0;1===a[c-1]&&(--g[0],++p[c-1]);for(h=c-2;0<=h;--h){s=l=0;x=p[h+1];for(q=0;q<b[h];q++)s=m[h+1][x]+m[h+1][x+1],s>f[l]?(m[h][q]=s,k[h][q]=d,x+=2):(m[h][q]=f[l],k[h][q]=l,++l);p[h]=0;1===a[h]&&e(h);}return g}
50244
- function qa(f){var d=new (C?Uint16Array:Array)(f.length),c=[],e=[],b=0,a,g,m,k;a=0;for(g=f.length;a<g;a++)c[f[a]]=(c[f[a]]|0)+1;a=1;for(g=16;a<=g;a++)e[a]=b,b+=c[a]|0,b<<=1;a=0;for(g=f.length;a<g;a++){b=e[f[a]];e[f[a]]+=1;m=d[a]=0;for(k=f[a];m<k;m++)d[a]=d[a]<<1|b&1,b>>>=1;}return d}function Ka(f,d){this.input=f;this.a=new (C?Uint8Array:Array)(32768);this.d=V.g;var c={},e;if((d||!(d={}))&&"number"===typeof d.compressionType)this.d=d.compressionType;for(e in d)c[e]=d[e];c.outputBuffer=this.a;this.j=new ka(this.input,c);}var V=na;
50245
- Ka.prototype.f=function(){var f,d,c,e,b,a,g=0;a=this.a;switch(8){case 8:f=Math.LOG2E*Math.log(32768)-8;break;default:throw Error("invalid compression method");}d=f<<4|8;a[g++]=d;switch(8){case 8:switch(this.d){case V.NONE:e=0;break;case V.h:e=1;break;case V.g:e=2;break;default:throw Error("unsupported compression type");}break;default:throw Error("invalid compression method");}c=e<<6|0;a[g++]=c|31-(256*d+c)%31;var m=this.input;if("string"===typeof m){var k=m.split(""),p,t;p=0;for(t=k.length;p<t;p++)k[p]=
50246
- (k[p].charCodeAt(0)&255)>>>0;m=k;}for(var u=1,l=0,h=m.length,q,s=0;0<h;){q=1024<h?1024:h;h-=q;do u+=m[s++],l+=u;while(--q);u%=65521;l%=65521;}b=(l<<16|u)>>>0;this.j.c=g;a=this.j.f();g=a.length;C&&(a=new Uint8Array(a.buffer),a.length<=g+4&&(this.a=new Uint8Array(a.length+4),this.a.set(a),a=this.a),a=a.subarray(0,g+4));a[g++]=b>>24&255;a[g++]=b>>16&255;a[g++]=b>>8&255;a[g++]=b&255;return a};ba("Zlib.Deflate",Ka);ba("Zlib.Deflate.compress",function(f,d){return (new Ka(f,d)).f()});ba("Zlib.Deflate.prototype.compress",Ka.prototype.f);var Ma={NONE:V.NONE,FIXED:V.h,DYNAMIC:V.g},Na,Oa,W,Pa;if(Object.keys)Na=Object.keys(Ma);else for(Oa in Na=[],W=0,Ma)Na[W++]=Oa;W=0;for(Pa=Na.length;W<Pa;++W)Oa=Na[W],ba("Zlib.Deflate.CompressionType."+Oa,Ma[Oa]);}).call(module.exports);
50247
- } (deflate_min));
50248
-
50249
- var deflate_minExports = deflate_min.exports;
50250
- var ZLibDeflate = /*@__PURE__*/getDefaultExportFromCjs(deflate_minExports);
50251
-
50252
- function toUTF8Array(str) {
50253
- var utf8 = [];
50254
- for (var i = 0; i < str.length; i++) {
50255
- var charcode = str.charCodeAt(i);
50256
- if (charcode < 0x80)
50257
- utf8.push(charcode);
50258
- else if (charcode < 0x800) {
50259
- utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f));
50260
- }
50261
- else if (charcode < 0xd800 || charcode >= 0xe000) {
50262
- utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));
50263
- }
50264
- else {
50265
- // surrogate pair
50266
- i++;
50267
- // UTF-16 encodes 0x10000-0x10FFFF by
50268
- // subtracting 0x10000 and splitting the
50269
- // 20 bits of 0x0-0xFFFFF into two halves
50270
- charcode = 0x10000 + (((charcode & 0x3ff) << 10) |
50271
- (str.charCodeAt(i) & 0x3ff));
50272
- utf8.push(0xf0 | (charcode >> 18), 0x80 | ((charcode >> 12) & 0x3f), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));
50273
- }
50274
- }
50275
- return utf8;
50276
- }
50277
-
50278
- var Zlib = {
50279
- 'Deflate': ZLibDeflate.Zlib.Deflate
50280
- };
50281
- var Encoding = {
50282
- 'base64Url': 'base64url',
50283
- 'binary': 'binary'
50284
- };
50285
- function compress(json_obj, encoding) {
50286
- if (!encoding) {
50287
- encoding = Encoding.base64Url;
50288
- }
50289
- /* -- This is ZLIB */
50290
- var compressData = toUTF8Array(typeof json_obj === 'string' ? json_obj : JSON.stringify(json_obj));
50291
- var deflate = new Zlib.Deflate(compressData);
50292
- var compressedBytes = deflate.compress();
50293
- if (encoding === Encoding.base64Url) {
50294
- return b64.uint8ToBase64(compressedBytes);
50295
- }
50296
- else {
50297
- return compressedBytes;
50298
- }
50299
- }
50300
-
50301
- var ONE_HUNDRED_MB_IN_BYTES = 100 * 1024 * 1024;
50302
- function matchHostedResources(recordingEvent, stringifiedRecordingPayload) {
50303
- var fontURLRegex = /https:\/\/[^\s]+?\.(woff|woff2|ttf|otf|eot)\b/g;
50304
- var hostedResources = stringifiedRecordingPayload.match(fontURLRegex);
50305
- return {
50306
- 'type': 'recording',
50307
- 'visitorId': recordingEvent.visitorId,
50308
- 'accountId': recordingEvent.accountId,
50309
- 'keyFrame': false,
50310
- 'lastKeyFrame': recordingEvent.lastKeyFrame,
50311
- 'recordingId': recordingEvent.recordingId,
50312
- 'recordingSessionId': recordingEvent.recordingSessionId,
50313
- 'url': recordingEvent.url,
50314
- 'subType': 'hostedResources',
50315
- 'recordingPayload': [],
50316
- 'recordingPayloadMetadata': [],
50317
- 'sequence': 0,
50318
- 'recordingPayloadCount': 0,
50319
- 'hostedResources': hostedResources || []
50320
- };
50321
- }
50322
- // keep in mind changes here may need addressing in the extension worker proxy as well
50323
- self.onmessage = function (e) {
50324
- try {
50325
- if (e.data.url && e.data.payload) {
50326
- var _a = e.data, url = _a.url, payload = _a.payload, shouldCacheResources = _a.shouldCacheResources;
50327
- var sequence_1 = payload.sequence;
50328
- var stringifiedRecordingPayload = JSON.stringify(payload.recordingPayload);
50329
- // calculate and post back the recording payload size before the payload is compressed
50330
- var recordingPayloadSize = new TextEncoder().encode(stringifiedRecordingPayload).length;
50331
- var exceedsPayloadSizeLimit = recordingPayloadSize >= ONE_HUNDRED_MB_IN_BYTES;
50332
- postMessage({
50333
- 'type': 'recordingPayloadSize',
50334
- 'recordingPayloadSize': recordingPayloadSize,
50335
- 'exceedsPayloadSizeLimit': exceedsPayloadSizeLimit
50336
- });
50337
- // don't attempt to send the payload if it exceeds the allowed limit
50338
- if (exceedsPayloadSizeLimit)
50339
- return;
50340
- if (shouldCacheResources) {
50341
- var hostedResourcesEvent = matchHostedResources(payload, stringifiedRecordingPayload);
50342
- if (hostedResourcesEvent.hostedResources.length) {
50343
- postMessage({
50344
- 'type': 'hostedResources',
50345
- 'hostedResourcesEvent': hostedResourcesEvent
50346
- });
50347
- }
50348
- }
50349
- payload.recordingSize = recordingPayloadSize;
50350
- var body = compress(payload, 'binary');
50351
- // we want to calculate ct (current time) as close as we can to the actual POST request
50352
- // so that it's as accurate as possible
50353
- url = "".concat(url, "&ct=").concat(new Date().getTime());
50354
- fetch(url, {
50355
- 'method': 'POST',
50356
- 'body': body
50357
- }).then(function (response) {
50358
- if (response.status < 200 || response.status >= 300) {
50359
- postMessage({
50360
- 'error': new Error("received status code ".concat(response.status, ": ").concat(response.statusText)),
50361
- 'status': response.status,
50362
- sequence: sequence_1
50363
- });
50364
- }
50365
- else {
50366
- postMessage({
50367
- sequence: sequence_1
50368
- });
50369
- }
50370
- })['catch'](function (e) {
50371
- postMessage({
50372
- 'error': e,
50373
- sequence: sequence_1
50374
- });
50375
- });
50376
- }
50377
- }
50378
- catch (e) {
50379
- postMessage({
50380
- 'error': e
50381
- });
50382
- }
50383
- };
50384
-
50385
- exports.matchHostedResources = matchHostedResources;
50386
-
50387
- return exports;
50388
-
50389
- }))({});
50390
-
50391
- }, null);
50718
+ var WorkerFactory = /*#__PURE__*/createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICB2YXIgYjY0ID0gKGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgbG9va3VwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8nLnNwbGl0KCcnKTsKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ3VpbnQ4VG9CYXNlNjQnOiB1aW50OFRvQmFzZTY0CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gdWludDhUb0Jhc2U2NCh1aW50OCkgewogICAgICAgICAgICB2YXIgaSwKICAgICAgICAgICAgICAgIGV4dHJhQnl0ZXMgPSB1aW50OC5sZW5ndGggJSAzLCAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlcwogICAgICAgICAgICAgICAgb3V0cHV0ID0gJycsCiAgICAgICAgICAgICAgICB0ZW1wLCBsZW5ndGg7CgogICAgICAgICAgICBmdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQobnVtKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICsgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICsgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gKyBsb29rdXBbbnVtICYgMHgzRl07CiAgICAgICAgICAgIH0KCiAgICAJCS8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXIKICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdWludDgubGVuZ3RoIC0gZXh0cmFCeXRlczsgaSA8IGxlbmd0aDsgaSArPSAzKSB7CiAgICAgICAgICAgICAgICB0ZW1wID0gKHVpbnQ4W2ldIDw8IDE2KSArICh1aW50OFtpICsgMV0gPDwgOCkgKyAodWludDhbaSArIDJdKTsKICAgICAgICAgICAgICAgIG91dHB1dCArPSB0cmlwbGV0VG9CYXNlNjQodGVtcCk7CiAgICAgICAgICAgIH0KCiAgICAJCS8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXMKICAgICAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVmYXVsdC1jYXNlCiAgICAgICAgICAgIHN3aXRjaCAoZXh0cmFCeXRlcykgewogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICB0ZW1wID0gdWludDhbdWludDgubGVuZ3RoIC0gMV07CiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gbG9va3VwW3RlbXAgPj4gMl07CiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gbG9va3VwWyh0ZW1wIDw8IDQpICYgMHgzRl07CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgdGVtcCA9ICh1aW50OFt1aW50OC5sZW5ndGggLSAyXSA8PCA4KSArICh1aW50OFt1aW50OC5sZW5ndGggLSAxXSk7CiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gbG9va3VwW3RlbXAgPj4gMTBdOwogICAgICAgICAgICAgICAgb3V0cHV0ICs9IGxvb2t1cFsodGVtcCA+PiA0KSAmIDB4M0ZdOwogICAgICAgICAgICAgICAgb3V0cHV0ICs9IGxvb2t1cFsodGVtcCA8PCAyKSAmIDB4M0ZdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7CiAgICAgICAgfQogICAgfSkoKTsKCiAgICBmdW5jdGlvbiBnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyAoeCkgewogICAgCXJldHVybiB4ICYmIHguX19lc01vZHVsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ2RlZmF1bHQnKSA/IHhbJ2RlZmF1bHQnXSA6IHg7CiAgICB9CgogICAgdmFyIGRlZmxhdGVfbWluID0ge2V4cG9ydHM6IHt9fTsKCiAgICAvKgogICAgICogQGxpY2Vuc2UgemxpYi5qcyAyMDEyIC0gaW1heWEgWyBodHRwczovL2dpdGh1Yi5jb20vaW1heWEvemxpYi5qcyBdIFRoZSBNSVQgTGljZW5zZQogICAgICovCgogICAgKGZ1bmN0aW9uIChtb2R1bGUpIHsKICAgIAkoZnVuY3Rpb24oKSB7dmFyIG49dm9pZCAwLHc9ITAsYWE9dGhpcztmdW5jdGlvbiBiYShmLGQpe3ZhciBjPWYuc3BsaXQoIi4iKSxlPWFhOyEoY1swXWluIGUpJiZlLmV4ZWNTY3JpcHQmJmUuZXhlY1NjcmlwdCgidmFyICIrY1swXSk7Zm9yKHZhciBiO2MubGVuZ3RoJiYoYj1jLnNoaWZ0KCkpOykhYy5sZW5ndGgmJmQhPT1uP2VbYl09ZDplPWVbYl0/ZVtiXTplW2JdPXt9O312YXIgQz0idW5kZWZpbmVkIiE9PXR5cGVvZiBVaW50OEFycmF5JiYidW5kZWZpbmVkIiE9PXR5cGVvZiBVaW50MTZBcnJheSYmInVuZGVmaW5lZCIhPT10eXBlb2YgVWludDMyQXJyYXk7ZnVuY3Rpb24gSyhmLGQpe3RoaXMuaW5kZXg9Im51bWJlciI9PT10eXBlb2YgZD9kOjA7dGhpcy5lPTA7dGhpcy5idWZmZXI9ZiBpbnN0YW5jZW9mKEM/VWludDhBcnJheTpBcnJheSk/ZjpuZXcgKEM/VWludDhBcnJheTpBcnJheSkoMzI3NjgpO2lmKDIqdGhpcy5idWZmZXIubGVuZ3RoPD10aGlzLmluZGV4KXRocm93IEVycm9yKCJpbnZhbGlkIGluZGV4Iik7dGhpcy5idWZmZXIubGVuZ3RoPD10aGlzLmluZGV4JiZjYSh0aGlzKTt9ZnVuY3Rpb24gY2EoZil7dmFyIGQ9Zi5idWZmZXIsYyxlPWQubGVuZ3RoLGI9bmV3IChDP1VpbnQ4QXJyYXk6QXJyYXkpKGU8PDEpO2lmKEMpYi5zZXQoZCk7ZWxzZSBmb3IoYz0wO2M8ZTsrK2MpYltjXT1kW2NdO3JldHVybiBmLmJ1ZmZlcj1ifQogICAgCUsucHJvdG90eXBlLmI9ZnVuY3Rpb24oZixkLGMpe3ZhciBlPXRoaXMuYnVmZmVyLGI9dGhpcy5pbmRleCxhPXRoaXMuZSxnPWVbYl0sbTtjJiYxPGQmJihmPTg8ZD8oTFtmJjI1NV08PDI0fExbZj4+PjgmMjU1XTw8MTZ8TFtmPj4+MTYmMjU1XTw8OHxMW2Y+Pj4yNCYyNTVdKT4+MzItZDpMW2ZdPj44LWQpO2lmKDg+ZCthKWc9Zzw8ZHxmLGErPWQ7ZWxzZSBmb3IobT0wO208ZDsrK20pZz1nPDwxfGY+PmQtbS0xJjEsOD09PSsrYSYmKGE9MCxlW2IrK109TFtnXSxnPTAsYj09PWUubGVuZ3RoJiYoZT1jYSh0aGlzKSkpO2VbYl09Zzt0aGlzLmJ1ZmZlcj1lO3RoaXMuZT1hO3RoaXMuaW5kZXg9Yjt9O0sucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3ZhciBmPXRoaXMuYnVmZmVyLGQ9dGhpcy5pbmRleCxjOzA8dGhpcy5lJiYoZltkXTw8PTgtdGhpcy5lLGZbZF09TFtmW2RdXSxkKyspO0M/Yz1mLnN1YmFycmF5KDAsZCk6KGYubGVuZ3RoPWQsYz1mKTtyZXR1cm4gY307CiAgICAJdmFyIGRhPW5ldyAoQz9VaW50OEFycmF5OkFycmF5KSgyNTYpLE07Zm9yKE09MDsyNTY+TTsrK00pe2Zvcih2YXIgTj1NLFM9TixlYT03LE49Tj4+PjE7TjtOPj4+PTEpUzw8PTEsU3w9TiYxLC0tZWE7ZGFbTV09KFM8PGVhJjI1NSk+Pj4wO312YXIgTD1kYTtmdW5jdGlvbiBpYShmKXt0aGlzLmJ1ZmZlcj1uZXcgKEM/VWludDE2QXJyYXk6QXJyYXkpKDIqZik7dGhpcy5sZW5ndGg9MDt9aWEucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbihmKXtyZXR1cm4gMiooKGYtMikvNHwwKX07aWEucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZixkKXt2YXIgYyxlLGI9dGhpcy5idWZmZXIsYTtjPXRoaXMubGVuZ3RoO2JbdGhpcy5sZW5ndGgrK109ZDtmb3IoYlt0aGlzLmxlbmd0aCsrXT1mOzA8YzspaWYoZT10aGlzLmdldFBhcmVudChjKSxiW2NdPmJbZV0pYT1iW2NdLGJbY109YltlXSxiW2VdPWEsYT1iW2MrMV0sYltjKzFdPWJbZSsxXSxiW2UrMV09YSxjPWU7ZWxzZSBicmVhaztyZXR1cm4gdGhpcy5sZW5ndGh9OwogICAgCWlhLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXt2YXIgZixkLGM9dGhpcy5idWZmZXIsZSxiLGE7ZD1jWzBdO2Y9Y1sxXTt0aGlzLmxlbmd0aC09MjtjWzBdPWNbdGhpcy5sZW5ndGhdO2NbMV09Y1t0aGlzLmxlbmd0aCsxXTtmb3IoYT0wOzspe2I9MiphKzI7aWYoYj49dGhpcy5sZW5ndGgpYnJlYWs7YisyPHRoaXMubGVuZ3RoJiZjW2IrMl0+Y1tiXSYmKGIrPTIpO2lmKGNbYl0+Y1thXSllPWNbYV0sY1thXT1jW2JdLGNbYl09ZSxlPWNbYSsxXSxjW2ErMV09Y1tiKzFdLGNbYisxXT1lO2Vsc2UgYnJlYWs7YT1iO31yZXR1cm4ge2luZGV4OmYsdmFsdWU6ZCxsZW5ndGg6dGhpcy5sZW5ndGh9fTtmdW5jdGlvbiBrYShmLGQpe3RoaXMuZD1sYTt0aGlzLmk9MDt0aGlzLmlucHV0PUMmJmYgaW5zdGFuY2VvZiBBcnJheT9uZXcgVWludDhBcnJheShmKTpmO3RoaXMuYz0wO2QmJihkLmxhenkmJih0aGlzLmk9ZC5sYXp5KSwibnVtYmVyIj09PXR5cGVvZiBkLmNvbXByZXNzaW9uVHlwZSYmKHRoaXMuZD1kLmNvbXByZXNzaW9uVHlwZSksZC5vdXRwdXRCdWZmZXImJih0aGlzLmE9QyYmZC5vdXRwdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheT9uZXcgVWludDhBcnJheShkLm91dHB1dEJ1ZmZlcik6ZC5vdXRwdXRCdWZmZXIpLCJudW1iZXIiPT09dHlwZW9mIGQub3V0cHV0SW5kZXgmJih0aGlzLmM9ZC5vdXRwdXRJbmRleCkpO3RoaXMuYXx8KHRoaXMuYT1uZXcgKEM/VWludDhBcnJheTpBcnJheSkoMzI3NjgpKTt9dmFyIGxhPTIsbmE9e05PTkU6MCxoOjEsZzpsYSxuOjN9LFQ9W10sVTsKICAgIAlmb3IoVT0wOzI4OD5VO1UrKylzd2l0Y2godyl7Y2FzZSAxNDM+PVU6VC5wdXNoKFtVKzQ4LDhdKTticmVhaztjYXNlIDI1NT49VTpULnB1c2goW1UtMTQ0KzQwMCw5XSk7YnJlYWs7Y2FzZSAyNzk+PVU6VC5wdXNoKFtVLTI1NiswLDddKTticmVhaztjYXNlIDI4Nz49VTpULnB1c2goW1UtMjgwKzE5Miw4XSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyAiaW52YWxpZCBsaXRlcmFsOiAiK1U7fQogICAgCWthLnByb3RvdHlwZS5mPWZ1bmN0aW9uKCl7dmFyIGYsZCxjLGUsYj10aGlzLmlucHV0O3N3aXRjaCh0aGlzLmQpe2Nhc2UgMDpjPTA7Zm9yKGU9Yi5sZW5ndGg7YzxlOyl7ZD1DP2Iuc3ViYXJyYXkoYyxjKzY1NTM1KTpiLnNsaWNlKGMsYys2NTUzNSk7Yys9ZC5sZW5ndGg7dmFyIGE9ZCxnPWM9PT1lLG09bixrPW4scD1uLHQ9bix1PW4sbD10aGlzLmEsaD10aGlzLmM7aWYoQyl7Zm9yKGw9bmV3IFVpbnQ4QXJyYXkodGhpcy5hLmJ1ZmZlcik7bC5sZW5ndGg8PWgrYS5sZW5ndGgrNTspbD1uZXcgVWludDhBcnJheShsLmxlbmd0aDw8MSk7bC5zZXQodGhpcy5hKTt9bT1nPzE6MDtsW2grK109bXwwO2s9YS5sZW5ndGg7cD1+ays2NTUzNiY2NTUzNTtsW2grK109ayYyNTU7bFtoKytdPWs+Pj44JjI1NTtsW2grK109cCYyNTU7bFtoKytdPXA+Pj44JjI1NTtpZihDKWwuc2V0KGEsaCksaCs9YS5sZW5ndGgsbD1sLnN1YmFycmF5KDAsaCk7ZWxzZSB7dD0wO2Zvcih1PWEubGVuZ3RoO3Q8dTsrK3QpbFtoKytdPQogICAgCWFbdF07bC5sZW5ndGg9aDt9dGhpcy5jPWg7dGhpcy5hPWw7fWJyZWFrO2Nhc2UgMTp2YXIgcT1uZXcgSyhDP25ldyBVaW50OEFycmF5KHRoaXMuYS5idWZmZXIpOnRoaXMuYSx0aGlzLmMpO3EuYigxLDEsdyk7cS5iKDEsMix3KTt2YXIgcz1vYSh0aGlzLGIpLHgsZmEsejt4PTA7Zm9yKGZhPXMubGVuZ3RoO3g8ZmE7eCsrKWlmKHo9c1t4XSxLLnByb3RvdHlwZS5iLmFwcGx5KHEsVFt6XSksMjU2PHopcS5iKHNbKyt4XSxzWysreF0sdykscS5iKHNbKyt4XSw1KSxxLmIoc1srK3hdLHNbKyt4XSx3KTtlbHNlIGlmKDI1Nj09PXopYnJlYWs7dGhpcy5hPXEuZmluaXNoKCk7dGhpcy5jPXRoaXMuYS5sZW5ndGg7YnJlYWs7Y2FzZSBsYTp2YXIgQj1uZXcgSyhDP25ldyBVaW50OEFycmF5KHRoaXMuYS5idWZmZXIpOnRoaXMuYSx0aGlzLmMpLHRhLEosTyxQLFEsTGE9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLFgsdWEsWSx2YSxnYSxqYT1BcnJheSgxOSksCiAgICAJd2EsUixoYSx5LHhhO3RhPWxhO0IuYigxLDEsdyk7Qi5iKHRhLDIsdyk7Sj1vYSh0aGlzLGIpO1g9cGEodGhpcy5tLDE1KTt1YT1xYShYKTtZPXBhKHRoaXMubCw3KTt2YT1xYShZKTtmb3IoTz0yODY7MjU3PE8mJjA9PT1YW08tMV07Ty0tKTtmb3IoUD0zMDsxPFAmJjA9PT1ZW1AtMV07UC0tKTt2YXIgeWE9Tyx6YT1QLEY9bmV3IChDP1VpbnQzMkFycmF5OkFycmF5KSh5YSt6YSkscixHLHYsWixFPW5ldyAoQz9VaW50MzJBcnJheTpBcnJheSkoMzE2KSxELEEsSD1uZXcgKEM/VWludDhBcnJheTpBcnJheSkoMTkpO2ZvcihyPUc9MDtyPHlhO3IrKylGW0crK109WFtyXTtmb3Iocj0wO3I8emE7cisrKUZbRysrXT1ZW3JdO2lmKCFDKXtyPTA7Zm9yKFo9SC5sZW5ndGg7cjxaOysrcilIW3JdPTA7fXI9RD0wO2ZvcihaPUYubGVuZ3RoO3I8WjtyKz1HKXtmb3IoRz0xO3IrRzxaJiZGW3IrR109PT1GW3JdOysrRyk7dj1HO2lmKDA9PT1GW3JdKWlmKDM+dilmb3IoOzA8di0tOylFW0QrK109MCwKICAgIAlIWzBdKys7ZWxzZSBmb3IoOzA8djspQT0xMzg+dj92OjEzOCxBPnYtMyYmQTx2JiYoQT12LTMpLDEwPj1BPyhFW0QrK109MTcsRVtEKytdPUEtMyxIWzE3XSsrKTooRVtEKytdPTE4LEVbRCsrXT1BLTExLEhbMThdKyspLHYtPUE7ZWxzZSBpZihFW0QrK109RltyXSxIW0Zbcl1dKyssdi0tLDM+dilmb3IoOzA8di0tOylFW0QrK109RltyXSxIW0Zbcl1dKys7ZWxzZSBmb3IoOzA8djspQT02PnY/djo2LEE+di0zJiZBPHYmJihBPXYtMyksRVtEKytdPTE2LEVbRCsrXT1BLTMsSFsxNl0rKyx2LT1BO31mPUM/RS5zdWJhcnJheSgwLEQpOkUuc2xpY2UoMCxEKTtnYT1wYShILDcpO2Zvcih5PTA7MTk+eTt5KyspamFbeV09Z2FbTGFbeV1dO2ZvcihRPTE5OzQ8USYmMD09PWphW1EtMV07US0tKTt3YT1xYShnYSk7Qi5iKE8tMjU3LDUsdyk7Qi5iKFAtMSw1LHcpO0IuYihRLTQsNCx3KTtmb3IoeT0wO3k8UTt5KyspQi5iKGphW3ldLDMsdyk7eT0wO2Zvcih4YT1mLmxlbmd0aDt5PHhhO3krKylpZihSPQogICAgCWZbeV0sQi5iKHdhW1JdLGdhW1JdLHcpLDE2PD1SKXt5Kys7c3dpdGNoKFIpe2Nhc2UgMTY6aGE9MjticmVhaztjYXNlIDE3OmhhPTM7YnJlYWs7Y2FzZSAxODpoYT03O2JyZWFrO2RlZmF1bHQ6dGhyb3cgImludmFsaWQgY29kZTogIitSO31CLmIoZlt5XSxoYSx3KTt9dmFyIEFhPVt1YSxYXSxCYT1bdmEsWV0sSSxDYSwkLG1hLERhLEVhLEZhLEdhO0RhPUFhWzBdO0VhPUFhWzFdO0ZhPUJhWzBdO0dhPUJhWzFdO0k9MDtmb3IoQ2E9Si5sZW5ndGg7STxDYTsrK0kpaWYoJD1KW0ldLEIuYihEYVskXSxFYVskXSx3KSwyNTY8JClCLmIoSlsrK0ldLEpbKytJXSx3KSxtYT1KWysrSV0sQi5iKEZhW21hXSxHYVttYV0sdyksQi5iKEpbKytJXSxKWysrSV0sdyk7ZWxzZSBpZigyNTY9PT0kKWJyZWFrO3RoaXMuYT1CLmZpbmlzaCgpO3RoaXMuYz10aGlzLmEubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3cgImludmFsaWQgY29tcHJlc3Npb24gdHlwZSI7fXJldHVybiB0aGlzLmF9OwogICAgCWZ1bmN0aW9uIHJhKGYsZCl7dGhpcy5sZW5ndGg9Zjt0aGlzLms9ZDt9CiAgICAJdmFyIHNhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZihiKXtzd2l0Y2godyl7Y2FzZSAzPT09YjpyZXR1cm4gWzI1NyxiLTMsMF07Y2FzZSA0PT09YjpyZXR1cm4gWzI1OCxiLTQsMF07Y2FzZSA1PT09YjpyZXR1cm4gWzI1OSxiLTUsMF07Y2FzZSA2PT09YjpyZXR1cm4gWzI2MCxiLTYsMF07Y2FzZSA3PT09YjpyZXR1cm4gWzI2MSxiLTcsMF07Y2FzZSA4PT09YjpyZXR1cm4gWzI2MixiLTgsMF07Y2FzZSA5PT09YjpyZXR1cm4gWzI2MyxiLTksMF07Y2FzZSAxMD09PWI6cmV0dXJuIFsyNjQsYi0xMCwwXTtjYXNlIDEyPj1iOnJldHVybiBbMjY1LGItMTEsMV07Y2FzZSAxND49YjpyZXR1cm4gWzI2NixiLTEzLDFdO2Nhc2UgMTY+PWI6cmV0dXJuIFsyNjcsYi0xNSwxXTtjYXNlIDE4Pj1iOnJldHVybiBbMjY4LGItMTcsMV07Y2FzZSAyMj49YjpyZXR1cm4gWzI2OSxiLTE5LDJdO2Nhc2UgMjY+PWI6cmV0dXJuIFsyNzAsYi0yMywyXTtjYXNlIDMwPj1iOnJldHVybiBbMjcxLGItMjcsMl07Y2FzZSAzND49YjpyZXR1cm4gWzI3MiwKICAgIAliLTMxLDJdO2Nhc2UgNDI+PWI6cmV0dXJuIFsyNzMsYi0zNSwzXTtjYXNlIDUwPj1iOnJldHVybiBbMjc0LGItNDMsM107Y2FzZSA1OD49YjpyZXR1cm4gWzI3NSxiLTUxLDNdO2Nhc2UgNjY+PWI6cmV0dXJuIFsyNzYsYi01OSwzXTtjYXNlIDgyPj1iOnJldHVybiBbMjc3LGItNjcsNF07Y2FzZSA5OD49YjpyZXR1cm4gWzI3OCxiLTgzLDRdO2Nhc2UgMTE0Pj1iOnJldHVybiBbMjc5LGItOTksNF07Y2FzZSAxMzA+PWI6cmV0dXJuIFsyODAsYi0xMTUsNF07Y2FzZSAxNjI+PWI6cmV0dXJuIFsyODEsYi0xMzEsNV07Y2FzZSAxOTQ+PWI6cmV0dXJuIFsyODIsYi0xNjMsNV07Y2FzZSAyMjY+PWI6cmV0dXJuIFsyODMsYi0xOTUsNV07Y2FzZSAyNTc+PWI6cmV0dXJuIFsyODQsYi0yMjcsNV07Y2FzZSAyNTg9PT1iOnJldHVybiBbMjg1LGItMjU4LDBdO2RlZmF1bHQ6dGhyb3cgImludmFsaWQgbGVuZ3RoOiAiK2I7fX12YXIgZD1bXSxjLGU7Zm9yKGM9MzsyNTg+PWM7YysrKWU9ZihjKSxkW2NdPWVbMl08PDI0fAogICAgCWVbMV08PDE2fGVbMF07cmV0dXJuIGR9KCksSGE9Qz9uZXcgVWludDMyQXJyYXkoc2EpOnNhOwogICAgCWZ1bmN0aW9uIG9hKGYsZCl7ZnVuY3Rpb24gYyhiLGMpe3ZhciBhPWIuayxkPVtdLGU9MCxmO2Y9SGFbYi5sZW5ndGhdO2RbZSsrXT1mJjY1NTM1O2RbZSsrXT1mPj4xNiYyNTU7ZFtlKytdPWY+PjI0O3ZhciBnO3N3aXRjaCh3KXtjYXNlIDE9PT1hOmc9WzAsYS0xLDBdO2JyZWFrO2Nhc2UgMj09PWE6Zz1bMSxhLTIsMF07YnJlYWs7Y2FzZSAzPT09YTpnPVsyLGEtMywwXTticmVhaztjYXNlIDQ9PT1hOmc9WzMsYS00LDBdO2JyZWFrO2Nhc2UgNj49YTpnPVs0LGEtNSwxXTticmVhaztjYXNlIDg+PWE6Zz1bNSxhLTcsMV07YnJlYWs7Y2FzZSAxMj49YTpnPVs2LGEtOSwyXTticmVhaztjYXNlIDE2Pj1hOmc9WzcsYS0xMywyXTticmVhaztjYXNlIDI0Pj1hOmc9WzgsYS0xNywzXTticmVhaztjYXNlIDMyPj1hOmc9WzksYS0yNSwzXTticmVhaztjYXNlIDQ4Pj1hOmc9WzEwLGEtMzMsNF07YnJlYWs7Y2FzZSA2ND49YTpnPVsxMSxhLTQ5LDRdO2JyZWFrO2Nhc2UgOTY+PWE6Zz1bMTIsYS0KICAgIAk2NSw1XTticmVhaztjYXNlIDEyOD49YTpnPVsxMyxhLTk3LDVdO2JyZWFrO2Nhc2UgMTkyPj1hOmc9WzE0LGEtMTI5LDZdO2JyZWFrO2Nhc2UgMjU2Pj1hOmc9WzE1LGEtMTkzLDZdO2JyZWFrO2Nhc2UgMzg0Pj1hOmc9WzE2LGEtMjU3LDddO2JyZWFrO2Nhc2UgNTEyPj1hOmc9WzE3LGEtMzg1LDddO2JyZWFrO2Nhc2UgNzY4Pj1hOmc9WzE4LGEtNTEzLDhdO2JyZWFrO2Nhc2UgMTAyND49YTpnPVsxOSxhLTc2OSw4XTticmVhaztjYXNlIDE1MzY+PWE6Zz1bMjAsYS0xMDI1LDldO2JyZWFrO2Nhc2UgMjA0OD49YTpnPVsyMSxhLTE1MzcsOV07YnJlYWs7Y2FzZSAzMDcyPj1hOmc9WzIyLGEtMjA0OSwxMF07YnJlYWs7Y2FzZSA0MDk2Pj1hOmc9WzIzLGEtMzA3MywxMF07YnJlYWs7Y2FzZSA2MTQ0Pj1hOmc9WzI0LGEtNDA5NywxMV07YnJlYWs7Y2FzZSA4MTkyPj1hOmc9WzI1LGEtNjE0NSwxMV07YnJlYWs7Y2FzZSAxMjI4OD49YTpnPVsyNixhLTgxOTMsMTJdO2JyZWFrO2Nhc2UgMTYzODQ+PQogICAgCWE6Zz1bMjcsYS0xMjI4OSwxMl07YnJlYWs7Y2FzZSAyNDU3Nj49YTpnPVsyOCxhLTE2Mzg1LDEzXTticmVhaztjYXNlIDMyNzY4Pj1hOmc9WzI5LGEtMjQ1NzcsMTNdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgImludmFsaWQgZGlzdGFuY2UiO31mPWc7ZFtlKytdPWZbMF07ZFtlKytdPWZbMV07ZFtlKytdPWZbMl07dmFyIGssbTtrPTA7Zm9yKG09ZC5sZW5ndGg7azxtOysraylsW2grK109ZFtrXTtzW2RbMF1dKys7eFtkWzNdXSsrO3E9Yi5sZW5ndGgrYy0xO3U9bnVsbDt9dmFyIGUsYixhLGcsbSxrPXt9LHAsdCx1LGw9Qz9uZXcgVWludDE2QXJyYXkoMipkLmxlbmd0aCk6W10saD0wLHE9MCxzPW5ldyAoQz9VaW50MzJBcnJheTpBcnJheSkoMjg2KSx4PW5ldyAoQz9VaW50MzJBcnJheTpBcnJheSkoMzApLGZhPWYuaSx6O2lmKCFDKXtmb3IoYT0wOzI4NT49YTspc1thKytdPTA7Zm9yKGE9MDsyOT49YTspeFthKytdPTA7fXNbMjU2XT0xO2U9MDtmb3IoYj1kLmxlbmd0aDtlPGI7KytlKXthPQogICAgCW09MDtmb3IoZz0zO2E8ZyYmZSthIT09YjsrK2EpbT1tPDw4fGRbZSthXTtrW21dPT09biYmKGtbbV09W10pO3A9a1ttXTtpZighKDA8cS0tKSl7Zm9yKDswPHAubGVuZ3RoJiYzMjc2ODxlLXBbMF07KXAuc2hpZnQoKTtpZihlKzM+PWIpe3UmJmModSwtMSk7YT0wO2ZvcihnPWItZTthPGc7KythKXo9ZFtlK2FdLGxbaCsrXT16LCsrc1t6XTticmVha30wPHAubGVuZ3RoPyh0PUlhKGQsZSxwKSx1P3UubGVuZ3RoPHQubGVuZ3RoPyh6PWRbZS0xXSxsW2grK109eiwrK3Nbel0sYyh0LDApKTpjKHUsLTEpOnQubGVuZ3RoPGZhP3U9dDpjKHQsMCkpOnU/Yyh1LC0xKTooej1kW2VdLGxbaCsrXT16LCsrc1t6XSk7fXAucHVzaChlKTt9bFtoKytdPTI1NjtzWzI1Nl0rKztmLm09cztmLmw9eDtyZXR1cm4gQz9sLnN1YmFycmF5KDAsaCk6bH0KICAgIAlmdW5jdGlvbiBJYShmLGQsYyl7dmFyIGUsYixhPTAsZyxtLGsscCx0PWYubGVuZ3RoO209MDtwPWMubGVuZ3RoO2E6Zm9yKDttPHA7bSsrKXtlPWNbcC1tLTFdO2c9MztpZigzPGEpe2ZvcihrPWE7MzxrO2stLSlpZihmW2Uray0xXSE9PWZbZCtrLTFdKWNvbnRpbnVlIGE7Zz1hO31mb3IoOzI1OD5nJiZkK2c8dCYmZltlK2ddPT09ZltkK2ddOykrK2c7Zz5hJiYoYj1lLGE9Zyk7aWYoMjU4PT09ZylicmVha31yZXR1cm4gbmV3IHJhKGEsZC1iKX0KICAgIAlmdW5jdGlvbiBwYShmLGQpe3ZhciBjPWYubGVuZ3RoLGU9bmV3IGlhKDU3MiksYj1uZXcgKEM/VWludDhBcnJheTpBcnJheSkoYyksYSxnLG0sayxwO2lmKCFDKWZvcihrPTA7azxjO2srKyliW2tdPTA7Zm9yKGs9MDtrPGM7KytrKTA8ZltrXSYmZS5wdXNoKGssZltrXSk7YT1BcnJheShlLmxlbmd0aC8yKTtnPW5ldyAoQz9VaW50MzJBcnJheTpBcnJheSkoZS5sZW5ndGgvMik7aWYoMT09PWEubGVuZ3RoKXJldHVybiBiW2UucG9wKCkuaW5kZXhdPTEsYjtrPTA7Zm9yKHA9ZS5sZW5ndGgvMjtrPHA7KytrKWFba109ZS5wb3AoKSxnW2tdPWFba10udmFsdWU7bT1KYShnLGcubGVuZ3RoLGQpO2s9MDtmb3IocD1hLmxlbmd0aDtrPHA7KytrKWJbYVtrXS5pbmRleF09bVtrXTtyZXR1cm4gYn0KICAgIAlmdW5jdGlvbiBKYShmLGQsYyl7ZnVuY3Rpb24gZShhKXt2YXIgYj1rW2FdW3BbYV1dO2I9PT1kPyhlKGErMSksZShhKzEpKTotLWdbYl07KytwW2FdO312YXIgYj1uZXcgKEM/VWludDE2QXJyYXk6QXJyYXkpKGMpLGE9bmV3IChDP1VpbnQ4QXJyYXk6QXJyYXkpKGMpLGc9bmV3IChDP1VpbnQ4QXJyYXk6QXJyYXkpKGQpLG09QXJyYXkoYyksaz1BcnJheShjKSxwPUFycmF5KGMpLHQ9KDE8PGMpLWQsdT0xPDxjLTEsbCxoLHEscyx4O2JbYy0xXT1kO2ZvcihoPTA7aDxjOysraCl0PHU/YVtoXT0wOihhW2hdPTEsdC09dSksdDw8PTEsYltjLTItaF09KGJbYy0xLWhdLzJ8MCkrZDtiWzBdPWFbMF07bVswXT1BcnJheShiWzBdKTtrWzBdPUFycmF5KGJbMF0pO2ZvcihoPTE7aDxjOysraCliW2hdPjIqYltoLTFdK2FbaF0mJihiW2hdPTIqYltoLTFdK2FbaF0pLG1baF09QXJyYXkoYltoXSksa1toXT1BcnJheShiW2hdKTtmb3IobD0wO2w8ZDsrK2wpZ1tsXT1jO2ZvcihxPTA7cTxiW2MtMV07KytxKW1bYy0KICAgIAkxXVtxXT1mW3FdLGtbYy0xXVtxXT1xO2ZvcihsPTA7bDxjOysrbClwW2xdPTA7MT09PWFbYy0xXSYmKC0tZ1swXSwrK3BbYy0xXSk7Zm9yKGg9Yy0yOzA8PWg7LS1oKXtzPWw9MDt4PXBbaCsxXTtmb3IocT0wO3E8YltoXTtxKyspcz1tW2grMV1beF0rbVtoKzFdW3grMV0scz5mW2xdPyhtW2hdW3FdPXMsa1toXVtxXT1kLHgrPTIpOihtW2hdW3FdPWZbbF0sa1toXVtxXT1sLCsrbCk7cFtoXT0wOzE9PT1hW2hdJiZlKGgpO31yZXR1cm4gZ30KICAgIAlmdW5jdGlvbiBxYShmKXt2YXIgZD1uZXcgKEM/VWludDE2QXJyYXk6QXJyYXkpKGYubGVuZ3RoKSxjPVtdLGU9W10sYj0wLGEsZyxtLGs7YT0wO2ZvcihnPWYubGVuZ3RoO2E8ZzthKyspY1tmW2FdXT0oY1tmW2FdXXwwKSsxO2E9MTtmb3IoZz0xNjthPD1nO2ErKyllW2FdPWIsYis9Y1thXXwwLGI8PD0xO2E9MDtmb3IoZz1mLmxlbmd0aDthPGc7YSsrKXtiPWVbZlthXV07ZVtmW2FdXSs9MTttPWRbYV09MDtmb3Ioaz1mW2FdO208azttKyspZFthXT1kW2FdPDwxfGImMSxiPj4+PTE7fXJldHVybiBkfWZ1bmN0aW9uIEthKGYsZCl7dGhpcy5pbnB1dD1mO3RoaXMuYT1uZXcgKEM/VWludDhBcnJheTpBcnJheSkoMzI3NjgpO3RoaXMuZD1WLmc7dmFyIGM9e30sZTtpZigoZHx8IShkPXt9KSkmJiJudW1iZXIiPT09dHlwZW9mIGQuY29tcHJlc3Npb25UeXBlKXRoaXMuZD1kLmNvbXByZXNzaW9uVHlwZTtmb3IoZSBpbiBkKWNbZV09ZFtlXTtjLm91dHB1dEJ1ZmZlcj10aGlzLmE7dGhpcy5qPW5ldyBrYSh0aGlzLmlucHV0LGMpO312YXIgVj1uYTsKICAgIAlLYS5wcm90b3R5cGUuZj1mdW5jdGlvbigpe3ZhciBmLGQsYyxlLGIsYSxnPTA7YT10aGlzLmE7c3dpdGNoKDgpe2Nhc2UgODpmPU1hdGguTE9HMkUqTWF0aC5sb2coMzI3NjgpLTg7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTt9ZD1mPDw0fDg7YVtnKytdPWQ7c3dpdGNoKDgpe2Nhc2UgODpzd2l0Y2godGhpcy5kKXtjYXNlIFYuTk9ORTplPTA7YnJlYWs7Y2FzZSBWLmg6ZT0xO2JyZWFrO2Nhc2UgVi5nOmU9MjticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCBjb21wcmVzc2lvbiB0eXBlIik7fWJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7fWM9ZTw8NnwwO2FbZysrXT1jfDMxLSgyNTYqZCtjKSUzMTt2YXIgbT10aGlzLmlucHV0O2lmKCJzdHJpbmciPT09dHlwZW9mIG0pe3ZhciBrPW0uc3BsaXQoIiIpLHAsdDtwPTA7Zm9yKHQ9ay5sZW5ndGg7cDx0O3ArKylrW3BdPQogICAgCShrW3BdLmNoYXJDb2RlQXQoMCkmMjU1KT4+PjA7bT1rO31mb3IodmFyIHU9MSxsPTAsaD1tLmxlbmd0aCxxLHM9MDswPGg7KXtxPTEwMjQ8aD8xMDI0Omg7aC09cTtkbyB1Kz1tW3MrK10sbCs9dTt3aGlsZSgtLXEpO3UlPTY1NTIxO2wlPTY1NTIxO31iPShsPDwxNnx1KT4+PjA7dGhpcy5qLmM9ZzthPXRoaXMuai5mKCk7Zz1hLmxlbmd0aDtDJiYoYT1uZXcgVWludDhBcnJheShhLmJ1ZmZlciksYS5sZW5ndGg8PWcrNCYmKHRoaXMuYT1uZXcgVWludDhBcnJheShhLmxlbmd0aCs0KSx0aGlzLmEuc2V0KGEpLGE9dGhpcy5hKSxhPWEuc3ViYXJyYXkoMCxnKzQpKTthW2crK109Yj4+MjQmMjU1O2FbZysrXT1iPj4xNiYyNTU7YVtnKytdPWI+PjgmMjU1O2FbZysrXT1iJjI1NTtyZXR1cm4gYX07YmEoIlpsaWIuRGVmbGF0ZSIsS2EpO2JhKCJabGliLkRlZmxhdGUuY29tcHJlc3MiLGZ1bmN0aW9uKGYsZCl7cmV0dXJuIChuZXcgS2EoZixkKSkuZigpfSk7YmEoIlpsaWIuRGVmbGF0ZS5wcm90b3R5cGUuY29tcHJlc3MiLEthLnByb3RvdHlwZS5mKTt2YXIgTWE9e05PTkU6Vi5OT05FLEZJWEVEOlYuaCxEWU5BTUlDOlYuZ30sTmEsT2EsVyxQYTtpZihPYmplY3Qua2V5cylOYT1PYmplY3Qua2V5cyhNYSk7ZWxzZSBmb3IoT2EgaW4gTmE9W10sVz0wLE1hKU5hW1crK109T2E7Vz0wO2ZvcihQYT1OYS5sZW5ndGg7VzxQYTsrK1cpT2E9TmFbV10sYmEoIlpsaWIuRGVmbGF0ZS5Db21wcmVzc2lvblR5cGUuIitPYSxNYVtPYV0pO30pLmNhbGwobW9kdWxlLmV4cG9ydHMpOyAKICAgIH0gKGRlZmxhdGVfbWluKSk7CgogICAgdmFyIGRlZmxhdGVfbWluRXhwb3J0cyA9IGRlZmxhdGVfbWluLmV4cG9ydHM7CiAgICB2YXIgWkxpYkRlZmxhdGUgPSAvKkBfX1BVUkVfXyovZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMoZGVmbGF0ZV9taW5FeHBvcnRzKTsKCiAgICBmdW5jdGlvbiB0b1VURjhBcnJheShzdHIpIHsKICAgICAgICB2YXIgdXRmOCA9IFtdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBjaGFyY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpOwogICAgICAgICAgICBpZiAoY2hhcmNvZGUgPCAweDgwKQogICAgICAgICAgICAgICAgdXRmOC5wdXNoKGNoYXJjb2RlKTsKICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmNvZGUgPCAweDgwMCkgewogICAgICAgICAgICAgICAgdXRmOC5wdXNoKDB4YzAgfCAoY2hhcmNvZGUgPj4gNiksIDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmNvZGUgPCAweGQ4MDAgfHwgY2hhcmNvZGUgPj0gMHhlMDAwKSB7CiAgICAgICAgICAgICAgICB1dGY4LnB1c2goMHhlMCB8IChjaGFyY29kZSA+PiAxMiksIDB4ODAgfCAoKGNoYXJjb2RlID4+IDYpICYgMHgzZiksIDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBzdXJyb2dhdGUgcGFpcgogICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgLy8gVVRGLTE2IGVuY29kZXMgMHgxMDAwMC0weDEwRkZGRiBieQogICAgICAgICAgICAgICAgLy8gc3VidHJhY3RpbmcgMHgxMDAwMCBhbmQgc3BsaXR0aW5nIHRoZQogICAgICAgICAgICAgICAgLy8gMjAgYml0cyBvZiAweDAtMHhGRkZGRiBpbnRvIHR3byBoYWx2ZXMKICAgICAgICAgICAgICAgIGNoYXJjb2RlID0gMHgxMDAwMCArICgoKGNoYXJjb2RlICYgMHgzZmYpIDw8IDEwKSB8CiAgICAgICAgICAgICAgICAgICAgKHN0ci5jaGFyQ29kZUF0KGkpICYgMHgzZmYpKTsKICAgICAgICAgICAgICAgIHV0ZjgucHVzaCgweGYwIHwgKGNoYXJjb2RlID4+IDE4KSwgMHg4MCB8ICgoY2hhcmNvZGUgPj4gMTIpICYgMHgzZiksIDB4ODAgfCAoKGNoYXJjb2RlID4+IDYpICYgMHgzZiksIDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHV0Zjg7CiAgICB9CgogICAgdmFyIFpsaWIgPSB7CiAgICAgICAgJ0RlZmxhdGUnOiBaTGliRGVmbGF0ZS5abGliLkRlZmxhdGUKICAgIH07CiAgICB2YXIgRW5jb2RpbmcgPSB7CiAgICAgICAgJ2Jhc2U2NFVybCc6ICdiYXNlNjR1cmwnLAogICAgICAgICdiaW5hcnknOiAnYmluYXJ5JwogICAgfTsKICAgIGZ1bmN0aW9uIGNvbXByZXNzKGpzb25fb2JqLCBlbmNvZGluZykgewogICAgICAgIGlmICghZW5jb2RpbmcpIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBFbmNvZGluZy5iYXNlNjRVcmw7CiAgICAgICAgfQogICAgICAgIC8qIC0tIFRoaXMgaXMgWkxJQiAqLwogICAgICAgIHZhciBjb21wcmVzc0RhdGEgPSB0b1VURjhBcnJheSh0eXBlb2YganNvbl9vYmogPT09ICdzdHJpbmcnID8ganNvbl9vYmogOiBKU09OLnN0cmluZ2lmeShqc29uX29iaikpOwogICAgICAgIHZhciBkZWZsYXRlID0gbmV3IFpsaWIuRGVmbGF0ZShjb21wcmVzc0RhdGEpOwogICAgICAgIHZhciBjb21wcmVzc2VkQnl0ZXMgPSBkZWZsYXRlLmNvbXByZXNzKCk7CiAgICAgICAgaWYgKGVuY29kaW5nID09PSBFbmNvZGluZy5iYXNlNjRVcmwpIHsKICAgICAgICAgICAgcmV0dXJuIGI2NC51aW50OFRvQmFzZTY0KGNvbXByZXNzZWRCeXRlcyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gY29tcHJlc3NlZEJ5dGVzOwogICAgICAgIH0KICAgIH0KCiAgICB2YXIgT05FX0hVTkRSRURfTUJfSU5fQllURVMgPSAxMDAgKiAxMDI0ICogMTAyNDsKICAgIGZ1bmN0aW9uIG1hdGNoSG9zdGVkUmVzb3VyY2VzKHJlY29yZGluZ0V2ZW50LCBzdHJpbmdpZmllZFJlY29yZGluZ1BheWxvYWQpIHsKICAgICAgICB2YXIgZm9udFVSTFJlZ2V4ID0gL2h0dHBzOlwvXC9bXlxzXSs/XC4od29mZnx3b2ZmMnx0dGZ8b3RmfGVvdClcYi9nOwogICAgICAgIHZhciBob3N0ZWRSZXNvdXJjZXMgPSBzdHJpbmdpZmllZFJlY29yZGluZ1BheWxvYWQubWF0Y2goZm9udFVSTFJlZ2V4KTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAndHlwZSc6ICdyZWNvcmRpbmcnLAogICAgICAgICAgICAndmlzaXRvcklkJzogcmVjb3JkaW5nRXZlbnQudmlzaXRvcklkLAogICAgICAgICAgICAnYWNjb3VudElkJzogcmVjb3JkaW5nRXZlbnQuYWNjb3VudElkLAogICAgICAgICAgICAna2V5RnJhbWUnOiBmYWxzZSwKICAgICAgICAgICAgJ2xhc3RLZXlGcmFtZSc6IHJlY29yZGluZ0V2ZW50Lmxhc3RLZXlGcmFtZSwKICAgICAgICAgICAgJ3JlY29yZGluZ0lkJzogcmVjb3JkaW5nRXZlbnQucmVjb3JkaW5nSWQsCiAgICAgICAgICAgICdyZWNvcmRpbmdTZXNzaW9uSWQnOiByZWNvcmRpbmdFdmVudC5yZWNvcmRpbmdTZXNzaW9uSWQsCiAgICAgICAgICAgICd1cmwnOiByZWNvcmRpbmdFdmVudC51cmwsCiAgICAgICAgICAgICdzdWJUeXBlJzogJ2hvc3RlZFJlc291cmNlcycsCiAgICAgICAgICAgICdyZWNvcmRpbmdQYXlsb2FkJzogW10sCiAgICAgICAgICAgICdyZWNvcmRpbmdQYXlsb2FkTWV0YWRhdGEnOiBbXSwKICAgICAgICAgICAgJ3NlcXVlbmNlJzogMCwKICAgICAgICAgICAgJ3JlY29yZGluZ1BheWxvYWRDb3VudCc6IDAsCiAgICAgICAgICAgICdob3N0ZWRSZXNvdXJjZXMnOiBob3N0ZWRSZXNvdXJjZXMgfHwgW10KICAgICAgICB9OwogICAgfQogICAgLy8ga2VlcCBpbiBtaW5kIGNoYW5nZXMgaGVyZSBtYXkgbmVlZCBhZGRyZXNzaW5nIGluIHRoZSBleHRlbnNpb24gd29ya2VyIHByb3h5IGFzIHdlbGwKICAgIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoZS5kYXRhLnVybCAmJiBlLmRhdGEucGF5bG9hZCkgewogICAgICAgICAgICAgICAgdmFyIF9hID0gZS5kYXRhLCB1cmwgPSBfYS51cmwsIHBheWxvYWQgPSBfYS5wYXlsb2FkLCBzaG91bGRDYWNoZVJlc291cmNlcyA9IF9hLnNob3VsZENhY2hlUmVzb3VyY2VzOwogICAgICAgICAgICAgICAgdmFyIHNlcXVlbmNlXzEgPSBwYXlsb2FkLnNlcXVlbmNlOwogICAgICAgICAgICAgICAgdmFyIHN0cmluZ2lmaWVkUmVjb3JkaW5nUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQucmVjb3JkaW5nUGF5bG9hZCk7CiAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgYW5kIHBvc3QgYmFjayB0aGUgcmVjb3JkaW5nIHBheWxvYWQgc2l6ZSBiZWZvcmUgdGhlIHBheWxvYWQgaXMgY29tcHJlc3NlZAogICAgICAgICAgICAgICAgdmFyIHJlY29yZGluZ1BheWxvYWRTaXplID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cmluZ2lmaWVkUmVjb3JkaW5nUGF5bG9hZCkubGVuZ3RoOwogICAgICAgICAgICAgICAgdmFyIGV4Y2VlZHNQYXlsb2FkU2l6ZUxpbWl0ID0gcmVjb3JkaW5nUGF5bG9hZFNpemUgPj0gT05FX0hVTkRSRURfTUJfSU5fQllURVM7CiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAncmVjb3JkaW5nUGF5bG9hZFNpemUnLAogICAgICAgICAgICAgICAgICAgICdyZWNvcmRpbmdQYXlsb2FkU2l6ZSc6IHJlY29yZGluZ1BheWxvYWRTaXplLAogICAgICAgICAgICAgICAgICAgICdleGNlZWRzUGF5bG9hZFNpemVMaW1pdCc6IGV4Y2VlZHNQYXlsb2FkU2l6ZUxpbWl0CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIC8vIGRvbid0IGF0dGVtcHQgdG8gc2VuZCB0aGUgcGF5bG9hZCBpZiBpdCBleGNlZWRzIHRoZSBhbGxvd2VkIGxpbWl0CiAgICAgICAgICAgICAgICBpZiAoZXhjZWVkc1BheWxvYWRTaXplTGltaXQpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHNob3VsZENhY2hlUmVzb3VyY2VzKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGhvc3RlZFJlc291cmNlc0V2ZW50ID0gbWF0Y2hIb3N0ZWRSZXNvdXJjZXMocGF5bG9hZCwgc3RyaW5naWZpZWRSZWNvcmRpbmdQYXlsb2FkKTsKICAgICAgICAgICAgICAgICAgICBpZiAoaG9zdGVkUmVzb3VyY2VzRXZlbnQuaG9zdGVkUmVzb3VyY2VzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdob3N0ZWRSZXNvdXJjZXMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hvc3RlZFJlc291cmNlc0V2ZW50JzogaG9zdGVkUmVzb3VyY2VzRXZlbnQKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcGF5bG9hZC5yZWNvcmRpbmdTaXplID0gcmVjb3JkaW5nUGF5bG9hZFNpemU7CiAgICAgICAgICAgICAgICB2YXIgYm9keSA9IGNvbXByZXNzKHBheWxvYWQsICdiaW5hcnknKTsKICAgICAgICAgICAgICAgIC8vIHdlIHdhbnQgdG8gY2FsY3VsYXRlIGN0IChjdXJyZW50IHRpbWUpIGFzIGNsb3NlIGFzIHdlIGNhbiB0byB0aGUgYWN0dWFsIFBPU1QgcmVxdWVzdAogICAgICAgICAgICAgICAgLy8gc28gdGhhdCBpdCdzIGFzIGFjY3VyYXRlIGFzIHBvc3NpYmxlCiAgICAgICAgICAgICAgICB1cmwgPSAiIi5jb25jYXQodXJsLCAiJmN0PSIpLmNvbmNhdChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7CiAgICAgICAgICAgICAgICBmZXRjaCh1cmwsIHsKICAgICAgICAgICAgICAgICAgICAnbWV0aG9kJzogJ1BPU1QnLAogICAgICAgICAgICAgICAgICAgICdib2R5JzogYm9keQogICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSAzMDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJzogbmV3IEVycm9yKCJyZWNlaXZlZCBzdGF0dXMgY29kZSAiLmNvbmNhdChyZXNwb25zZS5zdGF0dXMsICI6ICIpLmNvbmNhdChyZXNwb25zZS5zdGF0dXNUZXh0KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJzogcmVzcG9uc2Uuc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2U6IHNlcXVlbmNlXzEKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZTogc2VxdWVuY2VfMQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KVsnY2F0Y2gnXShmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJzogZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2U6IHNlcXVlbmNlXzEKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7CiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgICAgICdlcnJvcic6IGUKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfTsKCiAgICBleHBvcnRzLm1hdGNoSG9zdGVkUmVzb3VyY2VzID0gbWF0Y2hIb3N0ZWRSZXNvdXJjZXM7CgogICAgcmV0dXJuIGV4cG9ydHM7Cgp9KSh7fSk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPXdvcmtlci5qcy5tYXAKCg==', null, false);
50392
50719
  /* eslint-enable */
50393
50720
 
50394
50721
  function createReplayPlugin() {