/**
 * History.js
 * https://github.com/browserstate/history.js
 *
 * Copyright © 2014+ Bevry Pty Ltd us@bevry.me (http://bevry.me)
 * Copyright © 2011-2013 Benjamin Lupton b@lupton.cc (http://balupton.com)
 * Released under the BSD License
 * https://github.com/browserstate/history.js/blob/master/LICENSE.md
 */
( function ( e, t ) {
	'use strict';
	var n = ( e.History = e.History || {} ),
		r = e.jQuery;
	if ( typeof n.Adapter != 'undefined' )
		throw new Error( 'History.js Adapter has already been loaded...' );
	( n.Adapter = {
		bind: function ( e, t, n ) {
			r( e ).bind( t, n );
		},
		trigger: function ( e, t, n ) {
			r( e ).trigger( t, n );
		},
		extractEventData: function ( e, n, r ) {
			var i =
				( n && n.originalEvent && n.originalEvent[ e ] ) ||
				( r && r[ e ] ) ||
				t;
			return i;
		},
		onDomLoad: function ( e ) {
			r( e );
		},
	} ),
		typeof n.init != 'undefined' && n.init();
} )( window ),
	( function ( e, t ) {
		'use strict';
		var n = e.console || t,
			r = e.document,
			i = e.navigator,
			s = ! 1,
			o = e.setTimeout,
			u = e.clearTimeout,
			a = e.setInterval,
			f = e.clearInterval,
			l = e.JSON,
			c = e.alert,
			h = ( e.History = e.History || {} ),
			p = e.history;
		try {
			( s = e.sessionStorage ),
				s.setItem( 'TEST', '1' ),
				s.removeItem( 'TEST' );
		} catch ( d ) {
			s = ! 1;
		}
		( l.stringify = l.stringify || l.encode ),
			( l.parse = l.parse || l.decode );
		if ( typeof h.init != 'undefined' )
			throw new Error( 'History.js Core has already been loaded...' );
		( h.init = function ( e ) {
			return typeof h.Adapter == 'undefined'
				? ! 1
				: ( typeof h.initCore != 'undefined' && h.initCore(),
				  typeof h.initHtml4 != 'undefined' && h.initHtml4(),
				  ! 0 );
		} ),
			( h.initCore = function ( d ) {
				if ( typeof h.initCore.initialized != 'undefined' ) return ! 1;
				( h.initCore.initialized = ! 0 ),
					( h.options = h.options || {} ),
					( h.options.hashChangeInterval =
						h.options.hashChangeInterval || 100 ),
					( h.options.safariPollInterval =
						h.options.safariPollInterval || 500 ),
					( h.options.doubleCheckInterval =
						h.options.doubleCheckInterval || 500 ),
					( h.options.disableSuid = h.options.disableSuid || ! 1 ),
					( h.options.storeInterval =
						h.options.storeInterval || 1e3 ),
					( h.options.busyDelay = h.options.busyDelay || 250 ),
					( h.options.debug = h.options.debug || ! 1 ),
					( h.options.initialTitle =
						h.options.initialTitle || r.title ),
					( h.options.html4Mode = h.options.html4Mode || ! 1 ),
					( h.options.delayInit = h.options.delayInit || ! 1 ),
					( h.intervalList = [] ),
					( h.clearAllIntervals = function () {
						var e,
							t = h.intervalList;
						if ( typeof t != 'undefined' && t !== null ) {
							for ( e = 0; e < t.length; e++ ) f( t[ e ] );
							h.intervalList = null;
						}
					} ),
					( h.debug = function () {
						( h.options.debug || ! 1 ) &&
							h.log.apply( h, arguments );
					} ),
					( h.log = function () {
						var e =
								typeof n != 'undefined' &&
								typeof n.log != 'undefined' &&
								typeof n.log.apply != 'undefined',
							t = r.getElementById( 'log' ),
							i,
							s,
							o,
							u,
							a;
						e
							? ( ( u = Array.prototype.slice.call( arguments ) ),
							  ( i = u.shift() ),
							  typeof n.debug != 'undefined'
									? n.debug.apply( n, [ i, u ] )
									: n.log.apply( n, [ i, u ] ) )
							: ( i = '\n' + arguments[ 0 ] + '\n' );
						for ( s = 1, o = arguments.length; s < o; ++s ) {
							a = arguments[ s ];
							if (
								typeof a == 'object' &&
								typeof l != 'undefined'
							)
								try {
									a = l.stringify( a );
								} catch ( f ) {}
							i += '\n' + a + '\n';
						}
						return (
							t
								? ( ( t.value += i + '\n-----\n' ),
								  ( t.scrollTop =
										t.scrollHeight - t.clientHeight ) )
								: e || c( i ),
							! 0
						);
					} ),
					( h.getInternetExplorerMajorVersion = function () {
						var e = ( h.getInternetExplorerMajorVersion.cached =
							typeof h.getInternetExplorerMajorVersion.cached !=
							'undefined'
								? h.getInternetExplorerMajorVersion.cached
								: ( function () {
										var e = 3,
											t = r.createElement( 'div' ),
											n = t.getElementsByTagName( 'i' );
										while (
											( t.innerHTML =
												'<!--[if gt IE ' +
												++e +
												']><i></i><![endif]-->' ) &&
											n[ 0 ]
										);
										return e > 4 ? e : ! 1;
								  } )() );
						return e;
					} ),
					( h.isInternetExplorer = function () {
						var e = ( h.isInternetExplorer.cached =
							typeof h.isInternetExplorer.cached != 'undefined'
								? h.isInternetExplorer.cached
								: Boolean(
										h.getInternetExplorerMajorVersion()
								  ) );
						return e;
					} ),
					h.options.html4Mode
						? ( h.emulated = { pushState: ! 0, hashChange: ! 0 } )
						: ( h.emulated = {
								pushState: ! Boolean(
									e.history &&
										e.history.pushState &&
										e.history.replaceState &&
										! / Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(
											i.userAgent
										) &&
										! /AppleWebKit\/5([0-2]|3[0-2])/i.test(
											i.userAgent
										)
								),
								hashChange: Boolean(
									! (
										'onhashchange' in e ||
										'onhashchange' in r
									) ||
										( h.isInternetExplorer() &&
											h.getInternetExplorerMajorVersion() <
												8 )
								),
						  } ),
					( h.enabled = ! h.emulated.pushState ),
					( h.bugs = {
						setHash: Boolean(
							! h.emulated.pushState &&
								i.vendor === 'Apple Computer, Inc.' &&
								/AppleWebKit\/5([0-2]|3[0-3])/.test(
									i.userAgent
								)
						),
						safariPoll: Boolean(
							! h.emulated.pushState &&
								i.vendor === 'Apple Computer, Inc.' &&
								/AppleWebKit\/5([0-2]|3[0-3])/.test(
									i.userAgent
								)
						),
						ieDoubleCheck: Boolean(
							h.isInternetExplorer() &&
								h.getInternetExplorerMajorVersion() < 8
						),
						hashEscape: Boolean(
							h.isInternetExplorer() &&
								h.getInternetExplorerMajorVersion() < 7
						),
					} ),
					( h.isEmptyObject = function ( e ) {
						for ( var t in e )
							if ( e.hasOwnProperty( t ) ) return ! 1;
						return ! 0;
					} ),
					( h.cloneObject = function ( e ) {
						var t, n;
						return (
							e
								? ( ( t = l.stringify( e ) ),
								  ( n = l.parse( t ) ) )
								: ( n = {} ),
							n
						);
					} ),
					( h.getRootUrl = function () {
						var e =
							r.location.protocol +
							'//' +
							( r.location.hostname || r.location.host );
						if ( r.location.port || ! 1 )
							e += ':' + r.location.port;
						return ( e += '/' ), e;
					} ),
					( h.getBaseHref = function () {
						var e = r.getElementsByTagName( 'base' ),
							t = null,
							n = '';
						return (
							e.length === 1 &&
								( ( t = e[ 0 ] ),
								( n = t.href.replace( /[^\/]+$/, '' ) ) ),
							( n = n.replace( /\/+$/, '' ) ),
							n && ( n += '/' ),
							n
						);
					} ),
					( h.getBaseUrl = function () {
						var e =
							h.getBaseHref() ||
							h.getBasePageUrl() ||
							h.getRootUrl();
						return e;
					} ),
					( h.getPageUrl = function () {
						var e = h.getState( ! 1, ! 1 ),
							t = ( e || {} ).url || h.getLocationHref(),
							n;
						return (
							( n = t
								.replace( /\/+$/, '' )
								.replace( /[^\/]+$/, function ( e, t, n ) {
									return /\./.test( e ) ? e : e + '/';
								} ) ),
							n
						);
					} ),
					( h.getBasePageUrl = function () {
						var e =
							h
								.getLocationHref()
								.replace( /[#\?].*/, '' )
								.replace( /[^\/]+$/, function ( e, t, n ) {
									return /[^\/]$/.test( e ) ? '' : e;
								} )
								.replace( /\/+$/, '' ) + '/';
						return e;
					} ),
					( h.getFullUrl = function ( e, t ) {
						var n = e,
							r = e.substring( 0, 1 );
						return (
							( t = typeof t == 'undefined' ? ! 0 : t ),
							/[a-z]+\:\/\//.test( e ) ||
								( r === '/'
									? ( n =
											h.getRootUrl() +
											e.replace( /^\/+/, '' ) )
									: r === '#'
									? ( n =
											h
												.getPageUrl()
												.replace( /#.*/, '' ) + e )
									: r === '?'
									? ( n =
											h
												.getPageUrl()
												.replace( /[\?#].*/, '' ) + e )
									: t
									? ( n =
											h.getBaseUrl() +
											e.replace( /^(\.\/)+/, '' ) )
									: ( n =
											h.getBasePageUrl() +
											e.replace( /^(\.\/)+/, '' ) ) ),
							n.replace( /\#$/, '' )
						);
					} ),
					( h.getShortUrl = function ( e ) {
						var t = e,
							n = h.getBaseUrl(),
							r = h.getRootUrl();
						return (
							h.emulated.pushState && ( t = t.replace( n, '' ) ),
							( t = t.replace( r, '/' ) ),
							h.isTraditionalAnchor( t ) && ( t = './' + t ),
							( t = t
								.replace( /^(\.\/)+/g, './' )
								.replace( /\#$/, '' ) ),
							t
						);
					} ),
					( h.getLocationHref = function ( e ) {
						return (
							( e = e || r ),
							e.URL === e.location.href
								? e.location.href
								: e.location.href ===
								  decodeURIComponent( e.URL )
								? e.URL
								: e.location.hash &&
								  decodeURIComponent(
										e.location.href.replace( /^[^#]+/, '' )
								  ) === e.location.hash
								? e.location.href
								: e.URL.indexOf( '#' ) == -1 &&
								  e.location.href.indexOf( '#' ) != -1
								? e.location.href
								: e.URL || e.location.href
						);
					} ),
					( h.store = {} ),
					( h.idToState = h.idToState || {} ),
					( h.stateToId = h.stateToId || {} ),
					( h.urlToId = h.urlToId || {} ),
					( h.storedStates = h.storedStates || [] ),
					( h.savedStates = h.savedStates || [] ),
					( h.normalizeStore = function () {
						( h.store.idToState = h.store.idToState || {} ),
							( h.store.urlToId = h.store.urlToId || {} ),
							( h.store.stateToId = h.store.stateToId || {} );
					} ),
					( h.getState = function ( e, t ) {
						typeof e == 'undefined' && ( e = ! 0 ),
							typeof t == 'undefined' && ( t = ! 0 );
						var n = h.getLastSavedState();
						return (
							! n && t && ( n = h.createStateObject() ),
							e &&
								( ( n = h.cloneObject( n ) ),
								( n.url = n.cleanUrl || n.url ) ),
							n
						);
					} ),
					( h.getIdByState = function ( e ) {
						var t = h.extractId( e.url ),
							n;
						if ( ! t ) {
							n = h.getStateString( e );
							if ( typeof h.stateToId[ n ] != 'undefined' )
								t = h.stateToId[ n ];
							else if (
								typeof h.store.stateToId[ n ] != 'undefined'
							)
								t = h.store.stateToId[ n ];
							else {
								for (;;) {
									t =
										new Date().getTime() +
										String( Math.random() ).replace(
											/\D/g,
											''
										);
									if (
										typeof h.idToState[ t ] ==
											'undefined' &&
										typeof h.store.idToState[ t ] ==
											'undefined'
									)
										break;
								}
								( h.stateToId[ n ] = t ),
									( h.idToState[ t ] = e );
							}
						}
						return t;
					} ),
					( h.normalizeState = function ( e ) {
						var t, n;
						if ( ! e || typeof e != 'object' ) e = {};
						if ( typeof e.normalized != 'undefined' ) return e;
						if ( ! e.data || typeof e.data != 'object' )
							e.data = {};
						return (
							( t = {} ),
							( t.normalized = ! 0 ),
							( t.title = e.title || '' ),
							( t.url = h.getFullUrl(
								e.url ? e.url : h.getLocationHref()
							) ),
							( t.hash = h.getShortUrl( t.url ) ),
							( t.data = h.cloneObject( e.data ) ),
							( t.id = h.getIdByState( t ) ),
							( t.cleanUrl = t.url.replace(
								/\??\&_suid.*/,
								''
							) ),
							( t.url = t.cleanUrl ),
							( n = ! h.isEmptyObject( t.data ) ),
							( t.title || n ) &&
								h.options.disableSuid !== ! 0 &&
								( ( t.hash = h
									.getShortUrl( t.url )
									.replace( /\??\&_suid.*/, '' ) ),
								/\?/.test( t.hash ) || ( t.hash += '?' ),
								( t.hash += '&_suid=' + t.id ) ),
							( t.hashedUrl = h.getFullUrl( t.hash ) ),
							( h.emulated.pushState || h.bugs.safariPoll ) &&
								h.hasUrlDuplicate( t ) &&
								( t.url = t.hashedUrl ),
							t
						);
					} ),
					( h.createStateObject = function ( e, t, n ) {
						var r = { data: e, title: t, url: n };
						return ( r = h.normalizeState( r ) ), r;
					} ),
					( h.getStateById = function ( e ) {
						e = String( e );
						var n = h.idToState[ e ] || h.store.idToState[ e ] || t;
						return n;
					} ),
					( h.getStateString = function ( e ) {
						var t, n, r;
						return (
							( t = h.normalizeState( e ) ),
							( n = {
								data: t.data,
								title: e.title,
								url: e.url,
							} ),
							( r = l.stringify( n ) ),
							r
						);
					} ),
					( h.getStateId = function ( e ) {
						var t, n;
						return ( t = h.normalizeState( e ) ), ( n = t.id ), n;
					} ),
					( h.getHashByState = function ( e ) {
						var t, n;
						return ( t = h.normalizeState( e ) ), ( n = t.hash ), n;
					} ),
					( h.extractId = function ( e ) {
						var t, n, r, i;
						return (
							e.indexOf( '#' ) != -1
								? ( i = e.split( '#' )[ 0 ] )
								: ( i = e ),
							( n = /(.*)\&_suid=([0-9]+)$/.exec( i ) ),
							( r = n ? n[ 1 ] || e : e ),
							( t = n ? String( n[ 2 ] || '' ) : '' ),
							t || ! 1
						);
					} ),
					( h.isTraditionalAnchor = function ( e ) {
						var t = ! /[\/\?\.]/.test( e );
						return t;
					} ),
					( h.extractState = function ( e, t ) {
						var n = null,
							r,
							i;
						return (
							( t = t || ! 1 ),
							( r = h.extractId( e ) ),
							r && ( n = h.getStateById( r ) ),
							n ||
								( ( i = h.getFullUrl( e ) ),
								( r = h.getIdByUrl( i ) || ! 1 ),
								r && ( n = h.getStateById( r ) ),
								! n &&
									t &&
									! h.isTraditionalAnchor( e ) &&
									( n = h.createStateObject(
										null,
										null,
										i
									) ) ),
							n
						);
					} ),
					( h.getIdByUrl = function ( e ) {
						var n = h.urlToId[ e ] || h.store.urlToId[ e ] || t;
						return n;
					} ),
					( h.getLastSavedState = function () {
						return h.savedStates[ h.savedStates.length - 1 ] || t;
					} ),
					( h.getLastStoredState = function () {
						return h.storedStates[ h.storedStates.length - 1 ] || t;
					} ),
					( h.hasUrlDuplicate = function ( e ) {
						var t = ! 1,
							n;
						return (
							( n = h.extractState( e.url ) ),
							( t = n && n.id !== e.id ),
							t
						);
					} ),
					( h.storeState = function ( e ) {
						return (
							( h.urlToId[ e.url ] = e.id ),
							h.storedStates.push( h.cloneObject( e ) ),
							e
						);
					} ),
					( h.isLastSavedState = function ( e ) {
						var t = ! 1,
							n,
							r,
							i;
						return (
							h.savedStates.length &&
								( ( n = e.id ),
								( r = h.getLastSavedState() ),
								( i = r.id ),
								( t = n === i ) ),
							t
						);
					} ),
					( h.saveState = function ( e ) {
						return h.isLastSavedState( e )
							? ! 1
							: ( h.savedStates.push( h.cloneObject( e ) ), ! 0 );
					} ),
					( h.getStateByIndex = function ( e ) {
						var t = null;
						return (
							typeof e == 'undefined'
								? ( t =
										h.savedStates[
											h.savedStates.length - 1
										] )
								: e < 0
								? ( t =
										h.savedStates[
											h.savedStates.length + e
										] )
								: ( t = h.savedStates[ e ] ),
							t
						);
					} ),
					( h.getCurrentIndex = function () {
						var e = null;
						return (
							h.savedStates.length < 1
								? ( e = 0 )
								: ( e = h.savedStates.length - 1 ),
							e
						);
					} ),
					( h.getHash = function ( e ) {
						var t = h.getLocationHref( e ),
							n;
						return ( n = h.getHashByUrl( t ) ), n;
					} ),
					( h.unescapeHash = function ( e ) {
						var t = h.normalizeHash( e );
						return ( t = decodeURIComponent( t ) ), t;
					} ),
					( h.normalizeHash = function ( e ) {
						var t = e.replace( /[^#]*#/, '' ).replace( /#.*/, '' );
						return t;
					} ),
					( h.setHash = function ( e, t ) {
						var n, i;
						return t !== ! 1 && h.busy()
							? ( h.pushQueue( {
									scope: h,
									callback: h.setHash,
									args: arguments,
									queue: t,
							  } ),
							  ! 1 )
							: ( h.busy( ! 0 ),
							  ( n = h.extractState( e, ! 0 ) ),
							  n && ! h.emulated.pushState
									? h.pushState( n.data, n.title, n.url, ! 1 )
									: h.getHash() !== e &&
									  ( h.bugs.setHash
											? ( ( i = h.getPageUrl() ),
											  h.pushState(
													null,
													null,
													i + '#' + e,
													! 1
											  ) )
											: ( r.location.hash = e ) ),
							  h );
					} ),
					( h.escapeHash = function ( t ) {
						var n = h.normalizeHash( t );
						return (
							( n = e.encodeURIComponent( n ) ),
							h.bugs.hashEscape ||
								( n = n
									.replace( /\%21/g, '!' )
									.replace( /\%26/g, '&' )
									.replace( /\%3D/g, '=' )
									.replace( /\%3F/g, '?' ) ),
							n
						);
					} ),
					( h.getHashByUrl = function ( e ) {
						var t = String( e ).replace(
							/([^#]*)#?([^#]*)#?(.*)/,
							'$2'
						);
						return ( t = h.unescapeHash( t ) ), t;
					} ),
					( h.setTitle = function ( e ) {
						var t = e.title,
							n;
						t ||
							( ( n = h.getStateByIndex( 0 ) ),
							n &&
								n.url === e.url &&
								( t = n.title || h.options.initialTitle ) );
						try {
							r.getElementsByTagName( 'title' )[ 0 ].innerHTML = t
								.replace( '<', '&lt;' )
								.replace( '>', '&gt;' )
								.replace( ' & ', ' &amp; ' );
						} catch ( i ) {}
						return ( r.title = t ), h;
					} ),
					( h.queues = [] ),
					( h.busy = function ( e ) {
						typeof e != 'undefined'
							? ( h.busy.flag = e )
							: typeof h.busy.flag == 'undefined' &&
							  ( h.busy.flag = ! 1 );
						if ( ! h.busy.flag ) {
							u( h.busy.timeout );
							var t = function () {
								var e, n, r;
								if ( h.busy.flag ) return;
								for ( e = h.queues.length - 1; e >= 0; --e ) {
									n = h.queues[ e ];
									if ( n.length === 0 ) continue;
									( r = n.shift() ),
										h.fireQueueItem( r ),
										( h.busy.timeout = o(
											t,
											h.options.busyDelay
										) );
								}
							};
							h.busy.timeout = o( t, h.options.busyDelay );
						}
						return h.busy.flag;
					} ),
					( h.busy.flag = ! 1 ),
					( h.fireQueueItem = function ( e ) {
						return e.callback.apply( e.scope || h, e.args || [] );
					} ),
					( h.pushQueue = function ( e ) {
						return (
							( h.queues[ e.queue || 0 ] =
								h.queues[ e.queue || 0 ] || [] ),
							h.queues[ e.queue || 0 ].push( e ),
							h
						);
					} ),
					( h.queue = function ( e, t ) {
						return (
							typeof e == 'function' && ( e = { callback: e } ),
							typeof t != 'undefined' && ( e.queue = t ),
							h.busy() ? h.pushQueue( e ) : h.fireQueueItem( e ),
							h
						);
					} ),
					( h.clearQueue = function () {
						return ( h.busy.flag = ! 1 ), ( h.queues = [] ), h;
					} ),
					( h.stateChanged = ! 1 ),
					( h.doubleChecker = ! 1 ),
					( h.doubleCheckComplete = function () {
						return (
							( h.stateChanged = ! 0 ), h.doubleCheckClear(), h
						);
					} ),
					( h.doubleCheckClear = function () {
						return (
							h.doubleChecker &&
								( u( h.doubleChecker ),
								( h.doubleChecker = ! 1 ) ),
							h
						);
					} ),
					( h.doubleCheck = function ( e ) {
						return (
							( h.stateChanged = ! 1 ),
							h.doubleCheckClear(),
							h.bugs.ieDoubleCheck &&
								( h.doubleChecker = o( function () {
									return (
										h.doubleCheckClear(),
										h.stateChanged || e(),
										! 0
									);
								}, h.options.doubleCheckInterval ) ),
							h
						);
					} ),
					( h.safariStatePoll = function () {
						var t = h.extractState( h.getLocationHref() ),
							n;
						if ( ! h.isLastSavedState( t ) )
							return (
								( n = t ),
								n || ( n = h.createStateObject() ),
								h.Adapter.trigger( e, 'popstate' ),
								h
							);
						return;
					} ),
					( h.back = function ( e ) {
						return e !== ! 1 && h.busy()
							? ( h.pushQueue( {
									scope: h,
									callback: h.back,
									args: arguments,
									queue: e,
							  } ),
							  ! 1 )
							: ( h.busy( ! 0 ),
							  h.doubleCheck( function () {
									h.back( ! 1 );
							  } ),
							  p.go( -1 ),
							  ! 0 );
					} ),
					( h.forward = function ( e ) {
						return e !== ! 1 && h.busy()
							? ( h.pushQueue( {
									scope: h,
									callback: h.forward,
									args: arguments,
									queue: e,
							  } ),
							  ! 1 )
							: ( h.busy( ! 0 ),
							  h.doubleCheck( function () {
									h.forward( ! 1 );
							  } ),
							  p.go( 1 ),
							  ! 0 );
					} ),
					( h.go = function ( e, t ) {
						var n;
						if ( e > 0 ) for ( n = 1; n <= e; ++n ) h.forward( t );
						else {
							if ( ! ( e < 0 ) )
								throw new Error(
									'History.go: History.go requires a positive or negative integer passed.'
								);
							for ( n = -1; n >= e; --n ) h.back( t );
						}
						return h;
					} );
				if ( h.emulated.pushState ) {
					var v = function () {};
					( h.pushState = h.pushState || v ),
						( h.replaceState = h.replaceState || v );
				} else
					( h.onPopState = function ( t, n ) {
						var r = ! 1,
							i = ! 1,
							s,
							o;
						return (
							h.doubleCheckComplete(),
							( s = h.getHash() ),
							s
								? ( ( o = h.extractState(
										s || h.getLocationHref(),
										! 0
								  ) ),
								  o
										? h.replaceState(
												o.data,
												o.title,
												o.url,
												! 1
										  )
										: ( h.Adapter.trigger(
												e,
												'anchorchange'
										  ),
										  h.busy( ! 1 ) ),
								  ( h.expectedStateId = ! 1 ),
								  ! 1 )
								: ( ( r =
										h.Adapter.extractEventData(
											'state',
											t,
											n
										) || ! 1 ),
								  r
										? ( i = h.getStateById( r ) )
										: h.expectedStateId
										? ( i = h.getStateById(
												h.expectedStateId
										  ) )
										: ( i = h.extractState(
												h.getLocationHref()
										  ) ),
								  i ||
										( i = h.createStateObject(
											null,
											null,
											h.getLocationHref()
										) ),
								  ( h.expectedStateId = ! 1 ),
								  h.isLastSavedState( i )
										? ( h.busy( ! 1 ), ! 1 )
										: ( h.storeState( i ),
										  h.saveState( i ),
										  h.setTitle( i ),
										  h.Adapter.trigger( e, 'statechange' ),
										  h.busy( ! 1 ),
										  ! 0 ) )
						);
					} ),
						h.Adapter.bind( e, 'popstate', h.onPopState ),
						( h.pushState = function ( t, n, r, i ) {
							if ( h.getHashByUrl( r ) && h.emulated.pushState )
								throw new Error(
									'History.js does not support states with fragement-identifiers (hashes/anchors).'
								);
							if ( i !== ! 1 && h.busy() )
								return (
									h.pushQueue( {
										scope: h,
										callback: h.pushState,
										args: arguments,
										queue: i,
									} ),
									! 1
								);
							h.busy( ! 0 );
							var s = h.createStateObject( t, n, r );
							return (
								h.isLastSavedState( s )
									? h.busy( ! 1 )
									: ( h.storeState( s ),
									  ( h.expectedStateId = s.id ),
									  p.pushState( s.id, s.title, s.url ),
									  h.Adapter.trigger( e, 'popstate' ) ),
								! 0
							);
						} ),
						( h.replaceState = function ( t, n, r, i ) {
							if ( h.getHashByUrl( r ) && h.emulated.pushState )
								throw new Error(
									'History.js does not support states with fragement-identifiers (hashes/anchors).'
								);
							if ( i !== ! 1 && h.busy() )
								return (
									h.pushQueue( {
										scope: h,
										callback: h.replaceState,
										args: arguments,
										queue: i,
									} ),
									! 1
								);
							h.busy( ! 0 );
							var s = h.createStateObject( t, n, r );
							return (
								h.isLastSavedState( s )
									? h.busy( ! 1 )
									: ( h.storeState( s ),
									  ( h.expectedStateId = s.id ),
									  p.replaceState( s.id, s.title, s.url ),
									  h.Adapter.trigger( e, 'popstate' ) ),
								! 0
							);
						} );
				if ( s ) {
					try {
						h.store = l.parse( s.getItem( 'History.store' ) ) || {};
					} catch ( m ) {
						h.store = {};
					}
					h.normalizeStore();
				} else ( h.store = {} ), h.normalizeStore();
				h.Adapter.bind( e, 'unload', h.clearAllIntervals ),
					h.saveState(
						h.storeState(
							h.extractState( h.getLocationHref(), ! 0 )
						)
					),
					s &&
						( ( h.onUnload = function () {
							var e, t, n;
							try {
								e =
									l.parse( s.getItem( 'History.store' ) ) ||
									{};
							} catch ( r ) {
								e = {};
							}
							( e.idToState = e.idToState || {} ),
								( e.urlToId = e.urlToId || {} ),
								( e.stateToId = e.stateToId || {} );
							for ( t in h.idToState ) {
								if ( ! h.idToState.hasOwnProperty( t ) )
									continue;
								e.idToState[ t ] = h.idToState[ t ];
							}
							for ( t in h.urlToId ) {
								if ( ! h.urlToId.hasOwnProperty( t ) ) continue;
								e.urlToId[ t ] = h.urlToId[ t ];
							}
							for ( t in h.stateToId ) {
								if ( ! h.stateToId.hasOwnProperty( t ) )
									continue;
								e.stateToId[ t ] = h.stateToId[ t ];
							}
							( h.store = e ),
								h.normalizeStore(),
								( n = l.stringify( e ) );
							try {
								s.setItem( 'History.store', n );
							} catch ( i ) {
								if (
									i.code !== DOMException.QUOTA_EXCEEDED_ERR
								)
									throw i;
								s.length &&
									( s.removeItem( 'History.store' ),
									s.setItem( 'History.store', n ) );
							}
						} ),
						h.intervalList.push(
							a( h.onUnload, h.options.storeInterval )
						),
						h.Adapter.bind( e, 'beforeunload', h.onUnload ),
						h.Adapter.bind( e, 'unload', h.onUnload ) );
				if ( ! h.emulated.pushState ) {
					h.bugs.safariPoll &&
						h.intervalList.push(
							a( h.safariStatePoll, h.options.safariPollInterval )
						);
					if (
						i.vendor === 'Apple Computer, Inc.' ||
						( i.appCodeName || '' ) === 'Mozilla'
					)
						h.Adapter.bind( e, 'hashchange', function () {
							h.Adapter.trigger( e, 'popstate' );
						} ),
							h.getHash() &&
								h.Adapter.onDomLoad( function () {
									h.Adapter.trigger( e, 'hashchange' );
								} );
				}
			} ),
			( ! h.options || ! h.options.delayInit ) && h.init();
	} )( window );
